mirror of
https://github.com/ran-j/PS2Recomp.git
synced 2026-09-29 01:47:44 -04:00
93e221feaa
* feat: remove memory and pad from stub section * feat: add support for resume entry targets in CodeGenerator (this allow jumps in address outside function) feat: refactor entry point discovery one more try to reduce big generated file * feat: optmizations for release build * feat: remove unused file * feat: added some test cases for code gen * feat: added log macro and remove win specific code * feat: refactor runtime folder structure feat: added reset sound driver RPC state and compatibility layout feat: rename and added new test feat: update RPC calls to use defined constants feat: added more PSMC(16, 32) feat: change cd read to try find the asset ignoring case sensitive fix: fix some render problems feat: add logs on pad feat: added more RPC handles * feat: added game override for code veronica * feat: apply vita patch * feat: flags to disable build * feat: fix merges feat: break a lot of tests * feat: better throw error on empty cd path feat: remove recompiler unusde function feat: apply missing patch * feat: gamedp is now part of lib feat: missing file * feat: small cleanup * feat: missing vita changes * feat: fix more merge * feat: fix tests * feat: last missing feature * feat: added missing import * feat: rename test local functions * feat: init syscall on ps2 list * feat: added DMA helpers * feat: faster builds feat: more implement for darkcloud * feat: back missing file * feat: added missing includes * feat: remove test * feat: missing include * feat: read register funtion * feat: build fix * feat: force exit on detach thread
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
|