diff options
| -rw-r--r-- | converter/m0110_usb/README.md | 128 | ||||
| -rw-r--r-- | converter/m0110_usb/doc/m0110.jpg | bin | 49360 -> 0 bytes | |||
| -rw-r--r-- | converter/m0110_usb/doc/teensy.jpg | bin | 50081 -> 0 bytes |
3 files changed, 64 insertions, 64 deletions
diff --git a/converter/m0110_usb/README.md b/converter/m0110_usb/README.md index bd8bef9f2..b3fb8f7e9 100644 --- a/converter/m0110_usb/README.md +++ b/converter/m0110_usb/README.md | |||
| @@ -1,10 +1,12 @@ | |||
| 1 | M0110/M0110A to USB keyboard converter | 1 | M0110/M0110A to USB keyboard converter |
| 2 | ====================================== | 2 | ====================================== |
| 3 | This firmware converts the protocol of Apple Macintosh keyboard M0110/M0110A into USB. | 3 | This firmware converts the protocol of Apple Macintosh keyboard **M0110**, **M0110A** and **M0120** into USB. Target of this project is USB AVR controller **ATmega32U4**. Using this converter you can revive these retro keyboards with modern computer. |
| 4 | Target board of this project is [PJRC Teensy](http://www.pjrc.com/teensy/), though, | 4 | |
| 5 | you can use other board with USB AVR like `ATmega32U4` and `AT90USB`. | 5 | Pics of **M0110 + M0120** and **M0110A**. |
| 6 | |||
| 7 |  | ||
| 8 |  | ||
| 6 | 9 | ||
| 7 |  | ||
| 8 | 10 | ||
| 9 | - M0110A support was contributed by [skagon@github](https://github.com/skagon). | 11 | - M0110A support was contributed by [skagon@github](https://github.com/skagon). |
| 10 | - M0120 also is supported. keys(+ * / and ,) on M0120 are recognized as cursor keys. | 12 | - M0120 also is supported. keys(+ * / and ,) on M0120 are recognized as cursor keys. |
| @@ -13,49 +15,42 @@ you can use other board with USB AVR like `ATmega32U4` and `AT90USB`. | |||
| 13 | 15 | ||
| 14 | Update | 16 | Update |
| 15 | ------ | 17 | ------ |
| 16 | - 2013/08 Change port for signals PF to PD | 18 | - 2013/08: Change port for signals `PF` to `PD` |
| 19 | - 2013/09: Change port again, it uses inversely `PD0` for data and `PD1` for clock line now. | ||
| 17 | 20 | ||
| 18 | 21 | ||
| 19 | 22 | ||
| 20 | Connection | 23 | Building Hardware |
| 21 | ---------- | 24 | ----------------- |
| 22 | You need 4P4C plug and cable to connect Teensy or other AVR dev board into the keyboard. | 25 | You need **4P4C** cable and **ATMega32U4** board like PJRC [Teensy]. Port of the MCU `PD1` is assigned to `CLOCK` line and `PD0` to `DATA` by default, you can change pin configuration with editing `config.h`. |
| 23 | Teensy port `PD0` is assigned for `CLOCK` line and `PD1` for `DATA` by default, | ||
| 24 | you can change pin configuration with editing *config.h*. | ||
| 25 | 26 | ||
| 26 | You can find 4P4C plugs on telephone handset cable. Note that it is *crossover* connection | 27 | [](http://i.imgur.com/4G2ZOeg.jpg) |
| 27 | while Macintosh keyboard cable is *straight*. | ||
| 28 | 28 | ||
| 29 | [] | 29 | ### 4P4C phone handset cable |
| 30 | Note that original cable used with Mac is **straight** while phone handset cable is **crossover**. | ||
| 30 | 31 | ||
| 31 | In this pic: | 32 | <http://en.wikipedia.org/wiki/Modular_connector#4P4C> |
| 32 | 33 | ||
| 33 | 1. `GND`(Black) | 34 | Close-up pic of handset cable. You can see one end of plug has reverse color codes against the other. Click to enlarge. |
| 34 | 2. `CLOCK`(Red) | 35 | [](http://i.imgur.com/3S9P1mY.jpg?1) |
| 35 | 3. `DATA`(Green) | ||
| 36 | 4. `+5V`(Yellow) | ||
| 37 | 36 | ||
| 38 | Note that wire colors may vary in your cable. | 37 | [Teensy]: http://www.pjrc.com/teensy/ |
| 39 | 38 | ||
| 40 | 39 | ||
| 41 | ### Pinout | 40 | ### Socket Pinout |
| 42 | - <http://pinouts.ru/Inputs/MacKeyboard_pinout.shtml> | 41 | - <http://pinouts.ru/Inputs/MacKeyboard_pinout.shtml> |
| 43 | - <http://en.wikipedia.org/wiki/Modular_connector#4P4C> | ||
| 44 | 42 | ||
| 45 |  | 43 |  |
| 46 | 44 | ||
| 47 | 45 | ||
| 48 | ### Pull-up Registor | 46 | ### Pull-up Registor |
| 49 | You may need pull-up registors on signal lines(`CLOCK`, `DATA`) in particular | 47 | You may need pull-up registors on signal lines(`CLOCK`, `DATA`) in particular when you have long or coiled cable. **1k-10k Ohm** will be OK for this purpose. In that case the converter may not read signal from keyboard correctly without pull-up resistors. |
| 50 | when you have long or coiled cable. 1k-10k Ohm will be OK for this purpose. | ||
| 51 | In some cases MCU can't read signal from keyboard correctly without pull-up resistors. | ||
| 52 | 48 | ||
| 53 | 49 | ||
| 54 | 50 | ||
| 55 | Building Frimware | 51 | Building Frimware |
| 56 | ----------------- | 52 | ----------------- |
| 57 | To compile firmware you need AVR GCC. You can use [WinAVR](http://winavr.sourceforge.net/) on Windows. | 53 | To compile firmware you need AVR GCC. You can edit *Makefile* and *config.h* to change compile options and pin configuration. |
| 58 | You can edit *Makefile* and *config.h* to change compile options and pin configuration. | ||
| 59 | 54 | ||
| 60 | $ git clone git://github.com/tmk/tmk_keyboard.git (or download source) | 55 | $ git clone git://github.com/tmk/tmk_keyboard.git (or download source) |
| 61 | $ cd m0110_usb | 56 | $ cd m0110_usb |
| @@ -71,64 +66,69 @@ Keymap | |||
| 71 | You can change keymaps by editing *keymap.c*. | 66 | You can change keymaps by editing *keymap.c*. |
| 72 | 67 | ||
| 73 | ### M0110 & M0120 | 68 | ### M0110 & M0120 |
| 74 | #### *Default* | 69 | #### *Default Layer* |
| 75 | ,---------------------------------------------------------. ,---------------. | 70 | ,---------------------------------------------------------. ,---------------. |
| 76 | | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Ctl| -|Lft|Rgt| | 71 | | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Clr| -|Lft|Rgt| |
| 77 | |---------------------------------------------------------| |---------------| | 72 | |---------------------------------------------------------| |---------------| |
| 78 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | 7| 8| 9| Up| | 73 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | 7| 8| 9| Up| |
| 79 | |---------------------------------------------------------| |---------------| | 74 | |---------------------------------------------------------| |---------------| |
| 80 | |Fn0 | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| Dn| | 75 | |Caps | A| S| D| F| G| H| J| K| L| ;| '|Enter | | 4| 5| 6| Dn| |
| 81 | |---------------------------------------------------------| |---------------| | 76 | |---------------------------------------------------------| |---------------| |
| 82 | |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | | 1| 2| 3| | | 77 | |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | | 1| 2| 3| | |
| 83 | `---------------------------------------------------------' |-----------|Ent| | 78 | `---------------------------------------------------------' |-----------|Ent| |
| 84 | |Ctl|Alt | Space |Gui |Ctl| | 0| .| | | 79 | |Ctl|Gui | Space |Alt |Ctl| | 0| .| | |
| 85 | `-----------------------------------------------' `---------------' | 80 | `-----------------------------------------------' `---------------' |
| 86 | #### *HHKB/WASD Layer(WASD/IJKL)* | 81 | |
| 87 | ,---------------------------------------------------------. ,---------------. | 82 | - `Space` and `Enter` also work as `Fn` layer switch key when holding down. |
| 88 | |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delet| |Nlk| -|Lft|Rgt| | 83 | |
| 89 | |---------------------------------------------------------| |---------------| | 84 | #### *Function Layer(WASD/HHKB)* |
| 90 | |Caps |Hom| Up|PgU| | | |PgU| Up|Hom|Psc|Slk|Pau|Ins| | 7| 8| 9| Up| | 85 | ,---------------------------------------------------------. ,---------------. |
| 91 | |---------------------------------------------------------| |---------------| | 86 | |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delet| |Nlk| -|Lft|Rgt| |
| 92 | |Fn0 |Lef|Dow|Rig| | | |Lef|Dow|Rig| | |Return| | 4| 5| 6| Dn| | 87 | |---------------------------------------------------------| |---------------| |
| 93 | |---------------------------------------------------------| |---------------| | 88 | |Caps |Hom| Up|PgU| | | | |Psc|Slk|Pau|Up |Ins| \| | 7| 8| 9| Up| |
| 94 | |Shift |End| |PgD| | | |PgD| |End| |Shift | | 1| 2| 3| | | 89 | |---------------------------------------------------------| |---------------| |
| 95 | `---------------------------------------------------------' |-----------|Ent| | 90 | |Caps |Lef|Dow|Rig| | | | |Hom|PgU|Lef|Rig|Enter | | 4| 5| 6| Dn| |
| 96 | |Ctl|Alt | Space |Gui |Ctl| | 0| .| | | 91 | |---------------------------------------------------------| |---------------| |
| 97 | `-----------------------------------------------' `---------------' | 92 | |Shift |End| |PgD| | | | |End|PgD|Dow|Shift | | 1| 2| 3| | |
| 93 | `---------------------------------------------------------' |-----------|Ent| | ||
| 94 | |Ctl|Gui | Space |Alt |Ctl| | 0| .| | | ||
| 95 | `-----------------------------------------------' `---------------' | ||
| 96 | |||
| 98 | 97 | ||
| 99 | ### M0110A | 98 | ### M0110A |
| 100 | #### *Default* | 99 | #### *Default Layer* |
| 101 | ,---------------------------------------------------------. ,---------------. | 100 | ,---------------------------------------------------------. ,---------------. |
| 102 | | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Ctl| =| /| *| | 101 | | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Clr| =| /| *| |
| 103 | |---------------------------------------------------------| |---------------| | 102 | |---------------------------------------------------------| |---------------| |
| 104 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7| 8| 9| -| | 103 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7| 8| 9| -| |
| 105 | |-----------------------------------------------------' | |---------------| | 104 | |-----------------------------------------------------' | |---------------| |
| 106 | |Fn0 | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| +| | 105 | |Caps | A| S| D| F| G| H| J| K| L| ;| '|Enter | | 4| 5| 6| +| |
| 107 | |---------------------------------------------------------| |---------------| | 106 | |---------------------------------------------------------| |---------------| |
| 108 | |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shft| Up| | 1| 2| 3| | | 107 | |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shft| Up| | 1| 2| 3| | |
| 109 | |---------------------------------------------------------| |-----------|Ent| | 108 | |---------------------------------------------------------| |-----------|Ent| |
| 110 | |Alt |Gui | Space | \|Lft|Rgt| Dn| | 0| .| | | 109 | |Ctrl |Gui | Space | \|Lft|Rgt|Dwn| | 0| .| | |
| 111 | `---------------------------------------------------------' `---------------' | 110 | `---------------------------------------------------------' `---------------' |
| 112 | #### *Cursor Layer(WASD/IJKL)* | 111 | |
| 112 | - `Space` and `Enter` also work as `Fn` layer switch key when holding down. | ||
| 113 | - `Backslash(\)` also works as `Alt` when holding down. | ||
| 114 | |||
| 115 | #### *Function Layer(WASD/HHKB)* | ||
| 113 | ,---------------------------------------------------------. ,---------------. | 116 | ,---------------------------------------------------------. ,---------------. |
| 114 | |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delet| |Nlk| =| /| *| | 117 | |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delet| |Nlk| =| /| *| |
| 115 | |---------------------------------------------------------| |---------------| | 118 | |---------------------------------------------------------| |---------------| |
| 116 | |Caps |Hom| Up|PgU| | | |PgU| Up|Hom|Psc|Slk|Pau| | | 7| 8| 9| -| | 119 | |Caps |Hom| Up|PgU| | | | |Psc|Slk|Pau|Up |Ins| | | 7| 8| 9| -| |
| 117 | |-----------------------------------------------------' | |---------------| | 120 | |-----------------------------------------------------' | |---------------| |
| 118 | |Fn0 |Lef|Dow|Rig| | | |Lef|Dow|Rig| | |Return| | 4| 5| 6| +| | 121 | |Caps |Lef|Dow|Rig| | | | |Hom|PgU|Lef|Rig|Enter | | 4| 5| 6| +| |
| 119 | |---------------------------------------------------------| |---------------| | 122 | |---------------------------------------------------------| |---------------| |
| 120 | |Shift |End| |PgD| | | |PgD| |End| |Shif|PgU| | 1| 2| 3| | | 123 | |Shift |End| |PgD| | | | |End|PgD|Dow|Shif|PgU| | 1| 2| 3| | |
| 121 | |---------------------------------------------------------| |-----------|Ent| | 124 | |---------------------------------------------------------| |-----------|Ent| |
| 122 | |Alt |Gui | Space |Ins|Hom|End|PgD| | 0| .| | | 125 | |Ctrl |Gui | Space | \|Hom|End|PgD| | 0| .| | |
| 123 | `---------------------------------------------------------' `---------------' | 126 | `---------------------------------------------------------' `---------------' |
| 124 | 127 | ||
| 125 | 128 | ||
| 126 | 129 | ||
| 127 | Debug | 130 | Debug |
| 128 | ----- | 131 | ----- |
| 129 | You can use [PJRC HID listen](http://www.pjrc.com/teensy/hid_listen.html) to see debug output. | 132 | You can use [PJRC HID listen](http://www.pjrc.com/teensy/hid_listen.html) to see debug output. The converter has some functions for debug, press `<Command>+H` simultaneously to get help. |
| 130 | |||
| 131 | The converter has some functions for debug, press `<magickey>+H` simultaneously to get help. | ||
| 132 | These function is totally undocumented, tentative, inconsistent and buggy. | ||
| 133 | 133 | ||
| 134 | magickey: Shift+Option+Command(Shift+Alt+Gui or Shift+Alt+Control) | 134 | - Command: `Shift+Option+Command`(`Shift+Alt+Gui` or `Shift+Alt+Control`) |
diff --git a/converter/m0110_usb/doc/m0110.jpg b/converter/m0110_usb/doc/m0110.jpg deleted file mode 100644 index ef9a123ab..000000000 --- a/converter/m0110_usb/doc/m0110.jpg +++ /dev/null | |||
| Binary files differ | |||
diff --git a/converter/m0110_usb/doc/teensy.jpg b/converter/m0110_usb/doc/teensy.jpg deleted file mode 100644 index 96e93e7e2..000000000 --- a/converter/m0110_usb/doc/teensy.jpg +++ /dev/null | |||
| Binary files differ | |||
