/** NESController.h * Brian Pescatore, bhp & Tom Gowing, teg25 * Contains the many #defines used inside of NESController.c * The system is 100% configurable from this file alone. */ /************ Debug print selection *************/ // #define DEBUG 1 #if DEBUG // #define DBG_NES1_ONLY // #define DBG_NES2_ONLY // #define DBG_SWITCHING #endif /******** IO port definitions **************/ // Controller 1 #define NES1_LATCH_DDR DDRA #define NES1_LATCH_PORT PORTA #define NES1_LATCH_BIT (1<<2) #define NES1_CLOCK_DDR DDRA #define NES1_CLOCK_PORT PORTA #define NES1_CLOCK_BIT (1<<0) #define NES1_DATA_PORT PORTA #define NES1_DATA_DDR DDRA #define NES1_DATA_PIN PINA #define NES1_DATA_BIT (1<<4) // Controller 2 #define NES2_LATCH_DDR DDRA #define NES2_LATCH_PORT PORTA #define NES2_LATCH_BIT (1<<3) #define NES2_CLOCK_DDR DDRA #define NES2_CLOCK_PORT PORTA #define NES2_CLOCK_BIT (1<<1) #define NES2_DATA_PORT PORTA #define NES2_DATA_DDR DDRA #define NES2_DATA_PIN PINA #define NES2_DATA_BIT (1<<5) /********* IO port manipulation macros **********/ // Controller 1 #define NES1_LATCH_LOW() do { NES1_LATCH_PORT &= ~(NES1_LATCH_BIT); } while(0) #define NES1_LATCH_HIGH() do { NES1_LATCH_PORT |= NES1_LATCH_BIT; } while(0) #define NES1_CLOCK_LOW() do { NES1_CLOCK_PORT &= ~(NES1_CLOCK_BIT); } while(0) #define NES1_CLOCK_HIGH() do { NES1_CLOCK_PORT |= NES1_CLOCK_BIT; } while(0) #define NES1_GET_DATA() (NES1_DATA_PIN & NES1_DATA_BIT) // Controller 2 #define NES2_LATCH_LOW() do { NES2_LATCH_PORT &= ~(NES2_LATCH_BIT); } while(0) #define NES2_LATCH_HIGH() do { NES2_LATCH_PORT |= NES2_LATCH_BIT; } while(0) #define NES2_CLOCK_LOW() do { NES2_CLOCK_PORT &= ~(NES2_CLOCK_BIT); } while(0) #define NES2_CLOCK_HIGH() do { NES2_CLOCK_PORT |= NES2_CLOCK_BIT; } while(0) #define NES2_GET_DATA() (NES2_DATA_PIN & NES2_DATA_BIT) /************ Timing Variable Setup *************/ #define UPDATE_TIME 2 volatile char update_timer = UPDATE_TIME; #define RESET_UPDATE_TIMER do { update_timer = UPDATE_TIME; } while(0) #define SWITCH_TIME 30 volatile char switch_timer = SWITCH_TIME; #define RESET_SWITCH_TIMER do { switch_timer = SWITCH_TIME; } while(0)