UNSUPPORTED SUPPORT FOR TANDY 2000 SERIES KEYBOARDS ON THE TANDY 16B/6000 Z80 Control System Version 3(121) and later 18-Oct-87 710185 The instructions and files enclosed in this area allow owners of Tandy Model 16A, 16B and Tandy 6000 systems to use the keyboard that is made for the Tandy 2000/1000 family as the console keyboard. On most systems, word processors and other applications are typically difficult to use because of the limited functionality of the standard 16B/6000 keyboard. These changes will allow you to use the console to its full potential. It will become a workstation people will want to use. THE DISCLAIMER At this time, these modifications ARE NOT officially supported or approved by Tandy Corporation or Radio Shack. The contents of this tar file are provided "as is", without any warranty of any kind. It is entirely the responsibility of the user to determine whether these files should be used with the users' system. The user shall make any adjustments or corrections necessary to use these materials. By providing these materials, it should be understood that there is no commitment of any kind to provide these materials in a supported form in the future. When reporting problems with your system or obtaining service, make sure the problem persists when running with the standard release of the operating system and the standard keyboard. Problems that occur when using the items in this tar archive may not be responded to and may not be corrected. The modifications have been heavily used on the systems used by the XENIX System Programmers and other systems with few problems. (Some application software does not like the code sequences generated by the arrow keys.) Since no hardware modifications need to be made to the existing keyboard or computer, you can easily switch to the stock 3.2.0 operating system if you suspect a problem, or when taking your system in for service. HOW IT WORKS Both the original 16B/6000 and the 2000 keyboard use a serial transmission method, where the data is sent to the computer via a data and clock signal. The 16B/6000 keyboard produces 8 bit ASCII characters, and sets the high bit on some characters to increase the number of codes. The 2000 keyboard produces 8 bit scan codes, generating one code when the key is pressed and one when it is released. Most keys also repeat the "press" scan code if they are held down long enough. It is up to software to translate the scan code into a character, and to keep track of the SHIFT, CTRL and ALT keys, changing the generated character accordingly. Because the electrical interfaces are almost identical, the only thing that prevents the 2000 keyboard from being used is the extra software that is required to generate ASCII from the scan codes. Starting with z80ctl 3(122), which is included in this area, the software necessary to operate both the 16A/16B/6000 and the 2000 keyboards is included. To make XENIX easier to use with the new keyboard and keep compatibility with the old keyboards is a complicated task. MAKING IT ALL WORK REQUIRES SOME HELP When you reach the Xenix Boot> prompt, a decision is made as to what type of keyboard you have. At this point, the first key pressed is of a small group, and the system uses this to determine what type of keyboard you have. If you press some other key as the first key, the system may ignore that key or select the wrong keyboard type. This is because some scan codes look exactly like normal ASCII characters, and the boot track can make a mistake and select the wrong keyboard type. If this happens, press RESET and try again, this time avoiding pressing one of the "collision" keys. The keys that the system "expects" as the first key struck are: d h x z If you have autobooting enabled, then it is possible that no key will be pressed when the system reboots. When this happens, the boot code first looks to see if z80ctl left the keyboard type in memory from the last time it was running. (This is always true after a shutdown, and usually true after a crash.) If there has been a power failure or some other program has been run (like diskutil), this information may not be present. In that case, the boot track selects the default keyboard type by looking on the hard disk. This value is set to Model 16B/6000 by default, and can be changed using Patch to select the 2000 keyboard. (Information on the one byte patch is provided below.) CONVERTING YOUR SYSTEM There are three major steps below. You will need to obtain the keyboard, perform one of the two modifications listed, and install the software. Obtaining the 2000 keyboard The first step is to obtain either a 1000 or 2000 keyboard. If you have a 2000 or 1000 system, you may want to get a new keyboard anyway as the modifications you may have to make may prevent it from working with the 2000 or 1000 computer without removing them. The part number for the 2000 keyboard is: AXX-0225 KEYBOARD, M2000 W/CASE&CBL $183.93/EA However, this part has recently been placed on the "No Longer Available" list, and may not be obtainable. It may be possible to obtain the equivalent by ordering the individual parts as follows: AXX-0220 90 KEY KEYBOARD $100.77/EA AW-3203 KBD CABLE (2000) $7.80/EA AZ-7114 KEYLID BOTTOM $8.67/EA AZ-7121 KEYLID TOP (BEZEL) $4.52/EA AHD-2773 SCREW 6x7/16 PPH (8 required) $1.00/EA If you are unable to obtain all of these parts, then you can obtain a 1000 keyboard and either replace the connector or the entire cable with the cable used on the 2000 keyboard. Here is the 1000 keyboard part number: AXX-0235 KEYBOARD ASSY, MOD 1000 CMPLTE $117.53/EA You may now either replace the connector with a DIN-5 Cat. No. 274-003 $1.59/EA, or you can replace the entire cable and connector by ordering the 2000 keyboard cable: AW-3203 KBD CABLE (2000) $7.80/EA All the prices are subject to change and availability, so contact your local store or National Parts for more information. Once you have obtained the equivalent of a 2000 keyboard and cable, follow the instructions below. Be sure to use the instructions that are meant for the type of machine you own. Instructions for connecting the 2000 keyboard to a Model 16A. If you have a Model 16A (identified by having the keyboard cable plug into a plug built into the keyboard), then no modification to the keyboard is required at all. You must construct a gender-converting cable. This can be built using a piece of five conductor wire and two female DIN-5 connectors. The connectors are available from Radio Shack, Cat No. 274-006, and were $1.59 ea. in the 1987 catalog. When wiring the cable, simply connect pin 1 to pin 1, 2 to 2, etc. The pins are marked, but are sometimes hard to see except under a strong light. After you complete the assembly, you should use an ohmmeter to confirm there are no shorts and that the wiring is correct. Now skip down to the software installation instructions. Instructions for modifying the 2000 keyboard for the 16B and 6000. 1. Place the 2000 keyboard on a cloth with the keys facing downwards. Lower the tilt-feet if they are raised. Then place a piece of scotch tape across each leg and the back to prevent it from moving. 2. Remove the nine screws on the bottom. Now, hold the keyboard with two hands and turn it over, making sure none of the screws are lost. Once this is done, gently lift the top half of the cover and set it aside. If the tilt-feet assemblies slip out of position, push them back into place now. 3. Locate the AMP connector on the keyboard where the coiled cable connects to the keyboard PCB. Unplug this connector. On some units a glob of glue was used to keep the connector from slipping off. This must be removed before the connector can be disconnected. 4. Hold the plug and write down the color of the wires and which position they have in the connector. A typical arrangement is: +------------------+ <---plug end away from you ! 1 x 3 4 5 6 ! ! ! ! ! ! ! ! ! ! ! <---side with slits facing up ! ! ! ! ! ! ! ! ! ^ ! ^ ^ ^ ^ ! <---locking hook (in slit) ! ! +------------------+ B N G Y R B NOTE: SOME CONNECTORS WERE l o r e e a ASSEMBLED UPSIDE-DOWN AND a e l d r ARE PLUGGED IN UPSIDE-DOWN. c W e l e IF YOUR WIRING IS EXACTLY k i n o BACKWARDS OF THE DRAWING, r w MAKE SURE YOUR CONVERTED e HOOKUP IS ALSO BACKWARDS. 5. By using the tip of a fine screwdriver or an X-acto knife, you can remove the pins from the connector shell by pressing down on the locking hook on each contact. These can be accessed through the slits as shown in the illustration above. By pressing down (with mild force) on the metal at the end of the slit, the wire (and the pin) for that pin can be pulled out of the connector shell. It may require a third hand for this step; one to hold the connector, one to push the pin and one to pull on the wire. 6. You will reposition the wires and re-insert them into the connector. If your wires had the same colors as the example, your re-worked connector should look like this: +------------------+ <---plug end away from you ! 1 x 3 4 5 6 ! ! ! ! ! ! ! ! ! ! ! <---side with slits facing up ! ! ! ! ! ! ! ! ! ^ ! ^ ^ ^ ^ ! <---locking hook (in slit) ! ! +------------------+ B N Y B G R l o e a r e a l r e d c W l e e k i o n r w e When re-inserting the pins into the connector shell, make sure the locking hook is facing towards the slit. Once inserted, the pin should lock in place and a gentle tug should not dislodge it. If the pin will not stay in the connector, then spread the halves of the pin apart slightly and re-insert it. It is highly important to get the re-wiring correct. +5 and Ground are present in the cable and if +5 is shorted to ground, a fuse inside the 16B/6000 will blow, requiring disassembly of the 16B/6000 computer to fix. If your wires do not match the above color code, it is suggested that you write the names of the colors listed in the first illustration on pieces of tape and attach those names to the wires as shown in the illustration, IGNORING the actual colors of the wires. Then re-wire the connector based on the labels. Leave the labels on after finishing your work so that you can undo your work if you ever want to use the keyboard on a 2000 or 1000 system in the future. 7. Re-assemble the keyboard by placing the top half over the keyboard. Then turn the keyboard upside down, and re-insert the screws. Make sure the tilt-legs are still lined up properly. Installing the software Before hooking up your modified keyboard, you need to install the software to utilize it. The enclosed install script will install the files and make the necessary changes to /etc/termcap. Once you have shut XENIX down, leave the computer turned on and plug in the 2000 keyboard. Immediately press the CAPS key. If the light does not come on instantly, turn the computer off at once or unplug the keyboard. Failure of the light to illuminate indicates one of the modifications is incorrect. Plug your old keyboard back in and turn the computer back on. Press the CAPS key and confirm that the light comes on. If it does not, then you have blown the keyboard fuse inside the 16B/6000 and it must be replaced before any console keyboard will function. The computer must be disassembled to reach the inline fuse holder, located near the keyboard plug. If the CAPS light did operate on the 2000 keyboard, press RESET and at the Xenix Boot> prompt, press . The word 'xenix' should appear. When XENIX starts running, an asterisk should appear in the top right corner of the screen. This indicates that the system thinks you have a 2000 keyboard. If you did not allow the script to change the /etc/ttytype file, you should do that now manually so it reflect the keyboard you plan to use. Additional information At this time, diskutil does not know about the 2000 keyboard. Your existing 16/6000 keyboard must be used when using diskutil. This should not be a serious problem, since floppies and disk cartridges can be formatted while running XENIX. You can switch back and forth between keys while at the Xenix Boot> prompt as long as you press RESET after connecting the keyboard you are about to use. In the case of unattended power failures, some systems are configured to autoboot. In this case, there will be no information in RAM on what keyboard is present. In this event, the boot track examines a location on the disk. You can use the patch utility to indicate what type of keyboard to use when the boot track is unsure. The byte in /dev/hdbt0 at offset 0x10 controls what keyboard will be used. A zero indicates the 16B/6000 keyboard should be assumed. A 0x01 indicates the 2000 keyboard should be assumed. The files in this directory may be used by any system that is using XENIX 3.2.0. Earlier versions will not boot successfully. The development system is not a requirement for using these files. Although there are several international versions of the 1000 and 2000 keyboards, they are not supported by this software and may not function. This software is intended for use with the 90-key (USA) keyboard. Because the 16/6000 hardware does not reset the keyboard microprocessor when RESET is pressed, the status of the CAPS and NUM LOCK keys will be unknown to XENIX when it boots. XENIX always assumes that CAPS LOCK and NUM LOCK are NOT lit when XENIX boots. If that is not the case, you will have to press the CAPS or NUM LOCK key once to get XENIX in sync with the keyboard. Keyboard Codes The following is a table of the codes produced when keys are pressed using the 2000/1000-style keyboard under XENIX. The majority of the codes are generally what would be received in a MS-DOS environment and should make the conversion of software easier. On "Extended" character codes, a 0xff is prefixed to the code. (In MS-DOS systems, the prefix byte was 0x00.) The table is shown assuming NUM LOCK is ON and CAPS LOCK is OFF. Key Unshifted Shifted Ctrl Alt 0x1b (^[) 0x1b (^[) 0x1b (^[) 0xff8b <1> 0x31 (1) 0x21 (!) 0x7c (|) 0xff78 <2> 0x32 (2) 0x40 (@) 0x00 0xff79 <3> 0x33 (3) 0x23 (#) 0x1d 0xff7a <4> 0x34 (4) 0x24 ($) 0x1e 0xff7b <5> 0x35 (5) 0x25 (%) 0x1f 0xff7c <6> 0x36 (6) 0x5e (^) 0x7e (~) 0xff7d <7> 0x37 (7) 0x26 (&) 0x1c 0xff7e <8> 0x38 (8) 0x2a (*) ---- 0xff7f <9> 0x39 (9) 0x28 (() 0x5c (\) 0xff80 <0> 0x30 (0) 0x29 ()) 0x7c (|) 0xff81 <-> 0x2d (-) 0x5f (_) 0x1f 0xff82 <=> 0x3d (=) 0x2b (+) ---- 0xff83 0x08 0x08 0x7f (delete) 0xff8c 0x09 0xff0f 0xff8d 0xff8e ** 0x71 (q) 0x51 (Q) 0x11 0xff10 ** 0x77 (w) 0x57 (W) 0x17 0xff11 ** 0x65 (e) 0x45 (E) 0x05 0xff12 ** 0x72 (r) 0x52 (R) 0x12 0xff13 ** 0x74 (t) 0x54 (T) 0x14 0xff14 ** 0x79 (y) 0x59 (Y) 0x19 0xff15 ** 0x75 (u) 0x55 (U) 0x15 0xff16 ** 0x69 (i) 0x49 (I) 0x09 0xff17 ** 0x6f (o) 0x4f (O) 0x0f 0xff18

