Saturday, 19 November 2022

Running on real Neo Geo hardware!

No work on Xevious today but with a handful of free minutes I thought I'd see what happens when I try to run it on real hardware. After fumbling with forgetting my Terraonion login, and then forgetting how to load up homebrew on the NeoSD, I eventually got it converted and loaded into my AES console.

My AES is set up in my (tiny) games room which, sadly, doesn't get a lot of use atm. If I do get the time to be in there (without my 7yo following me in), I'm usually running games off my MiSTer. But the BlisSTer hub is actually broken (again), so it has been a while. I'm running our old LCD TV and a 1084S clone which, for some reason, is only showing black and white for the Neo Geo atm...

Xevious on a real life AES

It basically works but there are a number of issues, most of which don't really concern me too much at this point in the development:

  1. Plenty of flickering on the screen; the scroll routine is doing a lot more work than it really needs to, and I have no doubt I can make it at least an order of magnitude faster than it is now.
  2. The screen is scrolling slowly; I'd guess every 2nd VBLANK is being missed. Again (see above), plenty of optimisations to be done.
  3. The credits are incrementing automatically, even when the UniBIOS is set to MVS mode. It was only ever a quick hack, as the custom Namco chips actually handle coin inputs.
  4. (Seemingly) when the credits reach a certain point, the foreground tilemap layer shifts a couple of rows down the screen. It does this whether on the title screen or in-game.
  5. When the bonus flag is being added to the map, it freezes (permanently). This is likely because I did a very quick hack for the pseudo RNG and simply read the seconds from the RTC. Because the code will re-generate the position if it is too close to the Solvalou, under MAME it often freezes for a second or two here. I'm confident fixing the RNG will alleviate this issue.
My biggest concern is that it behaves differently than under MAME, which means MAME isn't quite as accurate as they would have you believe. I recall having similar issues with Donkey Kong; the first few attempts (NGCD at the time) actually didn't produce usable video! I seem to recall resorting to another emulator to debug the issue...

Regardless, it's certainly encouraging that it is actually running and producing something that resembles Xevious. I have a feeling that MAME is a little more forgiving with the VRAM accesses though, and I will have to make sure I fully optimise that aspect for the real deal.


  1. Good to see you're making progress. Oh yeah, and although you may not get many comments on your posts, you should know that I always enjoy reading about your "RE Adventures" 😄

    Btw, a friend of mine has RE'd an arcade board, and I have used his findings to port 2 of my ZX Spectrum games to that arcade hardware, and I totally agree that MAME definitely isn't super accurate - only enough to emulate what's needed of it. Try to write original code for arcade hardware and suddenly you'll see the "holes" in the emulation.

    Keep on coding 😎

  2. Thanks, appreciate the feedback!

    May I ask which board, and which games? I'm always interested in other projects along the same lines!

    1. The board(s) is the Taito L System arcade hardware. You can find my two arcade games under "Spectrum" here:
      I'd like to do more for it, but my time is limited.

    2. Nice! Interesting board; RAM-based tilemaps which have to be fudged in MAME. Reminds me of when I was porting MSX2 Lode Runner to the TRS-80 Model 4... is the Taito L System character set large enough to cover the entire screen with unique characters for a pseudo bitmap mode like the V9938 in the MSX2?

    3. No, not as far as I remember ... but it has been several years since I tinkered with it, so I can't say for sure.