Subversion Repositories pentevo

Rev

Rev 952 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 952 Rev 1186
Line 1... Line 1...
1
 
1
 
2
;LAST UPDATE: 23.05.2021 savelij
2
; LAST UPDATE: 16.02.2025 savelij
3
 
3
 
4
MASTER          EQU 0
4
MASTER          EQU 0
5
SLAVE           EQU 0X80
5
SLAVE           EQU 0x80
6
 
6
 
7
;DRV_A          EQU 0                   ;DRIVE A
-
 
8
;DRV_B          EQU 1                   ;DRIVE B
-
 
9
;DRV_C          EQU 2                   ;DRIVE C
-
 
10
;DRV_D          EQU 3                   ;DRIVE D
-
 
11
;SDZ            EQU 4                   ;SD КАРТА НА ZC
-
 
12
;SDG            EQU 5                   ;SD КАРТА НА NEOGS
-
 
13
;HDDN           EQU 6                   ;HDD NEMO
-
 
14
;HDDS           EQU 7                   ;HDD SMUC
-
 
15
;HDDV           EQU 8                   ;HDD DIVIDE
-
 
16
 
-
 
17
EXTERNAL        EQU 0                   ;ВНЕШНИЙ ВЫЗОВ
7
EXTERNAL        EQU 0                   ; внешний вызов
18
INTERNAL        EQU 1                   ;ВНУТРЕННИЙ ВЫЗОВ
8
INTERNAL        EQU 1                   ; внутренний вызов
19
INT4EXT         EQU 3                   ;ВНУТРЕННИЙ ВЫЗОВ ДЛЯ ВЫЗВАВШЕЙ ПРОГИ
9
INT4EXT         EQU 3                   ; внутренний вызов для вызвавшей проги
20
 
10
 
21
B_SDZ           EQU %00000001
11
B_SDZ           EQU %00000001
22
B_SDG           EQU %00000010
12
B_SDG           EQU %00000010
23
B_HDD           EQU %00000100
13
B_HDD           EQU %00000100
24
B_NEW_SD        EQU %01000000
14
B_NEW_SD        EQU %01000000
25
B_INST_SDG      EQU %10000000
15
B_INST_SDG      EQU %10000000
26
 
16
 
-
 
17
CRC_SIZE        EQU 0xE0
-
 
18
 
27
;ВЫЗОВ ВЫБРАННОГО ДРАЙВЕРА
19
; вызов выбранного драйвера
28
TO_DRV          PUSH HL
20
TO_DRV          PUSH HL
29
                LD L,A
21
                LD L,A
30
                LD A,IYL
22
                LD A,IYL
31
                AND A
23
                AND A
32
                LD A,L
24
                LD A,L
Line 35... Line 27...
35
                LD A,(RREG_A)
27
                LD A,(RREG_A)
36
                LD DE,(RREG_E)
28
                LD DE,(RREG_E)
37
                LD BC,(RREG_C)
29
                LD BC,(RREG_C)
38
                LD HL,(RREG_L)
30
                LD HL,(RREG_L)
39
                EX (SP),HL
31
                EX (SP),HL
40
TO_DRV1         LD HL,(GO_DEV)
32
TO_DRV1         LD HL,(DEVMAN_VARS.GO_DEV)
41
                EX (SP),HL
33
                EX (SP),HL
42
                RET
34
                RET
43
 
35
 
44
;ВНЕШНИЙ ВЫЗОВ МЕНЕДЖЕРА УСТРОЙСТВ
36
; внешний вызов менеджера устройств
45
COM_DEV         EX AF,AF'
37
COM_DEV         EX AF,AF'
46
                CALL P5_READ_BYTE
38
                CALL P5_READ_BYTE
47
                LD A,(NEXTBYTERST8)
39
                LD A,(NEXTBYTERST8)
48
                PUSH IY
40
                PUSH IY
49
                LD IYL,EXTERNAL                 ;ВНЕШНИЙ ВЫЗОВ
41
                LD IYL,EXTERNAL                 ; внешний вызов
50
NEXT_ICOM_DEV   PUSH IX
42
NEXT_ICOM_DEV   PUSH IX
51
                PUSH HL
43
                PUSH HL
52
                LD HL,EXITDEV
44
                LD HL,EXITDEV
53
                EX (SP),HL
45
                EX (SP),HL
54
                PUSH HL
46
                PUSH HL
Line 68... Line 60...
68
 
60
 
69
EXITDEV         POP IX
61
EXITDEV         POP IX
70
                POP IY
62
                POP IY
71
                RET
63
                RET
72
 
64
 
73
;ВНУТРЕННИЙ ВЫЗОВ МЕНЕДЖЕРА УСТРОЙСТВ
65
; внутренний вызов менеджера устройств
74
ICOM_DEV        EX AF,AF'
66
ICOM_DEV        EX AF,AF'
75
                EX (SP),HL
67
                EX (SP),HL
76
                LD A,(HL)
68
                LD A,(HL)
77
                INC HL
69
                INC HL
78
                EX (SP),HL
70
                EX (SP),HL
79
                PUSH IY
71
                PUSH IY
80
                LD IYL,INTERNAL                 ;ВНУТРЕННИЙ ВЫЗОВ
72
                LD IYL,INTERNAL                 ; внутренний вызов
81
                JR NEXT_ICOM_DEV
73
                JR NEXT_ICOM_DEV
82
 
74
 
83
TABLDEV         DW DEVFIND                      ;00 ПОИСК УСТРОЙСТВ
75
TABLDEV         DW DEVFIND                      ; 00 поиск устройств
84
                DW SET_VOL                      ;01 ВЫБОР РАЗДЕЛА
76
                DW SET_VOL                      ; 01 выбор раздела
85
                DW KOL_VOL                      ;02 ЗАПРОС НАЙДЕНОГО
77
                DW KOL_VOL                      ; 02 запрос найденого
86
                DW GET_FNDVOLUME                ;03 ПОЛУЧИТЬ ТАБЛИЦУ НАЙДЕННЫХ РАЗДЕЛОВ
78
                DW GET_FNDVOLUME                ; 03 получить таблицу найденных разделов
87
                DW TO_DRV                       ;04 ВЫЗОВ ДРАЙВЕРА ВЫБРАННОГО УСТРОЙСТВА
79
                DW TO_DRV                       ; 04 вызов драйвера выбранного устройства
88
                DW SET_DEVICE                   ;05 УСТАНОВКА БИТОВ УСТРОЙСТВА И LBA РЕЖИМА
80
                DW SET_DEVICE                   ; 05 установка битов устройства и LBA режима
89
                DW CONTROL_SD                   ;06 КОНТРОЛЬ НАЛИЧИЯ SD КАРТ
81
                DW CONTROL_SD                   ; 06 контроль наличия SD карт
90
                DW COMHDDNEX                    ;07 ПРЯМОЙ ВЫЗОВ ДРАЙВЕРА HDD NEMO (ВРЕМЕННАЯ ФУНКЦИЯ)
82
                DW COMHDDNEX                    ; 07 прямой вызов драйвера HDD NEMO
91
                DW FREINIT_VOL                  ;08 ПОЛНАЯ ПЕРЕИНИЦИАЛИЗАЦИЯ РАЗДЕЛА
83
                DW FREINIT_VOL                  ; 08 полная переинициализация раздела
