Mike's PCjr Page Logo

PCjr Software Notes

Overview

In most respects the PCjr is a PC compatible clone. It runs the same versions of DOS as the PC, it features a similar BIOS, and it has similar architecture. It differs in several respects:
  • The BIOS is not implemented in exactly the same way as the PC BIOS is. At the BIOS level it is compatible but going below the BIOS exposes you to incompatibilities due to the different implementation.
  • The keyboard is different. It is missing keys, but those keys can be emulated using special key combinations. Keyboard decoding is also different, potentially intefering with serial communications. (See "PCjr Keyboard Handling" for a complete discussion on the keyboard implementation.)
  • The system does not have a DMA controller. This means that diskette drive activity can not be overlapped with other input/output activity, such as serial communications or keyboard activity.
  • The graphics controller provides a superset of CGA, using a different implementations. Once again, it is compatible at the BIOS level, but programs that try to "use the metal" directly run a risk of not working on a PCjr.
  • The timing of the PCjr was a little slower than a stock PC; this depends on where you are accessing memory from.
  • The PCjr has better sound capability.
  • The PCjr has cartridge slots which use reserved parts of the memory map .
  • The PCjr needs a device driver to use more than 128KB of memory.
Most well behaved software is not going to care about the hardware or timing differences. Other clones could not use the same exact BIOS as the PC or XT, and other clones were not the same exact speed as the PC or XT either. Software designed to run on clone machines generally worked on the PCjr.

Games written for the PC that "use the metal" are going to have the biggest problems. The most common problem was garbled video because standard BIOS calls were not used.


The Operating System: DOS

The PCjr was shipped with a new version of DOS, DOS 2.1. DOS 2.1 was a minor tweak to DOS 2.0 to support the half height floppy drive on the PCjr. DOS 2.1 was considered to be one of the better versions of DOS; small and compact, but fairly limited. It had a few bugs for which IBM provided patches.

The last officially supported version of DOS for the PCjr is DOS 3.3. DOS 4.0 will run on the PCjr, but it was not advertised. Besides, DOS 4.0 was not known as a stellar piece of software. DOS 5 explicitly excludes the PCjr but it can be patched to run. DOS 6.x will also run if patched.


BASIC

Like the other genuine IBM machines, the PCjr had a version of BASIC built into ROM known as "Cassette BASIC." If the machine did not boot from a floppy disk or from a hard drive, it ran Cassette BASIC. Clone machines could not copy IBM's BASIC so if they did not boot from a floppy disk or from a hard drive they printed the cryptic "ROM BASIC NOT FOUND" error message. (Clones usually ran a version of BASIC supplied as an .EXE file with their version of DOS.)

Each version of IBM DOS came with two versions of BASIC, one named BASIC and the other named BASICA. BASICA had a few more features and took up a little more space than BASIC. Both of these versions are known as "Disk BASIC" in contrast to the built in Cassette BASIC. Disk BASIC had additional support for accessing files on disk using DOS.

The PCjr had yet another version of BASIC that the PC and XT did not have. This version came on a cartridge as was known as "Cartridge BASIC." Cartridge BASIC supported all of the advanced features of the PCjr including its special graphics and enhanced sound. Cartridge BASIC could be used as a replacement for Cassette BASIC or used with DOS as a replacement for both versions of disk BASIC.

DOS was altered to always call Cartridge BASIC if the BASIC or BASICA commands were entered at the command line. This effectively made disk BASIC unavailable and forced you to purchase Cartridge BASIC if you wanted to use BASIC while running under DOS. You could get around this by renaming the disk BASIC files to a different name - the name check would then fail and disk BASIC would be loaded and run just like on a PC or XT. (The PC ID cartridge from Racore could be used to circumvent this check, allowing you to run BASIC and BASICA without Cartridge BASIC present.)

PCjr's with more than 128KB of memory had a unique problem running Cartridge BASIC. With more than 128KB of memory, the environment for Cartridge BASIC would not be set up correctly. To use Cartridge BASIC PCjr owners ran a small disk program called "JRBASIC" which fixed up the memory environment and then invoked Cartridge BASIC. They really didn't intend for this machine to be expandable!

All of these versions of BASIC were provided by Microsoft and they all were interpreters. A BASIC compiler that compiled this dialect of BASIC was available although it did not support the PCjr's enhanced sound and graphics.

Other versions of BASIC could be used on a PCjr as well. I heavily used Zedcor's Zbasic, which was a BASIC compiler featuring inline assembler, structures and functions.


Other Languages (PASCAL, C, Assembler, etc.)

PCjr users were not limited to the BASIC interpreters built into the machine or on Cartridge BASIC. If another language worked on a PC clone it would probably work on a PCjr as well.

Compiled BASIC was a great alternative to the BASIC interpreters. Compiled BASIC runs much faster than interpreted BASIC because all of the hard work is done up front by the compiler. IBM offered a BASIC compiler for its flavor of BASIC. Other companies offered compilers for different versions of BASIC. My favorite BASIC compiler was Zbasic by Zedcor; it was fast, it allowed inlined assembly code, and it provided some advanced functions that IBM's BASIC did not have. (Most notably, overlays. If you don't know what an overlay is, you are too young to be reading this.)

Sometimes a compiler would not run on the PCjr because it required more resources than what the PCjr could provide. (i.e.: Memory or disk space.) The executable results of the compiler could still be used on the PCjr though. In these cases the PCjr could not be used for code development but it could still run the resulting software. (Some machines are better targets than development platforms - the PCjr is one of those machines.) Most commercial software is created like this; the machine that the software is created on is far more capable than the average machine that runs the software.

