Sunday, 30 August 2026

Minstrel ZXpand II

Introducing the new Minstrel ZXpand II.


Designing a new product wasn't actually on the plan.

This was one of those, oh, "I wonder if ..." type moments, and I happen to have space on the bench and most of the bits to hand so I thought I would give it a go.

So What Is It?

Well, it is an SD card and joystick interface for the Minstrel 2, Minstrel 3 (and also ZX81 / TS1000 with caveats).

It overloads LOAD and SAVE, and adds CAT, DELETE and CONFIG commands to make it easy to work with files on the SD card.

The Commodore / Atari style 9 way D joystick can be read in three ways:

  1. The ZXpand interface
  2. Via an updated INKEY$ command
  3. As a Kempston compatible joystick interface

There is an FTDI style serial header that can be used to load files over serial from a PC.

The big change with the Minstrel ZXpand II is it now includes the overlay ROM, so it does not need the extra wire connecting to the host board that the original Minstrel ZXpand did.

The ROM chip is squeezed in on the right, so there are now two chips with labels on. Minstrel ZXpand II. Get it?

Build Options

The Minstrel ZXpand II is available as a kit or assembled.

There are versions with edge connectors or pin headers, either vertically in the Minstrle Expansion Bus socket, of horizontally soldered direct to the host.

It can be fitted to a variety of machines in a variety of different ways to suit your needs.

I will write a separate post going through all the options in more details.

DIP Switches

The jumpers on the previous Minstrel ZXpand have been replaced by DIP switches.

There are four switches:

Switch 1 disables the Kempston compatible joystick interface.

Switch 2 disables the ZXpand interface.

Switches 3 and 4 select the ROM.

The ROM overlay needs to match the host device. There were going to be three ROM overlay images:

1 - Minstrel 3 8K BASIC with NMI slow mode

2 - Minstrel 2 8K BASIC without NMI slow mode

3 - Minstrel 2 4K BASIC

I think I might use the fourth slot to add another ROM. No George, not a Forth slot. Not this time, sorry.

4 - ZX81 / TS1000

This should work on a ZX81 or TS1000, although you will really need an internal RAM upgrade or an external RAM pack, there is no RAM on the Minstrel ZXpand II.

Something like this as shown in one of my most popular blog posts showing a 16K internal RAM upgrade (it currently has almost 16K views, which is rather appropriate)

It will not work on a ZX80 as there is no ROM_CS line on the edge connector, and it's also on the wrong side. Get a Minstrel 2 instead.

The current ZXpand ROMs bypass the power-on RAM test, as they are expecting to be connected to a Minstrel 2 or 3 with it's normal complement of RAM. That way you get straight to the boot screen.

To work properly, for the ZX81 version I have reinstated the RAM test to properly set RAMTOP.

This is on my TS1000.

Ah, RAMTOP is 18432, that's ... err ... hang on ... carry the three ... the sound of counting on fingers followed by shoes being removed ...

I know, let's ask the TS1000.

I know the answer, I am just checking, I am sure you understand?

Ah yes, there it is, 2048 bytes, 2K installed (they never made much of the 2K RAM on the TS1000, presumably because it was too late to call it the TS2000).

RAMTOP holds the address of the byte above the last valid byte if RAM. RAM starts at the $4000 / 16384 mark, with ROM and RAM or ROM mirrors below.

On the Minstrel 2 and 3, it is set to 32768, 16K of RAM, the maximum BASIC normally sees.

The Minstrel 3 actually has 32K of RAM, with 8K below the 16K mark, and another 8K above the 32K mark, but BASIC is usually restricted to the standard 16K region.

How Did This Happen?

The Original Minstrel ZXpand kit included the board itself and a separate ROM chip.

This would replace the ROM in the Minstrel 3, and it would be controlled by a bit of green wire.

That wasn't ideal, although if you were doing a permanent install, you would solder the wire on the back of the boards.

The original ZXpand by Charlie Robson had onboard ROM and RAM, so didn't need the extra wire and ROM swap.

It also had space for an AY-3-8190 (or in this case a Yamaha compatible).

When I produced the first Minstrel version, I was going for the minimal approach.

The Minstrel already had RAM, so that wasn't required, and with that one wire link, I was able to share the main ROM on the Minstrel so I didn't need a second ROM chip.

