💾 Archived View for spam.works › mirrors › textfiles › computers › newkbdhack captured on 2023-06-14 at 16:04:12.

View Raw

More Information

-=-=-=-=-=-=-

	All right. I've noticed a number of people asking about putting
an external keyboard on their 1200's. Unfortunately, the only replies
they got said it couldn't be done, or that it would be very difficult. Neither
of these is true. Electronically, the keyboard interface is pretty much the 
same as it always has been. The only real obstacles are physical; Thus I 
decided to make an attempt, and recently managed to pull it off. What follows 
is an account of what I did along with a few suggestions. Be sure to read it
through all the way before breaking out the tools...

	It's been working well so far (I'm typing this on my good old A1000 
keyboard hooked up to my 1200 right now.) The result is that I can have 
both an internal and external keyboard hooked up simultaneously without 
interference. In fact, they complement one another. You can actually press 
shift on one keyboard and 's' on the other and get a capital 'S'! Those old 
6570 keyboard controllers are quite robust, seemingly in contrast to the on
board one in the 1200. 

	Needless to say, doing this modification required some very delicate
work. The internal keyboard micro has to be physically taken off-line
in order to connect an external keyboard or keyboards. This isn't like the
500 where all you had to do to hook up an external was to patch into
the KCLK and KDAT lines, tap +5 and Ground from somewhere and you
were done. The 6570's took care of all the handshaking automatically.
Unfortunately, the 1200's keyboard micro doesn't work that way. Hooking 
up another keyboard in parallel with it's clock + data lines just hangs both
of them. (My guess is that the output isn't open-collector like it
is on the externals, (there's no reason for it to be) so when you have
an external hooked up, the internal can't drive its 0's low enough.)
Anyway, I just decided to do away with the internal controller altogether.

	Um...let me just say this... I'm not really writing this post in the
form of a full blown hardware hack. This is more of a "Here's what I did.
If you'd like to give it a shot, here's what you need to know." sort
of thing. I'm not going to go into disassembly instructions or anything 
like that. I will make the standard disclaimer, though: If you try this and
you blow up your machine, don't come crying to me. There are some quite
tiny spots that have to be soldered and/or desoldered, so patience, a 
steady hand, and a reasonably sharp soldering iron are a definite
necessity. If there's enough support for turning this into a full article
I'll throw something together. (My brother suggested submitting it to 
AC, but it may be a bit hardcore for them. Schematically, it's quite
simple, but the tiny joints do make it a little more difficult. Maybe 
Aminet...

	Okay, with that out of the way here are the gooey details. The two
chips we'll be dealing with are U13 (The keyboard micro) and U7 (The
keyboard/parallel 8520). Try to keep your soldering iron and any other
potentially destructive tools away from the other chips. ;^) The KBClk and 
KBDat pins on the keyboard micro need to be heated and bent up away 
from the motherboard. I touched the top of the pin with the iron, let it heat 
for a second and then, with a razor-knife wedged behind the pin, twisted, 
lifting the pin away from the board. There's not much solder holding these 
down, so it shouldn't take too much force. Once the pin was free, I straight
ened it up with a pair of needle-nose pliers and went on to the next one. 
Fortunately, both pins are right next to each other and the keyboard micro 
(and the 8520) are surface-mounted PLCC's and not true SMD's. These 
are the only two pins that need to be desoldered. The rest of this hack just 
involves soldering wires in. 

need to be taken offline for the external to work. All I know is that on mine 
it had to be disconnected. Your Mileage May Vary, however, so you may 
want to try skipping this step, do the rest, and see if it works.***

	Get your hands on the smallest insulated wire you can find (>24 awg),
and solder wires to the KBClk, KBDat and _KBReset lines as shown in the diagram
below. The number of pins on the chips should be accurate. they are 44 pin 
PLCC's, with 11 pins on each side. The ^ denotes the pin 1 dot on the chips.

