# SummerCart64 Firmware A FPGA firmware written in Verilog for SummerCart64. # Technical Reference Manual ## Bus peripheral addresses - **`0x1000 0000 - 0x13FF FFFF`** - [R/W] *SDRAM Memory* - **`0x1D00 0000 - 0x1D00 07FF`** - [R/W] *EEPROM Memory* - **`0x1E00 0000 - 0x1E00 0007`** - [R/W] *Cart Registers* ## Memory spaces ### SDRAM Memory Base address: **`0x1000 0000`**\ Length: **`64 MB`**\ Access: Read or Write, 2 byte (16 bit) aligned 64 MB of SDRAM memory. Available on the bus when **SDRAM** bit in **CART->CR** register is set. Used as ROM storage. ### EEPROM Memory Base address: **`0x1D00 0000`**\ Length: **`2 kB`**\ Access: Read or Write, 4 byte (32 bit) aligned 2 kB of EEPROM Memory. Available on the bus when **EEPROM_PI** bit in **CART->CR** register is set. Used to upload/download EEPROM contents to/from PC. ## Registers ### Cart (**CART**) registers Base address: **`0x1E00 0000`** #### Configuration register (**CR**) Address offset: **`0x00`**\ Powerup value: **`0b0000 0000`**\ Soft reset value: **`0b00xx x000`**\ Access: Read or write, 4 byte (32 bit) aligned This register is used to enable or disable various modules available on the cart. 31:5 | 4 | 3 | 2 | 1 | 0 ------|------------|-----------|---|----------|--- 0 | EEPROM_16K | EEPROM_EN | 0 | SDRAM_EN | 0 x | R/W | R/W | x | R/W | x - Bits 31:5: Reserved. Reads as 0, writes are ignored but it's recommended to be set as 0 for future compatibility. - Bit 4 **EEPROM_16K**: Sets ID returned by EEPROM to identify itself as 4k or 16k variant. - 0: EEPROM 4k variant - 1: EEPROM 16k variant - Bit 3 **EEPROM_EN**: Enable EEPROM access through SI bus. - 0: EEPROM SI access disabled - 1: EEPROM SI access enabled - Bit 2: Reserved. Reads as 0, writes are ignored but it's recommended to be set as 0 for future compatibility. - Bit 1 **SDRAM_EN**: Enable SDRAM access at address base **`0x1000 0000`**. When disabled bootloader flash image is mapped at this address. Cleared by hardware on N64 Reset/NMI event. - 0: SDRAM disabled - 1: SDRAM enabled - Bit 0: Reserved. Reads as 0, writes are ignored but it's recommended to be set as 0 for future compatibility. - 0: Flash disabled - 1: Flash enabled #### CIC and TV type override register (**CIC_TV**) Address offset: **`0x04`**\ Powerup value: **`0x0000 0000`**\ Access: Read or write, 4 byte (32 bit) aligned This register is used for PC -> bootloader communication. 31:6 | 5:4 | 3:0 --------|---------|---------- SWITCH | TV_TYPE | CIC_TYPE R/W | R/W | R/W - Bits 31:6 **SWITCH**: Additional bits that can be passed to bootloader, currently unused. - Bits 5:4 **TV_TYPE**: Overrides TV type in bootloader. Used only when **CIC_TYPE** value is valid (values 1 - 7). - 0: PAL TV type - 1: NTSC TV type - 2: MPAL TV type - 3: No TV type override - use TV type provided by ROM header - Bits 3:0 **CIC_TYPE**: Overrides CIC type in bootloader. - 0: No CIC type override - use CIC type determined from ROM bootcode - 1: CIC 5101 - 2: CIC 6101/7102 - 3: CIC 6102/7101 - 4: CIC X103 - 5: CIC X105 - 6: CIC X106 - 7: CIC 8303 - 8 - 15: Same effect as value 0