2018.03.16
"Gunpei"
I’m overdue a few updates here, because a couple of important things have
happened and I haven’t managed to find time to write about them yet. I’m
going to start with emulation improvements on an arcade puzzle game from the
year 2000.
Gunpey, a game that was apparently named as a tribute to the late Gunpei
Yokoi (creator of the original Nintendo Game & Watch series) is an arcade
port of the Wonderswan title of the same name, it was also ported to the
Playstation.
Last time I looked at this driver was back in March of 2013 where despite
making some good progress, I got stuck completely with the sprite compression.
Fast forward 5 years to March 2018 and I have some new progress to show.
Peter and Morten, who have been working on numerous projects with me, hooked
up some hardware to the Gunpey PCB that allowed them to log video ram read /
writes. By using this hardware they were able to save the decompressed data
for every compressed sprite, giving us plenty of plaintext material to use
and hopefully make it easier to figure out the actual compression scheme.
As a step in this process the extracted data has been hooked up to MAME while
the actual scheme is figured out. This gives correct sprites in all the cases
where you could previously only see garbage due to the data compression.
Obviously the work isn’t yet finished, but by using this data the game can
be considered playable. Once the compression is figured out the end result
should be the same, just with cleaner underlying code.
I also took the opportunity to add support for zoomed sprites, used when you
launch an attack on the enemy. Here are some screenshots of the improved
driver.
https://mamedev.emulab.it/haze/pics2018/gunpey_new_3.png
https://mamedev.emulab.it/haze/pics2018/gunpey_new_4.png
https://mamedev.emulab.it/haze/pics2018/gunpey_new_5.png
https://mamedev.emulab.it/haze/pics2018/gunpey_new_6.png
https://mamedev.emulab.it/haze/pics2018/gunpey_new_7.png
https://mamedev.emulab.it/haze/pics2018/gunpey_new_8.png
https://mamedev.emulab.it/haze/pics2018/gunpey_new_9.png
https://mamedev.emulab.it/haze/pics2018/gunpey_new_10.png
https://mamedev.emulab.it/haze/pics2018/gunpey_new_11.png
https://mamedev.emulab.it/haze/pics2018/gunpey_new_12.png
https://mamedev.emulab.it/haze/pics2018/gunpey_new_13.png
https://mamedev.emulab.it/haze/pics2018/gunpey_new_14.png
Working with the hardware also told us a few other things, like that the
framebuffer is actually in the same RAM that the sprites get decompressed
into, not a separate memory area, so there must be a way the game sets up the
pointer so it knows where to write the framebuffer data. It was also
confirmed that the framebuffer is double buffered. These features need
hooking up.
One thing that isn’t yet clear is if the Arcade version really is meant to
effectively run at 30 frames per second, only updating the screen every other
frame. The Playstation release runs at 60 so appears to animate a lot more
smoothly. There are registers to select the source of the drawing, but at the
moment they really do only change every other frame, so this might require
some further investigation. Unfortunately while there are a lot of original
hardware YouTube videos none of them are HD 60fps videos recorded on a 60fps
camera that could show me if the game is / isn’t meant to update every frame.
Anyway, here is a video I’ve recorded showing the progress so far, obviously
this is a big improvement over how it has been in previous MAME releases.
https://www.youtube.com/watch?v=1dapEAWRtp8
https://mamedev.emulab.it/haze/