92
                DW SET_SECTOR_NUM               ;09 УСТАНОВКА НОМЕРА СЕКТОРА ДЛЯ ЧТЕНИЯ/ЗАПИСИ
84
                DW SET_SECTOR_NUM               ; 09 установка номера сектора для чтения/записи
93
 
85
 
94
;ФОРМАТ ТАБЛИЦЫ НАЙДЕННЫХ РАЗДЕЛОВ
86
; ФОРМАТ ТАБЛИЦЫ НАЙДЕННЫХ РАЗДЕЛОВ
95
;+0(1)-0-DRIVE A
-
 
96
;      1-DRIVE B
-
 
97
;      2-DRIVE C
-
 
98
;      3-DRIVE D
-
 
99
;      4-SD КАРТА ZC
-
 
100
;      5-SD КАРТА NEOGS
87
; +0(1)-нумерацию смотреть в сорце nums_devices.a80
101
;      6-HDD NEMO
-
 
102
;      7-HDD SMUC
-
 
103
;      8-HDD DIVIDE
-
 
104
;+1(1)-ДЛЯ SD-ТУПО 0
88
; +1(1)-для SD-всегда 0
105
;      ИНАЧЕ HDD/CD 0-MASTER, 1-SLAVE
89
;       иначе HDD/CD 0-MASTER, 1-SLAVE
106
;+2(1)-ТИП РАЗДЕЛА, В ТАБЛИЦЕ ТОЛЬКО
90
; +2(1)-тип раздела, в таблице только
107
;РАЗДЕЛЫ:
91
; разделы:
108
;00=01-FAT12
92
; 00=01-FAT12
109
;01=04,06,0E-FAT16
93
; 01=04,06,0E-FAT16
110
;02=0B,0C-FAT32
94
; 02=0B,0C-FAT32
111
;+3(4)-СТАРТОВЫЙ СЕКТОР РАЗДЕЛА
95
; +3(4)-стартовый сектор раздела
112
;+7(1)-РЕЗЕРВ
96
; +7(1)-резерв
113
 
97
 
114
;ТОЧКА ВХОДА ДЛЯ ПОИСКА РАЗДЕЛОВ
98
; точка входа для поиска разделов
115
;HL-АДРЕС КУДА ПОКЛАСТЬ ТАБЛИЦУ РАЗДЕЛОВ
99
; HL-адрес куда покласть таблицу разделов
116
;НА ВЫХОДЕ:
100
; на выходе:
117
;A-КОЛ-ВО РАЗДЕЛОВ
101
; A-кол-во разделов
118
DEVFIND         LD A,(FLAGS_DRV)
102
DEVFIND         LD A,(DEVMAN_VARS.FLAGS_DRV)
119
                AND B_NEW_SD
103
                AND B_NEW_SD
120
                JR NZ,.L1
104
                JR NZ,.L1
121
                LD HL,0XFE
105
                LD HL,CRC_SIZE
122
                LD IX,BUF_TABLVOL
106
                LD IX,BUF_VOLUMES
123
                ROMCALL CRC16_FAST,ROM_RST81
107
        ROMCALL CRC16_FAST,ROM_RST81
124
                LD BC,(BUF_TABLVOL+0XFE)
108
                LD BC,(BUF_VOLUMES + 0xFE)
125
                AND A
109
                AND A
126
                SBC HL,BC
110
                SBC HL,BC
127
                JP Z,KOL_VOL
111
                JP Z,KOL_VOL
128
.L1             LD HL,FLAGS_DRV
112
.L1             LD HL,DEVMAN_VARS.FLAGS_DRV
129
                LD A,B_NEW_SD!0XFF
113
                LD A,B_NEW_SD!0xFF
130
                AND (HL)
114
                AND (HL)
131
                LD (HL),A
115
                LD (HL),A
132
                PUSH IY
116
                PUSH IY
133
                XOR A
117
                XOR A
134
                LD (KOLDVOL),A
118
                LD (DEVMAN_VARS.KOLDVOL),A
135
                LD HL,BUF_TABLVOL
119
                LD HL,BUF_VOLUMES
136
                LD DE,BUF_TABLVOL+1
120
                LD DE,BUF_VOLUMES+1
137
                LD BC,0XEF
121
                LD BC,0xEF
138
                LD (HL),B
122
                LD (HL),B
139
                LDIR
123
                LDIR
140
                LD IX,DEVICES
124
                LD IX,DEVMAN_VARS.DEVICES
141
                LD IYL,INTERNAL
125
                LD IYL,INTERNAL
142
                LD A,(HDDTIMEOUT)
126
                LD A,(HDDTIMEOUT)
143
.L2             EI
127
.L2             EI
144
                HALT
128
                HALT
145
                HALT
129
                HALT
Line 148... Line 132...
148
                JR NZ,.L2
132
                JR NZ,.L2
149
                INC A
133
                INC A
150
                LD (HDDTIMEOUT),A
134
                LD (HDDTIMEOUT),A
151
;NEMO
135
; NEMO
152
 
136
 
-
 
137
; ===== test =====
153
        IFNDEF TESTEMUFDD
138
        IFNDEF TESTEMUFDD
154
; test
-
 
155
                LD HL,BUF_512                   ;АДРЕС БУФЕРА ДЛЯ ЗАГРУЗКИ СЕКТОРА (512 БАЙТ)
139
                LD HL,BUF_512                   ; адрес буфера для загрузки сектора (512 байт)
156
                CALL COMHDDN
140
                CALL COMHDDN
157
                DB _DEV_INIT                    ;ИНИЦИАЛИЗАЦИЯ УСТРОЙСТВА С ОПРЕДЕЛЕНИЕМ ЧТО ПОДКЛЮЧЕНО
141
                DB _DEV_INIT                    ; инициализация устройства с определением что подключено
158
                LD A,H
142
                LD A,H
159
                AND A
143
                AND A
160
                JR NZ,.L3
144
                JR NZ,.L3
161
                LD (IX+0),_HDD_NEMO_MASTER+MASTER
145
                LD (IX+0),_HDD_NEMO_MASTER+MASTER
162
                INC IX
146
                INC IX
163
; test
-
 
164
        ENDIF
147
        ENDIF
-
 
148
; ===== test =====
165
 
149
 
166
.L3    
150
.L3    
167
;SD ON NEOGS
151
; SD ON NEOGS
168
                LD H,CMOS_BYTE_01
152
                LD H,CMOS.BYTE_01
169
                ROMCALL READCMOS,ROM_RST82
153
        ROMCALL READCMOS,ROM_RST82
170
                LD A,L
154
                LD A,L
171
                AND M_ACCESSSDG                 ;ПРОВЕРКА РАЗРЕШЕНИЯ ДОСТУПА К SD КАРТЕ NEOGS
155
                AND CMOS_EC.M_SD_NGS_ONOFF      ; проверка разрешения доступа к SD карте NEOGS
172
                JR Z,.L4                        ;ЕСЛИ ЗАПРЕЩЕН, ТО НЕ ВЫЗЫВАЕМ
156
                JR Z,.L4                        ; если запрещен, то не вызываем
173
                CALL INSTSDD                    ;УCТАНОВКА ДРАЙВЕРА SD КАРТЫ НА NEOGS
157
                CALL INSTSDD                    ; уcтановка драйвера SD карты на NEOGS
174
                AND A
158
                AND A
