Synertek Systems KTM-2 & KTM-2/80

Changing the Character ROM

Modifications to the character ROM are simple once you understand the map in the chip. The KTM-2/80 terminal board features a 1920 character display, 24 lines by 80 characters each. The characters - both ASCII and graphics - are represented by a 'pixel' of 8 bytes (= 8 * 8 bits), each bit corresponding to a dot on the screen. Since a total of 256 different characters constitutes the KTM's character font, 256 * 8 bytes, i.e. 2 Kbytes, are needed to store the pixel patterns. The KTM uses two identical 2 K-ROMs (type 2316-B) which are switched to give the high speed necessary for a CRT display.

How are the pixel patterns coded? Page 0 of the ROMs comprises the top line of all the 256 patterns, page 1 the next line, etc., page 7 the bottom line of each. Bit 7 corresponds to the leftmost dot, bit 0, accordingly, to the rightmost one. Therefore, the pattern code for any character is to be found at a fixed lo-byte address (determined by the ASCII code), while the hi-byte of its address varies from 0 to 7. The lo-byte address is exactly the ASCII code of the character (0 to $7F ASCII, $80 to $FF graphics), read backwards! Graphic characters fill the 8-by-8 matrix completely, while ASCII characters leave the left and right margins empty and usually the bottom row, too.

Suppose you want to change the appearance of the ~ tilde ($7E) to `B` (Greek beta). You first invert the ASCII code, reading it from right to left, which gives (in that special case, only, the same code) $7E. This is the lo-byte address. Next, you look up the codes for all the pixel rows, top row first, at address $07E, $17E, ... $77E:

    00 00 00 32 4C 00 00 00

Rows 4 and 5 are non-empty, resulting in the following pattern:

row 4:   ..xx..x.
row 5:   .x..xx..    See the wave-form?

Let us now devise the `B`:

row 1:   ..xxx...    = $ 38 at address $07E.
row 2:   .x...x..     = $ 44 at address $17E.
row 3:   .x.xx...    = $ 58 at address $27E.
row 4:   .x...x..     = $ 44 at address $37E
row 5:   .x....x.     = $ 42 at address $47E
row 6:   .xx..x..    = $ 64 at address $57E
row 7:   .x.xx...    = $ 58 at address $67E
row 8:   .x......      = $ 40 at address $77E

These values have to be stored to obtain a beta instead of a tilde for a $7E. Since the KTM character ROMs are pin compatible with standard 2716 EPROM's, any user with access to an EPROM programming device can alter the screen appearance of all the KTM characters.

In case you don't like the cursor's blinking block and prefer a blinking line like I did (I found that block annoying), I'll help you cheat. The KTM uses location $FE for the blinking block. If you look at your chip, locations $0FE, $1FE, $2FE etc all contain an $FF. Change all the locations to $00 except $7FE. This now changes the annoying blinking block to a blinking line.