mirror of
https://github.com/ran-j/PS2Recomp.git
synced 2026-09-29 01:47:44 -04:00
1551d59fbc
* GS stubs (ps2_stubs_gs.inl): - Replace direct VRAM writes with GIF packet path - sceGsExecLoadImage: build GIF packet, set MADR/QWC/CHCR - sceGsExecStoreImage: GIF packet, processPendingTransfers, consumeLocalToHostBytes - sceGsPutDispEnv/sceGsPutDrawEnv: program GIF DMA Path3 (5/9 QWs) - sceGsResetGraph: GIF packet + writeIORegister for pmode/smode2/dispfb/display/bgcolor - sceGsSetDefDrawEnv: GIF packet layout, sceGszbufaddr for zbuf - sceGsSyncPath: processPendingTransfers, poll DMA channels - sceGsSyncV/sceGsSyncVCallback: return 0 - sceGszbufaddr: zbuf calculation (width/height blocks, gparam) Helpers (ps2_stubs_helpers.inl): - GsDispEnvMem: 5 fields (pmode, smode2, dispfb, display, bgcolor) for GIF layout - writeGsDispEnv: read-modify-write pattern - toDmaPhys: SPR (scratchpad) handling for DMA MADR bit 31 - submitDmaSend: chain mode (chcr=0x185) for sceDmaSend/sceDmaSendI/sceDmaSendM Misc stubs (ps2_stubs_misc.inl): - Add sceeFontInit, sceeFontLoadFont, sceeFontPrintfAt, sceeFontPrintfAt2 - Add sceeFontClose, sceeFontSetColour, sceeFontSetMode, sceeFontSetFont, sceeFontSetScale - Font stubs use GIF packets for CLUT and texture upload Call list (ps2_call_list.h): - Add sceeFont* entries between sceGszbufaddr and sceIoctl * added: added more scee font stubs in stubs misc fix: fixed flickering error when rendering in memory.cpp * fix: fixed linux build error
63 lines
1.5 KiB
C++
63 lines
1.5 KiB
C++
#ifndef PS2_VU1_H
|
|
#define PS2_VU1_H
|
|
|
|
#include <cstdint>
|
|
|
|
class GS;
|
|
class PS2Memory;
|
|
|
|
struct VU1State
|
|
{
|
|
float vf[32][4];
|
|
int32_t vi[16];
|
|
float acc[4];
|
|
float q;
|
|
float p;
|
|
float i;
|
|
uint32_t pc;
|
|
uint32_t mac;
|
|
uint32_t clip;
|
|
uint32_t status;
|
|
bool ebit;
|
|
uint32_t itop;
|
|
uint32_t xitop;
|
|
};
|
|
|
|
class VU1Interpreter
|
|
{
|
|
public:
|
|
VU1Interpreter();
|
|
|
|
void reset();
|
|
|
|
void execute(uint8_t *vuCode, uint32_t codeSize,
|
|
uint8_t *vuData, uint32_t dataSize,
|
|
GS &gs, PS2Memory *memory = nullptr,
|
|
uint32_t startPC = 0, uint32_t itop = 0,
|
|
uint32_t maxCycles = 65536);
|
|
|
|
void resume(uint8_t *vuCode, uint32_t codeSize,
|
|
uint8_t *vuData, uint32_t dataSize,
|
|
GS &gs, PS2Memory *memory = nullptr,
|
|
uint32_t itop = 0, uint32_t maxCycles = 65536);
|
|
|
|
VU1State &state() { return m_state; }
|
|
const VU1State &state() const { return m_state; }
|
|
|
|
private:
|
|
VU1State m_state;
|
|
|
|
void run(uint8_t *vuCode, uint32_t codeSize,
|
|
uint8_t *vuData, uint32_t dataSize,
|
|
GS &gs, PS2Memory *memory, uint32_t maxCycles);
|
|
|
|
void execUpper(uint32_t instr);
|
|
void execLower(uint32_t instr, uint8_t *vuData, uint32_t dataSize, GS &gs, PS2Memory *memory, uint32_t upperInstr);
|
|
|
|
void applyDest(float *dst, const float *result, uint8_t dest);
|
|
void applyDestAcc(const float *result, uint8_t dest);
|
|
float broadcast(const float *vf, uint8_t bc);
|
|
};
|
|
|
|
#endif
|