----------------------------------------------------------------------------

				|||||||||||
			      -+-----------+-
			      -|           |-
			      -|           |-
			      -|   8520PL  |-
			      -|           |-
			      -|     U7    |-
			      -|           |-
			      -|           |-
			      -|           |-
			      -|     ^     |-
			      -+-----------+-
			        |||||||||||
				   ||
				   | \KBDat (Solder wire here)
	|||||||||||                |
      -+-----------+-               \KBClk (Solder wire here)
      -|           |-
      -|           |-
      -| Keyboard  |---KBClk (Desolder + bend up)		      Floppy
      -|  Micro.   |---KBDat (Desolder + bend up)		      Power
      -|           |-				
      -|    U13    |-							....
      -|           |-		    To					||
      -|           |-		   Front				||
   /---|     ^     |-		    of				     +5v/|
   |  -+-----------+-		  Machine			    /	 |
   |    |||||||||||		    ||	       (Tap +5 and Gnd. from	 |
   |				    ||		 these wires.)-------Gnd /
   \_KBReset (Solder wire here)     ||
   				    ||
				    \/

----------------------------------------------------------------------------

	As you can see, power is easily tapped from the floppy cable. You 
should use somewhat larger wires for this. Thus, when you're done you 
should have five wires coming out of your machine: KBClk, KBDat, 
_KBReset, +5, and Gnd. You will also have a non-functional internal key
board. If you want, however, you can take these wires (except _KBReset) 
and hook them up to a 5 pin DIN and attach a 2000/3000 keyboard, or a 
phone plug and connect a 1000 keyboard. There is a catch, however. You 
will not be able to reset from the external keyboard. 1000s, 2000s, 3000s, 
and 4000s have internal circuitry which interprets 500 milliseconds of 
KBClk low as a "reset" pulse, and pulls the _KBReset line internally (This is 
according to the Hardware Manual). So unless you fabricate a circuit that 
does this (see below), you'll need to reset from the native keyboard. (This 
function should still work. Actually, If you're going to do it this way, 
there's no need to solder the extra wire for _KBReset.) 

	Now, the A500 keyboard is slightly different. It has no case but it
will generate a _KBReset signal. Remember how I said you could have two
kbd's simultaneously? Well, all you have to do is hook up your external as
described above, and string your wires along (Including _KBReset) to the 
500 keyboard. What's more, the 500 keyboard is a near-exact fit replace
ment for the 1200 one (and with full sized Left-Shift and Return keys!). In 
order to do this I had to desolder the LEDs on the 500 kbd altogether and 
then remove the ones from the 1200's "LED board", hot glue them individually
to their positions, bend the leads down flat, and wire them up again. Also, 
the support on the top part of the wedge-shaped floppy bracket has to be sawed
off to make room for the encoder board. It works, though, and theoretically I
should even be able to fit the RF shield back on.

	Okay, so you may not like the beige-colored keys of the 500 keyboard
