Rev 831 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 831 | Rev 1186 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | 1 | ||
2 | ;LAST UPDATE: 30.06.2019 savelij |
2 | ; LAST UPDATE: 16.02.2025 savelij |
3 | 3 | ||
4 | ;АДРЕС ЦИКЛА ОБЩЕНИЯ СО СПЕКОМ |
4 | ; адрес цикла общения со спеком |
5 | COMINT_ EQU 0X026E |
5 | COMINT_ EQU 0x026E |
6 | 6 | ||
7 | ;АДРЕС УСТАНОВЩИКА ДРАЙВЕРА НА NeoGS |
7 | ; адрес установщика драйвера на NeoGS |
8 | SETUPSD EQU 0X5B00 |
8 | SETUPSD EQU 0x5B00 |
9 | 9 | ||
10 | ;ДРАЙВЕР SD-CARD ДЛЯ NGS |
10 | ; драйвер SD-CARD для NGS |
11 | 11 | ||
12 | ;ВХОДНЫЕ ПАРАМЕТРЫ ОБЩИЕ: |
12 | ; входные параметры общие: |
13 | ;HL-АДРЕС ЗАГРУЗКИ В ПАМЯТЬ |
13 | ; HL-адрес загрузки в память |
14 | ;BCDE-32-Х БИТНЫЙ НОМЕР СЕКТОРА |
14 | ; BCDE-32-х битный номер сектора |
15 | ;A-КОЛИЧЕСТВО БЛОКОВ (БЛОК=512 БАЙТ) |
15 | ; A-количество блоков (блок=512 байт) |
16 | ;ТОЛЬКО ДЛЯ МНОГОБЛОЧНОЙ ЗАПИСИ/ЧТЕНИИ |
16 | ; только для многоблочной записи/чтении |
17 | 17 | ||
18 | ;ОШИБКИ ВЫДАВАЕМЫЕ НА ВЫХОДЕ: |
18 | ; ошибки выдаваемые на выходе: |
19 | ;A=0-ИНИЦИАЛИЗАЦИЯ ПРОШЛА УСПЕШНО |
19 | ; A=0-инициализация прошла успешно |
20 | ;A=1-КАРТА НЕ НАЙДЕНА ИЛИ НЕ ОТВЕТИЛА |
20 | ; A=1-карта не найдена или не ответила |
21 | 21 | ||
22 | COMSDG EX AF,AF' |
22 | COMSDG EX AF,AF' |
23 | LD A,IYL |
23 | LD A,IYL |
24 | AND A |
24 | AND A |
25 | LD A,(NEXTBYTERST8) |
25 | LD A,(NEXTBYTERST8) |
Line 56... | Line 56... | ||
56 | LD (RREG_F),HL |
56 | LD (RREG_F),HL |
57 | EX (SP),HL |
57 | EX (SP),HL |
58 | RET4SDG1 POP AF |
58 | RET4SDG1 POP AF |
59 | RET |
59 | RET |
60 | 60 | ||
61 | NGSSDT DW GSDINIT ;ИНИТ SD КАРТЫ |
61 | NGSSDT DW GSDINIT ; инит SD карты |
62 | DW GSDCMP ;ПРОВЕРКА НАЛИЧИЯ SD КАРТЫ |
62 | DW GSDCMP ; проверка наличия SD карты |
63 | DW SDRDMUL ;ЧИТАТЬ "A" СЕКТОРОВ |
63 | DW SDRDMUL ; читать 'A' секторов |
64 | DW SDWRMUL ;ПИСАТЬ "A" СЕКТОРОВ |
64 | DW SDWRMUL ; писать 'A' секторов |
65 | 65 | ||
66 | ;ЗАПИСЬ "A" СЕКТОРОВ |
66 | ; запись 'A' секторов |
67 | SDWRMUL EX AF,AF' |
67 | SDWRMUL EX AF,AF' |
68 | LD A,_DEV_WRITE |
68 | LD A,_DEV_WRITE |
69 | CALL COMM2SD |
69 | CALL COMM2SD |
70 | EX AF,AF' |
70 | EX AF,AF' |
71 | PUSH DE |
71 | PUSH DE |
72 | PUSH BC |
72 | PUSH BC |
73 | LD BC,GSDAT |
73 | LD BC,GSDAT |
74 | SDWRSN1 EX AF,AF' |
74 | SDWRSN1 EX AF,AF' |
75 | OUT (GSCOM),A |
75 | OUT (GSCOM),A |
76 | CALL WC_ |
76 | CALL WC_ |
77 | LD DE,0X0200 |
77 | LD DE,0x0200 |
78 | SDWRSN2 OUTI |
78 | SDWRSN2 OUTI |
79 | CALL WD_ |
79 | CALL WD_ |
80 | DEC DE |
80 | DEC DE |
81 | LD A,D |
81 | LD A,D |
82 | OR E |
82 | OR E |
Line 84... | Line 84... | ||
84 | EX AF,AF' |
84 | EX AF,AF' |
85 | DEC A |
85 | DEC A |
86 | JR NZ,SDWRSN1 |
86 | JR NZ,SDWRSN1 |
87 | CALL WN_ |
87 | CALL WN_ |
88 | IN A,(GSDAT) |
88 | IN A,(GSDAT) |
89 | CP 0X99 ;КАРТА ПОТЕРЯЛАСЬ ПО ВРЕМЯ ЧТЕНИЯ/ЗАПИСИ |
89 | CP 0x99 ; карта потерялась по время чтения/записи |
90 | JP Z,SD_CARD_LOST |
90 | JP Z,SD_CARD_LOST |
91 | POP BC |
91 | POP BC |
92 | POP DE |
92 | POP DE |
93 | XOR A |
93 | XOR A |
94 | RET |
94 | RET |
95 | 95 | ||
96 | ;ЧТЕНИЕ "A" СЕКТОРОВ |
96 | ; чтение 'A' секторов |
97 | SDRDMUL EX AF,AF' |
97 | SDRDMUL EX AF,AF' |
98 | LD A,_DEV_READ |
98 | LD A,_DEV_READ |
99 | CALL COMM2SD |
99 | CALL COMM2SD |
100 | EX AF,AF' |
100 | EX AF,AF' |
101 | PUSH DE |
101 | PUSH DE |
Line 105... | Line 105... | ||
105 | BIT 1,A |
105 | BIT 1,A |
106 | JR NZ,SDRDSN3 |
106 | JR NZ,SDRDSN3 |
107 | AND A |
107 | AND A |
108 | JR NZ,SDRDSN5 |
108 | JR NZ,SDRDSN5 |
109 | SDRDSN3 |
109 | SDRDSN3 |
110 | ; LD A,(R_7FFD) |
- | |
111 | READ_7FFD |
110 | READ_7FFD |
112 | AND 0X10 |
111 | AND 0x10 |
113 | LD BC,(B0_CPU2) |
112 | LD BC,(B0_CPU2) |
114 | JR Z,SDRDSN4 |
113 | JR Z,SDRDSN4 |
115 | LD BC,(B1_CPU2) |
114 | LD BC,(B1_CPU2) |
116 | SDRDSN4 LD A,0X37 |
115 | SDRDSN4 LD A,0x37 |
117 | OR B |
116 | OR B |
118 | LD B,A |
117 | LD B,A |
119 | LD A,C |
118 | LD A,C |
120 | LD C,LOW (WIN_A0) |
119 | LD C,LOW (WIN_A0) |
121 | OUT (C),A |
120 | OUT (C),A |
122 | SDRDSN5 LD A,D |
121 | SDRDSN5 LD A,D |
123 | LD BC,GSDAT |
122 | LD BC,GSDAT |
124 | SDRDSN1 EX AF,AF' |
123 | SDRDSN1 EX AF,AF' |
125 | OUT (GSCOM),A |
124 | OUT (GSCOM),A |
126 | IN A,(GSCOM) |
125 | .L1 IN A,(GSCOM) |
127 | RRA |
126 | RRA |
128 | JR C,$-3 |
127 | JR C,.L1 |
129 | LD DE,0X0200 ;ПРОДОЛЖАЕМ ЕСЛИ ВСЕ В ПОРЯДКЕ |
128 | LD DE,0x0200 ; продолжаем если все в порядке |
130 | SDRDSN2 IN A,(GSCOM) |
129 | .L2 IN A,(GSCOM) |
131 | RLA |
130 | RLA |
132 | JR NC,$-3 |
131 | JR NC,.L2 |
133 | INI |
132 | INI |
134 | DEC DE |
133 | DEC DE |
135 | LD A,D |
134 | LD A,D |
136 | OR E |
135 | OR E |
137 | JR NZ,SDRDSN2 |
136 | JR NZ,.L2 |
138 | EX AF,AF' |
137 | EX AF,AF' |
139 | DEC A |
138 | DEC A |
140 | JR NZ,SDRDSN1 |
139 | JR NZ,SDRDSN1 |
141 | IN A,(GSCOM) |
140 | .L3 IN A,(GSCOM) |
142 | RLA |
141 | RLA |
143 | JR NC,$-3 |
142 | JR NC,.L3 |
144 | IN A,(GSDAT) |
143 | IN A,(GSDAT) |
145 | CP 0X99 ;КАРТА ПОТЕРЯЛАСЬ ПО ВРЕМЯ ЧТЕНИЯ/ЗАПИСИ |
144 | CP 0x99 ; карта потерялась по время чтения/записи |
146 | JP Z,SD_CARD_LOST |
145 | JP Z,SD_CARD_LOST |
147 | LD BC,WIN_P6 |
146 | LD BC,WIN_P2 |
148 | XOR A |
147 | XOR A |
149 | OUT (C),A |
148 | OUT (C),A |
150 | POP BC |
149 | POP BC |
151 | POP DE |
150 | POP DE |
152 | RET |
151 | RET |
153 | 152 | ||
154 | ;ПРОВЕРКА НАЛИЧИЯ КАРТОЧКИ |
153 | ; проверка наличия карточки |
155 | GSDCMP LD H,CMOS_BYTE_01 |
154 | GSDCMP LD H,CMOS.BYTE_01 |
156 | ROMCALL READCMOS,ROM_RST82 |
155 | ROMCALL READCMOS,ROM_RST82 |
157 | LD A,L |
156 | LD A,L |
158 | AND M_ACCESSSDG ;ПРОВЕРКА РАЗРЕШЕНИЯ ДОСТУПА К SD КАРТЕ NEOGS |
157 | AND CMOS_EC.M_SD_NGS_ONOFF ; проверка разрешения доступа к SD карте NEOGS |
159 | JR Z,SD_NO ;ВЫХОД ЕСЛИ ДОСТУП К КАРТОЧКЕ ЗАПРЕЩЕН |
158 | JR Z,SD_NO ; выход если доступ к карточке запрещен |
160 | LD A,(FLAGS_DRV) |
159 | LD A,(DEVMAN_VARS.FLAGS_DRV) |
161 | AND B_INST_SDG |
160 | AND B_INST_SDG |
162 | JR Z,SD_NO ;ВЫХОД ЕСЛИ ДРАЙВЕР НЕ УСТАНОВЛЕН |
161 | JR Z,SD_NO ; выход если драйвер не установлен |
163 | XOR A |
162 | XOR A |
164 | OUT (GSDAT),A |
163 | OUT (GSDAT),A |
165 | LD A,0X1D |
164 | LD A,0x1D |
166 | OUT (GSCOM),A |
165 | OUT (GSCOM),A |
167 | IN A,(GSCOM) |
166 | .L1 IN A,(GSCOM) |
168 | RRA |
167 | RRA |
169 | JR C,$-3 |
168 | JR C,.L1 |
170 | IN A,(GSDAT) |
169 | IN A,(GSDAT) |
171 | LD D,A |
170 | LD D,A |
172 | AND 0X0F |
171 | AND 0x0F |
173 | LD E,A |
172 | LD E,A |
174 | LD A,D |
173 | LD A,D |
175 | AND 0XF0 |
174 | AND 0xF0 |
176 | RRCA |
175 | RRCA |
177 | RRCA |
176 | RRCA |
178 | RRCA |
177 | RRCA |
179 | RRCA |
178 | RRCA |
180 | CP E |
179 | CP E |
181 | LD A,1 |
180 | LD A,1 |
182 | JR NZ,GSDINIT1 |
181 | JR NZ,GSDINIT1 |
183 | CALL INSTSDD |
182 | CALL INSTSDD |
184 | 183 | ||
185 | ;ИНИЦИАЛИЗАЦИЯ КАРТОЧКИ |
184 | ; инициализация карточки |
186 | GSDINIT XOR A |
185 | GSDINIT XOR A |
187 | GSDINIT1 CALL COMM2SD |
186 | GSDINIT1 CALL COMM2SD |
188 | CALL WN_ |
187 | CALL WN_ |
189 | GSDINIT2 IN A,(GSDAT) |
188 | GSDINIT2 IN A,(GSDAT) |
190 | GSDINIT3 CP 0X99 ;КАРТА ПОТЕРЯЛАСЬ ПО ВРЕМЯ ЧТЕНИЯ/ЗАПИСИ |
189 | GSDINIT3 CP 0x99 ; карта потерялась по время чтения/записи |
191 | JP Z,SD_CARD_LOST |
190 | JP Z,SD_CARD_LOST |
192 | CP 0X77 |
191 | CP 0x77 |
193 | JR NZ,SD_NO |
192 | JR NZ,SD_NO |
194 | XOR A |
193 | XOR A |
195 | RET |
194 | RET |
196 | 195 | ||
197 | SD_NO LD A,1 |
196 | SD_NO LD A,1 |
198 | RET |
197 | RET |
199 | 198 | ||
200 | ;ПЕРЕДАТЧИК КОМАНД/ПАРАМЕТРОВ В ДРАЙВЕР НА NeoGS |
199 | ; передатчик команд/параметров в драйвер на NeoGS |
201 | COMM2SD OUT (GSDAT),A ;УШЛА КОМАНДА ДРАЙВЕРУ |
200 | COMM2SD OUT (GSDAT),A ; ушла команда драйверу |
202 | LD A,0X1E |
201 | LD A,0x1E |
203 | OUT (GSCOM),A |
202 | OUT (GSCOM),A |
204 | CALL WC_ ;УШЛА КОМАНДА ПРОШИВКЕ |
203 | CALL WC_ ; ушла команда прошивке |
205 | LD A,B |
204 | LD A,B |
206 | OUT (GSDAT),A |
205 | OUT (GSDAT),A |
207 | CALL WD_ ;УШЛИ БИТЫ 31-24 ПАРАМЕТРОВ |
206 | CALL WD_ ; ушли биты 31-24 параметров |
208 | LD A,C |
207 | LD A,C |
209 | OUT (GSDAT),A |
208 | OUT (GSDAT),A |
210 | CALL WD_ ;УШЛИ БИТЫ 23-16 ПАРАМЕТРОВ |
209 | CALL WD_ ; ушли биты 23-16 параметров |
211 | LD A,D |
210 | LD A,D |
212 | OUT (GSDAT),A |
211 | OUT (GSDAT),A |
213 | CALL WD_ ;УШЛИ БИТЫ 15-8 ПАРАМЕТРОВ |
212 | CALL WD_ ; ушли биты 15-8 параметров |
214 | LD A,E |
213 | LD A,E |
215 | OUT (GSDAT),A |
214 | OUT (GSDAT),A |
216 | CALL WD_ ;УШЛИ БИТЫ 7-0 ПАРАМЕТРОВ |
215 | CALL WD_ ; ушли биты 7-0 параметров |
217 | EX AF,AF' |
216 | EX AF,AF' |
218 | OUT (GSDAT),A |
217 | OUT (GSDAT),A |
219 | EX AF,AF' |
218 | EX AF,AF' |
220 | DUPL 9,0 |
219 | DUPL 9,0 |
221 | RET ;УШЛО КОЛ-ВО СЕКТОРОВ |
220 | RET ; ушло кол-во секторов |
222 | 221 | ||
223 | ;ОЖИДАНИЕ КОГДА NeoGS БАЙТ ЗАБЕРЕТ |
222 | ; ожидание когда NeoGS байт заберет |
224 | WD_ IN A,(GSCOM) |
223 | WD_ IN A,(GSCOM) |
225 | RLA |
224 | RLA |
226 | JR C,$-3 |
225 | JR C,WD_ |
227 | RET |
226 | RET |
228 | 227 | ||
229 | ;ОЖИДАНИЕ КОГДА NeoGS ДАСТ БАЙТ |
228 | ; ожидание когда NeoGS даст байт |
230 | WN_ IN A,(GSCOM) |
229 | WN_ IN A,(GSCOM) |
231 | RLA |
230 | RLA |
232 | JR NC,$-3 |
231 | JR NC,WN_ |
233 | RET |
232 | RET |
234 | 233 | ||
235 | ;ОЖИДАНИЕ КОГДА NeoGS КОМАНДУ ЗАБЕРЕТ |
234 | ; ожидание когда NeoGS команду заберет |
236 | WC_ IN A,(GSCOM) |
235 | WC_ IN A,(GSCOM) |
237 | RRA |
236 | RRA |
238 | JR C,$-3 |
237 | JR C,WC_ |
239 | RET |
238 | RET |
240 | 239 | ||
241 | ;УСТАНОВЩИК ДРАЙВЕРА НА NeoGS |
240 | ; установщик драйвера на NeoGS |
242 | INSTSDD LD A,0X80 |
241 | INSTSDD LD A,0x80 |
243 | OUT (GSCTR),A ;ПОЛНЫЙ СБРОС NEOGS |
242 | OUT (GSCTR),A ; полный сброс NEOGS |
244 | EI |
243 | EI |
245 | HALT |
244 | HALT |
246 | EI |
245 | EI |
247 | HALT |
246 | HALT |
248 | EI |
247 | EI |
249 | HALT |
248 | HALT |
250 | DI |
249 | DI |
251 | LD A,0XF3 |
250 | LD A,0xF3 |
252 | OUT (GSCOM),A |
251 | OUT (GSCOM),A |
253 | LD B,0X30 |
252 | LD B,0x30 |
254 | ISDD1 EI |
253 | ISDD1 EI |
255 | HALT |
254 | HALT |
256 | DI |
255 | DI |
257 | DEC B |
256 | DEC B |
258 | JR Z,SD_NO |
257 | JR Z,SD_NO |
259 | IN A,(GSCOM) |
258 | IN A,(GSCOM) |
260 | RRA |
259 | RRA |
261 | JR C,ISDD1 |
260 | JR C,ISDD1 |
262 | LD BC,GSDAT |
261 | LD BC,GSDAT |
263 | IN A,(C) |
262 | IN A,(C) |
264 | LD DE,0X0300 |
263 | LD DE,0x0300 |
265 | LD HL,SETUPSD |
264 | LD HL,SETUPSD |
266 | OUT (C),E |
265 | OUT (C),E |
267 | LD A,0X14 |
266 | LD A,0x14 |
268 | OUT (GSCOM),A |
267 | OUT (GSCOM),A |
269 | CALL WC_ |
268 | CALL WC_ |
270 | OUT (C),D |
269 | OUT (C),D |
271 | CALL WD_ |
270 | CALL WD_ |
272 | OUT (C),L |
271 | OUT (C),L |
Line 280... | Line 279... | ||
280 | LD A,D |
279 | LD A,D |
281 | OR E |
280 | OR E |
282 | JR NZ,ISDD3 |
281 | JR NZ,ISDD3 |
283 | LD HL,SETUPSD |
282 | LD HL,SETUPSD |
284 | OUT (C),L |
283 | OUT (C),L |
285 | LD A,0X13 |
284 | LD A,0x13 |
286 | OUT (GSCOM),A |
285 | OUT (GSCOM),A |
287 | CALL WC_ |
286 | CALL WC_ |
288 | OUT (C),H |
287 | OUT (C),H |
289 | EI |
288 | EI |
290 | HALT |
289 | HALT |
Line 293... | Line 292... | ||
293 | DI |
292 | DI |
294 | LD B,3 |
293 | LD B,3 |
295 | IN A,(GSDAT) |
294 | IN A,(GSDAT) |
296 | DEC B |
295 | DEC B |
297 | JP Z,SD_NO |
296 | JP Z,SD_NO |
298 | CP 0X77 |
297 | CP 0x77 |
299 | JP NZ,SD_NO |
298 | JP NZ,SD_NO |
300 | XOR A |
299 | XOR A |
301 | RET |
300 | RET |
302 | 301 | ||
303 | UKLAD1 ;ОТКУДА КОД НА НГС ЗАКИДЫВАТЬ |
302 | UKLAD1 ; откуда код на нгс закидывать |
304 | 303 | ||
305 | PHASE SETUPSD |
304 | PHASE SETUPSD |
306 | 305 | ||
307 | ;САМ УСТАНОВЩИК ДРАЙВЕРА ДЛЯ NeoGS |
306 | ; сам установщик драйвера для NeoGS |
308 | DI |
307 | DI |
309 | LD A,0X9C |
308 | LD A,0x9C |
310 | OUT (SCTRL),A ;КОНФИГУРАТОР NeoGS |
309 | OUT (SCTRL),A ; конфигуратор NeoGS |
311 | CALL AVTODET |
310 | CALL AVTODET |
312 | AND A |
311 | AND A |
313 | LD A,0X77 ;0X77-NeoGS НАЙДЕН |
312 | LD A,0x77 ; 0x77-NeoGS найден |
314 | JR Z,$+4 |
313 | JR Z,.L1 |
315 | LD A,0XCC ;0XCC-НАЙДЕН OLDGS |
314 | LD A,0xCC ; 0xCC-найден OLDGS |
316 | OUT (ZXDATWR),A |
315 | .L1 OUT (ZXDATWR),A |
317 | OUT (CLRCBIT),A |
316 | OUT (CLRCBIT),A |
318 | JP NZ,COMINT_ |
317 | JP NZ,COMINT_ |
319 | DI |
318 | DI |
320 | IN A,(GSCFG0) |
319 | IN A,(GSCFG0) |
321 | RES B_RAMRO,A |
320 | RES B_RAMRO,A |
322 | OUT (GSCFG0),A |
321 | OUT (GSCFG0),A |
323 | LD HL,0X1D00 |
322 | LD HL,0x1D00 |
324 | LD (0X0300+(0X1E*2)),HL |
323 | LD (0x0300+(0x1E*2)),HL |
325 | LD DE,UKLAD2 |
324 | LD DE,UKLAD2 |
326 | LD BC,GSDDRVE-GSDDRV |
325 | LD BC,GSDDRVE-GSDDRV |
327 | EX DE,HL |
326 | EX DE,HL |
328 | LDIR |
327 | LDIR |
329 | IN A,(GSCFG0) |
328 | IN A,(GSCFG0) |
330 | SET B_RAMRO,A |
329 | SET B_RAMRO,A |
331 | OUT (GSCFG0),A |
330 | OUT (GSCFG0),A |
332 | JP COMINT_ |
331 | JP COMINT_ |
333 | 332 | ||
334 | ;ПРОВЕРКА ЧТО ЭТО NeoGS И ВКЛЮЧЕНИЕ ЧАСТОТЫ 24MHz |
333 | ; проверка что это NeoGS и включение частоты 24MHz |
335 | AVTODET IN A,(GSCFG0) |
334 | AVTODET IN A,(GSCFG0) |
336 | AND 0XCF |
335 | AND 0xCF |
337 | OUT (GSCFG0),A ;ОБРАТНАЯ ЗАПИСЬ В ПОРТ СО СБРОШЕННЫМИ |
336 | OUT (GSCFG0),A ; обратная запись в порт со сброшенными |
338 | ;БИТАМИ 5-4 ВКЛЮЧАЕТ ЧАСТОТУ ПРОЦЕССОРА |
337 | ; битами 5-4 включает частоту процессора |
339 | ;РАВНЫМ 24 МГц |
338 | ; равным 24 МГц |
340 | LD D,A |
339 | LD D,A |
341 | IN A,(GSCFG0) |
340 | IN A,(GSCFG0) |
342 | CP D |
341 | CP D |
343 | LD A,0 |
342 | LD A,0 |
344 | RET Z |
343 | RET Z |
345 | DEC A |
344 | DEC A |
346 | RET |
345 | RET |
347 | 346 | ||
348 | UKLAD2 ;ОТКУДА КОД ПЕРЕКИДЫВАТЬ |
347 | UKLAD2 ; откуда код перекидывать |
349 | 348 | ||
350 | DEPHASE |
349 | DEPHASE |
351 | 350 | ||
352 | PHASE 0X1D00 |
351 | PHASE 0x1D00 |
353 | 352 | ||
354 | ;ОБЩАЯ ТОЧКА ВХОДА ДЛЯ РАБОТЫ С SD КАРТОЙ |
353 | ; общая точка входа для работы с SD картой |
355 | GSDDRV DI |
354 | GSDDRV DI |
356 | IN A,(ZXDATRD) ;ПРИЕМ КОМАНДЫ ДРАЙВЕРА |
355 | IN A,(ZXDATRD) ; прием команды драйвера |
357 | OUT (CLRCBIT),A ;СБРОС COMANDBIT |
356 | OUT (CLRCBIT),A ; сброс COMANDBIT |
358 | LD HL,COMINT_ |
357 | LD HL,COMINT_ |
359 | PUSH HL |
358 | PUSH HL |
360 | PUSH IY |
359 | PUSH IY |
361 | LD IYH,0X77 |
360 | LD IYH,0x77 |
362 | ADD A,A |
361 | ADD A,A |
363 | LD E,A |
362 | LD E,A |
364 | LD D,0 |
363 | LD D,0 |
365 | LD HL,TABLSDG |
364 | LD HL,TABLSDG |
366 | ADD HL,DE |
365 | ADD HL,DE |
367 | LD E,(HL) |
366 | LD E,(HL) |
368 | INC HL |
367 | INC HL |
369 | LD D,(HL) |
368 | LD D,(HL) |
370 | EX DE,HL |
369 | EX DE,HL |
371 | CALL WDY |
370 | CALL WDY |
372 | IN A,(ZXDATRD) ;ПРИЕМ БИТОВ 31-24 ПАРАМЕТРА |
371 | IN A,(ZXDATRD) ; прием битов 31-24 параметра |
373 | LD B,A |
372 | LD B,A |
374 | CALL WDY |
373 | CALL WDY |
375 | IN A,(ZXDATRD) ;ПРИЕМ БИТОВ 23-16 ПАРАМЕТРА |
374 | IN A,(ZXDATRD) ; прием битов 23-16 параметра |
376 | LD C,A |
375 | LD C,A |
377 | CALL WDY |
376 | CALL WDY |
378 | IN A,(ZXDATRD) ;ПРИЕМ БИТОВ 15-8 ПАРАМЕТРА |
377 | IN A,(ZXDATRD) ; прием битов 15-8 параметра |
379 | LD D,A |
378 | LD D,A |
380 | CALL WDY |
379 | CALL WDY |
381 | IN A,(ZXDATRD) ;ПРИЕМ БИТОВ 7-0 ПАРАМЕТРА |
380 | IN A,(ZXDATRD) ; прием битов 7-0 параметра |
382 | LD E,A |
381 | LD E,A |
383 | CALL WDY |
382 | CALL WDY |
384 | IN A,(ZXDATRD) ;ПРИЕМ КОЛ-ВО СЕКТОРОВ |
383 | IN A,(ZXDATRD) ; прием кол-во секторов |
385 | JP (HL) |
384 | JP (HL) |
386 | 385 | ||
387 | TABLSDG DW SDINITG ;0 ПАРАМЕТРОВ НЕ ТРЕБУЕТ, НА ВЫХОДЕ A |
386 | TABLSDG DW SDINITG ; 0 параметров не требует, на выходе 'A' |
388 | ;СМОТРИ ВЫШЕ ПЕРВЫЕ 2 ЗНАЧЕНИЯ |
387 | ; смотри выше первые 2 значения |
389 | DW SDCMPG ;1 ПРОВЕРКА НАЛИЧИЯ SD КАРТЫ |
388 | DW SDCMPG ; 1 проверка наличия SD карты |
390 | DW RDMULG ;2 ЧИТАТЬ "A" СЕКТОРОВ |
389 | DW RDMULG ; 2 читать 'A' секторов |
391 | DW WRMULG ;3 ПИСАТЬ "A" СЕКТОРОВ |
390 | DW WRMULG ; 3 писать 'A' секторов |
392 | 391 | ||
393 | SDCMPG LD A,CMD_58 |
392 | SDCMPG LD A,CMD_58 |
394 | LD BC,SD_RSTR |
393 | LD BC,SD_RSTR |
395 | CALL OUT_COG |
394 | CALL OUT_COG |
396 | CALL INOOUTG |
395 | CALL INOOUTG |
Line 401... | Line 400... | ||
401 | IN H,(C) |
400 | IN H,(C) |
402 | NOP |
401 | NOP |
403 | IN H,(C) |
402 | IN H,(C) |
404 | INC A |
403 | INC A |
405 | JP NZ,OK_WORK |
404 | JP NZ,OK_WORK |
406 | LD IYH,0X88 ;КАРТА НЕ ПРОШЛА ПРОВЕРКУ НА НАЛИЧИЕ |
405 | LD IYH,0x88 ; карта не прошла проверку на наличие |
407 | JP OK_WORK |
406 | JP OK_WORK |
408 | 407 | ||
409 | ZAW003G LD IYH,0XEE ;КАРТА НЕОБНАРУЖЕНА |
408 | ZAW003G LD IYH,0xEE ; карта необнаружена |
410 | JP OK_WORK |
409 | JP OK_WORK |
411 | 410 | ||
412 | SDINITG CALL CSHIGHG |
411 | SDINITG CALL CSHIGHG |
413 | LD BC,SD_SEND |
412 | LD BC,SD_SEND |
414 | LD DE,0X20FF |
413 | LD DE,0x20FF |
415 | OUT (C),E |
414 | .L1 OUT (C),E |
416 | DEC D |
415 | DEC D |
417 | JR NZ,$-3 |
416 | JR NZ,.L1 |
418 | LD BC,SD_RSTR |
417 | LD BC,SD_RSTR |
419 | XOR A |
418 | XOR A |
420 | EX AF,AF' |
419 | EX AF,AF' |
421 | ZAW001G LD HL,CMD00G |
420 | ZAW001G LD HL,CMD00G |
422 | CALL OUTCOMG |
421 | CALL OUTCOMG |
Line 438... | Line 437... | ||
438 | NOP |
437 | NOP |
439 | IN H,(C) |
438 | IN H,(C) |
440 | LD HL,0 |
439 | LD HL,0 |
441 | BIT 2,A |
440 | BIT 2,A |
442 | JR NZ,ZAW006G |
441 | JR NZ,ZAW006G |
443 | LD H,0X40 |
442 | LD H,0x40 |
444 | ZAW006G LD A,CMD_55 |
443 | ZAW006G LD A,CMD_55 |
445 | CALL OUT_COG |
444 | CALL OUT_COG |
446 | CALL INOOUTG |
445 | CALL INOOUTG |
447 | LD BC,SD_SEND |
446 | LD BC,SD_SEND |
448 | LD A,ACMD_41 |
447 | LD A,ACMD_41 |
Line 453... | Line 452... | ||
453 | OUT (C),L |
452 | OUT (C),L |
454 | NOP |
453 | NOP |
455 | OUT (C),L |
454 | OUT (C),L |
456 | NOP |
455 | NOP |
457 | OUT (C),L |
456 | OUT (C),L |
458 | LD A,0XFF |
457 | LD A,0xFF |
459 | OUT (C),A |
458 | OUT (C),A |
460 | CALL INOOUTG |
459 | CALL INOOUTG |
461 | AND A |
460 | AND A |
462 | JR NZ,ZAW006G |
461 | JR NZ,ZAW006G |
463 | ZAW004G LD A,CMD_59 |
462 | ZAW004G LD A,CMD_59 |
Line 471... | Line 470... | ||
471 | AND A |
470 | AND A |
472 | JR NZ,ZAW005G |
471 | JR NZ,ZAW005G |
473 | JP OK_WORK |
472 | JP OK_WORK |
474 | 473 | ||
475 | CSHIGHG PUSH AF |
474 | CSHIGHG PUSH AF |
476 | LD A,M_SDNCS+M_SNCLR ;0X81 |
475 | LD A,M_SDNCS+M_SNCLR ; 0x81 |
477 | OUT (SCTRL),A |
476 | OUT (SCTRL),A |
478 | POP AF |
477 | POP AF |
479 | RET |
478 | RET |
480 | 479 | ||
481 | CSLOWG PUSH AF |
480 | CSLOWG PUSH AF |
Line 484... | Line 483... | ||
484 | POP AF |
483 | POP AF |
485 | RET |
484 | RET |
486 | 485 | ||
487 | OUTCOMG CALL CSLOWG |
486 | OUTCOMG CALL CSLOWG |
488 | PUSH BC |
487 | PUSH BC |
489 | LD BC,0X0600+SD_SEND |
488 | LD BC,0x0600+SD_SEND |
490 | OTIR |
489 | OTIR |
491 | POP BC |
490 | POP BC |
492 | RET |
491 | RET |
493 | 492 | ||
494 | OUT_COG PUSH BC |
493 | OUT_COG PUSH BC |
Line 524... | Line 523... | ||
524 | IN H,(C) |
523 | IN H,(C) |
525 | NOP |
524 | NOP |
526 | IN H,(C) |
525 | IN H,(C) |
527 | INC A |
526 | INC A |
528 | JR NZ,SECN20G1 |
527 | JR NZ,SECN20G1 |
529 | LD IYH,0X99 ;КАРТА ПОТЕРЯЛАСЬ |
528 | LD IYH,0x99 ; карта потерялась |
530 | SECN20G1 DEC A |
529 | SECN20G1 DEC A |
531 | BIT 6,A |
530 | BIT 6,A |
532 | POP HL |
531 | POP HL |
533 | JR NZ,SECN20G |
532 | JR NZ,SECN20G |
534 | EX DE,HL |
533 | EX DE,HL |
Line 548... | Line 547... | ||
548 | OUT (C),L |
547 | OUT (C),L |
549 | NOP |
548 | NOP |
550 | OUT (C),D |
549 | OUT (C),D |
551 | NOP |
550 | NOP |
552 | OUT (C),E |
551 | OUT (C),E |
553 | LD A,0XFF |
552 | LD A,0xFF |
554 | OUT (C),A |
553 | OUT (C),A |
555 | POP BC |
554 | POP BC |
556 | POP DE |
555 | POP DE |
557 | POP HL |
556 | POP HL |
558 | RET |
557 | RET |
559 | 558 | ||
560 | INOOUTG PUSH DE |
559 | INOOUTG PUSH DE |
561 | LD DE,0X80FF |
560 | LD DE,0x80FF |
562 | INWAITG IN A,(SD_RSTR) |
561 | INWAITG IN A,(SD_RSTR) |
563 | CP E |
562 | CP E |
564 | JR NZ,INEXITG |
563 | JR NZ,INEXITG |
565 | DEC D |
564 | DEC D |
566 | JR NZ,INWAITG |
565 | JR NZ,INWAITG |
567 | INEXITG POP DE |
566 | INEXITG POP DE |
568 | RET |
567 | RET |
569 | 568 | ||
570 | CMD00G DB 0X40,0X00,0X00,0X00,0X00,0X95 ;GO_IDLE_STATE |
569 | CMD00G DB 0x40,0x00,0x00,0x00,0x00,0x95 ; GO_IDLE_STATE |
571 | CMD08G DB 0X48,0X00,0X00,0X01,0XAA,0X87 ;SEND_IF_COND |
570 | CMD08G DB 0x48,0x00,0x00,0x01,0xAA,0x87 ; SEND_IF_COND |
572 | CMD16G DB 0X50,0X00,0X00,0X02,0X00,0XFF ;SET_BLOCKEN |
571 | CMD16G DB 0x50,0x00,0x00,0x02,0x00,0xFF ; SET_BLOCKEN |
573 | 572 | ||
574 | ;ПЕРЕДАЧА ОДНОГО СЕКТОРА В SD КАРТУ |
573 | ; передача одного сектора в SD карту |
575 | WRSECTG LD BC,SD_SEND |
574 | WRSECTG LD BC,SD_SEND |
576 | OUT (SD_SEND),A |
575 | OUT (SD_SEND),A |
577 | IN A,(ZXSTAT) |
576 | .L1 IN A,(ZXSTAT) |
578 | RRA |
577 | RRA |
579 | JR NC,$-3 |
578 | JR NC,.L1 |
580 | OUT (CLRCBIT),A |
579 | OUT (CLRCBIT),A |
581 | LD HL,0X0200 |
580 | LD HL,0x0200 |
582 | WRSECTG1 CALL WDY |
581 | WRSECTG1 CALL WDY |
583 | IN A,(ZXDATRD) |
582 | IN A,(ZXDATRD) |
584 | DEC HL |
583 | DEC HL |
585 | OUT (C),A |
584 | OUT (C),A |
586 | LD A,H |
585 | LD A,H |
587 | OR L |
586 | OR L |
588 | JR NZ,WRSECTG1 |
587 | JR NZ,WRSECTG1 |
589 | LD A,0XFF |
588 | LD A,0xFF |
590 | OUT (C),A |
589 | OUT (C),A |
591 | NOP |
590 | NOP |
592 | OUT (C),A |
591 | OUT (C),A |
593 | RET |
592 | RET |
594 | 593 | ||
595 | ;ПЕРЕДАЧА ОДНОГО СЕКТОРА НА СПЕК |
594 | ; передача одного сектора на спек |
596 | RDSECTG IN A,(ZXSTAT) |
595 | RDSECTG IN A,(ZXSTAT) |
597 | RRA |
596 | RRA |
598 | JR NC,$-3 |
597 | JR NC,RDSECTG |
599 | OUT (CLRCBIT),A |
598 | OUT (CLRCBIT),A |
600 | LD BC,SD_RSTR |
599 | LD BC,SD_RSTR |
601 | LD HL,0X0200 |
600 | LD HL,0x0200 |
602 | RDSECTG1 IN A,(C) |
601 | RDSECTG1 IN A,(C) |
603 | DEC HL |
602 | DEC HL |
604 | OUT (ZXDATWR),A |
603 | OUT (ZXDATWR),A |
605 | CALL WDN |
604 | CALL WDN |
606 | LD A,H |
605 | LD A,H |
Line 609... | Line 608... | ||
609 | IN A,(C) |
608 | IN A,(C) |
610 | NOP |
609 | NOP |
611 | IN A,(C) |
610 | IN A,(C) |
612 | RET |
611 | RET |
613 | 612 | ||
614 | ;ЗАПИСЬ "A" СЕКТОРОВ |
613 | ; запись 'A' секторов |
615 | WRMULG EX AF,AF' |
614 | WRMULG EX AF,AF' |
616 | LD A,CMD_25 |
615 | LD A,CMD_25 |
617 | CALL SECM20G |
616 | CALL SECM20G |
618 | LD A,IYH |
617 | LD A,IYH |
619 | CP 0X99 |
618 | CP 0x99 |
620 | JR Z,ERR_WR_LOST |
619 | JR Z,ERR_WR_LOST |
621 | WRMULG3 CALL INOOUTG |
620 | WRMULG3 CALL INOOUTG |
622 | INC A |
621 | INC A |
623 | JR NZ,WRMULG3 |
622 | JR NZ,WRMULG3 |
624 | EX AF,AF' |
623 | EX AF,AF' |
625 | WRMULG1 EX AF,AF' |
624 | WRMULG1 EX AF,AF' |
626 | LD A,0XFC |
625 | LD A,0xFC |
627 | CALL WRSECTG |
626 | CALL WRSECTG |
628 | WRMULG2 CALL INOOUTG |
627 | WRMULG2 CALL INOOUTG |
629 | INC A |
628 | INC A |
630 | JR NZ,WRMULG2 |
629 | JR NZ,WRMULG2 |
631 | EX AF,AF' |
630 | EX AF,AF' |
632 | DEC A |
631 | DEC A |
633 | JR NZ,WRMULG1 |
632 | JR NZ,WRMULG1 |
634 | LD C,SD_SEND |
633 | LD C,SD_SEND |
635 | LD A,0XFD |
634 | LD A,0xFD |
636 | OUT (C),A |
635 | OUT (C),A |
637 | CALL INOOUTG |
636 | .L1 CALL INOOUTG |
638 | INC A |
637 | INC A |
639 | JR NZ,$-4 |
638 | JR NZ,.L1 |
640 | JR OK_WORK |
639 | JR OK_WORK |
641 | 640 | ||
642 | ERR_WR_LOST LD BC,SD_SEND |
641 | ERR_WR_LOST LD BC,SD_SEND |
643 | OUT (SD_SEND),A |
642 | OUT (SD_SEND),A |
644 | IN A,(ZXSTAT) |
643 | .L1 IN A,(ZXSTAT) |
645 | RRA |
644 | RRA |
646 | JR NC,$-3 |
645 | JR NC,.L1 |
647 | OUT (CLRCBIT),A |
646 | OUT (CLRCBIT),A |
648 | LD HL,0X0200 |
647 | LD HL,0x0200 |
649 | ERRWRLOST1 CALL WDY |
648 | ERRWRLOST1 CALL WDY |
650 | IN A,(ZXDATRD) |
649 | IN A,(ZXDATRD) |
651 | DEC HL |
650 | DEC HL |
652 | LD A,H |
651 | LD A,H |
653 | OR L |
652 | OR L |
654 | JR NZ,ERRWRLOST1 |
653 | JR NZ,ERRWRLOST1 |
655 | JP OK_WORK |
654 | JP OK_WORK |
656 | 655 | ||
657 | ERR_RD_LOST IN A,(ZXSTAT) |
656 | ERR_RD_LOST IN A,(ZXSTAT) |
658 | RRA |
657 | RRA |
659 | JR NC,$-3 |
658 | JR NC,ERR_RD_LOST |
660 | OUT (CLRCBIT),A |
659 | OUT (CLRCBIT),A |
661 | LD BC,SD_RSTR |
660 | LD BC,SD_RSTR |
662 | LD HL,0X0200 |
661 | LD HL,0x0200 |
663 | ERRRDLOST1 XOR A |
662 | ERRRDLOST1 XOR A |
664 | OUT (ZXDATWR),A |
663 | OUT (ZXDATWR),A |
665 | CALL WDN |
664 | CALL WDN |
666 | DEC HL |
665 | DEC HL |
667 | LD A,H |
666 | LD A,H |
668 | OR L |
667 | OR L |
669 | JR NZ,ERRRDLOST1 |
668 | JR NZ,ERRRDLOST1 |
670 | JP OK_WORK |
669 | JP OK_WORK |
671 | 670 | ||
672 | ;ЗАГРУЗКА "A" СЕКТОРОВ |
671 | ; загрузка 'A' секторов |
673 | RDMULG EX AF,AF' |
672 | RDMULG EX AF,AF' |
674 | LD A,CMD_18 |
673 | LD A,CMD_18 |
675 | CALL SECM20G |
674 | CALL SECM20G |
676 | LD A,IYH |
675 | LD A,IYH |
677 | CP 0X99 |
676 | CP 0x99 |
678 | JR Z,ERR_RD_LOST |
677 | JR Z,ERR_RD_LOST |
679 | EX AF,AF' |
678 | EX AF,AF' |
680 | RDMULG1 EX AF,AF' |
679 | RDMULG1 EX AF,AF' |
681 | CALL INOOUTG |
680 | .L1 CALL INOOUTG |
682 | CP 0XFE |
681 | CP 0xFE |
683 | JR NZ,$-5 |
682 | JR NZ,.L1 |
684 | RDMULG5 CALL RDSECTG |
683 | RDMULG5 CALL RDSECTG |
685 | EX AF,AF' |
684 | EX AF,AF' |
686 | DEC A |
685 | DEC A |
687 | JR NZ,RDMULG1 |
686 | JR NZ,RDMULG1 |
688 | LD A,CMD_12 |
687 | LD A,CMD_12 |
689 | CALL OUT_COG |
688 | CALL OUT_COG |
690 | RDMULG3 CALL INOOUTG |
689 | RDMULG3 CALL INOOUTG |
691 | INC A |
690 | INC A |
692 | JR NZ,RDMULG3 |
691 | JR NZ,RDMULG3 |
693 | - | ||
694 | OK_WORK CALL CSHIGHG |
692 | OK_WORK CALL CSHIGHG |
695 | LD A,IYH |
693 | LD A,IYH |
696 | POP IY |
694 | POP IY |
697 | - | ||
698 | OUTSTAT OUT (ZXDATWR),A |
695 | OUTSTAT OUT (ZXDATWR),A |
699 | - | ||
700 | ;ОЖИДАНИЕ КОГДА СПЕК ЗАБЕРЕТ БАЙТ ДАННЫХ |
696 | ; ожидание когда спек заберет байт данных |
701 | WDN IN A,(ZXSTAT) |
697 | WDN IN A,(ZXSTAT) |
702 | RLA |
698 | RLA |
703 | JR C,$-3 |
699 | JR C,WDN |
704 | RET |
700 | RET |
705 | 701 | ||
706 | ;ОЖИДАНИЕ КОГДА СПЕК ДАСТ БАЙТ ДАННЫХ |
702 | ; ожидание когда спек даст байт данных |
707 | WDY IN A,(ZXSTAT) |
703 | WDY IN A,(ZXSTAT) |
708 | RLA |
704 | RLA |
709 | JR NC,$-3 |
705 | JR NC,WDY |
710 | RET |
706 | RET |
711 | GSDDRVE |
707 | GSDDRVE |
712 | DEPHASE |
708 | DEPHASE |