That did mean it wasn't suitable for a ZX81 or a Minstrel in a ZX81 case, as it wasn't practical to connect the wire.

There was a sort of work around, when I added the Minstrel ROM cart, one of the uses I suggested was hosting the ZXpand ROM.

This meant you could leave the original ROM in the Minstrel and add this and the ZXpand without the need for the wire.

It also opened up the possibility of using it on a ZX81 or TS1000, as long as you have an internal RAM upgrade, or external RAM pack.

There was a small caveat of doing it that way, there was no option to disable the ROM.

There was now no connection between the ZXpand board and the ROM interface, so the control signal which disables the ROM was not connected.

Most of the time this wouldn't make a difference, unless you wanted to use a ZX Printer (or Alphacom 32 etc.) or had some software which needed the original ROM.

My test case for that is the 25th Anniversary demo (which celebrated it's 20th Anniversary this year).

When used with the ZXpand, some of the high-resolution graphics demo parts do not work.

This is meant to say A HOT ZX81, but it is just noise.

When loading, you should be able to append ";X" to the filename to disable the ZXpand ROM after loading.

With the ROM correctly disabled, you can see the difference.

You can get around that by connecting the wire from the Minstrel ZXpand to the ROM cart A15 jumper.

Or a wire connected to the ROM select block on the host ROM.

An Idea

I didn't think much more about this, until a couple of people recently asked about using the Minstrel ZXpand with Minstrel 3 boards in ZX81 cases. Whilst it's not impossible, it is a bit fiddly to run the wire out of the edge connector slot.

I wonder if I could modify the ROM board to check the control input, so the ROM could be disabled if required?

Oh look, there are all the bits I need handily arranged on the bench. What a bit of luck.

I needed an extra couple of logic gates to combine the signals, but I wired it up and it worked.

Great, now what?

Well, is there a way I can fit all of that onto one board?

So let me get this right, without making the board larger, you want to add a ROM, two more logic chips for that and a third extra logic chip to do the switching?

Oh, and whilst you are at it, get rid of the jumpers and add some DIP switches.

Oh, and the current theme is round all the corners, so do that as well.

Making It Fit

I fairly quickly concluded I couldn't fit all that on the same board.

To make it fit, I managed to fit most of the logic into a GAL chip.

The chip count is now the microcontroller, the ROM, a GAL, a 74HC10 triple 3 input NAND gate, a 74HC540 inverting buffer (for the Kempston joystick interface that runs in parallel with the ZXpand), and the 4050 to level shift to 3.3V for the SD card.

I am quite pleased with how that turned out, sticking to the horizontal on one layer, vertical on the other worked well.

Thanks to Charlie Robson (Sir Morris) for designing the original ZXpand and letting me do the Minstrel version.

How To Get A Minstrel ZXpand II

The Minstrel ZXpand II is available from my Tindie store:

You might also want a Minstrel Expansion Bus to plug it.

If you are outside the UK, you will need to contact me direct if you want to order. See last week's post for more information


Patreon

If you enjoy posts like this, you can support me via Patreon, and get access to advance previews of blog posts, and exclusive posts, and there was a much longer version of the "how did this start" in the Patreon Preview version of this post a few weeks ago.

You also get progress updates on new projects and other behind the scenes updates, as well as access to my Patreon only Discord server for even more regular updates, and to discuss your own projects.

Sunday, 23 August 2026

Update on Ordering

Sorry this is another "admin" post. I have a lot of posts ready to roll and currently on Patreon, but all of them are waiting on one thing or another before I can post them here.

I am not here to push Patreon, but I will just say there is 50% at the moment if you are interested

How To Order

I thought I should just explain the current best way to order things from me.

Please contact me using the contact email at the top of this page.

Tell me your shipping address so I can work out the postage.

Tell me which items you would like to order, including the options as that changes the price (e.g. kit / built, with IC sockets, with serial card etc.)

I can send you a PayPal link or an invoice if you are in the UK and prefer to pay via Bank Transfer.

PayPal should allow you to pay with various cards or PayPal balance etc. even in multiple installments, so that should cover most things.

Background

I have set Tindie to UK only, but I can still ship worldwide. Changes to the postal rules means it is not currently possible to automatically calculate the postage at checkout on sites like Tindie.

Several of the places I used to ship many orders to, including the US and many EU countries, now require that I collect the import duty from the buyer and pay that to the Royal Mail when I buy the postage.

The amount appears to vary from state to state and country to country, and I have not been able to find a list of all the countries which require this, and the how the duty is calculated for each one, and it keeps changing.

The best option at the moment is a bit tedious and creates a lot of extra work. I have to go through the process of creating the postage right up to the final pay now button where it tells me what it calculates the duty to be (if any).

I can then pass that back to the buyer and give them a total cost for items, shipping and duty.

It does make the postage look very expensive, but it should work out overall cheaper as the duty would previously have been collected at customs, and you would be billed for their estimation of the duty and their handling fee, which I understand was £10-15 depending on location. The Royal Mail only charge £1 handling fee when I pay up front.

Some countries currently do not need the duty up front, but I have still disabled all international destinations, as I don't want to get into the situation that happened recently where I had a couple of orders that were placed on Tindie, but when I came to post them the rules had changed and I now had a pay the duty. (thank you to the customer that did pay the duty after I contacted them, I felt really bad having to do that, but can't afford to lose 25% of the order value.)

