IBMulator

IBMulator - The IBM PS/1 Emulator

Latest version: v0.13
Fork me on GitHub


Buy Me a Coffee at ko-fi.com

About

IBMulator is a free/libre and open source PC emulator focused on the IBM PS/1 line of computers, able to run with the original ROM.

The goal is not just to develop yet another emulator, but also to create a faithful simulator with the look and feel of the real machines, hdd and floppy drive noises included.

IBMulator can emulate the following systems:

The program is still in active development so expect bugs and missing features.


Features

List of currently emulated devices


Media


Download

Latest version: v0.13 (released 6/aug/2021)

If the precompiled binaries are not of your liking you can recompile them from the master branch
See the build instructions for more info: Windows | Linux

If you're feeling brave and want to try bleeding edge code (or you want to contribute), use the unstable branch

Other branches may be present from time to time to test specific features before merging them into unstable and, eventually, master.



ROMs and disk images are copyrighted material and must be downloaded elsewhere (hint).


Usage

TL;DR version

  1. Obtain a ROM set
  2. Launch the program
  3. Edit ibmulator.ini and specify the ROM set name
  4. Relaunch and enjoy

Full version

Please see the README file included in the package for detailed instructions on how to configure and use the program.

Additional info

Supported ROMs

This is the list of supported ROM BIOS versions and the default configurations that IBMulator selects when it loads them.

Please note that the P/N and MD5 values refer only to the 64K BIOS code part of the ROM, loaded at offset 0xFF0000. The additional part with the BASIC interpreter and the ROM drive is not taken into consideration. IBMulator uses the computed MD5 value only to select the actual hardware configuration to use for the "auto" values in the ini file.

IBM used the same ROM BIOS for multiple 2011 / 2121 models and the system configurations reported here and selected by IBMulator are just for your convenience. Every aspect of them can be overridden using the ibmulator.ini file.

ROM BIOS versionConfiguration selected by IBMulator
PS/1 modelCPURAMStorage
P/N: 1057756
MD5: f605396b48f02c5e81bc9e5e5fb60717
Original US model, w/ ROM drive
PS/1 2011-C34 80286 @ 10MHz 512KB + 512KB 3.5" 1.44 FDD
30MB 8-bit HDD (type 35)
P/N: 1057760
MD5: 9cac91f1fa7fe58d9509b754785f7fd2
US and Intl. models, w/ ROM drive
PS/1 2011-C34 80286 @ 10MHz 512KB + 512KB 3.5" 1.44 FDD
30MB 8-bit HDD (type 35)
P/N: 92F9674
MD5: 159413f190f075b92ffb882331c70eaf
US model, w/ ROM drive
PS/1 2121-B82 80386SX @ 16MHz 2048KB 3.5" 1.44 FDD
80MB ATA HDD
P/N: 92F9606
MD5: 7b5f6e3803ee57fd95047738d36f12fd
Intl. models, w/ ROM drive
PS/1 2121-B82 80386SX @ 16MHz 2048KB 3.5" 1.44 FDD
80MB ATA HDD
P/N: 93F2455
MD5: 01ae622ab197b057c92ad7832f868b4c
All models, w/o ROM drive
PS/1 2121-A82 80386SX @ 20MHz 2048KB 3.5" 1.44 FDD
80MB ATA HDD

HDD types

These are the HDD types supported by the PS/1 BIOS.
This table was defined by IBM and is common to many (all?) of the their products of the '80s and early '90s.
While rendered irrelevant with the introduction of the ATA interface in the 2121 model, the HDD table is still present in the BIOS and can be used by IBMulator to quickly specify a geometry and create a pre-formatted disk.

Type   Cyl.   Heads    Sect.   Write    Land     Size
                               p-comp   Zone

 0       0      0        0         0       0    (none)
 1     306      4       17       128     305     10MB
 2     615      4       17       300     615     20MB
 3     615      6       17       300     615     31MB
 4     940      8       17       512     940     62MB
 5     940      6       17       512     940     47MB
 6     615      4       17        -1     615     20MB
 7     462      8       17       256     511     31MB
 8     733      5       17        -1     733     30MB
 9     900     15       17        -1     901    112MB
10     820      3       17        -1     820     20MB
11     855      5       17        -1     855     35MB
12     855      7       17        -1     855     50MB
13     306      8       17       128     319     20MB
14     733      7       17        -1     733     43MB
15       0      0        0         0       0    (none)
16     612      4       17         0     663     20MB
17     977      5       17       300     977     41MB
18     977      7       17        -1     977     57MB
19    1024      7       17       512    1023     59MB
20     733      5       17       300     732     30MB
21     733      7       17       300     732     43MB
22     733      5       17       300     733     30MB
23     306      4       17         0     336     10MB
24     612      4       17       305     663     20MB
25     306      4       17        -1     340     10MB
26     612      4       17        -1     670     20MB
27     698      7       17       300     732     41MB
28     976      5       17       488     977     40MB
29     306      4       17         0     340     10MB
30     611      4       17       306     663     20MB
31     732      7       17       300     732     43MB
32    1023      5       17        -1    1023     42MB
33     614      4       25        -1     663     30MB
34     775      2       27        -1     900     20MB
35     921      2       33        -1    1000     30MB
36     402      4       26        -1     460     20MB
37     580      6       26        -1     640     44MB
38     845      2       36        -1    1023     30MB
39     769      3       36        -1    1023     41MB
40     531      4       39        -1     532     40MB
41     577      2       36        -1    1023     20MB
42     654      2       32        -1     674     20MB
43     923      5       36        -1    1023     81MB
44     531      8       39        -1     532     81MB
45                  -- unused --
46                  -- unused --
47             -- user defined type --

