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 |