Thursday, March 6, 2014

IBM PCjr. Upgrades

IBM PCjr. Internal Modem

The IBM PCjr. Internal Modem fits in a special slot inside the PCjr.  The Modem sits at COM1 and this is undoubtedly its most useful purpose in the modern era.  The BIOS designates the internal serial port, with no modem installed, as COM1.  The resources the serial port uses, I/O 278H and IRQ3, are those typically assigned to COM2.  This causes programs no end of confusion, and usually a program like COMSWAP is used to redesignate the serial port as COM2.

The Internal Modem uses the resources typically assigned to COM1, I/O 3F8H and IRQ4.  By installing one, even if you never intend to use it, the BIOS will assign the Modem to COM1 and the serial port to COM2.

If you want to use a serial mouse and you don't have the Internal Modem installed, you can use the Cutemouse v1.91 driver.  You will need to use the following command line argument /S13.  This tells the driver to use the device at COM1 and IRQ3.

IBM's PCjr. Internal Modem is based on the Novation 103 Smart Modem, which uses a command set somewhat different from the Hayes compatible command set most terminal emulator programs expect.  However, once you learn the basic commands and how to implement them in a terminal emulator, it can be used, as it was intended, at 300 baud.  It does not have any speaker on it, so the only way to know whether you have connected is to review the messages sent from the modem.  All commands can be shortened to the first letter, like the Hayes command set in many instances.

To initialize the modem, use the command : I

To set the format, use the command : F.  The modem supports the following serial data formats (data bits:parity:stop bit) :

0 - 7:M-1
1 - 7-S-1
2 - 7-O-1
3 - 7-E-1
4 - 8-N-1

The default is 7-E-1.  M is Mark Parity, S is Space Parity, E is even Parity and O is Odd Parity.  To set the format to 8-N-1, use the command : F 4.  The initialize and format commands can be carried on the same command line, separated by a comma.  Using an 8-bit speed will show more corrupt characters than using the 7-bit speed, but it is faster and more compatible with BBS terminals that still allow for dialup.

The command to dial is appropriately called "dial", and you type in the number after it.  I would recommend putting a "w" just before the number to ensure the modem dials using tone rather than the old-fashioned pulse and add a short delay to avoid any confusion by noise at the line gets taken off the hook.  This is a command to dial : D w15555555555.

The command to answer is : A.  The hangup command is : H.

Any commands to the modem must be prefaced by a control character.  The default character is 0E/Ctrl N. This is the equivalent of the AT control character of the Hayes commands. The command string must be terminated by a carriage return/Ctrl M, just like Hayes.  However, there is no +++ equivalent, the modem will always view one of the 255 ASCII codes as a command code, but it does allow you to change the default ASCII value with the N command.

The program ProComm, 2.4.3, which was very popular back in the day, will work with the PCjr. Internal Modem.  The default strings to enter in the setup menu look like these :

^N I, F 4 ^M
^N D w##########
^N H ^M

If you have a phone service that uses a stuttering dial tone to indicate that you have new voicemail, this modem may interpret the stuttering signal as a BUSY signal and do nothing.  Clear your voicemail.

Many of the few BBSes expect a faster transmission rate than 300 baud or a more robust modem solution. One BBS that more or less works is the Capitol City Online BBS out of Frankfort, KY.  Its telephone number is 502-875-8938.

IBM PCjr. Parallel Printer Attachment

This sidecar adds one parallel port and was a very popular add-on for the PCjr, which did not come with a parallel port.  The parallel port is a standard DB-25F connector, unlike virtually every port on the back of the PCjr.  It uses  the standard CGA LPT1 resources, I/O 378H and IRQ7.  If there is no parallel printer sidecar installed, then the serial port will receive the LPT1 designation.  When the parallel port is installed, the BIOS will reassign LPT1 to it.  IBM did not allow the settings on the parallel port adapter to be changed, so only one parallel port is supported.  There is a fairly simple mod to change the I/O to the LPT2 278H address, you can find it here :

