Skip to content
dbalsom edited this page Mar 31, 2024 · 7 revisions

ROMS

Why do we need ROMs anyway?

On the PC at least, a ROM file typically represents code stored on a chip socketed onto a hardware component, whether it was the motherboard or an expansion card. The main system ROM or ROMs comprise the system's BIOS (Basic Input/Output Set), which is basically the low-level operating system of the PC. The BIOS is responsible for testing and initializing the system hardware, expansion cards, and ultimately booting from a floppy or hard disk. At a bare minimum, you need a BIOS ROM for the system to do anything useful.

Since MartyPC is a low-level emulator, it doesn't attempt to implement functionality the BIOS performs - therefore, you need to provide an appropriate BIOS for MartyPC to use.

Why not include ROMs with your emulator?

Basically, because I don't have permission. IBM is still in business; their copyright to the original BIOS ROMs on the PC is still in effect. It's doubtful that IBM cares about 40-year old systems software, but I am still respecting their copyright.

But other emulators include ROMs...

Yes, that's true. Respected emulators like Hampa Hug's PCE include IBM's ROMs in their distribution, and the popular PC emulator 86Box even maintains a repository of ROMs right on their Github. PCjs has long hosted old IBM and Microsoft software online. And well respected information archives like minuszerodegrees.net maintain ROM files for historical and repair/recovery of retro hardware. There's good reason for this - ROM chips can go bad; without backups of the ROM images a lot of old hardware might otherwise be unrepairable. There comes a certain age where the historical value of preserving - and sharing - hardware and software becomes more valuable than following the letter of the law.

So why do I make my users jump through hoops? Distribution of ROMs is a touchy subject in the emulator development community, but it's generally frowned upon to request or provide ROMs on development forums and chat rooms. This is perhaps more understandable on console systems where a ROM typically represents a commercial video game, but I'm following the same protocol.

There's of course a huge ethical difference between using a 40 year old system ROM to experience what a retro computer was like, vs pirating the latest Nintendo Switch game for use on Yuzu. But legally, there's not much distinction. In the former case, however, the damages could be provably be $0, so that's why no lawyers get involved.

Still, the fact that others are happily hosting ROMs is just another reason I don't need to get involved. You know where to find them; if you didn't notice, I just provided all the links you need.

Okay, just tell me what ROMs I need.

First of all - you may not need any! MartyPC includes an open-source BIOS, GLaBIOS, that will allow you to start an IBM PC 5150 or XT 5160 machine, run software from a floppy and use a CGA card. You only really need an IBM system ROM if you want that authentic, nostalgic experience.

More advanced features such as hard disk support, EGA and VGA will require the original manufacturer ROM that was present on the respective expansion card.

Using ROMs with MartyPC

The easiest thing to do is find a collection of ROMs for the IBM PC and XT and just dump them all into MartyPC's /roms/ folder, and don't worry about what is what. Names aren't important - MartyPC checks the files by hash. MartyPC will scan through the entire directory tree under /roms/ and will generally pick the best useable set - typically, the last BIOS released for the chosen machine type.

If you're still unsure, or want the specific details, here they are.

IBM PC 5150 ROMS

Provide one ROM file of the following:

Description Date Size md5sum MZD 86Box
IBM 5150 U33 28 Oct 1982 8192 f453eb2df6daf21ec644d33663d85434 BIOS_IBM5150_27OCT82_1501476_U33.BIN ibmpc82\BIOS_5150_27OCT82_U33.BIN
IBM 5150 U33 19 Oct 1981 8192 6a1ed4e3f500d785a01ff4d3e000d79c BIOS_IBM5150_19OCT81_5700671_U33.BIN ibmpc\BIOS_5150_19OCT81_U33.BIN
IBM 5150 U33 24 Apr 1981 8192 6338a9808445de12109a2389b71ee2eb BIOS_IBM5150_24APR81_5700051_U33.BIN ibmpc\BIOS_5150_24APR81_U33.BIN

IBM XT 5160 ROMS

The XT has two ROM chips that operate in a pair. Provide one pair of any of the following sets:

  • The 09 May 1986 BIOS is the newest, and the recommended set for use with MartyPC:
Description Date Size md5sum MZD 86Box
IBM 5160 U18 09 May 1986 32768 9696472098999c02217bf922786c1f4a BIOS_5160_08NOV82_U18_1501512.BIN ibmxt86\BIOS_5160_09MAY86_U18_59X7268_62X0890_27256_F800.BIN
IBM 5160 U19 09 May 1986 32768 df9f29de490d7f269a6405df1fed69b7 BIOS_5160_08NOV82_U19_5000027_27256.BIN ibmxt86\BIOS_5160_09MAY86_U19_62X0819_68X4370_27256_F000.BIN

