The Sega Genesis is technically split up into 3 distinct memory spaces: 68K, Z80, and VDP. In reality, the Z80 memory space is mapped into the 68K memory space and the VDP memory is hidden behind a few data and control registers also mapped in the 68k memory space.68K Memory MapThe Motorola 68K processor provides a 24bit address bus on the Sega Genesis allowing contiguous addressing of up to 16MB.
| Start Address | End Address | Size* | Description | | 0x000000 | 0x3FFFFF | 4MB | Cartridge Address Space | | 0x400000 | 0x7FFFFF | 4MB | Reserved - used by Sega CD (Backup RAM, see below) and 32x | | 0x800000 | 0x9FFFFF | 2MB | Reserved - used by 32x | | 0xA00000 | 0xA0FFFF | 64KB | Z80 Address Space (see below) | | 0xA10000 | 0xA1001F | 32 | I/O (see below) | | 0xA10020 | 0xA10FFF | | Reserved | | 0xA11000 | 0xA11001 | | Memory Mode Register | | 0xA11002 | 0xA110FF | | Reserved | | 0xA11100 | 0xA11101 | | Z80 Bus Request | | 0xA11102 | 0xA111FF | | Reserved | | 0xA11200 | 0xA11201 | | Z80 Reset | | 0xA11202 | 0xA12FFF | | Reserved | | 0xA13000 | 0xA130FF | | #TIME range - accesses here strobe #TIME signal - used for RAM/bank switching on carts | | 0xA13100 | 0xA13FFF | | Reserved | | 0xA14000 | 0xA14003 | | TMSS Register | | 0xA14004 | 0xBFFFFF | | Reserved | | 0xC00000 | 0xC00003 | 2 | VDP Data | | 0xC00004 | 0xC00007 | 2 | VDP Control | | 0xC00008 | 0xC00009 | | VDP HV Counter | | 0xC0000A | 0xC00010 | | Reserved | | 0xC00011 | 0xC00011 | | PSG | | 0xC00012 | 0xDFFFFF | | Reserved | | 0xE00000 | 0xFFFFFF | 64KB | RAM - mirrored across range, most games access it at 0xFF0000 -> 0xFFFFFF |
*size refers to the useful size within the range, excluding any mirroring
| Start Address | End Address | Description | | 0xA10000 | 0xA10001 | Version Register | | 0xA10002 | 0xA10003 | Controller 1 Data | | 0xA10004 | 0xA10005 | Controller 2 Data | | 0xA10006 | 0xA10007 | Expansion Port Data | | 0xA10008 | 0xA10009 | Controller 1 Control | | 0xA1000A | 0xA1000B | Controller 2 Control | | 0xA1000C | 0xA1000D | Expansion Port Control | | 0xA1000E | 0xA1000F | Controller 1 Serial Transmit | | 0xA10010 | 0xA10011 | Controller 1 Serial Receive | | 0xA10012 | 0xA10013 | Controller 1 Serial Control | | 0xA10014 | 0xA10015 | Controller 2 Serial Transmit | | 0xA10016 | 0xA10017 | Controller 2 Serial Receive | | 0xA10018 | 0xA10019 | Controller 2 Serial Control | | 0xA1001A | 0xA1001B | Expansion Port Serial Transmit | | 0xA1001C | 0xA1001D | Expansion Port Serial Receive | | 0xA1001E | 0xA1001F | Expansion Port Serial Control |
The Zilog Z80 processor provides a 16bit address bus on the Sega Genesis allowing contiguous addressing of up to 64KB.
| Start Address | End Address | Size* | Description | | 0x0000 | 0x1FFF | 8KB | RAM | | 0x2000 | 0x3FFF | 8KB | RAM (mirror) | | 0x4000 | 0x5FFF | 4B | YM2612 | | 0x6000 | 0x60FF | 1B | Bank (0x8000) Address Register, shift in the 9bit address through D0 one bit at a time :( | | 0x6100 | 0x7EFF | 7680B | Unused | | 0x7F00 | 0x7FFF | 32 | VDP - only valid from 0x7F00 -> 0x7F1F, others crash the system | | 0x7F11 | 0x7F11 | 1 | PSG - this is where most PSG accesses are made by the Z80 | | 0x8000 | 0xFFFF | 32KB | Bank Area (32KB of 68k ROM visible here, accesses here steal cycles from the 68k)
|
*size refers to the useful size within the range, excluding any mirroring Backup RAM Cart Memory MapThe Backup RAM Cart does not pull the #CART_IN signal low, this allows the SEGA CD BIOS to load.
| Start Address | End Address | Description | | 0x400000 | 0x4FFFFF | Cart ID (see below) - mirrored across range | | 0x600000 | 0x6FFFFF | Static RAM, only lower byte (D7-D0) is used | | 0x700000 | 0x7FFFFF | Write Protect Latch, D0 = 1 writing is disabled, D0 = 0 writing is enabled - mirrored across range |
Cart ID is a 3 bit register which tells the Genesis / Megadrive what size the Backup RAM Cart is. The official size was 2045 blocks. The supported sizes are as follows: | Cart ID Value | Size (Kbit) | Size (KB) | Blocks | | 0x00 | 64 Kbit | 8 KB | 125 | | 0x01 | 128 Kbit | 16 KB | 253 | | 0x02 | 256 Kbit | 32 KB | 509 | | 0x03 | 512 Kbit | 64 KB | 1021 | | 0x04 | 1024 Kbit | 128 KB | 2045 | | 0x05 | 2048 Kbit | 256 KB | 4093 | | 0x06 | 4096 Kbit | 512 KB | 8189
|
|