Sunday, 19 October 2025

Minstrel ROM Cart

Introducing the new Minstrel ROM Cart.

It plugs into the Minstrel Expansion Bus slot on later Minstrel 2 and Minstrel 3 board.

Or a Minstrel Expansion Bus backplane on a Minstrel 2, 3, ZX81 or TS1000.

(but not a ZX80, as that is missing /ROM_CS, but you're not planning to plug this into a ZX80 are you?)

It replace the internal 8K ROM at $0000-$1FFF with one of up to 8 x 8K ROM images on the cartridge (jumper selectable).

It can also replace a further 8K from $2000-$3FFF to make a 16K block, with up to 4 x 16K ROM images on the cartridge. If there is RAM at this location (as there is on the Minstrel 3), it will be disabled, reducing the system RAM to 24K.

Supported ROM chips

Jumpers are provided to set high or low on pins 1, 26 and 27, so most 28 pin ROMs and EEPROMs can be used.

  • 27C64 / 27C128 / 27C256 / 27C512
  • 28C64B / 28C256
  • W27C512

I might have gone a bit overboard in the datasheet, but there are pages of jumper settings for all those different ROM types, so hopefully it should be straightforward to do what you want to.

Minimal test code

I tested this with the Minimal ZX81 Compute and Display code from a previous blog post:

Timex Sinclair TS1510

This is not the first cartridge system for a ZX81 based machine. There was the TS1510 cartridge system for the TS1500 (which was a ZX81 in a ZX Spectrum case).

A grand total of four cartridges were released for the TS1510, and three of the four TS1510 ROM cartridge images can be used here.

The three 8K cartridges were:

  • 79001 Supermath
  • 79002 States & Capitals
  • 79003 Chess

There was one 16K cartridge

  • 79004 Flight Simulator

This was just a copy of The Psion Flight Simulator ZX81 game which was copied into RAM and then RUN as if it had just been loaded. That will not work here, but you can just load it from tape anyway.

There was theoretical support on the TS1510 for a 24K cartridge, although none were ever released.

The TS1500 ROM was slightly modified to fix two bugs in the ZX81 ROM and skip the memory check as 16K was always fitted. At also included a check to see if a ROM was located at $2000 and would jump to that. (if you had a TS1000, you had to type RAND USR 8192 to manually start the ROM cartridge)

By using 16K mode and making ROM images with the TS1500 ROM from $0000-$1FFF and the TS1510 cartridge ROM from $2000-$3FFF, you can run these cartridge ROM, should you want to practice some maths.

I think I can do that one....

Yay!

"We come from nothing, we are going back to nothing - In the end what have we lost? Nothing!"

I know nothing about US states and capitals.

Ooooh, I know this one.

Finally, would you like a game of chess Professor Falken?

(War Games came out in 1983, as did these cartridges. Not sure which was first though.)

ZXpand

Another use I am not sure if I should mention, but you can use it to host the ZXpand ROM.

Normally that has to replace the Minstrel 3 ROM, and a wire needs to be connected between the Minstrel ZXpand board and the host machine.

With the ROM in the Minstrel ROM cart, you don't need that wire.

That means for the first time, you can use the Minstrel ZXpand with a ZX81 or TS1000 (I thought I would use a TS1000 for a change today, since I was talking about the TS1500 before)

If you are using a powered backplane, you also get to use a proper power connector.

This is not quite a full ZXpand, as there is no RAM element here. You would need to make sure the host machine has an internal 16K RAM upgrade first.

I don't know what it is about it, but I still think that is one of the best photos I have taken.

And now back to some of the worst.

Not the best composite mod on that TS1000, the picture is a bit rubbish. But it does work.

And here comes Rex, lumbering along at about half speed since this is a 60Hz NTSC machine.

Oddly, that speed test program didn't work when loaded from the ZXpand. I checked that on a standard Minstrel 3 with ZXpand and the normal ROM arrangement and it did the same thing.

It started in FAST mode, so the test failed with 0 frames counted.

I had to manually switch to SLOW mode and then run it again.

98.6%, I will take that, I think the patched ROM is slowing it down slightly. It gets 100% when loaded from tape.

You lose the option to disable the ZXpand, using LOAD "program;X", so if you want that, you need to fit the wire from the Minstrel ZXpand to the ROM cart A15 jumper.

Some things that don't work

My original plan was to use this to test some alternative OS ROMs for the Minstrel 3, such as the various versions of Forth that George Beckett is currently investigating.

The ROM in the ZX81 is used for two things. Firstly it provides the built in operating system and BASIC language, but also contains the character set used by the display circuitry.

When in display mode (during the refresh cycle), the address lines to the ROM are changed. The low bytes is made up of a combination of the line counter and the character code (which is latched in the previous cycle). The high byte of the address is set by the I register in the Z80.

The ROM cart cannot access the alternate addresses, so only replaces the main ROM during code and data accesses. In refresh mode, control is returned to the host ROM, which is now acting only as a character ROM.

This has the advantage of an extra 512 bytes of code space from $1E00-1FFF which can be used to make small modifications to the ZX81 ROM such as added extra keywords etc

It has the disadvantage that it will always use the ZX81 style font which unfortunately means those Forth ROMs will not work as is, they would need to be adapted to use the ZX81 font.

Is actually running, just not displaying the correct characters. You get QGDNO on the screen when you type VLIST.

It does produce the VLIST, but it is an encrypted version with a simple Caesar cipher with a key of 5 (or -5, depending on how you look at it, V-5=Q, L-5=G etc.) because the character set is different.

Look at the IF three lines from the bottom, that is shown as DA with the ZX81 character set.

The ZX81 has A as code 38 (PRINT CHR$ 38 produces A) but Forth follows an approximation of ASCII and has  A  as 65 (65 EMIT produces A). Why that isn't 33 needs further investigation (it appears the code adds 32 to the character number before printing).

ASZMIC is a ZX81 assembler / monitor 4K ROM, so presumably has the I register set to $0E. That could be fixed, but again the font looks different, so would require some adjustment.

The same is true of the ZX80 4K BASIC, which expects the character set at $0E00.

The location the character ROM lives at is set in the I register, with code something like this:

        LD A,$1E  ; address of the character set is $1E00

        LD I,A    ; set I register, used by the display hardware

That is usually only set once, so should just be a single byte change.

Another thing I tried was the Lambda 8300 ROMs. Previously I have had those running on a Minstrel 3.

Unfortunately those did not work. Looking back at my blog post it seems the character set is located at $0000, not $1E00 as in the ZX81, so it does not work.

It look likes the Lambda ROM doesn't actually set it, so relies on it being set at $00 at reset.


Adverts

The standard kit come with a pin header for the Minstrel Expansion Bus connector on later revisions of the Minstrel 2 and 3.

Or with a backplane on any Minstrel 2, 3, ZX81 or TS1000.

Other Minstrel Expansion Bus modules are available:

As are Minstrel 2 and 3 kits

Shipping

I can still ship worldwide from my Tindie store and US orders are now tariffs paid.

Currently it looks like Royal Mail to the US is working. I pay the 10% tariffs as part of the postage to (hopefully) avoid delays and additional costs at customs. The increased US postage costs cover this.

I have recently built some more Mini PET 40/80 Internal boards, since the Mini PET II is still in development but people keep asking, so here they are.



Patreon

You can support me via Patreon, and get access to advance previews of development logs on new projects like the Mini PET II and Mini VIC and other behind the scenes updates.This also includes access to my Patreon only Discord server for even more regular updates.