From d3eb9f3d011489359dd48bced63bbbfd20e24711 Mon Sep 17 00:00:00 2001 From: Charles Mangin Date: Thu, 14 Mar 2013 12:48:10 -0400 Subject: [PATCH] working revision 2 of //c board. tested with //c model a2s4000, ca. 1983. --- IIc-USB/Arduino/IIc_keyboard/IIc_keyboard.ino | 290 ++++++++++++++++++ IIc-USB/IIc keyboard pinouts.txt | 53 ++-- IIc-USB/PCB/retro-connector-IIc.fzz | Bin 34358 -> 34209 bytes 3 files changed, 318 insertions(+), 25 deletions(-) create mode 100644 IIc-USB/Arduino/IIc_keyboard/IIc_keyboard.ino diff --git a/IIc-USB/Arduino/IIc_keyboard/IIc_keyboard.ino b/IIc-USB/Arduino/IIc_keyboard/IIc_keyboard.ino new file mode 100644 index 0000000..66b3ea6 --- /dev/null +++ b/IIc-USB/Arduino/IIc_keyboard/IIc_keyboard.ino @@ -0,0 +1,290 @@ +/* requires keypad library by Mark Stanley, Alexander Brevig from: +http://www.arduino.cc/playground/Code/Keypad + +Uses the PJRC Teensy++ 2.0 and Teensyduino libraries, specifically USB HID and Keyboard(): +http://www.pjrc.com/teensy/teensyduino.html +*/ + +#include + + + +/* +Declares the matrix rows/cols of the Apple IIe keyboard. + +More information here: +http://apple2.info/wiki/index.php?title=Pinouts#Apple_.2F.2Fe_Motherboard_keyboard_connector + + +*/ + +const byte ROWS = 8; // rows +const byte COLS = 10; // columns +char keys[ROWS][COLS] = { + + +{ KEY_ESC, KEY_1, KEY_2, KEY_3, KEY_4, KEY_6, KEY_5, KEY_7, KEY_8, KEY_9 }, + +{ KEY_TAB, KEY_Q, KEY_W, KEY_E, KEY_R, KEY_Y, KEY_T, KEY_U, KEY_I, KEY_O}, + +{ KEY_A, KEY_D, KEY_S, KEY_H, KEY_F, KEY_G, KEY_J, KEY_K, KEY_SEMICOLON, KEY_L}, + +{ KEY_Z, KEY_X, KEY_C, KEY_V, KEY_B, KEY_N, KEY_M, KEY_COMMA, KEY_PERIOD, KEY_SLASH}, + +{ 0, 0, 0, 0, 0, 0, KEY_BACKSLASH, KEY_EQUAL, KEY_0, KEY_MINUS}, + +{ 0, 0, 0, 0, 0, 0, KEY_TILDE, KEY_P, KEY_LEFT_BRACE, KEY_RIGHT_BRACE}, + +{ 0, 0, 0 , 0, 0, 0, KEY_ENTER, KEY_UP, KEY_SPACE, KEY_QUOTE}, + +{ 0, 0, 0, 0, 0, 0, KEY_BACKSPACE, KEY_DOWN, KEY_LEFT, KEY_RIGHT}, + + + +}; + + + + + +/* +Keyboard matrix + + X0 1 2 3 4 5 6 7 8 9 +Y0 ESC 1 2 3 4 6 5 7 8 9 + +1 TAB Q W E R Y T U I O + +2 A D S H F G J K ; L + +3 Z X C V B N M < > ? + +4 \ + 0 - + +5 ~ P [ ] + +6 RET UP SPC " + +7 DEL DN LT RT + + +Matrix + J9 Teensy + +X0 31 26 +1 24 4 +2 22 5 +3 8 14 +4 14 17 +5 6 13 +6 10 15 +7 1 3 +8 4 12 +9 2 11 + +Y0 12 16 +1 33 25 +2 18 7 +3 20 22 +4 3 2 +5 5 1 +6 7 0 +7 9 27 + +NC 13 + 17 + 30 + +GND 21 + +SFT 34 24 +CTL 32 23 +CMD 16 8 +CMD 26 20 +CAPS 28 21 + + +J9 pinout +1 X7 +2 X9 +3 Y4 +4 X8 +5 Y5 +6 X5 +7 Y6 +8 X3 +9 Y7 +10 X6 +11 DISK LED (5v) +12 Y0 +13 NC +14 X4 +15 KEYBOARD SW +16 CLOSED APPLE +17 NC +18 Y2 +19 40/80 COL SWITCH +20 Y3 +21 GROUND ??? +22 X2 +23 GROUND ??? +24 X1 +25 POWER LED (5v) +26 OPEN APPLE +27 LED GROUND ??? +28 CAPS LOCK +29 RESET +30 NC +31 X0 +32 CONTROL +33 Y1 +34 SHIFT + + +*/ + +byte rowPins[ROWS] = { // Y0 - Y9 + 16,25,7,22,2,1,0,27}; //connect to the row pinouts of the keypad + +byte colPins[COLS] = { // X0 - X7 + 26,4,5,14,17,13,15,3,12,11 }; //connect to the column pinouts of the keypad + +Keypad KPD = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); + + +const int SHIFTPin = 24; // the pin that the shift key is attached to +const int CTRLPin = 23; // the pin that the control key is attached to +const int APPLEPin1 = 43; // the pin that the open-apple key is attached to +const int APPLEPin2 = 44; // the pin that the closed-apple key is attached to +// these pins are special in that they are dis/connected to ground, instead of to a row/col + + +/*** + +open/closed apple are grounded through resistors on the //c. need to detect voltage drop as analogread, not digital. + +must be on analog pin. + +***/ + + + + +char modifierKeys[4]; + + +void setup(){ + + pinMode(SHIFTPin, INPUT); + pinMode(CTRLPin, INPUT); + pinMode(APPLEPin1, INPUT); + pinMode(APPLEPin2, INPUT); + +digitalWrite(APPLEPin1, HIGH); +digitalWrite(APPLEPin2, HIGH); + +digitalWrite(SHIFTPin, HIGH); +digitalWrite(CTRLPin, HIGH); + +} + +void loop() +{ + + char SHIFTState = digitalRead(SHIFTPin); + + if (SHIFTState == LOW) { + modifierKeys[0] = MODIFIERKEY_SHIFT; + digitalWrite(SHIFTPin, HIGH); + } else { + digitalWrite(SHIFTPin, HIGH); + modifierKeys[0] = 0; + } + + char CTRLState = digitalRead(CTRLPin); + + if (CTRLState == LOW) { + modifierKeys[1] = MODIFIERKEY_CTRL; + digitalWrite(CTRLPin, HIGH); + } else { + modifierKeys[1] = 0; + digitalWrite(CTRLPin, HIGH); + } + + + + char OAPPLEState = analogRead(APPLEPin2); + char CAPPLEState = analogRead(APPLEPin1); + + +// *** NOW USING CLOSED APPLE AS ALT/OPTION + if (OAPPLEState < 20) { + modifierKeys[2] = MODIFIERKEY_GUI; + digitalWrite(APPLEPin1, HIGH); + } else { + modifierKeys[2] = 0; + digitalWrite(APPLEPin1, HIGH); + } + + + + if (CAPPLEState < 20) { + modifierKeys[3] = MODIFIERKEY_ALT; + digitalWrite(APPLEPin2, HIGH); + } else { + modifierKeys[3] = 0; + digitalWrite(APPLEPin2, HIGH); + } + + + + + +// to use the TILDE key as ALT/OPTION +/* modifierKeys[3] = 0; + if( KPD.isPressed(KEY_TILDE) ) { + modifierKeys[3] = MODIFIERKEY_ALT; + } +*/ + +// *** NOW USING CLOSED APPLE AS ALT/OPTION + +   Keyboard.set_modifier( modifierKeys[0] | modifierKeys[1] | modifierKeys[2] | modifierKeys[3] ); + + KPD.getKeys(); // Scan for all pressed keys. 6 Max, + 4 modifiers. Should be plenty, but can be extended to 10+ + + // Set keyboard keys to default values. + Keyboard.set_key1(0); + Keyboard.set_key2(0); + Keyboard.set_key3(0); + Keyboard.set_key4(0); + Keyboard.set_key5(0); + Keyboard.set_key6(0); + + // Update keyboard keys to active values. + if( KPD.key[0].kchar && ( KPD.key[0].kstate==PRESSED || KPD.key[0].kstate==HOLD )) + Keyboard.set_key1( KPD.key[0].kchar ); + + if( KPD.key[1].kchar && ( KPD.key[1].kstate==PRESSED || KPD.key[1].kstate==HOLD )) + Keyboard.set_key2( KPD.key[1].kchar ); + + if( KPD.key[2].kchar && ( KPD.key[2].kstate==PRESSED || KPD.key[2].kstate==HOLD )) + Keyboard.set_key3( KPD.key[2].kchar ); + + if( KPD.key[3].kchar && ( KPD.key[3].kstate==PRESSED || KPD.key[3].kstate==HOLD )) + Keyboard.set_key4( KPD.key[3].kchar ); + + if( KPD.key[4].kchar && ( KPD.key[4].kstate==PRESSED || KPD.key[4].kstate==HOLD )) + Keyboard.set_key5( KPD.key[4].kchar ); + + if( KPD.key[5].kchar && ( KPD.key[5].kstate==PRESSED || KPD.key[5].kstate==HOLD )) + Keyboard.set_key6( KPD.key[5].kchar ); + + Keyboard.send_now(); + Keyboard.set_modifier(0); + +} + + + + diff --git a/IIc-USB/IIc keyboard pinouts.txt b/IIc-USB/IIc keyboard pinouts.txt index 05967ab..3eebf59 100644 --- a/IIc-USB/IIc keyboard pinouts.txt +++ b/IIc-USB/IIc keyboard pinouts.txt @@ -21,38 +21,41 @@ Y0 ESC 1 2 3 4 6 5 7 8 9 Matrix J9 -X0 31 -1 24 -2 22 -3 8 -4 14 -5 6 -6 10 -7 1 -8 4 -9 2 +Matrix + J9 Teensy -Y0 12 -1 33 -2 18 -3 20 -4 3 -5 5 -6 7 -7 9 +X0 31 26 +1 24 4 +2 22 5 +3 8 14 +4 14 17 +5 6 13 +6 10 15 +7 1 3 +8 4 12 +9 2 11 + +Y0 12 16 +1 33 25 +2 18 7 +3 20 6 +4 3 2 +5 5 1 +6 7 0 +7 9 27 NC 13 17 30 -GND 21 - -SFT 34 -CTL 32 -CMD 16 -CMD 26 -CAPS 28 +GND 21 +SFT 34 24 +CTL 32 23 +CMD 16 8 +CMD 26 20 +CAPS 28 21 +zzzzzzzzzzzzzzzzbbbbb J9 pinout 1 X7 diff --git a/IIc-USB/PCB/retro-connector-IIc.fzz b/IIc-USB/PCB/retro-connector-IIc.fzz index 4c5ce15a74e974c5625ebe79d0f4ada197f4dccd..a0b128762004e5b41f4f3e056f83e7ccf7cfe3fe 100644 GIT binary patch delta 16241 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 N7;X=@9rE_b{{joU-mCxs delta 16369 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