23
23
24
24
#include "usf/usf_internal.h"
25
25
26
+ #include "usf/barray.h"
27
+
26
28
#include "rsp_lle/rsp_lle.h"
27
29
28
30
#include "rsp_core.h"
@@ -53,13 +55,26 @@ void dma_sp_write(struct rsp_core* sp)
53
55
unsigned char * spmem = (unsigned char * )sp -> mem + (sp -> regs [SP_MEM_ADDR_REG ] & 0x1000 );
54
56
unsigned char * dram = (unsigned char * )sp -> ri -> rdram .dram ;
55
57
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 ;
61
77
}
62
- dramaddr += skip ;
63
78
}
64
79
}
65
80
@@ -79,13 +94,26 @@ void dma_sp_read(struct rsp_core* sp)
79
94
unsigned char * spmem = (unsigned char * )sp -> mem + (sp -> regs [SP_MEM_ADDR_REG ] & 0x1000 );
80
95
unsigned char * dram = (unsigned char * )sp -> ri -> rdram .dram ;
81
96
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 ;
87
116
}
88
- dramaddr += skip ;
89
117
}
90
118
}
91
119
0 commit comments