@@ -96,25 +96,17 @@ int __attribute__((section(".ramtext"))) mcReadHandler() {
96
96
97
97
switch (g_mcOperation ) {
98
98
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 );
105
103
g_mcActionInProgress = 1 ;
106
104
break ;
107
105
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' );
112
107
break ;
113
108
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 );
118
110
if (g_skipErrorOnNewCard ) return 0 ;
119
111
if ((b & 0x08 ) == 0 ) return 0 ;
120
112
g_skipErrorOnNewCard = 0 ; // durr?
@@ -126,77 +118,47 @@ int __attribute__((section(".ramtext"))) mcReadHandler() {
126
118
return -1 ;
127
119
break ;
128
120
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 );
133
122
if (b != 0x5a ) return -1 ;
134
123
break ;
135
124
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 );
140
126
if (b != 0x5d ) return -1 ;
141
127
break ;
142
128
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 );
147
130
break ;
148
131
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 );
153
133
break ;
154
134
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 );
159
136
if (b != 0x5c ) return -1 ;
160
137
break ;
161
138
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 );
166
140
if (b != 0x5d ) return -1 ;
167
141
break ;
168
142
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 );
173
144
if (b != (sector >> 8 )) return -1 ;
174
145
g_mcChecksum [port ] = (sector ^ (sector >> 8 )) & 0xff ;
175
146
s_mcCommand [port ] = 0 ;
176
147
break ;
177
148
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 ]);
182
150
if (b != (sector & 0xff )) return -1 ;
183
151
g_mcFastTrackActive = 1 ;
184
152
break ;
185
153
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 );
190
155
buffer [0x7f ] = b ;
191
156
g_mcChecksum [port ] ^= b ;
192
157
break ;
193
158
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 );
198
160
if (b != g_mcChecksum [port ]) return -1 ;
199
- while ((SIOS [0 ].stat & 2 ) == 0 );
161
+ while ((SIOS [0 ].stat & SIO_STAT_RXRDY ) == 0 );
200
162
return SIOS [0 ].fifo == 0x47 ? 1 : -1 ;
201
163
default :
202
164
return -1 ;
@@ -213,25 +175,17 @@ int __attribute__((section(".ramtext"))) mcWriteHandler() {
213
175
214
176
switch (g_mcOperation ) {
215
177
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 );
222
182
g_mcActionInProgress = 1 ;
223
183
break ;
224
184
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' );
229
186
break ;
230
187
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 );
235
189
s_mcFlagByte [port ] = b ;
236
190
if (g_skipErrorOnNewCard ) return 0 ;
237
191
if ((b & 0x08 ) == 0 ) return 0 ;
@@ -244,55 +198,34 @@ int __attribute__((section(".ramtext"))) mcWriteHandler() {
244
198
return -1 ;
245
199
break ;
246
200
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 );
251
202
if (b != 0x5a ) return -1 ;
252
203
break ;
253
204
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 );
258
206
if (b != 0x5d ) return -1 ;
259
207
g_mcChecksum [port ] = sector >> 8 ;
260
208
break ;
261
209
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 );
266
211
g_mcChecksum [port ] ^= sector & 0xff ;
267
212
g_mcFastTrackActive = 1 ;
268
213
break ;
269
214
case 7 :
270
215
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 ]);
275
217
break ;
276
218
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 );
281
220
break ;
282
221
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 );
287
223
if (b != 0x5c ) return -1 ;
288
224
break ;
289
225
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 );
294
227
if (b != 0x5d ) return -1 ;
295
- while ((SIOS [0 ].stat & 2 ) == 0 );
228
+ while ((SIOS [0 ].stat & SIO_STAT_RXRDY ) == 0 );
296
229
if (!g_skipErrorOnNewCard && ((s_mcFlagByte [port ] & 4 ) != 0 )) {
297
230
g_mcLastPort = g_mcPortFlipping ;
298
231
g_skipErrorOnNewCard = 0 ; // whyyyy
@@ -315,28 +248,20 @@ int __attribute__((section(".ramtext"))) mcInfoHandler() {
315
248
port = g_mcPortFlipping ;
316
249
switch (g_mcOperation ) {
317
250
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 );
324
255
g_mcActionInProgress = 1 ;
325
256
break ;
326
257
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' );
331
259
break ;
332
260
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 );
337
263
if (g_skipErrorOnNewCard ) return 0 ;
338
264
if ((b & 0x0c ) == 0 ) break ;
339
-
340
265
g_skipErrorOnNewCard = 0 ;
341
266
g_mcFlags [port ] = 1 ;
342
267
g_mcLastPort = g_mcPortFlipping ;
@@ -352,7 +277,7 @@ int __attribute__((section(".ramtext"))) mcInfoHandler() {
352
277
case 4 :
353
278
b = SIOS [0 ].fifo ;
354
279
if (!g_mcCardInfoPatchActivated ) SIOS [0 ].fifo = 0 ;
355
- SIOS [0 ].ctrl |= 0x0010 ;
280
+ SIOS [0 ].ctrl |= SIO_CTRL_ERRRES ;
356
281
IREG = ~IRQ_CONTROLLER ;
357
282
return (b == 0x5a ) ? 1 : -1 ;
358
283
default :
0 commit comments