|
|
|
|
|
| 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 "bytheway.elf" work.
Posted on 2005-09-22 00:00:00 |
|
Added DIVU. This fixed the problem with the strlen function.
Also fixed a stupid bug in the DMAC module that made the registers not being set correctly. This allowed the demo to start showing some stuff. There's a lot of problem with the rendering though right now as it seems that this demo use both contexts to do its rendering. I'll have to figure out which way is the right one to display the stuff. Also added a menu item to disable/enable the GS logging. I'd also like to support GS state saving in this development too. I'll be posting screen shots tomorrow. |
|
Make "1987.elf" work.
Posted on 2005-09-21 00:00:00 |
|
Fixed the problem with the copper bars sticking on the top of the screen. This was caused by a problem with MOVN and MOVZ not copying all the 64-bit word correctly and also by a bug with BGTZ.
Also splitted the MIPS IV and EE stuff in separate classes for better classification and reusability. Also removed all the useless 128-bits sign-extending and testing from the MIPS IV core. The higher 64-bits of a register is only used by the EE extensions to the MIPS IV core. This is all for this demo. I'm going to start working on another demo(s) tomorrow. |
|
Make "1987.elf" work.
Posted on 2005-09-20 00:00:00 |
|
Added the remaining instructions that were missing after fixing the last problem: MULTU, MULT1, DSRLV, C.LT.S.
The sine/cosine effects are now working on the text and the copper bars. The trigonometric functions are used to make the size of the characters change and also to make the copper bars go up and down. There's still a bug with the copper bars movement that'll have to fix before moving on to another demo/program. I'd also like to reorganize the CPU implementations appropriately. More specifically, I'd like to separate the EmotionEngine stuff from the more "general" R4000 core. I was reading more stuff about the EE CPU and there was a lot of customizations from the original R4000 design, like the lack of doubleword multiplies and divides, lack of double precision and 64-bits sized values instructions in the FPU and the add of a lot of instructions in the SPECIAL2 instruction sub-space, amongst other things. The SPECIAL2 is now called MMI and includes a lot of SIMD like instructions. I'll try to do the reorganization tomorrow. |
|
Make "1987.elf" work.
Posted on 2005-09-19 00:00:00 |
|
Found a problem when executing the __pack_d function in the demo (function used to make an IEEE 754 double precision floating point number). BEQ wasn't checking the high 32-bits of a register, and that caused it to return a bad result. Added higher 32-bits checking for BNE, BEQL, BNEL too at the same time.
This made some other unhandled instructions to appear. Implemented DSUBU. Two more remain (a MMI one and MULTU). |
|
Make "1987.elf" work.
Posted on 2005-09-18 00:00:00 |
|
Implemented very basic texture caching. Previously, I was uploading a texture to the OpenGL texture memory each time I received a TEX0_X register value from the GIF, and the programs seem to specify a TEX0 value for each textured primitive it's sending even if the latest primitive used the same texture. This caused a lot of slow down when a program was sending lots of textured primitives. I just associated a memory address space with a texture now, and I'm checking if the specified texture was already uploaded to prevent unnecessary uploads. This makes this demo run at a more adequate speed than before. Others were also made a bit faster too.
Also added the point primitive since it was using some of them in the starfield. Next, I gotta figure out why the program is doing sines and cosines and fix any problem related to that. I also found a couple of unhandled FPU instructions that appear later that'll need to implement. |
|
Make "1987.elf" work.
Posted on 2005-09-17 00:00:00 |
|
Implemented instructions LDL, LDR, SDL, SDR, DIV, MFLO, MFHI. Also rewritten instructions LWL, LWR, SWL, SWR.
With those new instructions, the demo is showing the scrolling text. The demo is running pretty slow right now though. I tried to disable texture uploading in the GS handler and that seemed to make the thing run a lot faster. So I guess I'll need to add some caching for the textures. I don't know if the text should be doing a sine wave thing though, or if it's the bars that appear later that should be doing the wave. I'll have to investigate that next. Once I figure out and fix that stuff, it should be pretty much all for this demo. |
|
Make "1987.elf" work.
Posted on 2005-09-16 00:00:00 |
| Added instructions LWL, LWR, SWL, SWR. They were a bit complicated to implement due to the stack oriented design of the recompiler engine. The doubleword ones should be interesting to implement as well. |
|
Make "1987.elf" work.
Posted on 2005-09-15 00:00:00 |
|
The infinite looping problem was caused by SLTU that wasn't checking the higher 32-bits of a register. So, 64-bits comparaison was added for this instruction, but this method of implementation wouldn't generalise well for 128-bits. Another thing that makes the full 128-bits support less and less attractive.
Added the MOV.S instruction. I'm working on the unaligned load and store (LDL/LDR, SDL/SDR, LWL/LWR, SWL/SWR) instructions now. And it's causing me a bit of trouble because of the way I've designed the recompiler engine. But I should be able to have them implemented with some tweaks. Expect them done tomorrow. |
|
Make "1987.elf" work.
Posted on 2005-09-14 00:00:00 |
|
Implemented C.EQ.S, BC1F, BGTZ and XOR instructions.
I needed to add the FCSR register to the MIPS context in order to complete C.EQ.S and BC1F. I also added its value in the the FPU register viewer. Maybe something should be done to optimize the value comparaison code... Maybe the steps of setting ebx and edx to 0 and 1 could be skipped somehow... But I don't think the CMOVcc instruction supports immediate operands. BGTZ requires 5 comparaisons to do its job, and most comparaison instructions (BNE, BEQ, etc.) require 4 in order to provide an accurate result. This is because the x86 only supports compares on 32-bits integers and some additional stuff needs to be done in order to give a result that works on 128-bits integers. Maybe taking the high order 64-bits of a register in consideration isn't important... But like I said previously, I can't really be sure for now. Now, it's getting to a point where it stays stuck in a loop. It's certainly caused by a bug in one of the instructions and I'll investigate this tomorrow. |
|
Make "1987.elf" work.
Posted on 2005-09-13 00:00:00 |
|
Cleaned a bit and centralized the keyboard shortcuts to the main debugger window (as it was discussed in the previous log entry).
Implemented instructions (in no particular order): BEQL, BNEL, BGEZL, DADDIU, MOVZ, MOVN. I made some cleaning in the branching stuff while implementing those new branch instructions. Also fixed some sign-extending problem with DSRL. I don't know if I should keep the registers sign-extended to 128-bits or keep it only to 64-bits. The only instructions that I know that use the higher 64-bits of a register are SQ and LQ. Probably should keep it to 128-bits for now. Nothing new is showing yet. But I think it's going to be some kind of sine-wave text scrolling demo. |
| << Older Log Entries | Newer Log Entries >> |