MegaROM
This page was last modified 03:21, 10 April 2018 by Gdx. Based on work by Edevaldo and Mars2000you and others.
MegaROM logo.png

Contents

Introduction

A MegaROM is a cartridge that includes more ROM than the 64 KiB addressable through an MSX (sub)slot. To achieve this, the ROM is divided into blocks (commonly 8 or 16 KiB), which are mapped to different address ranges within the MSX slot. Blocks can be switched by writing to a few special addresses in the slot the cartridge is in.

A related term is "ROM mapper". This usually refers to the mechanism used to switch blocks, as seen from a programmer's point of view (see below). "MegaROM" usually refers to a cartridge that includes such a mechanism.

Very few exceptions aside, ROM cartridges have a power-of-2 size. Common MegaROM sizes are 1 Mbit (128 KiB) or 2 Mbit (256 KiB). But 4 Mbit (512 KiB) and even some bigger MegaROMs exist. MegaROMs usually have a "MegaROM" symbol on the cartridge label and/or box.

There exist several different types of ROM mapper. Some common ones are:

  • ASCII 8 KiB
  • ASCII 16 KiB
  • Konami without SCC
  • Konami with SCC

A special type of MegaROM is Konami's Sound Custom Chip (SCC). Besides a ROM mapper it also includes a sound chip. The SCC chip produces a characteristic sound, which is liked very much among MSX users.

A few MegaROM cartridges contain some battery-backed RAM. This RAM may be used to store save-games for example. Hydlide II is an example of this.

Description of known ROM Mappers

ASC8 (ASCII)

Rom size can be up to 1024kB (chip LZ93A13) or 2048kB (chip M60002). Several makers use this Rom mapper.

Bank (8kB) Switching address Initial Page
4000h~5FFFh (mirror: C000h~DFFFh) 6000h (mirrors: 6001h~67FFh) 0
6000h~7FFFh (mirror: E000h~FFFFh) 6800h (mirrors: 6801h~68FFh) 0
8000h~9FFFh (mirror: 0000h~1FFFh) 7000h (mirrors: 7001h~77FFh) 0
A000h~BFFFh (mirror: 2000h~3FFFh) 7800h (mirrors: 7801h~7FFFh) 0


Value format for MegaROMs with an extra SRAM

Xanadu (SRAM of 8kB):
Bits 0~4 = Page number (0 when SRAM because there is only one page)
Bit 5 = 1 to select the SRAM (writable on bank 8000h~9FFFh or A000h~BFFFh only)
Bits 6~7 = Unused

Royal Blood & Wizardry (SRAM of 8kB):
Bits 0~6 = Page number (0 when SRAM because there is only one page)
Bit 7 = 1 to select the SRAM (writable on bank 8000h~9FFFh or A000h~BFFFh only)

ESE-RAM (DIY cartridge called also Mega-SRAM that only contains SRAM):
Bits 0~6 = Page number (bit 6 avalaible with chip M60002 only)
Bit 7 = Enable writing. (write protected at initialization)

ASC16 (ASCII)

Rom size can be up to 2048kB (chip LZ93A13) or 4096kB (chip M60002). Several makers use this Rom mapper.

Bank (16kB) Switching address Initial Page
4000h~7FFFh (mirror: C000h~FFFFh) 6000h (mirrors: 6001h~7FFFh) 0 (0Fh for R-Type)
8000h~BFFFh (mirror: 0000h~7FFFh) 7000h (mirrors: 7001h~BFFFh) 0
Note: R-Type (384kB) uses same mapper but the page 0Fh remains fixed on bank 4000h~7FFFh. In addition, the page 0Fh is same as 17h (the last page).

Value format for MegaROMs with an extra SRAM

Hydlide 2 (SRAM of 2kB):
Bits 0~3 = Page number (0 when SRAM because there is only one page)
Bit 4 = 1 to select the SRAM (writable on bank 8000h~BFFFh only)
Bits 5~7 = Unused

ESE-RAM (DIY cartridge called also Mega-SRAM that only contains SRAM):
Bits 0~6 = Page number
Bit 7 = Enable writing. (write protected at initialization)

Agigongnyong Dooley - Dooley The Little Dinosaur (Daou)

Rom size is only 32kB. The Rom uses a mapper very specific not to select memory pages but for anti-piracy protection.

Bank Switching address Mode
4000h~BFFFh 4000h (mirrors: 4001h~BFFFh) 0

Description of modes

  • In mode 0, the read value = the value at corresponding address
  • In mode 1, the value = (value at address & F8h) or ((value at address x 4) & 4) or ((value at address / 2) & 3)
  • In mode 4, the value = (value at address & F8h) or ((value at address / 4) & 1) or ((value at address x 2) & 6)
  • In mode 3 and 7, the value = value at address 7
  • In mode 2, 5 and 6,
    if (the value at the address) & 7 = 1, 2 or 4 then the value = F8h
    if (the value at address) & 7 = 3, 5 or 6 then if mode = 2 then the value = (value at address & F8h) or ((value at address x 4) & 4) or (((value at address / 2) & 3) xor 7)
    if the mode = 5 then the value = (value at address & 7)
    if the mode = 6 then the value = (value at address & F8h) or ((value at address / 4) & 1) or (((value at address x 2) & 6) xor 7)