Optionally, you can use the older 1982 BIOS, but it lacks support for 720KB floppy drives:

Description Date Size md5sum MZD 86Box
IBM 5160 U18 08 Nov 1982 32768 1a2ac1ae0fe0f7783197e78da8b3126c BIOS_5160_08NOV82_U18_1501512.BIN ibmxt\BIOS_5150_27OCT82_U33.BIN
*IBM 5160 U19 08 Nov 1982 32768 e816a89768a1bf4b8d52b454d5c9d1e1 BIOS_5160_08NOV82_U19_5000027_27256.BIN n/a
*IBM 5160 U19 08 Nov 1982 8192 69e2bd1d08c893cbf841607c8749d5bd n/a BIOS_5160_08NOV82_U19_5000027.BIN

* These are images of the same chip, just different sizes. You only need one.

BASIC ROMs

Both the IBM PC and XT had Microsoft Cassette BASIC in ROM. This ROM is also required for early DOS versions of the BASIC interpreter, which took the BASIC in ROM and extended it.

You only need to provide one of these.

Description Date Size md5sum MZD 86Box
BASIC C1 ? 8192 2ac2e97eddb3f344641cdd9dc3747f8e 5700019.bin \ibmpc\IBM 5150 - Cassette BASIC version C1.00 - U29 - 5700019.bin
BASIC C1 ? 8192 8b2a0f2ea97d0adb9c1c834387aad5d9 5700027.bin \ibmpc\IBM 5150 - Cassette BASIC version C1.00 - U30 - 5700027.bin
BASIC C1 ? 8192 9a3253ad9f1d8213d33e04476e3ed482 5700035.bin \ibmpc\IBM 5150 - Cassette BASIC version C1.00 - U31 - 5700035.bin
BASIC C1 ? 8192 2686dbc7f261f10d54553c4c5f93a3d5 5700043.bin \ibmpc\IBM 5150 - Cassette BASIC version C1.00 - U32 - 5700043.bin
BASIC C1 ? 32768 2ad31da203a49b504fad3a34af0c719f n/a n/a

The 5160 optionally came with BASIC V1.1:

Description Date Size md5sum MZD 86Box
BASIC C1.1 ? 8192 69e2bd1d08c893cbf841607c8749d5bd 5000019.bin \ibmpc82\IBM 5150 - Cassette BASIC version C1.10 - U29 - 5000019.bin
BASIC C1.1 ? 8192 5f85ff5ea352c1ec11b084043fbb549e 5000021.bin \ibmpc82\IBM 5150 - Cassette BASIC version C1.10 - U30 - 5000021.bin
BASIC C1.1 ? 8192 04a285d5dc8d86c60679e8f3c779dcc4 5000022.bin \ibmpc82\IBM 5150 - Cassette BASIC version C1.10 - U31 - 5000022.bin
BASIC C1.1 ? 8192 b086a6980fc5736098269e62b59726ef 5000023.bin \ibmpc82\IBM 5150 - Cassette BASIC version C1.10 - U32 - 5000023.bin
BASIC C1.1 ? 32768 eb28f0e8d3f641f2b58a3677b3b998cc n/a n/a

IBM/Xebec 20MB Fixed Disk Adapter

If you wish to add a hard disk to the IBM XT 5160 machine, you must supply the following hard disk controller BIOS:

Description Date Size md5sum MZD 86Box
XEBEC HDC ROM 1985 4096 66631d1a095d8d0d54cc917fbdece684 IBM_XEBEC_62X0822_1985.BIN /hdd/st506/ibm_xebec_62x0822_1985.bin

IBM Enhanced Graphics Adapter (EGA)

MartyPC supports the IBM EGA adapter as of 0.2.0. To use the EGA card you will need an EGA video BIOS ROM.

Description Date Size md5sum MZD 86Box
EGA ROM 1984 16384 0636f46316f3e15cb287ce3da6ba43a1 ibm_6277356_ega_card_u44_27128.bin see other*
EGA ROM 1984 16384 528455ed0b701722c166c6536ba4ff46 see other* /video/ega/ibm_6277356_ega_card_u44_27128.bin
  • The IBM EGA ROM is in reversed-order on the hardware ROM chip. Some images have reversed the dumped ROM.

Creating ROM Definitions

If you wish to use a ROM that MartyPC does not have a definition for, you can create a new ROM definition. This is useful if you want to experiment with or develop your own ROM images.

See the ROM Definition Guide for more information.