Worklog PS2IO - A new loading method based on old knowledge

Joined
Apr 12, 2017
Messages
194
Likes
130
Location
Canada
So here it is, I want to develop a way to load games at full speed from backup media in the PlayStation 2. The name I've chosen is in reference to a similar, but unaffiliated tool designed for the PlayStation 1 that allows games to be loaded from an SD card http://ps-io.com/

The design will likely incorporate a two prong attack if you will, the first will be a board that contains a 16-bit parallel bus bridge to whatever storage media would be the most viable. The second will be an app running through the use of FreeMcBoot that enables the system to interface with the aforementioned board and initiate the necessary operations within the PS2 system to run the game software.

These are the lines that feed the game software into the system, it's 16-bit parallel



They are also all present in an unused expansion port on the bottom of the PS2 board, which is where the device will connect. Photo of connector soldered to motherboard coming soon

By the looks of things this is not new territory I'm exploring, several devices seem to exist that accomplish the same goal through slightly patchy means, and the use of this port was very likely intended by the OEM to be an expansion port of some description. Now I intend to use to all that was intended, and more
 
Last edited:
Joined
Apr 12, 2017
Messages
194
Likes
130
Location
Canada
I'm messing around with the idea of working this into OPL because why reinvent the wheel on PS2 DVD drive data syntax when they've pretty much got that stuff figured out, but that's not what I need to worry about at present. I think the best way to do this will be with SATA drives, so I took my current designs for the IDE bridge converter and am working them in as the storage interface (I am not married to this concept though, if I can interface the sata drive directly then all the better). What is needed now is a chip that can communicate with an IDE bus and communicate with the host system in 16 bit parallel. I realize that due to the obsolete nature of both of these standards it may be a bit of a tall order to find a chip designed expressly for this purpose, so an FPGA will likely need to be implemented. I'm open to any suggestions
 
Last edited:
Joined
Apr 16, 2016
Messages
68
Likes
118
The only expansion port I can find on my PS2 is the one my network adapter is plugged into. These official network adapters have a PATA/IDE port for (now old) Hard drives to plug into and there is even a version of FreeMCBoot for it.

Was this the port you were referring to? Are you trying to make your own adapter from scratch?
 
Joined
Apr 12, 2017
Messages
194
Likes
130
Location
Canada
I just had an epiphany. I don't need to break new ground here, and I don't have to design a custom interface or chip.
The device already exists.

Look:
This is the main parallel data bus:
PS2 data BUS.png


And this is the official PS2 network adapter data bus:
hdd chip control.png


To save you having to look up and down at the two images to see what I'm talking about, the data lines are identical.
The network adapter ones have the 'C' in front because the device is invoked by CCS9, as opposed to CS9, which is the same kind of signal, and is sent through the audio DSP, but what if I just wired it into the main bus on CS9, and invoke it through DEV9..

I'm gonna design a board to test this, I'd just need to use a modified version of OPL that uses a CS9 signal instead of CCS9 to select the CXD9731GP
 
Last edited:
Joined
Mar 17, 2016
Messages
80
Likes
49
I just had an epiphany. I don't need to break new ground here, and I don't have to design a custom interface or chip.
The device already exists.

Look:
This is the main parallel data bus:


And this is the official PS2 network adapter data bus:


To save you having to look up and down at the two images to see what I'm talking about, the data lines are identical.
The network adapter ones have the 'C' in front because the device is invoked by CCS9, as opposed to CS9, which is the same kind of signal, and is sent through the audio DSP, but what if I just wired it into the main bus on CS9, and invoke it through DEV9..

I'm gonna design a board to test this, I'd just need to use a modified version of OPL that uses a CS9 signal instead of CCS9 to select the CXD9731GP
If this works.... How the hell did everyone miss this O.o

Can't wait to see the results :)

OT:
Why are certain words being hyperlinked on here? I've noticed "test" and "system" today... Maybe @Noah can shed some light?

EDIT: to be clear, I did not hyperlink those two words...
 

Noah

retired
.
.
Joined
Jan 16, 2016
Messages
1,969
Likes
2,567
Location
The World Wide Web
Portables
OT:
Why are certain words being hyperlinked on here? I've noticed "test" and "system" today... Maybe @Noah can shed some light?

EDIT: to be clear, I did not hyperlink those two words...
Wiki automatically hyperlinks article titles for convienence. It's going to be launched real soon so I'm going to keep it enabled for now unless it's a feature we find annoying in the future in which case I'll disable it for the entire forum.
 
Joined
Apr 16, 2016
Messages
68
Likes
118
I just had an epiphany. I don't need to break new ground here, and I don't have to design a custom interface or chip.
The device already exists.

Look:
This is the main parallel data bus:


And this is the official PS2 network adapter data bus:


To save you having to look up and down at the two images to see what I'm talking about, the data lines are identical.
The network adapter ones have the 'C' in front because the device is invoked by CCS9, as opposed to CS9, which is the same kind of signal, and is sent through the audio DSP, but what if I just wired it into the main bus on CS9, and invoke it through DEV9..

I'm gonna design a board to test this, I'd just need to use a modified version of OPL that uses a CS9 signal instead of CCS9 to select the CXD9731GP
So if I am understanding you post correctly the bus on the back that the hdd/network adapter uses is the same as this one? Or does this bus have the same pinout but is faster?
 

clippy

