As I've mentioned before, one of my favorite pastimes is vintage computing. I take particular interest in early connect-to-TV 8 bit microcomputers (including the short-lived Mattel Aquarius, for which I recently developed an extremely thorough, free modern online visual designer to assist fellow Aquarius artists and developers).
And while I'm mostly a software guy, the aging nature of these vintage electronics leads to inevitable hardware faults and necessary maintenance, therefore it is still vital to be skillful on the hardware side as well. I recently wrapped up the most strenuous restoration project to date — an original TRS-80 Model I computer from 1977 with all the bells and whistles from that era. I don't usually document or write about my repair projects or 8-bit endeavors since I do it purely for the fun of it and personal enjoyment, but this was such a long and convoluted journey of highs and lows that I figured I should write a blog while aspects of it are still fresh in my mind. There are a lot of resources for TRS-80 computers out there already, but perhaps my shared experience will be of value or help to others trying to diagnose their own sets. If you have any questions, please feel free to ask in the comments.
This guide is not meant to be a deep dive of my own repair efforts, but rather a general plan of attack to troubleshoot any TRS-80, with many principles carrying over to other platforms as well. My endeavor of troubleshooting lasted more than 7 months of on-and-off attempts to fix a huge mix of problems that I hope few others have to deal with to such exhaustion. If this guide can help even one person in the future save the struggles I faced myself, bravo!
A Quick Jog Down TRS-80 Memory Lane
In 1977, Tandy (via Radio Shack) released its first TRS-80 home computer. For an initial advertised cost of "$600 to $15,000 (Kits and Assembled)" this was one of the major players in the early microcomputer boom, with Commodore and Apple making up the trifecta. This was an all-inclusive PC/Keyboard combination that hooked to a modified RCA consumer television set and allowed simple data transfer via cassette audio. The guts of the system were powered by a Z80 processor clocked to 1.774 MHz, with 80 integrated circuits cooperating to bring the system to life.
=&0=&button will attempt another seek of floppy data.
If no expansion interface is connected (and I highly recommend beginning your TRS-80 troubleshooting adventure with nothing else connected except the core TRS-80 computer) there is still a chance something along the expansion interface bus is triggering this garbage screen behavior.
To override any phantom expansion interface (or an actual EI if one is connected and powered on), hold down the BREAK key and then power on the TRS-80. You may have to attempt this several times. If the problem resides somewhere within the expansion interface communication line, the garbage screen should flash off and get you to the original BASIC prompt. You can also try holding in BREAK and RESET when the garbage screen is already displayed, but I recommend doing the hard power cycle.
If this resolves the problem, then we know that the RAM, ROM, CPU and overall system is relatively healthy. It then becomes a quest to pinpoint precisely why it believes an EI is connected when one is not. Scrutiny should be placed in checking for any dry solder joints, bridges or other unusual characteristics of the board especially surrounding the expansion interface bus and components. This is all assuming that the CPU, RAM and ROM are good based on the previous checks. You'll want to parse through the technical guide and Sams schematics to understand the flow from CPU/Keyboard to Expansion Interface and the various ICs that get touched along the way
Character Corruption - Video RAM (2102) or Character Generator
If you overcome all previous defects based on the strategies above or your own discovery, you will hopefully arrive at the BASIC prompt and see that the system is able to at least minimally be interacted with. However, as I discovered in the evolution of my repairs, the characters were clearly corrupted on my screen. They were technically all being output correctly, but "Rs" showed as "Qs," "Ds" looked like lightning bolt glyphs, and so on. Only spaces and underscores were showing suitably.
This generally comes down to either a problematic flip/flop IC (Z28), character generator (Z29) and/or most often one or more VRAM chips (Z45-Z48, Z61-Z63). The character generator is an obscure chip these days and, short of rigging up a custom EPROM for it, is best to rule the other possibilities out before attempting replacement. If your system doesn't already have a lowercase mod, I would recommend adding one which will make for a better system and might resolve the character issue. If you buy from Ian he includes a fresh character generator with descenders. More on lowercase modifications, later.
The video RAM sockets are not socketed so to replace them you'll have to desolder, add sockets and then replace. [Some later runs of the TRS-80 did include a socket for Z45 as a convenience for Radio Shack technicians or users to add a lowercase mod.] But before you deal with any of that, read on.
The Sams manual includes a clever bit of BASIC that allows checking of each VRAM bit without needing to remove anything or use external tools. The code is below:
REM VIDEO RAM TEST PROGRAM
5 DATA 1, 2, 4, 8, 16, 32 , 128
10 Y = 6: X = 15360 : POKE X,64
20 IF (PEEK (X) AND 64) = 64 THEN 30 ELSE 150
30 POKE X,160
40 IF (PEEK (X) AND 64) = 0 THEN 50 ELSE 150
50 FOR X = 15360 TO 16383
60 FOR Y = 0 TO 6
70 READ Z: POKE X,Z
80 IF (PEEK (X) AND Z) = Z THEN 90 ELSE 140
90 POKE X,O
100 IF (PEEK (X) AND Z) = 0 THEN 110 ELSE 140
110 NEXT Y
120 RESTORE : NEXT X
130 PRINT " MEMORY GOOD " : END
140 IF Y = 6 TH EN Y = 7
150 PRINT " BIT "; Y; " OF MEMORY LOCATION" ; X; " CHECKS BAD"
160 IF Y = 6 THEN 50 ELSE 110
For your convenience, I've created a ZIP file containing both a .CAS and .WAV version of the same code. You can feed the .CAS file through Play CAS from a computer or laptop to the TRS-80 cassette interface by plugging the black (Audio INPUT) end of the TRS-80 cassette cable into your Headphone (or Front Audio Out) jack of PC. Or, you can play the WAV file from any audio source into the TRS-80. To load it on the TRS-80, assuming your keyboard is functional, type CLOAD at the Level II BASIC prompt and press ENTER. Then play the audio file. It should take about 11 seconds and when done you can type RUN and press enter.
The program will iterate through every byte of video RAM and when done with each will output an "@" character to the screen. If there are any errors along the way it will mention what bit(s) check bad. You can use that and a little math alongside the schematics to figure out which chips are defective. To quote from an 1980 Radio Shack technician (Marc Brumlik):
To add lower-case display, bit 6 must be implemented. This may be accomplished by switching the memory chip for bit 7 to bit 6, thereby enabling lower-case letters and eliminating graphics, or by addition of an 8th memory chip. We prefer adding the extra chip. In either case, if you plan to use Level II BASIC, you must include a switch to disable bit 6, or BASIC will place a lot of funny characters on the screen!
Although it was stated that a toggle switch should be added, that was mostly with respect to the very original character generator IC. Since lowercase kits and later models began shipping improved character generators and mappings, this concern quickly grew out of style. The odds of running into any clashes with a permanent lowercase mod is non-existent unless you do happen to have the original run Z29 IC. If you feel compelled to add a switch, it's also a trivial process as detailed in the Electric Pencil instructions.
Inside of the Custom TRS-80 book, the following code snippet is used to iterate through all 256 character values and POKE them to the screen. This is a way to verify whether your device has lowercase installed.
20 FOR X = 15360 TO 15360+255
30 POKE X, Y
60 GOTO 60
Here's the .CAS and .WAV. As you can see from the screenshot, when all 8 VRAM bits properly functional, you'll be able to output the lower characters from the ROM, otherwise the original all-caps set will be repeated.
Even with the hardware mod complete, by default Level II BASIC and other variants of OS will not enable you to write lowercase without loading a driver of sorts. This was supplied within Radio Shack's conversion kit for both BASIC and disk systems. A copy of this driver can be found here:
Two different files are included in the ZIP file. The BASIC version can be loaded by entering SYSTEM <ENTER> U <ENTER> and then playing ULCBAS.CAS. In about 20 seconds it will finish and you can then press / to reload BASIC but with lowercase capabilities. This will have to be done every time you want to work in vanilla Level II BASIC and utilize lowercase. To toggle the lowercase feature on-or-off, press SHIFT + 0. The other file, ULCDVR.CAS is for very old disk systems, but as most DOS platforms for TRS-80 include their own integrated lowercase driver, this is largely redundant.
Although not every application or game embraced lowercase, the difference in readability by those that did is substantial. This is especially true in text adventure games, such as Scott Adams' Adventureland (available from Ira Goldklang's TRS-80 website). In fact, Scott and other developers make selective use of CAPS within their content to add to the atmosphere and dynamics, in ways that users without the lowercase mod miss out on.
Differences in Character Generator ROMs
Throughout the TRS-80 lifecycle, a few official and numerous homebrew iterations of the character ROM were manufactured. The original (MCM6670) was not particularly meant for lowercase since by default no device supported it. All lettering on this original ROM aligned at the base, even lowercase letters that were meant to have descenders. This led to some strange screen display and also included an additional glitch that became known as the 'flying a' bug. Eventually the one shipped with kits and newer devices was MCM6673, which reworked the font to support one-row descenders and is the one you should pursue to remedy the early defects.
There is also a chip dubbed Gendon3 that permits three-line descenders, which Ian also sells on eBay but is more of a project to mod than the original Radio Shack / Electric Pencil style. You can see what that looks like in the screenshot to the right (credit to Ian), or read more about it on this thread from Ian on VCFed.
I have both the MCM6673 mod kit with great thanks to Ian, but also a custom EPROM (MSL2716K) on its own breadboard that was included in one of my part machines. I haven't done great analysis on the EPROM yet or if this was actually a distributed kit, but it sports a few different glyphs such as a ` in place of the Euro sign, and the two on the end. The typeface itself matches the 6673 including one line descenders.
For the most extensive rundown of "everything you need to know" about lowercase mods, past and present, please refer to page 25 of the TRS8Bit Newsletter, Volume II Issue 03, September 2017. In that article, Ian Mavric does an exhaustive rundown of these character generators (page 137 of the Year 2011 bulk PDF, and Part 2 on page 188 which delves into third party mods).
Level I and Level II BASIC ROM Versions
The original TRS-80 shipped with "Level I" BASIC, which was derived from Tiny BASIC and very limited compared to their soon licensed Microsoft BASIC, dubbed Level II. Level II itself saw several updates over the life of the Model I, which were later coined as v1.0, v1.1, v1.2 and v1.3. For a thorough study of the differences among them, I differ you to Matthew Reed's website:
Although Level III BASIC was technically a thing, it wasn't a ROM-based solution and not widely adapted. As such, the best Cassette BASIC ROM solution for Model I is v1.3.
Until the later era of Model Is, Level II was typically supplied as an upgrade that used a three-ROM daughter board attached to one of the two ROM slots on the mainboard. Eventually it was also made available as a two ROM set that could plug directly into the main PCB, alleviating the need for any ribbon cables and sub-boards.
Determining ROM Versions
By chance I happened upon a very compact snippet of code in the 1982 book "TRS-80 Assembly Language Made Simple" that does a few PEEKs to arrive at a number that can determine the version number.
1 REM TRS-80 ROM CHECKER
2 REM RUN PROGRAM AND WAIT FOR OUTPUT NUMBER
3 REM 176 = ROM 1.0
4 REM 142 = ROM 1.1
5 REM 10 = ROM 1.2
6 REM 162 = ROM 1.3
10 FOR I=11264 TO 12287:V=PEEK(I):S=S+V:NEXT I:X=S/16
30 PRINT (A+B)
Here's a .CAS and .WAV version of this snippet. This program will take a minute to RUN and will return a three digit number.
- 176 = ROM Version 1.0
- 142 = ROM Version 1.1
- 10 = ROM Version 1.2
- 162 = ROM Version 1.3
That aside, the most definitive resource for reviewing and comparing ROM sets would be Ian Goldklang's website. Although it is noted that TEST1A from TRSDOS can determine this if you have a fully functioning expansion interface, disk drive and TRSDOS disk, I find the alternative method of running a simple BASIC program to be faster and less error-prone. The code for this script, written by Dean Bear, is reprinted below along with CAS and WAV formats. It is faster than the snippet above and more comprehensive.
1 FOR I = 0 TO 23 : READ P : POKE 28656+I,P : NEXT I
2 DATA 17,0,0,62,16,237,71,33,0,0
3 DATA 69,26,79,9,19,237,87,186,32,247
4 DATA 195,154,10,201
5 POKE 16526, 240 : POKE 16527, 111
6 DIM ROM(3) : ? "M1 ROM CRCS FOR 3 CHIP SET"
7 FOR I = 0 TO 2
8 B = 16*I : C = 16*(I+1)
9 POKE 28658,B
10 POKE 28660,C
11 D = USR(0)
12 IF D<0 THEN D=D+65536
13 ROM(I) = D
14 A$ = "ROM "+CHR$(65+I)+" = "
15 GOSUB 22
16 NEXT I
17 ? "CRCS FOR 2 CHIP SET, USE A/B AND C VALUES"
18 D = ROM(0)+ROM(1)
19 A$ = "ROM A/B = "
20 GOSUB 22
23 IF S<D THEN X=X+1:S=S*16:GOTO 23
24 PRINT A$;
26 FOR L=X TO 1 STEP -1
29 IF N>9 THEN A=1
30 IF L<5 THEN PRINT CHR$(48+N+7*A);
32 NEXT L
.CAS and .WAV versions, here.
From the various parts and pieces I acquired this past year, I had several different ROMs. After running the checksum code above, I determined I had both v1.0 and v1.2, as well as some unknown EPROMs in various states of decay, and the original Level I. To get the best of both worlds, Level I ROM can remain in one socket (Z35) and the daughter board with Level II can run from Z36. A switch can be added to toggle between Level I and Level II as explained on pages 112-114 of the Custom TRS book.
With that done, I still preferred to replace Level II v1.2 with v1.3 to embrace its advances in both cassette loading accuracy and keybounce prevention. Obtaining original ROMs of v1.3 is not an easy task, so the solution is to burn custom EPROMs.
Custom EPROMs for Upgrading to Level II v1.3
[Addendum: While my approach below is built around 1980s tech including the EPROM chips and ROM files, you will find a similar technique outlined by Matt Boytim, using the much more common 27256 EPROM, on Page 9 of the Dec. 2021 issue of TRS8Bit - "Replacing Model I ROMs with A Single 27256 EPROM"]
Throughout months of repair efforts, I'd been mentored by Larry Kraemer who contributed a lot of time and energy toward advancing my TRS-80 knowledge. Larry wrote excellent articles and solutions in TRS-80 newsletters from the earliest days of the Model I onward, and remains actively supportive to this day. You can find Larry on the VCFed forums and he kindly offers a wealth of wisdom about the TRS-80 line of machines.
One article that Larry wrote in the early days and republished with amendments in TRS8Bit Volume 08 Issue 01 (March 2014) was: Radio Shack Level II ROM UPGRADE to Version 1.3 (starting on Page 13).
The gist of the solution is to use three TMS-2532 EPROMs to burn copies of the v1.3 ROM (three 4K raw binary files). Those EPROMs have a near identical pin-out to the original ROMs, with the exception of pin 21. That pin does not get inserted into the sockets but rather connect to a pull-up resistor, to run them high, mimicking the behavior of the original ROMs.
Since this chipset requires 25V, attempting to burn it on modern lightweight (USB-powered) programmers like the TL866 II is not practical, nor do most modern programmers provide native compatibility with these 1970s-80s EPROMs.
Instead, I opted to use the BP Microsystems EPROM Programmer EP-1 from the 1980s. This is a ROM-based programmer that is entirely self-contained and can be utilized through any terminal-type software (RS232 serial interface) or its dedicated DOS software. A great guide on using it can be found on Paul Carbone's website, including links to the manual, latest software/firmware and a list of supported chips.
The firmware in mine was initially version 2.00 (1986) but they continued pushing out updates through the early 1990s with 3.20 to support an increasing list of programmable ROMS. I had some spare 27256 chips and was able to program the 3.20 ROM to it, then installing it into the device for a successful upgrade. There are a couple different versions of its DOS program, the latest of which works best on 286-486 MS DOS machines whereas the former was designed for PCDOS on XT machines. The EPROM software ran well on my IBM 5160, but the latest iteration to match version 3.20 had to be operated from my 286. If you are using a Serial-to-USB adapter on a modern machine, your success may vary depending on a lot of circumstances. I stuck with original era-accurate hardware to do the burning.
It is not difficult and requires only a few commands, a list of all the noteworthy ones I generally use include:
- EP 1 or EP 2 to launch the EP software, where # is the port number (1 or 2)
- TEST to walk through a detailed hardware test of the device which includes each individual pin check (requires multimeter, worth running once to verify the hardware is within spec)
- C to list and select the manufacturer and chip
- RB (Binary) or RH (Hex) or RI (Intel Hex) or RM (Motorola Hex) or RT (Tektronix Hex) to read the ROM data to a file
- BLANK to verify that the EPROM is blanked out (all 255s) and ready to be programming
- (Hex) or (Binary) to program the chip from a local file
- VB to verify the chip contents by comparing to a binary file
- SU to read and calculate the checksum for verification purposes
- to review the EP-1 status including firmware version and chipset configuration
- Q to quit the application
With all of this in order, the TRS-80 was successfully booting to the new V1.3 ROM. The tell-tale sign that you are using V1.3 and not an earlier ROM iteration is that the initial prompt was changed to say "MEM SIZE?" instead of "MEMORY SIZE?."
Jittery or Unstable Video... Check Video Mixing Section (Caps & Resistors)
When I completed the majority of repairs to the point where I had a usable TRS-80, I still found that the display was wobbly, jittery and somewhat disorientating. My immediate reaction was that it could be the monitor itself. But I realized even when hooking to a composite setup the signal was just not steady, it appeared there was a lot of interference coming through the line. It's at this point you'd generally want to hook up an oscilloscope and analyze the actual video output signal to compare with what the technical references show. But at a minimum we should test the capacitors and resistors that are part of the Video Mixing circuitry. Since all other aspects are functioning fine including the character generation, horizontal and vertical mixing and sync generation, it seems to be something interfering after that point and before the signal gets fed out to the monitor.
The Video Mixing section of the TRS-80 is explained well in the Radio Shack TRS-80 Technical Reference Handbook (2nd Ed.) on page 42-43. After ruling out transistors Q1 and Q2 (via substitution and testing), I recognized that when I removed ceramic capacitor C20 the video cleared up well but then we obviously lost the horizontal position. The manual notes: "Capacitors C7 and C2, together with R30, form a filter network for Q1 's collector." I checked the values of these and ultimately replaced C2 and C7 since I had an abundance of capacitors on hand. In that same pathway, I replaced a variety of the resistors that seemed to had drifted out of spec including R27-R30 and R22-R23. Since a lot of this also flowed through Z41 (75452) and I had some extras of that chip I swapped that as well.
These replacements, especially the resistors, helped bring the video back to perfect stability so there is no longer wobbling or drifting while in use. When I still had the board open, I took this opportunity to replace the rest of the electrolytics and a couple film capacitors since the majority of them are common and this helps future-proof those from drifting too far out of spec.
Triple Check IC Orientation, Work Environment and Cable Connections — A Word of Caution!
A lot can go wrong due to even slight carelessness when working on these systems. It happened more than a few times as I worked through the repair. A few really bad incidents and lessons learned included:
- When you accidentally insert an IC the wrong way... Sometimes when it's 4 a.m. and you're in a dim-lit space adding sockets and replacing chips, it can be easy to overlook the correct orientation for ICs. All ICs have an identifier for pin 1, usually with a cut-out at the top of that side or a dot/bump/marking where pin 1 resides. The PCB board also has a groove cut out to indicate where the top of the IC aligns. If you mess this up, a lot can get damaged depending on what chip you made the mistake on. In one occurrence by myself, I accidentally replaced one of the voltage regulators upside down and tried powering it up. This sent voltages to all the wrong pins and then to further areas of the board. In an instant the majority of 4116 DRAM had been fried and red hot to the touch. Even after remedying it, the process of retesting and verifying all components can be a real daunting prospect considering how many ICs and circuits cross paths.
- When you accidentally insert the power supply plug into the wrong socket... We already touched upon this issue earlier and I imagine this was a common occurrence in the 70s-80s given the identical cables and ports for power, video and cassette. The important takeaway is to not plug the live power cord into either the video or cassette ports, and ideally don't even plug anything into the wall until you have verified that each connection goes where it should. This mistake can result in stray voltage going everywhere that they shouldn't. The video port oopsie can lead to a surge and then no power/voltage, in which odds are the Zener Diode CR1 and/or regulator Z1 (possibly Z2) need to be replaced. Start with CR1. If you do the same with the cassette port, it can cause damage to parts along the cassette path. If this happens and suddenly the cassette line no longer kicks on or reads/writes, first try substituting the Z80 CPU and if that fails then check CR3, CR6, CR9, CR10, Z59, Z41, K1 relay...
- When you don't have a clean workbench and have metal tools laying all over it... Some people have massive wall-sized workbenches, others opt to do all their work from a cramped TV tray or computer desk 😉. Along with my recommendation of buying an anti-static work mat to avoid accidental discharge into the chips, it is essential to keep the surroundings clear from any potentially conductive material. Again speaking from personal mistakes, there'd be times I was working at this and suddenly see smoke, hear a pop, or everything just fails. At one point this happened when I was messing with the big power transformer Q4. In that instance and several others, I lifted the board up from the table only to discover a small screwdriver, wire cutters or pry tool had gotten under there and was making contact with numerous points, creating connections to components that never should be. If this happens you'll have to spend time tracing any potential problems yet again. At one point I had a bridge rectifier go out that I attribute to inadvertently shorting some connection points.
Centering the Video Output and Final Checks
Alas, we've reached the point where the entire TRS-80 Model I is back to peak form (right? right?!) and the final remaining thing to do is to fully center the video and do a last check of voltage before putting it back together.
First, check and adjust the voltages once more as described in the "Voltage Checks: Internal Voltage" section early on in this article. There is quite a range of tolerance so anything from 11.4V to 12.6V in the 12V line and 4.75v TO 5.25v in the +/- 5V lines are acceptable. The OCD side of me still prefers to get each value right on the mark at 12.0V and 5.0V. Now is also a good time to do the touch test on all ICs in the device to make sure none of them are running red hot, although some of the power transistors (especially the heatsinked ones like Q4) will, by design, run very warm. In my final phases of testing, I found that Q3 (2N3904 power transistor) was getting finger-burning hot within three seconds of power on, while Q4 was not warming much. It was eventually found that Q3 was faulty, and replacing it let the heat distribute suitably to Q4. If you have a thermal camera you can check for hot spots that way, but that's not necessary.
To center the video correctly, we need to do it from the TRS-80 side of things first and then worry about external displays afterward. We can run a simple BASIC program that SETS points across the extreme boundaries of the display memory as well as a center point, and go from there. Below is a corrected code snippet from the one included in Radio Shack's technical guide. You'll find similar code in the Sams manual.
20 FOR X = 0 TO 127
30 SET (X, 0) : SET (X, 47)
40 NEXT X
50 FOR Y = 0 TO 47
60 SET (0,Y) : SET (127, Y)
70 NEXT Y
80 FOR X = 62 TO 65
90 SET (X,23) : SET (X,24)
100 NEXT X
110 GO TO 110
As always, here's the .CAS and .WAV for your convenience.
Rather than attempting to adjust it using the original monitor that itself may be misaligned, I recommend connecting it to a reputable modern set using a composite cable like the ones I constructed earlier. The benefit of using an LCD screen (or better yet, a capture card tuner) is that there is no overscan, and 4:3 content is cleanly displayed in the center. In my case, I connected it to a very old but still trustworthy Hauppauge capture card so that I could clearly distinguish where the bounds of the 4:3 are and how to perfectly center it. Adjust the horizontal (R20) and vertical (R21) centering as needed using the variable resistors. After it is set, you can then reconnect it to the original monitor and use the monitor's own vertical and horizontal adjustments on the back to center it there as well. You're now assured to have stellar alignment on both the TRS-80 and the monitor, which is very helpful!
Time to put a bow on it!
Expansion Interface: Things You Should Know
This guide was predominantly made to discuss the TRS-80 Model I computer itself as an extensive repair guide. However, I also embarked on an often similar troubleshooting effort for an expansion interface. Underneath the casing they share many similarities, including their own banks of RAM, controllers, matched capacitors and so forth. If you follow the basic principals above and review the schematics and guides specific to the EI, you should be fairly well-suited to repair any problems.
Rather than rehashing the usual, I want to just touch briefly on a few points:
- Read the Operator's Manual: Sometimes just reading the basic owner's manual for any of these devices can go a long way to understanding their expected behavior and operations, more-so than the technical references. Here's a great copy of the EI's manual that consumers were given, and it makes a light read while familiarizing you with all of its inputs and outputs. When I first ventured down this repair path and acquired an EI, I knew nothing about it so found this guide was enough to make me feel comfortable with how it should operate. Without reading it over, a person might think the TRS-80 itself has a defect if they turn it on while hooked to the EI and only see a garbage screen — but we learn that it does this always if there is no bootable drive media, and that holding down BREAK on boot (or BREAK + RESET) can put us back to BASIC.
- RAM Banks for 16K or 32K: The expansion interface supports an additional 32KB of RAM, bringing the total to 48K assuming you've maxed out the TRS-80 at 16K. If you are only installing 16K into the machine, you should install it to banks Z9 to Z16 instead of Z1-Z8 (which is the high memory allocation for the subsequent 16K). This felt backwards and led to a lot of time troubleshooting why I was not seeing any of the extra RAM when I had 16K in Z1-Z8. As with the TRS-80, you'll want to check all ICs to ensure nothing is getting scorched hot as well as test all RAM. To determine whether the EI is working correctly with expanded RAM, power up the TRS-80 while holding BREAK while connected to the powered on EI. Press ENTER on the "MEM SIZE?" prompt and then type: ?MEM and press ENTER. If you see around 15570 that means it is only seeing your internal 16K. Anything above that means it has added the RAM from the EI (e.g., 48338 if it is maxed out to 48K).
- Expansion Interface Connector Cable: The early models of the EI had major interference problems between the computer and the EI. So bad that there was an official "buffered cable" recommended to prevent random failures and glitches. The revised EI board resolved this solution and they recommended using a standard 40-pin cabling (6 inches or so in length) instead. There were also apparently issues with the edge connectors of these units corroding and causing malfunctions. In my repair efforts, standard 40-pin male straight headers are soldered onto both EI edge connectors (keyboard and EI). This allows for a standard IDE hard drive cable to connect. What caused me a major headache was that the cable I was using was three feet in length. Everything seemed to work okay at first glance. But when I'd boot into Level II BASIC and specify any explicit MEM SIZE especially over 30,000, it'd generally fail and corrupt the screen even though those bytes should be perfectly reservable with extra RAM. I spent way too long repairing all the sockets and solder points, testing and retesting RAM, swapping other components. Ultimately only to discover that the cable was simply too long for reliable connections. I now use the shorter end of that same cable, approximately one foot in length, and have no trouble at all. I will be replacing the cable with a more compact and stylish IDE cable in the future. A similarly difficult to detect problem occurred when I was trying to use a different interface cable that came with the set. Under very close examination I discovered several of the 40 wires had broken near the connector points so any task that required transmission on those pins would fail.
- Power Supply: The original setup for EIs required that you stick two full TRS-80 power supplies into the unit's case. One connected internally to the EI board, and the other ran out the back along with both electrical plugs. Make sure voltage is checked across the pins if using these old supplies to ensure nothing is impaired. I would recommend investing in a heavy duty modern power supply that can power both the TRS-80 and EI from a single outlet and is much more refined.
Before attempting any floppy drive hook-up or advanced configuration, you should focus on getting the TRS-80 perfected as well as the EI with maxed out RAM. Now would be a good time to re-test Level II ROM cassette loading and that all RAM is accounted for. With 48K total, you should be able to enter 60000 for "MEM SIZE?" and have BASIC load successfully, then see around 42801 available for BASIC when you type ?MEM. (The decimal value specified for "MEM SIZE?" actually refers to which memory location should be the final byte reserved for BASIC, with the rest being preserved for machine language routines or what not.
Originally, the TRS-80 Model I supported only single density (35 track) drives/disks though a floppy controller chip (FD1771) in the EI. These disks provided enough storage for up to around 85KB of content. Eventually double density controllers and adapters were manufactured to open the doors for double density 40-track disks with expanded storage capacity. Swapping floppy controllers was a simple effort, since they were already socketed. One popular adapter was Percom's Doubler II. This fit right into the original floppy controller socket, and within it you'd install the original FD1771 alongside a second controller it included. Over time, more disk drive manufacturers produced compatible double density hardware, and flavors of DOS started natively offering support.
The old 5.25" floppy drives ("mini disks" compared to the original 8" mammoths) are rather sophisticated internally and require their own schematics and service manuals to help troubleshoot. The good news is most drives from the era were relatively similar in operation and maintenance.
Before touching on some key takeaways to look out for when dealing with floppy drives, I again stress that you should do a full visual inspection of the drives inside and out before powering them up or attempting to read disks. One of my disk drives appeared cosmetically fine on the outside, but internally had very old paper-plastic electrolytics for the power supply run and two of them had exploded and were highly unstable.
A few important items to note:
- Head Cleaning and Rails: Over time the sensitive data-reading heads can collect even tiny specks of dirt that can hinder its ability to read floppy disks. Likewise, the rails that the head assembly traverse on can seize up as the original polish and lubricant dries up. You can find many tutorials online about floppy drive maintenance. Sometimes to get at the heads requires disassembly or removal of the top PCB. I usually gently brush against the heads with a non-lint foam brush containing either IA 91% or dedicated floppy contact cleaner such as from old stock Sony cleaning kits. In the glory days of floppies you could also find head-cleaning disks similar to VCR tape cleaners, but those have gotten fairly rare these days. If you have a long enough cleaning pad it is sometimes possible to clean the heads by going through the door opening without any more disassembly needed. I want to emphasize that great care should be taken especially lifting the upper head, if you lift slightly too much you can snap the arm off or destroy the alignment. For the rails, any sort of lubricant is sufficient and I've seen people use everything from dry lube to 3-in-1 oil; first clean them with IA 91% and then gently rub a tiny brushing of lubricant onto them. I'd avoid any lubricant that may bunch up as the assembly slides back and forth. Depending on the drive, sometimes you can manually slide the head back and forward to finish cleaning the rails, but do so with caution.
- Door Latch Failure: Certain popular models of Radio Shack floppy drives, notably the Tandon series, used short nylon pegs as part of the door lock mechanism. These break easily and then the door will not stay down. Once again I owe much gratitude to Larry Kraemer who supplied me with replacement rods, inset components and instructions to repair the broken drive I had in a much more permeant and robust solution. I'm not sure if any of these parts or instructions are distributed at large, but please reach out if interested in learning more,
- Terminating Resistors: In the TRS-80 days of computing, floppy drive cables could easily extend 10 feet with five branch-off points (one for the EI and four more to power up to four disk drives). For technical reasons it became necessary to terminate the last drive on the line using a specialized resistor pack that'd connect to the floppy's PCB. It is a pretty complex topic but a video from Adrian's Digital Basement helps explain it quite well. Radio Shack's original "Drive 0" mini disk drive (26-1160) came with the terminating resistor added as well as the floppy cable. They then sold an essentially identical drive as part number 26-1161 for use as drive 1-3. The only actual difference was that the subsequent drives did not include the cable or terminating resistor. For all practical purposes on two drive connections with relatively short cables, whether you have a terminating resistor in one or the other won't generally make a difference. All that matters is that you test both drives successfully and if something isn't working right, double-check for one terminating resistor.
- Drive Select: When dealing with multiple disk drives, determining the order of them used to be a somewhat convoluted process. Radio Shack's floppy cables for the expansion interface came with certain pins removed and users were advised to plug the drives in sequentially beginning from the expansion interface to drive 0-3. The pin removal was a clever way to automate the drive select allocations without having to fuss with on-board drivers or manually reconfigure drives when adding or removing any.
- Shunt Configurations: Another complicated feature related to drive selection of ancient floppy drives involved adjusting a shunt depending on whether you were using a single disk drive or multiple drives, what order you wanted them in, and other behavior. Most floppy manuals I've come across don't to a very good job explaining the various jumper settings and uses, but I found an excellent summary on pages 2-14 to 2-16 of the Siemens PU 670C manual. The pinout and items closely match what can be found on most TRS-80 floppy drives. The important part is that since the TRS-80 handles drive selection based on the selectively removed ribbon cable pins, DS0 through DS3 pins on all attached floppy drives should be enabled (shunted). The MX jumper should be cut/open, HS should be open and HM should be shunted.
All Hooked Up, But No Media!
Finally, everything is connected and running beautifully. And to think it only took me more than half a year a short stint of troubleshooting and repairs to reach this point! I'm finally ready to dive into the monochromatic goodness of TRS-80 and discover the thousands of programs for it. But I don't have any boot disks. And limited media even on cassette. Here are some options:
Cassette Transfers via PC/Laptop with Play CAS
There are some excellent TRS-80 tools out there from passionate developers. One such tool is known as Play CAS. It allows you to open up any .CAS (virtual cassette) file for TRS-80 and easily play it through your soundcard, which can be connected to the cassette interface cable's black "Audio INPUT / headphone" line. Then on the TRS-80 you can load into Level II BASIC and either type CLOAD <ENTER> if the cassette is BASIC, or SYSTEM <ENTER> [?] <ENTER> (where [?] is the first letter of the program's title, viewable from Play CAS). As long as your audio output settings are correct on the PC and volume at a decent level, you can then press play on your computer and the audio will begin transmission. On the TRS-80 you should see two asterisks in the top-right corner, one will be flashing. Once it has completed, you can type RUN <ENTER> (if the cassette was BASIC) or / <ENTER> (if the cassette was machine language) to launch it. Note that it can take more than four minutes to transfer data via cassette at around 500 baud.
Play CAS also allows you to save out any .CAS file to a .WAV, which you can then play through any ordinary audio player or transfer to your phone to act as a mobile cassette deck. Be careful playing the files through any software that has equalizer effects and enhancements enabled. On my main computer with a Sound Blaster A7 card, I switch the output to "Headphones" and "Raw" to ensure no filter effects get applied before playing the audio in a media player or utility like Audacity.
Relatedly, the TRS80-Tool utility allows you to convert one format to another, so you can convert .CMD disk software to .CAS or .WAV to sent to the Model I without requiring a floppy at all (e.g., "trs80-tool convert game.cmd game.cas" then play that through Play CAS).
Creating Bootable DOS Disks with a Cassette Bootstrapper
Now for the real exciting stuff. How do we go about making fresh 5.25" floppy disks usable on our TRS-80 disk drives? Without them our entire disk drive setup and EI is somewhat irrelevant.
I have a Model III but it is diskless with a M3SE interface, so I can't exactly make floppies from that. Plus my initial aim is to create single sided 35-sector versions of the popular DOS variants, so there might be conflict attempting that from a Model III anyway (I never tried).
One approach requires a chain of tools and blind luck that you have a supported 360K 5.25" ready computer for disk transfers. This process was illustrated well back in 2018 from Adrian's Digital Basement. The general approach is to extract the desired files from virtual DSK files or use them as-is. Then using ImageDisk / DMK2IMD you can convert the file to a compatible format to then copy to a floppy after setting some very specific properties. This is not a half bad approach and, once you do it a few times, enables you to create fresh floppies of any data you want from a PC environment. All contingent on you having other legacy machines capable of such, that is.
But there's a much more entertaining and rewarding way to go about doing it, and in my experience was actually less error-prone and tedious than the roundabout PC method.
Introducing... TRS-80 DOS Cassette Bootstrapper
Developer Jürgen Büssert realized that by creating a simple cassette-based bootloader, he could then feed it raw byte data track-by-track encoded as audio. He then converted all major flavors of TRS DOS into an audio byte format for use with the bootstrapper.
It takes a very long time.
This method requires you have an expansion interface and a total of at least 32K of RAM, and that your floppy drives, floppy disks and cassette interfaces are all operational. Then you can grab the FLAC files from his site or even load them on your phone connected to the cassette interface as previously explained. You then do as follows:
- Insert a new/wiped floppy drive into your TRS-80 disk drive.
- Power on the EI and then the computer while holding in BREAK to enter Level II BASIC.
- Enter 40000 for MEM SIZE? to ensure enough space is reserved for the actual cassette track data.
- Type SYSTEM <ENTER> B <ENTER>
- Play the bootstrapper file named something like bootstrap.v7.5.500.flac
- After 3+ minutes when it is done, press / <ENTER>
- A prompt will then appear asking what disk drive you wish to use (0 for primary) and then to confirm (1).
- Now, play whatever version of DOS you wish to load onto the disk, such as Model I - NEWDOS80 2.0.500.flac
- After the first block of data the disk should begin formatting. Assuming it is successful, the audio will continue playing and load track-by-track to then write and verify to the disk.
Since these operating systems have 35 to 40 tracks, the average playtime is 30-40 minutes. If any track fails during the process or there are other disk or drive issues, it will halt. If all is successful, it will say the writing is complete and you can then reboot your machine normally and DOS should take over! If not, you'll have to run the entire process again including starting with the bootstrap audio. I recommend trying a different disk if one fails.
This approach is clever and the same theory could be applied with the existing bootstrapper to create additional cassette-based disks of any sort, to enable users to create new disks directly from a cassette interface alone.
As each one finished, I used a vintage but excellent label maker and Windows 95 to print up some custom labels.
Archiving Cassettes and Floppy Disks
A massive amount of TRS-80 Model I applications on cassette and floppy are already archived in some form or another online. Willus.com has the "Big List of TRS-80 Software" that itself encompasses 15,871 entries at the time of this writing. Even so, you may have homebrew cassettes, rare newsletter compilations, diskettes containing data, audio commentary or other files that have never been digitized. I've acquired piles of unlabeled cassettes and disks as part of random computer bundles in the past, contents unknown.
Magnetic storage is prone to deterioration so the sooner that archiving is attempted, the better chances you have of success. You may also encounter other problems along the way, such as severed tape, but with care much of this can be remedied at least to the point of attempting to read the contents. It was also common to record the same data several times on both sides of a tape for backup purposes, so if one track of cassette data fails, there may be another copy elsewhere to try.
This is an easy process but one that requires some amount of trial and error. You'll want to get a reliable cassette player that supports headphone/speaker out. I use a trustworthy Radio Shack CTR-69 Voice Actuated Cassette Recorder for my successful backups. Before hooking any external inputs up, I recommend playing a standard music cassette to verify the sound is good and playback works as expected. You may also want to clean the cassette heads, a lazy way of doing so is to just play a new blank cassette tape straight through (this applies to VCRs, as well). With this system and the cassettes I've been transferring, I have found the following settings work well:
- VOX - Out
- ALC - Out
- Tone - 10
- Volume - 5 (can vary depending on the cassette's recorded volume)
When you know the cassette player is working, you can run a cable from its HEADPHONE/SPEAKER out port to your computer's LINE-IN port. Depending on your setup, this port is often software-toggleable between MICROPHONE and LINE-IN. With my Creative Sound Blaster AE-7, an external docking peripheral is included that allows easy connection to headphones and microphones using 1/8" or 1/4" connectors.
If your sound card has a multipurpose port for input, you will want to ensure LINE-IN is activated through software to get much cleaner captures than anything possible with MIC. With Sound Blasters, this is done via Sound Blaster Command → Mixer → Recording → (Gear Icon) → Line In. You will find similar software options with other hardware configurations, including most onboard configs like Realtek HD audio. I then prefer to go into Windows' own Control Panel → Sound → Recording and set Line-In as the default, then open its properties and set the volume level to 70 (but again this may vary by player and cassette audio volume).
Then, using your audio recording software of choice (e.g., Audacity, Audition) create a new 22,050 Hz, 16-Bit Mono track. Make sure the input for the software is set to Line In and then you can play the cassette and record on the computer to capture the waveform. I'd recommend letting the full side of tape play before stopping the recording, and then save it as an uncompressed WAV. While playing the audio, monitor the decibel level and adjust the volume accordingly. Usually with tape transfers the louder the better, but I have found keeping the complete waveform from -6 to -1 tends to produce an accurate record. Even if the audio clips above 0, it should be fine in many instances.
Now for the magic. The open source suite of TRS-80 tools includes an amazing web application for TRS-80 cassette analysis and restoration. By visiting https://www.my-trs-80.com/cassette/ you can load in your complete WAV file, and it will clean and reconstruct it into as perfect a transfer as possible. It also allows you to preview the binary data, BASIC coding, or even emulate it. It also will break up each track into its own section, and other handy features. Even if the transfer was partially corrupt, you can usually decipher metadata from the binary data including authorship or title, and then use that to research other copies online. The best part is you can then save a copy of the BAS, CAS and RECONSTRUCTED WAV to have a pristine backup of the data for future use on real or emulated devices.
There are a lot of online resources explaining how to backup disks from a variety of systems and also the precautions of attempting so. You typically need some specialized hardware or software to make byte-for-byte backups on modern systems. Some old software may also have copyright protection tricks that will make ordinary reading or backing up more difficult.
Ira Goldklang offers a backup service free-of-charge, for converting Model I, III or 4 disks into DMK virtual disks. More details here: http://www.trs-80.com/wordpress/faq-converting-your-disks/
There are also some dedicated controllers, such as greaseweazle, that can enable you to read a huge array of floppy disks on a modern machine. I have an FC5025 USB 5.25" Floppy Controller but have not explored its compatibility with my TRS-80 Model I/III disks (the site notes compatibility with Tandy Color Computers but no mention of Model Is).
Finishing Touches and Conclusion
The TRS-80 had no internal sound chip or speakers. The TRS-80 monitor was likewise stripped of any audio mechanism. Yet, the systems are very capable of playing digitized sound by hijacking the cassette interface. This became a popular feature in some of the most iconic games, including those by Big Five Software. All you have to do is hook any sort of speaker amplifier up to the microphone out port and play a compatible game or software program like the Berzerk-inspired Robot Attack. Naturally if you hook up a speaker, you'll either need a y-adapter splitter or audio switch to toggle between speaker and cassette microphone in the event that you need to save any data via cassette.
At one point I also picked up an old Radio Shack CGP-115 four pen color plotter. It looks nice alongside the setup but I have to source some of the small specialized ink pens for it. Given their obscurity, this seems more like a 3D printing project to create the casings and then some makeshift ink tubes and pen tips.
I have a Doubler II in the expansion interface, and one double density disk drive alongside the original single density Radio Shack (Tandon TM100) drive. This allows me to get the best of both worlds while still having everything remain era authentic. The support for double density 40-track disks and similar should also make it easier to copy contents from an ordinary computer over to the system without having go through the maze of legacy software products and converters.
What I haven't decided is whether or not I will be getting a MISE for this set or leaving it in a vanilla state. Bartlett Labs makes incredible components for the Model I and Model III. On my diskless Model III that I rescued as a giveaway and restored, I do have a M3SE and love it very much. It enables WiFi, VGA output, joystick controllers and SD-based hard drive emulation. There is a lot of temptation and convenience to that approach for file transfers, so eventually I'll probably buckle down and get one. Or, at a minimum, a FreHD by Ian Mavric.
For now though, I just want to enjoy the simpler times of 1977 and immerse myself in all that the TRS-80 had to offer. To kick that off I've ordered two brand new games that have recently been developed for it:
A final word of thanks to all those who helped me on this journey toward restoration and TRS-80 appreciation, including: Larry Kraemer for his decades of experience, patience and repair materials. Ian Mavric for offering many hard to come by TRS-80 components that I needed including a character generator, power switches and more, Jay Neworth for the assembled modern heavy power supply, Ian Goldklang for the monumental TRS-80 informational site, George Phillips for creating an incredible emulator that I used often while troubleshooting my real device, Bartlett Labs for the MISE/M3SE, and all who are part of the TRS-80 communities.
I recommend you run all of your TRS-80 peripherals through a dedicated surge protector, so that you can turn the entire strip off after powering down to prevent the power adapters from continuing to run, etc.
I've embedded some excellent third party hyperlinks throughout this article, but a few notable and additional mentions are below. You'll find much more through your favorite search engine but these pages are enough to keep one busy for a lifetime.
Discussion Groups and Communication Outlets