Skip to content
dbalsom edited this page May 9, 2025 · 9 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 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. 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.

Using different machine types, or expansion cards such as EGA will require the original manufacturer ROM.

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.

MartyPC supports all known ROM variants for the IBM 5150 and 5160, so you can use whichever version you please for research purposes.

But if you want to know the recommended ROM sets to use with MartyPC, here they are.

IBM PC 5150 ROM

It is highly recommended to use the latest 1982 BIOS as support for expansion ROMs was missing in earlier BIOS versions.

Description Date Size md5sum MZD 86Box
IBM 5150 U33 27 Oct 1982 8192 f453eb2df6daf21ec644d33663d85434 BIOS_IBM5150_27OCT82_1501476_U33.BIN ibmpc82\BIOS_5150_27OCT82_U33.BIN

IBM XT 5160 ROM

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_09MAY86_U18_59X7268_62X0890_27256_F800.BIN ibmxt86\BIOS_5160_09MAY86_U18_59X7268_62X0890_27256_F800.BIN
IBM 5160 U19 09 May 1986 32768 df9f29de490d7f269a6405df1fed69b7 BIOS_5160_09MAY86_U19_62X0819_68X4370_27256_F000.BIN ibmxt86\BIOS_5160_09MAY86_U19_62X0819_68X4370_27256_F000.BIN

BASIC ROMS

  • The BASIC ROM is optional on the IBM PC. The BASIC ROM is required for early DOS versions of the BASIC interpreter, which took the BASIC in ROM and extended it.
  • The IBM XT ROM includes BASIC by default. You do not need to source a separate BASIC ROM if using the IBM XT.
  • BASIC ROMS come in two variants, 4 ROM images of 8k in size, and a combined 32K ROM image. You either need all four 8k images, or just the single 32K image.

ROM Basic version C1.0

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 \ibmpc\ibm-basic-1.00.rom

ROM Basic version C1.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 \ibmpc82\ibm-basic-1.10.rom

IBM/Xebec 20MB Fixed Disk Adapter

MartyPC has support for hard disks via the XUB BIOS (XT-IDE Universal BIOS).

However, the XUB BIOS looks different during boot than a stock machine, which may not be desired.

If you wish to have a more genuine hard disk experience on the IBM 5150 or 5160 machine, you can supply the following hard disk controller BIOS and use the IBM Xebec controller, however hard disk sizes are limited to 20MB.

Description Date Size md5sum MZD 86Box
XEBEC HDC 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
IBM EGA 1984 16384 0636f46316f3e15cb287ce3da6ba43a1 ibm_6277356_ega_card_u44_27128.bin see other*
IBM EGA 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.

IBM Video Graphics Array (VGA)

MartyPC supports the IBM VGA adapter as of 0.4.0. An open-source VGA BIOS is supplied and so no ROM is required. If you wish to experiment or do research with the original IBM VGA BIOS, use the following:

Description Date Size md5sum MZD 86Box
IBM VGA 1986 32768 2057a38cb472300205132fb9c01d9d85 ibm_vga.bin video\ibm_vga.bin

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.

Clone this wiki locally