Here we describe the various file formats that MTX games and other programs are available in :-
.wav, .mp3)
.mtx)
.RUN)
.BAS)
.BAS)
.COM)
.BAF)
.tap)
.sna)
MEMU does not support loading programs from cassette tape,
or from .wav or .mp3 files.
There is no plan to change this.
A very large part of the Memotech software library already exists in
.mtx file form (over 100 files).
We can thank people like Jim Wills for sampling tapes to .wav
and Paul Daniels for converting these to .mtx files.
Tape files
.mtx files are disk files containing the same bytes,
in the same order, as would be found on an MTX cassette tape.
Tape files contain :-
0xff byte
tape_name, padded with spaces
system_variables_base (often 0xf8f2)
0xfb4b-system_variables_base bytes of system variables
(often 0x0259 bytes)
0x4000 onwards...
Files following these rules can be loaded from MEMU, using commands like this :-
$ memu -vid-win -snd-portaudio UNIVERSE.mtx
Followed by typing LOAD "" in MTX BASIC.
Most autostart, but you'll need to RUN some of them.
Some games have loaders.
Usually you'd get MEMU to run the game directly, but if you run the loader,
you'll need to ensure the filename of the game matches the
tape_name stored within it.
Note that I have encountered one .mtx file that was actually
a RUN file, and I have encountered a number of .mtx
files that were actually SDX Basic files.
In the MEMU distribution, such files have been renamed appropriately.
MEMU includes a selection of tape files in the tapes
sub-directory.
RUN files
If you had an MTX with an SDX disc (with the normal SDX ROM),
you might have games supplied as .RUN files.
RUN files contain :-
code_base
code_length
code_length bytes of machine code, to be loaded at
code_base in memory, and executed by jumping there
These would be loaded from MTX BASIC using USER RUN "FILE.RUN".
In MEMU, remember to use the -sdx command line option
to install SDX support before trying to use USER commands.
Another way to run .RUN files is using commands similar to :-
$ memu -vid-win -snd-portaudio TOADO.RUN
RUN.COM is a CP/M program which can be used to run some
.RUN files, without having to switch into MTX BASIC, and use the
SDX ROM to USER RUN "FILE.RUN" them.
This program puts the file content directly into memory, switches into
the right memory mode, and jumps to the start of the program.
This means that MTX BASIC has never been running, and has not set up any
of its system variables.
As a result, some .RUN files don't run properly this way.
eg: Comic Bakery and Pacman.
If a program is invoked from the SDX BASIC ROM USER RUN
command, the IOBYTE will reference the SDX BASIC ROM (eg: ROM 5 or ROM 3).
If the file changes the IOBYTE, it must restore it before returning to the
caller.
In the case of referring to the .RUN file on the MEMU command
line, the IOBYTE will not reference any particular ROM, and the program
should not return to the caller.
MEMU includes a selection of RUN files in the games
sub-directory.
SDX Basic files
If you had an MTX with an SDX disc (with the normal SDX ROM)
you might have SDX Basic programs as .BAS files.
SDX Basic files contain :-
0xf2f8)
0x0259)
0x4000 onwards...
These would be loaded and saved using USER LOAD and
USER SAVE commands.
In MEMU, remember to use the -sdx command line option
to install SDX support before trying to use USER commands.
The MTXL.COM section below shows another way to load some SDX Basic files even if you don't have real or emulated SDX hardware.
MEMU includes a selection of SDX Basic files in the basic
sub-directory.
FDX Basic files
If you had a MTX with FDX, you might have had FDX Basic programs
as .BAS files.
FDX Basic programs are different to SDX Basic programs. Attempting to load an FDX program from SDX Basic appears to be unreliable.
FDX Basic is started by running the FDXB.COM program
from CP/M.
Two version of FDXB.COM are known to exist.
The earlier version was shipped with the FDX and includes FDX FDC drivers
and only works on an FDX.
The later version includes SDX FDC drivers, and therefore only works on
an SDX.
The latter version should probably have been called SDXB.COM
to avoid confusion, and so I name my copy that way.
FDX Basic files will have been loaded and saved using
using DISC LOAD and DISC SAVE commands.
It is recommended that you DISC DIR "" before using
DISC SAVE, to avoid a known bug which would otherwise result
in corrupted files.
To use MEMUs CP/M emulation, you must pass the -fdxb
command line flag.
Alternatively use the Full CP/M approach described on the
Usage page.
CP/M programs
CP/M programs are delivered as .COM files.
Sometimes they are entirely self-contained in one file,
and sometimes they load other related files.
A .COM file is the raw program code and data.
It is loaded to address 0x0100 in memory,
and execution starts from there.
MEMU includes a selection of CP/M files in the cpm
sub-directory, and games loadable from CP/M in the games
sub-directory.
MTXL.COM
MTXL.COM appears to be a bit of a hack.
It is a CP/M program which switches to MTX Basic
(like MTX.COM does),
but it can also load code from a file into memory, starting at address 0x4000.
It doesn't seem to properly set up variables or system variables,
so only certain programs survive the process intact.
Also, programs that are supposed to autorun, often don't.
If we have tape file AGROVATA.mtx,
and given that it is just a single basic program
(ie: no special loader and or raw blocks of data on the tape)
and given it has 0x0259 bytes of system variables,
and that 1+15+2+0x0259=619,
we can do the following :-
$ dd if=AGROVATA.mtx of=AGROVATA.BAF bs=1 skip=619 $ memu -vid-win -snd-portaudio MTXL.COM AGROVATA.BAF
If we have SDX Basic program BANANA.BAS,
and given the first 4 bytes of BANANA.BAS are
0xf2 0xf8 0x59 0x02, and that 2+2+0x0259=605,
we can do the following :-
$ dd if=BANANA.BAS of=BANANA.BAF bs=1 skip=605 $ memu -vid-win -snd-portaudio MTXL.COM BANANA.BAF
Because MTXL.COM is a CP/M program, which loads a file,
the filename must be in the 8.3 naming convention.
Because autorun won't work, you'll probably need to LIST
the program, and then work out whether you can simply RUN
the program, or where to you need to GOTO to.
Although this trick only seems to work on certain programs, it does help reduce the dependency on cassette tapes and SDX hardware.
MEMU includes a selection of .BAF files in the
mtxl sub-directory.
.BAF is an convention I made up to refer to files,
containing Basic programs, from 0x4000 in memory.
I had originally thought this was the format of an FDX Basic program,
but now I'm not so sure.
ZX Spectrum tapes are typically stored in Spectrums save data to tape in short "headers" (with a long lead-in tone)
and longer "blocks" (with shorter lead-in tones).
A Various ZX Spectrum emulators (and MEMU) support the ability to spot when
the Spectrum ROM (or Z or Speculator) code wants to read or write a header or
block, and then read from or append to a Because the file format is so simple, you can do things like combine two
They are described in detail
here.
This format is mentioned here, as under certain conditions a Memotech can
emulate a Spectrum.
Another common tape format is ZX Spectrum snapshots files typically have The 48KB Spectrum variety is comprised of a 27 byte header containing
registers, followed by a copy of the 48KB of RAM.
Various ZX Spectrum emulators (and MEMU) support the ability to snapshot
current state to a file, and then reload it again later.
They are described in detail on the
World of Spectrum
website.
This format is mentioned here, as under certain conditions a Memotech can
emulate a Spectrum.
MEMU will only take snapshots when PC >= 0x4000 and SP >= 0x4002
and restore snapshots taken when the PC >= 0x4000.
As a special case, snapshots with PC = 0x0038 are allowed, primarily because
snapshots taken with the fuse emulator tend to have this.
This is a safety feature to stop snapshotting happening whilst in
Speculator code.
Another common snapshot format is ZX Spectrum tape
.tap files.
.tap file contains zero or more records, where each
record is a header or block wrapped in an envelope.
Each record comprises :-
.tap file instead.
.tap files together to make a tape with one program followed by
another.
.tzx,
but MEMU does not support this.
ZX Spectrum snapshot
.sna file extension.
.z80,
but MEMU does not support this.