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 'Lobotomia by No Recess/CONDENSE' work.
Posted on 2005-11-23 00:00:00
I changed the way I handle the visible GS image transfers to accomodate the corrected viewport resolution. It's using a textured quad primitive instead of calls to glDrawPixels.

I also removed the fix I made for the line primitives because it wasn't right. I changed it to draw a quad primitive that's 1 unit thick instead. There's some problems with this method though as it seems to render a dashed line instead of a plain one if the slope of the line is high enough. But I'm not going to bother much about lines anymore, since I really doubt they're used that much to fill an area of the screen.

I started working on the unimplemented instructions. The first two ones were some VU macro instructions: CFC2 and CTC2. The routine in which they're used in seems to be used to reset the VU0. I created the necessary classes to handle the VU as a MIPS coprocessor, added some disassembly for these instructions and created some placeholders that do nothing for now as the implementation. I don't think this demo uses the VU at all, so there's no need to bother with them for the moment.

There's some more MIPSIV instructions missing next that I'll be working on tomorrow.

Make 'Lobotomia by No Recess/CONDENSE' work.
Posted on 2005-11-22 00:00:00
I implemented the "viewport resolution according to the Crt register" thingie. It seems to work, except that there's a couple of problems with some demos that use line primitives, point primitives and direct frame buffer transfers.

Because OpenGL seems to only draw 1 pixel points and 1 pixels wide lines no matter what, it kinda screws up if the viewport width/height is greater than the read circuit's width/height since you'd expect the points and lines to be a bit larger than 1 pixel. But the case of points and lines isn't too bad and were fixed by having the line width equal to the viewport width/read circuit width ratio. The points are now rendered using quad primitives instead of point primitives. But the point case still bugs me as the logo in this demo (as shown in this screen shot) still seems to be missing one pixel out of two.


Screenshot #000049


I don't think this is related to the implementation of this new thing, because it seemed to be broken in the previous screen shot too. I've checked if that would have been a problem with the CPU emulation, but everything seems good on this side. So it deliberately draws a point at each even X pixel coordinate. I've checked on the demo video and there doesn't seem to be gaps like those, but the video's X resolution is 384 pixels which could probably wouldn't make it a good source to check this kind of thing.

I'll probably leave this one out for now and fix the direct frame buffer transfer case tomorrow. Afterwards, there's some instructions I'll need to implement.

I also fixed a little bug with function analysis that was introduced when I fixed the multiple program segment loading problem.

Make 'Lobotomia by No Recess/CONDENSE' work.
Posted on 2005-11-21 00:00:00
This little demo is based off a Lightwave Scene Player called "Just For Your Eyes". You can learn a little bit more about this piece of software by visiting No Recess' page. There's also a video showing this demo running on a real PS2 in the download section of this site. It uses some 3D stuff, but the load doesn't seem heavy as scenes doesn't seem to exceed more than 3000 triangles at one time.

I first forked a new version of the Framework and made a backup of the current Purei source code.

I made some changes to the way threads were working in the Framework: Instead of wrapping the pthread interface, I created a new CThread class that wraps and abstracts of thread functionality in the same fashion CSemaphore does with semaphores. Also moved the CSemaphore class to the Framework namespace, something I forgot to do when I last played with this class.

I fixed the ELF loader so it loads all program segments instead of just loading the first one.

This made the program start to show some stuff:


Screenshot #000048


But it doesn't go much further, since there's some missing instructions along the way. The little logo is a bit screwed too.

There's also some other little tasks I'd like to complete at the same time:

- CGSH_OpenGL: Fix resolution problems (should be from CRT register and not read circuit).
- CSettings: Move to a lower level of architecture, registry style access, and allow setting change events.
- CIOP::FileIO: Create a setting item to allow the control of stdout/stderr logging.
- CThreadMsg: Use CSemaphore instead of Win32 Events and make a patch for the deadlock problem in the UI level.

Tomorrow, I'd like to fix the resolution problem and start work on getting the demo getting past the loading part.

Prepare the v0.10 Release
Posted on 2005-11-15 00:00:00
Wrote the documentation that will accompany the binary.

Prepare the v0.10 Release
Posted on 2005-11-14 00:00:00
Finished the integration of XML into the settings file. It won't be of much use though since the only settings available for now are those concerning the debugger, which won't be included in the release.

I've also added some #ifdef's here and there to remove the useless stuff when the debugger isn't present in the binary (debugger settings loading/saving, defined functions for an ELF executable loading/saving).

Prepare the v0.10 Release
Posted on 2005-11-12 00:00:00
Added a basic about dialog.

Started to work on the conversion to XML of the user settings file.

Prepare the v0.10 Release
Posted on 2005-11-11 00:00:00
Created an icon to use in the program using Photoshop. Here's the result:


Screenshot #000046


Here's what it gives when used in the emulator:


Screenshot #000047


Tomorrow's task is to complete the about box and maybe start the XML stuff.

Prepare the v0.10 Release
Posted on 2005-11-10 00:00:00
The CPU frequency measure tool kinda gave me some trouble, but I was able to find another way to get the value.

I'll be able to keep going with the next stuff in list tomorrow.

Prepare the v0.10 Release
Posted on 2005-11-09 00:00:00
The time has come to make the final preparation for the first release of Purei.

Here's the stuff I need to do in order to complete this task:

- Add a little system information dialog that will include some basic information on the CPU and about the system (threads/processes count).

- Add an icon resource to the executable.

- Add an about box.

- Convert the current settings file to an XML format.

- Write some documentation (txt format for now).

- Complete the "About" and "Downloads" sections of this site. Add a counter in the downloads part.

- Compile a binary and test the demos that I've made work and fix the problems if necessary.

- Release the binary and source code.

I'll try to do these tasks in the order I've written here.

As for today's work, I've almost finished the system information dialog. There's just a little problem with detecting the CPU's frequency.

Make "quake.elf" work.
Posted on 2005-11-08 00:00:00
I found a little problem while trying the program on another computer: some of the Quake logo was gnarled and it wouldn't load succesfully. Turned out it was because SSE2 wasn't supported on this CPU... I implemented some check for the CPU type and a worked on an alternative compilation, for instructions that are using the SSE instructions, that uses the 64-bits MM registers instead of the 128-bits ones. The 128-bits code is used if a SSE2 CPU is detected and the 64-bits code is used otherwise.

Also fixed a little problem with branch target addresses in the reflection engine.

I couldn't check if there was missing instructions though, because the SSE problem took me a while to figure out. I'll leave it running during the night and see if there's something missing.

That's probably gonna be all for this development. I'd rather work on releasing something than trying to support the USB input devices. More information on the required tasks for the first release tomorrow.

<< Older Log Entries Newer Log Entries >>