PCjs Machines

Home of the original IBM PC emulator for browsers.


PCjs Blog

Super Bowl Winner: PCjs

The new release of PCjs (v1.20.8) is a fairly minor update, but it’s an important one for FOOTBALL fans, resolving two annoying problems with the OS/2 FOOTBALL Boot Disk: mysterious hard-error popups and blank screens.

A hard-error popup would occur when FOOTBALL tried to initialize a non-existent PRN device. To resolve that, PCjs now provides basic parallel port emulation, in the form of a ParallelPort component that you include in a machine XML file with the <parallel> element, in much the same way you include the SerialPort component with the <serial> element. This [Compaq DeskPro 386] (/devices/pcx86/machine/compaq/deskpro386/ega/4096kb/debugger/) machine used to run FOOTBALL has now been updated to include one parallel port.

The other problem was that switching between sessions with the SysReq key would often result in a blank screen; the new session was active, but you couldn’t see it. This was a side-effect of how FOOTBALL reprograms the video controller when switching screens and the linear page mappings it creates to access video memory, which in turn exposed a PCjs memory-management bug. The upshot is that whenever the Video component moves the address of the video buffer (which is physical memory), it must tell the CPU to flush any linear-to-physical mappings that may still refer to the old physical memory.

With these changes, the OS/2 FOOTBALL Boot Disk appears to be quite usable now. Feel free to give it a few kicks!

I’ve also tidied up a few things in the Machines folder. ROM images used to be stored under /devices/pcx86/basic/ and /devices/pcx86/bios/, but BASIC and BIOS ROM images aren’t actually devices; they are the contents of ROM devices. So, with that in mind, I’ve made the following rearrangements, including:

This structure mirrors what was done with Machine and Video devices, where the devices are organized first by manufacturer (IBM or COMPAQ) and then by type (MDA, CGA, EGA, etc).

Here, the first ROM subdivision is either a manufacturer or a machine model. A model implies a manufacturer; for example, models 5150 through 5170 refer to IBM PC models.

The project currently includes only two BASIC ROM versions, C1.00 and C1.10, which were initially released with the first model 5150 and 5160 machines, respectively. For more details, see IBM PC ROMs.

I believe there was also a BASIC ROM version 1.20 released for IBM PCjr, but since PCjs does not yet emulate the PCjr, it has not been added to the project.

Jeff Parsons
Feb 8, 2016