![]() |
![]() |
![]() |
![]() |
![]() |
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-05 00:00:00 |
Integrated the new scheduler into the threading stuff. Fixed a problem with "WakeupThread" and implemented "RotateThreadReadyQueue".
Now, I should be able to concentrate on getting the IPU work... I've been reading some documentation on the subject and I should be able to start implementing some stuff tomorrow. |
Make 'Ys I & II Eternal Story' playable.
Posted on 2006-01-04 00:00:00 |
Nothing much today... Wrote a linked list class that will be used to schedule the threads using the "round-robin with priority" technique. I will introduce this class into the threading stuff tomorrow. |
Make 'Ys I & II Eternal Story' playable.
Posted on 2006-01-03 00:00:00 |
After further investigation, it seems that the game won't use the FILEIO functions to access the movies as I first thought. What it does instead is seeking to a sector position associated with the movie file on the disk to be able to read the data afterward. So, all seems to be good on this side.
But it still can't go further because there's some problems with the thread scheduling stuff. When the game is in "movie playback" mode, the main game loop isn't used anymore and a totally independent and different loop is used instead. Instead of relying on "WaitSema" and "SignalSema", it uses "RotateThreadReadyQueue" to allow other threads to be executed, but this system call isn't implemented. The implementation of this will probably require a rewrite of the thread scheduling method. Fixed a problem with SIF registers not being loaded/saved from/into virtual machine saved states. |
Make 'Ys I & II Eternal Story' playable.
Posted on 2006-01-02 00:00:00 |
Unified the interfaces of PADMAN and DBCMAN for reporting button states.
Implemented some Deci2Call stuff on which the game seemed to wait on when outputing a string on a TTY device. The movie playing library seems to be started now, but there seem to be a problem with constructing the path to the movie file on the disk. Instead of using the 'cdrom0' device it uses 'host0' with a path probably used during the development step. More about that tomorrow. |
Make 'Ys I & II Eternal Story' playable.
Posted on 2006-01-01 00:00:00 |
This development is the continuity of the previous one. The goal now is to make this game playable. I don't think there's much to do to be able to achieve this, since this game won't probably use any VIF/VU stuff. But it will most likely use the IPU (Image Processing Unit) that's used to help into the playback of the PSS movies.
But the first thing to do is to make the the DBCMAN IOP module report the controller status properly to the PAD2 library. Once that'll be done and that we'll be able to get past the dialog with asks if we want to play without the memory card, the game should start playing a movie. After the playback is finished, we'll probably have seen everything this game will be using, save for some unimplemented instructions. As a parallel task, I'd like to implement that reset functionality discussed in the previous development. This will probably be done at the end. As for today's work, I've been able to implement the basic stuff necessary to allow the game to process the gamepad status succesfully and locate where the button status bits are stored when using the DBCMAN module. Tomorrow, I should be able to unify the interfaces used by the PadHandler class to report the key/button status from the host computer to the IOP modules from the virtual machine. |
Make 'Ys I & II Eternal Story' able to boot.
Posted on 2005-12-31 00:00:00 |
The user interface stuff for binding cdrom0 with a disk image/physical device is now complete. About the "rebinding while running" problem, I thought that reinitializing the ISO9660 object when resetting the virtual machine might be the best thing to do. Resetting would cause all IOP modules to close thier file handles and no references would be kept on the previous ISO9660 object.
So, the idea is that everytime you select the "boot from cdrom0" option, the virtual machine would be resetted. But the reset functionality isn't there yet, and that should be something interesting to add in the context of another development. This is all for this development. It took quite a long time, but it was worth it. For the next one, I'll probably keep working with this game since there wouldn't be too much to do to make it work at a decent level. Probably only some basic IPU stuff and complete the DBCMAN aka PAD2 IOP module to report the controller status... Most 3D games would probably deal with the VIF stuff which I'd rather work on seperately. |
Make 'Ys I & II Eternal Story' able to boot.
Posted on 2005-12-30 00:00:00 |
Implemented missing instructions MULA.S, MADD.S, MSUB.S. Well, only the basic functionality of these instructions (and some other previous FPU instructions) were implemented since they seem to check a lot of stuff related to overflowing and underflowing in reality. But, no one reads the FCSR to check if these flag bits are set or not, so the basic functionality is good for what it needs.
Added a stub for the "AllocSysMemory" function of IOP module "SYSMEM". I rechecked the function that calls "SetVSyncFlag" and found out that it passes 2 addresses from its stack frame to it. It then loops waiting for the word value at the first address to be different from zero. So, I got rid of the patch and made "SetVSyncFlag" write a word value of 1 in the first address. It seems to work fine with this now. During the time this peculiar system call is called, I saw that the program sends some non-system commands (0x4000) to the SIF manager on the IOP side. I think it tries to communicate with a module on the IOP and that this module has an handler registered for this command number. I have no clue why it doesn't use normal RPC calls instead, so it's a bit wierd. But I think this is all related to the sound stuff though, which I have no interest in for the moment. The only thing remaining is the ability to bind the "cdrom0" device with a physical device. That's coming tomorrow. |
Make 'Ys I & II Eternal Story' able to boot.
Posted on 2005-12-29 00:00:00 |
Implemented the necessary CLUT support to display the colors correctly for the 2 screens.
I've seen some unimplemented instructions pass by that I'll probably be working on tomorrow. And I still gotta fix the "SetVSyncFlag" problem. After those and finishing the cdrom binding dialog it should be all for this development. |
Make 'Ys I & II Eternal Story' able to boot.
Posted on 2005-12-28 00:00:00 |
Tweaked the thread/semaphore stuff a bit so that a thread waiting for a semaphore gets woken up when another thread calls "SignalSema". Also implemented system calls "TerminateThread" and "DeleteThread". These fixes to the OS made the program able to go a bit further.
Made some changes in the "CDVDFSV" IOP module emulation: implemented the "init", "start", "seek" and "read" commands for the streaming function of this module. This allowed the program to go even further. Next, there was a call to the system call "SetVSyncFlag" which is supposed to, I think, disable the v-sync interrupt handling from the OS. But I didn't want to play with this for now, so I decided to patch the executable so it doesn't hang at this place waiting for a v-sync interrupt to be asserted without being processed. Then, after fixing the GS handler to be able to display 8-bit textures, some output from the game is now visible. The first screen is the one when the memory card is being checked, and the second one is the one asking if you want to play without the memory card or not. The CLUT (palette) isn't taken in consideration for now, so that's why the stuff appears as grayscale images. This is pretty much as far as I wanted the thing to go for this development. It's not done yet though... I need to support the CLUT and get rid of the earlier patch. |
Make 'Ys I & II Eternal Story' able to boot.
Posted on 2005-12-27 00:00:00 |
Made the filename of the executable show up in the title bar of the emulator.
Started to work on the dialog that will allow the configuration of the various virtual file system bindings. Much of the user-interface code is done, but the connection with the emulator isn't complete: First, I wanted to be able to support changing the cdrom0 binding in the emulator after confirmation by the user, but this is getting a bit problematic to support because of the way FILEIO file handles for the cdrom0 device keeps a reference to the ISO9660 object I want to reinitialize. I also want to be able bind a physical CD/DVD reader, but I'll work on this at the end of this development. The host, mc0 and mc1 devices are also configurable, but those aren't connected at all with the emulator. Added a basic call stack window in the debugger. I did some more work on trying to make the program go a bit further. I was able to identify some more functions and gain, hopefully, a better understanding of how the program seems to work. First, it seems that two memory buffers are allocated: one for sound commands and another one for graphics commands. The way the main loop seems to be layed out is first, reset the screen (clear buffers), update the pad status, process general commands that spawn threads, synchronize CD-ROM read commands, obtain a pointer to the sound command buffer and process it by calling the, what I think to be the, IOP sound module, obtain a pointer to the graphics command buffer and process the commands and finally wait for the next v-sync. The problem right now though is that it doesn't seem to call any game logic code at all. I've been able to localize it, but nothing seems to get called. But I think I found the problem. Seems like there's a problem with the semaphore/threads stuff. I'll be working on it tomorrow. |
<< Older Log Entries | Newer Log Entries >> |