Make 'Ys I & II Eternal Story' playable.
Posted on 2006-02-03 00:00:00
Added support for DMA channel 9 (toSPR) because it was required by the motion compensation code to load the blocks from RAM to SPR.

Implemented instructions MTSAB, PEXTLB, PEXTUB, PSRLH, PCGTH. PEXTLB and PEXTUB were again a bit annoying to make work on the SSE target because of the register length difference.

The program also uses the instruction QFSRV that's supposed to shift a 256-bits word (which is a combinaison of 2 normal 128-bits registers) right by the amount specified in SA (which is set using MTSAB and MTSAH). That's probably used to offset a block horizontally having the two lines of two adjacent blocks stored in the registers. Because it would be a bit annoying to implement right now and because the value of SA used when I came across the instruction was 0, I just implemented it as if it only could do the shift with SA equal to 0. I'll come back to this instruction when the movie will be able to play completely.

Also isolated all the integer VU (MMI) stuff in one seperate module and decided that this module would have its own virtual stack much like the FPU stuff uses it's own stack. I'd also like to isolate all the stuff that generates executable code in a different class than the one that holds the memory space for the instructions, but I'll probably be doing that in the code generator optimization step that I'll undertake later on.

I tried to check a bit the data production problem, but didn't find anything significant for the moment. I'll be investigating on this tomorrow.