175
                JR NZ,.L4                       ;НЕ ИНИЦИАЛИЗИРОВАТЬ ЕСЛИ NEOGS НЕ НАЙДЕН
159
                JR NZ,.L4                       ; не инициализировать если NEOGS не найден
176
                LD HL,FLAGS_DRV
160
                LD HL,DEVMAN_VARS.FLAGS_DRV
177
                SET 7,(HL)                      ;ДРАЙВЕР УСТАНОВИЛСЯ
161
                SET 7,(HL)                      ; драйвер установился
178
                CALL COMSDG
162
                CALL COMSDG
179
                DB _DEV_INIT                    ;ИНИЦИАЛИЗАЦИЯ SD КАРТЫ НА NEOGS
163
                DB _DEV_INIT                    ; инициализация SD карты на NEOGS
180
                AND A
164
                AND A
181
                JR NZ,.L4
165
                JR NZ,.L4
182
                LD (IX+0),_SD_SDG
166
                LD (IX+0),_SD_SDG
183
                INC IX
167
                INC IX
184
.L4
168
.L4
Line 192... Line 176...
192
                INC IX
176
                INC IX
193
        ENDIF
177
        ENDIF
194
.L8
178
.L8
195
;SD ON Z-CONTROLLER
179
; SD ON Z-CONTROLLER
196
                CALL COMSDZ
180
                CALL COMSDZ
197
                DB _DEV_INIT                    ;ИНИЦИАЛИЗАЦИЯ SD КАРТЫ
181
                DB _DEV_INIT                    ; инициализация SD карты
198
                AND A
182
                AND A
199
                JR NZ,.L5
183
                JR NZ,.L5
200
                LD (IX+0),_SD_SDZ
184
                LD (IX+0),_SD_SDZ
201
                INC IX
185
                INC IX
202
.L5             LD (IX+0),0XFF                  ;ДАЛЕЕ НЕТ НАЙДЕННЫХ УСТРОЙСТВ
186
.L5             LD (IX+0),0xFF                  ; далее нет найденных устройств
203
                CALL FIND_SD
187
                CALL FIND_SD
204
                LD HL,DEVICES
188
                LD HL,DEVMAN_VARS.DEVICES
205
                LD IX,BUF_TABLVOL
189
                LD IX,BUF_VOLUMES
206
                LD A,(HL)
190
                LD A,(HL)
207
                INC A
191
                INC A
208
                JR Z,.L7
192
                JR Z,.L7
209
.L6             CALL FINDVOL
193
.L6             CALL FINDVOL
210
                INC HL
194
                INC HL
211
                LD A,(HL)
195
                LD A,(HL)
212
                INC A
196
                INC A
213
                JR NZ,.L6
197
                JR NZ,.L6
214
.L7             CALL SETVOLD                    ;ВЫЧИСЛЕНИЕ КОЛИЧЕСТВА НАЙДЕННЫХ РАЗДЕЛОВ НА ВСЕХ УСТРОЙСТВАХ
198
.L7             CALL SETVOLD                    ; вычисление количества найденных разделов на всех устройствах
215
                POP IY
199
                POP IY
216
                SCF
200
                SCF
217
                JP Z,KOLVOL1                    ;ПЕРЕХОД ЕСЛИ НИЧЕГО НЕ НАЙДЕНО
201
                JP Z,KOLVOL1                    ; переход если ничего не найдено
218
                DEC A
202
                DEC A
219
                LD (SETDVOL),A
203
                LD (DEVMAN_VARS.SETDVOL),A
220
;====ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ ВСЕХ НАЙДЕННЫХ РАЗДЕЛОВ====
204
; ====инициализация переменных всех найденных разделов====
221
INIT_VOLS       LD IX,BUF_TABLVOL
205
INIT_VOLS       LD IX,BUF_VOLUMES
222
                LD A,(SETDVOL)
206
                LD A,(DEVMAN_VARS.SETDVOL)
223
                PUSH AF                         ;СОХРАНИЛИ ТЕКУЩИЙ ВЫБРАННЫЙ РАЗДЕЛ
207
                PUSH AF                         ; сохранили текущий выбранный раздел
224
                LD A,(KOLDVOL)
208
                LD A,(DEVMAN_VARS.KOLDVOL)
225
                LD E,A
209
                LD E,A
226
                LD D,0
210
                LD D,0
227
IV_SETDRV2      PUSH AF
211
IV_SETDRV2      PUSH AF
228
                LD A,D
212
                LD A,D
229
                LD (SETDVOL),A
213
                LD (DEVMAN_VARS.SETDVOL),A
230
                LD A,(IX+0)
214
                LD A,(IX+0)
231
                CP _SD_SDZ
215
                CP _SD_SDZ
232
                LD HL,COMSDZ
216
                LD HL,COMSDZ
233
                JR Z,IV_SETDRV1
217
                JR Z,IV_SETDRV1
234
                CP _SL_USBF
218
                CP _SL_USBF
Line 236... Line 220...
236
                JR Z,IV_SETDRV1
220
                JR Z,IV_SETDRV1
237
                CP _SD_SDG
221
                CP _SD_SDG
238
                LD HL,COMSDG
222
                LD HL,COMSDG
239
                JR Z,IV_SETDRV1
223
                JR Z,IV_SETDRV1
240
                LD HL,COMHDDN
224
                LD HL,COMHDDN
241
IV_SETDRV1      LD (GO_DEV),HL                  ;УСТАНОВИЛИ АДРЕС ТЕКУЩЕГО ВЫЗЫВАЕМОГО ДРАЙВЕРА
225
IV_SETDRV1      LD (DEVMAN_VARS.GO_DEV),HL      ; установили адрес текущего вызываемого драйвера
242
                LD A,(IX+2)
226
                LD A,(IX+2)
243
                LD HL,BUF_TABLVOL
227
                LD HL,BUF_VOLUMES
244
                PUSH DE
228
                PUSH DE
245
                CALL ICOM_FAT
229
                CALL ICOM_FAT
246
                DB _INIT_FATVARS
230
                DB _INIT_FATVARS
247
                PUSH AF
231
                PUSH AF
248
                CALL SAVE_FNDVOL
232
                CALL SAVE_FNDVOL
249
                POP AF
233
                POP AF
250
                POP DE
234
                POP DE
251
                CALL C,DEL_VOL                  ;РАЗДЕЛ НЕИЗВЕСТЕН ИЛИ НЕ ОТФОРМАТИРОВАН, УДАЛЯЕМ ОПИСАТЕЛЬ
235
                CALL C,DEL_VOL                  ; раздел неизвестен или не отформатирован, удаляем описатель
252
                INC D
236
                INC D
253
                LD BC,8
237
                LD BC,8
254
                ADD IX,BC
238
                ADD IX,BC
255
                POP AF
239
                POP AF
256
                DEC A
240
                DEC A
257
                JR NZ,IV_SETDRV2
241
                JR NZ,IV_SETDRV2
258
;====ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ ВСЕХ НАЙДЕННЫХ РАЗДЕЛОВ====
242
; ====инициализация переменных всех найденных разделов====
259
                POP AF
243
                POP AF
260
                CALL SET_VOL1                   ;ВОССТАНОВЛЕНИЕ ТЕКУЩЕГО ВЫБРАННОГО РАЗДЕЛА
244
                CALL SET_VOL1                   ; восстановление текущего выбранного раздела
261
                LD A,(KOLDVOL)
