Thursday, June 21, 2012

IBM PCjr. and Tandy 1000 Games

Originally, I was going to place this article in my Unique PC Hardware and Game Support, but I decided it deserved its separate article.  It is well-known that the IBM PCjr. was not a greatly successful home computer.  Too expensive, compatibility issues and its upgrade woes doomed it to failure in the marketplace.  It was a weird product released by a company that had little prior experience marketing to the consumer market.  Even though the machine was only on the market for 18 months, it still had a substantial impact on PC gaming.

That impact was manifested in the Tandy 1000.  Released in March, 1985, for the same price as the now discontinued IBM PCjr., $1,199.00, it was a far superior machine and very competitive with an IBM PC 5150.  (Actually, Tandy 1000s may have seemed inexpensive, but they got you on their extras).  This machine is pretty much what IBM should have released, a true IBM PC compatible with better graphics and sound.  Tandy originally intended its computer to be a more compatible PCjr. clone, but when they were ready to release it, the PCjr. discontinuance had been announced and Tandy switched gears and advertised it as an IBM PC compatible.

Unfortunately, in the 18 months of the PCjr.'s life, several games had been released for the IBM PC and PCjr. that would only display advanced graphics and sound if it detected a PCjr.  The games determined by the system they were running on by checking the PC identifier byte at F000:FFFE, which was FF for a PC, FD for a PCjr., FE for an early XT and all PC Portables, FB for a later XT, F9 for a PC Convertible and FC for an AT and XT/286.  Clones almost invariably identified themselves as PCs to ensure maximum compatibility, and Tandy 1000s were no exception.  So those games that detected whether they were being used in a PC or PCjr. would detect a PC if they were being run on a Tandy 1000 and utilize CGA graphics and PC Speaker sound.

There are other compatibility issues between the PCjr. and Tandy 1000s.

Joysticks - The IBM PCjr.'s joysticks work just like IBM PC joysticks.  Tandy 1000 joysticks come from the TRS-80 Color Computer and while analog, do not work in exactly the same way as PC joysticks.  Usually this is not a big deal, but the differences may cause a game using tight timing loops to get confused.

Floppy Interface - IBM located the floppy adapter at I/O F0-FF on the PCjr., 3F0-3FF on the PC.  Tandy went with the PC I/O ports.  Games with disk routines (typically for copy protection) that do not use Int 13 and instead directly address the floppy disk controller directly should fail.

BASIC - The IBM PCjr. came with BASIC partially contained in ROM and additionally on a cartridge, the IBM PC came with it partially in ROM, and the Tandy 1000 came with it on solely on a disk.  Games that embed or call BASIC or BASICA from IBM PC-DOS in their execution will not work with the Tandy 1000 because those programs require BASIC in ROM.  

Keyboard - The IBM PCjr.'s keyboard is basically compatible with the PCs, although not as easy to use due to the fewer keys and the chiclet arrangement.  However, with Fn key combinations it is possible to generate all the keystrokes of the PC keyboard.  The Tandy 1000's keyboard interface came from the less-than-PC compatible Tandy 2000, and while compatible at the BIOS Int 16 level, there are real differences on how the keyboards work at the hardware level.  Games bypassing the BIOS routines may fail to recognize keyboard input.

Cartridges - The Tandy 1000 did not have cartridge ports, so those games that appeared on cartridges only would be beyond the Tandy's capabilities.  More ports would have been likely but for the video game crash of 1983.

Memory requires its whole section.  First, as the PCjr. was only intended to have 128KB of RAM, the RAM is shared between the CPU and the Video Gate Array.  This meant that RAM performance was substantially slower on a PCjr. compared with a PC.  Although the original Tandy 1000 also only had 128KB on the motherboard, there are no slowdowns on those machines even though 128KB is shared between video and CPU.  Games relying on the slowness of the PCjr. will run too fast on a Tandy 1000.

