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 |