245
                LD A,(DEVMAN_VARS.KOLDVOL)
262
                DEC A
246
                DEC A
263
                CALL C,SET_VOL1                 ;ЕСЛИ ВЫБРАН НЕ СУЩЕСТВУЮЩИЙ РАЗДЕЛ, ТО ПРИНУДИТЕЛЬНО ВЫБИРАЕМ ПОСЛЕДНИЙ НАЙДЕННЫЙ
247
                CALL C,SET_VOL1                 ; если выбран не существующий раздел, то принудительно выбираем последний найденный
264
                CALL ICOM_FAT
248
                CALL ICOM_FAT
265
                DB _INIT_TEKDIR
249
                DB _INIT_TEKDIR
266
                LD HL,0XFE
250
                LD HL,CRC_SIZE
267
                LD IX,BUF_TABLVOL
251
                LD IX,BUF_VOLUMES
268
                ROMCALL CRC16_FAST,ROM_RST81
252
        ROMCALL CRC16_FAST,ROM_RST81
269
                LD (CRC_DRVS),HL
253
                LD (BUF_VOLUMES + 0xFE),HL
270
KOL_VOL         LD A,IYL
254
KOL_VOL         LD A,IYL
271
                AND A
255
                AND A
272
                JR NZ,IKOL_VOL
256
                JR NZ,IKOL_VOL
273
                LD HL,(ADRTEKV)                 ;АДРЕС ТЕКУЩЕГО ВЫБРАННОГО РАЗДЕЛА
257
                LD HL,(DEVMAN_VARS.ADRTEKV)     ; адрес текущего выбранного раздела
274
                INC HL
258
                INC HL
275
                INC HL
259
                INC HL
276
                LD A,(HL)                       ;ТИП РАЗДЕЛА
260
                LD A,(HL)                       ; тип раздела
277
                LD HL,(KOLDVOL)                 ;D-НОМЕР ВЫБРАННОГО РАЗДЕЛА, E-КОЛИЧЕСТВО НАЙДЕННЫХ РАЗДЕЛОВ
261
                LD HL,(DEVMAN_VARS.KOLDVOL)     ; D-номер выбранного раздела, E-количество найденных разделов
278
                LD (RREG_E),HL
262
                LD (RREG_E),HL
279
                AND A
263
                AND A
280
KOLVOL1         PUSH AF
264
KOLVOL1         PUSH AF
281
                POP HL
265
                POP HL
282
                LD (RREG_F),HL
266
                LD (RREG_F),HL
283
                RET
267
                RET
284
 
268
 
285
;УДАЛЕНИЕ РАЗДЕЛА ИЗ ТАБЛИЦЫ
269
; удаление раздела из таблицы
286
DEL_VOL         PUSH DE
270
DEL_VOL         PUSH DE
287
                PUSH IX
271
                PUSH IX
288
                POP HL
272
                POP HL
289
                EX DE,HL
273
                EX DE,HL
290
                LD HL,8
274
                LD HL,8
Line 295... Line 279...
295
                LD C,A
279
                LD C,A
296
                LD B,0
280
                LD B,0
297
                LDIR
281
                LDIR
298
                LD BC,-8
282
                LD BC,-8
299
                ADD IX,BC
283
                ADD IX,BC
300
                LD HL,KOLDVOL
284
                LD HL,DEVMAN_VARS.KOLDVOL
301
                DEC (HL)
285
                DEC (HL)
302
                POP DE
286
                POP DE
303
                DEC D
287
                DEC D
304
                RET
288
                RET
305
 
289
 
306
FINDVOL         PUSH HL
290
FINDVOL         PUSH HL
307
                LD A,(HL)
291
                LD A,(HL)
308
                LD (TEK_TYPE),A
292
                LD (DEVMAN_VARS.TEK_TYPE),A
309
                AND 0X7F
293
                AND 0x7F
310
                CP _HDD_NEMO_MASTER
294
                CP _HDD_NEMO_MASTER
311
                LD HL,COMHDDN
295
                LD HL,COMHDDN
312
                JR Z,FINDVOL1
296
                JR Z,FINDVOL1
313
                CP _SD_SDG
297
                CP _SD_SDG
314
                LD HL,COMSDG
298
                LD HL,COMSDG
315
                JR Z,FINDVOL1
299
                JR Z,FINDVOL1
316
                LD HL,COMSDZ
300
                LD HL,COMSDZ
317
FINDVOL1        LD (GO_DEV),HL                  ;ВЫСТАВИЛИ АДРЕС ВЫЗОВА НУЖНОГО ДРАЙВЕРА
301
FINDVOL1        LD (DEVMAN_VARS.GO_DEV),HL      ; выставили адрес вызова нужного драйвера
318
                LD DE,0
302
                LD DE,0
319
                LD B,D
303
                LD B,D
320
                LD C,D                          ;ЧИТАТЬ СЕКТОР 0
304
                LD C,D                          ; читать сектор 0
321
                LD A,1                          ;1 СЕКТОР
305
                LD A,1                          ; 1 сектор
322
                LD HL,BUF_512                   ;АДРЕС БУФЕРА ЧТЕНИЯ
306
                LD HL,BUF_512                   ; адрес буфера чтения
323
                PUSH HL
307
                PUSH HL
324
                LD IYL,INTERNAL
308
                LD IYL,INTERNAL
325
                CALL TO_DRV
309
                CALL TO_DRV
326
                DB _DEV_READ
310
                DB _DEV_READ
327
                DEC HL
311
                DEC HL
328
                LD D,(HL)
312
                LD D,(HL)
329
                DEC HL
313
                DEC HL
330
                LD E,(HL)
314
                LD E,(HL)
331
                LD HL,0XAA55
315
                LD HL,0xAA55
332
                AND A
316
                AND A
333
                SBC HL,DE
317
                SBC HL,DE
334
                POP IY
318
                POP IY
335
                LD (ADRTEKV),IX
319
                LD (DEVMAN_VARS.ADRTEKV),IX
336
                CALL Z,READ_MBR
320
                CALL Z,READ_MBR
337
                POP HL
321
                POP HL
338
                RET
322
                RET
339
 
323
 
340
;ЗАПРОС НАЙДЕНОГО И ТЕКУЩЕГО ВЫБРАННОГО УСТРОЙСТВА
324
; запрос найденого и текущего выбранного устройства
341
IKOL_VOL        LD HL,(ADRTEKV)                 ;АДРЕС ТЕКУЩЕГО ВЫБРАННОГО РАЗДЕЛА
325
IKOL_VOL        LD HL,(DEVMAN_VARS.ADRTEKV)     ; адрес текущего выбранного раздела
342
                INC HL
326
                INC HL
343
                INC HL
327
                INC HL
344
                LD A,(HL)                       ;ТИП РАЗДЕЛА
328
                LD A,(HL)                       ; тип раздела
345
                LD DE,(KOLDVOL)                 ;D-НОМЕР ВЫБРАННОГО РАЗДЕЛА, E-КОЛИЧЕСТВО НАЙДЕННЫХ РАЗДЕЛОВ
329
                LD DE,(DEVMAN_VARS.KOLDVOL)     ; D-номер выбранного раздела, E-количество найденных разделов
346
                LD HL,BUF_TABLVOL               ;АДРЕС НАЧАЛА ТАБЛИЦЫ НАЙДЕННЫХ РАЗДЕЛОВ
