#include #define NOP() do { __asm__ __volatile__ ("nop"); } while (0) // used for a very short delay #define LO 0x00 #define HI 0xFF #define TRUE 0x00 //FALSE is ANYTHING but TRUE, the value signifies the error number //asci table #define char_A 0x41 #define char_C 0x43 #define char_N 0x4e #define char_E 0x45 #define char_P 0x50 #define char_R 0x52 #define char_S 0x53 #define char_Y 0x59 #define char_EOF 0x1A //file header types #define ERASE 1 #define NES 2 #define SNES 3 #define SPI 4 #define JTAG 5 #define COPY 6 //file header feilds #define PRG_BANKS_16 header[4] #define CHR_BANKS_8 header[5] #define MAP_LO header[6] #define MAP_HI header[7] //Mapper numbers #define NROM 0 #define MMC1 1 #define UxROM 2 #define CNROM 3 #define MMC3 4 #define MMC2 9 #define MMC4 10 #define ACTION53 28 #define IREM 65 #define FME7 69 #define VRC4 21 #define VRC4alt 23 #define NSF 255 //board versions #define EPROM0 10 #define EPROM1 11 #define EPROM2 12 #define FLASH0 20 #define FLASH1 21 #define DISCRETE0 30 #define CA13n 7 //PIN DEFINITIONS //AUX PORTD #define EXP0 PD0 //RESET_n on SNES #define LED PD1 #define EXP9 PD1 //dual purposed pin #define USBP PD2 #define IRQ PD3 #define USBM PD4 #define CIA10 PD5 #define BL PD6 #define XOE PD7 //Only X_OE on purple and green boards //X_OE and X_CLK on yellow final boards //CTL PORTC #define M2 PC0 #define PCE PC1 //SNES /ROMSEL #define PRW PC2 #define AXL PC3 //Free on green and yellow boards //Also AXL /OE on Yellow boards #define CRD PC4 //SNES /RD #define CWR PC5 //SNES /WR #define CICE PC6 #define AHL PC7 //Also AXL on green proto boards //PORT DEFINITIONS #define ADDR_OUT PORTA #define ADDR_IN PINA #define ADDR_DDR DDRA #define DATA_OUT PORTB #define DATA_IN PINB #define DATA_DDR DDRB //#define UP_ADDR PORTB //second revision moves this to PORTA and combines AXL/AHL //#define X_ADDR PORTB #define CTL_OUT PORTC #define CTL_IN PINC #define CTL_DDR DDRC #define AUX_OUT PORTD #define AUX_IN PIND #define AUX_DDR DDRD #define DATA_IP() DATA_DDR = LO #define DATA_OP() DATA_DDR = HI #define DATA_HI() DATA_OUT = HI #define DATA_LO() DATA_OUT = LO #define ADDR_IP() ADDR_DDR = LO #define ADDR_OP() ADDR_DDR = HI #define ADDR_HI() ADDR_OUT = HI #define ADDR_LO() ADDR_OUT = LO //AHL, AXL, are always output and high, unless individually asserted. #define CTL_IP() CTL_DDR = 0b10001000// &= ((1< high #define LATCH_AXL() CTL_OUT &= ~(1< high #define M2_IP() CTL_DDR &= ~(1< low for CPU access cycle, and takes PRG /CE high if it was low #define PCE_HI() CTL_OUT |= (1<