![]() |
![]() |
![]() |
![]() |
![]() |
Make 'Ys I & II Eternal Story' playable.
Posted on 2006-02-01 00:00:00 |
Found out the place where the program was noticing itself about the rendered frame. It installs an DMAC handler on the GIF channel which is to be called when the frame display list has been done transferring. So, I added support for interrupts on this DMA channel.
But that wasn't enough to make it go further with the decoding. The interrupt handler for the v-blank line was checking the FIELD bit of the CSR and wouldn't set a memory address that would allow the DMAC interrupt handler to do its job properly without having rendered a frame on both even and odd fields of the screen. So, I made the FIELD bit change its value at each v-blank and that did the trick. Bit of a downside about this new thing is that everything else that the game is rendering seems to take this bit in consideration and that it will increment the vertical position of the primitives by one if rendering on an odd field. Added the motion code table to the VDEC command. Added the coded block pattern value decoding in the BDEC command. Now, the decoding can continue properly... But it's hitting another problem later because it seems to be out of data to work on and no one will DMA any more data to the IPU. But before that, it seems to make heavy use of unimplemented MMI instructions to accomplish, what I think is, motion compensation. I'll be working on implementing the MMI instructions tomorrow. |