@@ -96,25 +96,17 @@ int __attribute__((section(".ramtext"))) mcReadHandler() {
9696
9797 switch (g_mcOperation ) {
9898 case 1 :
99- g_sio0Mask = port == 0 ? 0x0000 : 0x2000 ;
100- SIOS [0 ].ctrl = g_sio0Mask | 0x1003 ;
101- SIOS [0 ].fifo ; // throw away
102- SIOS [0 ].fifo = (g_mcDeviceId [port ] & 0x0f ) + 0x81 ;
103- SIOS [0 ].ctrl |= 0x0010 ;
104- IREG = ~IRQ_CONTROLLER ;
99+ g_sio0Mask = port == 0 ? 0x0000 : SIO_CTRL_PORTSEL ;
100+ SIOS [0 ].ctrl = g_sio0Mask | SIO_CTRL_TXEN | SIO_CTRL_ACKIRQEN
101+ | SIO_CTRL_DTR ;
102+ exchangeByte ((g_mcDeviceId [port ] & 0x0f ) + 0x81 );
105103 g_mcActionInProgress = 1 ;
106104 break ;
107105 case 2 :
108- SIOS [0 ].fifo ; // throw away
109- SIOS [0 ].fifo = 'R' ;
110- SIOS [0 ].ctrl |= 0x0010 ;
111- IREG = ~IRQ_CONTROLLER ;
106+ exchangeByte ('R' );
112107 break ;
113108 case 3 :
114- b = SIOS [0 ].fifo ;
115- SIOS [0 ].fifo = 0 ;
116- SIOS [0 ].ctrl |= 0x0010 ;
117- IREG = ~IRQ_CONTROLLER ;
109+ b = exchangeByte (0 );
118110 if (g_skipErrorOnNewCard ) return 0 ;
119111 if ((b & 0x08 ) == 0 ) return 0 ;
120112 g_skipErrorOnNewCard = 0 ; // durr?
@@ -126,77 +118,47 @@ int __attribute__((section(".ramtext"))) mcReadHandler() {
126118 return -1 ;
127119 break ;
128120 case 4 :
129- b = SIOS [0 ].fifo ;
130- SIOS [0 ].fifo = 0 ;
131- SIOS [0 ].ctrl |= 0x0010 ;
132- IREG = ~IRQ_CONTROLLER ;
121+ b = exchangeByte (0 );
133122 if (b != 0x5a ) return -1 ;
134123 break ;
135124 case 5 :
136- b = SIOS [0 ].fifo ;
137- SIOS [0 ].fifo = sector >> 8 ;
138- SIOS [0 ].ctrl |= 0x0010 ;
139- IREG = ~IRQ_CONTROLLER ;
125+ b = exchangeByte (sector >> 8 );
140126 if (b != 0x5d ) return -1 ;
141127 break ;
142128 case 6 :
143- SIOS [0 ].fifo ; // throw away
144- SIOS [0 ].fifo = sector ;
145- SIOS [0 ].ctrl |= 0x0010 ;
146- IREG = ~IRQ_CONTROLLER ;
129+ exchangeByte (sector );
147130 break ;
148131 case 7 :
149- SIOS [0 ].fifo ; // throw away
150- SIOS [0 ].fifo = 0 ;
151- SIOS [0 ].ctrl |= 0x0010 ;
152- IREG = ~IRQ_CONTROLLER ;
132+ exchangeByte (0 );
153133 break ;
154134 case 8 :
155- b = SIOS [0 ].fifo ;
156- SIOS [0 ].fifo = 0 ;
157- SIOS [0 ].ctrl |= 0x0010 ;
158- IREG = ~IRQ_CONTROLLER ;
135+ b = exchangeByte (0 );
159136 if (b != 0x5c ) return -1 ;
160137 break ;
161138 case 9 :
162- b = SIOS [0 ].fifo ;
163- SIOS [0 ].fifo = 0 ;
164- SIOS [0 ].ctrl |= 0x0010 ;
165- IREG = ~IRQ_CONTROLLER ;
139+ b = exchangeByte (0 );
166140 if (b != 0x5d ) return -1 ;
167141 break ;
168142 case 10 :
169- b = SIOS [0 ].fifo ;
170- SIOS [0 ].fifo = 0 ;
171- SIOS [0 ].ctrl |= 0x0010 ;
172- IREG = ~IRQ_CONTROLLER ;
143+ b = exchangeByte (0 );
173144 if (b != (sector >> 8 )) return -1 ;
174145 g_mcChecksum [port ] = (sector ^ (sector >> 8 )) & 0xff ;
175146 s_mcCommand [port ] = 0 ;
176147 break ;
177148 case 11 :
178- b = SIOS [0 ].fifo ;
179- SIOS [0 ].fifo = s_mcCommand [port ];
180- SIOS [0 ].ctrl |= 0x0010 ;
181- IREG = ~IRQ_CONTROLLER ;
149+ b = exchangeByte (s_mcCommand [port ]);
182150 if (b != (sector & 0xff )) return -1 ;
183151 g_mcFastTrackActive = 1 ;
184152 break ;
185153 case 12 :
186- b = SIOS [0 ].fifo ;
187- SIOS [0 ].fifo = 0 ;
188- SIOS [0 ].ctrl |= 0x0010 ;
189- IREG = ~IRQ_CONTROLLER ;
154+ b = exchangeByte (0 );
190155 buffer [0x7f ] = b ;
191156 g_mcChecksum [port ] ^= b ;
192157 break ;
193158 case 13 :
194- b = SIOS [0 ].fifo ;
195- SIOS [0 ].fifo = 0 ;
196- SIOS [0 ].ctrl |= 0x0010 ;
197- IREG = ~IRQ_CONTROLLER ;
159+ b = exchangeByte (0 );
198160 if (b != g_mcChecksum [port ]) return -1 ;
199- while ((SIOS [0 ].stat & 2 ) == 0 );
161+ while ((SIOS [0 ].stat & SIO_STAT_RXRDY ) == 0 );
200162 return SIOS [0 ].fifo == 0x47 ? 1 : -1 ;
201163 default :
202164 return -1 ;
@@ -213,25 +175,17 @@ int __attribute__((section(".ramtext"))) mcWriteHandler() {
213175
214176 switch (g_mcOperation ) {
215177 case 1 :
216- g_sio0Mask = port == 0 ? 0x0000 : 0x2000 ;
217- SIOS [0 ].ctrl = g_sio0Mask | 0x1003 ;
218- SIOS [0 ].fifo ; // throw away
219- SIOS [0 ].fifo = (g_mcDeviceId [port ] & 0x0f ) + 0x81 ;
220- SIOS [0 ].ctrl |= 0x0010 ;
221- IREG = ~IRQ_CONTROLLER ;
178+ g_sio0Mask = port == 0 ? 0x0000 : SIO_CTRL_PORTSEL ;
179+ SIOS [0 ].ctrl = g_sio0Mask | SIO_CTRL_TXEN | SIO_CTRL_ACKIRQEN
180+ | SIO_CTRL_DTR ;
181+ exchangeByte ((g_mcDeviceId [port ] & 0x0f ) + 0x81 );
222182 g_mcActionInProgress = 1 ;
223183 break ;
224184 case 2 :
225- SIOS [0 ].fifo ; // throw away
226- SIOS [0 ].fifo = 'W' ;
227- SIOS [0 ].ctrl |= 0x0010 ;
228- IREG = ~IRQ_CONTROLLER ;
185+ exchangeByte ('W' );
229186 break ;
230187 case 3 :
231- b = SIOS [0 ].fifo ;
232- SIOS [0 ].fifo = 0 ;
233- SIOS [0 ].ctrl |= 0x0010 ;
234- IREG = ~IRQ_CONTROLLER ;
188+ b = exchangeByte (0 );
235189 s_mcFlagByte [port ] = b ;
236190 if (g_skipErrorOnNewCard ) return 0 ;
237191 if ((b & 0x08 ) == 0 ) return 0 ;
@@ -244,55 +198,34 @@ int __attribute__((section(".ramtext"))) mcWriteHandler() {
244198 return -1 ;
245199 break ;
246200 case 4 :
247- b = SIOS [0 ].fifo ;
248- SIOS [0 ].fifo = 0 ;
249- SIOS [0 ].ctrl |= 0x0010 ;
250- IREG = ~IRQ_CONTROLLER ;
201+ b = exchangeByte (0 );
251202 if (b != 0x5a ) return -1 ;
252203 break ;
253204 case 5 :
254- b = SIOS [0 ].fifo ;
255- SIOS [0 ].fifo = sector >> 8 ;
256- SIOS [0 ].ctrl |= 0x0010 ;
257- IREG = ~IRQ_CONTROLLER ;
205+ b = exchangeByte (sector >> 8 );
258206 if (b != 0x5d ) return -1 ;
259207 g_mcChecksum [port ] = sector >> 8 ;
260208 break ;
261209 case 6 :
262- SIOS [0 ].fifo ; // throw away
263- SIOS [0 ].fifo = sector & 0xff ;
264- SIOS [0 ].ctrl |= 0x0010 ;
265- IREG = ~IRQ_CONTROLLER ;
210+ exchangeByte (sector & 0xff );
266211 g_mcChecksum [port ] ^= sector & 0xff ;
267212 g_mcFastTrackActive = 1 ;
268213 break ;
269214 case 7 :
270215 SIOS [0 ].fifo ; // throw away
271- SIOS [0 ].fifo ; // throw away
272- SIOS [0 ].fifo = g_mcChecksum [port ];
273- SIOS [0 ].ctrl |= 0x0010 ;
274- IREG = ~IRQ_CONTROLLER ;
216+ exchangeByte (g_mcChecksum [port ]);
275217 break ;
276218 case 8 :
277- SIOS [0 ].fifo ; // throw away
278- SIOS [0 ].fifo = 0 ;
279- SIOS [0 ].ctrl |= 0x0010 ;
280- IREG = ~IRQ_CONTROLLER ;
219+ exchangeByte (0 );
281220 break ;
282221 case 9 :
283- b = SIOS [0 ].fifo ;
284- SIOS [0 ].fifo = 0 ;
285- SIOS [0 ].ctrl |= 0x0010 ;
286- IREG = ~IRQ_CONTROLLER ;
222+ b = exchangeByte (0 );
287223 if (b != 0x5c ) return -1 ;
288224 break ;
289225 case 10 :
290- b = SIOS [0 ].fifo ;
291- SIOS [0 ].fifo = 0 ;
292- SIOS [0 ].ctrl |= 0x0010 ;
293- IREG = ~IRQ_CONTROLLER ;
226+ b = exchangeByte (0 );
294227 if (b != 0x5d ) return -1 ;
295- while ((SIOS [0 ].stat & 2 ) == 0 );
228+ while ((SIOS [0 ].stat & SIO_STAT_RXRDY ) == 0 );
296229 if (!g_skipErrorOnNewCard && ((s_mcFlagByte [port ] & 4 ) != 0 )) {
297230 g_mcLastPort = g_mcPortFlipping ;
298231 g_skipErrorOnNewCard = 0 ; // whyyyy
@@ -315,28 +248,20 @@ int __attribute__((section(".ramtext"))) mcInfoHandler() {
315248 port = g_mcPortFlipping ;
316249 switch (g_mcOperation ) {
317250 case 1 :
318- g_sio0Mask = port == 0 ? 0x0000 : 0x2000 ;
319- SIOS [0 ].ctrl = g_sio0Mask | 0x1003 ;
320- SIOS [0 ].fifo ; // throw away
321- SIOS [0 ].fifo = (g_mcDeviceId [port ] & 0x0f ) + 0x81 ;
322- SIOS [0 ].ctrl = SIOS [0 ].ctrl | 0x0010 ;
323- IREG = ~IRQ_CONTROLLER ;
251+ g_sio0Mask = port == 0 ? 0x0000 : SIO_CTRL_PORTSEL ;
252+ SIOS [0 ].ctrl = g_sio0Mask | SIO_CTRL_TXEN | SIO_CTRL_ACKIRQEN
253+ | SIO_CTRL_DTR ;
254+ exchangeByte ((g_mcDeviceId [port ] & 0x0f ) + 0x81 );
324255 g_mcActionInProgress = 1 ;
325256 break ;
326257 case 2 :
327- SIOS [0 ].fifo ; // throw away
328- SIOS [0 ].fifo = 'R' ;
329- SIOS [0 ].ctrl = SIOS [0 ].ctrl | 0x0010 ;
330- IREG = ~IRQ_CONTROLLER ;
258+ exchangeByte ('R' );
331259 break ;
332260 case 3 :
333- b = SIOS [0 ].fifo ;
334- SIOS [0 ].fifo = 0 ;
335- SIOS [0 ].ctrl = SIOS [0 ].ctrl | 0x0010 ;
336- IREG = ~IRQ_CONTROLLER ;
261+
262+ b = exchangeByte (0 );
337263 if (g_skipErrorOnNewCard ) return 0 ;
338264 if ((b & 0x0c ) == 0 ) break ;
339-
340265 g_skipErrorOnNewCard = 0 ;
341266 g_mcFlags [port ] = 1 ;
342267 g_mcLastPort = g_mcPortFlipping ;
@@ -352,7 +277,7 @@ int __attribute__((section(".ramtext"))) mcInfoHandler() {
352277 case 4 :
353278 b = SIOS [0 ].fifo ;
354279 if (!g_mcCardInfoPatchActivated ) SIOS [0 ].fifo = 0 ;
355- SIOS [0 ].ctrl |= 0x0010 ;
280+ SIOS [0 ].ctrl |= SIO_CTRL_ERRRES ;
356281 IREG = ~IRQ_CONTROLLER ;
357282 return (b == 0x5a ) ? 1 : -1 ;
358283 default :
0 commit comments