#include "defines.h" #include #include #include "gamepad.h" #ifdef NES_ENABLED void init_nes_gamepad() { NES_PORT_DDR |= 1<>NES_DATA_PIN)&1)<>SNES_DATA_PIN)&1)<= 0xF0) return 0; TCNT0 = 0; while(N64SIGNAL) if (TCNT0 >= 0xF0) return 0; data[b] = data[b]<<1; if (TCNT0 < 0x24 * F_CPU / 20000000UL) data[b] |= 1; } } return 1; } #endif #ifdef SMD_ENABLED void init_smd_gamepad() { SMD_SELECT_PORT_DDR |= 1<>SMD_DATA0_PIN)&1) | (((SMD_DATA_PORT_PIN>>SMD_DATA1_PIN)&1)<<1) | (((SMD_DATA_PORT_PIN>>SMD_DATA2_PIN)&1)<<2) | (((SMD_DATA_PORT_PIN>>SMD_DATA3_PIN)&1)<<3) | (((SMD_DATA_PORT_PIN>>SMD_DATA4_PIN)&1)<<4) | (((SMD_DATA_PORT_PIN>>SMD_DATA5_PIN)&1)<<5); SMD_SELECT_PORT_PORT |= 1<>SMD_DATA0_PIN)&1) | (((SMD_DATA_PORT_PIN>>SMD_DATA1_PIN)&1)<<1) | (((SMD_DATA_PORT_PIN>>SMD_DATA2_PIN)&1)<<2) | (((SMD_DATA_PORT_PIN>>SMD_DATA3_PIN)&1)<<3) | (((SMD_DATA_PORT_PIN>>SMD_DATA4_PIN)&1)<<4) | (((SMD_DATA_PORT_PIN>>SMD_DATA5_PIN)&1)<<5); return ((uint16_t)gamepad_data_high<<8) | gamepad_data_low; } #endif #ifdef DUALSHOCK_ENABLED void init_dualshock_gamepad() { DUALSHOCK_PORT_DDR |= (1<> bit) & 1) // 1? DUALSHOCK_PORT_PORT |= (1<> DUALSHOCK_DATA_PIN) & 1) // Reading data... 1? data[b] |= (1<> DUALSHOCK_ACK_PIN)&1)) // ACK reveived { ok = 1; break; } _delay_us(1); } if ((b < 2) && !ok) return 0; // No ACK in first two bytes? Aboooort! Saving time } */ } DUALSHOCK_PORT_PORT |= (1<