TRS-80 Model 1 - Character ROM

From Alnwlsn - Projects Repository
Jump to navigation Jump to search

I recently acquired a TRS-80 Model 1. Amazingly, the unit functioned perfectly well after possibly 30+ years of sitting around in a basement, although I did have to construct a cassette cable, video adapter, and power supply (the hard way, by disassembling and rewinding an existing laminated transformer). These other modifications will be detailed in another article.

This particular is a stock 1978 model, and like all Model 1's, displayed capital letters only. Tandy left off one of the video RAM chips, which reportedly saved about 5 dollars off the cost of the machine. The character generator IC did actually contain the lowercase letters, so all that is needed is to add an additional 2102 RAM chip, and make a slight change to the circuitry. This does require modifying the original board, but it's a period accurate modification that was done all the time, and was eventually a kit offered by RadioShack.

The kit also came with a new character generator rom. An early machine like mine contained lowercase characters that were a little off, with such defects as "the flying a" where the a is a little higher than the rest of the lowercase characters, and letters with decenders like g y q and p looking a bit off. The new character rom fixed these issues.

Character ROM editor

Screenshot of the editor. I am editing character 86, which in ASCII is a "V"

While 2102 ram chips are still well available, the MCM6673 that the TRS-80 used as the character rom are non-existent these days. However, while on ebay, I did find someone selling TRS-80 lowercase kits using a programmable ROM. I figured that the same thing could be done with an EPROM, which I have obtained a reasonable quantity of, and even if I don't have the right one, they are still out there. I also ordered a cheap programmer which I can use for this and all sorts of projects in the future also.

The MCM6673 was a custom version of Motorola's MCM6674, a character rom. It holds 128 5x8 characters. The way you access it is by inputing 7 bits (0-127) with the character you want, then select which of the 8 lines of the character you need (with 3 more bits). The character line is output on 5 pins. So that's 10 inputs, and 5 outputs, plus a chip enable pin. This means I should be able to use a 1kb x 8 EPROM (which has 10 address pins to use as inputs) to replace the character rom (though 3 of the 8 data pin outputs will not be used).

What I could not find was a ROM image of any kind of TRS-80 character rom. That means that I would probably have to come up with the chip program myself. I could do this on paper, but thanks to modern computers, I can make a character editor program to help me.

Editor Program

The program is a not very complicated C++ program that runs on Windows. I built it with Visual Studio 2017 to run in the Windows console, so I'm not sure if it will work on earlier versions. Download is here, with source: File:Trs80-char-editor-prg-source1.zip The program provides a 5x8 box within which you can edit the characters.

The program operates as follows:

  1. Run the EXE file. A Windows console window will open.
  2. Press s to save a blank rom.
  3. Edit the character cell with the i j k l keys to move, and the space bar as a toggle.
  4. You can also use the c and v keys to insert blank and filled areas, respectively, in a top to bottom, left to right fashion.
  5. After finished editing the cell, press s to save the rom.
  6. Move to the next cell by pressing n for next, and p for previous. The current character you are editing is shown in decimal and binary at the top of the screen. The program goes up to 255, but only the first 128 characters are saved to the file.

The 'data.bin file is the only filename the program can work with, loading and saving to the one file. When finished, the data should be in a format that can be burned into a EPROM. The lower data pins (d0-d4) are used as the character row out pins. The lower address pins (a0-a2) become the new row select pins. The higher address pins (a3-a9) become the new a0-a7 character select pins, as was on the MCM6674. Hopefully this will work when I get the equipment to program the EPROMS.

I have included an example bin file where I have redrawn most of the TRS-80 characters for lowercase, following what I found in the MCM6674 datasheet, and what I found online. It seems that RadioShack's custom MCM6673 was just the MCM6674 character set with all the characters shifted up one line. This let them fix the bottom part of the descending letters. There are a couple of RS custom characters as well, such as arrows. Also, the datasheet lists the process to order custom MCM6670 mask chips. The programming for the chips was to be sent to Motorola in a special format using either IBM punch cards or paper tape. Does this mean that all TRS-80 characters originally were sourced from punch cards? Either way, this shows just how old the TRS-80 really is.

Update 9/30/2018=

With the help of this C++ library, I have added a BMP output to the program. By pressing y, a file called outimage.bmp will be produced, and you can see what all the characters will look like (hopefully) when they are printed on the screen of the TRS-80. I also updated the g, j, p, q, and y so that the descenders look correct. I also added the upper characters again for the first 31 characters, since the TRS-80 rom uses these instead of standard ascii for displaying the letters.

Installation

I will update this page if/when I get the programming of the EPROM working and install it in the TRS-80.