.
Joined
Jul 6, 2016
Messages
3
Likes
3
diagram.png
Essentially what he wants to do. The CXD9731 is on board on the scph 7000x boards, which is why the IDE hdd mod works on this specific revision. Seeing how the connector in the previous post is also on other versions of the board (although it seems to have different pinouts depending on version), this would work on all versions of the ps2, and enable you to connect an IDE hard drive to them. This chip is also the same chip used in the network adapters for the fat ps2's, so you would have to cannibalize the chip from there for other revisions for example the 7900x which has a way smaller motherboard, but currently no support for loading from IDE hdd's due to not having this chip on board.

This is of course assuming that the CXD2955R doesn't do anything with the bus signal passing through it.
 
Last edited:
Joined
Apr 12, 2017
Messages
194
Likes
130
Location
Canada
This is of course assuming that the CXD2955R doesn't do anything with the bus signal passing through it.
From what I can tell it just handles the audio, but it's not even present on the 79001, on it the audio processing is handled by the IOP/RAM/CPU combo
 
Joined
Apr 12, 2017
Messages
194
Likes
130
Location
Canada
And actually the signal sent from the IOP in the OLD version is still CS9C, even though functionally its more like CS10, but no such pin exists in the system, and oddly enough CS8 is present but unused.
 
Last edited:
Joined
Apr 12, 2017
Messages
194
Likes
130
Location
Canada
Okay, so I've decided that this device would be much better served on the 79001, so I'm going to develop it for that platform. To that end I've traced the parallel data points as far as I can based on the BIOS chip. The only points I have left to trace are CS9, WAIT, INT9, DACK9, DREQ9, and RT. The Image below shows my current progress on the port pinout

79001 PARALLEL BUS.png


The ones marked with an I are the possible candidates for the above mentioned pins, I just need to figure out how to initiate them so I can trace them. So how do I initiate individual syscalls?

EDIT: I just found RST, and SRST, that only leaves 6 more to find!!
 
Last edited:
Joined
Mar 17, 2016
Messages
80
Likes
49
Okay, so I've decided that this device would be much better served on the 79001, so I'm going to develop it for that platform. To that end I've traced the parallel data points as far as I can based on the BIOS chip. The only points I have left to trace are CS9, WAIT, UBE, RST, SRST, INT9, DACK9, DREQ9, and RT. The Image below shows my current progress on the port pinout


The ones marked with an I are the possible candidates for the above mentioned pins, I just need to figure out how to initiate them so I can trace them. So how do I initiate individual syscalls?
Usually syscalls are called via an instruction. Not sure for MIPS, but I'd imagine it's the same. I'd recommend reading some MIPS docs to figure out the specifics
 
Last edited:
Joined
Mar 17, 2016
Messages
80
Likes
49
doing a bit of reseach, it seems that you can call syscalls with an assembly instruction called "syscall". You place a value in a specific register to tell it which syscall you want to call, then execute the instruction. Not sure which reg it needs to be put into, but I did find some syscall documentation here: http://users.neoscientists.org/~blue/ps2syscalls.txt

I'll do a bit more research and see if I can come up with some pseudo code for you :)
 
Joined
Apr 12, 2017
Messages
194
Likes
130
Location
Canada
Thanks for looking into this for me, I admit to being a little green in this area. Never the less I was thinking that the PCSX2 developer community might be of some assistance. Their emulation platform is incredibly well designed, and has an unprecedented level of compatibility thanks to the fact that they fully emulate the PS2 system down to every component, so surely one among their number must know the DEV9 command register, in fact HDD emulation through DEV9 plugins is a frequent topic of discussion for this suite. So I hope they're willing to give the time of day to someone developing on legacy hardware.

Also was thinking about ulaunchELF. What commands does it make when you tell it to try and read from HDD0?
 
Joined
Mar 17, 2016
Messages
80
Likes
49
Thanks for looking into this for me, I admit to being a little green in this area. Never the less I was thinking that the PCSX2 developer community might be of some assistance. Their emulation platform is incredibly well designed, and has an unprecedented level of compatibility thanks to the fact that they fully emulate the PS2 system down to every component, so surely one among their number must know the DEV9 command register, in fact HDD emulation through DEV9 plugins is a frequent topic of discussion for this suite. So I hope they're willing to give the time of day to someone developing on legacy hardware.

Also was thinking about ulaunchELF. What commands does it make when you tell it to try and read from HDD0?
Looks like all of the code for the dev9 stuff is actually right in the homebrew ps2sdk...

Particularly, the code in here: https://github.com/ps2dev/ps2sdk/tree/master/iop/dev9

Looks like there's a "libhdd" that uLaunchELF uses, the library has some functions to check for an HDD and read from one if present. I don't think what you want is system calls here, just code that involves dev9 :)

So, what exactly do you need? I guess I get from the HW perspective what you want, but not from a SW perspective... You want something that initializes the HDD and attempts to read from it? If so, uLaunchELF actually might be enough to do that for you. I don't believe it checks for an HDD until you attempt to select it in the menu, so it's easy to control when things happen
 
Joined
Apr 12, 2017
Messages
194
Likes
130
Location
Canada
Wow, looks like I've sure got some reading to do!! Seriously though dude great find, the way all these pieces are seeming to just fall together, if I didn't know any better I'd say it was all divine providence!!

So yea, I guess now all I need to do is wait until next Friday so I can start executing my rather lengthy new shopping list for this project. There are still a lot of things to figure out, but I think in light of this newest information that it might be appropriate to start calling this 80 pin port the DEV9 port, because it is becoming increasingly obvious that Sony had plans to reincorporate HDD functionality into the PS2, thats why they only removed it from the design schematic on the 90000 series motherboard. Anyway just a clarification question if I may; in a logic analyzer would an outgoing signal from a pin register as a 1, and a pin that accepts an incoming signal, would it register as a 0?
 
Top