Subversion Repositories pentevo

Rev

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