Computers Overview
Commodore PET
Sinclair ZX80
Sinclair ZX81
BBC Micro
Sinclair Spectrum
Memotech MTX
        Program Code

            Component Data

            Data Books
            Data Sheets
            Design Guides

            MTX Specific

            Tech Notes
    User Groups
    Video Wall
Memotech CP/M
Atari ST
Commodore Amiga
DEC 3000 AXP
Raspberry Pi



The Memotech MTX Series

Memotech MTX Keyboard & Joysticks


MTX Keyboard Assembly

The Memotech MTX computer board is installed in a brushed aluminium case, with a full travel, 79 key, keyboard mounted in the upper half of the shell. The keyboard includes a separate numeric keypad, an 8 function keypad and the two blank keys, either side of the spacebar, which, when pressed simultaneously, reset the computer.

The two halves of the case are secured by three, M3 x 8mm hex head screws through each end plate, these can be removed using a 2mm Allen key. 

The front edges of the two halves of the case have interlocking profiles that allow the keyboard to be swung upwards, taking care not to stress the interconnecting ribbon cable. After the cable has been disconnected from the computer board, the keyboard is released from the base by sliding it completely to the left or right.

The system board is fixed to the bottom of the case and the keyboard PCB is fixed to a steel plate mounted on the underside of the top of the case.

The grey ribbon cable connects the keyboard PCB to the main board by plugging into the "J1" connector above the edge connector on the left hand side of the main board.

Close up of the underside of the top half, showing the keyboard PCB. The keyboard is made up of passive components only - just SPST key-switches.

The metal plate for the keyboard is secured to the top half of the case by 5, M3 bolts which are located in the groves that can be seen at either side of the keyboard PCB.

Photo courtesy of Dick Janssen

The keyboard removed from the case and the keycaps removed to show the steel mounting plate. Having the keys mounted this way, rather than on just the PCB alone, gives the keyboard extra rigidity.

Photo courtesy of Dick Janssen

This is the top side of the keyboard PCB, separated from the steel mounting plate, in order to remove the key-switches, they must be individually de-soldered from the PCB. Note : individual key-switches can be removed without disassembling the keyboard - see my keyboard repair page for details.

Photo courtesy of Dick Janssen

The keyboard connects to the computer board via "J1", a 20-way SIL header located in the upper left of the board.

A similar SIL header is fitted to the edge of the keyboard PC, and the two are connected by a ribbon cable as shown below.

As you can see in the photo, the ribbon cable is somewhat unusual - the ribbon is not supported by the connectors, instead, each core is stripped out from the ribbon 5-10mm from the connector.

There is no strain relief on the cable and as a result, the the most common "keyboard" faults are associated with breakage of one or more of the conductors. This is particularly likely if the keyboard has been subjected to a number of disconnections and connections.

Memotech sourced the key-switches and custom keycaps directly from Futaba in Japan. The switches, single sided PCB and powder coated punched steel panel plate were assembled in the Memotech factory.1

I have done a couple of keyboard repairs but wasn't able to get very good photos of the key switches, these excellent close-ups are from the Deskthority wiki. The switches are the Futaba low-profile linear type, the Deskthority wiki has a dedicated page for these switches.

With the switch split, the component parts can be seen :
   Top half of the switch the plastic plunger (white)
             the leaf contact (silver/gold coloured)
   Bottom half of the switch showing the spring


Keyboard Sensing

The MTX keyboard is essentially a 10 x 8 matrix of key-switches and has no active electronic components. The key-switches are each connected to one of eight drive lines and one of 10 sense lines which are driven and read by logic on the MTX computer board.


Note: the keyboard drive and sense lines are inverted, i.e. active low


Image courtesy of Ramon Merchan Sanzano based on fault finding his keyboard


As described in the Technical Appendix of the Operator's Manual, the keyboard uses the following I/O ports :-




Output Port 5

This latched port provides the 8 drive lines to the 8 x 10 keyboard matrix

Input Port 5

This port is used to read the least significant 8 bits from the 10 sense lines of the keyboard matrix

Input Port 6

This port is used to read the most significant 2 bits from the 10 sense lines of the keyboard matrix

When the key is active, the value of the bit sensed is low (0)

The pin-out of the keyboard connector, "J1" is as shown :