sticking out of your shiny white 1200 case. The simple solution is to swap 
the 500 keyboard's beige keycaps for your defunct 1200 keyboard's white ones.
They should be the same in every respect except color. There is, however,
another alternative. Your original 1200 keyboard may be compatible with the 500 
keyboard's encoder board. Encoder boards that are compatible have a
slot for one large ribbon cable to fit in.  Incompatible encoder boards have 
slots for two small ribbon cables. If compatible, all you have to do is unplug 
the ribbon from the 500 keyboard itself, unscrew the little circuit board in 
the upper-right corner (the encoder board) and remove it along with its 
plastic bottom-shield. You can then plug the ribbon from your 1200 kbd into 
the socket, and wire the encoder board up as you would with the
true 500 keyboard. This is the setup I had originally. Now, since the ribbon 
comes out of the middle-back of the 1200 keyboard, you have to put the 
controller board in that same vicinity. It's up to you how to mount it, but 
what I did was to first off trash the RF shield. (REAL hackers don' need no 
steenkin' RF shield 8^) ) Then I hot-glued the plastic shield to the bottom of 
the encoder board, and hot-glued this by the lower left corner to the top of 
the hard drive. The other end rests on the floppy cable, and tension from 
the keyboard ribbon folded under the keyboard keeps the whole thing 
steady.

Here's a quick recap:

       -Desolder the clock and data pins coming from the onboard A1200 
	keyboard microcontroller. (This is probably the hardest part of this
	whole thing.)

       -Solder the KBClk, KBDat, _KBReset, +5, and Gnd. lines to the 
	locations described in the diagram. (A magnifier lamp is useful for 
	this.)

       -Hook the KBDat, KBClk, +5, and Gnd. lines up to some sort of 
	external keyboard connector, and use the dead internal to reset, OR

	Hook the KBDat, KBClk, +5, and Gnd. lines up to some sort of 
	external keyboard connector and run the wires along to their 
	corresponding locations on a 500 keyboard INCLUDING _KBReset, OR

	Hook the KBDat, KBClk, +5, and Gnd. lines up to some sort of 
	external keyboard connector and run the wires along to their 
	corresponding locations on a 500 keyboard's encoder board INCLUDING 
	_KBReset and then plug your 1200 keyboard's ribbon cable into the
	encoder board.

       -Seal up, fasten down, make sure there are no solder bridges, shorts,
	etc.

       -Power up and enjoy!

---------------------------------------------------------------------------
Below are the pinouts for various types of Amiga keyboards.

A500:				Ribbon out (usually rainbow)
				    Black=1...Purple=8
					||||||||
			+---------------------------------------+
			|	 Pin 1->........<-Pin 8		|
			|		|||| |		     XX<--Shield Gnd.
			| A500          |||| \Gnd		|
			| Keyboard	|||\+5v		   [===]<--Power LED
			| Encoder	||\_KBReset		|
			|		|\KBClk		   [===]<--Drive LED
			| +-----------+	\KBDat			|
	Ribbon Socket---->|...........|				|
			+---------------------------------------+
			   |||||||||||
			   ||||||||||| <---To A500 or A1200 Keyboard.

A1000: (Connector on back of keyboard itself)

	(Female)		+------+
				| |||| |	1=Gnd
				| 1234 |	2=KBClk
				|      |	3=KBDat
				+-+  +-+	4=+5v
				  +  +
				   ++

A2000/3000: (This is from the Hardware book. Not firsthand information.)

	(Female)		  -v-
				 /   \
				|3   1|		1=KBClk
				| 5 4 |		2=KBDat
				|  2  |		3=NC
				 \___/		4=Gnd.
						5=+5v
---------------------------------------------------------------------------

That's pretty much it. As I said, this isn't a full tutorial, so I'm
leaving the mechanical considerations up to the reader.
If you have any other suggestions for improvement let me know, or feel
free to add them in yourself. Start a credits list if you so desire.

Some final thoughts:

	-I wouldn't worry too much about power supply overloading. I've
	 got 2 floppys, 2 keyboards, a hard drive, a DataFlyer SCSI+ 
	 SCSI controller, and a MicroBotics 50Mhz 1230XA with '881 and 8
	 megs and my stock supply hasn't complained yet.

	-You could also use a DPDT switch to switch between internal and
	 external keyboards. One side goes to KBClk and KBDat on the internal
	 micro, the other side goes to the same lines from the external, and
	 the middle goes to the pins on the 8520. The keyboards should be
	 able to deal with being switched in or out in midstream.
	 (I have not actually tried this one, but don't see why it wouldn't
	 work, as it's effectively the same thing as unplugging one keyboard
	 and plugging in another one.) The Hardware Manual says the keyboards
	 were designed to handle hot connects/disconnects.

	-No, IBM keyboards are electrically totally different. You would
	 need a microprocessor driven interface to make the translation.
	 There is a (fairly involved) hack on Aminet in /hard/hack to do this.

	-If you hook everything up and get a pulsing stream of '''s, you've
	 got the clock and data lines backwards. Switch them around.

	-If you're installing your 1200 in a tower and your tower has a 
	 Reset button on it, you can hook the _KBReset line and Ground up
	 to the button and reset that way.

	-As a couple people have asked, I don't have A1200 schematics. The
	 data herein is the result of some poking around with a logic probe,
	 a little deductive reasoning, some extrapolation from the A500
	 schematics, and a lot of trial and error. However, if someone out
	 there HAS A1200 schematics, I'll gladly reimburse you for your time
	 at a photocopier! 8^)
  
Enjoy...
...Sean Curtin. (smc8516@ultb.isc.rit.edu)
		 ^^New address!

The following is an optional modification to the above hack which allows
the ability to reset the computer from the external keyboard, posted by
Dana Peters. It looks good, although as of this time I have not yet tried
it myself.

----------------------------------------------------------------------------
16152.3.26294.1 A1200 external keyboard reset hack
7/5/94 06:16 89/4737 ai745@FreeNet.Carleton.CA (Dana Peters)
Lines 1 to 89 of 89 (100%)
-----

Got an A1200?  What do you think of the keyboard?  If you're a touch
typist you probably figured out pretty fast that the A1200 keyboard
has a problem with rollover. Try rolling over between two keys on the
same row, and you're just as likely to get them in the reverse order
as the forward order.  Commodore botched this one, IMHO.

Anyway, I decided to try to "fix" my machine, and found two different
hacks to put another model Amiga keyboard on the A1200; one by Hans
Luijten (j.a.w.m.luijten@kub.nl) and another by Sean Curtin
(squirrel@cup.portal.com).  Using the info from these plans I decided
to add a connector to my A1200 for an A2000/3000 keyboard. Although
the plans called for two pins to be cut or desoldered to disable the
internal keyboard, on my machine I tried leaving the connections
intact, and found that both the internal and external keyboards were
able to co-exist without problems.  Your mileage may vary, however.

The other change I made to the plans was to create a circuit to allow
the external keyboard to reset the A1200 the way god intended... with
the three finger salute.  This avoids having to use the internal
keyboard to reset or having to wire up a separate button to perform
reset.  What follows is a uuencoded .lha file containing an IFF
picture of the external keyboard reset circuit and some additional
notes.

begin 644 kbreset.lha
M(4(M;&@U+=P$  !Z&0  U07C'   "VMB<F5S970N:69F.OL#B&N;U;;7^<60
M7DO"<(EDITB{body}lt;(M1;+-:E0@2*L(XSA-LMD(X=+@X"7**UU+(6W":<AP&!\@D
M)"0E@TV4#/9 LT)%TX#@RRQH[2 3@"V2:&K;S;]_[WO-OTECDDL=LMME-B/=
MF^ &X#X&G.?"$^'-[#M:9(YV]+@^OCH(>7[OJ>KBX^+C^GC(((>5&\Q#YA^Z
M$8GHAQN,3G]''X'K#Y/)'^@ 8O!QO8&KO@P>4]P7_Q>HA:\P[8JUNB:6X+7%
M<M=+4%9@Z2]T6FA?\C6Z+<-19ZU4)TK-EW# VQ0SK JT(M+F1"]O^Q7/"+G_
M>_TVM#6%IY?[O].AFWJ+{body}lt;5KY[PL^@<7CWKQYY\N6O(O"UO->WM<7/B%U,+Z
MMH5QP&;(LZT+_&4&D84P]08J=H7X/C 1A998@9 Q: "@%T/U!QVBTB<Y!6]]
MB6160:LBAUY]D5M)>N+[A!=_:%#G<BS1; M_!'O[X4%+(M$4^"4-P&LR/ *F
MW[>18F/C!54---RG[+T+,Q[3@?@D[.^7W2)@2C!,>,5$W!6%'E$2\=4*";PK
M9/;,)7A14$!JID%8^)AI9X6J;.$]%@ DBUC-7E/BSC"KUA631[Y,F5V7A43"
MTJPK116VIC78=%;"\+*F-3G[QZPKDV9*>HL-<7M3)7:[XK'W9.=N^^+7F..*
MK$+-*+PXA9%T4>DP*N+E71?I2!LPJ^P+W4P[QA:6P+FT0TC"K;-%LA32K67E
M71?J$D[;WE; N:'.RR:3;T+\(K@YCR=1K9RA8C#F/=ET=CW00W5O3E+,?MT6
M!ICUM./?4%1\


(&F/>%2UA:IQ6\:\+..**E>%1P"UYC]BBZT>Y!<FZ+7C1(
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
?!<F42(T5\H7QO3#L:XY9Z1A_P.F8F!(934[<,:E  )F3
 
end
--
Dana Peters
Dana.Peters@Software.Mitel.COM
ai745@Freenet.Carleton.CA
--