Victor 9000 keyboard conversion

User avatar
snacksthecat
✶✶✶✶

30 Oct 2018, 02:56

Hi Guys,
I got a Victor 9000 keyboard that I get to play around with.

First, some photos of the board:

Image

Image

Image

Image

Image

Image

Image

Image

Image

Image

Image

I'm not experienced with capacitive sensing, would this be a candidate for an xwhatsit?

The other approach I could take is to tackle the protocol. It's explained in surprising detail in the techref:

Image
http://www.bitsavers.org/pdf/victor/vic ... _Jun82.pdf

What do you guys think?

User avatar
Muirium
µ

30 Oct 2018, 10:06

Well documented indeed. All it doesn’t give is a chart of the keys’ 7-bit values (presumably ASCII based with exceptions for the function keys and such) and the pinout / voltages. It could be a great project for a first time converter designer!

Note that it gives separate make and break codes (key down vs. key released) and so should be NKRO by my understanding. I’d seriously keep the original controller in there and investigate.

User avatar
snacksthecat
✶✶✶✶

30 Oct 2018, 15:25

Thanks for the input, Mu. I'm definitely up to the challenge (or at least to dip my toes in the water).

I think I've got the pinout right. Vcc and Gnd were easy enough to trace. For the others, I'm relying on my interpretation of the maintenance schematic

Image

Image

Does my pinout jive with the schematic? Or is it not enough information to tell?

As for the signalling, I unfortunately don't immediately get anything when plugging into the logic analyzer and hitting some keys. I think this piece from the techref explains why:

Image

So it sounds like I need to figure out how to use the RDY and ACK lines to get the keyboard to send me some stuff over the DATA line. No clue what the keyboard is expecting me to do though. It's not clear from the description if I'm supposed to send a byte, pull the line low, do a funny dance, etc. :lol:

User avatar
snacksthecat
✶✶✶✶

30 Oct 2018, 15:49

Wow it's explained even better deeper into the techref:

Image

Gives me a few things to try but I still think I'm in over my head a bit.

User avatar
Muirium
µ

30 Oct 2018, 15:57

Looks like pins 7 & 3 are simply duplicates for +V and GND, respectively. I’m no electrical engineer, however, so don’t know why there’s six electrolytic capacitors hooked up in parallel between them. Something about stabilising the power supply?

Oh, that paragraph’s a bugger! It’s not nearly as specific. My guess would be there’s nothing fancier than send a high or low bit to indicate “yeah I got it” over and over, polling the keyboard, but if it’s fancier it gets harder all right.

Update: Yeah, that new text is more like it. Again, I’m just guessing, but it sounds to me like you could poll the keyboard over and over quite easily, using a single pulse low-hi-low from KBACK. The 250 ms figure means the keyboard will announce the last key code every quarter of a second until it’s polled again. They were really thinking of SLOOOOOOOW computers at the time!

User avatar
snacksthecat
✶✶✶✶

30 Oct 2018, 16:33

Muirium wrote: Update: Yeah, that new text is more like it. Again, I’m just guessing, but it sounds to me like you could poll the keyboard over and over quite easily, using a single pulse low-hi-low from KBACK. The 250 ms figure means the keyboard will announce the last key code every quarter of a second until it’s polled again. They were really thinking of SLOOOOOOOW computers at the time!
I was thinking the same thing but either I'm approaching it wrong or I'm missing a piece of the puzzle.

The RDY line never seems to go low. I tried wiggling the ACK line up and down but I'm also not getting anything over DATA.

Image

User avatar
snacksthecat
✶✶✶✶

30 Oct 2018, 17:01

According to what I'm reading online, it's possible that the foam in the switches as deteriorated and maybe none of the switches work? I guess this is something I should look into before going any further trying to get a peep out of it.

User avatar
Muirium
µ

30 Oct 2018, 18:14

Stick in there. I *strongly* doubt that all the keys are defective. I’ve never encountered that, even with much cheaper made boards. Besides, this is one I know to be pretty solid, first hand!

Image
photos-f62/sirius-s1-victor-9000-1982-t ... lit=sirius

Not mine, but I have played with one. There’s nothing cheap about it. I bet they still work fine, if we can figure out their ancient language.