330
                LD HL,BUF_VOLUMES               ; адрес начала таблицы найденных разделов
347
                AND A
331
                AND A
348
                RET
332
                RET
349
 
333
 
350
;ВЫЧИСЛЕНИЕ КОЛИЧЕСТВА НАЙДЕННЫХ РАЗДЕЛОВ НА ВСЕХ УСТРОЙСТВАХ
334
; вычисление количества найденных разделов на всех устройствах
351
SETVOLD         LD A,IXL
335
SETVOLD         LD A,IXL
352
                RRCA
336
                RRCA
353
                RRCA
337
                RRCA
354
                RRCA
338
                RRCA
355
                AND 0X1F
339
                AND 0x1F
356
                LD (KOLDVOL),A
340
                LD (DEVMAN_VARS.KOLDVOL),A
357
                RET
341
                RET
358
 
342
 
359
;ВЫБОР РАЗДЕЛА И ИНИТ ЕГО ПЕРЕМЕННЫХ
343
; выбор раздела и инит его переменных
360
FREINIT_VOL     LD L,A
344
FREINIT_VOL     LD L,A
361
                LD A,IYL
345
                LD A,IYL
362
                AND A
346
                AND A
363
                JR Z,FREINITVOL1
347
                JR Z,FREINITVOL1
364
                LD A,(RREG_A)
348
                LD A,(RREG_A)
365
FREINITVOL1     LD IYL,INTERNAL
349
FREINITVOL1     LD IYL,INTERNAL
366
                CALL SET_VOL1
350
                CALL SET_VOL1
367
                CALL INIT_FATVARS
351
                CALL INIT_FATVARS
368
                JP INIRTSC
352
                JP INIRTSC
369
 
353
 
370
;ВЫБОР РАЗДЕЛА
354
; выбор раздела
371
SET_VOL         LD L,A
355
SET_VOL         LD L,A
372
                LD A,IYL
356
                LD A,IYL
373
                AND A
357
                AND A
374
                LD A,L
358
                LD A,L
375
                JR NZ,SET_VOL1
359
                JR NZ,SET_VOL1
Line 377... Line 361...
377
                LD HL,KOLVOL1
361
                LD HL,KOLVOL1
378
                PUSH HL
362
                PUSH HL
379
SET_VOL1        PUSH AF
363
SET_VOL1        PUSH AF
380
                CALL SAVE_FNDVOL
364
                CALL SAVE_FNDVOL
381
                POP AF
365
                POP AF
382
SET_VOL_MNT     LD HL,KOLDVOL
366
SET_VOL_MNT     LD HL,DEVMAN_VARS.KOLDVOL
383
                CP (HL)
367
                CP (HL)
384
                CCF
368
                CCF
385
                RET C
369
                RET C
386
                LD (SETDVOL),A
370
                LD (DEVMAN_VARS.SETDVOL),A
387
                LD L,A
371
                LD L,A
388
                LD H,0
372
                LD H,0
389
                ADD HL,HL
373
                ADD HL,HL
390
                ADD HL,HL
374
                ADD HL,HL
391
                ADD HL,HL
375
                ADD HL,HL
392
                LD DE,BUF_TABLVOL
376
                LD DE,BUF_VOLUMES
393
                ADD HL,DE
377
                ADD HL,DE
394
                LD (ADRTEKV),HL
378
                LD (DEVMAN_VARS.ADRTEKV),HL
395
                LD A,(HL)
379
                LD A,(HL)
396
;               CP 4
380
;               CP 4
397
;               LD HL,DISKETA           ;ЕЩЕ НЕ ОСИЛИЛ
381
;               LD HL,DISKETA           ; все еще отсутствует
398
;               JR C,SET_DRV
382
;               JR C,SET_DRV
399
                CP _SL_USBF
383
                CP _SL_USBF
400
                LD HL,COMUSBF
384
                LD HL,COMUSBF
401
                JR Z,SET_DRV
385
                JR Z,SET_DRV
402
                CP _SD_SDZ
386
                CP _SD_SDZ
Line 404... Line 388...
404
                JR Z,SET_DRV
388
                JR Z,SET_DRV
405
                CP _SD_SDG
389
                CP _SD_SDG
406
                LD HL,COMSDG
390
                LD HL,COMSDG
407
                JR Z,SET_DRV
391
                JR Z,SET_DRV
408
                LD HL,COMHDDN
392
                LD HL,COMHDDN
409
SET_DRV         LD (GO_DEV),HL
393
SET_DRV         LD (DEVMAN_VARS.GO_DEV),HL
410
                CALL LOAD_FNDVOL
394
                CALL LOAD_FNDVOL
411
                LD HL,0XFE
395
.L1             LD HL,CRC_SIZE
412
                PUSH IX
396
                PUSH IX
413
                LD IX,BUF_TABLVOL
397
                LD IX,BUF_VOLUMES
414
                ROMCALL CRC16_FAST,ROM_RST81
398
        ROMCALL CRC16_FAST,ROM_RST81
415
                POP IX
399
                POP IX
416
                LD (CRC_DRVS),HL
400
                LD (BUF_VOLUMES + 0xFE),HL
417
                XOR A
401
                XOR A
418
                RET
402
                RET
419
 
403
 
420
SAVE_FNDVOL     PUSH IX
404
SAVE_FNDVOL
-
 
405
;               PUSH IX
421
                LD HL,0XFE
406
;               LD HL,CRC_SIZE
422
                LD IX,ERORDRV
407
;               LD IX,FATVAR.ERORDRV
423
                ROMCALL CRC16_FAST,ROM_RST81
408
;       ROMCALL CRC16_FAST,ROM_RST81
424
                POP IX
409
;               POP IX
425
                LD (CRC_VOL),HL                 ;ВЫЧИСЛЕНИЕ CRC РАЗДЕЛА ПЕРЕД СОХРАНЕНИЕМ
410
;               LD (BUF_VOLUMES + 0xFE),HL      ; вычисление CRC раздела перед сохранением
426
                EVOPORT WIN_P5,RAM_FATVARS
411
        EVOPORT WIN_P1,RAM_FATVARS
427
                LD A,(SETDVOL)
412
                LD A,(DEVMAN_VARS.SETDVOL)
428
                ADD A,HIGH (CPU5+BUF_ALLVOL)+4
413
                ADD A,HIGH (CPU1+BUF_ALLVOL)+4
429
                LD D,A
414
                LD D,A
430
                LD E,0
415
                LD E,0
431
                LD HL,BUF_TEKVOL
416
                LD HL,BUF_CURRFATVAR
432
                LD BC,0X100
417
                LD BC,0x100
433
                LDIR
418
                LDIR
434
                RET
419
                RET
435
 
420
 
-
 
421
LOAD_FNDVOL
436
LOAD_FNDVOL     EVOPORT WIN_P5,RAM_FATVARS
422
        EVOPORT WIN_P1,RAM_FATVARS
437
                LD A,(SETDVOL)
423
                LD A,(DEVMAN_VARS.SETDVOL)
438
                ADD A,HIGH (CPU5+BUF_ALLVOL)+4
424
                ADD A,HIGH (CPU1+BUF_ALLVOL)+4
439
                LD H,A
425
                LD H,A
440
                LD L,0
426
                LD L,0
441
                LD DE,BUF_TEKVOL
427
                LD DE,BUF_CURRFATVAR