Why Did This Happen?

Greed.

This is my understanding of how things work (or rather used to work), apologies if I have got any of it wrong, it's not very clear, and never was.

Previously there was a "de minimis" rule where customs would not bother about low value parcels. It was not worth their time to collect $2 on a $10 parcel. The US had a limit which I think was a very generous $800. The EU was €150. (although we used to have a free-trade deal but that was taken away from us...)

The EU is apparently replacing that with a €3 per item charge (or rather type of item), although I don't have any way to pre-pay that and I am not aware of it being charged on any parcels I have sent.

The UK in theory still has £135 limit or something like that, although I am sure I have been charged on less before, and I understand that is planned to be phased out in a few years. Yay! more problems to come.

The old system worked for many years. The customs could concentrate on the larger items, and things which arrive on pallets or in containers, rather than in small boxes.

But then the governments got greedy. Under the guise of "protecting local trade", they removed the de minimis rule, meaning customs now had to bother with tiny amounts.

This created backlogs in customs as they suddenly had to do lots more work, and people would have started to receive demands to pay $2 on a $10 item, plus a $15 handling fee and I am sure many would have refused to pay.

This led to an ad-hoc version of the old system where they were just waiving small parcels through when they were busy.

The greed then kicked in again and they decided to shift the responsibility for collecting the duty onto the shipper.

That is probably fair enough if you are a large business, but for a tiny business like me it is a lot of extra work.

I used to have the option to pay the duty up-front as part of the postage. I did offer this, but obviously no one selected it as it may the shipping cost look ridiculous.

Now the drop-down box is greyed out and I have no choice but to pay the duty up-front.

An Example

Say you want to order a $100 item.

Previously I had a set postage price per region, say $20 and you could place an order directly and would be charged $120.

Customs would then sometimes waive the parcel through with no costs, other times they would charge $20-$25 duty (depending on state or country) plus a handling fee ($10-$15).

That would make either $120 or up to $160.

Now it will be $100 plus $20 plus $20-$25 (plus their $1 handing fee), so up to $146.

Other Options

Move to the UK - although I wouldn't recommend that, for many reasons.

One person did suggest it would be cheaper for them to fly over here and take items back in their hand luggage. Not sure what would happen at the "anything to declare" desk if you said you had a PET ROM/RAM board and a Minstrel 3 kit.

There are shipping services I used to see people use in the past where I would post to a UK address, and the parcels would be forwarded on to the sender by a third party company.

I have not seen any orders to those places recently, I don't know if they are still operating, but they presumably have the same issues.

Maybe you can find one of those and place the order to a UK address, and the third party will deal with the international shipping and associated costs.

Conclusion

None of this is ideal, sorry. 

A re-instated de-minimis with a reasonable limit, or ideally a free-trade deal would solve this, but that would only benefit the end customers and small businesses, and I don't think any of us count in the grand plan of making the obscenely rich even richer.

Anyway, that is where we are today, I don't want to give up, so I will keep trying to make this work however I can.

