SPU Isolated Modules Reverse Engineering: Difference between revisions
Jump to navigation
Jump to search
m (→aim_spu_module) |
m (→aim_spu_module) |
||
Line 2: | Line 2: | ||
== aim_spu_module == | == aim_spu_module == | ||
It is used to retrieve the device type, device id, open psid and the pscode from the EID0 data that is passed in. | It is used to retrieve the device type, device id, open psid and the pscode from the EID0 data that is passed in. | ||
=== Debug messages === | === Debug messages === | ||
Line 7: | Line 8: | ||
! colspan="2" | Address !! rowspan="2" | Message | ! colspan="2" | Address !! rowspan="2" | Message | ||
|- | |- | ||
! ? 3.41 ? !! 355 CEX | ! ? 3.41 ? !! 355 CEX | ||
|- | |- | ||
| 0x36f0 || 0x3570 || "(spu)start aim spu module!\n" | | 0x36f0 || 0x3570 || "(spu)start aim spu module!\n" | ||
Line 18: | Line 19: | ||
|} | |} | ||
This messages are DMAed to the ppu if a debug output address is specified. | This messages are DMAed to the ppu if a debug output address is specified. | ||
Line 25: | Line 25: | ||
! colspan="2" | Address !! rowspan="2" | Message | ! colspan="2" | Address !! rowspan="2" | Message | ||
|- | |- | ||
! ? 3.41 ? !! 355 CEX | ! ? 3.41 ? !! 355 CEX | ||
|- | |- | ||
| 0x37e0 || - || Reference tool fallback IDPS | | 0x37e0 || - || Reference tool fallback IDPS | ||
Line 35: | Line 35: | ||
| 0x3c70 || 0x3a20 || AES inverse sbox (16*16 bytes) | | 0x3c70 || 0x3a20 || AES inverse sbox (16*16 bytes) | ||
|} | |} | ||
=== Functions === | === Functions === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Address !! Name !! Parameters !! Info | ! colspan="2" | Address !! rowspan="2" | Name !! rowspan="2" | Parameters !! rowspan="2" | Info | ||
|- | |||
! ? 3.41 ? !! 355 CEX | |||
|- | |- | ||
| 0x9e0 || stop_func || unknown || Stops the module execution with various stop codes. | | 0x9e0 || || stop_func || unknown || Stops the module execution with various stop codes. | ||
|- | |- | ||
| 0xa18 || main_func || unknown || Main routine. | | 0xa18 || || main_func || unknown || Main routine. | ||
|- | |- | ||
| 0xf18 || response || unknown || Sends response to ppu over DMA. | | 0xf18 || || response || unknown || Sends response to ppu over DMA. | ||
|- | |- | ||
| 0x1158 || process_eid || unknown || Decrypts EID0. | | 0x1158 || || process_eid || unknown || Decrypts EID0. | ||
|- | |- | ||
| 0x1438 || prepare_print || unknown || Prepares debug output. | | 0x1438 || || prepare_print || unknown || Prepares debug output. | ||
|- | |- | ||
| 0x1440 || debug_print || unknown || As the name already states... (this outputs over DMA) | | 0x1440 || || debug_print || unknown || As the name already states... (this outputs over DMA) | ||
|- | |- | ||
| 0x17f0 || - || - || Part of aes implementation. | | 0x17f0 || || - || - || Part of aes implementation. | ||
|- | |- | ||
| 0x1c48 || - || - || Part of aes implementation. | | 0x1c48 || || - || - || Part of aes implementation. | ||
|- | |- | ||
| 0x1df0 || - || - || Probably part of aes implementation. | | 0x1df0 || || - || - || Probably part of aes implementation. | ||
|- | |- | ||
| 0x20f0 || - || - || Probably part of aes implementation. | | 0x20f0 || || - || - || Probably part of aes implementation. | ||
|- | |- | ||
| 0x2300 || - || - || Probably part of aes implementation. | | 0x2300 || || - || - || Probably part of aes implementation. | ||
|- | |- | ||
| 0x2418 || - || - || Part of aes implementation. | | 0x2418 || || - || - || Part of aes implementation. | ||
|- | |- | ||
| 0x2608 || - || - || Part of aes implementation. | | 0x2608 || || - || - || Part of aes implementation. | ||
|- | |- | ||
| 0x30c0 || do_dma || ls_addr:$4, dma_effective_addr:$5, size:$6, tag_id:$7, unk0:$8, unk1:$9 || Used to dma data in and out of the isolated module's LS. | | 0x30c0 || || do_dma || ls_addr:$4, dma_effective_addr:$5, size:$6, tag_id:$7, unk0:$8, unk1:$9 || Used to dma data in and out of the isolated module's LS. | ||
|- | |- | ||
| 0x3168 || write_tag_mask_bit || mask_bit:$4 || Used to set a specific bit in MFC_WrTagMask. | | 0x3168 || || write_tag_mask_bit || mask_bit:$4 || Used to set a specific bit in MFC_WrTagMask. | ||
|} | |} | ||
==== Disasm ==== | ==== Disasm ==== | ||
The complete disassembly is available at [http://pastebin.com/7vArGweJ]. | The complete disassembly is available at [http://pastebin.com/7vArGweJ]. | ||
=== Running in anergistic === | === Running in anergistic === | ||
-> http://pastie.org/2000330 | -> http://pastie.org/2000330 |
Revision as of 17:10, 20 September 2011
aim_spu_module
It is used to retrieve the device type, device id, open psid and the pscode from the EID0 data that is passed in.
Debug messages
Address | Message | |
---|---|---|
? 3.41 ? | 355 CEX | |
0x36f0 | 0x3570 | "(spu)start aim spu module!\n" |
0x3710 | 0x3590 | "(spu) PU DMA area start address is not align 16byte\n" |
0x3750 | 0x35d0 | "(spu) PU EID area start address is not align 16byte\n" |
0x3790 | 0x3610 | "(spu) PU DMA area size is not equall to AIM_DMA_SIZE\n" |
This messages are DMAed to the ppu if a debug output address is specified.
Data
Address | Message | |
---|---|---|
? 3.41 ? | 355 CEX | |
0x37e0 | - | Reference tool fallback IDPS |
0x37f0 - ... | 0x3650 - ... | Start of EID keys |
0x3ac0 | 0x3870 | AES sbox (16*16 bytes) |
0x3c70 | 0x3a20 | AES inverse sbox (16*16 bytes) |
Functions
Address | Name | Parameters | Info | |
---|---|---|---|---|
? 3.41 ? | 355 CEX | |||
0x9e0 | stop_func | unknown | Stops the module execution with various stop codes. | |
0xa18 | main_func | unknown | Main routine. | |
0xf18 | response | unknown | Sends response to ppu over DMA. | |
0x1158 | process_eid | unknown | Decrypts EID0. | |
0x1438 | prepare_print | unknown | Prepares debug output. | |
0x1440 | debug_print | unknown | As the name already states... (this outputs over DMA) | |
0x17f0 | - | - | Part of aes implementation. | |
0x1c48 | - | - | Part of aes implementation. | |
0x1df0 | - | - | Probably part of aes implementation. | |
0x20f0 | - | - | Probably part of aes implementation. | |
0x2300 | - | - | Probably part of aes implementation. | |
0x2418 | - | - | Part of aes implementation. | |
0x2608 | - | - | Part of aes implementation. | |
0x30c0 | do_dma | ls_addr:$4, dma_effective_addr:$5, size:$6, tag_id:$7, unk0:$8, unk1:$9 | Used to dma data in and out of the isolated module's LS. | |
0x3168 | write_tag_mask_bit | mask_bit:$4 | Used to set a specific bit in MFC_WrTagMask. |
Disasm
The complete disassembly is available at [1].