Tony, you are incredible :)! Thanks, and I've printed out that info and will
stick it with the machine. From what I've heard, that chip is no longer
available and I am curious if it is worth the effort to make up a plug-in
replacement. This machine was marked "For Parts Only" but I really dislike
tearing apart these machines if something can be done to make it work. Has
anyone looked at making up a plug-in replacement, and/or has a machine that
also needs this chip? If there is enough of a demand, it might be a fun
project!
Tony Duell wrote:
 I have a Heathkit H89A I acquired some years ago with a note attached "Bad
 keyboard encoder on terminal card." Is anyone here familiar with the
 keyboard encoder? I sort of recall reading somewhere that the keyboard 
 Sure am....
 I have the Z90 manual here, which is essentially the same machine...
 The keyboard encoder is the 40 pin chip at location U444 on the terminal
 logic board. The terminal logic board is the large board standing
 vertically at the very back of the machine, and U444 is just above the
 connector for the keyboard ribbon cable.
 The keyboard encoder has the Heath/Zenith part number 443-913, and is
 described as an S470 keyboad encoder in the IC specifications list. I am
 told that there was a standard keyboard encoder with much the same
 pinout, but with different internal programming, so the output codes for
 some of the keys are different. However AFAIK, all H88s, H89s, Z90s and
 H/Z19 terminals use the same encoder chip, so if you find a dead example
 of any of those machines, it's a possible source of the chip.
 The output of the keyboard encoder chip goes to a ROM, U445 (444-37) on
 the terminal logic board. This translates the keyboard codes into ASCII
 (and special codes for the non-standard keys). Whether you could use a
 standard encoder if you reprogrammed the ROM, I don't know.
 For reference, the pinout of the keyboard encoder chip is :
 1 B3 (bit 3 output) (=A2)
 2 Vll (ground)
 3 clock input
 4 X9 (keyboard scan output)
 5 X8
 6 X7
 7 X6
 8 X5
 9 X4
 10 X3
 11 X2
 12 X1
 13 Data strobe output
 14 Data strobe control
 15 Output Enable
 16 Repeat
 17 Key bounce mask
 18 Vgg (-12V)
 19 Control key input
 20 Shift lock I/D
 21 Shift
 22 Y10 (keyboard input)
 23 Y1
 24 Y2
 25 Y3
 26 Y4
 27 Y5
 28 Y6
 29 Y7
 30 Y8
 31 Y9
 32 Vss (+5V)
 33 B5 (=A4)
 34 B6 (=A5)
 35 B7 (=A7, control output)
 36 B8 (=A8, shift output)
 37 B1 (=A0)
 38 B2 (=A1)
 39 B9 (=A6)
 40 B4 (=A3)
 The B-lines are scambled before being connected to the ROM -- I've put
 the assignments in brackets above). A9 and A10 on the ROM are groudned.
 The address inputs to the ROM for each key are :
 f1 0a
 f2 2a
 f3 1a
 f4 3a
 f5 4a
 Erase 6a
 Blue 5a
 Red 7a
 Grey 06
 Esc 2d
 1 05
 2 25
 3 15
 4 35
 5 45
 6 65
 7 55
 8 75
 9 0d
 0 5c
 - 7c
 = 02
 ` 22
 Bsp 12
 Tab 79
 Q 51
 W 71
 E 09
 R 29
 T 19
 Y 39
 U 49
 I 69
 O 59
 P 44
 [ 64
 \ 54
 LF 74
 Del 0C
 A 4E
 S 6E
 D 5E
 F 7E
 G 01
 H 21
 J 11
 K 31
 L 41
 ; 18
 ' 38
 { 48
 Ret 68
 Scroll 61
 Z 16
 X 36
 C 46
 V 66
 B 56
 N 76
 M 0E
 , 2E
 . 1E
 / 00
 Space 3E
 K0 50
 K. 70
 Kenter 08
 K1 04
 K2 24
 K3 14
 K4 1C
 K5 3C
 K6 4C
 K7 42
 K8 62
 K9 52
 NU1 32
 NU2 40
 (K-prefixed keys are on the number pad)
 The outputs of the ROM -- i.e. what the firmware on the terminal logic
 card is expecting -- for each key are :
 key     norm    shift   ctrl    s&c
 f1      00      00      80      80
 f2      01      01      81      81
 f3      02      02      82      82
 f4      03      03      83      83
 f5      04      04      84      84
 Erase   05      05      85      85
 Blue    06      06      86      86
 Red     07      07      87      87
 Grey    0e      0e      8e      8e
 Esc     1b      1b      9b      9b
 1       31      21      b1      a1
 2       32      32      b2      b2
 3       33      23      b3      a3
 4       34      24      b4      a4
 5       35      25      b5      a5
 6       36      36      b6      b6
 7       37      37      b7      b7
 8       38      38      b8      b8
 9       39      39      b9      b9
 0       30      30      b0      b0
 -       2d      2d      ad      ad
 =       3d      3d      bd      bd
 `       60      60      e0      e0
 Bsp     08      08      88      88
 Tab     09      09      89      89
 Q       71      51      f1      d1
 W       77      57      f7      d7
 E       65      45      e5      c5
 R       72      52      f2      d2
 T       74      54      f4      d4
 Y       79      59      f9      d9
 U       75      55      f5      d5
 I       69      49      e9      c9
 O       6f      4f      ef      cf
 P       70      50      f0      d0
 [       5b      5b      db      db
 \       5c      7c      dc      fc
 LF      0a      0a      8a      8a
 Del     7f      7f      ff      ff
 A       61      41      e1      c1
 S       73      53      f3      d3
 D       64      44      e4      c4
 F       66      46      e6      c6
 G       67      47      e7      c7
 H       68      48      e8      c8
 J       6a      4a      ea      ca
 K       6b      4b      eb      cb
 L       6c      4c      ec      cc
 ;       3b      3b      bb      bb
 '       27      27      a7      a7
 {       7b      7b      fb      fb
 Ret     0d      0d      8d      8d
 Scroll  1f      1f      9f      9f
 Z       7a      5a      fa      da
 X       78      58      f8      d8
 C       63      43      e3      c3
 V       76      56      f6      d6
 B       62      42      e2      c2
 N       6e      4e      ee      ce
 M       6d      4d      ed      cd
 ,       2c      3c      ac      bc
 .       2e      3e      ae      be
 /       2f      3f      af      bf
 Space   20      20      a0      a0
 K0      10      10      90      10
 K.      1a      1a      9a      9a
 Kenter  1c      1c      9c      9c
 K1      11      11      91      91
 K2      12      12      92      92
 K3      13      13      93      93
 K4      14      14      94      94
 K5      15      15      95      95
 K6      16      16      96      96
 K7      17      17      97      97
 K8      18      18      98      98
 K9      19      19      99      99
 NU1     0b      0b      8b      8b
 NU2     0c      0c      8c      8c
 While this might be more work than you want, the above should allow you
 to create something that will work...
 -tony