A popular alternative to BASIC was PASCAL. Borland's Turbo PASCAL version 3.0 was a wonderful match for the PCjr. It was small, efficient, and it fit on a single floppy disk with room to spare. IBM also offered a PASCAL compiler.

I have heard that C compilers could run on the PCjr but they often required multiple diskettes which was a pain on a standard PCjr.

And of course, you could always program in assembler if you were really hardcore. As difficult as assembler is, it is the best way to squeeze the most performance out of the machine.


Cartridge Software

Besides the diskette, PCjr software could also be loaded from cartridges. The PCjr was the only IBM PC type machine to have cartridge slots, which were normally associated with gaming systems such as the Atari.

Cartridges in general have some serious drawbacks. The software on them is ROM which can not be changed if a bug is discovered. Cartridges are mechanical devices, subject to wear at the contact points. The implementation of the PCjr limited each cartridge slot to 64KB of ROM which was a fairly small amount of data.

Cartridges had some good points to them though. Software run from a cartridge loads faster because it is reading memory. Cartridge software may not require an operating system like DOS or a diskette drive. (You did not want to use cassettes.) Cartridges do not consume precious RAM memory. Cartridges are sturdy compared to floppy diskettes. And best of all, software companies love cartridges because the physical attributes of them make them harder to copy. (How many of your friends know how to use an EEPROM burner?)

Some titles available on cartridge:

Some truly unique cartridges to change the personality of the PCjr were also available:
  • Racore's PC ID cartridge: Rewrote a part of BIOS to fool software that checked into thinking that it was on a genuine PC.
  • Synectics QuickSilver cartridge: Rewrote a part of BIOS to make the boot process incredibly short.
  • PC Enterprises "Keyboard" buffer cartridge, which helped you be able to type while the diskette drive was running, even though the system didn't have DMA.

Device Drivers

The world of DOS is full of device drivers. Device drivers are used to extend DOS to handle hardware that might be non-standard or not supported directly by DOS.

The world of the PCjr is especially dependent on device drivers because of the way the memory is laid out. If you add memory past 128KB on a PCjr and you want it visible from DOS, you must use a device driver to setup DOS properly so that it can see the extra memory. No other machine calling itself even slightly PC compatible has this requirement.

If you purchased a memory sidecar for the PCjr it would come with a device driver allowing DOS to use the extra memory. Other device drivers were required for RAMdisk support, clock and calendar support, etc. One device driver worth noting is JrConfig by Larry Newcomb - I highly recommend it for your machine.

Communications Software

One of my biggest uses for my PCjr was as a terminal. I used it at first to connect to BBS systems with a 1200bps Hayes external modem, and later as a dial-up terminal for my college work with a 2400bps Hayes external modem. Being connected via a modem had many advantages; I picked up a lot of freeware and shareware software and I was able to send email before most people ever heard of the Internet.

Cartridge BASIC had a small terminal emulator built into it. You could access it by typing "TERM." It was a crude program and not usable for anything serious, but you could look at the source to see how it worked.

Better terminal emulators were DOS programs such as CrossTalk, Qmodem, Procomm, PC-Talk, etc. These programs had file transfer capability, logging capability, and the ability to emulate multiple terminal types. They were also written in compiled languages so performance was far better.

The serial port setup on the PCjr was a source of confusion for many communications programs. When the internal modem was not installed the external serial I/O port was known as COM1. However it was wired to use the port address and IRQ normally associated with COM2. When the internal modem was installed it became COM1 and the external serial I/O port became COM2. Port addresses and IRQs always stayed constant despite the name changes.

PCjr owners who used external modems had to trick the machine to rename the external serial I/O port as COM2 so that software would not get confused about the ports and IRQs it was supposed to use. (Communications software that didn't strictly use BIOS calls to access the serial port could get confused.) This was done with a small utility called "COMSWAP."

IBM did not recommend using the keyboard when receiving data at 2400bps or higher. This is because the keyboard decode logic could hold off the serial port interrupt for a long time and possibly cause bytes to be missed. In practice I did not find this to be a problem; the NEC V20 in my PCjr may have helped the situation. (For a detailed discussion on keyboard handling and how it affected serial communications see "PCjr Keyboard Handling.")

IBM also warned against using the diskette drive when doing serial communications. This is because the processor had to devote its full attention to the floppy disk (due to the lack of a DMA controller), thus causing bytes coming in on the serial port to be lost. The solution to this was to download files to a RAM disk and transfer the files to a floppy disk later on.


My Software Collection

Here is a partial list of the programs that I used extensively on the PCjr:
  • WordStar 3.31 - Word processing
  • Procomm 2.43 - Terminal emulator
  • Turbo Pascal 3.0 - PASCAL compiler
  • ZedCore Zbasic 4.02 - BASIC variant and compiler
  • Lotus 1.2.3 version 1A (on diskette, not cartridge) - Spreadsheet
  • Fontrix - Crude desktop publishing
  • Norton Utilities 3.1
  • PKZip
  • PC Paint
  • PC-Outline - outline processor
  • Numerous DOS utilities
There were too many games to mention. ;-) One of my favorites was the Flight Simulator 2.0 by Microsoft which was PCjr aware and knew how to use extra memory without device drivers. It looks downright primitive now, but back then it was magnificent.
Created in October 2000, Last updated February 16th, 2010
(C)opyright Michael B. Brutman, mbbrutman at gmail.com

Return to Mike's IBM PCjr Page main page