Cartridge consists of:
256 kB PRG-ROM
256 kB CHR-ROM
8MB SPI Flash ROM (EXROM) that stores DPCM audio speech
XC9572 CPLD
CPLD makes serial SPI access to the EXROM and returns parallel data at $C000.
The current EXROM address can be set via $c000 and can be automatically incremented after each read (so that NES APU can fetch samples from $c000-$cfff)
CPU:
| $5000 |$6000 |$8000 |$a000 |$c000 |$d000 |$e000 |
+--------+------------+------------+------------+-------+-------+------------+
| 1 |bank_reg0 |bank_reg1 |bank_reg2 |EXROM |7 |4 |
PPU:
|$0000 |$1000 |
+----------+----------+
|bank_reg3 |$3d |
[LLLLLLLL] @ $8000-$8fff: SET IRQ RELOAD VALUE
++++++++---- IRQ RELOAD VALUE
[........] @ $9000-$9fff: FORCE IRQ RELOAD ON NEXT PPU A12 EDGE
[........] @ $a000-$afff: DISABLE IRQ & CLEAR COUNTER
[........] @ $b000-$bfff: ENABLE IRQ
[B.......] @ $c000-$cfff: SET EXROM ADDRES
+---------- exrom_addres(22 downto 0) <= exrom_address(21 downto 0) & B;
[......M.] @ $d000-$dfff: EXROM ADDRESS AUTO INCREMENT
+---- 1:exrom_address is incremented after each cpu read cycle from $4800-$4fff / $c000-$cfff
[iivvvvvv] @ $e000-$ffff: BANK REGISTER
||++++++-- value to write at this register
++-------- register to choose
NES ROM consists of PRG data, CHR data and then the EXROM in that orderr.
Because the total PRG data exceeds 8MB, ines1 header cannot be used.
--
free space:
$132001-20002D