Perhaps try a completely different period of signal? It could be looking for sharper transitions, or alternatively it could be built for p e d e s t r i a n s t u f f b y o u r s t a n d a r d s . Who knows?

User avatar
snacksthecat
✶✶✶✶

30 Oct 2018, 19:42

I actually do think the foam is goobered. I took the PCB off the switch/plate assembly and checked it out. It looks to me like they're all deteriorated and (possibly?) not making contact with the pads.

Image

Then I wrote a little arduino sketch to send the ACK signals based on the description of the protocol in the techref.

I'm actually able to get some readings out of the keyboard if I poke the pads with my finger directly.

This is a press of key "A" followed by a release of key "A":

Image

Image

Not sure what to do with this information yet but maybe I'll be hit with some inspiration soon (a lot of this stuff is over my head so I'm kind of learning as I go).

User avatar
OldIsNew

30 Oct 2018, 22:03

snacksthecat wrote: I actually do think the foam is goobered. I took the PCB off the switch/plate assembly and checked it out. It looks to me like they're all deteriorated and (possibly?) not making contact with the pads.
Yea, almost always with the KeyTronic F&F, the foam and foil are shot and need to be replaced. I've done this with a number of these boards and while it is tedious, it's not really difficult. Here's a link to the first one I did:

workshop-f7/westinghouse-w1642-keytroni ... and%20foil

I think someone is selling replacement F&F pads on eBay, but I figure it's more fun to do it yourself.

User avatar
snacksthecat
✶✶✶✶

30 Oct 2018, 23:00

OldIsNew wrote: I think someone is selling replacement F&F pads on eBay, but I figure it's more fun to do it yourself.
Thanks for this. I opted to buy a set since I'm a bit swamped at the moment.

I made a tiny bit of progress on conversion (at least I think I did).

