msxnet > MSX Utilities > Creating ROM images from real cartridges

Creating ROM images from real cartridges

You have this really rare MSX cartridge, and you'd like to play it on an emulator and share it with the world. How do you proceed? Here I'd like to explain just how to do that.

For this purpose, I've written two MSX programs, getrom.bin and saverom.com.

Depending on what cartridge type you want to save, you should make your choice. SaveROM requires all the information from the user, but GetROM autodetects it for you; unfortunally this does not work for a whole lot of cartridges.

GetROM.BIN

GetROM.BIN is a MSX BASIC binary; you need to start if from MSX BASIC by typing BLOAD "GETROM.BIN",R. After this you'll get a list of what cartridges and other ROMs GetROM has found. Just type the number to the left and supply a filename, and the cartridge is saved.

GetROM supports the following:

GetROM has some limitations: Solid Snake is not saved correctly (it is saved from memory area 8000h - 9FFFh so the last 800h bytes are garbled (SCC memory area). Only Solid Snake has this problem since it is the only 4 megabit with SCC. Also, GetROM.BIN hangs under Disk BASIC 2 while saving.

SaveROM.COM

SaveROM is written to be powerful and complete. I expect every cartridge can be saved using it, but the user has to supply all the information, in the form of addresses and block numbers.

SaveROM has full support for page 0 and 3. It is an MSX-DOS program, you must start it from the command line typing the filename after it.

After starting SaveROM it'll first ask in which primary slot it is. If this slot is expanded, the secondary slot is also asked.

Next, SaveROM asks for the type. There are 7 types: Normal, ASCII 8 kB, ASCII 16 kB, Konami, Konami SCC, Custom and Custom IO. Cycling through them is done with cursor keys up and down. The selection is confirmed with the RETURN key.

The Normal type will save a normal ROM. The start and end addresses are asked.

So if you want to save the main BIOS, the addresses are 0 and 7FFF. For the Extended BIOS it is 0 and 3FFF.

The Custom and Custom IO types will save a megaROM. The following items are required:

The ASCII 8 kB, ASCII 16 kB, Konami and Konami SCC types will save their megaROM types. The switch address, save address and block size are preset, which are listed in the examples below. The following items are required:

The values are always hex. Actually, value of First Block to Last Block is written to Switch Address (or Switch Port), and Block Size is saved every itteration from address Save Address. If the First Block is higher the Last Block, the itteration is done in reverse order. The current block to be saved is displayed in hex as a progress indicator.

So for example:

Well that's enough examples. If you don't have fscking clue what you should enter when saving your cartridge, ask a programmer and he'll probably know. You can also save the first 32 kB with GetROM and send it to a programmer (me for example), then she/he can find out what type it is.

Changes: (thanks to tsjakoe)
- added support for dumping memory switched using I/O ports.
- fixed a bug causing a file to not close when the disk is full.
v1.2:
- full MSX-DOS2 support, which allows saving to FAT16 drives, and use sub-directories.
- fixed a bug causing dumping megarom 00-FF range to get in an infinite loop.
- megaROM question has become a type select.
- added memory overview of pages containing something.
- added display for megarom block number as a progress indicator.
v1.1:
- fixed a bug causing file creation to fail in MSX-DOS2.
- fixed a bug which didn't restore the slot in page 1 when only page 1 was saved.


BiFi <bifi@msxnet.org>