What's known about the VME, now?

Discuss the development of new homebrew software, tools and libraries.

Moderators: cheriff, TyRaNiD

Post Reply
And
Posts: 4
Joined: Thu Aug 17, 2006 9:54 pm

What's known about the VME, now?

Post by And »

Has anybody researched into this yet. Any new info found? Can, we, as devs programme the VME?
adrahil
Posts: 274
Joined: Thu Mar 16, 2006 1:55 am

Post by adrahil »

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:

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 &#40;sceKernelGzipDecompress&#40;0x88300000, 0x00080000, 0x00000370, 0&#41; < 0&#41; return 1;

  //Decompresses a gzipped resource containing me-image_0001.dat onto the memory.
  if &#40;sceKernelGzipDecompress&#40;0x88380000, 0x00080000, 0x0000AD20, 0&#41; < 0&#41; return 1;

  sceKernelDcacheWritebackInvalidateAll&#40;&#41;;
  _sync&#40;&#41;;
  sceDdrFlush&#40;4&#41;;
  *hw_addr3 = -3;
  sceSysregMeResetEnable&#40;&#41;;
  sceSysreg_driver_Unkonow_44f6cda7&#40;&#41;;
  sceSysregMeResetDisable&#40;&#41;;
  sceSysregVmeResetDisable&#40;&#41;;
  sceSysregAvcResetDisable&#40;&#41;;

  while &#40;*hw_addr3 != -4&#41;&#123;&#125;
  *hw_addr3 = 0;

  return 1;
&#125;
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:

Code: Select all

  lui    r26,$8838                          ;000001A8&#91;3C1A8838,'8..<'&#93;
  lui    r29,$8840                          ;000001AC&#91;3C1D8840,'@..<'&#93;
  addiu  r4,0,$0                            ;000001B0&#91;24040000,'...$'&#93;
  lui    r5,$8830                           ;000001B4&#91;3C058830,'0..<'&#93;
  lui    r6,$0008                           ;000001B8&#91;3C060008,'...<'&#93;
  jr     r26                                ;000001BC&#91;03400008,'..@.'&#93;
  nop                                       ;000001C0&#91;00000000,'....'&#93;
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.
User avatar
groepaz
Posts: 305
Joined: Thu Sep 01, 2005 7:44 am
Contact:

Post by groepaz »

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)
adrahil
Posts: 274
Joined: Thu Mar 16, 2006 1:55 am

Post by adrahil »

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)
check out http://igsoft.free.fr/m/ and maybe add some info from it to docs :)
Post Reply