Pins 11 to 18 are the drive lines, set by Output port 5

Pins 1 to 10 are the sense lines, read by Input Ports 5 (b0-b7) and 6 (b0 & b1)


Pins 19 and 20 are from the reset keys - these are not scanned by the logic

The two Reset keys are wired in series between J1/19 and J1/20 and used in the hardware reset logic.

A 74LS244 Octal Buffer/Line Driver (board location 2E) is used to buffer the data bus lines going to the majority of the physical output ports, including the keyboard drive lines from Output port 5.

 Out Port



Page Port










User I/O

A 74LS273 Octal "D" type flip-flop (3A) latches the data line values onto the 8 drive lines, DR0 to DR7 when "clocked" by a write to Output Port 5.

In this context, each flip-flop is effectively a memory cell, storing the value of the bit until the next time that the gate is "clocked" by an OUT(5) command.

A 74LS244 Octal Buffer/Line Driver (board location 2A) passes the sense data values from the 8 least significant bits of the 10 read lines back onto the data-bus under the control of Input Port 5.
Similarly, the 74LS244 Octal Buffer/Line Driver (board location 1D) passes the sense data values from the 2 most significant bits of the 10 read lines back onto the data-bus under the control of Input Port 6.

(Bits 2 and 3 of Port 6 are used to determine the position of the Country Code switch, "SWA")

In order to read the status of a particular key, the appropriate drive line must be set low while the other drive lines are set high. This is achieved by zeroing the appropriate bit and setting all others high in the data word to be sent to Output Port 5.

This keyboard map shows how the key-switches are connected to the drive and sense lines.

Diagram reproduced from "The Source", by Keith Hook, 1987

e.g., to read the <BRK> key status, load the drive line value into the "A" register   LD A, #FE
Send the value to Output Port 5   OUT (5), A
The status of the key is read from Input Port 6 into the "A" register   IN (A), 6
Check if bit 0 (LSB) of the "A" register is "0", if so, the "Z" Flag is set   BIT 0, A
Jump to some code if the "Z" Flag is set   JR Z, (Break_Key_Action)



The MTX uses Atari type joysticks, these are very simple controllers, made up of five switches used to generate four directional changes and one button, typically used for "Fire".

The MTX joystick ports just connect the 5 switches from the joystick in parallel to key switches on the keyboard, as far as the MTX ROM is concerned, the joystick actions just appear to be keys pressed on the keyboard. The joystick switches are driven and read by the same logic as the keyboard described above.

For example, J4 is the Left hand joystick port of the MTX and is connected to the same drive and sense lines as the keyboard.

Focusing on the detail of the drive and sense lines used by the left hand joystick port, it can be seen how the keys on the numeric keypad correspond to the "key presses" from the joystick, e.g., many MTX games use the numeric keypad number "2", the "Home" key, as the "Fire" key.

The MTX reads this key using the DR5 drive and KB7 sense lines, as shown on the port J4 image, DR5 is connected to pin 6 of the joystick (the "Fire" button) and KB7, the common sense line is connected to the joystick ground.

(J5 corresponds to keys "B", "M", "Z", "C" and <space> )


Using a ROM Call for Keyboard Sensing (CALL #79)

This technique above is very efficient for detecting a specific key press but would require a lot of user code to read all of the scanned keys on the keyboard with the drive and sense line values having to be specified in each case.

Fortunately, there is an in-built ROM call which makes keyboard scanning much simpler, ROM CALL #79

This routine does not affect any registers except for the A register which returns with the ASCII value of the key pressed. If no key has been pressed, the Zero flag will be set and will be reset if a key has been pressed.

Using an example from "The Source" to test for the "A" key having been pressed :-

Disable interrupts to make sure BASIC doesn't interfere

Since BASIC uses this routine to test for the <BRK> key, interrupts must be disabled so that the program doesn't break on detecting the <BRK>key.

Call the keyscan ROM routine   START:   CALL #79
If no key has been pressed (Zero flag set), jump back to the start     JR Z, START
Compare the A register with ASCII "A"     CP "A"
A key has been pressed but was not "A" (Zero flag clear), jump back to the start     JR NZ, START

References :

1. e-mail from Geoff Boyd, 18/01/2016



mailto: Webmaster

 Terms & Conditions