Xerox Docutech Keyboard - cleanup and (hopefully) conversion

User avatar
snacksthecat
✶✶✶✶

02 Jul 2018, 01:47

Hi Guys,
This thread is going to be a log of work I'm doing to clean up this Xerox Docutech keyboard and hopefully -- if I'm able to do it -- conversion to USB.

I haven't done much with it yet, just starting to poke around and see whats up.

Here's the keyboard itself:
Spoiler:
Image

Image
Unfortunately one of the keycaps broke off in transit :(
Spoiler:
Image
Here are some of the more comical keycaps:
Spoiler:
Image

Image
Here's how to take it apart (no screws on this badboy). Works best if you have two little plastic pry tools. You'll see the obvious clips around the boarder from the back. But additionally there are two more clips on the interior that need to be popped out as well in order to open it up.
Spoiler:
Image

Image
Spacebar is another problem. Maybe the stabilizer just wasn't clipped in right. I didn't really investigate yet. (video might be upside down, sorry. hopefully youtube editor rotates it but hasn't seemed to save yet)
Spoiler:
Most of the caps are PBT except the spacebar and the STOP button :lol: These I plan to retrobrite so they look as nice as the other keys.

Now that I've got it open, I'm going to figure out the pinout and get it hooked up to the logic analyzer.

User avatar
Myoth

02 Jul 2018, 01:49

the spacebar is probably mushy due to those damn Alps dampeners, removing them will fix that

green-squid

02 Jul 2018, 11:25

Cool find! Some epoxy or superglue will fix that broken stem on the keycap.

andrewjoy

02 Jul 2018, 11:31

That is awesome!

They are neon alps right ? Are they the Pine ones ?

See that round extra stabiliser for the space bar that the round peg on the space bar goes into, that is what causes it. Ether give it a good clean and lube or lose it .

User avatar
kakan

02 Jul 2018, 16:03

You can find documentation of the 6085 keyboard here which might help you with the conversion.

http://www.mirrorservice.org/sites/www. ... erox/6085/

User avatar
Blaise170
ALPS キーボード

02 Jul 2018, 16:38

Once I finally find a Neon Green SKCM switch, I can finally go back on hiatus from keyboards for a couple more years. :mrgreen:

User avatar
snacksthecat
✶✶✶✶

04 Jul 2018, 15:56

The feet on this thing win the coolest / most over-engineered mechanism award in my book

User avatar
E3E

04 Jul 2018, 15:57

Ahh, my baby. I love the 6085 design. :D

User avatar
snacksthecat
✶✶✶✶

04 Jul 2018, 20:03

Anyone know what voltage this board is? Sorry for the wonky photos; I used panoramic mode on my phone to get detail.

Image

Image

User avatar
kakan

05 Jul 2018, 02:30

I quickly looked up the TI SN74159N, AMD AM26LS31PC, Motorola SN74LS03N and their respective datasheet and all of them run on 5volts.

Edit: also from the documentation earlier there is a service manual that states the xerox workstations components run on 12v and 5v under RAP1

http://www.mirrorservice.org/sites/www. ... _Oct88.pdf

User avatar
snacksthecat
✶✶✶✶

17 Jul 2018, 23:50

First look at the signaling. This is with nothing pressed on the keyboard.

Image

Image

User avatar
snacksthecat
✶✶✶✶

18 Jul 2018, 03:56

kakan wrote: I quickly looked up the TI SN74159N, AMD AM26LS31PC, Motorola SN74LS03N and their respective datasheet and all of them run on 5volts.

Edit: also from the documentation earlier there is a service manual that states the xerox workstations components run on 12v and 5v under RAP1

http://www.mirrorservice.org/sites/www. ... _Oct88.pdf
Cool! I love how detailed and helpful these old documents were
Keyboard information is sent out in one byte codes unless there is mouse
information, in which case a 3-byte code is used. The keyboard is
asynchronous and operates at 9600 baud. During periods of no keyboard
or mouse activity, the keyboard will send the mouse coordinates back to
the workstation every 400-500 milliseconds. If no byte is received from
the keyboard within a second, the processor will send a reset command
to the keyboard.

The + 5VDC needed to operate both the keyboard and the mouse is
supplied by the lOP PWB through the keyboard cable.

User avatar
snacksthecat
✶✶✶✶

18 Jul 2018, 04:57

So weird! It's like it sends xt scancodes but all the keys are shifted three columns to the right!

a (make: 33| break: 161)
Image

s (make: 34| break: 162)
Image

d (make: 35| break: 163)
Image

User avatar
kps

18 Jul 2018, 21:28

snacksthecat wrote: Here are some of the more comical keycaps:
Spoiler:
Image

Image
These are Star keys. PROP'S is short for PROPERTIES, which brings up the property sheet (inspector) for the current selection (text, document, etc.) Similar to Mac's ⌘I, but more consistent.

KEYBOARD brings up a keyboard viewer, for entering special characters and switching layouts.

See https://youtu.be/_OwG_rQ_Hqw?t=1h et seq. (PROPS, KEYBOARD)

User avatar
snacksthecat
✶✶✶✶

19 Jul 2018, 05:21

I had a strong hunch based off this that I could use hasu's Sony News keyboard converter.
NEWS keyboard protocol is a usual asynchronous serial communication. You can receive data from the keyboard easily with UART of micro controller.

TTL level
9600bps
1-start bit
8-data bit
non-parity
1-stop bit.
https://github.com/tmk/tmk_keyboard/tre ... r/news_usb

I tested this out last night and confirmed that it works perfectly, aside from all of they keys being miss-mapped for the Xerox board.

I'm going to reacquaint myself with TMK and see if I can build myself a proper keymap. Will probably be a little tedious but nowhere near as bad as tracing the matrix.

Does anyone have a cool idea for the layout? There are many keys I'm not sure what to do with:

Code: Select all

           ,--------------------.  ,--------------------.  ,-----------.
           |    |    |    |     |  |    |    |    |     |  |     |     |
           `--------------------'  `--------------------'  `-----------'
,--------. ,----------------------------------------------------------. ,---------------.
|   |    | |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|  Back| |  +|  -|  *|  /|
|--------| |----------------------------------------------------------| |---------------|
|   |    | |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]| Rtn| |   |  7|  8|  9|
|--------| |-------------------------------------------------------   | |---------------|
|   |    | |Caps  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|  `|   | |   |  4|  5|  6|
|--------| |----------------------------------------------------------| |   |-----------|
|   |    | |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|    Shift| |   |  1|  2|  3|
|--------| |----------------------------------------------------------| |---------------|
|   |    | |     |    |              Space                 |    |     | |      0|  .|  ,|
`--------' `-----'    `------------------------------------'    `-----' `---------------'

User avatar
kakan

19 Jul 2018, 19:13

Code: Select all

     		               
,-----------------.
| KC_STOP|  KC_DEL|
|--------|--------|
| KC_UNDO|KC_AGAIN|
|--------|--------|
| KC_FIND| KC_COPY|
|--------|--------|
|  	   |  	   |
|--------|--------|	
|   	  |        |	
`-----------------'	                
This is my take on the left cluster thats incomplete.

Top row could be F' keys


Keyboard could be LGUI(LCTL(KC_O) shortcommand for virtual keyboard in windows 10.

You could probably write other custom macros for the missing keys.

I would try to mimic the purpose of every key it was supposed to do but still keep it usable as a daily driver. Or you can make macros for every key and have a toggle Fn key for another layer. so the F' keys are ontop and KEYBOARD acts like ctrl and so on.

User avatar
snacksthecat
✶✶✶✶

20 Jul 2018, 03:19

Here's all the scancodes:

Code: Select all

           ,--------------------.  ,-------------------.  ,-----------.
           |  63|  64|  65|  66 |  |  67|  68|  69|  6A|  |   6B|   6C|
           `--------------------'  `-------------------'  `-----------'
,--------. ,----------------------------------------------------------. ,---------------.
| 54|  55| | 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 0E| 0F| 10|    11| | 40| 41| 42| 43|
|--------| |----------------------------------------------------------| |---------------|
| 56|  57| |   12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B| 1C| 1D| 1E|  1F| | 44| 45| 46| 47|
|--------| |-------------------------------------------------------   | |---------------|
| 58|  59| |    6D| 21| 22| 23| 24| 25| 26| 27| 28| 29| 2A| 2B| 2C|   | | 48| 49| 4A| 4B|
|--------| |----------------------------------------------------------| |   |-----------|
| 5B|  5C| |      2D| 2F| 30| 31| 32| 33| 34| 35| 36| 37| 38|       39| |   | 4D| 4E| 4F|
|--------| |----------------------------------------------------------| |---------------|
| 5D|  5E| |   3A|    |               3D                   |    |   3F| |     50| 52| 53|
`--------' `-----'    `------------------------------------'    `-----' `---------------'

User avatar
snacksthecat
✶✶✶✶

21 Jul 2018, 02:55

Working on cleaning up the rest of the board. I decided that I'd like to use it for a week or two then ultrasonic the switches (and fix up any keymap things). That way I can compare what cleaning the switches really did.

Engicoder

21 Jul 2018, 05:02

Nice work snacks! A really great and rare board made usable. Looking forward to your review and post cleaning comparison.

User avatar
kakan

21 Jul 2018, 11:57

here is a link to the raw data for when you build your keyboard layout :). Hopefully we can see it up and running soon™.

