msxnet.org > 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 a DOS1 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 secondairy slot is also asked.
Next, SaveROM askes whether it is a megaROM. If not, 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.

If you select megaROM, the following items are required:

The values are always hex. Actually, value of First Block to Last Block is written too Switch Address, 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.

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 32K with GetROM and send it to a programmer (me for example), then she/he can find out what type it is.

The source of SaveROM is available: saverom.mac.


Sean Young <sean@msxnet.org>