Super Amiga Keyboard Time!

Special Needs

I've never been comfortable with QWERTY keyboards. Maybe it's just because I can't touch-type. The other keys are in awkward positions for me too. Also, I'm primarily a BASIC programmer who doesn't use the numpad a lot because I'm lefthanded and it's too far off. Special needs! It really takes up desk space too. Still, it's nice to have the math and programming characters available without relying on modifier keys. When modern laptop keyboards implement a compact layout they often use lots of modifier keys or scatter things about. Where's +? Oh, / is over there. * is on... 8. So, I want to design my own keyboard and the opportunity to elaborate presented itself with the escalation of this Amiga project. The keyboard has to be kind of international, supporting English, Swedish, German, Spanish, the latter via "dead-keys" which can put various accents/diacritics on characters. It shouldn't be a brick with cherry switches and "layers". I'm thinking Amiga 600 form factor.

Reference

For reference, here's my A500 keyboard. Notable features:
• Long space bar is long.
• Baffling amount of duplicate characters. ++(()) && '' *** :: == "" /// ,, ^^ --_ _
• I think there are a few diacritic/accent dead-keys but it's hard to spot them.
• Numbers on number row are too small and the keys are very busy looking. • Other messy keys makes it harder to see what dashes and dots are low and high.
• I believe the long dash is actually the underscore. There is no em dash.
• Should be YUIOP... I reassembled it incorrectly.

Keyboard layouts. It's hard to give new layouts a fair trial when one is so used to the arbitrarily established QWERTY and can't really shift just like that. I think I'd like the ABC (MNOP rather) one though. L and J are a bit unfortunate but otherwise the positions aren't too bad. Slightly updated version of it on the A770 concept later on...

I've seen letter frequency tables of C, JS etc, but not BlitzMax/BASIC. I wrote a thing and ran a few of my Famicube source files through it. BASIC is less pedantic than C so it doesn't need ; and () and {} cluttering up the code, so those are less common here. BlitzMax can use A$ and F# BASIC style variables but I don't use that declaration feature. X and Y might be a bit more common in code than general writing. Other than that, the counts are somewhat close to elsewhere with 0 1 E etc. being common.

With a keycap puller and keyboard layout program it might be fun to customize my A770 layouts (keymaps) using an editor of some sort. Since the keyboard might be out of commission I'm thinking a visual mouse interface might work... just drag characters onto the keys.

I cobbled together a microcontroller (32U4) driven USB keypad once. It just sent key strokes serially. There's a limit with USB of a few simultaineous keys + modifiers, but some keyboards pretend to be two keyboards to get around this. If I'm not mistaken, the A1200 used a 68HC05 microcontroller and serial communication. I suppose a microcontroller could store a custom keymap in EEPROM and default ones in progmem. But perhaps I'd just want to shift out a (momentary) 96-bit bitfield of all switches (12 bytes), which can be analysed by the BIOS/driver to produce a stack of keys (UTF-8?) since last scan.

First QWERTY Attempt

The Amiga uses a certain old (1986 or so) character set supporting several "latin" languages. However some characters are missing like the Euro sign, em dash, TM, and useful math/electronics glyphs. It does include • Bullet point, x dimension sign, © copyright, and ° degrees. I've always wanted those directly marked on a keyboard as I can never remember the key-codes or what Alt key they're on. Certain graphical characters are really difficult to show using lowrez fonts, like ¾ fractions and ® registered trademark.

I've included a number of accents/diacritics and after moving them around a bunch I decided to go for consistency and put them all as Alt-characters on the number keys. They could be printed using red to lessen confusion/noise. This left the keys near Return a bit barren... but I don't want to overload the keys either. Dots and such easily get lost in the noise.

The Amiga spacebar is really long. I looked at the wear on my PC spacebar and thought it'll be safe to shorten it quite a bit, like on Japanese keyboards. I think having some cursor keys down there would save wrist when navigating text. Right now I have to either move my right hand or pinky-out to the arrow keys. Programmers spend a lot of time formatting rather than typing. Parenthesis is more common than brackets, so that's another optimization. Copy pasting can put a strain on the wrist if Ctrl is low, but on the Amiga it's to the side instead which works quite well.

