Updated lazyusf2
parent
6262a97203
commit
438b4143de
|
@ -184,6 +184,7 @@ m64p_error main_start(usf_state_t * state)
|
|||
state->g_delay_ai = 1;
|
||||
state->g_delay_pi = 1;
|
||||
state->g_delay_dp = 1;
|
||||
state->enable_hle_audio = 0;
|
||||
}
|
||||
|
||||
return M64ERR_SUCCESS;
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
|
||||
#include "usf/usf_internal.h"
|
||||
|
||||
#include "usf/barray.h"
|
||||
|
||||
#include "rsp_lle/rsp_lle.h"
|
||||
|
||||
#include "rsp_core.h"
|
||||
|
@ -53,6 +55,18 @@ void dma_sp_write(struct rsp_core* sp)
|
|||
unsigned char *spmem = (unsigned char*)sp->mem + (sp->regs[SP_MEM_ADDR_REG] & 0x1000);
|
||||
unsigned char *dram = (unsigned char*)sp->ri->rdram.dram;
|
||||
|
||||
if (sp->r4300->state->enable_trimming_mode) {
|
||||
for(j=0; j<count; j++) {
|
||||
for(i=0; i<length; i++) {
|
||||
spmem[memaddr^S8] = dram[dramaddr^S8];
|
||||
if (!bit_array_test(sp->r4300->state->barray_ram_written_first, dramaddr / 4))
|
||||
bit_array_set(sp->r4300->state->barray_ram_read, dramaddr / 4);
|
||||
memaddr++;
|
||||
dramaddr++;
|
||||
}
|
||||
dramaddr+=skip;
|
||||
}
|
||||
} else {
|
||||
for(j=0; j<count; j++) {
|
||||
for(i=0; i<length; i++) {
|
||||
spmem[memaddr^S8] = dram[dramaddr^S8];
|
||||
|
@ -61,6 +75,7 @@ void dma_sp_write(struct rsp_core* sp)
|
|||
}
|
||||
dramaddr+=skip;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dma_sp_read(struct rsp_core* sp)
|
||||
|
@ -79,6 +94,18 @@ void dma_sp_read(struct rsp_core* sp)
|
|||
unsigned char *spmem = (unsigned char*)sp->mem + (sp->regs[SP_MEM_ADDR_REG] & 0x1000);
|
||||
unsigned char *dram = (unsigned char*)sp->ri->rdram.dram;
|
||||
|
||||
if (sp->r4300->state->enable_trimming_mode) {
|
||||
for(j=0; j<count; j++) {
|
||||
for(i=0; i<length; i++) {
|
||||
dram[dramaddr^S8] = spmem[memaddr^S8];
|
||||
if (!bit_array_test(sp->r4300->state->barray_ram_read, dramaddr / 4))
|
||||
bit_array_set(sp->r4300->state->barray_ram_written_first, dramaddr / 4);
|
||||
memaddr++;
|
||||
dramaddr++;
|
||||
}
|
||||
dramaddr+=skip;
|
||||
}
|
||||
} else {
|
||||
for(j=0; j<count; j++) {
|
||||
for(i=0; i<length; i++) {
|
||||
dram[dramaddr^S8] = spmem[memaddr^S8];
|
||||
|
@ -87,6 +114,7 @@ void dma_sp_read(struct rsp_core* sp)
|
|||
}
|
||||
dramaddr+=skip;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void update_sp_status(struct rsp_core* sp, uint32_t w)
|
||||
|
|
|
@ -14,13 +14,13 @@
|
|||
#include "vu.h"
|
||||
|
||||
#ifdef VU_EMULATE_SCALAR_ACCUMULATOR_READ
|
||||
static void VSAR(int vd, int vs, int vt, int e)
|
||||
static void VSAR(usf_state_t * state, int vd, int vs, int vt, int e)
|
||||
{
|
||||
ALIGNED short oldval[N];
|
||||
register int i;
|
||||
|
||||
for (i = 0; i < N; i++)
|
||||
oldval[i] = VR[vs][i];
|
||||
oldval[i] = state->VR[vs][i];
|
||||
vt = 0;
|
||||
/* Even though VT is ignored in VSAR, according to official sources as well
|
||||
* as reversing, lots of games seem to specify it as non-zero, possibly to
|
||||
|
@ -39,7 +39,7 @@ static void VSAR(int vd, int vs, int vt, int e)
|
|||
vst1q_s16(VR[vd], zero);
|
||||
#else
|
||||
for (i = 0; i < N; i++)
|
||||
VR[vd][i] = 0x0000; /* override behavior (zilmar) */
|
||||
state->VR[vd][i] = 0x0000; /* override behavior (zilmar) */
|
||||
#endif
|
||||
}
|
||||
else
|
||||
|
@ -48,12 +48,12 @@ static void VSAR(int vd, int vs, int vt, int e)
|
|||
vector_copy(VR[vd], VACC[e]);
|
||||
#else
|
||||
for (i = 0; i < N; i++)
|
||||
VR[vd][i] = VACC[e][i];
|
||||
state->VR[vd][i] = state->VACC[e][i];
|
||||
#endif
|
||||
}
|
||||
|
||||
for (i = 0; i < N; i++)
|
||||
VACC[e][i] = oldval[i]; /* ... = VS */
|
||||
state->VACC[e][i] = oldval[i]; /* ... = VS */
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
|
||||
#include "usf/usf_internal.h"
|
||||
|
||||
#include "usf/barray.h"
|
||||
|
||||
#include "si_controller.h"
|
||||
|
||||
#include "api/m64p_types.h"
|
||||
|
@ -53,6 +55,16 @@ static void dma_si_write(struct si_controller* si)
|
|||
*((uint32_t*)(&si->pif.ram[i])) = sl(si->ri->rdram.dram[(si->regs[SI_DRAM_ADDR_REG]+i)/4]);
|
||||
}
|
||||
|
||||
if (si->r4300->state->enable_trimming_mode)
|
||||
{
|
||||
for (i = 0; i < PIF_RAM_SIZE; i += 4)
|
||||
{
|
||||
unsigned int ram_address = si->regs[SI_DRAM_ADDR_REG] + i;
|
||||
if (!bit_array_test(si->r4300->state->barray_ram_written_first, ram_address / 4))
|
||||
bit_array_set(si->r4300->state->barray_ram_read, ram_address / 4);
|
||||
}
|
||||
}
|
||||
|
||||
update_pif_write(si);
|
||||
update_count(si->r4300->state);
|
||||
|
||||
|
@ -81,6 +93,16 @@ static void dma_si_read(struct si_controller* si)
|
|||
si->ri->rdram.dram[(si->regs[SI_DRAM_ADDR_REG]+i)/4] = sl(*(uint32_t*)(&si->pif.ram[i]));
|
||||
}
|
||||
|
||||
if (si->r4300->state->enable_trimming_mode)
|
||||
{
|
||||
for (i = 0; i < PIF_RAM_SIZE; i += 4)
|
||||
{
|
||||
unsigned int ram_address = si->regs[SI_DRAM_ADDR_REG] + i;
|
||||
if (!bit_array_test(si->r4300->state->barray_ram_read, ram_address / 4))
|
||||
bit_array_set(si->r4300->state->barray_ram_written_first, ram_address / 4);
|
||||
}
|
||||
}
|
||||
|
||||
update_count(si->r4300->state);
|
||||
|
||||
if (si->r4300->state->g_delay_si) {
|
||||
|
|
Loading…
Reference in New Issue