99 {_________ {______________ Expansion Unit
1010
1111 RADExp - A framework for DMA interfacing with Commodore C64/C128 computers using a Raspberry Pi Zero 2 or 3A+/3B+
12- Copyright (c) 2022 Carsten Dachsbacher <[email protected] > 12+ Copyright (c) 2022-2025 Carsten Dachsbacher <[email protected] > 1313
1414 This program is free software: you can redistribute it and/or modify
1515 it under the terms of the GNU General Public License as published by
2525 along with this program. If not, see <http://www.gnu.org/licenses/>.
2626
2727*/
28+
29+ //#define USE_OLD_CACHE_PRELOADING_SCHEME
30+
2831#define COMMON_ENTRY_IN_TRANSFER
2932
3033#pragma GCC diagnostic push
@@ -45,7 +48,11 @@ reu.incrC64 = reu.addrREUCtrl & REU_ADDR_FIX_C64 ? 0 : 1;
4548reu .incrREU = reu .addrREUCtrl & REU_ADDR_FIX_REU ? 0 : 1 ;
4649
4750register u32 next_r_a , temp_r_a ;
48- register u8 newStatus = 0 , x , y , tmp ;
51+ register u8 newStatus = 0 , x , y ;
52+
53+ #ifdef USE_OLD_CACHE_PRELOADING_SCHEME
54+ register u8 tmp ;
55+ #endif
4956
5057//#define REU_PROTOCOL
5158#ifdef REU_PROTOCOL
@@ -86,15 +93,18 @@ case REU_COMMAND_TRANSFER_TO_REU: // stash: c64->reu
8693 while ( l )
8794 {
8895 reuPrefetchW ( r_a );
89- emuReadByteREU_p1 ( g2 , c_a );
90- emuReadByteREU_p2 ( g2 );
96+ //emuReadByteREU_p1( g2, c_a );
97+ //emuReadByteREU_p2( g2 );
98+ DMA_READBYTE_P1 ( c_a );
99+ DMA_READBYTE_P2 ();
91100 if ( l < length )
92101 reuStore ( temp_r_a , x );
93102 l -- ;
94103 temp_r_a = r_a ; REU_INCREMENT_ADDRESS ( r_a );
95104 reuPrefetchW ( r_a + 64 );
96105 REU_INCREMENT_C64ADDRESS ( c_a );
97- emuReadByteREU_p3 ( g2 , x , (l == 0 ) );
106+ //emuReadByteREU_p3( g2, x, (l==0) );
107+ DMA_READBYTE_P3 ( x , (l == 0 ) );
98108 }
99109 reuStore ( temp_r_a , x );
100110
@@ -130,25 +140,36 @@ case REU_COMMAND_TRANSFER_TO_C64: // fetch: c64<-reu
130140 CACHE_PRELOADL1STRM ( & reuMemory [ r_a & ( reu .wrapAroundDRAM - 1 ) ] );
131141 for ( int i = 0 ; i < 8 ; i ++ )
132142 {
143+ #ifdef USE_OLD_CACHE_PRELOADING_SCHEME
133144 reu .nextREUByte = reuLoad ( r_a );
145+ #endif
134146 WAIT_FOR_CPU_HALFCYCLE
135147 WAIT_FOR_VIC_HALFCYCLE
136148 RESTART_CYCLE_COUNTER
137149 }
138150 } else
139151#endif
140152 {
153+ #ifdef USE_OLD_CACHE_PRELOADING_SCHEME
141154 reu .nextREUByte = reuLoad ( r_a );
155+ #endif
142156 }
143157
144158 while ( l )
145159 {
146160 next_r_a = REU_GET_NEXT_ADDRESS ( r_a );
147161 reuPrefetchL1 ( next_r_a );
148162 l -- ;
149- emuWriteByteREU_p1 ( g2 , c_a , reu .nextREUByte );
150- reu .nextREUByte = reuLoad ( next_r_a ); r_a = next_r_a ; reuPrefetchL1 ( r_a ); reuPrefetchL1 ( r_a + 64 );
151- emuWriteByteREU_p2 ( g2 , (l == 0 ) );
163+ //emuWriteByteREU_p1( g2, c_a, reu.nextREUByte );
164+ #ifdef USE_OLD_CACHE_PRELOADING_SCHEME
165+ DMA_WRITEBYTE_P1 ( c_a , reu .nextREUByte );
166+ reu .nextREUByte = reuLoad ( next_r_a );
167+ #else
168+ DMA_WRITEBYTE_P1 ( c_a , ( ( ( r_a & (reu .wrapAroundDRAM - 1 ) ) < reu .reuSize ) ? reuMemory [ ( r_a & (reu .wrapAroundDRAM - 1 ) ) ] : 0xff ) );
169+ #endif
170+ r_a = next_r_a ; reuPrefetchL1 ( r_a ); reuPrefetchL1 ( r_a + 64 );
171+ //emuWriteByteREU_p2( g2, (l==0) );
172+ DMA_WRITEBYTE_P2 ( (l == 0 ) );
152173
153174 REU_INCREMENT_C64ADDRESS ( c_a );
154175 }
@@ -171,14 +192,26 @@ case REU_COMMAND_TRANSFER_SWAP: // swap: c64<->reu
171192 while ( l )
172193 {
173194 reuPrefetchL1 ( r_a );
174- emuReadByteREU_p1 ( g2 , c_a );
175- emuReadByteREU_p2 ( g2 );
176- {tmp = reuLoad ( r_a ); next_r_a = REU_GET_NEXT_ADDRESS ( r_a ); reuPrefetchL1 ( next_r_a );l -- ; reuPrefetchL1 ( r_a + 64 ); }
177- emuReadByteREU_p3 ( g2 , x , false );
178-
179- emuWriteByteREU_p1 ( g2 , c_a , tmp );
195+ //emuReadByteREU_p1( g2, c_a );
196+ //emuReadByteREU_p2( g2 );
197+ DMA_READBYTE_P1 ( c_a );
198+ DMA_READBYTE_P2 ();
199+ #ifdef USE_OLD_CACHE_PRELOADING_SCHEME
200+ tmp = reuLoad ( r_a );
201+ #endif
202+ next_r_a = REU_GET_NEXT_ADDRESS ( r_a ); reuPrefetchL1 ( next_r_a );l -- ; reuPrefetchL1 ( r_a + 64 );
203+ //emuReadByteREU_p3( g2, x, false );
204+ DMA_READBYTE_P3 ( x , false );
205+
206+ //emuWriteByteREU_p1( g2, c_a, tmp );
207+ #ifdef USE_OLD_CACHE_PRELOADING_SCHEME
208+ DMA_WRITEBYTE_P1 ( c_a , tmp );
209+ #else
210+ DMA_WRITEBYTE_P1 ( c_a , ( ( ( r_a & (reu .wrapAroundDRAM - 1 ) ) < reu .reuSize ) ? reuMemory [ ( r_a & (reu .wrapAroundDRAM - 1 ) ) ] : 0xff ) );
211+ #endif
180212 {reuStore ( r_a , x ); r_a = next_r_a ; REU_INCREMENT_C64ADDRESS ( c_a ); }
181- emuWriteByteREU_p2 ( g2 , (l == 0 ) );
213+ //emuWriteByteREU_p2( g2, (l==0) );
214+ DMA_WRITEBYTE_P2 ( (l == 0 ) );
182215
183216 }
184217
0 commit comments