By the end of 1985, the 128KB of the PCjr. and its abyssmal performance began to be seen as too limiting and developers began to target the Tandy 1000 instead.  As the PCjr. was officially dead by March of that year, few developers felt it necessary to support the quirks of the failed system.  At this point having a Tandy 1000 was much more important than an IBM PC.

Second, the PCjr. was not designed to be upgradeable beyond 128KB, while the Tandy 1000 was always intended to go up to 640KB.  The TX and most of the later models allowed 768KB in the conventional memory space to eliminate the need to take RAM from conventional memory.  Eventually IBM thought it would be a good idea to allow memory upgrades to 640KB, but the PCjr. informs programs of its total memory in a different manner compared with PCs and Tandy 1000s.  Games requiring 256KB of RAM will not work in a PCjr. unless they are specifically aware of sidecar RAM expansions.

Third, the PCjr. tried to be somewhat compatible with CGA by implementing the CGA graphics window at the B800 segment.  It does not have any memory at that area and borrows it from the top of the first 128KB.  The PCjr. strictly implemented the window to 16KB.  This means that for 32KB graphics modes, 320x200x16 and 640x200x4, only half the graphics would be shown if the programmer wrote to the B800 window.  In the PCjr., the graphics would have to be written directly to the 1700 segment.  The direct graphics window in the PCjr. would stay within the first 128KB no matter how much expansion sidecar RAM was installed in the system.

Tandy improved on this in two ways.  First, it expanded the window at segment B800 to 32KB, allowing all the pixels of the 320x200x16 and 640x200x4 to be shown using that window.  Programs did not have to ask the system where the top of the RAM was.  Second, the direct graphics memory window is always at the top of RAM up to 640KB.  So if a user had maximized his RAM in a pre-TX machine to 640KB, the 512-640KB portion of RAM would be shared between CPU and video.  Unfortunately this broke compatibility with PCjr. only-programs that wrote graphics directly to the first 128KB of RAM.  

Games automatically detected the Tandy 1000 by first searching the BIOS ROM for the string TANDY. It will be found in any Tandy 1000 because it is shown on the BIOS copyright screen upon bootup.  Then it checked the byte at FC00:0000, and if was 21, then the game knew it was running on a Tandy 1000.  If not, then the game would assume it was running on another Tandy PC-compatible system like the Tandy 1200 or 3000, which could use regular PC graphic adapters.  Games that autodetect a Tandy will utilize the advanced graphics and sound.  If a Tandy 1000 was not detected, then the game would use CGA, Hercules or EGA graphics and PC Speaker sound.  This occurs even if the game can run in a PCjr.

By 1987, most games did support EGA graphics, which can display identical graphics to the Tandy 1000, so the need for a Tandy 1000 was dwindling.  Toward the end of 1988, Sierra and other game companies began supporting discrete sound cards like the Adlib and midi devices like the Roland MT-32.  Thus the importance of the 3-voice sound began to wane and by 1990 with the Sound Blaster's digital audio playback support, the need for a Tandy 1000 was all but eliminated.

Rules of thumb for game compatibility :

Game states it supports IBM PC & PCjr. - chances are it will only show 16-color graphics and play 3-voice sound on the PCjr.

Game requires 256KB or greater RAM - chances are it will not work on the IBM PCjr.

Game supports IBM PC, XT, AT, Tandy 1000 - without a specific mention of PCjr. compatibility, assume it will not work on the IBM PCjr., especially if it requires 256KB or more RAM.

Disk-based Game specifically for PCjr. - will probably work more or less in a stock Tandy 1000 or 1000A. Later Tandys come with 256KB or more RAM, and most likely will not work.

Booter games supporting Enhanced Graphics or Sound on PCjr. only :

