# Sega Saturn Memory Map Last modified 2020-01-11 Compiled from various resources, listed at end. Most of this information is unverified, so let me know if there's issues here. Note the following: - Unmapped/"open bus" regions are unlisted - "Mirrors At" is what interval the section contents are repeated at "Mirroring & Open Bus" by Retro Game Mechanics Explained[1] is very helpful in understanding this document. # SH-2 (and other devices connected to the SCU) | Start Addr | End Addr | Size | Mirrors At | Description | |------------|------------|------------|------------|------------------| | 0x00000000 | 0x000FFFFF | 0x00100000 | 0x00080000 | Boot ROM | | 0x00100000 | 0x0017FFFF | 0x00100000 | 0x00000080 | SMPC registers | | 0x00180000 | 0x001FFFFF | 0x00080000 | 0x00010000 | Backup RAM | | 0x00200000 | 0x002FFFFF | 0x00100000 | ---------- | Work RAM Low | | 0x02000000 | 0x03FFFFFF | 0x02000000 | ---------- | A-Bus CS0 | | 0x04000000 | 0x04FFFFFF | 0x01000000 | ---------- | A-Bus CS1 | | 0x05800000 | 0x058FFFFF | 0x00100000 | ---------- | A-Bus CS2 | | 0x05A00000 | 0x05AFFFFF | 0x00100000 | See notes | Sound RAM | | 0x05B00000 | 0x05BFFFFF | 0x00100000 | 0x00001000 | SCSP registers | | 0x05C00000 | 0x05C7FFFF | 0x00080000 | ---------- | VDP1 VRAM | | 0x05C80000 | 0x05CFFFFF | 0x00080000 | 0x00040000 | VDP1 Framebuffer | | 0x05D00000 | 0x05D7FFFF | 0x00080000 | ---------- | VDP1 Registers | | 0x05E00000 | 0x05EFFFFF | 0x00100000 | 0x00080000 | VDP2 VRAM | | 0x05F00000 | 0x05F7FFFF | 0x00080000 | 0x00001000 | VDP2 CRAM | | 0x05F80000 | 0x05FBFFFF | 0x00040000 | 0x00000200 | VDP2 registers | | 0x05FE0000 | 0x05FEFFFF | 0x00010000 | 0x00000100 | SCU registers | | 0x06000000 | 0x07FFFFFF | 0x02000000 | 0x00100000 | Work RAM High | - Backup RAM on odd bytes only; even bytes read $FF and write to that addr - 1 - Any attached cartridges are mapped to A-Bus CS0 and CS1 in a cart-specific manner. - CD-ROM registers are mapped to A-Bus CS2 - 68k's work RAM is mirrored depending on the value of register MEM4MB (bit 9 of $05B00400) - If set, all 512K of 68K-WRAM is mapped to the first 0x800000, and the remainder is open-bus - If cleared, the first 256K of 68K-WRAM is mirrored 4 times - The framebuffer is the one *not* being displayed. - Most of the VDP1 register area is unmapped - VDP1 CRAM only works properly with word-wise writes. Byte-wise writes cause corruption in the un-written half of the word ## Sources [1] https://youtu.be/PvfhANgLrm4 [2] https://wiki.yabause.org/index.php5?title=SH-2CPU [3] https://antime.kapsi.fi/sega/files/ST-097-R5-072694.pdf