The parallel port is a unidirectional port by default, capable of nibble transfers.  There is an easy mod to make the parallel port bidirectional.  This will double throughput when an external devices wants to send data through the parallel port to the computer.  The instructions for the mod can be found here :  This mod will also work with the ISA-based IBM PC Printer Adapter and the IBM Monochrome Display and Printer Adapter and probably all clones that implement a parallel port strictly using TTL logic.

The parallel port is useful for more than just connecting to printers, although it can do that too.  I have connected it to a 2008 vintage Brother MFC-8860DN and it was able to print from DOS.  It is far more useful to use with a 100MB zip drive or an Ethernet adapter like the Xircom PE3-10BC.  The Xircom's packet driver (PE3PD.COM) and test program (PE3TEST.EXE) work just fine with an 8088 machine and a PCjr.  The packet driver is initialized as follows for a PCjr. with an unmodified parallel port :

pe3pd sint=60 non

The non tells the adapter to operate in the non-Bidirectional mode (a.k.a. Unidirectional), and sint=60 assigns the Packet Driver services to software interrupt 60H.  The driver can autodetect the presence of the adapter on any of the LPT assignments and the Interrupt.

Using the Xircom adapter, you can transfer files to and from the PCjr. with relative ease.  There is a suite of TCP/IP utilities called mTCP, which you can get from here.  The DHCP client utility especially useful for automatically obtaining all the critical information (IP, Gateway, Nameserver) from your route to connect to the Internet.  I typically start up the packet driver and dhcp client in a batch file which I created (MTCP.BAT) and it looks like this :

c:\mtcp\pe3pd sint=60 non
set MTCPCFG=c:\mtcp\tcp.cfg

There are other useful utilities.  The IRCJR functions as a basic Internet Relay Chat client.  You can use it to chat on IRC.  It will not download files from IRC though.  I use it to connect to the Vintage Computer IRC channel on, /join #vc.  SNTP will obtain the time and date from an internet server and set the time and date in DOS.  This is very useful for systems without a Real Time Clock or you want more exact time.  There is also a Telnet client with ANSI emulation for all your text-based terminal needs.  There is also a basic FTP client.  It can copy (get) multiple files, but not sub-directories.

To actually use these utilities, you need to create a file called TCP.CFG.  At a minimum, the following is required :


The PACKETINT must correspond with the Packet Driver's software interrupt, but the HOSTNAME can be anything.  DHCP will add or change the necessary configuration every time you start the DHCP server.  Individual mTCP utilities will have their own settings in this file.

The most important utility is the FTP Server.  This utility lets you operate your PCjr. as an FTP Server.  The practical application of this utility is an easy and modern method to send from and receive files to your PCjr.'s (or any DOS machine) drives.  You setup the FTP Server on the PCjr,'s end and use a modern FTP Client on your modern PC like Filezilla.  This is what I use, and with a few tweaks to Filezilla, it works well.

In Filezilla, set the transfer type to binary, the maximum number of connections to 1, the timeout to 200 seconds and the speed limits to 25K/25K.  If you have a bidirectional port, you can push the speeds higher, but 50KB/50KB is the max you will probably be able to get from a PCjr.  A V20 or faster CPU will speed up transfer rates a bit.  Filezilla expects to talk to a modern machine, and it runs so fast that the flow control will get screwed up waiting for the slow PCjr.

On the PCjr. FTP Server, I recommend the following lines added to TCP.CFG :


The first two are required for FTP Server to run.  The remainder give the maximum buffer sizes and exclude the floppy drives.


jrIDE is an amazing sidecar that was recently (2012) developed by PCjr. enthusiasts.  It combines 1MB of SRAM, a real time clock chip and can boot 16-bit IDE drives.  It can support an IDE master and an IDE slave drive, and it can effectively support hard drives up to 8GB (the maximum of using DOS and FAT16).

