Close

Remapping the Keyboard

A project log for A DIY Keyboard

Here is a real DIY Keyboard - No microprocessors here!

agpcooperagp.cooper 08/17/2016 at 05:050 Comments

Remapping the Keyboard

Given most of the work is done with the "basic shift logic" how hard could it be?

The basic shift logic:

Well much harder than expected, here is the schematic:

Now many will recognise this as a PLA (Programmable Logic Array).

Designing a PLA

The first step is to generate a truth table. The problem is this is not that simple. It gets pretty confusing with 128 cases to consider.

Really the first step is to write a program to generate the truth table. So here is a simple C code program that creates the truth table:

#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>

int main(void) {

  FILE *F1;
  int a,x;
  int a0,a1,a2,a3,a4,a5,a6;
  int x0,x1,x2,x3,x4,x5,x6;

  F1=fopen("KeyBoardMapping.txt","w");
  fprintf(F1,"a0,a1,a2,a3,a4,a5,shift,,x0,x1,x2,x3,x4,x5,x6\n");
  for (a=0;a<127;a++) {
    // Shift mapping
    x=a;
    if ((a>=32)&&(a<=63)) x=a+64;  // lower case "'" to "Del"
    if ((a>=16)&&(a<=31)) x=a+16;  // Keys "0" to "?"
    if ((a>=0)&&(a<=15)) x=a;      // Ctrl keys as is
    if ((a>=96)&&(a<=127)) x=a-32; // Shift: Upper case "@" to "_"
    if ((a>=80)&&(a<=95)) x=a-48;  // Keys "Space" to "/"
    if ((a>=0)&&(a<=15)) x=a-64;   // Shift: Ctrl keys as is
    // Special key mapping
    if (x==95) x=127; // "_" is now "Del"
    if (x==32) x=95;  // "Shift 0" is now "_"
    if (x==1) x=32;   // key 0 is "Space"
    if (x==2) x=24;   // "Can" or Break/^C
    if (x==3) x=27;   // "Esc"
    a0=a&0x01;
    a1=(a>>1)&0x01;
    a2=(a>>2)&0x01;
    a3=(a>>3)&0x01;
    a4=(a>>4)&0x01;
    a5=(a>>5)&0x01;
    a6=(a>>6)&0x01;
    x0=x&0x01;
    x1=(x>>1)&0x01;
    x2=(x>>2)&0x01;
    x3=(x>>3)&0x01;
    x4=(x>>4)&0x01;
    x5=(x>>5)&0x01;
    x6=(x>>6)&0x01;
    fprintf(F1,"%d,%d,%d,%d,%d,%d,%d,,%d,%d,%d,%d,%d,%d,%d\n",a0,a1,a2,a3,a4,a5,a6,x0,x1,x2,x3,x4,x5,x6);
  }
  fclose(F1);
  return(0);
}

Once we have a truth table we determine the Prime Indicants (PIs). I use Logic Friday:

LogicFriday is a front end for Espresso by Richard Rudell (rudell@ic.Berkeley.EDU).

Here are the PIs table used to design the PLA:

So I was not wrong in saying that remapping a few keys is expensive.

(Now I did try adding the PLA after the "basic shift logic" but the result were just as bad.)

Interface

The keyboard interface pretty basic, a byte with the D7 (Key Pressed) used for polling or an interrupt.

Limitations

Note the missing Ctrl and Alt keys. So it will be up the the program to set how extended key codes are entered.

AlanX

Discussions