IBMulator

IBMulator - The IBM PS/1 Emulator

Current version: v0.14
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

Current version: v0.14 (released 23/dec/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 read the README file included in the distribution package for detailed instructions on how to configure and use the program.

Additional info not included in the README

Supported ROMs

IBMulator is a machine emulator and will use whatever BIOS code you make it load into memory. However it also detects and supports all known original PS/1 BIOSes.

Please note that the P/N and MD5 values in the following list 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 only uses the reported MD5 value to select the actual hardware configuration to use for any auto value present in the ibmulator.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. You can change every aspect of them.

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]:romset setting. If you want to put the ROM somewhere else then write its full path in the ini file.
I keep my floppy images in a folder in %DISKDRIVE% and I need to navigate there every time. How can I tell IBMulator to look there by default?
Specify your floppy images folder path in the [program]:media_dir ibmulator.ini setting, for example:
[program]
media_dir=D:\images\
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 [display]:*_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: you can either download a premade one or let IBMulator create a new blank disk. If you decide for the latter, you'll have to then install DOS using the DOS install floppy images or 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. 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.
Why should I use IBMulator instead of DOSBox(-X)?
Unless you like juggling with disk images or have a specific interest in the IBM PS/1, you shouldn't. That being said, IBMulator currently has better CPU timings emulation, so there's that.
Why an emulator for the IBM PS/1, an overpriced, slow PC compatible that was already absolete at launch?
Nostalgia. The PS/1 was my very first PC and I wanted to make it immortal before the machine I still own dies of old age.
Also I think that it has some distinctive features that make it interesting and unique, like the 4-Quad ROMSHELL 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 ones like Mode X or Mode Y.

GitHub's repository


Contact

For bug reporting, feature requests, or IBMulator related questions, 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.