IBMulator

IBMulator - The IBM PS/1 Emulator


About

IBMulator is a free/libre, open source emulator for the IBM PS/1, able to run with the original ROM. The goal is to create a faithful simulator capable of recreate the look and feel of the real machine.

IBMulator can emulate the following systems:

The PS/1 model 2121 support with the 80386 CPU is still under development and only available in the latest beta releases.

The program is in active development and still in a beta status. Expect bugs and missing features.


Features

Currently missing features


Media


Download

Releases in binary form can be downloaded here:
https://github.com/barotto/IBMulator/releases/

If you're feeling brave and want to try bleeding edge code (or if you want to contribute), use the git repository:
https://github.com/barotto/IBMulator.git

ROMs and disk images are copyrighted materials 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

In order to actually use the program you need the original ROM. You have the following options:

Launch IBMulator. A window will inform you that the file ibmulator.ini has been created and where it is placed.

Put the ROM set anywhere you like (inside the same directory of ibmulator.ini is a good place) and update ibmulator.ini with the file name of the ROM you want to use (see below for the correct format.)

From now on IBMulator is ready to run.

For more information regarding the configuration options, see the comments inside ibmulator.ini.

Being a faithful emulator of the PS/1, to configure the system (ie. the PS/1, not the emulator) after a configuration change (for instance, if you add or remove a floppy drive), you need a DOS program called CONFIGUR.EXE, otherwise you'll get various POST errors. Likewise, if you want to customize the way the system works, you need to use the program CUSTOMIZ.EXE. Both files are copyright IBM and you have to search the Internet in order to obtain them.

Keyboard

You may want to select the correct keyboard mapping under the [gui] section.

Currently valid keyboard mappings are:

If you want to create a new mapping for your language, use one of the available files in the share/ibmulator/keymaps directory as a template.

If you'll create one please consider sending me a copy :-)

ROM set

A ROM set can be:

  1. a compressed archive in the ZIP format
  2. a file with the *.BIN extension, named as you like
  3. a directory

A ZIP archive or directory must contain (case insensitive):

Any other file present in the archive or directory is ignored.

HDD image

The first time you launch IBMulator, an empty pre-formatted hard disk image will be created.

If you have an original PS/1 backup disk-set you can restore the machine to its factory state. In order to do so:

  1. insert a IBM PC-DOS floppy disk in drive A
  2. go to the DOS prompt
  3. run "a:restore a: c: /s"

Under Linux you can mount the HDD image using this command:

$ mount -o loop,offset=16896 hdd.img /mnt/loop

The offset value is equal to "start sector"*512. The start sector value can be determined with:

$ fdisk -l hdd.img

Note: if you use the custom HDD type 47, the automatically created image will be 0-filled and you'll need to use 'fdisk' and 'format' in order to use it.

HDD types

These are the BIOS supported HDD types:

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: 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.

GUI modes

IBMulator has 3 different GUI modes.

You can select the GUI mode under the [gui] section of the ibmulator.ini file.

Key bindings

If the grab method is 'MOUSE3', use the central mouse button to lock the mouse.

Command line options


FAQ

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.

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. I wanted an emulator capable of running the IBM software.
  2. At the time (early 2014), nobody was interested in emulating the PS/1 and its audio card.
  3. I was looking for a new free time software project.
  4. I wanted to learn something new (C++11, multithreading, x86 assembly, PC architecture.)
  5. 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 expert nor a C/C++ professional.

Why the IBM PS/1, an overpriced, slow PC compatible that was already absolete at launch?
Nostalgia. Also I think that it has some interesting and dinstinctive features like the ROM SHELL.

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.


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.