I am very grateful to anyone who can navigate this mess of a system and still order things. I have done my best to try to make it work, but it is going to require a lot more effort on the part of both buyer and seller.

Sorry that was a little ranty and political, it is very frustrating that I want to make things, and I have people who want to buy my things but the way the world is at the moment makes it increasingly difficult.

Patreon

If you enjoy posts like the ones I normally write, you can support me via Patreon, and get access to advance previews of blog posts, and exclusive posts.

You also get progress updates on new projects and other behind the scenes updates, as well as access to my Patreon only Discord server for even more regular updates, and to discuss your own projects.

I am very grateful to my existing patrons, I need this even more they way things are going.

It would be wonderful to get enough support on Patreon to allow me to concentrate on writing more and better posts rather than spending all my time dealing with shipping admin.

I have set this to 50% off your fist month if you want to try it out.

Sunday, 16 August 2026

Minstrel 4th Repair

A few people who have bought Minstrel or Mini PET kits have documented the process of building the kit on their social media of choice.

This one happened last week.

You get to watch the process and hope it all works out.

Most of the time, you get a Tah Dah! it works at the end.

Every now and then you get one where it is something simple, like in this picture, the user has not set any of the DIP switches on.

I like to try to arrange it so that the default of no switches on gives a good starting point, but in this case, it needed one or other of the clock select switches set to on. It tried to make it work with all the switches off, but it would have meant adding another chip.

Unfortunately, in this case, when the DIP switches were set correctly, things were still not working.

The screen was partly corrupted, and the text displayed was wrong.

The user reported that they keys they typed were not generating the right characters, and started pursuing a potential keyboard fault.

I was thinking it was more likely a display fault.

Potential Causes

There are things which can cause the wrong information being displayed on the screen, but it usually boils down to:

1) The video side is fine and is displaying what is in the video RAM, however the CPU side has a problem, and it is putting the wrong thing into video RAM.

2) The CPU side is fine and is putting the right thing into video RAM, but the video side is not displaying it correctly

3) All of the above

I asked the owner, we will call him "Chris" (because that is his name).

I asked Chris to try switching to the Lambda 8300 ROM. This is useful because it beeps at startup, and it beeps whenever you press a key.

That can be handy when you can't quite see what is going on.

I asked him to type 1 0 P R I N T 4 2 then press newline.

Lambda 8300 BASIC is not tokenised, so you have to type keywords like PRINT out in full.

He did that, and it appeared at the top of the screen (or somewhere near at least), but is showed 00 OQIMS 42.

One reason for that could be the keyboard is faulty and so that is what the Z80 thinks you typed, however, if you had of typed that in, it would have generated a syntax error and not displayed it at the top of the screen.

If I try that in the EightyOne emulator, you see the E error.

If, however, the keyboard is fine and it has read that as 10 PRINT 42, then it will move it to the top of the screen, ready for the next line.

That is what appears to have happened here. The line has been accepted, but it is not being displayed correctly.

That is a good sign to me, it appears the Z80 side is working correctly, but the display is showing the wrong thing.

I think the fault is somewhere around one of the 7 chips involved in the video generation, the video RAM chip, the microcontroller and the five logic chips.

The microcontroller in this case is acting like a 6545/6845 CRTC, it is counting up the address lines to the video RAM chip and generating the video timing. The video itself comes out of a 74HC166 shift register, much like the original machines did.

I have seen this sort of thing many times before, and you start to notice the patterns. This is quite a familiar one.

10 PRINT 42

00 OQIMS 42

If you look at the ZX81 BASIC character codes for those letters, you get

1D 1C 00 35 37 2E 33 39 00 20 1E

What was displayed was

1C 1C 00 34 36 2E 32 38 00 20 1E

If you can accept (as my brain still refuses to do) that A, C and E are even numbers in hex, then it looks like all of those characters have bit 0 set to 0. The already even numbered characters display correctly, the 0 for example, but the odd numbers are replaced with the even number directly below. The final 1 in position 0 is switched to a 0, T to S etc.

That usually means D0 is stuck low - look for a short or missed pin somewhere.

You can get the same things with the other 7 data bits, some of the others are less obvious, but start to make sense when you work out the character code.

Addressing Fault