On old computers like the MSX and Amiga, you could often control the joystick and mouse with the keyboard. On the Amiga you need to hold the Amiga keys which is kind of wonky and not obvious. I thought a tristate "lock" key might be a better solution (using two LED colours as indicator). I like the LED window key on the C65 remake by the way. The off/joy/mouse lock is perhaps best situated near the relevant arrow keys. Some nearby keys could be used as buttons.

What else... oh, right, the excellent looking Russian ZX clone called Didaktik has a pretty neat power light design... a sort of pretend-key which integrates it into the keyboard design really well. The A600 did it too, so I went that route with my indicator LEDs. I wanted to keep the arrow keys raised up one step like on the original Amiga and similarly ended up without any Pg.Up/Down/Home/End. I suppose those were alt functions of the arrow keys on the Amiga, depending on software.

I prefer half-height keys over both flat chiclet and full-height (be it cherry or old spring switches). I've positioned the text in a way which makes sense to me. Alt mode glyphs are right-center. Shift is left-top. System key text is centre-centre and so is single-use keys like =+-*. The down-arrow is slightly lowered. I believe older Amiga keyboards had a C= and A key but this was later turned into two A keys.

Full Throttle into Crazy Land

The A500 case design is a bit bland. Initially I wanted to do a smaller version of it, but my redesign below drifted away from the photo I used as a base... perhaps towards something more Atari-like? Mostly I wanted to see how my keyboard layout looked. Then I... began changing things.

Unshifted/primary chars are larger (and bottom left), except for A-Z. I swapped a few keys from the previous layout. Also added «guillimets», and an aproximate equal sign because that is handy. I can't even easily type it on a modern keyboard. Actually it's Alt-x on my mac ≈≈≈, which doesn't really make sense so I won't remember that.

I decided to add some specs for fun. Hard to say where the Amiga should've gone. So much became rapidly obsolete mid '90s. Everything had to be quickly scalable, but the Amiga had a somewhat expensive custom design... which worked well in late '80s but later not so much. Other companies ran into trouble too so it's not like there was a silver bullet. I think.. at least with a 68030 (somewhat expensive then tho), memory would've been scalable. Additionally, a SVGAish GPU with dedicated memory would've helped when porting PC titles and worked better with 3D games than bitplane graphics. A friendly tile mode would've been nice too, just to promote simpler game development, especially early on.

I turned the number keys into a sort of one-hand numpad (the HighPad?). The number stuff is spatially discrete and accessed by moving both hands up just a little bit. 0 1 (more common) are accessible by index/long finger, and number entry can be done one-handed. Dot & comma might still be accessible on the thumbs when entering numbers. <> and () are available on the pinkies. There's a shift key under Escape for $%& and such. Left Alt will however not be useful to select diacritic dead-keys. The diacritics are in red on the num keys to separate them from similar dotty looking characters.

MNOP layout huh? Well, I wanted an ABC layout because it synergizes with and reinforces an existing structure which could help with learning. But, straight-up ABC puts many keys in bad positions. However, with swapped rows it looks about as good as QWERTY. I noticed after trying out some touchtyping on a paper model that fingers will "jam" trying to type WITH... unfortunate since the bigrams IT and TH are very common. Some custom finger moves might be needed there. The letter L unfortunately jwould end up either on left high pinky or far right pinky, so I cheated a little bit and moved it to bottom row under JK where it feels a bit more accessible. I guess it could displace the top row one key (LMNOPQ), but I wanted Q at the center. I use " and : a lot so I put them on some free keys. Spot the Alembic! It's a fairly obscure symbol depicting a destilling machine (retort), perhaps used by wizard achemists. I like how clean and cute it looks. Would be elephants in a Rogue-like.

! ? can be found near the original QWERTY "1" position. X & Y coordinates are often used in programming and those keys are now on right hand index finger. Had to put the German hard S on Alt S. It's there in English QWERT, but on H in German.

I moved in Left Shift so it's less of a pinky stretch. The Tab... I noticed it looks different on Amiga keyboards. It's more clearly showing a normal right-arrow tab in the low position and then a left-arrow tab in the high, shifted position. The latter is used to outdent text blocks rather than indent.

