Affichage des articles dont le libellé est Cartridge. Afficher tous les articles
Affichage des articles dont le libellé est Cartridge. Afficher tous les articles

vendredi 17 juillet 2026

Msx Cartridge, first run.

The MSX cartridge saga continues...

As a reminder, here is what the cartridge should look like once finished. I had the printed circuit board manufactured with a request to have all passive components in 402 packages placed, because doing that by hand: why not, but actually, no!



On the other hand, I had to solder the FPGA myself. Even though it's a 144-pin package, this type of package is very easy to solder. I've already had the opportunity to do it before; a little practice is enough to carry out the operation without difficulty. I also asked for the flash to be placed on the board.

The FPGA functionality tests did not reveal any particular design issues. I just had to remove a resistor on one of the JTAG signals — a useless resistor that I had added without much thought on my original schematic.

The first programming of the FPGA therefore went without a hitch — see previous articles for more details. The famous 'Hello World' worked on the very first try.

So the next step was to program the Sapphire RISC-V processor core provided by Efinix into the FPGA, in order to implement the whole file-reception program from the PC, as well as the routine to write that file to the Flash.

When I do feasibility tests, the code I write is never very clean. Rewriting it for the final implementation allows me to follow a cleaner structure.

To check that the application code for the processor was starting to work properly, I simply programmed the UART for communication with the PC, the processor's internal timer to generate a one-second interrupt, and the timer interrupt routine to send a CRC-16 character (actually the character 'C') to the PC. Indeed, it's upon receiving this character that the Ymodem transfer protocol can start transmitting.

Because, no, I'm not using the Windows copy-paste file system over USB media. That system isn't designed to be controlled — it either works or it doesn't, with no visibility. So I preferred a more controllable transfer method.

And that's when the real trouble began. Although the code running on the processor started correctly and displayed the program prompt along with a few occurrences of the CRC-16 character, the program would stop without any intervention from me.

For a main loop consisting of while(1); that's a problem.

So I spent an evening eliminating possible causes for this malfunction. Then I remembered a small electrical issue I'd encountered during my initial tests a few months ago — a minor problem with ground loops and/or noise. This issue was obviously causing disturbances on the JTAG link, which in turn would crash the processor.

I inserted a USB isolator dongle on the USB hub and plugged the JTAG dongle into it.



And this time, no more problems. The processor runs its program without any issue.

So, my very first 4-layer PCB I designed, even if it's not the pinnacle of the art in this field, isn't causing any issues so far. The code I developed on the Efinix evaluation board works as well. Up until now, the most complex systems I had produced were circuits around Gowin FPGAs, which are simpler to implement. For this MSX cartridge, the whole circuit is nevertheless a bit more complex.

I must say I'm quite pleased with the result :



vendredi 3 avril 2026

MSX cartridge, it's progressing...

On this cartridge, I'm at the stage of trying to create the PCB. In my last post on this subject, I was at the beginning of creating the PCB and I had absolutely no idea whether I would manage to make something clean. Well, now I have the answer: 


All the tracks are routed. I still have a bit of work to do on improving the routing, with no major functional impact — more about streamlining. While working, I switched to version 10 of KiCad. I've known KiCad for over 20 years. A lot of things have improved, but I feel that since it went into 'semi-professional' mode, there are ways of doing things that have more to do with professional software than with solutions accessible to the greatest number of people.

A small message to the KiCad developers: By all means, improve its operation and features, but don't turn it into a clone of professional solutions that require months of training and practice to create an amateur circuit. You're now moving a bit too far away from the accessibility that has made KiCad successful so far. As for me, I think I won't update KiCad any further, especially since dark theme is finally available with version 10.

Of course, I have absolutely no idea whether this board will work or not. This is my first implementation of an Efinix FPGA. But you have to start somewhere. And, as a result, this allows me to compare this type of FPGA with equivalent FPGAs from Gowin. While it's true that Gowin FPGAs are much more expensive than Efinix FPGAs, the 144-pin Gowin version equivalent to the Efinix version used here, requires far fewer external components to get it running and is, in my opinion, easier to implement on a circuit. The Gowin module I made worked fine with just a two-layer board. Here, I was forced to go with a four-layer board.

If this Efinix FPGA implementation works, I will nevertheless have a functional template for implementing the component. This will allow me to create more complex designs more easily in the future with these components. 

lundi 16 mars 2026

MSX Cartridge.

Some months ago now, I decided to create a cartridge for MSX computers. I wasn't really sure which direction to take. I tried to keep it simple by using a fast processor, but the various tests I carried out yielded no reliable results.

So I ended up facing a dilemma: use a specialized processor like the Raspberry Pi Pico, or go with what seems quite inevitable to me, namely the use of an FPGA.

I don't appreciate Microsoft applications at all for a whole host of reasons, yet the most serious way to work on the Pico involves installing the necessary development environment within Visual Studio Code. Well, I'll never manage that. I just have to open the Microsoft application to be faced with all sorts of acronyms and logos, the kind I find on my washing machine, but in an A320 cockpit version, and I nearly keel over from sheer exhaustion.

So I chose a different approach, even though it's not the same thing at all. This time, I'm going with an FPGA. The advantage is that I can have more FLASH and SRAM memory to create my cartridge since I'm not constrained by the Pi Pico's internal resources. Furthermore, the FPGA will have a fast internal processor allowing me to manage the overall operation of the cartridge.

So yes, I prefer to challenge my brain with rewarding things, like learning VHDL and the whole Efinix FPGA environment, rather than constraining it with a vision of the Microsoft kind that holds no interest whatsoever.

As a result, the circuit I plan to build bears no resemblance to the early circuits and is far more complex. After doing a rough layout, I contacted specialists for the actual production of the circuit. The price is inevitably very high for this kind of 'personal DIY project', even more so in France. So, I still tried to see if I could manage to do something with my limited experience in the subject. This brings me to this result:


For now, I have absolutely no idea if I'll succeed in routing this circuit. In the past, I did the same kind of work on GoWin FPGAs, but it wasn't as difficult. The Efinix FPGA requires more external resources for its implementation.

After embarking on the adventure with Efinix FPGAs, particularly regarding the use of Efinix's internal soft processor, I must say I was on the flat. Now, the path is starting to get seriously steep...