![]() |
![]() |
![]() |
![]() |
![]() |
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 'Ys I & II Eternal Story' playable.
Posted on 2006-01-27 00:00:00 |
Wasn't able to do much these past couple of days. I worked to get the color space conversion to work correctly in my experimental MPEG-2 decoder, but I'm having some trouble decoding some other bit-streams that have an "interesting" I-picture at the beginning. Tomorrow, I'm going to work on finding out the cause of the decoding problems.
|
Make 'Ys I & II Eternal Story' playable.
Posted on 2006-01-25 00:00:00 |
Added the macroblock type (P-picture) VLC table support to the VDEC command.
With this, it's able to decode a second picture from the bit stream. After decoding those 2 pictures, the library uses the CSC (color space conversion) command on the first picture data to obtain RGB32 values. I'll be working on adding this in my experimental MPEG-2 decoder first, and I will then implement this command into the IPU emulation module. |
Make 'Ys I & II Eternal Story' playable.
Posted on 2006-01-24 00:00:00 |
Added support for reading the IPU_TOP register.
Fixed a little code generation bug for PSUBW on the SSE target. Implemented instructions PMINH, PMAXH, PPACB. PPACB was a bit annoying to implement since there's no direct equivalent on the x86. The instruction closest to it is PACKUSWB which does the same except that it clamps the word in a [0, 255] range instead of taking the 8 least significant bits. It was also a bit annoying to get it work on the SSE target because of the 64-bits size of the operands. These instructions were used in a routine that clamps the IDCT output in a [0, 255] range which it executes after 2 macroblocks are decoded. If I leave it running, it'll ask the IPU to decode a variable length code for the macroblock type for a different picture type than I. I'll be checking this tomorrow. |
Make 'Ys I & II Eternal Story' playable.
Posted on 2006-01-23 00:00:00 |
Added the accumulation of decoded/processed Y/Cr/Cb block data into the out FIFO.
Added the handling of the DMA channel 3 transfer (fromIPU) to transfer the blocks from the FIFO to the RAM/SPR. The basic handling required to execute the BDEC command should be complete now. What it should theorically do afterwards is keep sending this command till the first frame will be fully decoded. It should then after use the unimplemented instructions I've encountered previously to saturate the output of the IDCT. So, I'll be stepping through the code tomorrow to see which thing is going to need to be implemented next. |
Make 'Ys I & II Eternal Story' playable.
Posted on 2006-01-22 00:00:00 |
Merged some more stuff from the experimental MPEG2 decoder and completed the decoding/processing of the macroblock. Next thing to do is to write all the Y/Cb/Cr data to the output FIFO buffer and handle the DMA transfer that copies the data from the FIFO to the RAM/SPR. |
Make 'Ys I & II Eternal Story' playable.
Posted on 2006-01-21 00:00:00 |
Didn't complete the DCT coefficient decoding as planned today. Initially, I wanted to fork the tables from the experimental MPEG2 decoder into the emulator, but I decided that it would have been useless to do so in case need for change (due to a bug or something else) arises. Maintaining two different versions of the same thing can be annoying.
So I changed the class hierarchy a little bit and moved some tables to the Framework source tree so that both the MPEG2 decoder and emulator can use the same instance of them. I'll go on ahead with the block decoding tomorrow. |
Make 'Ys I & II Eternal Story' playable.
Posted on 2006-01-20 00:00:00 |
Been working on the decoding of the blocks. I added the inverse scan processing and added a temporary IDCT step.
But after testing a bit more, I found a little problem with the decoding an "escape" DCT coefficient VLC code. The MPEG-2 ISO standard says the 6-bits following this code shall be the value for "run" and and next 12-bits the value for "level". But that didn't fit quite well with the bit stream I was testing my code with. After some search I found out that my bit stream was not an MPEG-2 compilant stream but rather an MPEG-1 one. The definition of "escape" is different with this standard (8-bits for "level" instead of 12-bits). There's supposedly a 16-bits variant of this, but I wasn't able to find much information about it. The 8-bits version works fine with the stream I've tested. I'll need to add some bit stream version detection later on, because the standards are incompatible on this precise thing and maybe more. A major difference between an MPEG-1 and MPEG-2 stream is that the MPEG-2 stream is required to have a "sequence_extension" block while the MPEG-1 mustn't have one. I'll be using this difference to detect which type of bit stream it is. The MPEG decoder library running on the PS2 probably uses this too to set the MP1 bit of the IPU_CTRL register properly. After some other minor fixes with the coefficient decoding, my experimental MPEG-2 decoder can succesfully decode all the blocks present in this small test MPEG-1 bit stream. I've tested the movie being played in the game too (which is also an MPEG-1 bit stream), but this one uses some B-pictures with motion vectors, which I haven't bothered to touch yet, and won't work properly. I'm going to leave the experimental decoder for a while and try to add the BDEC command emulation in the the emulator. I didn't do much yet though... Just added the function skeleton of the function that will do the block decoding and added the DC predictor reset functionality. I'll try to get the decoding of DCT coefficients of an intra macroblock working tomorrow. I'll add the post-processing of the block (dequantise, inverse scan, IDCT) afterwards. The test bit stream I've been using is available here. |
Make 'Ys I & II Eternal Story' playable.
Posted on 2006-01-18 00:00:00 |
Added decoding of P-pictures information in my experimental MPEG2 decoder. I was able to see more blocks getting decoded and see that my DCT coefficient VLC table seems to be working right.
Added the dequantisation step. Next, I gotta un-zigzag the dequantised block and execute an IDCT on it. Un-zigzaging isn't a problem, but the IDCT is a bit more. I'll have to find a decent algorithm that does a fast and nice job. I'll be doing some research about that tomorrow. |
Make 'Ys I & II Eternal Story' playable.
Posted on 2006-01-17 00:00:00 |
Been working on decoding the DCT coefficients of a block in my experimental MPEG2 decoder. It's not very conclusive though, because all blocks of the first picture have all thier coefficients, except for the DC one of the luminance channel, set to 0. So, all I'm decoding are end of block codes.
There's two things I can do next. Keep working on the processing of the blocks (unzig-zag, inverse quantisation, IDCT) or check and support the next pictures to make sure my DCT coefficient decoding works correctly. I think I'll go on ahead with the next pictures and check if thier decoding is accurate. |
Make 'Ys I & II Eternal Story' playable.
Posted on 2006-01-16 00:00:00 |
Added support for the "Macroblock Type" for an I-picture variable length code table to the VDEC command.
It now issues a BDEC command which is supposed to decode 4 Y (luminance), 1 Cb (chrominance blue) and 1 Cr (chrominance red) blocks and perform an IDCT (inverse discrete cosine transform) on them. The resulting coefficients are stored in the out FIFO and then transfered by the DMAC through DMA channel 3. This is the second most complicated command of the IPU. I don't know if that's going to take long though... I'll try to have at least the decoding of the DCT coefficients done tomorrow. |
<< Older Log Entries | Newer Log Entries >> |