Back

Main Cpu Memory Map

Visual Summary

.00000.10000.20000.30000.40000.50000.60000.70000.80000.90000.A0000.B0000.C0000.D0000.E0000.F0000
0..... Program Rom* (maximum size?)
1.....
2.....
3.....
4..... Work Ram Color Ram Address Reflect Fio Registers Timer Register Work Ram
5.....
6..... Graphics Ram Fdp Regs Graphics Ram Fdp Regs
7.....
8.....
9.....
A.....
B.....
C..... Dual-Port Ram Sound Reset
D.....
E.....
F.....

The actual (non-mirrored) size of each region is shown in green, if visible. (very small regions are indicated by a triangle in the corner).

Address Map

NameAddress BitsAddress
Space
WidthR/WStartReal Size
Program Rom[00?a aaaa aaaa aaaa aaaa aaAA]*data/prg*32-bitR*$000000$200000?*
Work Ram[0100 00.a aaaa aaaa aaaa aaAA]
[0100 111a aaaa aaaa aaaa aaAA]
data/?32-bitR/W$400000$20000
Color Ram[0100 010. .aaa aaaa aaaa aaAA]data/?32-bitR/W$440000$8000
Address Reflect?[0100 110. .... .... aaaa aaaa]data/?8-bit?R?$480000$100
Fio Registers[0100 101. .... .... ...a aaaa]data/?8-bitR/W$4A0000$20
Timer Register[0100 110. .... .... .... ...A]data/?16-bit?R/W$4C0000$2
Graphics Ram[0110 .0aa aaaa aaaa aaaa aaaA]data/prg?16-bitR/W$600000$40000
Fdp Registers[0110 .110 0000 0000 000a aaaA]data/?16-bitR/W$660000$20
Dual-Port Ram[1100 0... .... .aaa aaaa aaaa]data/?8-bitR/W$C00000$800
Sound Reset Clear[1100 1... .... ...0 .... ....]data/?32-bitW?$C80000N/A
Sound Reset Assert[1100 1... .... ...1 .... ....]data/?32-bitW?$C80100N/A

*The size and mapping of program rom depends on the cartridge. (but i think all extant games are basically the same. EXCEPT: Kirameki, which detects writes near address $300000 and switches the audio cpu program rom banks accordingly (TODO))

address bits legend:

0/1
mapping bit (must match)
.
doesn't matter
a
"real" address bit
A
address bit that just selects a byte within the data bus

Notes

Accessing unmapped addresses will freeze the cpu, not trigger a bus error.

The fdp registers occupy exactly $20 bytes of memory, and are not mirrored, unlike everything else (e.g. reading from $660020 will freeze).

Color ram is mapped as 32-bit, but the first (highest) byte of each long-word is not connected to ram.

Reading from "Address Reflect" returns the low byte of the address as data. I'm not sure what the point of this is, nor of what happens when you write to it.

todo: what does read/write actually MEAN? like, you can try to write to program rom, nothing will happen though. and some registers (e.g. FIO) have different behavior on write, while some act like RAM. also, need to test what happens when reading from "address reflect" or reading from sound reset
  • sound reset reads [18, FC, 00, FF] (repeat)