Symbolics ADB Adapter Mapping
Symbolics manufactured an adapter box that allows connection of the Symbolics keyboard and a three-button Logitech mouse to the ADB bus of a MacIvory, in place of the Apple Extended keyboard and a one-button mouse.
The following table pertains when the KMAP resource 39 (decimal) is used with keyboard layout KCHR resource 0 “US + Symbolics.” Key identifications were made by inspecting the resources using KCAP 39. The “Mac Key” column indicates the key on the Apple Extended Keyboard II (US version) which produces the same virtual key code. (See Inside Macintosh:Text, Appendix C and Inside Macintosh:Toolbox Essentials, Chapter 2). The raw ADB keycodes are determined by inverting the mapping of the KCHR resource. The “scan code” is the clock pulse, counting from zero after the reset, for which the keyboard drives low for the key down. (It appears that the ADB raw code is derived by the same sequence but with “dead” pulses omitted.)
Because of the lack of multi-button mouse support in Mac System 7, I presume that the three-button mouse emulates the same “arrow-key plus mouse-click” gesture that is used with the Apple keyboard and single-button mouse under Genera. ADB provides an encoding for multiple mouse buttons, but a similar translation would have to be provided in the ADB driver code to make them apparent to Mac applications. (My ADB box is currently not working, so I can’t confirm this.)
Symbolics | Scan code | Raw Key | Virtual Key | Mac Key | Comment |
Key Label | (hex) | Code (hex) | Code (hex) | Equivalent | |
A | 39 | 29 | 00 | A | |
S | 2E | 21 | 01 | S | |
D | 3A | 2A | 02 | D | |
F | 2F | 22 | 03 | F | |
H | 30 | 23 | 04 | H | |
G | 3B | 2B | 05 | G | |
Z | 17 | 10 | 06 | Z | |
X | 23 | 19 | 07 | X | |
C | 18 | 11 | 08 | C | |
V | 24 | 1A | 09 | V | |
[none] | 0A | none | would produce character $A4/$B1 | ||
B | 19 | 12 | 0B | B | |
Q | 4F | 39 | 0C | Q | |
W | 44 | 31 | 0D | W | |
E | 50 | 3A | 0E | E | |
R | 45 | 32 | 0F | R | |
Y | 46 | 33 | 10 | Y | |
T | 51 | 3B | 11 | T | |
1! | 64 | 48 | 12 | 1! | |
2@ | 5A | 41 | 13 | 2@ | |
3# | 65 | 49 | 14 | 3# | |
4$ | 5B | 42 | 15 | 4$ | |
6^ | 5C | 43 | 16 | 6^ | |
5% | 66 | 4A | 17 | 5% | |
=+ | 5F | 46 | 18 | =+ | |
9( | 68 | 4C | 19 | 9( | |
7& | 67 | 4B | 1A | 7& | |
-_ | 69 | 4D | 1B | -_ | |
8* | 5D | 44 | 1C | 8* | |
0) | 5E | 45 | 1D | 0) | |
[none] | 1E | ]} | |||
O | 53 | 3D | 1F | O | |
U | 52 | 3C | 20 | U | |
[none] | 21 | [{ | |||
I | 47 | 34 | 22 | I | |
P | 48 | 35 | 23 | P | |
Return | 33 | 26 | 24 | Return | |
L | 3D | 2D | 25 | L | |
J | 3C | 2C | 26 | J | |
‘” | 3E | 2E | 27 | ‘” | |
K | 31 | 24 | 28 | K | |
;: | 32 | 25 | 29 | ;: | |
[none] | 2A | \| | |||
,< | 26 | 1C | 2B | ,< | |
/? | 27 | 1D | 2C | /? | |
N | 25 | 1B | 2D | N | |
M | 1A | 13 | 2E | M | |
.> | 1B | 14 | 2F | .> | |
Tab | 4E | 38 | 30 | Tab | |
Space | 10 | 0C | 31 | Space | |
`~ | 6A | 4E | 32 | `~ | |
Rubout | 2D | 20 | 33 | Delete | |
[none] | 34 | ||||
Select | 0C | 08 | 35 | Esc | |
[none] | 36 | ||||
Left Super | 0E | 0A | 37 | Left Command | not sure |
Left Shift | 22 | 18 | 38 | Left Shift | |
Caps Lock | 02 | 01 | 39 | Caps Lock | |
Left Meta | 04 | 03 | 3A | Left Option | |
Left Control | 0F | 0B | 3B | Left Control | |
Right Shift | 1C | 15 | 3C | Right Shift | |
Right Meta | 11 | 0D | 3D | Right Option | |
Right Control | 05 | 04 | 3E | Right Control | |
[none] | 3F | [none] | |||
Right Super | 06 | 05 | 40 | ||
[none] | 41 | Keypad . | |||
[none] | 42 | ||||
Abort | 1E | 17 | 43 | Keypad * | |
Right Hyper | 12 | 0E | 44 | ||
[none] | 45 | ||||
[none] | 46 | ||||
Clear Input | 74 | 55 | 47 | Keypad Clear | |
[none] | 48 | ||||
Repeat | 1D | 16 | 49 | ||
Right Symbol | 28 | 1E | 4A | ||
Resume | 76 | 57 | 4B | Keypad / | |
Scroll | 07 | 06 | 4C | Keypad Enter | |
[none] | 4D | ||||
[none] | 4E | Keypad – | |||
[none] | 4F | ||||
[none] | 50 | ||||
Suspend | 75 | 56 | 51 | Keypad = | |
[none] | 52 | Keypad 0 | |||
[none] | 53 | Keypad 1 | |||
[none] | 54 | Keypad 2 | |||
[none] | 55 | Keypad 3 | |||
[none] | 56 | Keypad 4 | |||
[none] | 57 | Keypad 5 | |||
[none] | 58 | Keypad 6 | |||
[none] | 59 | Keypad 7 | |||
[none] | 5A | ||||
[none] | 5B | Keypad 8 | |||
[none] | 5C | Keypad 9 | |||
[none] | 5D | ||||
: (in upper left) | 59 | 40 | 5E | ||
Local | 01 | 00 | 5F | Keyboard overlay uses F14, which would be virtual keycode $6B | |
[none] | 60 | F5 | |||
Square | 71 | 52 | 61 | F6 | |
Circle | 72 | 53 | 62 | F7 | |
[none] | 63 | F3 | |||
Triangle | 73 | 54 | 64 | F8 | |
Function | 43 | 30 | 65 | F9 | |
[none] | [66] | 66 | If raw key code $66 occured, it would translate to character $10 | ||
Network | 38 | 28 | 67 | F11 | |
\{ | 60 | 47 | 68 | ||
[none] | 69 | F13 | |||
|} | 6B | 4F | 6A | ||
[none] | 6B | F14 | See Local, virtual key $5F | ||
([ | 54 | 3E | 6C | ||
Escape | 6F | 50 | 6D | F10 | |
)] | 49 | 36 | 6E | ||
Refresh | 70 | 51 | 6F | F12 | |
[none] | [70] | 70 | if raw $70 occured, it would translate to virtual key $70, character $10 | ||
Mode Lock | 08 | 07 | 71 | F15 | |
Help | 29 | 1F | 72 | Help | |
Complete | 34 | 27 | 73 | Home | |
Page | 4A | 37 | 74 | Page Up | |
Backspace | 55 | 3F | 75 | Forward Delete | |
[none] | 76 | ||||
End | 13 | 0F | 77 | End | |
[none] | 78 | F2 | |||
Line | 3F | 2F | 79 | Page Down | |
[none] | 7A | F1 | |||
Left Hyper | 03 | 02 | 7B | Left Arrow | |
[none] | 7C | Right Arrow | Used for mouse button? | ||
[none] | 7D | Down Arrow | Used for mouse button? | ||
Left Symbol | 0D | 09 | 7E | Up Arrow | |
[none] | 7F | 7F | (Power key gives 7F7F) | Raw key code $7F would map to virtual key $7F |
Leave a comment