The Apple M0110 Today
Posted: 11 Aug 2011, 13:34
Finished my M0110 mod. This is the keyboard that came with the original Macintosh 128k.
Features:
This makes the keyboard fully usable, I'm writing on it right now.
One of the main points of this mod was to establish easy and repeatable hand wiring. The hand wiring mods I've seen so far all had a lot of unordered wires going, which makes hand wiring look more complicated than it actually is. Using 1N4148 diodes makes the wiring more simple because it can be done in an ordered way. It also simplifies the code. The diodes were even cheaper than the wire I had to buy for the columns.
Now the pics, first the "before" state. Both 'boards were defective when I bought them. I retr0brited the upper one, so in case the retr0brite failed, I'd still have the lighter one:
Pcb removed. The switches are much quieter without the pcb:
Made in USA:
The dust bunny's natural enemy:
Old-school Alps:
Replacement springs from a Dell AT. I measured 60grams to fully press the switch before the spring mod, 41grams after. I used the coins I had in my pocket, then put them on a precision scale. Ripster measured 70 something grams. There were different revisions of this keyboard though:
1N4148, as recommended by Dave Dribin:
Testing every switch before assembly. I had 2 bouncing switches in the finished keyboard but this can be solved by pressing them several (thousand) times. I guess this is why Cherry uses gold contacts. I also put some Teflon spray on every switch stem:
Different revisions. I used the top one which was more yellowed and has two drainage channels:
Using diodes for the rows. Only with longer distances between the switches additional wire will be necessary:
Wire for the columns. Finer wire would have done but this here has more resistance to occasional bad handling by me. Note how the columns are soldered to the endpoints of the switch contacts. This puts the columns in another layer avoiding shorts:
Flat ribbon cable soldered to the rows and columns. NKRO matrix finished. Fast and easy.
The one thing that's not good on the Teensy is that it has no mounting holes. I milled a U-shaped socket from a piece of POM. Added two holes for cable binders:
A round piece of POM will press the reset button:
POM doesn't like to be sanded. I'll glue this with double-sided transparent sticky tape to the case:
The complete Teensy assembly:
And this is how it looks in the keyboard:
In the original M0110 the phone jack is held by the pcb. I added a piece of aluminum to replace this holding function, screwed to the plate with the original screws (arrows):
Aluminum part other view:
What's this? Key is fully seated on the stem:
The M0110 has a locking switch for CapsLock which has a shorter stem. It is not even pressed in this pic. I use CapsLock as Control so I had to get rid of the locking switch:
CapsLock key on the left shows compensation for the shorter stem. A little Dremeling takes care of this:
Controller glued into place with isolation layer:
Because the pcb is missing, the plate/switch assembly would be seated 1.5mm too low. While this would be fine for a keyboard that is quite high from the start, I went for the original look here. Rubber washers should add additional dampening:
The original gray feet were in bad condition. I used black rubber with sticky tape. Original feet are smaller but at that size the rubber feet slid around in the foot cavity. Larger feet work better here. Still have to find some gray stuff for this. The black dot on the right is the Teensy reset button:
Retr0briting in 10% Peroxide solution. 6 hours for case and keys, 12 hours for the space bar. I'd stir from time to time and remove the bubbles that build on all surfaces:
Finished:
Another pic:
And another one:
Comparison with the not retr0brited 'board, which initially was the lighter of the two:
Sound sample modded vs. unmodified:
original: http://www.frs635.com/keyboard/m0110/m0110old.mp3
modded: http://www.frs635.com/keyboard/m0110/m0110new.mp3
Programming: Thanks to hasu for help and for making his code available. He's awesome.
The M0110 code is based on his Macway code. Because of the diodes I had to rewrite for 5 rows and 14 columns.
The WinAVR environment is very comfortable. Change something, select "Make All" from the menu, select "Program" from the menu and you will be asked to press the Teensy reset button. After pressing it programming will proceed and the Teensy will reboot. Ready for testing.
hasu's code also allows for permanent switching of layers. Per default I have Colemak. I can press Shift+Shift+1 and will have Qwerty. The Fn-layer will still work. Shift+Shift+0 will switch back to Colemak. Shift+Shift+2 will switch to the Fn-layer. Permanently, if you don't have a 0 or 1 on it.
Still have to try the Mousekeys feature which wouldn't work immediately. MouseKeys are working on WASD, buttons on Q and E, wheel on R and F.
It's easy to program something that'll make the Teensy crash. In that case the HID keyboard will vanish from the device manager after about 5 seconds.
I didn't activate full NKRO (using multiple devices) in hasu's code. I don't need it and without it there will be no compatibility issues.
No anti-ghosting code necessary because of the diodes.
One idea I had during building was: with plate mounted keys and hand wiring it would actually be possible to bend the plate like on a Model M. This would allow for the same keycap profile on all keys and still have a cylindrical cross section for the rows!
Features:
- NKRO (6KRO right now)
- Hand wired matrix with diodes
- Spring switch replacement: 61g --> 40g
- Mini-USB connection with Teensy controller
- Case and keys retr0brited.
- Colemak and Qwerty switchable
- 2nd Miniguru-like layer*
- Much quieter because of pcb removal and lighter switch springs
- MouseKeys
This makes the keyboard fully usable, I'm writing on it right now.
One of the main points of this mod was to establish easy and repeatable hand wiring. The hand wiring mods I've seen so far all had a lot of unordered wires going, which makes hand wiring look more complicated than it actually is. Using 1N4148 diodes makes the wiring more simple because it can be done in an ordered way. It also simplifies the code. The diodes were even cheaper than the wire I had to buy for the columns.
Now the pics, first the "before" state. Both 'boards were defective when I bought them. I retr0brited the upper one, so in case the retr0brite failed, I'd still have the lighter one:
Pcb removed. The switches are much quieter without the pcb:
Made in USA:
The dust bunny's natural enemy:
Old-school Alps:
Replacement springs from a Dell AT. I measured 60grams to fully press the switch before the spring mod, 41grams after. I used the coins I had in my pocket, then put them on a precision scale. Ripster measured 70 something grams. There were different revisions of this keyboard though:
1N4148, as recommended by Dave Dribin:
Testing every switch before assembly. I had 2 bouncing switches in the finished keyboard but this can be solved by pressing them several (thousand) times. I guess this is why Cherry uses gold contacts. I also put some Teflon spray on every switch stem:
Different revisions. I used the top one which was more yellowed and has two drainage channels:
Using diodes for the rows. Only with longer distances between the switches additional wire will be necessary:
Wire for the columns. Finer wire would have done but this here has more resistance to occasional bad handling by me. Note how the columns are soldered to the endpoints of the switch contacts. This puts the columns in another layer avoiding shorts:
Flat ribbon cable soldered to the rows and columns. NKRO matrix finished. Fast and easy.
The one thing that's not good on the Teensy is that it has no mounting holes. I milled a U-shaped socket from a piece of POM. Added two holes for cable binders:
A round piece of POM will press the reset button:
POM doesn't like to be sanded. I'll glue this with double-sided transparent sticky tape to the case:
The complete Teensy assembly:
And this is how it looks in the keyboard:
In the original M0110 the phone jack is held by the pcb. I added a piece of aluminum to replace this holding function, screwed to the plate with the original screws (arrows):
Aluminum part other view:
What's this? Key is fully seated on the stem:
The M0110 has a locking switch for CapsLock which has a shorter stem. It is not even pressed in this pic. I use CapsLock as Control so I had to get rid of the locking switch:
CapsLock key on the left shows compensation for the shorter stem. A little Dremeling takes care of this:
Controller glued into place with isolation layer:
Because the pcb is missing, the plate/switch assembly would be seated 1.5mm too low. While this would be fine for a keyboard that is quite high from the start, I went for the original look here. Rubber washers should add additional dampening:
The original gray feet were in bad condition. I used black rubber with sticky tape. Original feet are smaller but at that size the rubber feet slid around in the foot cavity. Larger feet work better here. Still have to find some gray stuff for this. The black dot on the right is the Teensy reset button:
Retr0briting in 10% Peroxide solution. 6 hours for case and keys, 12 hours for the space bar. I'd stir from time to time and remove the bubbles that build on all surfaces:
Finished:
Another pic:
And another one:
Comparison with the not retr0brited 'board, which initially was the lighter of the two:
Sound sample modded vs. unmodified:
original: http://www.frs635.com/keyboard/m0110/m0110old.mp3
modded: http://www.frs635.com/keyboard/m0110/m0110new.mp3
Programming: Thanks to hasu for help and for making his code available. He's awesome.
The M0110 code is based on his Macway code. Because of the diodes I had to rewrite for 5 rows and 14 columns.
The WinAVR environment is very comfortable. Change something, select "Make All" from the menu, select "Program" from the menu and you will be asked to press the Teensy reset button. After pressing it programming will proceed and the Teensy will reboot. Ready for testing.
hasu's code also allows for permanent switching of layers. Per default I have Colemak. I can press Shift+Shift+1 and will have Qwerty. The Fn-layer will still work. Shift+Shift+0 will switch back to Colemak. Shift+Shift+2 will switch to the Fn-layer. Permanently, if you don't have a 0 or 1 on it.
Still have to try the Mousekeys feature which wouldn't work immediately. MouseKeys are working on WASD, buttons on Q and E, wheel on R and F.
It's easy to program something that'll make the Teensy crash. In that case the HID keyboard will vanish from the device manager after about 5 seconds.
I didn't activate full NKRO (using multiple devices) in hasu's code. I don't need it and without it there will be no compatibility issues.
No anti-ghosting code necessary because of the diodes.
One idea I had during building was: with plate mounted keys and hand wiring it would actually be possible to bend the plate like on a Model M. This would allow for the same keycap profile on all keys and still have a cylindrical cross section for the rows!