Recreating the Lisp keyboard (10 years later)
Posted: 15 Jan 2021, 18:45
Hi guys! This is lispnick, my first post here. About a couple years ago I got a crazy idea of recreating Symbolics 365407 Rev A. From what I have read in the forum, I was not the first person with such ambition. At first, I just wanted to get the original for my regular work and had absolutely no intention to start some kind of home-based keyboard manufacturing. That all changed when I finally got one of those from eBay and held it in my hands—man that was a beauty! I hacked TMK and Hans Hübner's firmware together and started using the board for my job.
Of course, the story could have ended here. Thankfully, I was curious if one can build a keyboard like that and what it takes. After doing my research, I have devised a plan of making a close replica of the keyboard meeting two important criteria. First, the same external dimensions of the case, the same key layout, and key profile in order to preserve its original ergonomy. Second, the ability to reproduce the keyboard using contemporary components either custom made or outsourced (with everything over-engineered to the max, of course). Piece of cake, right? I have soon realized that this ingenious plan would make production of a single keyboard immensly expensive, so I changed my plan to produce ten keyboards, reducing the cost per keyboard. I had continued with this plan for some time until I realized I was no longer interested in my regular job but in recreating Symbolics 365407. So I took the only course of action possible—I quit my job and started a company. After a year of intensive development, buying my own CNC, turning my house into a production facility, and doing other crazy stunts, I have finally decided to reveal the result to the public and this is perhaps the best place to do it.
So, without further ado:
Comparison with the old folks and typing demo:
Some technical details: The keyboard is designed as Alps/Matias compatible. The typing demo features keyboard with SKCM salmons. I started to use pet name ‘Keymacs’ for the first prototype (with the obvious hidden reference to Symbolics / Keyboard / Emacs / whatever) and decided to use it for the final product as well. Of course, it would not be a proper piece of machinery without a sufficiently complex model number—so here it is: Keymacs A620N-88, meaning Alps-compatible, 6x20 units large, (Symbolics) new-style layout with 88 keys. Cryptic enough? You make the judgment.
I had three good reasons for choosing Alps. First, I have a stash of vintage SKCL/SKCM switches sufficient to make 15±2 keyboards. Second, I love Alps. Third, I want to be able to use some decent contemporary switches and I personally like (modded) Matias switches.
In terms of the external appearance of the keyboard, I tried to match the profile of the case and the keys to the original as closely as possible (the whole beast went through a high resolution 3d scanner). At the same time, I wanted to create a set of keycaps that are nice, big, and heavy. I always liked those on Honeywell and IBM keyboards. So in order to preserve the profile of the keyboard, I had to put the mount plate lower in the case. The bottom part of the case is 3mm thick, however, in the spacebar row I had to make the case thinner in order to fit the switches in the case.
The keycaps are polyurethane-cast because injection molding was outside of my budget. Creating the initial blank set of keys was relatively easy—I designed the model and machined a set of matrices used to create silicone forms. The real challenge was the legend. I dismissed laser engraving after I found out that lasering on polyurethane releases some no-good fumes including CO and HCN (I tried it once. I did not inhale.) and, more importantly, a proper keycap set has to be double-shot molded, right? I experimented with 3d printed inserts but this did not turn very well. The issues were precision, repeatibilty, and the speed and cost of the process. It would be a fine way to create a keycap if you want a single replacement for your vintage keyboard but definitely not a method for producing entire keyset each week. At that point I bought a CNC and decided to individualy machine a matrix for each insert. It took me three months, 8 hours a day, to complete the basic set (clearly, I rank 10 out of 10 on the General Scale of Keyboard Insanity). Here is a detail of the letter Z:
Profile comparison (ZXCV-row):
The dish and its curvature is the same as in Symbolics 365407 (Rev. C), the key is bigger because it sits lower in the case:
And of course, it is a heavy monster:
The font was designed as a blend between the old-style Symbolics keyboard and IBM 5251:
In addition to the Symbolics-style legend including the ‘brackets above parentheses’ keys, each keycap set contains the standard keys for those who want something more traditional, here are some possible configurations:
I plan to make some more videos from the production to describe the proces of creating the keycaps from the beginning to the final over-molding.
Final notes (this post is too long already): I have also created an on-line keymap editor that can be used to dump sources for QMK. When I started experimenting with various key bindings, I missed a tool that allows me to make changes quickly and on a higher level of abstraction than just ‘assign keycode to key’. This is, of course, still possible to do in the editor but in addition it allows to define the bindings by activating ‘logical layers’ (e.g. turn-on standard QWERTY) and using acyclic inheritance between layers (e.g. make default binding for each key on layer X based on its definition in layer Y), it is shown in this super-fast feature overview:
All these extra features are translated in plain QMK code. In addition, I provided definitions of the extra Symbolics keys like ‘brackets above parentheses’. I initially implemented those in a similar way as the ‘grave escape’ in QMK, however, there were same issues with ‘key unshifting’ and interaction with other (possibly shifted) keys, so I decided to send all keycodes on key press and… too much detail, eh? Anyway, if you are a serious Emacs addict, you work in X11, and know how to use xmodmap, this clearly makes your day: Finally a keyboard when you can use quadruple buckies (Control-Meta-Super-Hyper). Actually, you can use more! Alt and Meta can be defined as independent modifiers in X11 and, better yet, the Symbol key can be bound to a Mode_switch,… see excerpt from my ~/.Xmodmap file:
This allows you to make key combinations like Hyper-Super-Alt-Meta-Control-Shift-Symbol-A on a single keyboard which Emacs properly registers—pretty neat.
More details can be found at
https://keymacs.com
I welcome comments and suggestions for (future) improvements. If anyone is interested, I have material to build a first batch of 50 keyboards, including ‘exclusive kits’ on SKCM Brown (2 pcs.), SKCM Blue (3 pcs.), SKCM Orange (3 pcs.), SKCM Salmon (3 pcs.), SKCL Green (5 pcs.), and SKCMBB Cream (1 pc.) Alps. A single keyboard can be completed in a week (the most time-consuming part is making of the keycaps and related maintenance of the moulds, blank keysets are done faster).
Of course, the story could have ended here. Thankfully, I was curious if one can build a keyboard like that and what it takes. After doing my research, I have devised a plan of making a close replica of the keyboard meeting two important criteria. First, the same external dimensions of the case, the same key layout, and key profile in order to preserve its original ergonomy. Second, the ability to reproduce the keyboard using contemporary components either custom made or outsourced (with everything over-engineered to the max, of course). Piece of cake, right? I have soon realized that this ingenious plan would make production of a single keyboard immensly expensive, so I changed my plan to produce ten keyboards, reducing the cost per keyboard. I had continued with this plan for some time until I realized I was no longer interested in my regular job but in recreating Symbolics 365407. So I took the only course of action possible—I quit my job and started a company. After a year of intensive development, buying my own CNC, turning my house into a production facility, and doing other crazy stunts, I have finally decided to reveal the result to the public and this is perhaps the best place to do it.
So, without further ado:
Comparison with the old folks and typing demo:
Some technical details: The keyboard is designed as Alps/Matias compatible. The typing demo features keyboard with SKCM salmons. I started to use pet name ‘Keymacs’ for the first prototype (with the obvious hidden reference to Symbolics / Keyboard / Emacs / whatever) and decided to use it for the final product as well. Of course, it would not be a proper piece of machinery without a sufficiently complex model number—so here it is: Keymacs A620N-88, meaning Alps-compatible, 6x20 units large, (Symbolics) new-style layout with 88 keys. Cryptic enough? You make the judgment.
I had three good reasons for choosing Alps. First, I have a stash of vintage SKCL/SKCM switches sufficient to make 15±2 keyboards. Second, I love Alps. Third, I want to be able to use some decent contemporary switches and I personally like (modded) Matias switches.
In terms of the external appearance of the keyboard, I tried to match the profile of the case and the keys to the original as closely as possible (the whole beast went through a high resolution 3d scanner). At the same time, I wanted to create a set of keycaps that are nice, big, and heavy. I always liked those on Honeywell and IBM keyboards. So in order to preserve the profile of the keyboard, I had to put the mount plate lower in the case. The bottom part of the case is 3mm thick, however, in the spacebar row I had to make the case thinner in order to fit the switches in the case.
The keycaps are polyurethane-cast because injection molding was outside of my budget. Creating the initial blank set of keys was relatively easy—I designed the model and machined a set of matrices used to create silicone forms. The real challenge was the legend. I dismissed laser engraving after I found out that lasering on polyurethane releases some no-good fumes including CO and HCN (I tried it once. I did not inhale.) and, more importantly, a proper keycap set has to be double-shot molded, right? I experimented with 3d printed inserts but this did not turn very well. The issues were precision, repeatibilty, and the speed and cost of the process. It would be a fine way to create a keycap if you want a single replacement for your vintage keyboard but definitely not a method for producing entire keyset each week. At that point I bought a CNC and decided to individualy machine a matrix for each insert. It took me three months, 8 hours a day, to complete the basic set (clearly, I rank 10 out of 10 on the General Scale of Keyboard Insanity). Here is a detail of the letter Z:
Profile comparison (ZXCV-row):
The dish and its curvature is the same as in Symbolics 365407 (Rev. C), the key is bigger because it sits lower in the case:
And of course, it is a heavy monster:
The font was designed as a blend between the old-style Symbolics keyboard and IBM 5251:
In addition to the Symbolics-style legend including the ‘brackets above parentheses’ keys, each keycap set contains the standard keys for those who want something more traditional, here are some possible configurations:
I plan to make some more videos from the production to describe the proces of creating the keycaps from the beginning to the final over-molding.
Final notes (this post is too long already): I have also created an on-line keymap editor that can be used to dump sources for QMK. When I started experimenting with various key bindings, I missed a tool that allows me to make changes quickly and on a higher level of abstraction than just ‘assign keycode to key’. This is, of course, still possible to do in the editor but in addition it allows to define the bindings by activating ‘logical layers’ (e.g. turn-on standard QWERTY) and using acyclic inheritance between layers (e.g. make default binding for each key on layer X based on its definition in layer Y), it is shown in this super-fast feature overview:
All these extra features are translated in plain QMK code. In addition, I provided definitions of the extra Symbolics keys like ‘brackets above parentheses’. I initially implemented those in a similar way as the ‘grave escape’ in QMK, however, there were same issues with ‘key unshifting’ and interaction with other (possibly shifted) keys, so I decided to send all keycodes on key press and… too much detail, eh? Anyway, if you are a serious Emacs addict, you work in X11, and know how to use xmodmap, this clearly makes your day: Finally a keyboard when you can use quadruple buckies (Control-Meta-Super-Hyper). Actually, you can use more! Alt and Meta can be defined as independent modifiers in X11 and, better yet, the Symbol key can be bound to a Mode_switch,… see excerpt from my ~/.Xmodmap file:
Code: Select all
!! clear all modifier keys
clear shift
clear lock
clear control
clear mod1
clear mod2
clear mod3
clear mod4
clear mod5
!! set modifiers keys
add shift = Shift_L Shift_R
add control = Control_L Control_R
add mod1 = Meta_L Meta_R
add mod2 = Super_L Super_R
add mod3 = Hyper_L Hyper_R
add mod4 = Alt_L Alt_R
!! Symbol as Mode_switch (here 135 depends on the keycode assigned to the key)
keycode 135 = Mode_switch
!! standard letters + Greek alphabet
keycode 43 = h H Greek_eta Greek_ETA
keycode 44 = j J Greek_xi Greek_XI
keycode 45 = k K Greek_kappa Greek_KAPPA
keycode 46 = l L Greek_lambda Greek_LAMBDA
More details can be found at
https://keymacs.com
I welcome comments and suggestions for (future) improvements. If anyone is interested, I have material to build a first batch of 50 keyboards, including ‘exclusive kits’ on SKCM Brown (2 pcs.), SKCM Blue (3 pcs.), SKCM Orange (3 pcs.), SKCM Salmon (3 pcs.), SKCL Green (5 pcs.), and SKCMBB Cream (1 pc.) Alps. A single keyboard can be completed in a week (the most time-consuming part is making of the keycaps and related maintenance of the moulds, blank keysets are done faster).