The RTC is a Dallas 12887 module, and is socketed for replacement.  The date and time is set by a program called rtc, loaded in the autoexec.bat file on startup.  IRQ 1, 2 or 7 can be selected for its operation.  I suggest IRQ2 because the parallel port uses IRQ7 and the keyboard on a regular PC uses IRQ1, which could possibly confuse some programs that are not PCjr-aware.  The Speech Attachment also uses IRQ1.

In order to set the date and time, you will need a small program called, available here:

To set the date and time for the RTC, first, set the correct date and time in DOS using the DATE and TIME commands.  Next, run the program with the /r switch.  This will send the date and time you told DOS to the RTC.  Finally, add the program to your autoexec.bat file with the /d switch.  Upon every bootup, this will fetch the correct date and time from the RTC and automatically set it in DOS.

The IDE header is at a right angle and has all 40 pins. Pins 1 and 2 are at the bottom of the board.  The key pin can (via jumper) be used to provide +5v to power low-power devices like Disk On Module devices or Compact Flash cards.  The PCjr., without a power sidecar, is not likely able to supply sufficient power for a 2.5" or 3.5" hard disk drive.

The jrIDE BIOS is based on the Universal XT-IDE BIOS, so it should be able to support drives up to 8.4GB in size supported by Int 13 and maybe higher if true LBA is used..  Practically speaking, the use of DOS (pre 7.1) is going to limit you to 4GB drives.  You will need DOS 4.0 or better to use a primary partition (primary drive) greater than 32MB and logical drives greater than 32MB.  With DOS 4.0 or above, you can have a primary partition of 2GB (C:) and one or more logical drives in the extended partition within the remaining 2GB (D:).  With DOS 3.3, below, you will be limited at a maximum to a primary 32MB partition (C:) and 32MB logical drives in the extended partition, D:-Z: for 736MB total hard disk space.  With PC-DOS 3.0-3.2, only one DOS 32MB partition is available for a C: drive per disk.  DOS 2.1 allows only one 15MB partition for C:.

Of that 1MB of RAM, you can have 736KB total conventional memory, even though the PCjr. only counts to 640KB on the startup screen.  However, without a device driver loaded in config.sys, DOS will only see 128KB of RAM, and that is before it loads itself and the video buffer is taken into account.  The remaining RAM is the slow RAM controlled by the video controller.

The device driver to use with the PCjr. and jrIDE is JFCONFIG from PC Enterprises.  The most basic use of it is to load it in config.sys like so :


When this driver is loaded with a jrIDE, it will give you 608KB of conventional memory free.  Physically, this memory is between the first, slow 128KB and the video buffer window which starts at 736KB.  The lower 128KB is reserved for DOS and the video memory.  You can use what is left over for a RAM disk, which is especially important if you are using a null-modem to transfer data to or from a PCjr.

A system booted to DOS with JRCONFIG and no other drivers or an autoexec.bat loaded will report 753,664 total bytes (736KB) and 610,656 bytes free (596KB).

The driver has many command line switches, the only one that most people will need is -v32.  This will allocate 32KB of video memory so that programs using the 320x200x16 and 640x200x4 modes will work.

The only major downside to using JRCONFIG is that it is not really compatible with Cartridge BASIC.
 REM out the line with JRCONFIG or simply rename config.sys when you need to use Cartridge BASIC and DOS.  Cartridge BASIC is limited to 64KB free memory and freaks out if it is told there is more in the system.

Since JRCONFIG uses software interrupt 60, which is the default software interrupt for many Ethernet DOS packet drivers, assign the packet driver to use a different interrupt.

To obtain a jrIDE, join the PCjr. Web Forum, here :  Be prepared to spend well over $100 to obtain an assembled one, and you may have to wait.  The board assembly itself requires only through hole soldering, but the project is still quite the undertaking.