Agent USA - 320x200x4 resolution, uses solid graphics for better picture on RGB monitors instead of stripey graphics intended for composite color monitors with CGA.#
Alley Cat - 320x200x4, palette uses different colors and not subject to CGA restrictions.  Enhanced title screen music,
Below the Root - Uses 320x200x4, Graphics adjusted for optimal results for composite color display when run on PCjr.  Enhanced music on title/demo screen#
Boulder Dash - 160x200x16, 3-voice music and sound effects*
Boulder Dash II - 160x200x16, 3-voice music and sound effects*
Crossfire (Cartridge) - 320x200x4, palette uses different colors and not subject to CGA restrictions.
Jumpman - 160x200x16, 3-voice music and sound effects
Microsoft Flight Simulator 2.0+ - 160x200x16, 3-voice sound effects
Microsurgeon (Cartridge) - 160x200x16, 3-voice music and sound effects
Mine Shaft (Cartridge) -  320x200x4, palette uses different colors and not subject to CGA restrictions.
Mouser (Cartridge) - 160x200x16, 3-voice music and sound effects
Murder on the Zinderneuf - 160x200x16
Oil's Well# - 160x200x16
Pitfall II: Lost Caverns (Cartridge) - 160x200x16, 3-voice music and sound effects
Pitstop 2
River Raid (Cartridge) - 160x200x16, 3-voice music and sound effects
ScubaVenture (Cartridge) - 160x200x16, 3-voice music and sound effects
The Seven Cities of Gold - 640x200x2 composite color (ideal) or 320x200x4 (select by pressing A at title screen), 3-voice music and sound effects
Superbowl Sunday# - 160x200x16
Troll's Tale - 320x200x16 (effective resolution for graphics is 160x200x16)
The World's Greatest Baseball Game  - 160x200x16, 3 voice sound effects

* - Super Boulder Dash, which is a compilation booter from Electronic Arts, does support Tandy 1000 graphics and sound, but the available image did not properly crack the Tandy/PCjr. versions of these games, so a fix is required and has been accomplished.  The standalone releases of Boulderdash I & II may not support Tandy 1000s because they were released before the Tandy 1000 was released.

# - Tandy 1000 versions of these games may possibly exist, as they were advertised in Radio Shack/Tandy catalogs.

$ - Does not actually support more than four colors on the screen at any time, but can select freely from the 16-color palette, unlike CGA.

% - Modern remake exists with Tandy and VGA support.

@ - Looks best on a composite color monitor or TV.

+ - Supports 256KB (only available with a memory sidecar)

Booter games supporting enhanced graphics or sound on a Tandy 1000 w/256+KB only :

Defender of the Crown - 320x200x16, 3-voice music and sound effects^
Marble Madness - 320x200x4, palette uses different colors and not subject to CGA restrictions, 3-voice music and sound effects.
Sid Meier's Pirates! - 320x200x16, 3-voice music and sound effects^@

^ - Also supports EGA

$ - Does not actually support more than four colors on the screen at any time, but can select freely from the 16-color palette, unlike CGA.

@ - An official DOS conversion exists that may work with a PCjr. with the Tandy 1000 mod.

It is important to note that the following games had separate releases for the PCjr. and Tandy 1000

Demon Attack (Cartridge for PCjr., Disk for Tandy) - 160x200x16, 3-voice music and sound effects.
King's Quest (PCjr. version probably works on 128KB Tandy, Tandy version works on PCjr.) - 320x200x16 (effective resolution for graphics is 160x200x16)
Touchdown Football - 160x200x16, 3-voice sound effects (including speech!)

The Tandy releases are considerably rarer.  Demon Attack for Tandy may have a title screen.  The PCjr.'s version of Touchdown Football's speech will be too fast on a Tandy, perhaps the Tandy version fixed that.

DOS games, games which are not self-booting, are usually far more friendly to the Tandy 1000 than the PCjr.

Booter games supporting enhanced graphics or sound on a Tandy 1000 or PCjr. with same program

King's Quest II - Romancing the Throne
The Black Cauldron
Donald Duck's Playground