The XRX Cassette Modification

written by Matthew Reed

XRX-III Service Bulletin

Radio Shack Service Information Bulletin number 1130 describing the XRX-III modification

The XRX was an official hardware modification from Radio Shack for the TRS-80 Model I. It installed inside the Model I and made it easier to load programs from cassette using Level II BASIC. Radio Shack dealers would install the XRX for free on any unmodified Model I. (For owners with a modified Model I, the installation price could range from $30.00 to $50.00.) Model I’s built after the XRX was introduced included it as a standard feature.

The original version of the modification, usually called the XRX or XRX-1, was introduced in early 1979. At the time, Radio Shack only called it “the modification.” Because it wasn’t a named product with a catalog number, it was known by many names by users, including XRX, XRX-I, XRX-II, XRX-III, XRX2, XRX3, XRS-2, and X2X. These were all different names for the same modification.

The XRX was made redundant by the introduction of version 1.3 of the Level II ROM, better known as the R/S L2 BASIC ROM. The version 1.3 ROM fixed in software what the XRX fixed in hardware.

The Problem

The Model I was designed to save and load programs and data on cassette tape using only an inexpensive cassette recorder. The saving and loading process could work quite well when done with a good quality cassette recorder. But the loading process was often inordinately sensitive to volume levels. Most people found through trial and error that there was only one volume level that worked reliably. Making matters worse, cassettes produced by different software companies often required different volume levels, requiring another set of adjustments. Reading a Model I cassette could be a very frustrating process.

The reason for the overly sensitive volume control was actually a software error in the Model I Level II ROM. The ROM cassette reading routines worked by reading a clock pulse, waiting for a short delay, and then listening for a data pulse1. The mistake was that the cassette reading routines started listening for a pulse at the start of the delay, not at the end of the delay. This meant that any noise at all detected on the cassette during the delay would be counted as a data pulse. It became crucial to set the volume just high enough to detect a pulse, but low enough to prevent noise from being counted as a pulse. Depending on the cassette and the recorder, that precise volume level could be almost nonexistent.

The XRX

There were hardware add-ons, such as the Data Dubber from the Peripheral People, which connected between the cassette recorder and the Model I. They worked by shaping the pulse read from the cassette recorder to match what the Model I was expecting. The Data Dubber allowed reading cassettes at a wide range of volume levels.

The XRX modification from Radio Shack used a far simpler approach than the Data Dubber. It detected when the ROM had finished reading the clock pulse and then electronically blocked the cassette input until it was time for the data pulse. This made the volume setting less important and cassettes could be read with a range of volume levels. The XRX was essentially a hardware patch for a software bug.

The XRX board itself was fairly small, around 1 1/2" by 1 1/2", and consisted of five components with four wires. It was installed in the lower right side (under the ? key) of the Model I motherboard. Installation involved cutting one trace and soldering four wires.

The XRX solved most of the volume level problems and became a standard part of most Model I’s built after it was introduced. Here is an excerpt from “Important Information for Cassette Users” which announced the XRX modification:

A modification that helps cassette loads in Level II computers is available free to TRS-80 Level II owners. This modification makes the volume setting less critical so that variations in different tapes usually will not require volume readjustments.

Some of the more recent Level II Keyboard units have had this modification factory-installed. To see if the modification has been included in your computer, look at the catalog number on the bottom of the keyboard case. The modification has been made if the number ends in -1. For example, if the number is 26-1004-1, the modification has already been installed; if the number is 26-1004, the modification has not been installed.

The XRX was upgraded to the XRX-III2 in late 1979, which was described in Radio Shack Service Information Bulletin number 1130. The XRX-III was a slightly more reliable design that was less susceptible to speed variations. Installation of the XRX-III involved one trace cut and soldering six wires.

Because it enforced a specific set of cassette timings, the XRX conflicted with software and hardware which supported faster cassette speeds, such as the LemonAid loader from Lemons Tech and KWIK from KWIK Software. The Cassette Gazette newsletter from Lemons Tech included instructions to disable the XRX modification.

The R/S L2 BASIC ROM

Around July 1980, Radio Shack released version 1.3 of the Level II ROM, better known as the R/S L2 BASIC ROM3. Version 1.3 corrected the cassette read routines to move the pulse detection until after the delay. This meant that the XRX modification was no longer necessary and not recommended. In fact, the original XRX modification could disable the cassette read routines in the version 1.3 ROM entirely!

Although it no longer served any purpose, the XRX-III was supposed to still work with the version 1.3 ROM. The final Model I’s manufactured in 1980, which included the version 1.3 ROM, no longer came with the XRX modification installed. As Radio Shack wrote in the TRS-80 Microcomputer News after the version 1.3 ROM was introduced:

The cassette load modification for the keyboard is not needed with the new ROM and will not be installed.

The TRS-80 Model III and Color Computer, both introduced on July 31, 1980, could read and write cassettes, but never needed an XRX-style modification.


  1. Model I 500-baud cassette storage used a simple encoding with every bit written consisting of a clock pulse and then either a data pulse or the absence of the data pulse. ↩︎

  2. There was presumably also a XRX-II, but I have never seen any information about it. ↩︎

  3. This was because the ROM shortened the “RADIO SHACK LEVEL II BASIC” startup message to “R/S L2 BASIC” to save memory. ↩︎

Categories: Hardware