Most IBM PCjr. will have a socketed 8088 CPU, located underneath the disk drive.  If you are unlucky and received one of the last units sold by IBM, the CPU will be soldered onto the motherboard.  You can remove the 8088 CPU from the socket and replace it with a V20 CPU for a decent (10-15%) speed boost while retaining nearly 100% compatibility with software.  The most common part number for the V20 is the NEC D70108.  If you have a soldered CPU, you can always remove the CPU and solder in a 40-pin socket.

The V20, V30, 80186 and 80286 and later CPUs are not 100% compatible with 8086/8088 software because the 8086/8088 have undefined/illegal (as opposed to undocumented) opcodes whereas the later CPUs do not.  The only game I am aware of, after a great deal of searching, that may not support the V20 PCjr. is Lode Runner, but every version of the game available for download works just fine with a V20.  Every cartridge game for the PCjr. works fine with the V20.

Increasing the clock speed of the 8088 or V20 is not for the faint of heart.  There is one 14.318MHz crystal on the PCjr that is used for all system timing.  This includes the CPU clock speed, the 8253 Timer input and the OSC signal.  In the PC it is arguably more difficult to overclock because the DMA chip uses the CPU CLK signal for its timing.  Replace that crystal and all three frequencies, which are derived from an Intel 8284 Clock Generator chip, will change.

There is a PCB design called PC-SPRINT that essentially directs a higher clock solely to the CPU.  It is a separate board which is piggybacked on the existing CPU socket.  It has a separate crystal and a second 8284.  Typically, speeds of 7.16MHz or 7.37MHz are stable, although some people have boasted of obtaining a 9.54MHz speed.

IBM PCjr. Speech Attachment

This sidecar contains a TMS5220 chip very similar to the chips used in the Speak & Spell toys of the time and sounds identical.  It uses two methods to digitize and playback sound, LPC (linear predictive coding) and CVSD (continuously variable slope delta modulation).  The TMS chip handles the LPC while the CVSD is handled by a MC3418.  Interfacing to these chips is through an 8255 PPI and 8254 Timer.  All audio output is routed through the system board multiplexer just like the 3-voice chip.

LPC allows for the use of compressed digitized samples and the sampling rate is of higher quality.  The Sppech Attachment uses this method to play its built in vocabulary of 196 words, phrases and sound effects. Its 32K ROM chip resides at CE000-CFFFF.  The voice playback of the vocabulary samples has an 8KHz sample rate.  The built-in vocabulary is very easy to access in BASIC.  You can add your own (compressed) vocabulary words with a computer that has a program that can encode the recorded sound into the format of the Speech Attachment.

CVSD allows for recording voice and sound through the microphone input and play it back.  Normally voice recording is limited to disk size, but if you have a large hard disk, this will be less of a concern.  The recording and playback speed through the microphone ranges from 1.8K-4.8K per second.  CVSD encodes at 1 bit per sample, so that audio sampled at 38.4 kHz is encoded at 38.4 kbit/s.  The default addresses used are FB98-FB9F, FF98 and FF9F.  It also uses IRQ1.

The best program I have discovered to use the Speech Attachment is MAKETALK from PC Enterprises.  It will allow you to play the vocabulary and build sentences for recording by an external device and also allow you to record and playback to the limits of your disk space.

IBM PC Compact Printer

IBM released this low-cost printer to go with its low cost entry system.  It is a thermal printer and uses an 8-pin head.  It has just one button for line feed and a power switch and LED.  The printer uses the PCjr. serial BERG connector that plugs directly into the PCjr, but adapters exist that can convert it into a DB-25 connector for use with a regular serial port and a PC compatible.

This printer can print 56 characters per second, but only prints from left to right.  It can print 80 characters per line in standard mode, and supports double width mode, compressed mode, compressed/double width mode and underlining.  It prints all the 256 IBM ASCII and Extended ASCII characters except for the 64 block characters at 176-223.  It also supports a 480-bit graphics mode.

