Over the holidays I had once again the pleasure of tinkering with my friend’s Amiga 500. This time helped him with flashing the HxC firmware to his Gotek floppy drive emulator which he had mounted in an external drive case. The flashing went smoothly, but in order to be able to boot from the Gotek device the Amiga needed a hardware modification.
This came as no surprise as we had done our homework. There are multiple products in the market but I did not really like them as they connected the IC pins to a DPDT switch with a long wire in order to swap the signals in pins 13 and 14. The CIA ICs are getting rare, and although unlikely, killing one with ESD would ruin the day. Moreover, the required switch type greatly limits the selection of switches and mounting methods one can use to make the solution as neat as possible. The prices of the existing solutions are also quite high if you consider the shipping costs as well.
For those reasons I created my own design. It is a really simple solution which uses a 74HC153 multiplexer to do the switching. The top side of the board has a precision DIP socket for the even CIA. The bottom part has the turned male pins for plugging the whole thing to the original IC socket. The circuit will draw its power (approx. 2 mA) from voltage supply of the CIA chip.
Amiga Boot Selector can be bought in my Tindie shop:
A friend of mine has an Amiga A500. As usual, the machine was kept in a storage until its retro value was significant, and during those years of storage the battery of the “memory & RTC” expansion had leaked and grown a thick fur on the PCB.
The module didn’t work even after cleaning up the mess. I told I could take a look at it, and sure enough I soon had the module in my hands. As I don’t haven an A500 of my own, I decided that the best way to troubleshoot would be to talk to it through the connector, and so I built a testbench out of an Olimex LPC1114 board. The microcontroller has 5V tolerant GPIO pins, which is a bonus.
It turned out that the microcontroller was quite slow with its bit arithmetics and the debugger on so that the timing didn’t become an issue. After a few hours of debugging with my logic analyzer and fixing a few bad pin choices (eg. mapping an address line to a SWD line) I was finally able to write to each location of one of the chips and read it all back. After repeating it for the other chips I found out that one of the chips was faulty, and the board shall return to its rightful owner after I get a new IC from an eBay surplus store.
Of course, it would have been more elegant to program this thing with Assembly and carefully take note of the timings, but I wrote it in C and made sure that the cycles are not too long. After all, the performance of this device doesn’t matter as testing the chip even with my unoptimized code takes only a few seconds.