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.

Sunday, 12 October 2025

Changing SD2IEC Device IDs

This question comes up a lot, so I thought I would compile all the various versions into a single post I can point people at.

Background

All Commodore IEC and IEEE-488 devices need a unique ID to talk to the computer. Most disk drives default to device ID #8, but it is common to have secondary drives as #9, #10 or #11.

This is the number in the ubiquitous LOAD "$",8 style commands.

ID #8 is the most useful as that is the one that most things expect. If you press CBM+RUN/STOP on a machine with Turboload, Fastload or Jiffy DOS, it will load and run the default program from drive ID #8.

(Yes that is a real C64, I just have a modified ROM with SX-64 colours to make it easier to take photos.)

If you do SHIFT + RUN/STOP on a Commodore PET or a TED based machine, this will load and run the default program from drive ID #8.

If you use the DLOAD, DSAVE, CATALOGUE etc. commands on those machines, they will again be using ID #8.

Multi-part loaders will often be hard coded to load subsequent parts from drive ID #8, even if you load the first part from ID#9.

Why Change?

If you have a real disk drive like a 1541, or a built in disk drive on an SX-64 or a C128D or an 8296D, those all start off as ID #8, so would clash with an SD2IEC.

Some drives such as the 1541-II have a switch at the back to change the device ID, but most don't. To change the ID of those, it requires cutting a trace between two pads.

You can later return to ID #8 with a solder blob. People sometimes fitted switches to those pads, although drilling holes in drive cases is frowned upon these days.

It might seem tempting to leave the internal drives or real drives set as ID #8 and change the SD2IEC to ID #9, I would advise against that for the reasons given above.

To make your life easy, set the drive you plan to use the most as ID #8. 

In most cases, that would be the fast, reliable and highly capacious SD2IEC, with only occasional use of the real disk drives to copy files off or to transfer disks to images for use with the SD2IEC.

Still Want To Change?

If I haven't persuaded you, there here are a few methods you can use.

Universal Commands

On most systems, you can type in the following commands to change the ID. There are faster options for specific systems I will cover later.

The first command is the one which tells the drive to temporarily change it's ID:

OPEN 1,current address,15,"U0>"+CHR$(new address) : CLOSE 1

In most cases, you could be changing a drive with the default ID of 8 to be ID #9, so the command would be

OPEN 1,8,15,"U0>"+CHR$(9) : CLOSE 1

(I am not sure why it isn't just U0>9, maybe deliberately to avoid accidental triggers, or simply an error that became a feature?)

This will last until the power is removed or the drive is reset. To make it persist, you need a further command: 

OPEN 1,new address,15,"XW" : CLOSE 1

In the above example, that would be

OPEN 1,9,15,"XW" : CLOSE 1

You can now test this out, but remember you need to use ID #9 for everything now.

LOAD "$",9

We've changed out drive letter by mistake

Should you suffer the common symptom of "ID 9 Regret", you can reverse the process using the same commands with the opposite IDs to change from ID 9 back to ID 8.

OPEN 1,9,15,"U0>"+CHR$(8) : CLOSE 1

OPEN 1,8,15,"XW" : CLOSE 1

Easier Methods

VIC20

If you have a VIC 20 and a Penultimate +2 or +3 Cartridge (and if not, why not?), there is a program on the Utilities menu that will do that for you.

This program will prompt you for the current and new device IDs.

It will that run the same commands as above for you.

Commodore 64

There is a version of the above program on the Future Was 8 bit preloaded SD cards, and in the download pack

It lives in the following location:

-cbm/tools_and_utils/sd2iec-id

Once you find that, you can run it as before to change the ID.

And your SD2IEC is now device ID #9

(please don't forget you did that and take it out of the draw 6 months later and wonder why it doesn't respond to LOAD "$",8 - TFW8b had a run of people at one point trying to return "faulty" SD2IECs where they had forgotten they had changed them to ID #9)

What if I have an internal drive #8?

Ah, if you have a C128D or an SX64, then you can't use the above options as the SD2IEC will conflict with the internal drive as they will both be ID #8. The easiest way, if you can, is to plug it into another computer and change the ID on there first.

If you don't have that option, then you can do it using the type in commands above with a slight trick.

You first type in the following, but do not press return yet

OPEN 1,8,15,"U0>"+CHR$(9):CLOSE 1

You then press and hold the drive reset button on the internal drive (under the flap on the SX-64). That should stop the drive responding whilst you have the button held in.

Then with your other hand, press return and the command will be sent to the SD2IEC.

You can then release the drive reset button and you should have the internal drive still responding to ID #8, and the SD2IEC set to ID #9.

As before, if you want to make that permanent, type the second command. This is going to drive ID #9, so no need for the drive reset button trick this time.

OPEN 1,9,15,"XW":CLOSE 1

What about the SD2PET?

That is slightly different. It is designed to be the only device connected to the PET, so it hard coded to ID#8 to avoid any problems. 

If you have an 8296D (lucky you), you can either change the internal drive to be ID #9, which involves cutting the trace in the white circle next to the "1" on the 8250LP board inside. (I think you can also do it by lifting the appropriate leg of the 6532 next to it). Or simply unplug the cable to the internal disk drives.

Adverts

The new SD2IEC and Fastload Combo from The Future Was 8 bit is available now in four colours for those who are picky about such things.

Tindie

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. On there you can see the post you would have got this week if Tindie had approved my listings in time. This also includes access to my Patreon only Discord server for even more regular updates (and me moaning about Tindie not approving my listings in time for blog posts)