The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Rough draft
psfour2pstwo
vu0
For JAK emu. Todo: Exec from VIF0 seems to always run program for 0x7FFFFFFF cycles...
void __fastcall Vu0MicroExec()
{
run_vu0(vu0_functions_ptr, 256LL, 0LL);
// run vu for 256 cycles.
// This kill whole sync idea. We have 256 cycles run already on first run.
// Games like SST/ARR/TM:HEAD-ON are alredy broken before we even started.
if (is_vu0_running()) // if still running (no ebit, no mbit)
{
v0 = ee_sched_stru;
v1 = 0LL;
v2 = *(ee_core_regs_base + 0x378) - *(ee_core_regs_base + 0x370) + 512LL;
// passed cycles + 512
// terrible idea, we are falling behind ee here.
// There is usually no point to run behind ee if we failed to do this at start.
// This break games like Ratchet/Rayman.
sched_Vu0MicroExec.delta = v2;
if ( ee_sched_stru )
{
while ( 1 )
{
v3 = v0;
if ( v0[2] >= v2 ) // if delta from scheduler higher than from v0
break;
v0 = *v0;
v1 = v3;
if ( !*v3 ) // schedule next run...
todo
seems to be like internal threads, not real threads. Emu print with that.
_____________________________________________________________________________
| Emotion Engine: | Input Output Processor (iop) | x Extra? |
|-----------------------|-------------------------------|-------------------|
| e-dbg | i-fw | x-stdlib |
| e-r59 | i-debug | x-emu |
| e-mem | i-cdvd | x-lpnr |
| e-dmac | i-dmac | x-cdvd |
| e-timer | i-gmif | x-isofs |
| e-sio | i-intc | x-log |
| e-dramc | i-mem | x-mcd |
| e-intc | i-memcard | x-replay |
| e-sif | i-mtap | x-rtc |
| e-gif | i-pad | x-save |
| e-vif0 | i-pif | x-osd |
| e-vif1 | i-sched | x-snap |
| e-ipu | i-sif | x-host |
| e-jit | i-sio2 | x-trphy |
| e-hook | i-timer | x-audio |
| e-Lua | i-usb | x-pad |
| e-gs | i-spu2 | x-srvc |
| e-sched | i-EndSlice | x-dialog |
| | i-r30 | x-dlc |
| | i-jit | x-stream |
| | i-Lua | x-mem |
| | i-thread | x-core |
|-----------------------|-------------------------------|-------------------|
Shaders
Offset |
Size |
Description |
Example
|
0x00 |
2 bytes |
SB Version |
00 04 (00.04)
|
0x02 |
2 bytes |
Compiler Version |
F9 F1 (63985)
|
0x04 |
8 bytes |
Association Hash |
B2 09 E0 A5 00 00 00 00
|
0x0C |
1 byte |
Shader Type |
02
|
0x0D |
1 byte |
Code Type |
01
|
0x0E |
1 byte |
UseShaderResourceTable |
00/01 (true/false)
|
0x0F |
1 byte |
Compiler Type |
03
|
0x10 |
4 bytes |
Code Size |
E8 00 00 00 (232)
|
0x14 |
4 bytes |
? |
00 00 00 00
|
0x18 |
12 bytes? |
System Attribute Info - Num Threads |
40 00 01 00 01 00 00 00 00 00 00 00
|
'''Shader Type'''
*(unknown) 0
*kShaderTypeVsShader 1
*kShaderTypeFsShader 2
*kShaderTypeCsShader 3
*kShaderTypeGsShader 4
*kShaderTypeHsShader 5
*kShaderTypeDsShader 6
'''Code type'''
*kCodeTypeIl 0
*kCodeTypeIsa 1
*kCodeTypeScu 2
'''UseShaderResourceTable'''
*false 0
*true 1
'''Compiler Type'''
*kCompilerTypeUnspecified 0
*kCompilerTypeOrbisPsslc 1
*kCompilerTypeOrbisEsslc 2
*kCompilerTypeOrbisWave 3
*kCompilerTypeOrbisCuAs 4
Offset |
Size |
Description |
Example
|
0x00 |
4 bytes |
Magic |
72 64 68 53 Shdr
|
0x04 |
4 bytes |
Version |
00 07 00 02 (0007.0002)
|
0x08 |
1 byte |
Shader type |
04 (Compute)
|
0x09 |
1 byte |
Shader header size in DW |
0D (13)
|
0x0A |
1 byte |
Has shader aux data |
00/01 ?
|
0x0B |
1 byte |
Target GPU types |
NEO)
|
0x0C |
4 bytes |
padding |
00 00 00 00
|