Rev 890 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 890 | Rev 1186 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | 1 | ||
2 | ;LAST UPDATE: 01.12.2014 savelij |
2 | ; LAST UPDATE: 06.02.2025 savelij |
3 | 3 | ||
4 | ;ВХОДНЫЕ ПАРАМЕТРЫ ОБЩИЕ: |
4 | ; входные параметры общие: |
5 | ;HL-АДРЕС ЗАГРУЗКИ В ПАМЯТЬ |
5 | ; HL-адрес загрузки в память |
6 | ;BCDE-32-Х БИТНЫЙ НОМЕР СЕКТОРА |
6 | ; BCDE-32-х битный номер сектора |
7 | ;A-КОЛИЧЕСТВО БЛОКОВ (БЛОК=512 БАЙТ) |
7 | ; A-количество блоков (блок=512 байт) |
8 | ;ТОЛЬКО ДЛЯ МНОГОБЛОЧНОЙ ЗАПИСИ/ЧТЕНИИ |
8 | ; только для многоблочной записи/чтении |
9 | 9 | ||
10 | ;ОШИБКИ ВЫДАВАЕМЫЕ НА ВЫХОДЕ: |
10 | ; ошибки выдаваемые на выходе: |
11 | ;A=0-ИНИЦИАЛИЗАЦИЯ ПРОШЛА УСПЕШНО |
11 | ; A=0-инициализация прошла успешно |
12 | ;A=1-КАРТА НЕ НАЙДЕНА ИЛИ НЕ ОТВЕТИЛА |
12 | ; A=1-карта не найдена или не ответила |
13 | 13 | ||
14 | ;ОБЩАЯ ТОЧКА ВХОДА ДЛЯ РАБОТЫ С SD |
14 | ;общая точка входа для работы с SD |
15 | COMSDZ EX AF,AF' |
15 | COMSDZ EX AF,AF' |
16 | LD A,IYL |
16 | LD A,IYL |
17 | AND A |
17 | AND A |
18 | LD A,(NEXTBYTERST8) |
18 | LD A,(NEXTBYTERST8) |
19 | JR Z,COMSDZ1 |
19 | JR Z,COMSDZ1 |
Line 47... | Line 47... | ||
47 | JR NZ,RET4SD1 |
47 | JR NZ,RET4SD1 |
48 | LD (RREG_L),HL |
48 | LD (RREG_L),HL |
49 | EX (SP),HL |
49 | EX (SP),HL |
50 | LD (RREG_F),HL |
50 | LD (RREG_F),HL |
51 | EX (SP),HL |
51 | EX (SP),HL |
- | 52 | RET4SD1 |
|
52 | RET4SD1 PEC_ON M_SHADOW_BF |
53 | PEC_ON M_SHADOW_BF |
53 | POP AF |
54 | POP AF |
54 | RET |
55 | RET |
55 | 56 | ||
56 | TABLSDZ DW SD_INIT ;0 ПАРАМЕТРОВ НЕ ТРЕБУЕТ, НА ВЫХОДЕ A |
57 | TABLSDZ DW SD_INIT ; 0 параметров не требует, на выходе 'A' |
57 | ;СМОТРИ ВЫШЕ ПЕРВЫЕ 2 ЗНАЧЕНИЯ |
58 | ; смотри выше первые 2 значения |
58 | DW SD_CMP ;1 ПРОВЕРКА НАЛИЧИЯ SD КАРТЫ |
59 | DW SD_CMP ; 1 проверка наличия SD карты |
59 | DW RDMULTI ;2 ЧТЕНИЕ СЕКТОРОВ, КОЛ-ВО В "A" |
60 | DW RDMULTI ; 2 чтение секторов, кол-во в 'A' |
60 | DW WRMULTI ;3 ЗАПИСЬ СЕКТОРОВ |
61 | DW WRMULTI ; 3 запись секторов, кол-во в 'A' |
61 | 62 | ||
62 | SD_INIT CALL CS_HIGH |
63 | SD_INIT CALL CS_HIGH |
63 | LD BC,P_DATA |
64 | LD BC,P_DATA |
64 | LD DE,0X10FF |
65 | LD DE,0x10FF |
65 | OUT (C),E |
66 | OUT (C),E |
66 | DEC D |
67 | DEC D |
67 | JR NZ,$-3 |
68 | JR NZ,$-3 |
68 | XOR A |
69 | XOR A |
69 | EX AF,AF' |
70 | EX AF,AF' |
Line 87... | Line 88... | ||
87 | NOP |
88 | NOP |
88 | IN H,(C) |
89 | IN H,(C) |
89 | LD HL,0 |
90 | LD HL,0 |
90 | BIT 2,A |
91 | BIT 2,A |
91 | JR NZ,ZAW006 |
92 | JR NZ,ZAW006 |
92 | LD H,0X40 |
93 | LD H,0x40 |
93 | ZAW006 LD A,CMD_55 |
94 | ZAW006 LD A,CMD_55 |
94 | CALL OUT_COM |
95 | CALL OUT_COM |
95 | CALL IN_OOUT |
96 | CALL IN_OOUT |
96 | in (c) ;in f,(c) |
97 | in (c) ;in f,(c) |
97 | in (c) ;in f,(c) |
98 | in (c) ;in f,(c) |
Line 103... | Line 104... | ||
103 | OUT (C),L |
104 | OUT (C),L |
104 | NOP |
105 | NOP |
105 | OUT (C),L |
106 | OUT (C),L |
106 | NOP |
107 | NOP |
107 | OUT (C),L |
108 | OUT (C),L |
108 | LD A,0XFF |
109 | LD A,0xFF |
109 | OUT (C),A |
110 | OUT (C),A |
110 | CALL IN_OOUT |
111 | CALL IN_OOUT |
111 | AND A |
112 | AND A |
112 | JR NZ,ZAW006 |
113 | JR NZ,ZAW006 |
113 | ZAW004 LD A,CMD_59 |
114 | ZAW004 LD A,CMD_59 |
Line 143... | Line 144... | ||
143 | POP AF |
144 | POP AF |
144 | RET |
145 | RET |
145 | 146 | ||
146 | OUTCOM CALL CS__LOW |
147 | OUTCOM CALL CS__LOW |
147 | PUSH BC |
148 | PUSH BC |
148 | LD BC,0X0600+P_DATA |
149 | LD BC,0x0600+P_DATA |
149 | OTIR |
150 | OTIR |
150 | POP BC |
151 | POP BC |
151 | RET |
152 | RET |
152 | 153 | ||
153 | OUT_COM PUSH BC |
154 | OUT_COM PUSH BC |
Line 223... | Line 224... | ||
223 | OUT (C),L |
224 | OUT (C),L |
224 | NOP |
225 | NOP |
225 | OUT (C),D |
226 | OUT (C),D |
226 | NOP |
227 | NOP |
227 | OUT (C),E |
228 | OUT (C),E |
228 | LD A,0XFF |
229 | LD A,0xFF |
229 | OUT (C),A |
230 | OUT (C),A |
230 | POP BC |
231 | POP BC |
231 | POP DE |
232 | POP DE |
232 | POP HL |
233 | POP HL |
233 | RET |
234 | RET |
234 | 235 | ||
235 | IN_OOUT PUSH DE |
236 | IN_OOUT PUSH DE |
236 | LD DE,0X30FF |
237 | LD DE,0x30FF |
237 | IN_WAIT IN A,(P_DATA) |
238 | IN_WAIT IN A,(P_DATA) |
238 | CP E |
239 | CP E |
239 | JR NZ,IN_EXIT |
240 | JR NZ,IN_EXIT |
240 | IN_NEXT DEC D |
241 | IN_NEXT DEC D |
241 | JR NZ,IN_WAIT |
242 | JR NZ,IN_WAIT |
242 | IN_EXIT POP DE |
243 | IN_EXIT POP DE |
243 | RET |
244 | RET |
244 | 245 | ||
245 | CMD00 DB 0X40,0X00,0X00,0X00,0X00,0X95 ;GO_IDLE_STATE |
246 | CMD00 DB 0x40,0x00,0x00,0x00,0x00,0x95 ;GO_IDLE_STATE |
246 | CMD08 DB 0X48,0X00,0X00,0X01,0XAA,0X87 ;SEND_IF_COND |
247 | CMD08 DB 0x48,0x00,0x00,0x01,0xAA,0x87 ;SEND_IF_COND |
247 | CMD16 DB 0X50,0X00,0X00,0X02,0X00,0XFF ;SET_BLOCKEN |
248 | CMD16 DB 0x50,0x00,0x00,0x02,0x00,0xFF ;SET_BLOCKEN |
248 | 249 | ||
249 | RD_SECT PUSH BC |
250 | RD_SECT PUSH BC |
250 | LD A,IYL |
251 | LD A,IYL |
251 | BIT 1,A |
252 | BIT 1,A |
252 | JR NZ,RD_SECT3 ;ЕСЛИ ДЛЯ ВНЕШНЕЙ |
253 | JR NZ,RD_SECT3 ;ЕСЛИ ДЛЯ ВНЕШНЕЙ |
253 | AND A |
254 | AND A |
254 | JR NZ,RD_SECT2 |
255 | JR NZ,RD_SECT2 |
255 | RD_SECT3 |
256 | RD_SECT3 |
256 | ; LD A,(R_7FFD) |
- | |
257 | READ_7FFD |
257 | READ_7FFD |
258 | LD BC,(B0_CPU2) |
258 | LD BC,(B0_CPU2) |
259 | JR Z,RD_SECT1 |
259 | JR Z,RD_SECT1 |
260 | LD BC,(B1_CPU2) |
260 | LD BC,(B1_CPU2) |
- | 261 | RD_SECT1 |
|
261 | RD_SECT1 PEC_ON M_SHADOW_BF |
262 | PEC_ON M_SHADOW_BF |
262 | LD A,B |
263 | LD A,B |
263 | OR 0X37 |
264 | OR 0x37 |
264 | LD B,A |
265 | LD B,A |
265 | LD A,C |
266 | LD A,C |
266 | LD C,LOW (WIN_A0) |
267 | LD C,LOW (WIN_A0) |
267 | OUT (C),A |
268 | OUT (C),A |
268 | PEC_OFF M_SHADOW_BF |
269 | PEC_OFF M_SHADOW_BF |
Line 273... | Line 274... | ||
273 | NOP |
274 | NOP |
274 | IN A,(C) |
275 | IN A,(C) |
275 | NOP |
276 | NOP |
276 | IN A,(C) |
277 | IN A,(C) |
277 | PEC_ON M_SHADOW_BF |
278 | PEC_ON M_SHADOW_BF |
278 | LD BC,WIN_P6 |
279 | LD BC,WIN_P2 |
279 | XOR A |
280 | XOR A |
280 | OUT (C),A |
281 | OUT (C),A |
281 | PEC_OFF M_SHADOW_BF |
282 | PEC_OFF M_SHADOW_BF |
282 | POP BC |
283 | POP BC |
283 | RET |
284 | RET |
Line 286... | Line 287... | ||
286 | LD BC,P_DATA |
287 | LD BC,P_DATA |
287 | OUT (C),A |
288 | OUT (C),A |
288 | OTIR |
289 | OTIR |
289 | NOP |
290 | NOP |
290 | OTIR |
291 | OTIR |
291 | LD A,0XFF |
292 | LD A,0xFF |
292 | OUT (C),A |
293 | OUT (C),A |
293 | NOP |
294 | NOP |
294 | OUT (C),A |
295 | OUT (C),A |
295 | POP BC |
296 | POP BC |
296 | RET |
297 | RET |
Line 299... | Line 300... | ||
299 | LD A,CMD_18 |
300 | LD A,CMD_18 |
300 | CALL SECM200 |
301 | CALL SECM200 |
301 | EX AF,AF' |
302 | EX AF,AF' |
302 | RDMULT1 EX AF,AF' |
303 | RDMULT1 EX AF,AF' |
303 | CALL IN_OOUT |
304 | CALL IN_OOUT |
304 | CP 0XFE |
305 | CP 0xFE |
305 | JR NZ,$-5 |
306 | JR NZ,$-5 |
306 | CALL RD_SECT |
307 | CALL RD_SECT |
307 | EX AF,AF' |
308 | EX AF,AF' |
308 | DEC A |
309 | DEC A |
309 | JR NZ,RDMULT1 |
310 | JR NZ,RDMULT1 |
Line 320... | Line 321... | ||
320 | CALL IN_OOUT |
321 | CALL IN_OOUT |
321 | INC A |
322 | INC A |
322 | JR NZ,$-4 |
323 | JR NZ,$-4 |
323 | EX AF,AF' |
324 | EX AF,AF' |
324 | WRMULT1 EX AF,AF' |
325 | WRMULT1 EX AF,AF' |
325 | LD A,0XFC |
326 | LD A,0xFC |
326 | CALL WR_SECT |
327 | CALL WR_SECT |
327 | CALL IN_OOUT |
328 | CALL IN_OOUT |
328 | INC A |
329 | INC A |
329 | JR NZ,$-4 |
330 | JR NZ,$-4 |
330 | EX AF,AF' |
331 | EX AF,AF' |
331 | DEC A |
332 | DEC A |
332 | JR NZ,WRMULT1 |
333 | JR NZ,WRMULT1 |
333 | LD C,P_DATA |
334 | LD C,P_DATA |
334 | LD A,0XFD |
335 | LD A,0xFD |
335 | OUT (C),A |
336 | OUT (C),A |
336 | CALL IN_OOUT |
337 | CALL IN_OOUT |
337 | INC A |
338 | INC A |
338 | JR NZ,$-4 |
339 | JR NZ,$-4 |
339 | JP CS_HIGH |
340 | JP CS_HIGH |