Skip to content

Commit 79ee33e

Browse files
committed
Update DMA transfer functions to update coverage tables, and disable HLE audio when performing coverage analysis
1 parent f295ee7 commit 79ee33e

File tree

3 files changed

+63
-12
lines changed

3 files changed

+63
-12
lines changed

main/main.c

+1
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ m64p_error main_start(usf_state_t * state)
184184
state->g_delay_ai = 1;
185185
state->g_delay_pi = 1;
186186
state->g_delay_dp = 1;
187+
state->enable_hle_audio = 0;
187188
}
188189

189190
return M64ERR_SUCCESS;

rsp/rsp_core.c

+40-12
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
#include "usf/usf_internal.h"
2525

26+
#include "usf/barray.h"
27+
2628
#include "rsp_lle/rsp_lle.h"
2729

2830
#include "rsp_core.h"
@@ -53,13 +55,26 @@ void dma_sp_write(struct rsp_core* sp)
5355
unsigned char *spmem = (unsigned char*)sp->mem + (sp->regs[SP_MEM_ADDR_REG] & 0x1000);
5456
unsigned char *dram = (unsigned char*)sp->ri->rdram.dram;
5557

56-
for(j=0; j<count; j++) {
57-
for(i=0; i<length; i++) {
58-
spmem[memaddr^S8] = dram[dramaddr^S8];
59-
memaddr++;
60-
dramaddr++;
58+
if (sp->r4300->state->enable_trimming_mode) {
59+
for(j=0; j<count; j++) {
60+
for(i=0; i<length; i++) {
61+
spmem[memaddr^S8] = dram[dramaddr^S8];
62+
if (!bit_array_test(sp->r4300->state->barray_ram_written_first, dramaddr / 4))
63+
bit_array_set(sp->r4300->state->barray_ram_read, dramaddr / 4);
64+
memaddr++;
65+
dramaddr++;
66+
}
67+
dramaddr+=skip;
68+
}
69+
} else {
70+
for(j=0; j<count; j++) {
71+
for(i=0; i<length; i++) {
72+
spmem[memaddr^S8] = dram[dramaddr^S8];
73+
memaddr++;
74+
dramaddr++;
75+
}
76+
dramaddr+=skip;
6177
}
62-
dramaddr+=skip;
6378
}
6479
}
6580

@@ -79,13 +94,26 @@ void dma_sp_read(struct rsp_core* sp)
7994
unsigned char *spmem = (unsigned char*)sp->mem + (sp->regs[SP_MEM_ADDR_REG] & 0x1000);
8095
unsigned char *dram = (unsigned char*)sp->ri->rdram.dram;
8196

82-
for(j=0; j<count; j++) {
83-
for(i=0; i<length; i++) {
84-
dram[dramaddr^S8] = spmem[memaddr^S8];
85-
memaddr++;
86-
dramaddr++;
97+
if (sp->r4300->state->enable_trimming_mode) {
98+
for(j=0; j<count; j++) {
99+
for(i=0; i<length; i++) {
100+
dram[dramaddr^S8] = spmem[memaddr^S8];
101+
if (!bit_array_test(sp->r4300->state->barray_ram_read, dramaddr / 4))
102+
bit_array_set(sp->r4300->state->barray_ram_written_first, dramaddr / 4);
103+
memaddr++;
104+
dramaddr++;
105+
}
106+
dramaddr+=skip;
107+
}
108+
} else {
109+
for(j=0; j<count; j++) {
110+
for(i=0; i<length; i++) {
111+
dram[dramaddr^S8] = spmem[memaddr^S8];
112+
memaddr++;
113+
dramaddr++;
114+
}
115+
dramaddr+=skip;
87116
}
88-
dramaddr+=skip;
89117
}
90118
}
91119

si/si_controller.c

+22
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
#include "usf/usf_internal.h"
2525

26+
#include "usf/barray.h"
27+
2628
#include "si_controller.h"
2729

2830
#include "api/m64p_types.h"
@@ -52,6 +54,16 @@ static void dma_si_write(struct si_controller* si)
5254
{
5355
*((uint32_t*)(&si->pif.ram[i])) = sl(si->ri->rdram.dram[(si->regs[SI_DRAM_ADDR_REG]+i)/4]);
5456
}
57+
58+
if (si->r4300->state->enable_trimming_mode)
59+
{
60+
for (i = 0; i < PIF_RAM_SIZE; i += 4)
61+
{
62+
unsigned int ram_address = si->regs[SI_DRAM_ADDR_REG] + i;
63+
if (!bit_array_test(si->r4300->state->barray_ram_written_first, ram_address / 4))
64+
bit_array_set(si->r4300->state->barray_ram_read, ram_address / 4);
65+
}
66+
}
5567

5668
update_pif_write(si);
5769
update_count(si->r4300->state);
@@ -81,6 +93,16 @@ static void dma_si_read(struct si_controller* si)
8193
si->ri->rdram.dram[(si->regs[SI_DRAM_ADDR_REG]+i)/4] = sl(*(uint32_t*)(&si->pif.ram[i]));
8294
}
8395

96+
if (si->r4300->state->enable_trimming_mode)
97+
{
98+
for (i = 0; i < PIF_RAM_SIZE; i += 4)
99+
{
100+
unsigned int ram_address = si->regs[SI_DRAM_ADDR_REG] + i;
101+
if (!bit_array_test(si->r4300->state->barray_ram_read, ram_address / 4))
102+
bit_array_set(si->r4300->state->barray_ram_written_first, ram_address / 4);
103+
}
104+
}
105+
84106
update_count(si->r4300->state);
85107

86108
if (si->r4300->state->g_delay_si) {

0 commit comments

Comments
 (0)