The above video goes away if you are a member and logged in, so log in now!
PS1 booting from PS2 Hard Drive Theory
PS1 booting from PS2 Hard Drive Theory –
Hi i'm not a total noob, but my programming skills arent up to the task of testing this theory.
I know you've heard this all before a million times and before you shoot me down, please take the time to consider this approach and i apologise if wiser minds than mine have considered and rejected it, but of all the theories about PS1 booting i've read on various forums i've not come across this..
I am thinking of a 2 pronged approach to booting PS1 backups/ISO's from the PS2 hard drive and overcoming the hardware logistics with a method that has been mentioned before in a few posts as being exploited I think by Konami.
Before I start please feel free to stop if my understanding of the PS1/PS2 hardware layers in the PS2 are completely arse over tit, but i've tried to read up as much as i can before posting this and i think i've got my facts right.
- I think i'm understanding that the PS1 is a separate system inside the PS2, in essence the PS1's chips embedded into the PS2 motherboard as a separate system, its not done in software like the PS1 emulator on the PSP, when a PS1 disk is inserted into the drive the PS2 O/S calls the actual PS1 "inside" into action and it takes over.
- As such the PS1 hardware cannot "see" the PS2 and for all intents and purposes it does not exist to the PS1, therefore this PS1 hardware cannot access the PS2 libraries for memory/hard drive and does not share the same cd-rom controller as the PS2.
- I believe it is also true that the PS2 cannot access processor functions of the PS1 subsystem, but that certain games (by Konami) have proved that the PS2 O/S can at some level read and utilise aspects of the PS1 subsystems memory, I'm not sure if this is some form of shared ram or a crossover that has been exploited.
- The main issue seems to be that because the PS1 cannot see the hard drive we cannot boot PS1 games from an ISO or spoofed partition by intercepting requests to the Cd-drive and passing them to the hard drive..
- That when the PS1 subsystem is called into action the PS2 hardware enteres a NOP or WAIT state and is still functional in the background, ready for reset/reboot or crash state of the PS1.
Ok... Here goes..
My approach calls for this shared access of memory to be utilised as a method of passing data between 2 memory resident programs.
Part one would use a memory resident PS2 program to monitor the shared PS1 area of ram that the PS2 can see, only a small area of RAM would need to be reserved and this program would access data from the hard drive and "feed" it to this shared RAM, I call this RAM1/RAM2
Part two would run via the independance exploit and be running on the PS1 side, this second memory resident program would be intercepting CD calls and writing sector requests to this small area of shared RAM1 and reading data from RAM 2 and passing it back to the cd controller.
So we need to get the PS2 to call the PS1 subsystem into action in the same way as inserting a PS1 disk does at bootup, but instead of entering a wait state our resident PS2 code askes the PS2 subsystem to continue running with no output to screen and we use our resident code to access the shared ram RAM1 and RAM 2... this code only needs to read be able to read and write to RAM and read from a hard drive ISO or a raw dump of the CD image. Perhaps the trigger for starting the PS1 subsystem could also be part of it..
The PS1 system kicks in and the independance exploit triggers the PS1 monitoring intercept resident code which watches the CD-drive, as data is requested from the drive, the PS1 intercept code writes the sectors required to this shared RAM1.
The PS2 code sees data in the RAM1, reads the required sectors from the hard drive ISO and places this data back into the shared ram at RAM2.
The PS1 code checks for and then sees the new data in the RAM2, takes it and substitutes it for the cd call and feeds it back to the cd-data request.
The PS1 belives it is reading from the cd-rom when like an ISO loader its getting its data from ram, the speed of the hard drive should allow us to pass small amounts of data at a high rate using a very small portion of this shared ram, hopefully we can have enough to create a small buffer, though from my understanding of read/write speeds the cd-read speed should be tiny compared to the speed we can pull data from the hard drive and write it to RAM..
Ok thats it.. sorry it was such a long read..
Is this feasible/does anyone really care enough about PS1 games from HD to try to make it work, has anyone actually managed to read this shared ram via homebrew..
Once again, apologies if i'm talking out my arse, its 6am and i just spent about an hour mulling it over before being brave enough to post..
Don't worry, the people who get shot down like noobs are the people who just say "How do I get my PS1 romz to work on hdl lol". We all WANT to run PS1 games from the hard drive.
I don't see how it's possible to get the PS2 to run both your PS2 memory-managing code and the PS1 game code at the same time. I'm no expert on PS2 architecture either but I don't think it's something where you can just launch a PS2 thread and have it run a PS1 thread. After all, there isn't a modern OS in there. All it needs to do is run game code.
Also, since I assume you're running from a PS2 disc how do you intend to "kick in" the PS1 system? The system already sees it as a PS2 disc and I don't think you can change that on the fly.
And how is the PS2 code supposed to know what parts of the ISO to stream from the hard drive? So not only do you need both PS2 code and PS1 code running on the PS2 at once you also need them to be able to talk to each other.
I just don't think it's possible. Good musings, though.
The best bet is to have one of the guys with the original PS2 HDD and original PS1 games running off the HD to make a dd of their HDD and post it somewhere so we can look at how it’s done.
I just assumed you mount the PS2HDD as 2ndary Master, drive letter might have to change depending on jumpersettings and sequence on the ATA cable.
- Anyone with an original PS2HDD and a playable PS1 game installed needs to unmount the HDD from the PS2
- Mount the PS2HDD in a PC preforably a Linux machine as my next line is Linux/Unix
- dd if=/dev/hdc of=/tmp/myPS2HDD.iso
- ( Wait for a while )
- Upload /tmp/myPS2HDD.iso to a place where someone with the knowledge can download it
The way i envision it is to have the PS2 start up the system with Ulaunch or some other loader, launch the trigger + memory modifier HD copier into memory and leave it running as a PS2 thread.
Originally Posted by Perseid
The trigger boots a PS1 homebrew that creates a PS1 thread to do the memory monitoring and CD-intercepts and once this thread is running to copy enough PS1 code from the HDD to start the game.
We know people have created homebrew booters for the PS1 or multidisk loaders, we just need to get the game started and the PS1 mode "switched on"..
Once the game is started, the intercepts kick in and the PS1 asks for the next piece of data from the CD
The PS1 thread intercepts this request, writes the sectors of the cd requested to RAM1.
The PS2 thread is continously monitoring RAM1, it goes and reads these sectors from the HDD iso and writes the data back to RAM2.
The PS1 meanwhile is continuously checking RAM2 for data, when it sees it it feeds this data into the CD-buffer and the PS1 believes it has got the data from the disk..
The 2 threads dont have to interact, all they have to do is monitor and copy data.
Lets say it happens like this, the game boots and the PS1 wants to read a file from sectors 1-10 of the disk. The PS1 intercept catches this and writes 1-10 into RAM1.
The PS2 intercept thread sees this 1-10 has appeared in RAM1 so it takes these values, goes to the ISO and copies the data from 1-10 into RAM2.
The PS1 thread sees the data has appeared in RAM2 and copies it back to the CD-buffer, the PS1 gets sectors 1-10 as requested and processes them and asks for the next bit of data.
The PS1 and PS2 threads dont interact as such, they just check for data in the shared RAM and act on it individually when it appears.. They dont even know the other exists, all they need to know is is their data in RAM1 and RAM2 that need acting on.. each does its own thing..
And we Repeat..
The only obsticles i see is that the PS2 subsystem needs to be running at a low level while the PS1 system has been triggered for this PS2 thread to work. If the PS2 system shuts down completely when the PS1 is in action we're ****ed..
We also need a way like you say of triggering the PS1 system to kick in AFTER our PS2 thread has become resident.
I've seen that you can use Ulaunch or even SMS to boot a PS1 game by exiting back to the browser. Perhaps we use a swap disk trick to start the PS2 with ulaunch, run the PS2 trick, swap to a special modified PS1 disk and exit back to the browser and start the PS1 with our PS1 thread and booter..