User avatar
snacksthecat
✶✶✶✶

22 Jul 2018, 02:45

Okay boys, we did it!
Here's the keymap.c (again, this is for hasu's Sony NEWS keyboard converter)

Code: Select all

/*
Copyright 2012 Jun Wako <wakojun@gmail.com>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include <stdint.h>
#include <stdbool.h>
#include "keycode.h"
#include "util.h"
#include "keymap.h"

// Following macros help you to define a keymap with the form of actual keyboard layout.

/* XEROX DOCUTECH KEYBOARD */
#define KEYMAP( \
            K63,K64,K65,K66,        K67,K68,K69,K6A,        K6B,K6C,                  \
    K54,K55,K04,K05,K06,K07,K08,K09,K0A,K0B,K0C,K0D,K0E,K0F,K10,K11,K40,K41,K42,K43,  \
    K56,K57,K12,K13,K14,K15,K16,K17,K18,K19,K1A,K1B,K1C,K1D,K1E,K1F,K44,K45,K46,K47,  \
    K58,K59,K6D,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,    K48,K49,K4A,K4B,  \
    K5B,K5C,K2D,    K2F,K30,K31,K32,K33,K34,K35,K36,K37,K38,    K39,    K4D,K4E,K4F,  \
    K5D,K5E,K3A,                    K3D,                        K3F,K50,    K52,K53   \
)  { \
    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
    { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
    { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
    { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
    { KC_NO,    KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
    { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_NO,    KC_##K2F }, \
    { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
    { KC_##K38, KC_##K39, KC_##K3A, KC_NO,    KC_NO,    KC_##K3D, KC_NO,    KC_##K3F }, \
    { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
    { KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_NO,    KC_##K4D, KC_##K4E, KC_##K4F }, \
    { KC_##K50, KC_NO,    KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
    { KC_##K58, KC_##K59, KC_NO,    KC_##K5B, KC_##K5C, KC_##K5D, KC_##K5E, KC_NO    }, \
    { KC_NO,    KC_NO,    KC_NO,    KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
    { KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_NO,    KC_NO    }, \
    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO    }, \
    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO    }  \
}


// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
const uint8_t PROGMEM fn_layer[] = {
    0,              // Fn0
    0,              // Fn1
    0,              // Fn2
    0,              // Fn3
    0,              // Fn4
    0,              // Fn5
    0,              // Fn6
    0               // Fn7
};

// Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer.
// See layer.c for details.
const uint8_t PROGMEM fn_keycode[] = {
    KC_NO,          // Fn0
    KC_NO,          // Fn1
    KC_NO,          // Fn2
    KC_NO,          // Fn3
    KC_NO,          // Fn4
    KC_NO,          // Fn5
    KC_NO,          // Fn6
    KC_NO           // Fn7
};
Pinout:
Image

Steps to build this converter:
  1. obtain teensy microcontroller
  2. wire up keyboard to teensy (see pinout above)
  3. download hasu's Sony NEWS keyboard converter
  4. replace his keymap.c with the code above
  5. sudo make -f Makefile.pjrc clean
  6. sudo make -f Makefile.pjrc
  7. download teensy loader application
  8. flash teensy with the binary (news_usb_pjrc.hex)
  9. reboot teensy
Thank you guys very much for the help! I'll be sure to update with my thoughts after I've used the keyboard for a bit

User avatar
snacksthecat
✶✶✶✶

29 Nov 2018, 04:53

Going to start fixing it up. I just got a decent camera so here are some new photos.

Image

Image

Image

Image

Image

Image

User avatar
snacksthecat
✶✶✶✶

03 Dec 2018, 01:22

Usually with a nice keyboard like this, I would desolder the switches and run them through the ultrasonic cleaner. However, I haven't been happy with the results of doing that in the past. So this time I'm just going to pop the tops off and leave the bottoms soldered in place.

I'll clean the plates, tops, and springs (hey why not) but I'm going to leave the sliders as they are in case they have some secret sauce dry lube on them from the factory. Then I'll simply dust out the bottoms.

Image

This is the method I use to open Alps switches. If you cut up an old credit card (or something similar) then slide between the clips, you can wiggle the top of the switch off.
If you slide the cards in just right, the switch top will pop up and come out very easily.
What techniques do you guys use? (both for cleaning switches as well as opening them up)

User avatar
Chyros

03 Dec 2018, 08:36

I use toothpicks. I've found the toothpicks get incrementally better the longer you use them (the pressure tapers the point to an ideal shape over use). The picks break eventually though. I might try your credit card method, although I'd sharpen one of the points so it'd slide in easier.

User avatar
kakan

03 Dec 2018, 11:27

I also use toothpicks, the ones who looks like a large splinter. My technique is finding a thicker one and places it on one side of the clips and use a thinner one to put in the other side. It' works great for me for both soldered and desoldered switches.

User avatar
zrrion

03 Dec 2018, 19:19

I use a card like this as well, and I have a pair of forceps that I wrapped the end in Teflon tape that I use to grab the stem without marring the plastic. It works very well since forceps lock it let's me keep the top and slider together more easily.

Once everything is apart I tend to soak the dirty sliders and top housings is isopropyl while I clean the rest of the board, otherwise a q tip works well. The bottoms just get blown out with air.

Super jealous of the board! And the restoration is looking good.

User avatar
snacksthecat
✶✶✶✶

05 Dec 2018, 05:05

One thing that I wanted to do was retrobrite the two ABS keycaps. I tried to take "before and after" pictures that were as accurate as possible. Unfortunately, I realized after the fact that my camera is set to auto white balance so it might not be a perfect comparison. Nevertheless, here is the results of submerging in 3% peroxide under a UV lamp for about 6 hours. I will probably go for a bit more to even out the color and get it a touch brighter.

Image

Image

User avatar
alh84001
v.001

05 Dec 2018, 05:50

Nice! I completely missed that there is a converter for this thing. I'll have to assemble one when I get back to my boards.

User avatar
snacksthecat
✶✶✶✶

08 Dec 2018, 05:00

snacksthecat wrote: One thing that I wanted to do was retrobrite the two ABS keycaps. I tried to take "before and after" pictures that were as accurate as possible. Unfortunately, I realized after the fact that my camera is set to auto white balance so it might not be a perfect comparison. Nevertheless, here is the results of submerging in 3% peroxide under a UV lamp for about 6 hours. I will probably go for a bit more to even out the color and get it a touch brighter.

Image

Image
Final outcome:
Image

User avatar
snacksthecat
✶✶✶✶

08 Dec 2018, 05:07

Edit: fixed the image links

I'm actually kind of regretting retrobriting those keys. Reason number one, I was weighing down the spacebar in the peroxide with a small metal tool. The metal reacted and left some sort of burn right across the middle of the spacebar. Reason number two, I actually think I like the look of the board way better with the yellowed spacebar! :lol: :oops: :evil: :roll:

Image

Image

Image
Last edited by snacksthecat on 22 Mar 2022, 01:45, edited 1 time in total.

Post Reply

Return to “Workshop”