I set up a saleae analyzer for "simple parallel"; with KBRDY as the clock and KBDATA as the data. If I touch a key, the output perfectly matches the switch number printed on the back of the PCB -- exactly as described in the documentation. Well, almost :( This is true for the very top row of keys up to keyboard "7". Keyboard "8" gives 0000000 (decimal 0) for some reason. Then all the other switches on the board match the switch number printed on the back except they're off by 1.

For example, the last switch on the keyboard is S104. But when I plug it into the logic analyzer, I get 1100111 (decimal 103).

So confused :?

User avatar
Muirium
µ

30 Oct 2018, 23:33

So long as they're all unique, what's not to like? Your task for now is to note all of them down.

I stand corrected on the switch condition front. Just because I haven't encountered something, doesn't mean it's uncommon. Not for foam and foil, evidently.

User avatar
Sangdrax

31 Oct 2018, 02:44

Gonna echo OldisNew on this. Every vintage keytronic I've ever got like that needed replacement. But an 11mm punch, some antistatic bags and some foam are all you need to get it back in shape. Twenty bucks gets a replacement DMA Capsense board too to replace the controller and not have to deal with protocol stuff. Can't recommend that enough. Love those things. Xwhatsit works great too.

User avatar
snacksthecat
✶✶✶✶

01 Nov 2018, 23:24

Making some progress! I wrote a small sketch that does the following:
  • Continuously poll the keyboard by sending ACK messages in response to RDY queries.
  • Attach interrupt to RDY line on falling edge (treating this as a clock)
  • Read in the 9bit message coming in over DATA
  • First 7 bits tell the switch number; 8th bit tells if it's make or break; 9th bit is stop
Based on this, I know what switch is being activated and whether it should be set or unset.

Image

The next thing I guess I should do is create a translation from switch number to key code.

One thing I'm not knowing at this point is whether modified keys send different codes. I know it would be easy to check at this point but I think I'm afraid to :lol:

Konant

01 Nov 2018, 23:53

Really excited to see how this ends up, thanks for taking on the task!

User avatar
OldIsNew

02 Nov 2018, 01:10

Cool! Sounds like making good progress for sure. Oh, BTW forgot to mention before - that is a really nice board - definitely a classic!

User avatar
snacksthecat
✶✶✶✶

02 Nov 2018, 02:52

Here's my first crack at a converter. Just 80 lines of code! This AVR stuff is pretty cool.

Code: Select all

const int KBACK = 0;
const int KBRDY = 5;
const int KBDATA = 1;

const long keyMap[103] = { KEY_F8,          KEY_F1,                       KEY_F2,                           KEY_F3,              KEY_F4,                   KEY_F5,                KEY_F6,                                 KEY_F7,                  0,             KEY_F9,                                   KEY_F10,   
                          KEY_ESC,         KEY_TILDE,         KEY_1,     KEY_2,                  KEY_3,    KEY_4,     KEY_5,    KEY_6,     KEY_7,         KEY_8,     KEY_9,      KEY_0,         KEY_MINUS,               KEY_EQUAL,               KEY_BACKSPACE, KEY_INSERT,  KEY_DELETE,    KEYPAD_ENTER, KEYPAD_SLASH, KEYPAD_SLASH, KEYPAD_ASTERIX,
                          KEY_SCROLL_LOCK, KEY_TAB,           KEY_Q,     KEY_W,                  KEY_E,    KEY_R,     KEY_T,    KEY_Y,     KEY_U,         KEY_I,     KEY_O,      KEY_P,         KEY_LEFT_BRACE,          KEY_RIGHT_BRACE,         0,             KEY_HOME,    KEY_END,       KEYPAD_7,     KEYPAD_8,     KEYPAD_9,     KEYPAD_MINUS,   
                          KEY_NUM_LOCK,    KEY_CAPS_LOCK,     KEY_A,     KEY_S,                  KEY_D,    KEY_F,     KEY_G,    KEY_H,     KEY_J,         KEY_K,     KEY_L,      KEY_SEMICOLON, KEY_QUOTE,               0,                                      KEY_PAGE_UP, KEY_PAGE_DOWN, KEYPAD_4,     KEYPAD_5,     KEYPAD_6,     KEYPAD_PLUS,
                          KEY_PAUSE,       MODIFIERKEY_SHIFT, KEY_Z,     KEY_X,                  KEY_C,    KEY_V,     KEY_B,    KEY_N,     KEY_M,         KEY_COMMA, KEY_PERIOD, KEY_SLASH,     0,                       MODIFIERKEY_RIGHT_SHIFT, KEY_ENTER,     KEY_UP,      KEY_DOWN,      KEYPAD_1,     KEYPAD_2,     KEYPAD_3,     KEYPAD_ENTER, 
                          KEY_PRINTSCREEN, MODIFIERKEY_ALT,   KEY_SPACE, MODIFIERKEY_RIGHT_CTRL, KEY_LEFT, KEY_RIGHT, KEYPAD_0, KEYPAD_0,  KEYPAD_PERIOD };


bool makeCode;
byte messageArray[9];        // Full word being sent by keyboard
byte switchNum = 0;          // switch Number
int numBits = 0;             // How many bits of the scancode have been read?

unsigned long nowMillis;
unsigned long prevMillis;

void isr() {

  // Scrap old / incomplete message
  nowMillis = millis();
  if (nowMillis - prevMillis > 250) {
    numBits = 0;
  }
  prevMillis = nowMillis;

  // Read the bit
  messageArray[numBits] = digitalRead(KBDATA);
  numBits++;

  // Once we have a whole word...
  if (numBits == 9) {

    // Copy the code portion of the message
    for (int i = 0; i < 7; i++) {
      bitWrite(switchNum, i, messageArray[i]);
    }

    // Copy the make / break portion
    makeCode = messageArray[7];

    // Send the instruction...
    long key = keyMap[switchNum];
    if (makeCode == 1) {
      Keyboard.press(key);
    }
    else {
      Keyboard.release(key);
    }

    // Reset
    numBits = 0;
    switchNum = 0;
  }
}

void pollKeyboard() {
  if (digitalRead(KBRDY) == LOW) {
    digitalWrite(KBACK, LOW);
  }
  else {
    digitalWrite(KBACK, HIGH);
  }
}

void setup() {
  attachInterrupt(digitalPinToInterrupt(5), isr, FALLING);
  pinMode(KBACK, OUTPUT);
  pinMode(KBRDY, INPUT_PULLUP);
  pinMode(KBDATA, INPUT_PULLUP);

  Serial.begin(9600);
}

void loop() {
  pollKeyboard();
}

User avatar
Muirium
µ

02 Nov 2018, 18:57

Intriguing!

User avatar
snacksthecat
✶✶✶✶

03 Nov 2018, 23:14


Konant

04 Nov 2018, 01:45

Mind explaining the non standard keys? Would they have an actual function now?

Lanrefni

04 Nov 2018, 15:34

snacksthecat wrote: Any cool ideas for a keymap?

Image
http://www.keyboard-layout-editor.com/# ... 8cf9ad1612
Caps Lock should be mapped to Control since that is where Control belongs,I severely dislike the Caps key so I may be a bit biased.

User avatar
snacksthecat
✶✶✶✶

04 Nov 2018, 15:44

Lanrefni wrote: Caps Lock should be mapped to Control since that is where Control belongs,I severely dislike the Caps key so I may be a bit biased.
I have a couple of boards with this layout and I can attest that it fits quite nicely ergonomically speaking!

SilenceGoo

06 Nov 2018, 02:28

Pretty beauty, could you provide some info of the switch?

User avatar
snufflecat

06 Nov 2018, 19:17

Man.. wish I had your skills when it comes to making converters..

Konant

07 Nov 2018, 03:30

I like this one a lot
http://www.keyboard-layout-editor.com/# ... %3B&=0&=00&=.

Idk what to do with the blank keys but I know I need a \ key somewhere. Could there also be layers?

User avatar
snacksthecat
✶✶✶✶

17 Nov 2018, 23:42

SilenceGoo wrote: Pretty beauty, could you provide some info of the switch?
Finally got the new foam/foil pads in. I was waiting for them to come before taking this project any further.

The switches are Keytronic foam and foil switches. I don't know anything about them but below are some photos. I'm sure someone here can tell you plenty about these switches!

Along with the really nice keycaps, this keyboard actually feels really pleasant to type on. Since I have to pop all the switches out anyways to replace the pads, I'm going to toss them in the ultrasonic cleaner.

Image

Image

Image

Image

Image

Image

Image

Image

Image

User avatar
snacksthecat
✶✶✶✶

18 Nov 2018, 01:27

The pads had turned to utter dust!

Image

Time to clean the switches up and put the new pads in :)

