# Laufzeit-HLE-Stubs, die für TS2 NICHT verwendet werden (Originalcode des SDK läuft nativ übersetzt).
# sceGsSetDefLoadImage/StoreImage: HLE schreibt eine 12-Byte-Eigenstruktur statt Sonys 0x60-Byte-GIF-Paket
# (sceGsLoadImage). TS2 schickt das Paket selbst per DMA und liest NLOOP des IMAGE-Tags bei +0x50
# -> mit HLE kam "mem_mark" als Größe (DIRECT 0x656D), VIF-Strom kaputt, Grafikmüll, Absturz.
sceGsSetDefLoadImage
sceGsSetDefStoreImage
sceGsSetDefDispEnv
sceGsSetDefDrawEnv
sceGsSetDefDBuff
sceGsSetDefClear
sceGsPutDispEnv
sceGsPutDrawEnv
sceGsSwapDBuff
sceGszbufaddr
vsprintf
# fread: newlib __svfscanf (sscanf %c) ruft fread auf einem String-FILE auf dem Stack auf (_flags/_r/_p der
# Gast-Struktur). HLE-fread kennt nur Host-Dateien -> "file valid: 0", sscanf liefert Müll, Level-Laden hängt bei ~60 %.
fread
# libsdr (sceSdRemote*): HLE meldet sceSdVoiceTrans sofort "fertig", ohne Daten in den SPU2 zu bringen. TS2 laedt die
# Level-Soundbank (S_SPU_35.PAK) per sceSdRemote -> SDRDRV.IRX (laeuft echt im IOP-Emulator, SPU2 = PCSX2-Bridge).
# Mit HLE fehlte die Bank -> STREAM.IRX "buffer %x not allocated" (SOUND_PlaySFX), Laden vor der Zwischensequenz haengt.
sceSdRemote
sceSdRemoteInit
sceSdRemoteCallbackInit
# libm (newlib): HLE rechnet mit Host-IEEE (NaN/Inf). Die PS2-FPU kennt beides nicht (x/0 = +-Fmax). TS2 ruft
# acosf(-10.2) -> +Fmax -> sinf/cosf(Fmax): HLE __ieee754_rem_pio2f/__kernel_* lieferten NaN/-Inf, Objektwinkel 1.2e36,
# Normalisierungsschleife (sub_312B18: while(w>=1) w-=1) endlos -> Level-Start haengt. Originalcode = exakte PS2-FPU.
__ieee754_rem_pio2f
__kernel_sinf
__kernel_cosf
sin
floor
ceil
fabs
# libvu0 (sceVu0*, _sceVu0ecossin): HLE rechnet mit Host-Floats (IEEE, andere Rundung), das Original nutzt VU0-Makrobefehle
# (COP2), die der Recompiler mit PS2-Semantik uebersetzt. _sceVu0ecossin = Sinus/Cosinus wie beim libm-Haenger.
_sceVu0ecossin
sceVu0ApplyMatrix
sceVu0CameraMatrix
sceVu0ClampVector
sceVu0ClipAll
sceVu0ClipScreen
sceVu0ClipScreen3
sceVu0CopyMatrix
sceVu0DivVector
sceVu0DivVectorXYZ
sceVu0DropShadowMatrix
sceVu0InnerProduct
sceVu0InterVector
sceVu0InterVectorXYZ
sceVu0InversMatrix
sceVu0LightColorMatrix
sceVu0MulMatrix
sceVu0NormalLightMatrix
sceVu0Normalize
sceVu0RotMatrix
sceVu0RotMatrixX
sceVu0RotMatrixY
sceVu0RotMatrixZ
sceVu0RotTransPers
sceVu0RotTransPersN
sceVu0TransMatrix
sceVu0TransposeMatrix
sceVu0UnitMatrix
sceVu0ViewScreenMatrix
# libc (newlib) Rechenfunktionen: rein rechnerisch, kein Hardwarezugriff -> Originalcode statt Nachbau, damit Rueckgabewerte,
# Randfaelle (ueberlappende Bereiche, nicht ausgerichtete Zeiger, mbtowc im "C"-Locale) exakt wie auf der PS2 sind.
# Gemessen benutzt (Zaehllauf pc054s): strcmp 1,6 Mio, memset 0,6 Mio, memcpy 0,6 Mio, mbtowc_r 0,1 Mio Aufrufe ...
memcpy
memset
memmove
memcmp
strcmp
strncmp
strlen
strncpy
strcpy
strcat
strchr
strstr
_mbtowc_r
# libdma komplett und der Rest von libgraph (sceGsResetPath/SyncPath; sceGsResetGraph bleibt HLE: das Original stellt die
# GS-Interruptmaske wie PCSX2 ein (IMR 0x7E00, nur SIGNAL), dann kommt das Bild-Ende-SIGNAL durch die asynchrone VU1/GS-
# Verarbeitung des Ports einen VBlank zu spaet -> 30 fps (pc057-pc063, docs/FINDINGS.md); sceGsSyncV bleibt HLE: das Original
# loescht INTC_STAT.VBLANK_START und wartet auf den naechsten VBlank - der Port taktet VBlanks nach Hostzeit, das Original
# halbierte die Bildrate auf 30 fps, getestet in pc056): Sonys Treiber schreiben direkt in
# die DMA-/GS-Register, die die Laufzeit nachbildet -> Originalcode, damit die Bibliotheken nicht halb HLE, halb Original sind.
sceDmaGetChan
sceDmaReset
sceDmaPutEnv
sceDmaGetEnv
sceDmaSend
sceDmaSendN
sceDmaSendI
sceDmaSync
sceGsResetPath
sceGsSyncPath
