It's been pretty quiet from me for a while now...
One of the things I've been messing around with a bit is a "
Virtual
Memory
Manager" for FBA-XXX.
While it does have one already, I wanted to make an attempt at one myself and am quite happy
with the results.
Here's a short description of what my VMM does:
First, I allocate a structure holding information for each object (sprite/tile) such as size, when it was last used, and the offset in the data at which it is located, and a pointer to allocated ram for just this object. Next, I dump the data that we're trying to keep out of RAM and free the RAM it was loaded into. Then, in the drawing function, I make a call to my vmm_get_data function. The vmm_get_data function checks to see if we have enough free ram to load another object (the amount of ram available is definable), then it either frees some ram or starts looking to see if our object has already been read into ram. If it is in ram already, we move it to the temporary malloc used by the drawing function, if it's not, we allocate some ram to put the object in, seek in the data file to the offset the object is located, read it into the allocated memory, and then move a copy of it into the temporary ram used by the drawing function.
While this may sound very slow, it seems to be fairly effective for games that take a great deal of memory, such as the PGM games. Knights of Valour, Oriental Legend, etc. all work at a fairly steady rate (usually full speed [~59.97fps]), dropping in areas with excessively heavy sprite use.
The next project that's been eating up a lot of my time is a "Magical Cat Adventure" driver. It's probably the most complicated drawing hardware I've tried to work with yet. It has "line scrolling," and variably-sized sprites, meaning that it takes complex, slow drawing routines to draw them. I've spent a lot of time making sure the routines are as fast as possible and take as little code as possible. I've hit several roadblocks that have taken a great deal of time, such as a small glitch with the background layer -- part of it doesn't scroll correctly, and the second is that the other game on the hardware "Nostradamus" is having problems communicating with the Z80 -- I'm not entirely sure if this is related to some sort of doze bug or a timing issue.

I've also been working on completing a snk68 (P.O.W., Search and Rescue, Ikari III, and Street Smart) driver that I've had almost finished for ages. I can't quite get the analog "spinner" inputs hooked up correctly using the mouse input.
I've ported, and re-ported a "Kangaroo" driver, but have had no luck fixing graphics issues, which, at this point, I am assuming are related to doze.
I started porting a Bubble Bobble driver (only some of the bootlegs work atm).