Home‎ > ‎Technical Info‎ > ‎Sega Genesis / Megadrive‎ > ‎

Memory Map

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 Map

The 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

I/O @ 0xA10000

 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

Z80 Memory Map

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 Map

The 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