442
                LD BC,0X100
428
                LD BC,0x100
443
                LDIR
429
                LDIR
444
;               PUSH IX
430
;               PUSH IX
445
;               LD HL,0XFE
431
;               LD HL,CRC_SIZE
446
;               LD IX,ERORDRV
432
;               LD IX,BUF_VOLUMES
447
;               ROMCALL CRC16_FAST,P_ADDON1
433
;       ROMCALL CRC16_FAST,P_ADDON1
448
;               POP IX
434
;               POP IX
449
;               LD DE,(CRC_VOL)
435
;               LD DE,(BUF_VOLUMES + 0xFE)
450
;               AND A
436
;               AND A
451
;               SBC HL,DE
437
;               SBC HL,DE
452
;               JP NZ,REDEVFIND
438
;               JP NZ,REDEVFIND
453
                CALL ICOM_FAT
439
                CALL ICOM_FAT
454
                DB _INIT_TEKDIR
440
                DB _INIT_TEKDIR
455
                RET
441
                RET
456
 
442
 
457
CMP_SDCARD      LD A,(SETDVOL)
443
CMP_SDCARD      LD A,(DEVMAN_VARS.SETDVOL)
458
                CP _SD_SDG
444
                CP _SD_SDG
459
                JR NZ,CMPSDCARD1
445
                JR NZ,CMPSDCARD1
460
                LD H,CMOS_BYTE_01
446
                LD H,CMOS.BYTE_01
461
                ROMCALL READCMOS,ROM_RST82
447
        ROMCALL READCMOS,ROM_RST82
462
                LD A,L
448
                LD A,L
463
                AND M_ACCESSSDG                 ;ПРОВЕРКА РАЗРЕШЕНИЯ ДОСТУПА К SD КАРТЕ NEOGS
449
                AND CMOS_EC.M_SD_NGS_ONOFF      ; проверка разрешения доступа к SD карте NEOGS
464
                RET Z
450
                RET Z
465
CMPSDCARD1      PUSH IY
451
CMPSDCARD1      PUSH IY
466
                LD IYL,INTERNAL
452
                LD IYL,INTERNAL
467
                CALL TO_DRV
453
                CALL TO_DRV
468
                DB _DEV_STATUS
454
                DB _DEV_STATUS
469
                POP IY
455
                POP IY
470
                INC A
456
                INC A
471
                RET
457
                RET
472
 
458
 
473
READ_MBR        LD DE,0X01BE                    ;СМЕЩЕНИЕ В 0 СЕКТОРЕ УСТРОЙСТВА ДО ТАБЛИЦЫ MBR
459
READ_MBR        LD DE,0x01BE                    ; смещение в 0 секторе устройства до таблицы MBR
474
                PUSH IY
460
                PUSH IY
475
                ADD IY,DE                       ;УСТАНОВИЛИ УКАЗАТЕЛЬ НА НАЧАЛО ОПИСАТЕЛЕЙ РАЗДЕЛОВ
461
                ADD IY,DE                       ; установили указатель на начало описателей разделов
476
                LD BC,0X0400                    ;РАЗДЕЛОВ МАКСИМУМ 4 И ОБНУЛИЛИ СЧЕТЧИК РАЗДЕЛОВ С FAT
462
                LD BC,0x0400                    ; разделов максимум 4 и обнулили счетчик разделов с FAT
477
RDMBR0          LD A,(IY)                       ;ПЕРВЫЙ БАЙТ 16 БАЙТНОГО ОПИСАТЕЛЯ
463
.L1             LD A,(IY)                       ; первый байт 16 байтного описателя
478
                AND A                           ;ДОЛЖЕН БЫТЬ РАВЕН 0
464
                AND A                           ; должен быть равен 0
479
                JR Z,RDMBR1
465
                JR Z,.L2
480
                CP 0X80                         ;ИЛИ 0X80 (ПРИЗНАК ЗАГРУЗОЧНОГО РАЗДЕЛА)
466
                CP 0x80                         ; или 0x80 (признак загрузочного раздела)
481
                JR NZ,RDMBR2
467
                JR NZ,.L3
482
RDMBR1          LD A,(IY+4)                     ;БАЙТ ТИПА РАЗДЕЛА
468
.L2             LD A,(IY+4)                     ; байт типа раздела
483
                CALL CP_RAZD                    ;ПРОВЕРКА ТИПА РАЗДЕЛА
469
                CALL CP_RAZD                    ; проверка типа раздела
484
                JR NZ,RDMBR2                    ;ЕСЛИ НЕ FAT ТО ПРОВЕРЯЕМ СЛЕДУЮЩУЮ 16 БАЙТНУЮ ЗАПИСЬ
470
                JR NZ,.L3                       ; если не FAT то проверяем следующую 16 байтную запись
485
                INC C
471
                INC C
486
RDMBR2          LD DE,0X10
472
.L3             LD DE,0x10
487
                ADD IY,DE
473
                ADD IY,DE
488
                DJNZ RDMBR0                     ;ПРОВЕРЯЕМ СЛЕДУЮЩУЮ 16 БАЙТНУЮ ЗАПИСЬ В MBR
474
                DJNZ .L1                        ; проверяем следующую 16 байтную запись в MBR
489
                LD A,C
475
                LD A,C
490
                AND A
476
                AND A
491
                POP HL
477
                POP HL
492
                JP NZ,SCANMBR
478
                JP NZ,SCANMBR
493
                PUSH HL
479
                PUSH HL
494
                POP IY
480
                POP IY
495
                LD C,(IY+0X0D)
481
                LD C,(IY+0x0D)
496
                XOR A
482
                XOR A
497
                LD E,A
483
                LD E,A
498
                LD B,8
484
                LD B,8
499
                RR C
485
.L4             RR C
500
                ADC A,0
486
                ADC A,0
501
                DJNZ $-4
487
                DJNZ .L4
502
                DEC A
488
                DEC A
503
                JR NZ,$+3
489
                JR NZ,.L5
504
                INC E
490
                INC E
505
                LD A,(IY+0X0E)
491
.L5             LD A,(IY+0x0E)
506
                OR (IY+0X0F)
492
                OR (IY+0x0F)
507
                JR Z,$+3
493
                JR Z,.L10
508
                INC E
494
                INC E
-
 
495
.L10
509
;               LD A,(IY+0X13)
496
;               LD A,(IY+0x13)
510
;               OR (IY+0X14)
497
;               OR (IY+0x14)
511
;               JR Z,$+3
498
;               JR Z,.L6
512
;               INC E
499
;               INC E
513
;               LD A,(IY+0X20)
500
;.L6            LD A,(IY+0x20)
514
;               OR (IY+0X21)
501
;               OR (IY+0x21)
515
;               OR (IY+0X22)
502
;               OR (IY+0x22)
516
;               OR (IY+0X22)
503
;               OR (IY+0x22)
517
;               JR Z,$+3
504
;               JR Z,.L7
518
;               INC E
505
;               INC E
519
                LD A,(IY+0X15)
506
.L7             LD A,(IY+0x15)
520
                AND 0XF0
507
                AND 0xF0
521
                CP 0XF0
508
                CP 0xF0
522
                JR NZ,$+3
509
                JR NZ,.L8
523
                INC E
510
                INC E
524
                LD A,E
511
.L8             LD A,E
525
                CP 3;4
512
                CP 3;4
