![]() |
![]() |
![]() |
![]() |
![]() |
Make 'Castlevania: Yami no Juin' work.
Posted on 2008-08-26 00:00:00 |
Well, after all this time, I wasn't really able to get the game to work a lot faster, but it did make me realize that threads aren't the way to go to gain speed. This is because of all the synchronization required to make it work properly and also because the threads doing the work are quickly running out of data to process, thus making it wait for the data producers to produce more and negating any speed gain...
I don't really know what else I could do to speed things up while the game is rendering stuff using the VU/VIF. I tried checking which part of the VU/VIF processing was the slowest and I can't really come up with a conclusion. Micro-program execution doesn't seem to be taking a lot of time and so is data decompression. Maybe it's the big amount of data sent to it that's making it choke like that. It seems to be the case with the Atelier Iris world map rendering at least. In Castlevania it seems to be slow because something is keeping the CPU busy. I don't know what exactly, but I'm getting only 15fps if I turn the VIF off. So it might mean that some OS event isn't fired at the right time or that we might be better off working on getting the recompiler to generate faster code. As a temporary measure, I added a frame skip option that will disable GIF and VIF processing for x frames out of (x + 1). If we set the emulator at frame skip 10, Atelier Iris runs at 50 "fps" during the map screen, while Castlevania runs at 10 during the main game screen. That correlates with the 2 types of slowness I've been talking about above. I also revamped the input handler so that the bindings can be configured in the UI and so it can work with joysticks. I also added support for the analog sticks in iop:PADMAN : we can now move the character normally in Castlevania. I'm still not exactly sure about what I'm going to attempt next... I think I'm going to try to make another game work to get more data about what can clog the CPU / VPU and maybe fix more of the broken things. |