Skip to content

Apple M0110 Keyboard Protocol

hasu@tmk edited this page Jan 28, 2024 · 20 revisions

Technical resources

Discussion thread

Source code

Technical Info for 128K/512K and Plus

Protocol:

Connector:

  • Page 20 of Tech Info for 128K/512K

Signaling:

Raw Codes

M0110

m0110_rawcodes

M0110A

,---------------------------------------------------------. ,---------------.
|  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Bcksp| |Clr|  =|  /|  *|
|---------------------------------------------------------| |---------------|
|Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|   | |  7|  8|  9|  -|
|-----------------------------------------------------'   | |---------------|
|CapsLo|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return| |  4|  5|  6|  +|
|---------------------------------------------------------| |---------------|
|Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shft|Up | |  1|  2|  3|   |
|---------------------------------------------------------' |-----------|Ent|
|Optio|Mac    |           Space           |  \|Lft|Rgt|Dn | |      0|  .|   |
`---------------------------------------------------------' `---------------'
,---------------------------------------------------------. ,---------------.
| 65| 25| 27| 29| 2B| 2F| 2D| 35| 39| 33| 3B| 37| 31|   67| |+0F|*11|*1B|*05|
|---------------------------------------------------------| |---------------|
|   61| 19| 1B| 1D| 1F| 23| 21| 41| 45| 3F| 47| 43| 3D|   | |+33|+37|+39|+1D|
|-----------------------------------------------------'   | |---------------|
|    73| 01| 03| 05| 07| 0B| 09| 4D| 51| 4B| 53| 4F|    49| |+2D|+2F|+31|*0D|
|---------------------------------------------------------| |---------------|
|      71| 0D| 0F| 11| 13| 17| 5B| 5D| 27| 5F| 59|  71|+1B| |+27|+29|+2B|   |
|---------------------------------------------------------' |-----------|+19|
|   75|     6F|            63             | 55|+0D|+05|+11| |    +25|+03|   |
`---------------------------------------------------------' `---------------'
+ 0x79, 0xDD / 0xF1, 0xUU
* 0x71, 0x79, 0xDD / 0xF1, 0x79, 0xUU
where DD and UU indicates code for press and release

Scan Codes

TMK converer uses following scan codes instead of M0110 raw codes. TMK scan codes are converted from raw codes basically like below. MSB(bit7) is set when key is released.

    scancode = ((raw&0x80) | ((raw&0x7F)>>1))

And keys on keypad are converted exceptionally.

https://github.com/tmk/tmk_keyboard/blob/5208d3165768f93e23e7b46358e1fed252baa241/tmk_core/protocol/m0110.c#L157-L313

M0110 and M0120

,---------------------------------------------------------.    ,---------------.
|  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backs|    |Clr|  -|Lft|Rgt|
|---------------------------------------------------------|    |---------------|
|Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|  \|    |  7|  8|  9|Up |
|---------------------------------------------------------|    |---------------|
|CapsLo|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return|    |  4|  5|  6|Dn |
|---------------------------------------------------------|    |---------------|
|Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|        |    |  1|  2|  3|   |
`---------------------------------------------------------'    |-----------|Ent|
     |Opt|Mac |         Space               |Enter|Opt|        |      0|  .|   |
     `------------------------------------------------'        `---------------'
,---------------------------------------------------------.    ,---------------.
| 32| 12| 13| 14| 15| 17| 16| 1A| 1C| 19| 1D| 1B| 18|   33|    | 47| 4E| 46| 42|
|---------------------------------------------------------|    |---------------|
|   30| 0C| 0D| 0E| 0F| 10| 11| 20| 22| 1F| 23| 21| 1E| 2A|    | 59| 5B| 5C| 4D|
|---------------------------------------------------------|    |---------------|
|    39| 00| 01| 02| 03| 05| 04| 26| 28| 25| 29| 27|    24|    | 56| 57| 58| 48|
|---------------------------------------------------------|    |---------------|
|      38| 06| 07| 08| 09| 0B| 2D| 2E| 2B| 2F| 2C|      38|    | 53| 54| 55|   |
`---------------------------------------------------------'    |-----------| 4C|
     | 3A|  37|             31              |   34| 3A|        |     52| 41|   |
     `------------------------------------------------'        `---------------'

International keyboard

,---------------------------------------------------------.
| 32| 12| 13| 14| 15| 17| 16| 1A| 1C| 19| 1D| 1B| 18|   33|
|---------------------------------------------------------|
|   30| 0C| 0D| 0E| 0F| 10| 11| 20| 22| 1F| 23| 21| 1E| 2A|
|------------------------------------------------------   |
|    39| 00| 01| 02| 03| 05| 04| 26| 28| 25| 29| 27| 24|  |
|---------------------------------------------------------|
|  38| 06| 07| 08| 09| 0B| 2D| 2E| 2B| 2F| 2C| 0A|      38|
`---------------------------------------------------------'
     | 3A|  37|             34              |   31| 3A|
     `------------------------------------------------'

M0110A

,---------------------------------------------------------. ,---------------.
|  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Bcksp| |Clr|  =|  /|  *|
|---------------------------------------------------------| |---------------|
|Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|   | |  7|  8|  9|  -|
|-----------------------------------------------------'   | |---------------|
|CapsLo|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return| |  4|  5|  6|  +|
|---------------------------------------------------------| |---------------|
|Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shft|Up | |  1|  2|  3|   |
|---------------------------------------------------------' |-----------|Ent|
|Optio|Mac    |           Space           |  \|Lft|Rgt|Dn | |      0|  .|   |
`---------------------------------------------------------' `---------------'
,---------------------------------------------------------. ,---------------.
| 32| 12| 13| 14| 15| 17| 16| 1A| 1C| 19| 1D| 1B| 18|   33| | 47| 68| 6D| 62|
|---------------------------------------------------------| |---------------|
|   30| 0C| 0D| 0E| 0F| 10| 11| 20| 22| 1F| 23| 21| 1E|   | | 59| 5B| 5C| 4E|
|-----------------------------------------------------'   | |---------------|
|    39| 00| 01| 02| 03| 05| 04| 26| 28| 25| 29| 27|    24| | 56| 57| 58| 66|
|---------------------------------------------------------| |---------------|
|      38| 06| 07| 08| 09| 0B| 2D| 2E| 2B| 2F| 2C|  38| 4D| | 53| 54| 55|   |
|---------------------------------------------------------' |-----------| 4C|
|   3A|     37|            31             | 2A| 46| 42| 48| |     52| 41|   |
`---------------------------------------------------------' `---------------'

Pinouts

Mac 128k/512k/Plus Keyboard pinout
.---------, 
| 1 2 3 4 | 1 GND
|         | 2 Clock
|         | 3 Data
`---___---' 4 5V
from front of connector

Clone this wiki locally