Close

PS2 Keyboard Input Now Working On The Altair

A project log for Project Seven

Bringing deep learning to platforms such as the Raspberry Pi, Parallax P2, or maybe an Altair 8800 for general robotics and other things.

glgormanglgorman 04/21/2023 at 21:470 Comments

Here it is!

The MITS 88-2SIO dual serial port card has the ability to be configured, via a rabbit warren of jumper wires, for either TTL, RS-232, or Teletype mode.  Likewise, the baud rate is also selected via jumpers, with separate jumpers for the two 6850 UARTs.  So I configured one of the two ports for TTL, but without RTS, CTS, or DCD handshaking; which frees up about six now unused inverters on some 74LS04 ICS, which have the VERY convenient jumper positions made completely easy to use.  After reading the 6850 UART datasheet, it appears that the wants to capture data on the rising edge of the clock, which is the opposite of what I saw on the oscilloscope when probing the output of the PS2 keyboard directly, i.e., the keyboard outputs the clock line held high via a 2.2K internal resistor, which then goes low for eleven pulses when the keyboard is sending data.  So I think maybe I need to invert it for proper operation.?  Well, that turns out to be quite simple, by routing a pin from the Molex connector to an unused gate on one of the 740LS4s, which therefore provides some anti-static buffering, as well as the inverted clock signal,  that I THINK that I need.

So I put together a simple 8080 machine language program to read from the keyboard and to write to the data LEDs.

ORG 0000:

       LDA  0x1f   ; reset the UART
       OUT  0x0a   ; configure for 8-bits + odd parity + 1 stop bit
       LDA  0x1c   ; at 1X clock rate
       OUT  0x0a
LOOP:  IN   0x0a   ; get port status byte
       AND  0x01   ; mmask for Rx status bit
       JZ  LOOP
       IN   0x0b   ; read the data
       OUT  0xff   ; display on front panel LEDs
       JMP LOOP
       NOP
       NOP

O.K. Then.  What now?  Obviously need to come up with some code to do the translation of PC scan codes to ASCII, but there is a bunch of other stuff that comes to mind.  Like working on the interrupt-driven versions of the I/O routines, and testing the ability of the Altair to also send and receive MIDI data, using the interface module that I am also working on, even though that module will eventually be equipped with something like an Arduino Every, as I have discussed previously.

Discussions