The Compact Printer uses an 8.5" wide paper roll.  The rolls typically are not perforated, so the user must cut or tear pages to length.  The lack of perforations makes it ideal for banners and graphics.  Staples and OfficeDepot sell 8.5" rolls, typically 98' or 164'.  Thermal printers do not need ink ribbons, ink or toner cartridges, so their operational cost is strictly from the paper.

The printer has a data transfer rate of 1200bps and uses 1 start bit, 8 data bits, no parity and 2 stop bits.  In order to obtain reliable operation, as in no missing or skipped characters, you should use the following parameters with the MODE command :

mode COM2: 1200, n, 8, 2, p

Without the IBM Parallel Printer Attachment, the BIOS assigns the serial port to LPT1.  Thus devices printing only to LPT1 should not have a problem.  If you have a Parallel Port attached, then it will be assigned to LPT1.  You can redirect LPT1 to COM1 or COM2, depending on which your printer is designated, by the command :

mode LPT1:=COM1: or

mode LPT1:=COM2:

The last issue with this printer is loading the paper.  First, you lift the smoky colored cover.  Next, there is a tab on the left side that you push in, allowing the paper roll enough room to fit inside the housing.  Fit the cardboard portion of the roll onto the two pegs.  The end of the paper must be feeding upwards and counterclockwise.  Release the latch on the side to let the printer allow the paper to be fed to the thermal head.  Take the edge of the paper, fold it in a U shape, and guide it down behind the beige plastic bar.  Use the paper feed button until the paper catches.  Gently adjust the paper, once you can see it through the underside of the thermal element so that it is straight and then close the latch on the side to hold the paper in place.  Make sure you have enough paper so that a little bit of paper appears over the plastic cover when you put it down.

Tandy Mod

One upgrade you may want to make to your system board is to make it more compatible with games that support the 160x200x16, 320x200x16 or 640x200x4 graphics modes only with a Tandy 1000.  Some games (essentially just about every PC game released after 1985) will allow you to select Tandy graphics, but when you play these games on a stock PCjr., you will only see every other line.  The Tandy mod will fix this problem.  A good guide to the mod with instructions can be found here :

Other problems may prevent a game from working on a PCjr., including when a game auto-detects a Tandy 1000, keyboard or joystick input issues, graphical anomalies due to the differences between the Tandy and PCjr. graphics controllers, disk-based copy protection failures.  You may need to set the audio multiplexer to output 3-voice music before starting a game.

Of PCjr. games, the only game I know of that doesn't like the Tandy mod is ScubaVenture, which will throw a line out of place about every time the screen scrolls.  The line is solid, which makes it more difficult or impossible for the player to pass it without losing a life.  Mouser also shows some graphical garbage on the top of the screen with the Tandy mod, but it does not interfere with game play.

Memory Sidecars

If you are not fortunate enough to obtain a jrIDE, you can add memory expansions that were sold for the PCjr. if you can find one.  These typically come with 128KB or more of RAM, and without any modifications you can add up to 512KB of RAM in this way to the system.  IBM's Memory Expansion is configured through four dipswitches on the back of the sidecar.  Only one switch should be "ON" for each Expansion, the rest must be OFF.  You could attach up to four expansions, and the first expansion should have switch 1 ON, the second expansion switch 2 ON, the third expansion switch 3 ON and the fourth expansion switch 4 ON.

The IBM Memory Expansion can be modded to have 512KB on a single sidecar.  You must remove the sixteen 64Kx1 DRAM chips and replace them with 256Kx1 DRAM chips.  Just to the right of the large 74S409 chip, you will see three solder pads closely aligned in a row, with a trace connecting the left and center pads.  You must cut that trace and connect the center and right pads.  It may be possible to mod this card to 736KB, but I do not know how.

No comments: