Some time ago I purchased a DivIDE 2k14 interface for my ZX Spectrum +2. This particular incarnation of the popular DivIDE and DivMMC interfaces seemed like a good choice with its Kempston compatible interface (for those games that don't work with the Sinclair interface built into the machine), and of course four flashable firmware slots, so I could easily switch between Fatware and ESXDOS.
The interface is actually advertised as being flashable, which I guess most people would assume means they can update the flash from software.
As it turned out, this was not possible. I really wanted to update the version of Fatware to one that was more suitable to my +2, and I tried all sorts of different flashers to no avail - flashing always failed.
After much pulling of hair, I learned this is because the EEPROM had software data protection enabled.
You select one of the four slots to use by toggling two DIP switches on the DivIDE 2k14. These are part of a common pull-up resistor type circuit, which pulls A14 and A13 low when on.
Because the sequence to disable data protection requires the host to access addresses in two different firmware slots, this is simply not possible on the DivIDE 2k14 using host software alone.
After discovering this in the EEPROM datasheet, I left it at that. It seemed like a lot of hassle for a tiny tweak.
Until about a month ago when the final version 0.8.6 of ESXDOS was released. I wanted to upgrade, so I had to make this work somehow.
- EPROM burner with support for AT28C256 (mine is a cheap eBay special - Stager Electronics G540)
- PLCC32 to DIP28 adapter
- Chip puller
I grabbed my EPROM burner and adapter and fitted it with the EEPROM. I could read the EEPROM just fine, but it didn't look like Z80 code at all, and the total absence of ASCII strings seemed odd.
Okay, more digging and I found out that the original DivIDE has both data and address lines scrambled. I don't know the reason, but perhaps to make PCB layout easier. This is carried over to the DivIDE 2k14 with the same scrambling scheme.
To scramble (convert a .BIN to .RAW) and unscramble (.RAW to .BIN), you need an ancient tool called Zilogator's Permutor. Unfortunately this tool is written in assembly language for real mode MS-DOS, so good luck running that on a modern OS. A more modern version written in portable C exists as part of this collection of ZX Spectrum releated utilities.
After locating the permutor tool, I was able to unscramble the four slots and verify I had read the chip correctly.
The layout of the firmware slots is:
$0000 - Fatware
$2000 - ESXDOS
$4000 - Demfir
$6000 - ROM TEST
Okay, so I grabbed the new versions of Fatware and ESXDOS, and ran them through the permutor tool.
In my burner program, I simply read the chip to the program's internal buffer, and loaded the two new scrambled images into location $0000 and $2000 respectively.
I then burned the EEPROM and put it back into the DivIDE 2k14. Updated the CF Card with new ESXDOS binaries and turned on the power, while crossing my fingers - and it worked.
So there you have it. If you need to update your DivIDE 2k14, you may have to jump through the same hoops as me.
If you have the option to leave the software write protection off, you might be able to update using a .TAP file on the Spectrum next time, although I haven't tried. I have my burner and it seems like the safer option, now I know what the required steps are.