Overview

The IBM model 4860 “PC Jr” is a home personal computer introduced in the early 1980s.  It was intended to be a low(er) cost alternative to the IBM 5150 Personal Computer (PC).  Working professionals who used the full featured system at work could then use a largely compatible Jr system at home with the family.  It boasted that it could run most of the same software used on the 5150 PC at a much lower cost and the whole family would benefit.  Advertised features included Dad could use it to finish up late night office work, Mom could use it to store recipes, the kids could use it for school projects, and the whole family could use it for entertainment.  It included a composite video output for connection to the family TV set and an infra-red keyboard for use across the room on the sofa.

 

The reality for IBM was much different than their best laid plans.  They priced the machine higher than many families could afford, including those with working professionals; at more than $1600 US dollars (in 1982!).  The machine itself was limited by 128KB base system RAM, a single floppy disk drive, and non-standard expansion options.  It was a complete commercial failure despite an extensive marketing campaign by IBM.  The last Hail Mary in that marketing campaign was a contract with a young game company called Sierra On-Line to create an interactive graphical adventure game called King’s Quest.  While the PCjr was priced higher than most competing home computer offerings, it did have superior graphics and sound to many home computer entries.  King’s Quest was intended to highlight those capabilities including 320 x 200 x 16 color graphics and 3 voice FM synthesis sound.

Ultimately King’s Quest could not save the PCjr.  But out of it’s ashes rose a brilliant phoenix.  Tandy Computer of Fort Worth, TX had already made an IBM PC 5150 clone – or at least contracted a Taiwanese company to do so.  They had licensed and re-branded a Tandon design for their Tandy 1200 system targeted towards business.  They had also produced their own popular TRS-80 and Color Computer home computer line being sold at their Radio Shack stores across the country.  And they realized that the IBM PC was currently taking over as the defacto personal computer standard in the work place.  And saw IBM was targeting the home computer space with a 5150 compatible and needed one too.

The result was the Tandy 1000 – a fusion of the best of two worlds.  It included 5150 PC compatibility including the ISA expansion slot standard while integrating the enhanced graphics and sound capability of the PCjr at significantly reduced cost (est $1000 in 1984).  Most importantly it was front and center at every Radio Shack store in the country with an army of sales associates behind it during Holiday shopping seasons.  It went on to sell millions…

The Problem

The PCjr has 128 KB of memory that is used for both main system memory and video frame buffers.  Thus the connection and management of that dynamic RAM is controlled through a chip called the Video Gate Array (VGA – not to be confused with Video Graphics Adapter).  The VGA is directly mapped in the 8088’s main memory space from 0 KB to 128 KB (system memory) and aliased mapped from B8000 through BFFFF to provide some compatibility with the IBM Color Graphics Adapter (CGA).  The B8000 through BFFFF region is 32 KB wide – matching the frame size for a 320 x 200 x 16 color (4 bits per pixel) image.  The 32 KB window can also be mapped/panned to any 16KB offset within the 128 KB system memory using an  active video page register.

The concept, originally developed on the PC’s CGA card, is a graphic program could reserve some of the system RAM – for example the upper 64 KB.  Set the visible page (what is being displayed on the monitor) to the lower 32 KB of that reservation.  Set the active page (what is aliased in the CGA B8000 window) to the upper 32 KB of that reservation.  It could then draw a new image without it’s graphical updates being displayed on the monitor as they are being made.  When finished with the new image, the page numbers are then reversed.  This causes the newly drawn image to be displayed on the monitor and the previous image to now become 

the off-line update buffer now mapped at B8000 – ready to draw the next new image.  In this fashion, a program could draw seamless animations to the monitor.  This process is called page flipping or A/B frame buffer swapping.

The problem is the upper 16 KB of that window is always aliased to the contents of the lower 16 KB of that window.  Meaning, you can never see a continuous 32 KB 320 x 200 x 16 color frame at B8000.  Thus many of the PCjr specific games would read the active page number, translate that page number to the offset in 128 KB system memory, and access the frame buffer directly in the lower 128 KB of 8088 address space.  Tandy ‘fixed’ this aliasing artifact when they cloned the PCjr enhanced graphics and sound for the Tandy 1000.

Given the Tandy 1000’s far greater success than the PCjr, a collection of software that could, in theory, run on the PCjr but didn’t because of this aliasesing bug, grew.

Hardware

The problem stems from an IC on the main board labeled ZM31.  It is a 74LS157 4-bit 2:1 multiplexer.  When the B8000 through BFFFF CGA window is selected on the bus, this mux is enabled to re-write the A14, A15, and A16 address lines coming from the 8088 to the active page number programmed into the VGA.  A14 is the line that defines a 16 KB region boundary.  So if it presents the page number on A14, A15, and A16 for all accesses within B8000 through BFFFF, the same page number is presented for access to both the lower and upper 16 KB halves of that window.