|
The Memotech MTX Series |
|
MEMOTECH
The "Speculator"
Overview
The "Speculator" was created for Memotech by Tony Brewer. It was designed
to allow an MTX512 or RS128 to run a number of ZX Spectrum
games, since the Speculator emulated a ZX Spectrum with 48K of
RAM, it could not run on an unexpanded MTX500. It consisted of a
small hardware module built into a ROMPAK cartridge which
plugged into the expansion edge connector on the left hand side
of the MTX and a companion software tape.
Although using different graphics processors, both the ZX
Spectrum and the MTX computers used a
Z80 processor and
had the same screen resolution (256x192), the MTX running
slightly faster than the Spectrum - 4MHz compared with 3.5MHz.
To avoid any issues with copyright, the Speculator does not use
any code from the ZX Spectrum ROM - apart from a very few ROM
calls, most games bypassed the ROM anyway.
The Speculator Tape 1 Instruction leaflet is on the
Manuals page.
Technical Details - extracted from
a number of articles on my page of
MTX
Reviews.
"The user first loaded the Speculator tape which loaded the
ZX Spectrum emulation and presented a menu of supported Spectrum
games. The banked-memory of the MTX moved from its normal
position (PAGE1, 8000H-BFFFH) to PAGE0, 0000H-3FFFH, giving PAGE
0 a complete range of RAM from 0 to 64K. The Spectrum character
shape-table is created at 3D00H-3FFFH, while 4000H-5CB5H is put
aside for the "Spectrum screen" and "Spectrum system variables".
This leaves 5CB6H-FFFFH free to accept the Spectrum game code.
The supervisory code lies somewhere in the 2000H-5CFFH area.
One major purpose written routine is the "Load Spectrum-format
tape" (there is also a "Save Spectrum-format tape" to cater for
games where you can save a partly saved version), but the main
effort of coding is routine which takes the display from 4000H
(Spectrum display file) and 5800H (Spectrum colour attributes)
and passes it to the 16K Video RAM used by the Memotech Video
Processing chip (the VDP). The task is performed using
interrupts, but even so, it takes two passes to move the
relatively small Spectrum video RAM (size 1B00H) to the larger
VDP RAM (size 4000H) ; this does not reduce the speed of the
game, but does cause the graphics to move less smoothly; a point
which is noticeable when large
sprites are moved. For all other games, there is no visual
difference between the Spectrum version and the Memotech
version.
When a games program uses a call to the Spectrum ROM,
something has to be at the "ROM address" to intercept the flow
of the program. An example is the CLS routine, widely used by
games programmers as a quick way of clearing out the area of RAM
from 4000H-5B00H. It's at 0D6BH, so the MTX has screen clearing
code at 0D6BH too. Similar trapping has to be done for the often
used Z80 RST addresses (print-to-screen at 0010H is often used),
and for the interrupt RST at 0038H.
BEEPER (03B5H) is rather more difficult. Sound is not used on
the Memotech version of Spectrum games, since the effect does
not warrant the high cost implication of implementing it.
Nevertheless, the call is intercepted and the game code thinks
that the beeper port exists: this is necessary to avoid program
crashes.
Fooling the code is the main task of the hardware, which,
although in a ROM-pack, doesn't contain a ROM. What it does
contain is 5 chips, two of which are custom-blown PALs. The
PAL (Programmable Array Logic) is the cheap younger brother
of the
ULA, and is used extensively in decoding circuits, and (as a
side benefit) to prevent inquisitive constructors working out
how a circuit operates. The other three chips are standard
devices. The other duty of the hardware is to pretend to be a
Spectrum keyboard: with some help from MTX code and interrupts,
the key presses (on the Memotech keyboard) are translated into
Spectrum style key-presses and joystick movements."1
Graphics Details
"The Einstein and the Memotech both use a Texas Instruments
video chip, rather than the Spectrum's all-purpose custom ULA.
The TI chip can produce the same 256 by 192 dot resolution as
the Spectrum, but there the resemblance ends. It is not memory
mapped, so the processor has to talk to it character by
character through "ports". This makes it much slower than
the Spectrum, but Tony has found an ingenious quirk which allows
him to update any sixth of the screen 50 times a second,
funnelling information from the Spectrum display area, where the
games put it, through the ports.
Tony's electronics generate appropriate timing signals, and a
small change to the loader lets him determine which parts of the
display are updated most often. For instance, most of the action
on Starion takes place in the top two thirds of the
display. For Starion, Tony's code refreshes the bottom
third less often, so that the rest of the display is almost as
fast as the Spectrum's.
Colour is tricky too, because the TI display chips needs
eight times as much information as the Spectrum does. Tony's
code checks the whole attribute grid and only transmits colour
information for parts that change. This seems to work very well
in practice. The Spectrum's eight colours are mapped onto the
closest shades in the TI's palette of 16. The hardware detects
attempts to change the Spectrum's border colour and re-directs
the information, but it can only do this 50 times a second when
the game is running. In general that's quite fast enough, but it
rules out the "colour bar" effects that spice up a few Spectrum
games.
The graphics emulation works well enough, although there is a
certain amount of extra flicker, and the gadget does nothing to
cure the Spectrum's attribute problems. I noticed that Daley
Thompson's Decathlon ran a little slowly and unsteadily at
times, but was still playable.
The same faults exist on the Spectrum version, but they are
not as obvious: as Tony Brewer says, "The Emulators accentuate
things that aren't done very well on the Spectrum".
Apparently, the biggest problem setting up the Speculator to
support a game is getting the code into Memory; most games
nowadays use trick loaders which rely on the exact Spectrum
hardware, so a special Memotech or Einstein loader must be
written by Tony Brewer. Getting the actual game to run is a
cinch by comparison - most of the time. It just involves setting
the speed at which the different areas of the screen are
refreshed."2
Speculator Hardware Details
As noted in the "Electronics and Computing" article, the
Speculator contained two custom blown PALs. The internal photo
of the Speculator hardware shows them identified as "SPAL1D" and
"SPAL2D", Tony advises that these were the fourth versions of
the PALs (A, B and C being earlier attempts at the PAL code) -
PALs are "one-time programmable", so any modification required
"blowing" of a new chip.
The large chip is a 2K memory chip, an Hitachi HM6116P-4
200ns
SRAM, Tony advises that only a tiny portion of this RAM was
actually used, around 1%.
The other chips are standard
7400 series logic chips, a 74LS123 (dual monostable multivibrator)
and a 74LS74 (dual flip-flop).
Although the original design drawings are no longer
available, Tony has been able to reverse engineer the board and
with his help, I have drawn up a Speculator PCB schematic, it is
available on the
Manuals page.
Speculator Source Code
In 2023, Tony released the source code for the MTX and
Einstein versions of Speculator into the Public Domain and
posted them on this thread on the
Memotech Forum. Tony retains the copyright to these files,
but as he comments on the Forum "anyone can do anything with
it".
(Comments
from Tony's posts on Memorum) |
Memotech |
Einstein |
[Tony]
used Microsoft M80 and L80 to assemble and link the
source files, the same as was done at Memotech. Einstein
version has two .sub files to make assembling & linking
easier and these can be used to create MTX versions
The first thing someone could try is assembling &
linking the MTX version. See SPEC1.TXT for linking
order. Note that the M prefix is omitted from actual
source files in zip file. Original files were named
MSPx.MAC but I changed to SPx.MAC for the Einstein. The
SPL80.SUB shown below is not 100% right; SPL should
start 2400H after SPK1. Maybe needs /P:2500, before
SPL/M. It's a long time since I used L80 and much much
longer since I created an MTX program file. |
|
|
ZX Spectrum Games supported by the Memotech
Speculator - Game Tape 1
Speculator for Tatung
Einstein
A version of Speculator was made for the
Tatung Einstein and sold by SyntaxSoft. The Speculator
loader software for the Einstein version was supplied on
disk and this version also allowed the original Spectrum
game to be saved onto 3" disk.
The Einstein version appears to have been
more successful than the Memotech version - three Einstein
loader disks were available, allowing many more Spectrum
games to be loaded.4
|
|
|
The Einstein version was built
into a small plastic box that connected to the
expansion interface on the rear of the computer,
the "PIPE" interface.
As the PCB photo shows, the Einstein version was
a little more complex than the MTX version, for
example the Einstein version used its own
internal own speaker, rather than the
computer's, to generate the sounds from the
Spectrum games. Since the Einstein computer was
supplied with one or two 3" floppy disk drives,
rather than a tape recorder interface, the
Einstein version of Speculator had 3.5mm jacks
for loading/saving Spectrum programs from tape.
Mike Smallman wrote a book for The Einstein
Speculator, this book gives a detailed
description of how additional Spectrum games can
be loaded into Speculator. Click on the book
cover to download the book in PDF format.4 |
1. "Electronics &
Computing Monthly", September 1985, "A Memotech
Metamorphosis", by Richard Sargent
2. "Crash",
Christmas Special, 1986, "Is it a Spectrum?....No, it's a
Speculator", by
Simon Goodwin
3. E-mail
discussion with Tony Brewer, February 2013
|