Page 1 of 1

SIO Low Level Access

Posted: July 22nd, 2013, 1:02 am
by danhans42
Hi,

Just toying with an idea. Does anyone know how feasable it is to bypass the BIOS calls to access the SIO channel used for the memory cards and controllers? I'm thinking of Spi IO expanders or even a large SPI EEprom for data storage.

The Idea of an IO expander would be pretty cool to allow some GPIO for expansion and playing.

Any ideas?

Cheers

Re: SIO Low Level Access

Posted: July 22nd, 2013, 2:03 am
by Shendo
It can be done, in fact Tails92's SDK is accessing gamepads directly without BIOS.
Get the source and check "pad.c" in src.
You can also check out Martin's awesome PSX documentation which has many things covered,
including SIO communication.

Re: SIO Low Level Access

Posted: July 22nd, 2013, 11:23 pm
by danhans42
Cheers, I shall have a look when I am back at home. This is kind of what I had in mind...

Image
psx_spi_gpio.gif

Re: SIO Low Level Access

Posted: September 5th, 2013, 8:27 am
by legacy
danhans42 wrote:Hi,
SIO channel used for the memory cards and controllers?
SIO means "Serial IO" -> uart (asynchronous)
you probably mean "PAD" channel, which is similar to SPI (synchronous)

and your idea is a good idea!

Re: SIO Low Level Access

Posted: September 5th, 2013, 9:02 am
by danhans42
I know, but look at the CPU the pads use SIO channel 1 which is indeed SPI like,

Re: SIO Low Level Access

Posted: September 5th, 2013, 9:26 pm
by legacy
Is it SONY custom hw and protocol ? I know the PAD signals and protocol from the memorycard point of view, i don't know how the playstation is generating and handling bits, from what i see there is a dedicated hw which simply require a control_status, and a buffer to read/write from/to. So ... i don't know if that hardware is a real SPI (common and standard protocol), or if it is a customized ASIC.

Code: Select all


/*
    from BlackBag/Nagra PSX

    0x1f801040 - unsigned char data;
    0x1f801044 - unsigned short status;
    0x1f80104a - unsigned short cntl;
    0x1f80104e - unsigned short baud; not used???
*/

#define SIO_DATA(x)     *((unsigned char*)(0x1f801040 + (x<<4)))
#define SIO_STATUS(x)   *((unsigned short*)(0x1f801044 + (x<<4)))
#define SIO_CTRL(x)     *((unsigned short*)(0x1f80104a + (x<<4)))
#define SIO_BAUD(x)     *((unsigned short*)(0x1f80104e + (x<<4)))

The CPU is marked as "SONY", mmm :shrug