There is also the mess at the bottom of the screen, that is a most likely a different problem, one on the addressing side of things.

The ZX81 style 32 line display is easier to spot this issue on that something like a PET with 40 character lines.

Here, it seems to be in blocks of 8 lines. 8x32 = 256 bytes. That usually means there is a problem with A8 or A9, as those control the 8 and 16 line blocks on the screen. If one of those is stuck low, there will be gaps of 8 or 16 lines.

The blocks of 8 characters wide also suggest an issue with A3 stuck high in those places. If you write to address 0, it sees that as 8. Address 1 is 9, and so on up to 8, which is sees as 8 because A3 is already set. That continues up to 15, but when you get to 16, it reads that as 24, and so on up to 31.

If you were to write to positions 0-31, it would actually write to positions 8-15 twice, and then positions 24-31 twice, hence seeing valid data only on those areas and for some reason inverse Y on the rest.

There were no obvious shorts or missed solder joints visible, so Chris sent the board to me to investigate further.

Fixing the Problems

The board arrived here a couple of days later, and I couldn't seem anything obvious either, but the faults were still there and had not been magically fixed in the postal system.

The blocks were not consistent and were flashing on and off, suggesting a floating line somewhere.

The banner at the top announces

KAMACA 8200 - MIMSSQEK 4SG U0,0

When it should say

LAMBDA 8300 - MINSTREL 4TH V1.0

Just to confirm my D0 theory, I wrote a little test program in ZX81 BASIC on the Eighty One emulator.

This reads through the string and prints it to the screen one character at a time.

It is showing what the Minstrel 4th is meant to be displaying.

I then modified the code to set bit 0 to 0, making all the odd numbers even.

There is no bitwise AND in ZX81 BASIC, so I had left a good few lines in case it got complicated.

The ZX81 uses floating point numbers, so I needed to use INT to remove the fractional part after the divide by 2, and then a multiply by 2 to get it back with bit 0 set low. (9/2 = 4.5, INT 4.5 = 4, 4*2 = 8)

And there it was, KAMACA 8200, as was shown on the screen.

Finding the Fault

I decided to have a closer look at the board with the USB microscope.

Oh, hello, that's not good.

Yes, clean through that track. The one to it's left has the solder mask damaged, but the track looks intact.

Oh, there's another one.

This one looks to have taken out two tracks, it is actually down into the fibreglass of the board.

The two areas of damage are both next to capacitor legs are.

I think this board get caught by the wire cutters when the leads were being trimmed.

I checked the traces for continuity, and there was indeed a break in each of the damaged tracks.

The first one was D0. Well, there's a surprise.

The track next to it is the border signal which is connected to the tape output, we hadn't got far enough to test that yet.

And finally A9, on the Z80 side, explains why some blocks were in the wrong place.

I was able to fix all of those with three bodge wires on the back, so you wouldn't know from the front.

Testing the Repair

Time to try it out.

Well, would you look at that.

Credit to Chris, everything else was fine, just those two tiny nicks on the back of the board from some overzealous side cutter action.

Of course I have to include a VLIST, which looks a lot better than it would have done with D0 stuck low.

The load lines also worked, and I tried out a few games.

The ZX81 has quite a nice Hopper I remember having back in the day. Not exactly GTA (or whatever the cool kids play these days, Broken Sword or the City Skylines or something like that I imagine), but I enjoyed it.

All done and ready to go back, and I see from the socials that it has arrived.

Hopefully we will get some shots of it working to balance out all the ones of it not working.

Thank to Chris for letting me write this up and use his photos.


All items are still available, and I can ship worldwide.

Including the Minstrel 4th, which is available in kit form, or pre-built, but as you have seen that should be fine as long as you are careful with the wire cutters.

International shipping is a bit complicated at the moment, so if you want to order from outside the UK, please see this page for more information:

Sorry to have to do this, and I know this is going to affect sales, but please understand it is the only option I have right now.

Patreon

If you enjoy posts like this, you can support me via Patreon, and get access to advance previews of blog posts, and exclusive posts.

You also get progress updates on new projects and other behind the scenes updates, as well as access to my Patreon only Discord server for even more regular updates, and to discuss your own projects.

I currently have 50% off your fist month if you want to try it out.