![]() |
![]() |
![]() |
![]() |
![]() |
What is Play! ? |
Play! is a PlayStation2 emulator for Windows, macOS, UNIX, Android, iOS & web browser platforms. For more information about this project please visit the "About" section of this site. |
Compatibility Status |
Fetching compatibility status...
|
Development Log |
Make "Slave of the VU" work.
Posted on 2006-03-01 00:00:00 |
Added the debugging views in the debugger.
Implemented VIF code UNPACK for the V4-32 decompression method. I should now be ready to implement the actual instructions. There's a little problem though with how the recompiler deals with the branches which isn't compatible with the execution mode of the VU. I will need to find a way to deal with this inconsistency tomorrow. |
Make "Slave of the VU" work.
Posted on 2006-02-28 00:00:00 |
Completed the required reflection table entries for the instructions used in this first microprogram. Most of the instructions it uses were already done in the COP VU implementation, so I'll be able to reuse most of this stuff to implement the required Upper/Lower instructions.
But first, I need to add a view changing functionality in the debugger to allow switching from EE debugging view to the VU1 debugging view. I'll try to complete this for tomorrow. |
Make "Slave of the VU" work.
Posted on 2006-02-27 00:00:00 |
Worked a little bit more on the reflection tables for the VU Upper and Lower instructions today. I might have all of the instructions used in this microprogram disassembled for tomorrow.
I'm still not really sure how the VU is supposed to send vertex data to the GS. I've seen that the microprogram uses the FTOI4 instruction to convert the vector to a format that's near to the format used in the GS XYZ2 register, but I don't know how it can generate the actual GIF tags without shift instructions. Anyways, I guess that'll clear itself up once I finish the disassembly. |
Make "Slave of the VU" work.
Posted on 2006-02-26 00:00:00 |
Implemented the VIF commands used by the first VIF packet. It loads a bunch of vectors using the UNPACK command and loads a microprogram using the MPG commmand.
The next VIF packet uses the MSCAL command which is supposed to start the microprogram execution, so I decided to start implementing the classes necessary for the VU1 execution. Most of the basic classes structure is done now, and I've started to fill the reflection tables so I can generate a disassembly of what's into the microprogram memory. I'll be continuing this tomorrow. |
Make "Slave of the VU" work.
Posted on 2006-02-25 00:00:00 |
Implemented instructions VOPMULA, VOPMSUB, VMUL, VADDbc, VRSQRT, VMULq and VADD.
After setting some basic stuff using the VU0 in COP mode, the program starts sending some VIF packets to the VIF1 through DMA. I added the necessary code to store the DMA register writes, process the DMA transfer and delegate the transfer to the VIF class. Tomorrow, I'll start working on the VIF codes processing. |
Make 'Ys I & II Eternal Story' playable.
Posted on 2006-02-24 00:00:00 |
I haven't been able to make any progress on trying to fix the problem that's been plaguing me for the past week. There's no point continuing now, since I don't have any ideas on what the problem could be.
So, I decided to implement a quick patching system that takes its definitions from a file present in the same directory as the emulator executable. I added a patch to prevent the crashing problem when hitting an enemy with the drawback that no particles are visible when colliding with them. But it allows the game to be played, which is the goal of this development. I also decided to forget about the movie crashing bug for the moment. I'll try to come back and fix these two problems once I'll be preparing the v0.20 release though. I also added support for another alpha blending formula in the GS handler which seemed to be only used to blend the clouds when hitting an enemy. I didn't see any difference when playing, so I don't really know if it was useful or not. This log entry will conclude this development. I think I've been able to achieve my goal which was to make the game playable. I didn't know it would have taken that much time... But I think it was worth it. |
Make "Slave of the VU" work.
Posted on 2006-02-24 00:00:00 |
Making this demo work should be a nice start towards getting a basic VU0/VU1 emulation. This demo makes use of both units by using the VU0 in coprocessor mode and the VU1 with the VIF. A screen shot of this demo running is available at this place. Symbolic information was left in the executable which should make debugging easier.
First of all, I fixed a little problem with the decoding of the fields of the BITBLTBUF GS register. Oddly, this program is using an invalid buffer address probably also thinking the field was 16-bits instead of 14-bits. So, I'm not quite sure if my fix is valid for now. The demo doesn't waste too much time and is already using some VU instructions in COP mode. The ones that I know I'm lacking right now are VOPMULA and VOPMSUB. These two instructions together are used to compute the cross product of 2 vectors. I only added them in the reflection tables for now, but I'll have them implemented tomorrow. I also added an history navigation feature in the disassembly window of the debugger that I was planning to add for quite a while now. |
Make 'Ys I & II Eternal Story' playable.
Posted on 2006-02-22 00:00:00 |
Implemented another missing alpha blending formula. The implementation of this one required the use an OpenGL extension (glBlendColorEXT and associated constants) since it is a formula that forces an alpha ratio in the formula itself and make the rasterizer ignore the source or destination alpha values completely. To be more precise:
(FIX / 0x80) * SrcColor + (1 - FIX / 0x80) * DstColor This is used for some transparent effects on the playfield like the clouds (visible on the second screenshot) and also on the lens-flare effect at the beginning of the game. I searched a bit more about the crashing problem too, but I didn't find anything more. My theory is that the objects are being rendered one more time while they shouldn't be. By objects, I don't mean only the particles, but also the character sprites because they seem to suffer a similar problem (they're being rendered one more time over the bounds of thier animations). So, I'm thinking it's probably more related to the main loop than the specifics of the object. I'll keep looking tomorrow. |
Make 'Ys I & II Eternal Story' playable.
Posted on 2006-02-21 00:00:00 |
Couldn't find anything of interest today either... My idea is that there's a bounds check that isn't done for some reason:
I'm pretty sure we can exclude the hypothesis that says that the increment value for the angle is incorrect because this number is not in function of the total step count, so it would probably make the angle value overflow whichever its value is. I also thought it could be number with which the angle value is multiplied by to convert the angle value to a [0, 4096] range, but this couldn't be the case since the step value is 1 and the counter would keep going over the limit value anyways. So, I'll keep investigating on this tomorrow. |
Make 'Ys I & II Eternal Story' playable.
Posted on 2006-02-20 00:00:00 |
Tried to see how the number used to increase the angle value was computed. There's some wierd tidbits to the process, but I haven't studied it thoroughly. I'll continue the investigation tomorrow. |
<< Older Log Entries | Newer Log Entries >> |