While there haven’t been many updates here over the last couple of weeks anybody who has been watching my YouTube channel will have seen various videos showing the progress on XaviX based games.
My primary goal with XaviX emulation is to understand the hardware well enough to get the Taito and Namco Nostalgia TV games up and running as they’re interesting arcade ports containing remixed versions of each of the games, which were exclusive to the units and as it’s becoming more and more difficult to find new TVs with component inputs they risk becoming dead / mostly unusable technology at some point in the probably not so distant future.
Mostly what ended up happening is I got stuck emulating those, but thanks to the dumping efforts of Sean Riddle (along with Peter Wilhelmsen for purchasing many of them) I did end up with a number of other dumps to look at, each one telling me a little bit more about the hardware in order to further the emulation.
Probably the most interesting of those dumps is ironically one of the first ones to be dumped and that is Play TV Monster Truck. While all the other games seem to use a common codebase (likely one supplied by SSD Company with slight modifications made by each developer) Monster Truck instead uses a completely unique codebase, which actually seems a lot cleaner and easier to follow than the other games, so ultimately that ended up being the focal point of the initial work. I don’t really know why this, but Monster Truck with it’s over the top giant trucks, crazy Nitro boosts and commentary that Awesome Possum would be proud of looks like it might be the key to figuring out an awful lot of how this hardware works.
There are multiple generations of the XaviX chip, which is a 6502 derived CPU with onboard gfx / sound hardware. The first generation seems to add 2 new 6502 opcodes for handling far calls / returning from far calls, and for now this is the one I’ve been working on. The later ones add more opcodes, although from a brief glance of the code seem to have very similar, likely compatible video hardware. I haven’t tackled those yet (although there are some interesting titles for when I do, such as the Star Wars Lightsaber Battle Game and a similar Lord of the Rings one)
What’s interesting about the XaviX is that it has a very console-like design, meaning that the graphical features it has can be configured in a number of ways via registers in order to suit the needs of the developer. What we’ve seen so far with the dumps is that the developers made full use of that, with most titles using the hardware in a slightly different way; Monster Truck is especially interesting in this sense because it uses a tilemap mode where the tiles numbers are actually pointers to data structures containing a packet (which controls colour and flipping) as well as the actual gfx data. Other games don’t enable that mode, and use the tile number as a regular tile number, pointing directly to gfx data. There are also bits to enable / disable the use of additional attribute tables, as well as change the offset multiplier, and use a redirection table. Furthermore, data can be anything from 1-bit per pixel to 8-bit per pixel and is stored in packed format in the ROMs, so it can draw even 5 or 7bpp data as tiles or sprites straight from the packed data in the rom, without having to expand it first. It looks like every object / layer can specify priority too, which needs to be checked for every pixel drawn (sprite list doesn’t seem to be in priority order, priority comes from an attribute) I haven’t yet emulated that tho. There also seem to be unknown ways to force tiles to be solid / use blank data, which Boxing makes use of, and again I haven’t figured out yet.
Sound, which I haven’t looked at yet is just plain 8-bit PCM.
Palettes are interestingly the same format as the Radica games like Space Invaders and Golden Tee Home, which does make me wonder if there is some connection between the hardware even if those don’t have the hardware flexibility or custom opcodes.
So far the main problem I’ve encountered is various games going off the rails, the 6502 crashes, causing code to execute in the wrong order, or just crash entirely. As a result most games are not yet playable (although if I add the additional ADC interrupt and hook up the controls on Monster Truck it would definitely be close) I suspect the code execution problem is either due to some issues with how I’ve hooked up the custom memory mapping, or just with the interrupts / various status flags as my interrupt disable is very obviously wrong at the moment and I’m not generating the secondary interrupt at all.
Either way, I figured it was about time I put up some screenshots showing the current state of progress. As I said, I don’t consider any of these playable yet, as most hang at some point, don’t have controls yet, or have noticeable graphical issues, but it’s all progress to look back on.
There are a number of other ‘first generation’ XaviX games dumped that don’t do anything worth showing yet, including Ping Pong, Baseball 2, Taito Nostalgia 1 and Namco Nostalgia 2. I think all the current problems with first generation games not booting / crashing will come down to the same thing, so hopefully once I’ve figured out what the problem is I’ll have significantly more to show.
There are other non-Xavix TV games still in the pipeline too (I bought a few over here such as ConnecTV Cricket and donated them to Sean, so assuming the parcel doesn’t get lost I’ll have those to look at too at some point, I suspect that one is unSP hardware like Skateboarder was)