Software

Here we describe the software in REMEMOrizer :-

OS ROM

The OS ROM sits in the fixed ROM page.

If the ROMs jumper is set "high", then REMEMorizer supplies a patched version of the OS ROM which does not corrupt the RAM Disc and which has its cassette load/save routine patched to jump to the REMEMOrizer tape support.

If the ROMs jumper is set "low", then the motherboard ROM is used.

BASIC ROM

The BASIC ROM sits in ROM page 0.

If the ROMs jumper is set "high", then REMEMorizer supplies a copy of the BASIC ROM. The only reason it is included as in most MTXs, both the OS ROM and BASIC ROM are provided from a single 16KB ROM chip. So if you've removed this chip from the motherboard, and set the ROMs jumper "high", REMEMOrizer had better supply both the OS and BASIC ROMs.

If the ROMs jumper is set "low", then the motherboard ROM is used.

CP/M boot ROM

The CP/M boot ROM sits in ROM page 4.

REMEMOrizer provides this ROM unless you press SW1. So to bypass booting to CP/M, press this switch whilst resetting the MTX.

The REMEMOrizer r2 ROM also bypasses booting to CP/M if both Shift keys are pressed.

It is different to the version found in an FDX or found in an SDX with CP/M support, and is pretty much the same as the REMEMOTECH version.

It is broken into a number of modules.

The AZMON module is the initial monitor. It is modified to boot F:52, B:18, B:19, ..., B:1F. It always loads the RAM Disc support, whether you boot from it or not. If both Shift keys are pressed during resetting, it doesn't boot CP/M and returns to BASIC instead.

The ASDXKBD module is the keyboard driver. This is the same driver code used in REMEMOTECH, which queries the CPU clock divider by reading a port. On REMEMOrizer, that port always returns the value for 4MHz.

