User talk:Kozarovv: Difference between revisions
Jump to navigation
Jump to search
m (→todo) |
|||
(One intermediate revision by the same user not shown) | |||
Line 3: | Line 3: | ||
==psfour2pstwo== | ==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==== | ====todo==== | ||
seems to be like internal threads, not real threads. Emu print with that. | |||
<pre>_____________________________________________________________________________ | <pre>_____________________________________________________________________________ | ||
| Emotion Engine: | Input Output Processor (iop) | x Extra? | | | Emotion Engine: | Input Output Processor (iop) | x Extra? | |
Latest revision as of 17:30, 11 April 2023
Rough draft[edit source]
psfour2pstwo[edit source]
vu0[edit source]
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[edit source]
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[edit source]
SB header[edit source]
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
GNM Header[edit source]
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 |