|
The Memotech MTX Series |
|
MTX PC Keyboard Interface
Board Design
Martin does
his prototype board layouts using Excel, this helps him
place the components on a matrix representing his
prototype board, but they are not schematic diagrams in
the usual sense.
Note: the layout is drawn as reference to be used for
soldering, so the view is from the underside of the
board, i.e., the components are a mirror image of the
normal footprints.
This is the layout for
Martin's prototype board, the major components being the
Propeller, associated serial EPROM and two 74x7
non-inverting buffers. |
|
The
components placed and soldered onto a small prototype
board that Martin happened to have available.
The board sits conveniently on top of the MTX keyboard
connector and would allow the MTX keyboard shell to be
closed if required but does not have the facility to
connect the MTX keyboard at the same time as the PS/2
interface board. |
|
Martin's
board fitted to the MTX and attached to a PC PS/2
keyboard I/O slot adapter panel.
You can also see
the flying lead connected to the MTX User Port socket
from where Martin has picked up 5VDC for the board. |
|
I took
Martin's component layout and converted it to a KiCad
schematic as shown.
As noted above, plugging
into the MTX keyboard connector prevents the MTX keyboard from being connected at the same time.
|
|
When the Propeller
keyboard interface is incorporated into MTXPlus+ it will
connect in parallel with the existing MTX matrix
keyboard interface, allowing a PS/2 keyboard and an
original MTX keyboard to be connected at the same time.
I decided that it would be nice to have a similar setup
on an original MTX so that a PS/2 keyboard could be
connected as and when required, without needing to open
up the computer.
The easiest method of
connecting a PS/2 keyboard would be to have a PS/2
connector on a trailing lead exiting the rear of the
case, but I also though that it would be nice to be able
to include a PS/2 connector on the MTX itself.
There are a couple of options to achieve this, either by
drilling an additional hole in the rear plastic I/O port
panel, or by drilling one of the end plates. I was not
keen on the first method, but was happier drilling one
of the endplates as they would be much easier to replace
if the keyboard connector was removed in the future. The
left hand side end plate is not a good choice as it
would be obstructed by any MTX expansion hardware; the
right hand side end plate is a better option.
I
also considered allowing the PS/2 keyboard PCB to to
mounted to the right of the computer board(s) such that
the PS/2 connector could be mounted on the PCB, rather
than needing a flying lead. If the PCB was mounted at
the right hand side of the case, then IDC cables would
be needed between the existing keyboard, computer
keyboard connector and the new PCB.
|
To cater
for these options, I added additional headers to my
design to allow the MTX keyboard to be connected
simultaneously with the PS/2 keyboard and/or to run an
IDC cable from the right hand side of the case to
the MTX keyboard connector. |
|
These
options meant that my prototype design was quite a bit
larger than Martin's to allow space for the additional
pin headers to be located in the deepest part of the
case (at the rear). Whilst this design gives the most
flexibility, it does mean that the board becomes quite
large and exceeds the target price point for the PCB
manufacturer that I use (<100mm). |
|
My
prototype board - with a couple of changes from the 3D
model for ease of construction.
I found that the
Propeller and EPROM needed to be a little further
towards the top of the board than Martin's prototype to
allow adequate clearance when the MTX keyboard was
fitted. |
|
My
prototype board fitted to the MTX keyboard connector.
You can see the my PC PS/2 keyboard I/O slot adapter
panel attached and below the PS/2 cable, the 20 pin DIP
header that I have attached to the User Port socket. (Bad
Design ! see below)
Although the MTX keyboard connector pin 20 provides
0v, in addition to the 5v connection on pin 20 of
the User port, I have also picked up 0v from pin 16,
this provides a little more strain relief on the jumper
wire, rather than just having it connected to the 5v
pin. |
|
After a little
debugging and editing of the code, Bill's Propeller code
worked very well, with the same limitations on the
mapping between the PC keyboard and the MTX ROM that
exist in MEMU
on which the Propeller code is based.
These
issues are described in the
keyboard section on the
MEMU
emulation page of Andy's site and are associated
with issues related to shifted and unshifted keys.
Quoting from Andy's page, "... to type certain MTX
characters, you must type different things on the host
PC keyboard. This remapping is done to ensure an
unshifted host PC keypress corresponds to an unshifted
MTX keypress and a shifted host PC keypress
corresponds to a shifted MTX keypress." and "the whole
host PC keypad maps to the whole MTX keypad, based on
key position, not what is written on the keys"
"The effect of the shift-state problem :- "
Use host keypress |
To produce MTX
keystroke |
^ |
= |
= |
^ |
' |
@ |
@ |
' |
# |
: |
<shift> ` |
` |
This behavior is not ideal, but is considered to be
the most practical way of using a PC keyboard on the MTX
without making changes to the MTX ROM. The
difference between the effect of a keypress and what is
written on the keys is most noticeable with the PC
numeric keypad - see the diagram at the top of the page
for further detail.
However, Martin
has developed patches for the MTX ROM to map the PC
keyboard characters to the desired MTX keystroke when
the keyboard "Scroll Lock" mode is active. An updated
ROM image is available below.
In standard mode the system works as now with key
mismatches. In "Scroll Lock" mode the main keyboard
keycaps all match except "back quote". (The keypad in
shift mode is still offset because the cursor keys are
aligned.)
For MTX users with CP/M or SDX disk
systems, Bill has written loadable
drivers that enable the "Scroll Lock" mapping mode
to be used without requiring changes to the MTX ROM.
For CP/M this works by patching the CP/M BIOS in
high memory. For SDX BASIC, a small routine is loaded
between the sound buffers and system variables, which
hooks into an SDX call vector to provide the additional
keyboard decoding.
5V Power Connection
Although the User Port was used to provide the 5VDC
to the boards for testing, we did not pay enough
attention to the restriction included in the MTX
Operator's Manual - the User Port is only specified as
being able to supply 20mA - the propeller and more
significantly, the PC keyboard requires considerably
more than that. Inspection of the MTX computer board
shows that the 5V supply to the User Port is on a very
thin PCB trace - I suspect that it was this that set the
maximum current available from the User Port. It would
be a relatively easy task to solder an additional wire
from a 5V connection to the 20 way socket, but that
would prevent the PCB from being "plug & play". Instead,
we will likely use a test clip to pick up 5VDC from a
convenient point on the MTX computer board.
(Taking power from the MTX PCB may be problematic if the
computer is fully loaded with internal and external
expansion boards. If the MTX 5V supply is close to
capacity, then an external 5V supply would be needed.) |
Inclusion of USB
Keyboard Compatibility
The prototypes that Martin and I had built operated as intended, however, I had not appreciated that
PS/2 keyboards were as obsolete as they actually are and
the difficulties that might bring when implementing this
project on a wider basis, should it be of interest to
others. Whilst legacy PS/2 keyboards are still
available, it appears that the PS/2 adapter plates that
Marin and I had used are pretty much impossible to find.
During my testing, I used a legacy PS/2 compatible
keyboard with 6-pin mini-DIN connector. Bill and Martin
had used USB keyboards with "dumb" USB to PS/2 adapters
which worked perfectly. When I tried to use one of my
USB keyboards in the same way, the system failed to
recognise the keyboard and respond to key presses. As it
turns out, older USB keyboards can detect when a PS/2
interface is being used and use the PS/2 protocol so a
passive adapter works fine. Newer USB keyboards do not
all support the PS/2 protocol and an active adapter
would be needed to do protocol conversion.
Bill
had predicted that this may be an issue and had already
found USB interface code for the propeller that was
"worth thinking about". It was obvious that my original
intention to have a PS/2 compatible interface was short
sighted and a USB keyboard interface is pretty much
essential. With that in mind, I asked Bill if he could look
at developing the code for a USB interface too.
|
Based on
Bill's initial research - a proposed design for a dual
function PCB.
It seems that the USB interface
needed the USB signal lines connected to low address pins
on the Propeller (A0-A7) and the USB and PS/2 interfaces
use different resistor values and voltage levels. This
design allowed the pull-ups / downs to be selected by
jumpers. |
|
We hoped
that it may have been
possible to find a pair of resistor values that can work
for PS/2 or USB keyboards (to be determined by testing),
in which case, it would be possible to simplify the
design as shown here, where only a single jumper is
needed to select the keyboard type.
The status of
the single jumper could also be used to identify the
type of keyboard (PS/2 or USB) so that the Propeller
could choose the appropriate code to execute. |
|
Testing on
the prototypes suggested that the PS/2 resistor values
would also work for USB keyboards, so a single set of
resistors has been configured in the "final" schematic
used to generate a prototype PCB.
As of March
2018, the prototype boards had been proven to work in
PS/2 or USB mode, the dual mode code had not been tested
but as the hardware appeared to work, I committed a trial
run of PCBs to manufacturing. |
|
The KiCad
3D model of the PCB. The components are pushed as far up
the PCB as possible and the board size reduced to 100mm
wide to minimise the PCB production cost. |
|
The first
run of the PCB has identified a couple of minor issues .
. . 1. The DIP-14 sockets are too close together,
which makes installing the buffers in sockets a tight,
but workable, fit. (The tolerances in the sockets allows
the chips to be installed at the opposite ends of the
sockets.) 2. The top DIP-14 socket is too close to
the MTX keyboard pass-through connector, but bending the
pins at about 30 degrees allows the connector to be
plugged in and the keyboards operated in parallel. |
|
Assembled
PCB, fitted to MTX.
The MTX keyboard has been
disconnected for the photo, but fits without problem
with the pins on the pass-through connector bent
slightly as shown.
(On this board, the activity
LED is orientated so that I could see it more easily for
testing, normally, it will be mounted on the surface of
the PCB.) |
|
A typical
PC Motherboard USB header header is shown opposite. It
is designed to support two USB connections; there are a
number of varieties of mating cables which support 1
(4/5 pin cables) or 2 (9 pin cable) USB devices. Most of
these cables should be suitable for use with the MTX
keyboard PCB USB header when connected appropriately.
NB : The keyboard PCB USB pin
header is not keyed, Pin 1 is the left hand pin, closest
to the MTX keyboard pass through connector. |
|
Single USB
adapter cables are available in 4 and 5 pin varieties.
Either may be used with pin 1 (5V) connected to pin 1 of
the header. If a 5 pin cable is used, pin 5 (usually a
slightly thicker core used for the cable screen) will be
unconnected and overhang the keyboard pin header. |
|
Future Development
MTX Mouse interface ? (Cancelled)
Martin has been working on an additional hardware interface
to support the use of a PC PS/2 mouse with the MTX. To avoid the
need for new driver software or modifications to applications
software and games, Martin's interface is designed to mimic the
cursor keys in the same way as the Memtoech joystick interfaces
worked. Martin's design uses an Atmel ATMega328
microcontroller and supporting GAL and also connects in parallel
with the existing MTX keyboard (and PC keyboard interface if
fitted).
Whilst Martin's mouse interface is a nice technical solution,
I am not sure whether there is enough demand to justify making
it a "product". However, it **may** be possible to add mouse
functionality to the keyboard interface without having to make
significant hardware modifications. Adding a PS/2 mouse appears
to be relatively straightforward and likely to fit in the
available free space of the Propeller. Adding a USB mouse is
more complex and further work is required to determine whether
it is possible.
In either case, it will not be possible to
upgrade a keyboard only PCB to include a PS/2 and/or USB mouse.
Update
Based on
Martin's results when testing his mouse interface with
NewWord, it is apparent that using the ROM keyboard scanning
functions to update the mouse position is too slow to be
practical - certainly with CP/M software. Given that the
limitation appears to be the keyboard scanning speed, using the
Propeller to provide the interface to the mouse would also have
the same issues as the AVR interface.
|