I wrote the engine myself from scratch in C with sdcc. There's lots of information on how the engine works. I relied heavily on
https://codeincomplete.com/articles/bou ... ame-logic/
The Boulder Dash community have created a ton of fan made levels and exported them using their text file BDCFF (Boulder Dash Cave File Format). My motivation was to leverage off this so one engine would be able to produce lots of games.
I have my own vdu libraries to access the vdu, so I wrote a simple vdp emulation layer for Linux using Allegro. So I mostly develop on Linux and X. I target the SG-1000 platform first and port it to other platforms later. Each system has it's own quirks. I debug the code for the SG-1000 hardware using Emulicious
https://emulicious.net/, since it has a good profiler and debugger. Speed was a major issue, getting it to run at 10fps was challenging.
I use Memu to test the code for MTX. When I did my original port of Klondike and Mahjong, I sorted out all the hardware compatibility issues with the help with everyone here with real hardware, so now all my code simply compiles for MTX. The main issues then were getting the RUN format right, and adding extra wait states for the vdu, since the Z80 CPU is clocked faster than for other TMS9918 machines.
I don't actually own any hardware, I rely emulators and hardware owners to give me feedback. It makes it a bit slower to develop, because of the slow feedback loop, but I can target more platforms that way, and it's cheaper.
Was the spaces issue you had on a real MTX, or Memu? Most other hardware platforms seem to prefer spaces in names, but I can remove them for MTX easily if it s problem.