526
                RET NZ
513
                RET NZ
527
                LD A,(TEK_TYPE)
514
                LD A,(DEVMAN_VARS.TEK_TYPE)
528
                BIT 7,A
515
                BIT 7,A
529
                LD B,0
516
                LD B,0
530
                JR Z,$+3
517
                JR Z,.L9
531
                INC B
518
                INC B
532
                AND 0X7F
519
.L9             AND 0x7F
533
                LD C,A
520
                LD C,A
534
                PUSH IX
521
                PUSH IX
535
                POP HL
522
                POP HL
536
                XOR A
523
                XOR A
537
                LD (HL),C
524
                LD (HL),C
538
                INC HL
525
                INC HL
539
                LD (HL),B
526
                LD (HL),B
540
                INC HL
527
                INC HL
541
                LD (HL),0XFF
528
                LD (HL),0xFF
542
                INC HL
529
                INC HL
543
                LD (HL),A
530
                LD (HL),A
544
                INC HL
531
                INC HL
545
                LD (HL),A
532
                LD (HL),A
546
                INC HL
533
                INC HL
Line 553... Line 540...
553
                ADD IX,DE
540
                ADD IX,DE
554
INIT_VOL        PUSH IY
541
INIT_VOL        PUSH IY
555
                LD IYL,INTERNAL
542
                LD IYL,INTERNAL
556
                CALL SETVOLD
543
                CALL SETVOLD
557
                DEC A
544
                DEC A
558
                LD (SETDVOL),A
545
                LD (DEVMAN_VARS.SETDVOL),A
559
                LD L,A
546
                LD L,A
560
                LD H,0
547
                LD H,0
561
                ADD HL,HL
548
                ADD HL,HL
562
                ADD HL,HL
549
                ADD HL,HL
563
                ADD HL,HL
550
                ADD HL,HL
564
                LD DE,BUF_TABLVOL
551
                LD DE,BUF_VOLUMES
565
                ADD HL,DE
552
                ADD HL,DE
566
                LD (ADRTEKV),HL
553
                LD (DEVMAN_VARS.ADRTEKV),HL
567
                LD A,(HL)
554
                LD A,(HL)
568
                AND 0X7F
555
                AND 0x7F
569
;               CP 4
556
;               CP 4
570
;               LD HL,DISKETA           ;ЕЩЕ НЕ ОСИЛИЛ
557
;               LD HL,DISKETA           ; все еще отсутствует
571
;               JR C,DSET_DRV
558
;               JR C,DSET_DRV
572
                CP _SL_USBF
559
                CP _SL_USBF
573
                LD HL,COMUSBF
560
                LD HL,COMUSBF
574
                JR Z,DSET_DRV
561
                JR Z,DSET_DRV
575
                CP _SD_SDZ
562
                CP _SD_SDZ
Line 577... Line 564...
577
                JR Z,DSET_DRV
564
                JR Z,DSET_DRV
578
                CP _SD_SDG
565
                CP _SD_SDG
579
                LD HL,COMSDG
566
                LD HL,COMSDG
580
                JR Z,DSET_DRV
567
                JR Z,DSET_DRV
581
                LD HL,COMHDDN
568
                LD HL,COMHDDN
582
DSET_DRV        LD (GO_DEV),HL
569
DSET_DRV        LD (DEVMAN_VARS.GO_DEV),HL
583
                CALL IKOL_VOL
570
                CALL IKOL_VOL
584
                CALL ICOM_FAT
571
                CALL ICOM_FAT
585
                DB _INIT_FATVARS
572
                DB _INIT_FATVARS
586
                LD (IX-6),A
573
                LD (IX-6),A
587
                POP IY
574
                POP IY
588
                RET
575
                RET
589
 
576
 
590
;НА ВХОДЕ:
577
; на входе:
591
;A-BIT 7-0/1-MASTER/SLAVE
578
; A-BIT 7-0/1-MASTER/SLAVE
592
;BITS 6-0-ТИП НОСИТЕЛЯ
579
; биты 6-0-тип носителя
593
SCANMBR         LD DE,0X01BE
580
SCANMBR         LD DE,0x01BE
594
                ADD HL,DE
581
                ADD HL,DE
595
                EXX
582
                EXX
596
                LD A,(TEK_TYPE)
583
                LD A,(DEVMAN_VARS.TEK_TYPE)
597
                BIT 7,A
584
                BIT 7,A
598
                LD B,0
585
                LD B,0
599
                JR Z,$+3
586
                JR Z,.L4
600
                INC B
587
                INC B
601
                AND 0X7F
588
.L4             AND 0x7F
602
                LD C,A
589
                LD C,A
603
                EXX
590
                EXX
604
                LD A,4
591
                LD A,4
605
SCNMBR0         PUSH AF
592
.L1             PUSH AF
606
                LD A,(HL)
593
                LD A,(HL)
607
                LD C,4
594
                LD C,4
608
                ADD HL,BC
595
                ADD HL,BC
609
                LD C,0X0C
596
                LD C,0x0C
610
                AND A
597
                AND A
611
                JR Z,SCNMBR1
598
                JR Z,.L2
612
                CP 0X80
599
                CP 0x80
613
                JR NZ,SCNMBR2
600
                JR NZ,.L3
614
SCNMBR1         LD A,(HL)
601
.L2             LD A,(HL)
615
                AND A
602
                AND A
616
                JR Z,SCNMBR2
603
                JR Z,.L3
617
                CALL CP_RAZD
604
                CALL CP_RAZD
618
                JR NZ,SCNMBR2
605
                JR NZ,.L3
619
SCNMBR3         EXX
606
                EXX
620
                LD (IX+0),C
607
                LD (IX+0),C
621
                LD (IX+1),B
608
                LD (IX+1),B
622
                EXX
609
                EXX
623
                LD (IX+2),E                     ;УСТАНОВКА ТИПА FAT
610
                LD (IX+2),E                     ; установка типа FAT
624
                PUSH IX
611
                PUSH IX
625
                POP DE
612
                POP DE
626
                INC DE
613
                INC DE
627
                INC DE
614
                INC DE
628
                INC DE
615
                INC DE
Line 630... Line 617...
630
                ADD HL,BC
617
                ADD HL,BC
631
                LDI
618
                LDI
632
                LDI
619
                LDI
633
                LDI
620
                LDI
634
                LDI
621
                LDI
635
                LD (IX+7),0                     ;РЕЗЕРВНЫЙ БАЙТ
622
                LD (IX+7),0                     ; резервный байт
636
SCNMBR4         LD C,8
623
                LD C,8
637
                ADD IX,BC
624
                ADD IX,BC
638
                LD C,4
625
                LD C,4
639
SCNMBR2         ADD HL,BC
626
.L3             ADD HL,BC
640
                POP AF
627
                POP AF
641
                DEC A
628
                DEC A
642
                JR NZ,SCNMBR0
629
                JR NZ,.L1
643
                RET
630
                RET
644
 
631
 
645
SET_DEVICE      PUSH AF
632
SET_DEVICE      PUSH AF
646
                PUSH HL
633
                PUSH HL
647
                LD A,B
634
                LD A,B
648
                AND 0X0F
635
                AND 0x0F
649
                LD B,A
636
                LD B,A
650
                LD HL,(ADRTEKV)
637
                LD HL,(DEVMAN_VARS.ADRTEKV)
651
                INC HL