Cross Blaim (db-Soft)

Rom size is only 64kB.

Bank (16kB) Switching addresses Initial Page
4000h~7FFFh None Always 0
8000h~BFFFh 4045h 0

Game Master 2 (Konami)

Rom size is 128kB and SRAM is 8kB (2 pages of 4kB).

Bank (8kB) Switching address Initial Page
4000h~5FFFh None Always 0
6000h~7FFFh 6000h (mirrors: 6001h~6FFFh) 1
8000h~9FFFh 8000h (mirrors: 8001h~8FFFh) 2
A000h~BFFFh A000h (mirrors: A001h~AFFFh) 3


Value format
Bit 0~3 = Page number
Bit 4 = 1 to select the SRAM (writable on bank B000h~BFFFh only)
Bit 5 = SRAM page select (two pages of 4kB available)
Bit 6~7 = Unused

Generic8

Mapper based on a mix of Konami's MegaROMs. It is used by some emulators. If you use blueMSX, you need to select the Konami Generic mapper.

Bank (8kB) Switching address Initial Page
4000h~5FFFh 4000h (mirrors: 4001h~47FFh, 05000h~077FFh) 0
6000h~7FFFh 6000h (mirrors: 6001h~67FFh, 07000h~077FFh) 1
8000h~9FFFh 8000h (mirrors: 8001h~87FFh, 09000h~097FFh) 2
A000h~BFFFh A000h (mirrors: A001h~A7FFh, 0B000h~0B7FFh) 3

Generic16

Mapper similar to Generic8 but with pages of 16kB. It is used by some emulators. If you use blueMSX, you need to select the MSX-DOS 2 mapper, as this emulator, contrary to openMSX, does not have a specific mapper for the real Japanese MSX-DOS cartridge with extra RAM.

Bank (16kB) Switching address Initial Page
4000h~7FFFh 4000h (mirrors: 4001h~47FFh, 05000h~077FFh,
06000h~067FFh, 07000h~077FFh)
0
8000h~BFFFh 8000h (mirrors: 8001h~87FFh, 09000h~097FFh,
0A000h~0A7FFh, 0B000h~0B7FFh)
1

Golden Box (Zemina)

Golden Box is a Korean Megaram of 1024kB or 2048kB. The cartridge has two mappers switchable by writing to I/O port 0Fh.

Mode 8K Mode 16K
Bank (8kB) Switching address Initial Page Bank (16kB) Switching address Initial Page
4000h~5FFFh 4000h 0 4000h~7FFFh 4000h 0
6000h~7FFFh 4001h 0
8000h~BFFFh 4002h 0 8000h~9FFFh 4001h 0
A000h~BFFFh 4003h 0

Format of value to write to the port 0Fh:
Bit 0~4 = Unused.
Bit 4~5 = 01 to enable witting, 10 to write protect (initial status).
Bit 6~7 = 01 to select 16K mode, 10 to select 8K mode (initial status).

Harryfox Yuki no Maouhen (Micro Cabin)

Rom size is only 64kB.

Bank (16kB) Switching address Initial Page
4000h~7FFFh 6000h (mirrors: 6001h~6FFFh) 0
8000h~BFFFh 7000h (mirrors: 7001h~7FFFh) 1

Konami's MegaROMs with SCC or Sound cartridge SCC+

Konami's cartridges with an extra sound chip. Sound cartridge for (SD) Snatcher is a Mega-RAM of 64kB (expandable to 128kB) with a SCC+ chip compatible with the SCC.

Bank (8kB) Switching address Initial Page
4000h~5FFFh (mirror: C000h~DFFFh) 5000h (mirrors: 5001h~57FFh) 0
6000h~7FFFh (mirror: E000h~FFFFh) 7000h (mirrors: 7001h~77FFh) 1
8000h~9FFFh (mirror: 0000h~1FFFh) 9000h (mirrors: 9001h~97FFh) 2
A000h~BFFFh (mirror: 2000h~3FFFh) B000h (mirrors: B001h~B7FFh) 3


Value format for MegaRoms

Bit 0~5 = Page number. Set all of these bits to 1 at 9000h to enable the sound chip register addresses on bank 9800h~98FFh (see here to more details).
Bit 6~7 = Unused

Value format for the Sound Cartridge

Bit 0~5 = Page number. Set all of these bits to 1 at 9000h (in SCC mode) to enable the sound chip register addresses on bank 9800h~98FFh.
Bit 6 = Unused
Bit 7 = bit 7 to 1 and other bits to 0 at B000h (in SCC+ mode) to enable the sound chip registers addresses on bank B800h~B8FFh (see here to more details).

Konami's MegaROMs without SCC

