What's known about the VME, now?
What's known about the VME, now?
Has anybody researched into this yet. Any new info found? Can, we, as devs programme the VME?
I have looked a bit into it, while looking at Mebooter prxs.
First, VME is a FPGA-like reprogrammable processor, which is reprogrammed by the PSP operating system, optimizing the decoding of the UMD video or audio formats...
We theorically CAN reprogram it, IF only we understood how the FPGA architecture works there. The following is from the mebooter_umdvideo.prx:
me-image_0000.dat is the netlist (the connections to do between the logical blocks. (to confirm?)
me-image_0001.dat is the program which will be run onto the Vme.
The me_init functions is simply an assembler functions which ends by:
This makes a jr to 0x88380000 and starts the application in Vme.
I don't think there is MUCH more info about it, except this. Probably you can find the specs of Vme in groepaz's docs.
First, VME is a FPGA-like reprogrammable processor, which is reprogrammed by the PSP operating system, optimizing the decoding of the UMD video or audio formats...
We theorically CAN reprogram it, IF only we understood how the FPGA architecture works there. The following is from the mebooter_umdvideo.prx:
Code: Select all
int F0_StartModule(void){
#define hw_addr1 0xbfc0005c
#define hw_addr2 0xbc100040
#define hw_addr3 0xbfc00700
#define me_boot_addr 0xbfc00040
//copies the whole me_init function to the Me boot address.
memcpy(me_boot_addr, &me_init, 0xc0);
*hw_addr1 = *hw_addr1 | (*hw_addr2 & 0x0003);
//Decompresses a gzipped resource containing me-image_0000.dat onto the memory.
if (sceKernelGzipDecompress(0x88300000, 0x00080000, 0x00000370, 0) < 0) return 1;
//Decompresses a gzipped resource containing me-image_0001.dat onto the memory.
if (sceKernelGzipDecompress(0x88380000, 0x00080000, 0x0000AD20, 0) < 0) return 1;
sceKernelDcacheWritebackInvalidateAll();
_sync();
sceDdrFlush(4);
*hw_addr3 = -3;
sceSysregMeResetEnable();
sceSysreg_driver_Unkonow_44f6cda7();
sceSysregMeResetDisable();
sceSysregVmeResetDisable();
sceSysregAvcResetDisable();
while (*hw_addr3 != -4){}
*hw_addr3 = 0;
return 1;
}
me-image_0001.dat is the program which will be run onto the Vme.
The me_init functions is simply an assembler functions which ends by:
Code: Select all
lui r26,$8838 ;000001A8[3C1A8838,'8..<']
lui r29,$8840 ;000001AC[3C1D8840,'@..<']
addiu r4,0,$0 ;000001B0[24040000,'...$']
lui r5,$8830 ;000001B4[3C058830,'0..<']
lui r6,$0008 ;000001B8[3C060008,'...<']
jr r26 ;000001BC[03400008,'..@.']
nop ;000001C0[00000000,'....']
I don't think there is MUCH more info about it, except this. Probably you can find the specs of Vme in groepaz's docs.
check out http://igsoft.free.fr/m/ and maybe add some info from it to docs :)groepaz wrote:cheers, no...no info at all in my docs yet... and i dont have any hope on reversing the fpga related stuff either, its pretty much impossible (thats the nice thing about fpgas afterall)