638
                INC HL
652
                LD A,(HL)
639
                LD A,(HL)
653
                AND 1                           ;MASTER ИЛИ SLAVE?
640
                AND 1                           ;MASTER или SLAVE?
654
                RLCA
641
                RLCA
655
                RLCA
642
                RLCA
656
                RLCA
643
                RLCA
657
                RLCA
644
                RLCA
658
                OR 0XE0                         ;ВСЕГДА LBA РЕЖИМ
645
                OR 0xE0                         ; всегда LBA режим
659
                OR B
646
                OR B
660
                LD B,A                          ;УСТАНОВИЛИ ВЫБРАННОЕ УСТРОЙСТВО MASTER ИЛИ SLAVE
647
                LD B,A                          ; установили выбранное устройство MASTER или SLAVE
661
                POP HL
648
                POP HL
662
                POP AF
649
                POP AF
663
                RET
650
                RET
664
 
651
 
665
;ПРОВЕРКА ТИПА РАЗДЕЛА
652
; проверка типа раздела
666
CP_RAZD         LD E,1                          ;FAT16
653
CP_RAZD         LD E,1                          ; FAT16
667
                CP 4
654
                CP 4
668
                RET Z
655
                RET Z
669
                CP 6
656
                CP 6
670
                RET Z
657
                RET Z
671
                CP 0X0E
658
                CP 0x0E
672
                RET Z
659
                RET Z
673
                LD E,2                          ;FAT32
660
                LD E,2                          ; FAT32
674
                CP 0X0B
661
                CP 0x0B
675
                RET Z
662
                RET Z
676
                CP 0X0C
663
                CP 0x0C
677
                RET Z
664
                RET Z
678
                LD E,0                          ;FAT12
665
                LD E,0                          ; FAT12
679
                CP 1
666
                CP 1
680
                RET
667
                RET
681
 
668
 
682
;ВРЕМЕННАЯ ФУНКЦИЯ ВЫЗОВА ДРАЙВЕРА HDD NEMO
669
; функция вызова драйвера HDD NEMO
683
COMHDDNEX       CALL P5_READ_BYTE
670
COMHDDNEX       CALL P5_READ_BYTE
684
                LD A,(RREG_AA)
671
                LD A,(RREG_AA)
685
                EX AF,AF'
672
                EX AF,AF'
686
                LD A,(RREG_A)
673
                LD A,(RREG_A)
687
                LD DE,(RREG_E)
674
                LD DE,(RREG_E)
Line 692... Line 679...
692
                LD (RREG_L),HL
679
                LD (RREG_L),HL
693
                LD (RREG_E),DE
680
                LD (RREG_E),DE
694
                LD (RREG_C),BC
681
                LD (RREG_C),BC
695
                RET
682
                RET
696
 
683
 
697
;КОПИРОВАНИЕ ТАБЛИЦЫ НАЙДЕННЫХ РАЗДЕЛОВ ВО ВНЕШНЮЮ ПРОГРАММУ
684
; копирование таблицы найденных разделов во внешнюю программу
698
GET_FNDVOLUME   LD BC,0X100                     ;ПЕРЕНОС 256 БАЙТ
685
GET_FNDVOLUME   LD BC,0x100                     ; перенос 256 байт
699
                LD DE,(RREG_L)                  ;АДРЕС КУДА ПЕРЕНОСИТЬ
686
                LD DE,(RREG_L)                  ; адрес куда переносить
700
                LD HL,BUF_TABLVOL-CPU6
687
                LD HL,BUF_VOLUMES & 0x3FFF;BUF_TABLVOL-CPU2
701
                JP LDIR_BYTES
688
                JP LDIR_BYTES
702
 
689
 
703
CONTROL_SD      LD A,(FLAGS_DRV)
690
CONTROL_SD      LD A,(DEVMAN_VARS.FLAGS_DRV)
704
                PUSH AF
691
                PUSH AF
705
                CALL FIND_SD
692
                CALL FIND_SD
706
                LD C,A
693
                LD C,A
707
                AND 3
694
                AND 3
708
                LD (RREG_A),A
695
                LD (RREG_A),A
Line 713... Line 700...
713
                RET
700
                RET
714
 
701
 
715
FIND_SD         PUSH IY
702
FIND_SD         PUSH IY
716
                LD IYL,INTERNAL
703
                LD IYL,INTERNAL
717
                LD E,0
704
                LD E,0
718
                LD A,(FLAGS_DRV)
705
                LD A,(DEVMAN_VARS.FLAGS_DRV)
719
                AND B_INST_SDG
706
                AND B_INST_SDG
720
                JR Z,CRTLSD1                    ;ЕСЛИ ДРАЙВЕР НЕ УСТАНОВЛЕН
707
                JR Z,CRTLSD1                    ; если драйвер не установлен
721
                PUSH HL
708
                PUSH HL
722
                PUSH DE
709
                PUSH DE
723
                CALL COMSDG
710
                CALL COMSDG
724
                DB _DEV_STATUS
711
                DB _DEV_STATUS
725
                POP DE
712
                POP DE
726
                POP HL
713
                POP HL
727
                AND A
714
                AND A
728
                SET 1,E                         ;ЕСТЬ SD КАРТА NEOGS
715
                SET 1,E                         ; есть SD карта NEOGS
729
                JR Z,CRTLSD1
716
                JR Z,CRTLSD1
730
                RES 1,E                         ;КАРТЫ НЕТ
717
                RES 1,E                         ; карты нет
731
                EX DE,HL
718
                EX DE,HL
732
                LD HL,FLAGS_DRV
719
                LD HL,DEVMAN_VARS.FLAGS_DRV
733
                RES 7,(HL)
720
                RES 7,(HL)
734
                EX DE,HL
721
                EX DE,HL
735
CRTLSD1         PUSH HL
722
CRTLSD1         PUSH HL
736
                CALL COMSDZ
723
                CALL COMSDZ
737
                DB _DEV_STATUS
724
                DB _DEV_STATUS
738
                POP HL
725
                POP HL
739
                AND A
726
                AND A
740
                SET 0,E                         ;ЕСТЬ SD КАРТЫ ZC
727
                SET 0,E                         ; есть SD карты ZC
741
                JR Z,CRTLSD2
728
                JR Z,CRTLSD2
742
                RES 0,E                         ;КАРТЫ НЕТ
729
                RES 0,E                         ; карты нет
743
CRTLSD2         POP IY
730
CRTLSD2         POP IY
744
                LD HL,FLAGS_DRV
731
                LD HL,DEVMAN_VARS.FLAGS_DRV
745
                LD A,0XFC
732
                LD A,%11111100
746
                AND (HL)
733
                AND (HL)
747
                OR E
734
                OR E
748
                LD (HL),A
735
                LD (HL),A
749
                RET
736
                RET
750
 
737
 
751
; HLBCDE - НОМЕР СЕКТОРА
738
; HLBCDE - номер сектора
752
SET_SECTOR_NUM
739
SET_SECTOR_NUM
753
                LD HL,(RREG_L)
740
                LD HL,(RREG_L)
754
                LD (NUMSEC_LBA48+4),HL
741
                LD (NUMSEC_LBA48+4),HL
755
                LD HL,(RREG_C)
742
                LD HL,(RREG_C)
756
                LD (NUMSEC_LBA48+2),HL
743
                LD (NUMSEC_LBA48+2),HL