IBMulator - The IBM PS/1 Emulator
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:
- IBM PS/1 model 2011 (80286 @ 10MHz)
- IBM PS/1 model 2121 (80386SX @ 16MHz ~ 20MHz)
The program is still in active development so expect bugs and missing features.
- Works with the original IBM ROM.
IBM's peculiar 4-quad GUI and BASIC programming environment included!
- PS/1 Audio Card, AdLib, MPU-401, and Sound Blaster 2.0 emulation.
The 8-bit DAC and Programmable Sound Generator with 3 voices plus noise of the PS/1 Audio Card is properly supported. The emulated Sound Blaster sports DSP v2.01 and the famous Yamaha YM3812 (aka OPL2) chip.
- HDD and floppy emulation.
You can use standard floppy and HDD images in LBA format. The IBM's HDD 8-bit RLL proprietary interface is also emulated, so no additional IDE roms workarounds are needed.
- Sound effects.
Emulation of the working noises generated by the floppy drive, the HDD, and the system unit fans.
- Realistic timings.
The 286 and 386 CPUs, the WDL-330P HDD, and the integrated VGA are as painfully slow as in the original machine, for the truest PS/1 experience. The Prefetch Queue is also emulated, so games like JetFighter work as expected.
- OpenGL video output with shaders.
The video output can be manipulated with standard GLSL shaders; included is the CRT shader by Timothy Lottes
- Audio DSP filters.
Audio channels can be filtered with DSP filters like Low Pass and High Pass (and many others), so that the PC-Speaker can be reproduced as it was originally intended, in all its lo-fi glory.
- State recording and resuming.
- Video capture, screenshots, audio WAV capture, raw MIDI and VGM dumping.
When an audio recording is started, raw music data from the PS/1 PSG and the OPL2 chip is also saved in VGM format.
- Full OpenGL GUI.
Triple mode of operation: compact (a la DOSBox), normal (w/ the system unit), and realistic (whole system, monitor included!), for an added sense of realism.
- Adjustable emulation speed.
It can go as slow as 0.01% and as fast as 500% the normal speed (if your PC can handle it, of course). You can watch the VGA scanlines being drawn on the screen, slow down a difficult part of a game, or greatly accelerate an unskippable introduction. Audio speed will be adjusted accordingly but capturing will be unaffected and stutter-free.
- Debugging tools.
The GUI, sound rendering and mixing, video capture, and CPU core emulation are on separate threads, so your multi-core beast has some spare cycles for overclocking that puny 286.
- Highly configurable.
You can create a dream PS/1 configuration, with 500MB HDD, 16MB RAM and a blazingly fast 386DX @ 33MHz, if you want to.
Runs in Windows and Linux, 64-bit only though because this is the 21st century.
List of currently emulated devices
- Intel 80286 and 80386 (SX & DX), with undefined behaviours, prefetch queue, and instruction timings
- IBM PS/1 model 2011, 2121 system boards, with POS and other control registers
- Standard PC platform devices: CMOS RTC, 8259 PIC, 8254 PIT, 8237 DMA, 8042 KBD controller
- IBM 8-bit RLL and ATA-1 HDD controllers with timings
- Intel 82077AA Floppy controller (Mod30 mode) with timings
- IBM VGA adapter, with per-scanline emulation
- IBM PS/1 Audio Card, AdLib, Creative Sound Blaster 2.01, Roland MPU-401, PC-Speaker (with PWM support)
- Game, Serial (COM), and Parallel (LPT) ports
Latest version: v0.12 (released 25/dec/2020)
If the precompiled binaries are not of your liking you can recompile them from the
See the build instructions for more info:
If you're feeling brave and want to try bleeding edge code (or you want to contribute), use the
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
- Obtain a ROM set
- Launch the program
- Edit ibmulator.ini and specify the ROM set name
- Relaunch and enjoy
Please see the README file included in the package for detailed instructions on how to configure and use the program.
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 version||Configuration selected by IBMulator|
Original US model, w/ ROM drive
80286 @ 10MHz
512KB + 512KB
3.5" 1.44 FDD
30MB 8-bit HDD (type 35)
US and Intl. models, w/ ROM drive
80286 @ 10MHz
512KB + 512KB
3.5" 1.44 FDD
30MB 8-bit HDD (type 35)
US model, w/ ROM drive
80386SX @ 16MHz
3.5" 1.44 FDD
80MB ATA HDD
Intl. models, w/ ROM drive
80386SX @ 16MHz
3.5" 1.44 FDD
80MB ATA HDD
All models, w/o ROM drive
80386SX @ 20MHz
3.5" 1.44 FDD
80MB ATA HDD
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
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.
What you'll find in the next version
- Complete rewrite of the input system with remappable events and key bindings.
Features likely to be implemented in the not so distant future
- Multiple save states.
- Sound Blaster Pro & Pro 2 emulation.
- More VGA shaders.
- OSD for controlling stuff like audio levels at run time.
- Configurable CPU core, in order to disable unneeded emulated features and speed up the program on slower machines.
Features I wish to implement some day, maybe ...
- Comprehensive configuration GUI.
- Sound Blaster 16 emulation.
- Code optimizations and multithreaded CPU core.
- Emulation of other PS/1 models, like the 2133 (80486).
- NE2000 network card emulation.
- 3D interface mode with VR support.
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:
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" ;)
- put the full path of your disk images directory in the media_dir ini file setting, under the [program] section
- use the value "native" in the [program]:file_dialogs ini file setting.
- 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:
- use the default shaders (the ones initially set in the ini file), which do simple image scaling;
- use the fb-scanlines.fs fragment shader, which is the CRT styled scan-line shader by Timothy Lottes.
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:
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!
- 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.
- 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.
- 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:
- At the time (early 2014), nobody was interested in emulating the PS/1 and its audio card.
- I was looking for a new free time software project.
- I wanted to learn something new (C++11, multithreading, x86 assembly, PC architecture.)
- 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.
I've created some tools to aid the development of IBMulator. Maybe you'll find them useful too.
CPU tester for emulators, written in NASM assembly. It runs as a BIOS replacement and does not depend on any OS or external library.
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.
For bugs and feature requests, please use the
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.