ACRT is the 80 column card driver. This has been modified so that it knows that the REMEMOrizer screen buffer has 4096 character cells (rather than the 2048 in a normal card). It also supports a new 80x48 mode as well as the 80x24 mode. It provides new escape codes ^[Y and ^[Z to switch into 80x24 or 80x48 mode.

ASDCARD is the replacement for the usual floppy disc driver code found in normal Memotech FDX and SDX systems. It supports a single 8MB size of disk, but through the use of 8 drive type codes (18..1F) allows you to access 8 8MB partitions of the SD Card.

The SD Card hardware turns on a green LED when the SD Card is accessed and flashes it for a couple of seconds afterwards, and the user should not remove or change the SD Card until it goes off. The driver reads a port which tells it that the card was accessed in the last second, and if so, it can assume that whatever sector it read last is still what it would get if it read that sector again. In this way, sequential reads of N 128 byte sectors only result in N/4 512 byte block reads (instead of N 512 byte block reads). Also, sequential writes of N 128 byte sectors only result in N/4 512 byte block reads and N block writes (instead of N 512 byte block reads and N 512 byte writes). This feature produces a measurable speed increase, perhaps as much as 2x.

The ARAM module provides RAM Disc support. It is a subset of the SIDISC module in the original Memotech computers, which supported Silicon Disc and RAM Disc. 256KB type 50 RAM Discs are supported. 512KB type 51 RAM Discs are not supported - there isn't enough memory. A special 320KB type 52 has been defined so as to make full use of the memory available on REMEMOrizer. Conveniently this exactly matches the type 03 floppy in size and geometry.

ARAM is present in memory, whether you boot from RAM Disc or not. There is no need for a SIDISC.COM program.

SDX BASIC ROM

The SDX BASIC ROM sits in ROM page 5.

The SDX ROM in a real SDX provides USER commands to MTX BASIC, allowing the user to read and write files on a floppy disk. The SDX ROM in REMEMOrizer is pretty much the same as the REMEMOTECH version.

Instead of floppy disc, it supports SD Card partition 0. Unlike the original SDX ROM, this version also supports 320KB RAM Disc. In other words, the drive configuration supported is B:18,F:52.

To support these disk types, it was necessary to steal areas of high memory that would otherwise be used by the NODE RING ROM. This support is therefore incompatible with the NODE RING ROM.

Remember, to use the SDX support, you must first use ROM 5. The first drive (SD Card partition 0) must contain a 59K CP/M system. If this is not the case, you'll get a DISC ERROR.

If you try to use USER FORMAT, you will get a Mistake error. Track and sector based formatting doesn't make sense for SD Card or RAM Disc media. Instead use the REFORMAT.COM CP/M executable.

Tape support

The tape support is physically present in the SDX ROM, and the OS ROM is patched to jump there.

By default, REMEMOrizer loads and saves to virtual cassette, as administered using the REZTAPE.COM command.

However, if you press SW2, marked as "Tape" on the picture on the Setup page, then a little red LED lights up to indicate that virtual tape support is disabled. In this mode, when MTX BASIC loads and saves, real cassette load and saving occurs. This can happen because the code at the end of SDX ROM 5 also includes a copy of the code normally present in the OS ROM (which unfortunately had REMEMOrizers "jump to REMEMOrizers tape support" patch splatted over the top of it).

This tape support has a feature called tape-breaker. During LOADing, hold down SW1. After each block is loaded, the border will go yellow. Press INS to proceed as normal, in which case the border flashes green. Press ENT CLS to break in at that point, in which case the border flashes red, and the break entrypoint in the BASIC ROM is entered.

One way to use this feature is to LOAD the program twice. The first time, simply press INS each time and count how many blocks are loaded before the program starts. The second time, press INS one fewer time, and then ENT CLS for the last time. Hopefully there is enough of the BASIC program there to inspect.

If you are loading from .mtx file, you can also use MEMU with its -diag-console and -diag-tape options to discover how many blocks there are in your program.

Because of these features, it may now be easy to LOAD from tape and then SAVE to virtual tape, and vice-versa. Of course, games that employ auto-run and other copy-protection schemes may still prove difficult.

CP/M utilities

RECONFIG.COM

RECONFIG.COM is a version of CONFIG.COM, but enhanced for REMEMOTECH and REMEMOrizer.

It gives give better error messages.

It has been enhanced to support extra drive types. It supports type 18..1F drives, which are 8MB SD Card partitions. Do not configure two drives with the same 1x type code, as this can cause data corruption. It also supports type 52 drives, which are 320KB RAM Discs.

Every time you configure or change a drive type, high memory is allocated for the allocation and check vectors. High memory is in short supply, and after configuring and reconfiguring lots of drives, you can run out. This issue can eased by using a 54K system disk, rather than 59K. This is made worse in REMEMOTECH and REMEMOrizer, as in order to access more of the SD Card, you may find yourself configuring and reconfiguring a drive to access different partitions on it. The included RECONFIG.COM is enhanced to spot reconfiguring a drive to a new type code with the same DPB (which implies the same geometry), and if so, it reuses the existing allocations and check vectors.

The new RECONFIG.COM is a superset of the original shipped by Memotech, and can actually be used on earlier Memotech systems.

REFORMAT.COM

Back in the day, there were 3 different formatting programs :-

REMEMOrizer includes REFORMAT.COM which doesn't issue hardware level formatting commands, and instead it overwrites the reserved tracks and directory area with sectors containing 0xe5 bytes. This can therefore be used to "format" the RAM Disc and SD Card found on REMEMOrizer. None of the original formatting programs are therefore needed, none of them work, and so none of them are included.

REFORMAT.COM can be used on an original Memotech system to wipe a disk, providing the disk is already formatted to the right type code.

REZTAPE.COM

REZTAPE.COM is a program for managing the virtual cassette tapes feature in REMEMOrizer. Its much like the RETAPE.COM program used to do the same thing on REMEMOTECH.

There is one read/write 64KB SRAM slot (slot number 0) and a read-only 64KB SRAM slot (slot number 1).

The following commands can be used :-

REZTAPE
List bytes 1-15 of each virtual cassette tape in each slot. ie: the name to LOAD from MTX BASIC.
REZTAPE slot
Delete the contents of the indicated slot.
REZTAPE INPUT.MTX slot
Read file INPUT.MTX and write it into the indicated slot. Note: The file cannot be larger than the size of the slot.
REZTAPE slot OUTPUT.MTX
Read the indicated slot and write to a file called OUTPUT.MTX. Note: The resulting file will be the size of the slot, regardless of how many bytes have been saved to that virtual cassette tape.
REZTAPE ?
Show help text, summarising the above.

If you use REZTAPE to read a slot and write to a .SNA file, REZTAPE only writes 49280 bytes, because this is enough to hold a 49179 byte ZX Spectrum snapshot.

The INOUT routine in the MTX BASIC ROM has been patched so that :-

LOAD ""
Loads from slot 0.
LOAD "NAME"
Looks for NAME in slots 0 to 1 and loads it. If no slot has this name, then a "No data" error results (a real Memotech MTX just keeps reading hoping that it will eventually find a saved file with this name, but REMEMOrizer knows it is not present and so gives up).
VERIFY ""
Verifies against the data in slot 0.
VERIFY "NAME"
Looks for NAME in slots 0 to 1 and verifies against it. If no slot has this name, then a "No data" error results.
SAVE "NAME"
Saves to slot 0.

The recommended approach to use is to use REZTAPE.COM to write the game you wish to load to a tape slot, switch to MTX BASIC, and then LOAD it. If you save anything from MTX BASIC, boot to CP/M afterwards and use REZTAPE.COM to read slot 0 and write to a .MTX file.

REZPATCH.COM

REZPATCH.COM is a program which can patch the ROM images that REMEMOrizer provides. ie: The fixed OS ROM, BASIC ROM 0, CP/M boot ROM 4 and SDX ROM 5.

Its usage is like this :-

A>REZPATCH iobyte address {byte}

The change lasts until power-off, or next change.

As an example, to make MTX BASIC say "Randy", rather than "Ready", use :-

A>REZPATH 00 026D 52 61 6E 64 79

Use with care.

REZROM2.COM

REZROM2.COM is a program for administering the ROM 2 feature in REMEMOrizers with bitstream r3 or later.

When run with no arguments, REZROM2 shows you the first few bytes of the top 8KB of each physical SRAM page. There are 32 physical pages, referred to as 00 to 1F. Only pages that are available to use for ROM content are listed :-

If you try to read, write or erase an SRAM page that is not available, or you try to make such a page visible in ROM slot 2, you will get an error.

You can upload a non-subpaged ROM image to a SRAM page, and then set the subpage register so that this SRAM page appears in ROM 2. This example uploads to SRAM page 0, and enables ROM 2 support using it :-

A>REZROM2 NEMO.ROM 00
A>REZROM2 ! 80

The register value written with the ! command is the SRAM page with the following extra bits added in :-

Given that the ROMs can be written (if you configure it that way), you may wish to read an SRAM page to a file :-

A>REZROM2 00 FILE.ROM

You can erase an SRAM page :-

A>REZROM2 00

Upto 16 subpages can be supported using SRAM pages 10 to 1F. You can upload a set of subpaged ROM images and enable them like so :-

A>REZROM2 PASCAL0.ROM 10
A>REZROM2 PASCAL1.ROM 11
A>REZROM2 ! B0
A>MTXL
ROM 2

The B0 subpage register value includes the 20 weighted bit, which enables subpage support, and as a result any of the SRAM pages 10 to 1F can end up being selected (depending upon what stores to 0000-1FFF subsequently occur). For this mode to be allowed, you can't have a RAM Disc configured, as even the smallest RAM Disc overlaps this range. If subpage support is enabled, the bottom 4 bits are zeroed when the system is reset, as would happen with the subpage register on a real ROM card.

Do not configure a RAM Disc whilst you have ROM 2 support enabled. Although REZROM2 does check for a RAM Disc being configured, RECONFIG does not check for ROM 2 support being configured. Disable ROM 2 support first, using :-

A>REZROM2 ! 00

REZSPEC.COM

REZSPEC.COM is the REMEMOrizer ZX Spectrum Emulator, written using ideas and code from Z2 in the Z ZX Spectrum Emulator, but written to exploit REMEMOrizer with bitstream r3 or later. This later REMEMOrizer variant can provide ROM 2 support (thus providing a space for the REZSPEC code to sit) and includes Speculator hardware support.

This contrasts the original Speculator software in a number of ways :-

REZSPEC includes Gosh Wonderful ROM embedded within itself. It copies the ROM image into place, then patches it. REZSPEC locates itself in ROM 2, usually using the memory intended for RAM page α (SRAM page 00). However, if you're running on an MTX000, that page is in active use, so REMEMOrizer checks to see a RAM Disc isn't using RAM page t (SRAM page 1F), and uses that instead.

REZSPEC patches NMI, load and save so that it switches to code in ROM 2. The actual patch/switch code overwrites the extended REM STREAMS command in the Gosh Wonderful ROM. It also patches the initial RAM test to prevent any NMI occuring during the test appearing as a memory error, and printer routines not to do anything.

The REZSPEC NMI routine handles screen, border, and keyboard and joystick.

The fast mode screen update uses a technique from Speculator whereby it only outputs attributes which have changed, and only outputs VDP addresses when it needs to.

The hardware accelerated screen update exploits REMEMOrizer Speculator hardware. This tracks which character cells have been written to, which attributes have been changed, and where the flashing attributes are. Only these areas are copied. This helps games such as Blobbo, Gridrunner and Galaxians which animate the player and bad guys against a largely static screen. It only helps avoid copying unchanged attributes for Manic Miner as it actually copies the entire active screen from an offscreen bitmap every time.

The NMI routine reads sound port transition ports and if within a valid range, maps to sound chip frequency divider and programs the sound chip. Some basic sound effects work fine - others, such as the music to Manic Miner, come out very badly. This is the main reason there are hot keys to adjust the sound volume.

The load and save routines access virtual tape (by default) :-

A>RECONFIG C:19
A>REZTAPE C:BLOBBO.TAP 0
A>REZSPEC
LOAD ""

Virtual tapes are limited to 64KB in size, which is a problem for a couple of games. In such a case, load into another emulator and make a snapshot. Snapshots are around 48KB and can often be restored into REZSPEC instead :-

A>REZTAPE C:GALAXIAN.SNA 0
A>REZSPEC
F8

Whilst running, the following hot keys exist :-

When a hot key is pressed, a badge appears briefly on the screen as visual feedback. If you try to snapshot and this fails (eg: can't snapshot if registers have certain values) or if you try to restore and this fails (data on the virtual tape is obviously not a snapshot) then the badge is displayed with a red background.

The real cassette support isn't perfect. Whilst loading or saving, screen refresh is disabled, so you won't see loading screens gradually appear. However, on the plus side, because real cassette tapes are supported, you can load from tape and then snapshot to virtual tape. Real cassettes and cassette players are hard to find, as are good .wav files, so to test, I used tape2wav from the fuse emulator to make some from .TAP files, and then played these out of my PC and into the MTX.

The Spectrum .TAP support isn't perfect either, and it isn't interruptable. Sometimes, if the virtual tape contains data different to what the loader expects, REZSPEC will reboot the system. Verification of data on virtual tape is also not supported.

Although load and save can be directed to real tape or virtual tape using F2, snapshot and restore always uses the virtual tape.

This list describes how well REZSPEC copes with various Spectrum Software.

REZNUMT.COM

This is a program designed to test the numeric accelerator built in to REMEMOrizer r3 or later. Its only likely to be interest to the author.

REZNUM.COM

This program will enable the numeric accelerator built in to REMEMOrizer r3 or later, and then patch the MTX OS ROM and BASIC ROM 0 to use it. This change lasts until power off.

At this time, REZNUM patches the calculator routines in the ROM which do addition, subtraction, multiplication and division.

It is interesting to note that although the hardware detects underflow conditions, the MTX ROM treats these as a zero result.

As a speed trial, various Memotech Mandlebrot set generators were developed and compared.

Summary: if you are serious about doing floating-point on a Memotech MTX, you'll only get a little speed-up using REZNUM. You'll need to code in assembler, and ideally bypass the MTX BASIC ROM calculator routines and directly interact with the numeric accelerator to get the best performance.

There is scope to do more. I can probably significantly accelerate functions such as exp, ln, sin, cos and tan, by exploiting the fact the hardware has a built-in hardware stack, and many built-in constants. The tricky bit is patching the ROM and keeping it working.

MTX.COM, MTXL.COM and RUN.COM

It also has the MTX.COM and MTXL.COM programs, which can be used to switch into MTX BASIC. MTXL.COM is preferred, as it does not corrupt RAM Disc in the transition.

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 may not run properly this way.

Sample SD Card

The package includes a couple of sample SD Card images, in the file sddisc.bin and sddisc2.bin. They are 8MB SD Card partitions with CP/M 2.2 filesystems. The first has a 59K CP/M system on it, the second has 54K. If you copy them to the first and second 8MB of a SD Card, you can access them by configuring type 18 and type 19 drives.

These images have some handy utility files.

The first image has various games in .COM format. There are also a few games in .RUN file format, most of which can be run using the RUN.COM program. There are also some SDX BASIC .BAS files. It also has lots of .MTX files.

The second image has Icicle Works, which needs a 54K CP/M system to work. I've never got to the bottom of why this is, and its tricky to debug. Interrupt the CP/M bootstrap by holding down Enter, then type BC19 to boot from the second partition, then run DT.COM followed by TLOAD.COM followed by TV.COM. Or type SUB ICICLE.

It also has a selection of ZX Spectrum .TAP and .SNA files, for use with REZSPEC.