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; those keys can be emulated using special key combinations.  Keyboard decoding is also different, potentially intefering with serial communications .
  • The system does not support DMA.  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 isn't 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.


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.

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 runs as well with patches.

Calling DOS an operating system is an insult to real operating systems (Unix, MVS, VMS, etc.), but it is what Jr owners are stuck with.  DOS is basically a wrapper to control the diskette drive.  Better operating systems do not run on this class of microprocessor because it is very limited.


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 DOS came with a version of BASIC known as "Disk BASIC."  Disk BASIC had additional support for accessing files via DOS.  BASICA had a few more features than Disk BASIC, and was preferred over BASIC.

The PCjr had another flavor of BASIC that the PC and the XT did not have.  "Cartridge BASIC " came on a cartridge, and it could be used as a replacement for Cassette BASIC, Disk BASIC, and Disk BASICA.  Cartridge BASIC had extensions to support the extra video modes and sound on the PCjr.  With the cartridge inserted Cassette BASIC was unavailable.  Disk BASIC and BASICA were also unavailable, as the BASIC cartridge would run if "BASIC" or "BASICA" were entered as a command at the DOS prompt.  You could get around that by keeping the cartridge inserted and renaming BASIC or BASICA to something different, like DBASIC and DBASICA.

An interesting note - you could not run BASIC or BASICA from the DOS disk even if you renamed them if you did not have the cartridge inserted - DOS looked for the presence of the cartridge, and gave you an error if you tried.  (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 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.


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

PCjr users weren't limited to the BASIC interpreters built into the machine or on the BASIC cartridge.  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 it's 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 didn't 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 couldn't 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've 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.


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 didn't want to use cassettes.)  Cartridges do not consume precious RAM memory.  Cartridges are relatively sturdy compared to floppy diskettes.  And best of all, software companies love cartridges because the physical attributes of them make them hard 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

Any PCjr that has more than 128 kilobytes of memory is going to need a device driver to use the extra memory.  Add-on devices such as clock chips also need device drivers.  The device driver should have been shipped with the hardware.  A popular third part device driver for memory configuration was JrConfig , by Larry Newcomb.

Almost every PCjr boot diskette is going to have the memory device driver.  Sorry, it is the nature of the 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 was able to send email before most people ever heard of the internet.

Cartridge BASIC had a small terminal emulator built into it.  I think 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 used 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 stayed constant however.

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.

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 (shareware)
  • 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 June 30th, 2008
(C)opyright Michael B. Brutman, mbbrutman@yahoo.com

Return to Mike's IBM PCjr Page main page