CHR$ ROM RAM

In this post, I wish to elaborate a bit on the fact what exactly you need to do to get a self-designed font into the memory of the EPSON FX-80 dot matrix printer. Somewhere in 1983 we got the idea to make a collective project. We would draw forms and send them to friends, acquaintances and colleagues. These forms should than be completed by them. After completion they would have to send us the forms back. After that we would edit the data and publish everything. Sounds pretty simple. But there was no commercial e-mail so everything had to be sent by snail mail. Even an advanced technology company like Apple did not have an email address or a website on its business cards in 1983. Although e-mail addresses existed since 1971, the commercial use only started after 1988. But anyway… we found that all data of our collective project should be documented. The documentation should also be printed on our EPSON FX-80 dot matrix printer. The output we would duplicate by offset printing.

We wondered whether we could put a font in the printer that was independent of the HGR resolution. That way we would have a bigger range in the width and height of the page. That would give us more flexibility for the layout. With the FX-80 you could create any number of new characters or even whole type fonts. You could use these characters for any purpose as long as they fit into the same dot matrix as the ROM characters do. 9 Dots tall and 11 dots wide (6 main columns plus 5 intermediate columns). If you have defined your own characters you can use them over and over. Just like the characters that are used by default in the FX-80’s ROM. User defined characters are printed in the same way as ASCII characters. But before we actually can print we need to prepare a few things.

DIP switch 1-4 controls the 2K RAM buffer of the EPSON FX-80. You can also store user defined characters in it. In order to do that we have to switch DIP switch 1-4 off. The characters are defined via the ESCape “&” command sequence. The format is: LPRINT CHR$ (27) “&” CHR$ (r) CHR$ (C₁) CHR$ (C₂) The r tells the printer in which RAM area the characters are stored. The notations C₁ and C₂ specify the range of characters to be defined. All ASCII numbers from 0 to 255 can be used unless these are control codes. Control codes are ASCII 0-31, ASCII 127-159 and ASCII 255. Now suppose that we would like to redesign the characters A to E. The associated ASCII numbers are 65 to 69. Then C₁ is ASCII 65 (A) and C₂ will then be ASCII 69 (E). To make things even simpler ASCII symbols can be used in place of CHR$ (C₁) CHR$ (C₂). For example: LPRINT CHR$ (27) “&” CHR$ (0) CHR$ (65) CHR$ (69), or LPRINT CHR$ (27) “&” CHR$ (0) “AE”. That also selects the letters A-E. For each character the printer expects 12 data numbers. The first is the attribute byte. The other data numbers contain the dot matrix pattern.

The first thing to do next is to design an alphabet. Characters Up to 8 dots tall and 11 dots wide. But we decided to use five dots in width and 7 dots in height. In the first draft, we have drawn all the letters with a rapidograph pen on transparent paper with millimeter graph paper below it. A rapidograph pen is a trademarked name for one type of technical pen. After drawing the characters all the letters are converted to the binary number system. If that was finished, you had to convert the binary to hexadecimal strings. As a last step you had to convert them to ASCII. Then you had to formulate the statement and type this into the computer. But  after we had the conversions calculated we first typed everything out on paper with a typewriter for safety reasons. This might be strange but these conversions I still have available. The digital version is gone. Here are some examples. Finally we typed these conversions in the program on the computer.

When that was finished you could run the program. Then the newly designed characters were stored in the RAM area of the printer. But only the ROM characters could be printed. To print the newly designed characters the printer has to ignore the ROM characters and print only the RAM characters. The best part is that if the characters are printed you also have access to the double strike, expanded and proportional modes. Which gave three extra options to personalize your own font. Here are some examples of these options.

Comments? Leave a reply.