User avatar
OldIsNew

18 Nov 2018, 03:35

I really like these switches actually. They almost always need replacement F&F but once done I think they're great boards, here are some I've done - and I like them all - worth the effort I think!

orig.jpg
orig.jpg (358.94 KiB) Viewed 7555 times
workshop-f7/westinghouse-w1642-keytroni ... ic#p384536

orig1_sm.jpg
orig1_sm.jpg (213.12 KiB) Viewed 7555 times
keyboards-f2/l3-communications-keyboard ... ic#p390190

Wang_orig_sm.jpg
Wang_orig_sm.jpg (503.7 KiB) Viewed 7555 times
keyboards-f2/wang-workstation-keyboard- ... ic#p396862

done1.jpg
done1.jpg (226.67 KiB) Viewed 7555 times
https://geekhack.org/index.php?topic=92 ... msg2505876

Dasher_Finished_small.jpg
Dasher_Finished_small.jpg (263.97 KiB) Viewed 7555 times
workshop-f7/data-general-dasher-and-xwh ... ic#p425864

I like your video of the remains of the F&F! The foam does seem to be practically dust most of the time, but once fixed I think they are really nice switches - it's the truly horrible short stem Key Tronic F&F switches that I think have ruined the reputation of F&F.

User avatar
snacksthecat
✶✶✶✶

19 Nov 2018, 00:56

@oldisnew those boards are amazing. The colors on each one are better than the last!

So it turns out that the replacement foam bits that I bought are just that; replacement FOAM

Image

I would need to also replace the little pieces that actually make contact with the board. Anyone know where I can get that stuff?

User avatar
OldIsNew

19 Nov 2018, 02:15

TY for your nice comments - Key Tronic vintage F&F are really nice boards IMO.
snacksthecat wrote: So it turns out that the replacement foam bits that I bought are just that; replacement FOAM....
Oh you're kidding me! That's not right! Have to have the foil. For foil I've been using a Mylar "Emergency Blanket" and punching with a 7/16 " leather punch. You can get this at WalMart, etc. Do have to check each foil disk with the multimeter before gluing them on to the foam disk - non-conductive side to the PCB. I think Sangdrax said he has used electrostatic bags that are coated on both sides and dosen't have to bother with the multimeter with those.

Post Reply

Return to “Workshop”