When programming I do use tab a lot so I added a second one near the spacebar, where one can also find extra arrow keys (Alt changes axis). I noticed that when I program I keep my right hand more over the Return key so I can reach the arrow keys with my pinky. It's straining on my PC keyboard where the arrow keys are low (spacebar level, but on the Amiga they're one step up (shift level) which is a little better.

Still I wanted dedicated Start-of-Line and End-of-Line keys, so I raised the arrow keys up further. Alt+SoL/EoL could step words (X axis). If stepping words is more useful I guess it could be primary behaviour. I only had space for a combined PgUp/Dn key. It could be shifted I guess, with Alt turning it into Home/End (Y axis behaviour in all cases).

On my Mac, Alt+L/R steps words, Alt+U/D steps whole strings, i.e. paragraphs, but that's usually lines in code. It's confusing behaviour because U/D is Y axis. Shift+Arrows selects text. I had some idea of adding a Move key, so after selecting a block one can hold the move key and arrow it around rather than Cut-Pasting. Let go to drop. Essentially it's Cut with Paste on release (or second tap). Not sure if it would work. Might save a lot of time though. The text cursor could change to a block whilst moving. The same key could have a Copy-Paste mode useful for e.g. duplicating lines of code or variable names. It does nothing without a text block selected but it might be up to applications to handle these kind of keys.

On the Amiga, I believe Shift+Arrows is hard mapped to SoL/EoL/PgUp/PgDn. The Ctrl key wasn't used much on the Amiga. I remember seeing the [A] keys in program menus. Ctrl, left [A], right [A] is a bit much honestly.

Enter the Matrix

The ghost problem. Diodes between each row on each column can solve it, but you'll need quite a few.

As I understand it, a keyboard matrix would not produce ghosting along a row, or if only one switch per column is on. It's the "L" shapes that spawn ghosts. So maybe WASD and arrows should be on the same row? Modifier keys are not in matrix. In theory I guess the whole 1234, QWER, ASDF, ZXCV (4x4) chunk could be one row. Then you'd plenty of keys for grenades, zoom, crouch, etc. It'd only work for one player (per keyboard) though. A PCB autorouter could probably figure out the traces for that (to adjacent similar blocks).

Ghost keys can be detected because they appear on the same poll frame along a column, and unless polling frequency is very slow, it's highly unlikely to be human presses. But, it's problematic what to do about it... the controller needs to remember and filter these presses. Then the human can of course mangle the keyboard further, meaning the filter has to be expanded. A bitfield?

A very cheap solution is to only allow one active row at a time. The active row is selected on a first-come basis, i.e. the other rows HAVE to be 0. If two rows get presses (e.g. D and V is held) then no one gets to play. There could be a software (or jumper) disable for this, along with diode pads on the PCB e.g. []-[] where - is cut and a SMD diode can be installed... through-hole might work but needs much more space. Scratch-built keyboards are a different thing as they often use the diode legs as traces.

Here's my attempt at staggering the keys so "WASD" (in qwerty) and arrow keys ends up on the same row. I can see why it's not done as routing becomes messy, especially with a 1.5-sided through-hole board. Large PCBs get expensive so a simpler matrix might be worth it. I reworked this a few times. Currently using a membrane layout where it's not really possible to install diodes.

If using the keyboard as a piano, chords in C-major might cause ghosting because the rows are so short. It's somewhat fixable if by alternating odd/even numbers, but there are of course other scales which use the upper black keys.

Shift+space are separate modifier keys outside the matrix. I did the same with Esc & CapsLock because they might have special features... like an interrupts/resets or something. I'm thinking the Shift keys are actually one key, same for Ctrl,C=,[A] (which is not how the Amiga did it). It's important that it's consistent... either three Ctrl keys (like CtrlA, CtrlB, CtrlC), or just a Ctrl which can be modified by Shift and Alt when needed. I like the latter because with CtrlA/B/C you have to decide which is the primary one to remember/try, and key adjacencies might also become an issue.

K120 Teardown

I bought my Logitech K120 keyboard in a physical store where I could try out a whole bunch of different keyboards. I'm not really a fan of new mechanical (or old spring) keyboards. Chiclet keyboards feel a bit too flat, though I kinda like the one on my ASUS eeePC netbook. The K120 is a budget keyboard but I ended up liking the feel of the half-height keys. There's a rare white model (German layout) which I would prefer over the black. Anyways, eventually keyboards get gunky and have to be cleaned, so I took the opportunity to also peek inside...