Bank (8kB) Switching address Initial Page
4000h~5FFFh (mirror: C000h~DFFFh) None Always 0
6000h~7FFFh (mirror: E000h~FFFFh) 6000h (mirrors: 6001h~7FFFh) 1
8000h~9FFFh (mirror: 0000h~1FFFh) 8000h (mirrors: 8001h~9FFFh) Random
A000h~BFFFh (mirror: 2000h~3FFFh) A000h (mirrors: A001h~BFFFh) Random
Note: Hai no Majutsushi (RC-765) has an extra 8bit digital to analog converter. Each value to be sent (0 for -128 ~ FFh for +128) must be written at a corresponding address (5000h~5FFFh).

MegaRam DDX (Digital Design)

This is a MegaRam from Brazil, created by Ademir Carchano and cloned by several manufacturers, including DDX, and MSX users. Memory size varies from 256kB to 2048kB depending on the model (II-MEGARAM, MegaRam 2 mega, etc). DDX created the MegaRAM Disk, that has a disk Rom and allows the RAM to be used as a RAM disk.

Bank (8kB) Switching address Initial Page
4000h~5FFFh 4000h 0
6000h~7FFFh 6000h 1
8000h~9FFFh 8000h 2
A000h~BFFFh A000h 3

A writing to I/O port 8Eh enables the Megaram. Ram is write protected, you can select pages. A reading of same port will allow writing to RAM.

MSX-DOS 2 (ASCII)

Bank (16kB) Switching address Initial Page
4000h~7FFFh 7FFEh (v.2.20) or 7FF0h (v.2.3x of MSX Turbo R) 0

Note: Many DIY cartridges use 6000h instead of 7FFEh as switching address

PAC (Panasoft)

8kB SRAM cartridge. Same device is included in FM-PAC cartridge.

Bank (8kB) Switching address Initial Page
4000h~5FFFh None 0
Note: Write 4Dh to 5FFEh and 69h to 5FFFh to select the SRAM. Write 0 to 5FFEh and 5FFFh disable the SRAM.

Super Game World 30/64/80 (Screen Software)

This mapper is used for some MegaRoms containing several hacked games. It's same mapper as Golden Box in mode 8k.

Bank (8kB) Switching address Initial Page
4000h~5FFFh 4000h 0
6000h~7FFFh 4001h 0
8000h~9FFFh 4002h 0
A000h~BFFFh 4003h 0

Super Game 90 (Unknown Publisher)

MegaRom released in Korea. Rom size is 1024kB. It contains several hacked games. Switching page must be specified to I/O port 77h, Switching address is not used.

Bank (8kB or 16kB) Switching I/O port Initial Page
4000h~7FFFh 77h 0
8000h~9FFFh and A000h~BFFFh 77h 0


Value format
Bit 0 ~ 5 = 16KB page number
Bit 6 = If set, the first 8kB of specified page will be swapped with second part of 8K on bank 8000h~BFFFh.
Bit 7 = If this bit is reset, the specified page will be too on bank 8000h~BFFFh otherwise it's the next page.

Super Game World 126 (Screen Software)

This mapper is used for a MegaRoms of 2048kB that containing several hacked games. It's same mapper as Golden Box in mode 16k.

Bank (16kB) Switching address Initial Page
4000h~7FFFh 4000h 0
8000h~BFFFh 4001h 0

Super Lode Runner (Irem)

Rom size is 128kB.

Bank (16kB) Switching address Initial Page
8000h~BFFFh 0000h (mirrors: 0001h~3FFFh) (no need to select the slot!) 0

Note: Switching address mirrors cause issue on a real MSX turbo R.

Super Pierrot (Taito - Nidecom)

Rom size is 128kB.

Bank (16kB) Switching address Initial Page
4000h~7FFFh 4000h (mirrors: 4001h~4FFFh, 6000h~6FFFh, 8000h~8FFFh, A000h~AFFFh) 0
8000h~BFFFh 5000h (mirrors: 5001h~5FFFh, 7000h~7FFFh, 9000h~9FFFh, B000h~BFFFh) 0

Super Suwanggi - Super Altered Beast (Clover Soft)

Rom size is only 64kB.

Bank (16kB) Switching address Initial Page
4000h~7FFFh None Always 0
8000h~BFFFh 8000h  ?

Value format
Bit 0 = Unused
Bit 1 ~ 3 = Page number
Bit 4 ~ 7 = Unused

Zemina 8k

Used for several MegaRoms released in Korea by Zemina. This mapper is similar to Konami's MegaROMs without SCC.

Bank (8kB) Switching address Initial Page
4000h~5FFFh (mirror: C000h~DFFFh) 4000h (mirrors: 4001h~5FFFh) 0
6000h~7FFFh (mirror: E000h~FFFFh) 6000h (mirrors: 6001h~7FFFh) 1
8000h~9FFFh (mirror: 0000h~1FFFh) 8000h (mirrors: 8001h~9FFFh) 2
A000h~BFFFh (mirror: 2000h~3FFFh) A000h (mirrors: A001h~BFFFh) 3

Zemina 16k

Used for some MegaRoms released in Korea by Zemina.

Bank (16kB) Switching address Initial Page
4000h~7FFFh (mirror: C000h~FFFFh) 4000h (mirrors: 4001h~7FFFh) 0
8000h~BFFFh (mirror: 0000h~7FFFh) 8000h (mirrors: 8001h~BFFFh) 1

Links