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 |