So many screws... maybe to prevent creaking. Without any screws there is actually no creaking, but as soon as I put a few back in after reassembling... it started so I guess they're all needed. Some screws go into the central key area so that's something to consider when routing. The case has various supporting shapes helping rigidity. It might be possible to grease the plastic keys to improve the feel.

Inside we get a simple but elegant, and "spillproof" construction. The key plungers go through stalks, but even if the liquid somehow gets up through, it'll end up on the rubber sheet. If it gets through that, it can't easily reach the conductive traces because those are on the inside of the films (capillary action is tricky though). The layers look like this:

    _____
   /_   _\     KEY
     |_|
===||   ||===  TOP CASE
      _
_____/ \_____  RUBBER DOME SHEET

_____________  UPPER PCB FILM

_____   _____  THIN SPACER FILM (note hole on photo)

_____________  LOWER PCB FILM

=============  BOTTOM CASE

I forgot to let it fully dry before reassembling but let's trust the marketing on sprillproofiness. There's a clip-on LED light pipe/guide plastic piece. The PCB is single layer and minimal... This was built to a price. Probably just a blob underneath. The metal bracket likely presses the matrix film onto the PCB. Some extravaganza with the connector and ferrite choke on cable.

It's possible to solder components to a cheap membrane/film "PCB", but key diodes need to go near where there might be some mechanical stress from the keypresses. The floppy PCB film needs a hard backing, which is the plastic case itself in cheap keyboards. A keyboard computer is wedge shaped and won't be able to use the bottom case part as backing so a rigid metal sheet might be needed.

Also, it's possible to manufacture layered PCBs with a flex film as an attached or even embedded layer which can fold over.

And a tip: when washing matt black plastic it often develops an uneven surface finish. I don't know if I'm doing anything wrong, but I disovered that it's fixable with a subtle polish of hand creme ("Atrix soft protection cream"). In fact, I think it sometimes improves the finish over the factory plastic sheen.

Deltaco TB-57 teardown

I also have this Deltaco keyboard of similar price and construction, but not of similar quality. I guess the devil is in the details. When I first opened the keyboard, about a hundred rubber domes fell out. It was probably cheaper to not have to make a large mould for a rubber dome sheet, but I bet assembly cost was higher (pick'n place machine, I hope... it was dreadful labour to put them all back in). The general construction had not been able to keep dust out. Several plastic posts inside had broken, either at factory or when I opened it. Tooling seemed a bit sloppy. The way the film attaches to the PCB and top of case crinkles it and some component legs poke at the film dangerously. The PCB looks horrible. When I reassembled several screws would no longer take. The rubber feet are nice but aren't angled with the slope of the keyboard for mysterious reasons so only the edges are touching the table. The keys somehow feel... off with their less tactile flat & square (chiclet-like) top. And they're a bit rattley, perhaps because the key necks lack vertical guides. Guides, like on the K120 can however cause some stuck'ey friction when hitting the very edge of a key.

Misc Bits

Thinking about logic symbols and witchcraft.

The Amiga 500 Kickstart screen is actually a vector image, similar to old Sierra games. I ported over some code I found to BlitzMax and added time-step editing features. Here I'm in the process of enlarging the hatch and label but ran into problems near the thumb. The drawing routine could probably have been made more compact with thick line support.

Fooling around with ideas for a new Kickstart screen. I turned the tick mark into a sort of heart-shaped impossible W.

I guess it might be possible to use PCB films in a joypad. The films could be folded 90 degrees also handling the shoulder buttons (which usually require two separate PCBs and short cables).

Lemmings and Blood Money doodles. Lemmings 3 featured... almost minecraft type slabs instead of pixels. I think some would disappear if walked over. I think machines, moving platforms, enemies could make a Lemmings type game more interesting, but Amiga pixels work better than "HD". I prefer the white face lemming design used ingame.

Random PS5 case, Codename Baleen.

Some other hardware pages

Amiga HDD - Amiga cleanup - Amiga pixels - SBC - Assorted - MSX - Acorn project - Amstrad project, etc. - ZX project - Assorted - Electronics Endeavour


Art by Arne Niklas Jansson

AndroidArts.com