** 0x70 (p) 0x50 (P) 0x10 0xff19 <[> 0x5b ([) 0x7b ({) 0x1b ---- <]> 0x5d (]) 0x7d (}) 0x1d ---- 0x0d 0x0d 0x0a 0xff8f ** 0x61 (a) 0x41 (A) 0x01 0xff1e ** 0x73 (s) 0x53 (S) 0x13 0xff1f ** 0x64 (d) 0x44 (D) 0x04 0xff20 ** 0x66 (f) 0x46 (F) 0x06 0xff21 ** 0x67 (g) 0x47 (G) 0x07 0xff22 ** 0x68 (h) 0x48 (H) 0x08 0xff23 ** 0x6a (j) 0x4a (J) 0x0a 0xff24 ** 0x6b (k) 0x4b (K) 0x0b 0xff25 ** 0x6c (l) 0x4c (L) 0x0c 0xff26 <;> 0x3b (;) 0x3a (:) 0x7e (~) ---- <'> 0x27 (') 0x22 (") 0x60 (`) ---- 0xff48 0xff85 0x1e 0xff91 0xff4b 0xff87 0xff73 0xff92 ** 0x7a (z) 0x5a (Z) 0x1a 0xff2c ** 0x78 (x) 0x58 (X) 0x18 0xff2d ** 0x63 (c) 0x43 (C) 0x03 0xff2e ** 0x76 (v) 0x56 (V) 0x16 0xff2f ** 0x62 (b) 0x42 (B) 0x02 0xff30 ** 0x6e (n) 0x4e (N) 0x0e 0xff31 ** 0x6d (m) 0x4d (M) 0x0d 0xff32 <,> 0x2c (,) 0x3c (<) ---- ---- <.> 0x2e (.) 0x3e (>) ---- ++ ---- 0x2f (/) 0x3f (?) 0x5c (\) ---- ---- ---- 0xff72 0xff46 0x20 ( ) 0x20 ( ) 0x20 ( ) 0xff20 0xff3b 0xff54 0xff5e 0xff68 0xff3c 0xff55 0xff5f 0xff69 0xff3d 0xff56 0xff60 0xff6a 0xff3e 0xff57 0xff61 0xff6b 0xff3f 0xff58 0xff62 0xff6c 0xff40 0xff59 0xff63 0xff6d 0xff41 0xff5a 0xff64 0xff6e 0xff42 0xff5b 0xff65 0xff6f 0xff43 0xff5c 0xff66 0xff70 0xff44 0xff5d 0xff67 0xff71 Alternately generates a 0x13 (^S) and 0x11 (^Q) {7} + 0x37 (7) 0x5c (\) 0xff93 * {8} + 0x38 (8) 0x7e (~) 0xff94 * {9} + 0x39 (9) 0xff49 0xff84 * 0xff50 0xff86 0xff96 0xff97 {4} + 0x34 (4) 0x7c (|) 0xff95 * {5} + 0x35 (5) 0x35 (5) ---- {6} + 0x36 (6) 0x36 (6) ---- * 0xff4d 0xff88 0xff7f ---- {1} + 0x31 (1) 0xff4f 0xff75 * {2} + 0x32 (2) 0x60 (`) 0xff9a * {3} + 0x33 (3) 0xff51 0xff76 * {0} + 0x30 (0) 0xff9b 0xff9c * 0x2d (-) 0xff53 0xff9d 0xff9e 0x03 0x03 0x03 0xff03 0x2b (+) 0xff52 0xff9f 0xffa0 {.} 0x2e (.) 0xffa1 0xffa4 0xffa5 {Enter} 0x0d 0x0d 0x0a 0xff8f 0xff47 0xff4a 0xff77 0xffa6 0xff98 0xffa2 0xffac 0xffb6 0xff99 0xffa3 0xffad 0xffb7 ---- No code is produced for this keystroke sequence * While the ALT key is held down, any keys that are pressed on the numeric keypad are saved. When the ALT key is released, the resulting decimal number is converted to binary and passed to XENIX as a single 8 bit character. If more than three keys are pressed, only the last three are used. The most significant digit is entered first. If a number larger than 255 is entered, it will be output as modulo-256. To produce multiple characters, the ALT key must be released, then pressed and a new sequence can be entered. ** When CAPS LOCK is on, the codes listed in the Shifted column will be produced even when unshifted. + When NUM LOCK is OFF, the codes listed in the Unshifted and Shifted columns are exchanged. ++ This keystroke toggles the screen saver on and off. XENIX will not see a character when this key is pressed. When the screen saver is enabled, the screen will go dark at once as a confirmation. The next key pressed (ANY key including SHIFT and CTRL) will turn the display back on.