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' able to boot.
Posted on 2005-12-14 00:00:00
Implemented "GsSetIMR", "EnableIntc", "AddIntcHandler", "WakeupThread" system calls.

Modified some parts to fire a VSYNC interrupt each time the bit for this thing in the CSR is written. The interrupt thing isn't totally correct as it seem to screw the program counter if we use a different timing... So that'll require some work later.

Expanded the current interrupt handler to be able to call the registered INTC channel 2 handlers.

With those, it goes a bit further, but some more problems surfaced.

First, the program is writing some stuff in the SPR (scratch pad RAM) area. This area is accessible through virtual memory addresses 0x70000000 ~ 0x70003FFF, but with the current memory address translator, it conflicted with the hardware registers area since all memory addresses were ANDed with 0x1FFFFFFF to obtain the physical counterpart. I had to tweak the memory translation function to take this particular case in consideration.

It DMAs some stuff to the GIF, but in some cases it uses the source chain DMA mode which wasn't supported. I started the implementation of this mode and I added support for the "END" and "CNT" DMA tag IDs. This seems to be fine, but now the problem seems to be the GIF emulation. The current implementation doesn't play very well with what the DMA feeds to it because it's not very well implemented. I'll probably rewrite most of this part tomorrow.

Also, some textures seem to be used later on, but I couldn't really check what they were since they are 8-bits ones...

Make 'Ys I & II Eternal Story' able to boot.
Posted on 2005-12-13 00:00:00
Implemented instruction MTC0.

Completed the rewrite of the interrupt handler for the DMAC stuff. Everything seems to still work fine after testing with other demos.

Implemented "DisableDmac" and "RemoveDmacHandler" system calls. Fixed some stuff too in "EnableDmac".

Added a panel for the SCU (COP0) in the register view window in the debugger.

Tomorrow: VSYNC interrupts.

Make 'Ys I & II Eternal Story' able to boot.
Posted on 2005-12-12 00:00:00
Started to cleanup/rewrite the interrupt handling stuff. This time, instead of having the interrupts handled by some high level/native routine, the processing will be done by an handler written in MIPS assembly that will be executed by the virtual machine, kind of how they would be handlded if the BIOS would be there. Writing this handler is a bit tedious, but I should be done making what was working before work tomorrow.

Make 'Ys I & II Eternal Story' able to boot.
Posted on 2005-12-11 00:00:00
Tidied up the OS stuff a lot and added basic threads support with semaphore wait and signal. Even with that, it doesn't make the main thread go to a different place.

Tomorrow, I'll work on tidying the current interrupt handling stuff (implement RemoveDmacHandler, DisableDmac) and add support for the vertical retrace interrupt. This should allow it to go a bit further.

Make 'Ys I & II Eternal Story' able to boot.
Posted on 2005-12-10 00:00:00
Fixed system call "EnableDmac" that was writing 1 into the mask value for the specified channel even though this mask bit was already set. That's what was causing the interrupt to be disabled.

Fixed the return value of function "Initialize" of the LOADFILE module.

Implemented instruction POR.

Added a stub for the SYSMEM IOP module that returns a dummy pointer upon the call of its "Allocate" function.

Now, it changes the resolution of the display, but it gets stuck waiting for a memory value to change. Probably waiting for a vertical sync to trigger its interrupt handler.

Tomorrow, I'll try to make a list of unimplemented system calls that this program call, and I'll investigate a bit more the hanging problem.

Make 'Ys I & II Eternal Story' able to boot.
Posted on 2005-12-09 00:00:00
I've cleaned up the custom system call stuff and added a little bootstrap for custom ones. This required the implementation of the ERET instruction.

I've also added the "GetMemorySize" system call.

If we let the thing run right now, it hangs up at binding an IOP module. The problem isn't really with the SIF protocol, or the functions used because they are exactly the same as the ones the demos were using. The problem is that the DMA interrupt is masked for some reason and the SIF response packet cannot be received normally.

I haven't thought about the threads yet, but only one thread is being created, and it doesn't seem to do much, so I dunno if it's worthwhile to go and implement them for the moment.

Tomorrow, I'll try to find out why the DMA interrupt is being masked.

Make 'Ys I & II Eternal Story' able to boot.
Posted on 2005-12-08 00:00:00
Implemented instructions PADDUW, MTHI, MTLO1, MTHI1, MTSAH, ADDA.S, CTC1. All of these instructions are used to reset the various registers.

PADDUW caused me some trouble since there's no support for saturation add/sub operations for 32-bit words in the x86 instruction set.

There's some problems with the PS2OS system now though:

- First, the program uses the "SetSyscall" system call, that's used to change an entry in the OS system call table and used to call a custom system call using the SYSCALL instruction. I implemented the "SetSyscall" system call, but it uses an hack with the recompiler to force a change of PC address which I don't really like. It also has a little problem with the return address.

- The program also uses a custom system call that searches for a specific value in the BIOS memory space. The value it looks for is the address previously set custom system call address. I don't really know why it does that, but I needed to store my custom system call table in my designated BIOS memory space so that the lookup work correctly.

- The program also seems to create a thread. They aren't supported right now and I don't know how I'm going to support them.

Maybe it would be the time to make the PS2OS system a bit better. I was thinking about writing some MIPS assembly routines to support the harder to support features of the BIOS, like custom system calls, interrupt handling and threading. This solution would also work well for keeping all the state of the OS in the PS2 RAM, something that seems to be required by this program. Well, I'll ponder this a little bit and see what I can come up with...

Make 'Ys I & II Eternal Story' able to boot.
Posted on 2005-12-07 00:00:00
Completed the parsing of the 'SYSTEM.CNF' file to find the path of the executable to load.

Also completed the "boot from cdrom0" functionality.

Fixed some bugs in the ISO9660 module while I was trying to make the previous thing work.

Now we can begin to work on getting the executable to run. There's some unimplemented instructions right at the beginning that I'll implement tomorrow.

With the changes I've made today, it reminded me about having some code to display the name of the executable in the window title bar. I'd like to do this before finishing this development.

Make 'Ys I & II Eternal Story' able to boot.
Posted on 2005-12-06 00:00:00
The goal of this development is to make this game get at least to the point where we're being shown the memory card loading status screen. After this, there's a movie playing but I don't know if it's played using the IPU. So the choice of going further will depend on the difficulty of being able to play this movie.

Today, I've integrated the ISO9660 disk image support (*.iso files) code into the emulator code base and completed it to be able to find and obtain "file handles" from the image. I know DVDs are guaranteed to offer a UDF file structure and not necessarily an ISO9660 one, but the DVD I'm working on right now has the ISO9660 file system and I already had code written to support this file system. If need for the UDF file system arises, I will add it at that time.

Next thing to come is to be able to read and parse the 'system.cnf' file off the cdrom0 device and load in the ELF executable indicated in this file.

I'd also like, in the context of this development, add a little configuration dialog that will allow users to change to which virtual device (directory, disk image, DVD-ROM device) each FILEIO device (mc0, host, cdrom0) is associated with.

Make 'Lobotomia by No Recess/CONDENSE' work.
Posted on 2005-12-05 00:00:00
Finished the new configuration/settings system.

Added this flag to control whether the stdout/stderr output from the PS2 is written to a file or not.

I don't know if I'll change the code of CThreadMsg to use CSemaphore since it's a bit touchy.

Nevertheless, I should be starting a new development tomorrow depending on what I decide about the completion of this one.

<< Older Log Entries Newer Log Entries >>