Note: "type 47" is an IBMulator only feature. In the original BIOS the last 3 table entries are blank and the PS/1 has no means to define a custom geometry.

Note: the biggest formattable HDD you can define (type 47) for model 2011 is 496MiB (CHS 1024/16/62), due to a BIOS bug that limits the sectors per track to 62 instead of 63. The fact that such a bug exists is unsurprising as back then there were no HDD with 63 physical sectors per track to use.


Roadmap

What you'll find in the next version

Features likely to be implemented in the not so distant future

Features I wish to implement some day, maybe ...


FAQ

For the current list of known bugs please see the GitHub's issue tracker.
Where am I supposed to put the ROM and what should I write in the ini file?
The easiest way is to put the ROM inside the same folder of ibmulator.ini and write its filename in the [system] section. If you want to put the ROM somewhere else then write its full path in the ini file.
I can't seem to manually navigate to my disk images on the D: drive, from the floppy file explorer. What now?
Unfortunately IBMulator is still incomplete and on Windows the floppy image file dialog can't move from a drive partition letter to another.
You have two options:
  1. put the full path of your disk images directory in the media_dir ini file setting, under the [program] section
  2. use the value "native" in the [program]:file_dialogs ini file setting.
As to why IBMulator can't do something so basic as to navigate to a different drive letter, please consider that I'm a Linux developer and on Linux there's no such thing as a "drive letter" ;)
My Windows OS is in Italian/Greek/%other-non-US-language% and IBMulator won't start. What can I do?
The current version of IBMulator won't work if you launch it from a file system path with non-ASCII charachers in it. This is a known bug. Put the IBMulator package on C:\ or D:\ or wherever you want as long as there are no non-ASCII characters in its full path.
What kind of shaders can I use? What kind of extension? i.e. are .glsl and .fx supported?
You can use one of the shaders available in the share/ibmulator/gui/shaders directory. At the moment there are only 2 possible options: The scaling quality is also determined by the *_filter options. So suppose you want to use the scanline shader:
normal_shader=gui/shaders/fb-scanlines.fs
This will apply the scanline shader for the normal and compact GUI modes only.
If you are an expert GLSL programmer you can create one youself starting from the default shaders. Shaders from other emulators are not directly usable but could, at least in theory, be adapted.
In order to play Monkey Island, do I have to create an .img file with all the files of the game?
IBMulator is not simply an emulator (like DOSBox is), it's also a simulator, so it operates using disk images, for both the HDD and floppy disks. In order to play a game:
  1. prepare an HDD image: download a premade one or create a new one. If you decide for the latter, IBMulator will create an empty new disk image for you; you'll have to then install DOS using the DOS install floppy images or you can restore the original IBM software from a restore floppy disk set.
  2. install the game you want to play from its floppy images into the HDD. You can also copy a game's files directly on the HDD's .img using special software capable of manipulating image files: on Linux this is relatively easy, look at the "HDD image" section of the README.
Using floppy images can (and should) be done through the GUI: click on the floppy drive and a selection window will appear, pointing to the media directory where the floppy images should be located (the default media directory can be set in the ini file under the [program] section). So at the end of the day, using IBMulator is like using a real IBM PS/1 computer. Sometimes it's incovenient, just like the real thing!
I use the 2121 BIOS but the 4-quad GUI doesn't show up like in the 2011 model. Instead, a "Non system-disk or disk error. Press Enter" message appears after memory test. What do I have to do?
The PS/1 2011 has a so-called romdrive in the ROM image, with PC-DOS and the 4-quad software in it. The 2121 has 2 versions of the ROM, one with the romdrive and one without. You need to use the 386/16 version of the ROM which has the romdrive built in, or, if you want to use the 386/20 version, you need a HDD image with the IBM's original PS/1 software installed.
There are already plenty of emulators. Why another one?
Why not? Most of the time a FOSS project starts by scratching a developer's personal itch. I had several itches, like:
  1. At the time (early 2014), nobody was interested in emulating the PS/1 and its audio card.
  2. I was looking for a new free time software project.
  3. I wanted to learn something new (C++11, multithreading, x86 assembly, PC architecture.)
  4. I always wanted to write an emulator.
Why didn't you contribute to MESS / PCem / %EmulatorName% instead?
I did think about it, but ended up voting against. Working in an existing environment has its own rather steep learning curve and I'm not an emulation and/or PC architecture expert, nor a C/C++ professional. Actually, because of my lack of experience, I end up incorporating lots of code from other license-compatible projects (open source be praised).
Why the IBM PS/1, an overpriced, slow PC compatible that was already absolete at launch?
Nostalgia. The PS/1 has been my very first PC when I was a child, so I wanted to make it immortal before the machine I still have dies of old age.
Also I think that it has some dinstinctive features that make it interesting an unique, like the 4-Quad ROM SHELL interface.
Can I contribute?
Sure! See below for contact information.
Can I reuse your code for %EmulatorName%?
Yes, as long as you abide by the GPL's terms and conditions. Also, feel free to contact me for information about the PS/1 and its inner workings.

Tools

I've created some tools to aid the development of IBMulator. Maybe you'll find them useful too.

test386.asm

CPU tester for emulators, written in NASM assembly. It runs as a BIOS replacement and does not depend on any OS or external library.

GitHub's repository

VGATEST

Protected mode DOS program used to test VGA functionality in both text and graphics modes. It gives the ability to test all the standard BIOS modes plus many non standard modes like Mode X or Mode Y.

GitHub's repository


Contact

For bugs and feature requests, please use the GitHub tracker.


Disclaimer

IBMulator is not a product of IBM Corporation nor is it sponsored by IBM Corporation in any way.
All trademarks and registered trademarks are the property of their respective owners.