Rev 1069 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
801 | savelij | 1 | |
1186 | savelij | 2 | ; LAST UPDATE: 16.02.2025 savelij |
801 | savelij | 3 | |
999 | savelij | 4 | ; загрузка выбранного шрифта |
801 | savelij | 5 | LOAD_FONT LD HL,FONTS |
6 | LD DE,CMP4FONTS |
||
7 | JR FATBOOT4 |
||
8 | |||
999 | savelij | 9 | ; загрузка tap файла |
801 | savelij | 10 | EMULTAPLOAD LD HL,TAPES |
11 | LD DE,CMP4TAPES |
||
12 | JR FATBOOT4 |
||
13 | |||
999 | savelij | 14 | ; загрузка полного rom файла для обновления 512KB |
801 | savelij | 15 | LOAD4FLASH_FULL LD HL,ROMS |
16 | LD DE,CMP4ROMS |
||
17 | LD A,8 |
||
18 | LD (CMP_ROMSIZE),A |
||
19 | JR FATBOOT4 |
||
20 | |||
999 | savelij | 21 | ; загрузка USER ROM файла для обновления 64KB |
801 | savelij | 22 | LOAD4FLASH_CUST LD HL,ROMS |
23 | LD DE,CMP4ROMS |
||
24 | LD A,1 |
||
25 | LD (CMP_ROMSIZE),A |
||
26 | JR FATBOOT4 |
||
27 | |||
999 | savelij | 28 | ; загрузка образа на рамдиск |
801 | savelij | 29 | COPYIMAGE LD HL,IMAGES |
30 | LD DE,CMP4IMAGE |
||
31 | JR FATBOOT4 |
||
32 | |||
999 | savelij | 33 | ; загрузка HOBETA файла для запуска |
801 | savelij | 34 | FATBOOT LD HL,HOBETA |
35 | LD DE,CMP4HOBETA |
||
36 | FATBOOT4 LD (GDE_EXT_FILES),HL |
||
37 | LD (CMP_FOUNDED),DE |
||
38 | SELECT_DEVICE DI |
||
39 | LD HL,ERS_FLAGS |
||
999 | savelij | 40 | SET B_RUN_FAT,(HL) ; работать будем с FAT |
41 | RST8 _COM_DEV,_KOL_VOL |
||
801 | savelij | 42 | LD A,E |
43 | AND A |
||
44 | JP Z,_STUPID |
||
1026 | savelij | 45 | LD HL,ADR_CAT-0x100 ; адрес куда положить таблицу найденных разделов |
999 | savelij | 46 | RST8 _COM_DEV,_GET_FNDVOLUME ; получение таблицы найденных разделов |
47 | LD B,E ; счетчик количества найденных разделов |
||
48 | LD IX,SEL_FAT_DEV ; адрес описателя окна выбора разделов |
||
49 | LD (IX+_NUM_PKT),D ; номер пункта в окне |
||
50 | LD (IX+_TEK_PKT_L),D ; номер текущего пункта |
||
51 | LD (IX+_NUM_KOL_L),E ; количество пунктов в окне |
||
801 | savelij | 52 | INC E |
53 | INC E |
||
999 | savelij | 54 | LD (IX+_V_SIZE),E ; установили высоту выводимого окна |
55 | LD DE,6 ; шаг по таблице найденных разделов -2 |
||
801 | savelij | 56 | EXX |
57 | LD HL,TXT_FAT_SEL |
||
999 | savelij | 58 | LD DE,SEL_FAT_DRV ; адрес где будет формироваться текст окна выбора разделов |
801 | savelij | 59 | LD BC,ETXT_FAT_SEL-TXT_FAT_SEL |
60 | LDIR |
||
61 | EX DE,HL |
||
62 | EXX |
||
63 | FATBOOT1 EXX |
||
1026 | savelij | 64 | LD (HL),0x0D |
801 | savelij | 65 | INC HL |
66 | LD (HL),3 |
||
67 | INC HL |
||
68 | EXX |
||
999 | savelij | 69 | LD A,(HL) ; взяли номер раздела |
801 | savelij | 70 | INC HL |
999 | savelij | 71 | LD C,(HL) ; MASTER или SLAVE |
801 | savelij | 72 | INC HL |
73 | ADD A,C |
||
74 | ADD A,C |
||
999 | savelij | 75 | SUB 4 ; -4, ибо дисководы не учитываются |
801 | savelij | 76 | EXX |
77 | EX DE,HL |
||
999 | savelij | 78 | LD HL,TXT4MENU_DEVICE ; адрес таблицы текста о разделах |
801 | savelij | 79 | LD C,A |
831 | savelij | 80 | ADD A,A |
81 | ADD A,A |
||
82 | ADD A,C |
||
83 | ADD A,A |
||
999 | savelij | 84 | ADD A,A ; умножено на 20 |
831 | savelij | 85 | LD C,A |
801 | savelij | 86 | LD B,0 |
999 | savelij | 87 | ADD HL,BC ; получили адрес откуда текст взять |
88 | LD BC,20 ; длина переноса 20 байт |
||
801 | savelij | 89 | EXX |
90 | LD A,L |
||
91 | EXX |
||
92 | RRCA |
||
93 | RRCA |
||
94 | RRCA |
||
1026 | savelij | 95 | AND 0x1F |
1186 | savelij | 96 | ADD A,'E' ; буква найденного устройства |
801 | savelij | 97 | LD (DE),A |
98 | INC DE |
||
999 | savelij | 99 | LDIR ; перенос текста из выбранной таблицы |
801 | savelij | 100 | EXX |
999 | savelij | 101 | LD A,(HL) ; тип раздела |
801 | savelij | 102 | EXX |
103 | LD C,A |
||
104 | ADD A,A |
||
105 | ADD A,A |
||
999 | savelij | 106 | ADD A,C ; умноженно на 5 |
107 | LD HL,TXT4MENU_TYPE ; адрес таблицы текста типов разделов |
||
801 | savelij | 108 | LD C,A |
109 | ADD HL,BC |
||
110 | LD C,5 |
||
999 | savelij | 111 | LDIR ; перенос текста из выбранной таблицы |
801 | savelij | 112 | EX DE,HL |
113 | EXX |
||
114 | ADD HL,DE |
||
115 | DJNZ FATBOOT1 |
||
116 | EXX |
||
117 | LD (HL),0 |
||
118 | INC HL |
||
119 | LD B,(IX+_V_SIZE) |
||
120 | DEC B |
||
121 | DEC B |
||
122 | LD C,B |
||
1186 | savelij | 123 | LD A,'E' |
801 | savelij | 124 | LD (IX+_ADR_HOTKEY_L),L |
999 | savelij | 125 | LD (IX+_ADR_HOTKEY_H),H ; адрес таблицы горячих клавиш выбора FAT устройства |
801 | savelij | 126 | LD (HL),B |
127 | INC HL |
||
999 | savelij | 128 | FATBOOT3 LD (HL),A ; формирование таблицы горячих клавиш |
801 | savelij | 129 | INC HL |
130 | INC A |
||
131 | DJNZ FATBOOT3 |
||
999 | savelij | 132 | LD (SELFATDEVEXE),HL ; положили адрес таблицы адресов вызова выбранного |
801 | savelij | 133 | LD B,C |
999 | savelij | 134 | FATBOOT2 LD (HL),LOW (SEL_FAT) ; формирование таблицы адресов вызывов |
801 | savelij | 135 | INC HL |
136 | LD (HL),HIGH (SEL_FAT) |
||
137 | INC HL |
||
138 | DJNZ FATBOOT2 |
||
139 | LD A,C |
||
140 | EXX |
||
141 | DEC A |
||
142 | JR Z,SEL_FAT |
||
999 | savelij | 143 | RST8 _WINW |
144 | JP _RULILKA ; возвращаемся к общему управлению |
||
801 | savelij | 145 | |
1186 | savelij | 146 | FILE_BROWSER DI |
147 | LD A,1 |
||
148 | RST8 _NMI_FB_BLOCK ; блокировка File Browser на NMI |
||
149 | LD HL,SUPPORT_EXT |
||
801 | savelij | 150 | LD DE,CMP4TAPES |
151 | LD (GDE_EXT_FILES),HL |
||
152 | LD (CMP_FOUNDED),DE |
||
153 | LD HL,ERS_FLAGS |
||
154 | SET B_RUN_FAT,(HL) |
||
155 | JR SEL_FILES |
||
156 | |||
999 | savelij | 157 | ; переключение на устройства и вывод найденного на нем |
801 | savelij | 158 | SEL_FAT DI |
999 | savelij | 159 | LD A,(IX+_TEK_PKT_L) ; взяли номер выбранного устройства |
160 | RST8 _COM_DEV,_SET_VOL ; выбрали устройство по номеру |
||
161 | SEL_FILES |
||
162 | RST8 _COM_DEV,_KOL_VOL |
||
801 | savelij | 163 | LD A,E |
164 | AND A |
||
165 | JP Z,_STUPID |
||
166 | CALL SEARCH_FILE |
||
1026 | savelij | 167 | ; если файл найден только один |
168 | ; LD HL,1 |
||
169 | ; AND A |
||
170 | ; SBC HL,BC ; найденно что-то одно? |
||
171 | ; JR NZ,SEL_FAT1 ; если найдено >1, то продолжаем |
||
172 | ; PUSH BC ; сохранили количество найденного |
||
173 | ; LD BC,(ADR_CAT_FAT) ; взяли номер единственного найденного |
||
174 | ; LD A,6 |
||
175 | ; RST8 _COM_FAT,_POS_FILES |
||
176 | ; LD HL,BUF_FILEITEM |
||
177 | ; RST8 _COM_FAT,_READ_DIR ; получили описатель |
||
178 | ; POP BC ; вернули количество найденного |
||
179 | ; LD DE,0x0B |
||
180 | ; ADD HL,DE |
||
181 | ; LD A,(HL) ; взяли флаговый байт того что нашли |
||
182 | ; AND 0x10 |
||
183 | ; LD HL,0 ; если запускаем, то номер 0 из найденного |
||
184 | ; JR Z,RUN_HOB1 ; если это файл сразу запускаем |
||
185 | ;SEL_FAT1 |
||
186 | LD IX,FAT_FILES ; если дира, то выводим в окно |
||
801 | savelij | 187 | JP OUT_HOB |
188 | |||
999 | savelij | 189 | ; запуск выбранного кодового файла из HOBETA файла или вход/выход в диры |
801 | savelij | 190 | RUN_HOB DI |
999 | savelij | 191 | CALL SHUT2AY ; бумкалка в AY |
801 | savelij | 192 | LD L,(IX+_TEK_PKT_L) |
999 | savelij | 193 | LD H,(IX+_TEK_PKT_H) ; HL = номер выбранного файла |
801 | savelij | 194 | RUN_HOB1 LD DE,ADR_CAT_FAT |
195 | ADD HL,HL |
||
999 | savelij | 196 | ADD HL,DE ; откуда номер файла взять |
801 | savelij | 197 | LD C,(HL) |
198 | INC HL |
||
999 | savelij | 199 | LD B,(HL) ; получили текущий выбранный номер |
1026 | savelij | 200 | LD (NUMFAT_SELECT),BC |
801 | savelij | 201 | LD A,6 |
999 | savelij | 202 | RST8 _COM_FAT,_POS_FILES ; установка внутреннего указателя FAT драйвера |
801 | savelij | 203 | LD HL,BUF_FILEITEM |
999 | savelij | 204 | RST8 _COM_FAT,_READ_DIR ; получили описатель по установленному номеру |
1186 | savelij | 205 | LD DE,_DIR_Attr ; нужен байт по смещению |
999 | savelij | 206 | ADD HL,DE ; для определения файл или директория |
207 | LD A,(HL) ; из этого байта нужен один бит |
||
801 | savelij | 208 | SBC HL,DE |
1186 | savelij | 209 | AND M_DIR_Directory ; проверили |
999 | savelij | 210 | JP Z,GO_RUN_HOB ; если это файл, то запускаем кодовый блок |
211 | RST8 _COM_FAT,_ENTER_DIR ; входим в выбранную директорию |
||
212 | PUSH HL ; сохранили адрес где описатель выбранного файла лежит |
||
801 | savelij | 213 | LD HL,BUF_RDPATH |
999 | savelij | 214 | RST8 _COM_FAT,_GET_PATH ; получить путь к файлу после входа в директорию |
215 | LD A,(HL) ; взяли букву устройства текущего пути |
||
1186 | savelij | 216 | SUB 'E' ; преобразовали в номер устройства |
801 | savelij | 217 | LD D,A |
218 | LD E,0 |
||
219 | LD HL,BUF_LEVDIR |
||
220 | SRL D |
||
221 | RR E |
||
222 | SRL D |
||
223 | RR E |
||
224 | ADD HL,DE |
||
999 | savelij | 225 | EX (SP),HL ; сохранили адрес описателя FAT устройства, восстановили адрес описателя файла |
226 | LD A,(HL) ; будем проверять первый символ имени предыдущего описателя |
||
227 | POP HL ; восстановили адрес описателя FAT устройства |
||
1186 | savelij | 228 | CP '.' ; если первый символ имени не ".", то сохраняем текущие значения окошка и |
999 | savelij | 229 | JR NZ,SNYT0 ; входим в диру |
230 | LD C,(HL) ; при выходе из директории восстанавливаем позиции в окне |
||
801 | savelij | 231 | INC HL |
232 | LD B,(HL) |
||
233 | INC HL |
||
234 | PUSH HL |
||
235 | ADD HL,BC |
||
236 | DEC HL |
||
237 | LD A,(HL) |
||
238 | DEC HL |
||
239 | LD C,(HL) |
||
240 | DEC HL |
||
241 | LD B,(HL) |
||
242 | POP DE |
||
243 | AND A |
||
244 | SBC HL,DE |
||
245 | EX DE,HL |
||
246 | DEC HL |
||
247 | LD (HL),D |
||
248 | DEC HL |
||
249 | LD (HL),E |
||
250 | LD (IX+_TEK_PKT_L),C |
||
251 | LD (IX+_TEK_PKT_H),B |
||
252 | LD (IX+_NUM_PKT),A |
||
999 | savelij | 253 | CALL SEARCH_FILE ; поиск по маске в директории в которую вошли |
801 | savelij | 254 | LD (IX+_NUM_KOL_L),C |
999 | savelij | 255 | LD (IX+_NUM_KOL_H),B ; установили количество найденных по маске файлов в этой директории |
256 | JP REOUT_HOB ; вывели новое содержимое окна |
||
801 | savelij | 257 | |
999 | savelij | 258 | ; при входе в диру сохранение текущих данных окна |
801 | savelij | 259 | SNYT0 LD C,(HL) |
260 | INC HL |
||
999 | savelij | 261 | LD B,(HL) ; BC = смещение до первой свободной ячейки |
801 | savelij | 262 | INC HL |
999 | savelij | 263 | PUSH HL ; HL = адрес начала самих ячеек |
264 | ADD HL,BC ; HL = адрес первой свободной ячейки |
||
801 | savelij | 265 | LD D,(IX+_TEK_PKT_H) |
266 | LD E,(IX+_TEK_PKT_L) |
||
267 | LD A,(IX+_NUM_PKT) |
||
268 | LD (HL),D |
||
269 | INC HL |
||
270 | LD (HL),E |
||
271 | INC HL |
||
272 | LD (HL),A |
||
273 | INC HL |
||
999 | savelij | 274 | POP DE ; DE = адрес начала самих ячеек |
801 | savelij | 275 | AND A |
276 | SBC HL,DE |
||
277 | EX DE,HL |
||
278 | DEC HL |
||
279 | LD (HL),D |
||
280 | DEC HL |
||
281 | LD (HL),E |
||
282 | LD C,(IX+_NUM_KOL_L) |
||
283 | LD B,(IX+_NUM_KOL_H) |
||
284 | CALL SEARCH_FILE |
||
285 | JP OUT_HOB |
||
286 | |||
999 | savelij | 287 | ; BCDE = (ADR) - BCDE |
821 | savelij | 288 | BCDEHLM LD A,(HL) |
289 | INC HL |
||
290 | SUB E |
||
291 | LD E,A |
||
292 | LD A,(HL) |
||
293 | INC HL |
||
294 | SBC A,D |
||
295 | LD D,A |
||
296 | LD A,(HL) |
||
297 | INC HL |
||
298 | SBC A,C |
||
299 | LD C,A |
||
300 | LD A,(HL) |
||
301 | SBC A,B |
||
302 | LD B,A |
||
303 | RET |
||
304 | |||
1026 | savelij | 305 | SELMOUNT LD HL,BUF_FILEITEM+0x1C |
306 | LD BC,0x0A |
||
821 | savelij | 307 | LD DE,0 |
308 | CALL BCDEHLM |
||
1067 | savelij | 309 | JP NZ,LOADIMAGE ; образ меньше или больше стандартного, загрузка в рамдиск |
310 | ; размер TRD образа стандартного размера |
||
999 | savelij | 311 | LD HL,ERS_FLAGS |
312 | BIT B_VIEW_IMG,(HL) |
||
313 | LD IX,RUN_IMAGE ; окно выбора загрузки/монтирования |
||
314 | RST8 _WINW |
||
801 | savelij | 315 | JP _RULILKA |
316 | |||
999 | savelij | 317 | RUNIMG_A XOR A |
318 | JR RUNIMG_ALL |
||
319 | |||
320 | RUNIMG_B LD A,1 |
||
321 | JR RUNIMG_ALL |
||
322 | |||
323 | RUNIMG_C LD A,2 |
||
324 | JR RUNIMG_ALL |
||
325 | |||
326 | RUNIMG_D LD A,3 |
||
327 | ; запуск Basic файла с принудительным переключением виртуального и реального дисковода на указанный номер |
||
328 | RUNIMG_ALL PUSH AF |
||
329 | RST8 _MOUNTER,_LOADIMAGE |
||
1026 | savelij | 330 | POP AF |
331 | PUSH AF |
||
999 | savelij | 332 | RST8 _MOUNTER,_SET_VIRTREAL |
333 | POP AF |
||
1026 | savelij | 334 | CALL SETUP_DRIVE |
999 | savelij | 335 | LD HL,ERS_FLAGS |
336 | BIT B_VIEW_IMG,(HL) |
||
337 | JP Z,RESTART |
||
338 | RES B_VIEW_IMG,(HL) |
||
339 | JP RUNMOUNT |
||
340 | |||
341 | ; только загрузка образа |
||
342 | LOADIMAGE |
||
343 | RST8 _MOUNTER,_LOADIMAGE |
||
344 | LD HL,ERS_FLAGS |
||
345 | BIT B_VIEW_IMG,(HL) |
||
346 | JP Z,RESTART |
||
347 | RES B_VIEW_IMG,(HL) |
||
348 | JP START_IMG |
||
349 | |||
801 | savelij | 350 | MOUNT_A XOR A |
999 | savelij | 351 | ; запуск Basic файла с принудительным переключением виртуального и реального дисковода на указанный номер |
817 | savelij | 352 | MOUNT_ALL PUSH AF |
999 | savelij | 353 | RST8 _MOUNTER,_OPEN_MOUNT ; !!! |
1026 | savelij | 354 | POP AF |
355 | PUSH AF |
||
999 | savelij | 356 | RST8 _MOUNTER,_SET_VIRTREAL |
817 | savelij | 357 | POP AF |
1026 | savelij | 358 | CALL SETUP_DRIVE |
801 | savelij | 359 | LD HL,ERS_FLAGS |
360 | BIT B_VIEW_IMG,(HL) |
||
361 | JP Z,RESTART |
||
362 | RES B_VIEW_IMG,(HL) |
||
363 | JP RUNMOUNT |
||
364 | |||
365 | MOUNT_B LD A,1 |
||
366 | JR MOUNT_ALL |
||
367 | |||
368 | MOUNT_C LD A,2 |
||
369 | JR MOUNT_ALL |
||
370 | |||
371 | MOUNT_D LD A,3 |
||
372 | JR MOUNT_ALL |
||
373 | |||
1026 | savelij | 374 | SEL4COPY_A XOR A |
375 | JR SEL4COPY |
||
376 | |||
377 | SEL4COPY_B LD A,1 |
||
378 | JR SEL4COPY |
||
379 | |||
380 | SEL4COPY_C LD A,2 |
||
381 | JR SEL4COPY |
||
382 | |||
383 | SEL4COPY_D LD A,3 |
||
384 | SEL4COPY LD C,1 |
||
385 | CALL FTR_DOS |
||
386 | RST8 _COM_FAT,_OPEN_FILE |
||
387 | LD HL,0 |
||
388 | LD (TRD_5CF4),HL |
||
389 | LD HL,BUF_FILEITEM |
||
390 | LD BC,(NUMFAT_SELECT) |
||
391 | RST8 _COM_FAT,_READ_DIR |
||
392 | LD BC,(BUF_FILEITEM + 0x1D) |
||
393 | LD DE,0x40 |
||
394 | CALL DIVIDE16 |
||
395 | LD (FILESIZE_BLOCKS),BC |
||
396 | LD IX,WINCOPY_IMAGE |
||
397 | RST8 _WINW |
||
398 | LD A,0x11 |
||
399 | CALL SET_7FFD |
||
400 | XOR A |
||
401 | .L1 PUSH AF |
||
402 | LD HL,0xC000 |
||
403 | LD A,0x20 |
||
404 | RST8 _COM_FAT,_READ_FILE |
||
405 | PUSH AF |
||
406 | LD HL,0xC000 |
||
407 | LD DE,(TRD_5CF4) |
||
408 | LD BC,0x4006 |
||
409 | CALL FTR_DOS |
||
410 | POP HL |
||
411 | POP AF |
||
412 | CALL DRAW_PROGRESS ; рисование индикатора копирования |
||
413 | INC A |
||
414 | BIT 0,L |
||
415 | JR Z,.L1 |
||
416 | ; файл кончился |
||
417 | .L2 LD A,0x10 |
||
418 | CALL SET_7FFD |
||
419 | JP RESTART |
||
420 | |||
421 | ; запуск, загрузка или монтирование файлов |
||
999 | savelij | 422 | GO_RUN_HOB |
423 | RST8 _COM_FAT,_OPEN_FILE |
||
801 | savelij | 424 | LD DE,8 |
425 | ADD HL,DE |
||
426 | PUSH HL |
||
427 | LD HL,(BUF_FILEITEM+8) |
||
428 | LD DE,"RT" |
||
429 | AND A |
||
430 | SBC HL,DE |
||
431 | POP HL |
||
999 | savelij | 432 | JP Z,SELMOUNT ; перехода на загрузку TRD образа |
801 | savelij | 433 | LD A,(HL) |
1186 | savelij | 434 | CP '$' |
999 | savelij | 435 | JR Z,GORUNHOB1 ; переход на загрузку HOBETA |
1186 | savelij | 436 | CP 'S' |
999 | savelij | 437 | JP NZ,LOAD_IMAGE ; переход на загрузку SCL образа |
801 | savelij | 438 | INC HL |
439 | LD A,(HL) |
||
440 | DEC HL |
||
1186 | savelij | 441 | CP 'P' |
999 | savelij | 442 | JR Z,GORUNHOB1 ; переход на загрузку SPG |
1186 | savelij | 443 | CP 'N' |
801 | savelij | 444 | LD A,(HL) |
999 | savelij | 445 | JP NZ,LOAD_IMAGE ; переход на загрузку образа |
446 | GORUNHOB1 |
||
447 | RST8 _COM_DEV,_KOL_VOL ; запрос у менеджера устройств о текущем устройстве |
||
448 | LD A,D ; взяли номер текущего устройства |
||
801 | savelij | 449 | LD HL,ADR_CAT_FAT |
999 | savelij | 450 | RST8 _COM_DEV,_GET_FNDVOLUME |
801 | savelij | 451 | ADD A,A |
452 | ADD A,A |
||
453 | ADD A,A |
||
454 | LD C,A |
||
455 | LD B,0 |
||
456 | ADD HL,BC |
||
999 | savelij | 457 | LD A,(HL) ; взяли тип раздела |
458 | ; SUB 4 ; пропускаем дисководы |
||
459 | LD D,A ; номер текущего устройства |
||
801 | savelij | 460 | INC HL |
999 | savelij | 461 | LD E,(HL) ; взяли местоположение носителя (MASTER/SLAVE) |
801 | savelij | 462 | PUSH DE |
1026 | savelij | 463 | LD HL,0x5800 |
464 | LD DE,0x5801 |
||
465 | LD BC,0x02FF |
||
801 | savelij | 466 | LD (HL),L |
999 | savelij | 467 | LDIR ; зачернили экран для маскировки запускалки |
801 | savelij | 468 | LD HL,RUN_CODE |
1026 | savelij | 469 | LD DE,0x5D3B |
801 | savelij | 470 | LD BC,ERUN_CODE-RUN_CODE |
471 | LDIR |
||
999 | savelij | 472 | CALL MEMSET ; выставили режим компа |
801 | savelij | 473 | CALL FOR_RUN |
1026 | savelij | 474 | LD HL,0x4200 ; куда скопировать переменные FAT текущего выбранного раздела |
999 | savelij | 475 | RST8 _INST_FATBOOT |
801 | savelij | 476 | POP DE |
1026 | savelij | 477 | LD (0x42FE),DE |
478 | JP 0x4300 |
||
801 | savelij | 479 | |
999 | savelij | 480 | ; загрузка шрифта для текстмода |
801 | savelij | 481 | LOAD_FNT LD HL,ADR_CAT |
482 | LOAD_FNT1 LD A,4 |
||
999 | savelij | 483 | RST8 _COM_FAT,_READ_FILE |
484 | PEC_ON M_FONT_BF |
||
801 | savelij | 485 | LD HL,ADR_CAT |
486 | LD DE,0 |
||
1026 | savelij | 487 | LD BC,0x800 |
801 | savelij | 488 | LDIR |
999 | savelij | 489 | PEC_OFF M_FONT_BF |
801 | savelij | 490 | JP RESTART |
491 | |||
999 | savelij | 492 | ; загрузка FDI образа |
801 | savelij | 493 | LOAD_FDI LD A,E |
1186 | savelij | 494 | CP 'N' |
999 | savelij | 495 | JR Z,LOAD_FNT ; переход на загрузку фонта |
801 | savelij | 496 | LD HL,ERS_FLAGS |
497 | SET B_LOAD_IMG,(HL) |
||
999 | savelij | 498 | LD A,RAM_RAMDISK ; страница начала рамдиска |
499 | PUSH AF ; сохранили на стеке |
||
500 | CALL SET4MBPAGE ; включили ее |
||
801 | savelij | 501 | LD HL,FDI_TABLE_CYL |
502 | LD DE,FDI_TABLE_CYL+1 |
||
1026 | savelij | 503 | LD BC,0x3FFF |
801 | savelij | 504 | LD (HL),0 |
999 | savelij | 505 | LDIR ; очистка страницы с описателями дорожек |
1026 | savelij | 506 | LD IXH,0xFF |
999 | savelij | 507 | CALL LOAD1SECFDI ; принудительная загрузка первого сектора |
1026 | savelij | 508 | LD A,(0xC006) ; взяли количество сторон |
801 | savelij | 509 | DEC A |
1026 | savelij | 510 | LD A,(0xC004) ; взяли количество дорожек |
801 | savelij | 511 | JR Z,LOADFDI1 |
999 | savelij | 512 | ADD A,A ; если сторон 2, то умножили количество дорожек на 2 |
513 | LOADFDI1 LD C,A ; количество дорожек |
||
1026 | savelij | 514 | LD HL,(0xC00A) |
801 | savelij | 515 | LD (START_DATA),HL |
1026 | savelij | 516 | LD DE,0x4000 ; адрес буфера начала описателей дорожек |
517 | LD HL,0xC00F ; адрес начала выборки описателей дорожек в FDI заголовке |
||
801 | savelij | 518 | LOADFDI3 BIT 1,H |
999 | savelij | 519 | CALL NZ,LOAD1SECFDI ; если вышли за пределы сектора меняем указатель и грузим следующий сектор в буфер |
520 | LD A,(HL) ; биты 8-15 смещения дорожки от начала |
||
1026 | savelij | 521 | AND 0x3F ; взяли для 8-13 биты - смещение в блоках в странице |
999 | savelij | 522 | LD (DE),A ; уложили смещение в блоках в странице |
523 | LD A,(HL) ; взяли биты 14-15 |
||
524 | INC HL ; следующий байт FDI заголовка |
||
525 | INC D ; здесь положим смещение в страницах до нужной дорожки |
||
801 | savelij | 526 | BIT 1,H |
999 | savelij | 527 | CALL NZ,LOAD1SECFDI ; если вышли за пределы сектора меняем указатель и грузим следующий сектор в буфер |
528 | LD B,A ; сохранили нужные 14-15 биты |
||
529 | LD A,(HL) ; взяли 16-23 биты смещения дорожки от начала |
||
801 | savelij | 530 | RL B |
531 | RLA |
||
532 | RL B |
||
533 | RLA |
||
999 | savelij | 534 | LD (DE),A ; укладка битов смещения номера страницы |
801 | savelij | 535 | INC D |
999 | savelij | 536 | REPT 4 |
801 | savelij | 537 | INC HL |
999 | savelij | 538 | ENDM |
801 | savelij | 539 | BIT 1,H |
999 | savelij | 540 | CALL NZ,LOAD1SECFDI ; если вышли за пределы сектора меняем указатель и грузим следующий сектор в буфер |
541 | LD B,(HL) ; взяли количество секторов на дорожке |
||
801 | savelij | 542 | LD A,B |
543 | AND A |
||
544 | JP Z,LOADFDI_ERR |
||
545 | INC HL |
||
546 | INC HL |
||
547 | LOADFDI4 INC HL |
||
548 | BIT 1,H |
||
999 | savelij | 549 | CALL NZ,LOAD1SECFDI ; если вышли за пределы сектора меняем указатель и грузим следующий сектор в буфер |
550 | LDI ; перенос номера сектора |
||
801 | savelij | 551 | DEC DE |
552 | INC C |
||
553 | INC D |
||
554 | BIT 1,H |
||
999 | savelij | 555 | CALL NZ,LOAD1SECFDI ; если вышли за пределы сектора меняем указатель и грузим следующий сектор в буфер |
556 | LD A,(HL) ; взяли размер сектора |
||
801 | savelij | 557 | EX DE,HL |
558 | LD (HL),1 |
||
559 | AND A |
||
560 | JR Z,LOADFDI2 |
||
561 | LD (HL),2 |
||
562 | DEC A |
||
563 | JR Z,LOADFDI2 |
||
564 | LD (HL),4 |
||
565 | DEC A |
||
566 | JR Z,LOADFDI2 |
||
567 | LD (HL),8 |
||
568 | LOADFDI2 EX DE,HL |
||
569 | INC D |
||
999 | savelij | 570 | REPT 5 |
801 | savelij | 571 | INC HL |
999 | savelij | 572 | ENDM |
573 | DJNZ LOADFDI4 ; возвращаемся для продолжения, пока сектора дорожки не кончатся |
||
1026 | savelij | 574 | LD D,0x40 |
801 | savelij | 575 | INC E |
576 | DEC C |
||
999 | savelij | 577 | JR NZ,LOADFDI3 ; возвращаемся для продолжения пока не кончатся дорожки |
801 | savelij | 578 | DEC HL |
579 | BIT 1,H |
||
999 | savelij | 580 | CALL NZ,LOAD1SECFDI ; если вышли за пределы сектора меняем указатель и грузим следующий сектор в буфер |
801 | savelij | 581 | PUSH HL |
582 | LD A,H |
||
583 | AND 1 |
||
584 | LD B,A |
||
585 | LD C,L |
||
586 | LD A,IXH |
||
587 | ADD A,A |
||
588 | ADD A,B |
||
589 | LD B,A |
||
590 | LD HL,0 |
||
591 | START_DATA EQU $-2 |
||
592 | AND A |
||
593 | SBC HL,BC |
||
594 | EX DE,HL |
||
595 | POP HL |
||
596 | LD A,D |
||
597 | AND A |
||
598 | JR Z,LOADFDI7 |
||
599 | LOADFDI8 INC H |
||
600 | BIT 1,H |
||
999 | savelij | 601 | CALL NZ,LOAD1SECFDI ; если вышли за пределы сектора меняем указатель и грузим следующий сектор в буфер |
801 | savelij | 602 | DEC D |
603 | JR NZ,LOADFDI8 |
||
604 | LOADFDI7 ADD HL,DE |
||
605 | BIT 1,H |
||
999 | savelij | 606 | CALL NZ,LOAD1SECFDI ; если вышли за пределы сектора меняем указатель и грузим следующий сектор в буфер |
607 | PUSH HL ; сохранили адрес на начало начала секторов |
||
1026 | savelij | 608 | LD DE,0xC000 |
801 | savelij | 609 | AND A |
610 | SBC HL,DE |
||
999 | savelij | 611 | LD (OSTAT_SECT),HL ; сколько байт перенести из хвоста сектора в буфере в начало страницы |
801 | savelij | 612 | LD B,H |
613 | LD C,L |
||
1026 | savelij | 614 | LD HL,0x200 |
801 | savelij | 615 | SBC HL,BC |
999 | savelij | 616 | LD (NACH_SECT),HL ; сколько байт перенести из начала сектора в буфере в конец страницы |
617 | POP HL ; восстановили сдрес начала секторов, далее загрузка всех секторов в память |
||
801 | savelij | 618 | LOADFDI5 POP AF |
619 | INC A |
||
620 | CALL SET4MBPAGE |
||
621 | PUSH AF |
||
622 | BIT 1,H |
||
623 | CALL NZ,LOAD1SECFDI |
||
624 | EX AF,AF' |
||
1026 | savelij | 625 | LD DE,0x4000 |
801 | savelij | 626 | LD BC,0 |
627 | NACH_SECT EQU $-2 |
||
628 | LDIR |
||
629 | EX AF,AF' |
||
630 | JP C,ELOAD_IMAGE |
||
631 | EX DE,HL |
||
1026 | savelij | 632 | LD A,0x1F |
999 | savelij | 633 | RST8 _COM_FAT,_READ_FILE |
801 | savelij | 634 | JP C,ELOAD_IMAGE |
635 | PUSH HL |
||
1026 | savelij | 636 | LD HL,0xC000 |
801 | savelij | 637 | PUSH HL |
638 | LD A,1 |
||
999 | savelij | 639 | RST8 _COM_FAT,_READ_FILE |
801 | savelij | 640 | POP HL |
641 | POP DE |
||
642 | LD BC,0 |
||
643 | OSTAT_SECT EQU $-2 |
||
644 | LDIR |
||
645 | JR LOADFDI5 |
||
646 | |||
647 | LOADFDI_ERR LD A,RAM_RAMDISK |
||
648 | CALL SET4MBPAGE |
||
1026 | savelij | 649 | LD HL,0x7FFF |
801 | savelij | 650 | LD (HL),0 |
651 | DEC H |
||
652 | LD (HL),0 |
||
1026 | savelij | 653 | LD A,ZXSTD_CPU1 |
801 | savelij | 654 | CALL SET4MBPAGE |
655 | LD SP,(LD_FILE_SP) |
||
656 | POP IY |
||
657 | POP IX |
||
658 | JP LDFDI_ERROR |
||
659 | |||
999 | savelij | 660 | ; создание таблицы описателей для пустого рамдиска |
801 | savelij | 661 | CREATE_TRD640 PUSH IX |
662 | PUSH IY |
||
663 | LD (LD_FILE_SP),SP |
||
664 | LD SP,ADR_CAT |
||
665 | JR ELT4 |
||
666 | |||
667 | CREATE_RAMTABL PUSH IX |
||
668 | PUSH IY |
||
669 | LD (LD_FILE_SP),SP |
||
670 | LD SP,ADR_CAT |
||
999 | savelij | 671 | ; создание таблицы описателя для загруженных TRD и SCL образов |
672 | END_LOAD_TRD LD A,RAM_DATARAMD ; нужна страница откуда начинается загруженный образ |
||
801 | savelij | 673 | CALL SET4MBPAGE |
1026 | savelij | 674 | LD HL,(0x48E1) ; первый свободный трек сектор |
801 | savelij | 675 | LD A,L |
676 | LD L,H |
||
677 | LD H,0 |
||
678 | ADD HL,HL |
||
679 | ADD HL,HL |
||
680 | ADD HL,HL |
||
681 | ADD HL,HL |
||
682 | OR L |
||
999 | savelij | 683 | LD L,A ; количество занятых секторов с директорией |
1026 | savelij | 684 | LD DE,(0x48E5) ; количество свободных секторов |
801 | savelij | 685 | ADD HL,DE |
686 | ADD HL,HL |
||
687 | ADD HL,HL |
||
688 | ADD HL,HL |
||
999 | savelij | 689 | ADD HL,HL ; H = количество дорожек |
801 | savelij | 690 | LD A,H |
1026 | savelij | 691 | CP 0xA0 |
801 | savelij | 692 | JR NC,ELT3 |
1026 | savelij | 693 | ELT4 LD A,0xA0 |
801 | savelij | 694 | ELT3 EX AF,AF' |
999 | savelij | 695 | LD A,RAM_RAMDISK ; нужна страница начала рамдиска, где будет таблица описателей |
801 | savelij | 696 | CALL SET4MBPAGE |
1026 | savelij | 697 | LD HL,0x4000 |
801 | savelij | 698 | PUSH HL |
1026 | savelij | 699 | LD DE,0x4001 |
700 | LD BC,0x3FFF |
||
801 | savelij | 701 | LD (HL),L |
999 | savelij | 702 | LDIR ; очистили страницу |
703 | POP DE ; адрес начала |
||
704 | LD HL,0 ; смещение в блоках и страницах |
||
801 | savelij | 705 | EX AF,AF' |
706 | ELT2 EX AF,AF' |
||
1026 | savelij | 707 | LD BC,0x1000 ; счетчик номеров секторов и их номера |
801 | savelij | 708 | LD A,L |
709 | RRCA |
||
710 | RRCA |
||
999 | savelij | 711 | LD (DE),A ; смещение в блоках дорожки в странице |
801 | savelij | 712 | INC D |
713 | LD A,H |
||
999 | savelij | 714 | LD (DE),A ; смещение в страницах до дорожки |
801 | savelij | 715 | INC D |
716 | ELT1 INC C |
||
717 | LD A,C |
||
999 | savelij | 718 | LD (DE),A ; номер сектора |
801 | savelij | 719 | INC D |
720 | LD A,2 |
||
999 | savelij | 721 | LD (DE),A ; размер сектора |
801 | savelij | 722 | INC D |
999 | savelij | 723 | DJNZ ELT1 ; вносим в таблицу все номера секторов с размерами |
1026 | savelij | 724 | LD D,0x40 ; вернули указатель в начало |
999 | savelij | 725 | INC E ; для следующей дорожки |
1026 | savelij | 726 | LD BC,0x40 |
999 | savelij | 727 | ADD HL,BC ; переход к следующей дорожке |
801 | savelij | 728 | EX AF,AF' |
729 | DEC A |
||
999 | savelij | 730 | JR NZ,ELT2 ; повторяем для всех дорожек |
731 | ; общий выход из загрузки с возвратом стандартной страницы в окне проецирования 1 |
||
801 | savelij | 732 | ELOAD_IMAGE LD A,RAM_RAMDISK |
733 | CALL SET4MBPAGE |
||
1026 | savelij | 734 | LD HL,0x7FFF |
1186 | savelij | 735 | LD (HL),'R' |
801 | savelij | 736 | DEC H |
1186 | savelij | 737 | LD (HL),'D' |
801 | savelij | 738 | CALL SET_RAMD_NAME |
1026 | savelij | 739 | LD A,ZXSTD_CPU1 |
801 | savelij | 740 | CALL SET4MBPAGE |
741 | LD SP,0 |
||
742 | LD_FILE_SP EQU $-2 |
||
743 | POP IY |
||
744 | POP IX |
||
745 | LD HL,ERS_FLAGS |
||
746 | BIT B_VIEW_IMG,(HL) |
||
747 | RET Z |
||
748 | RES B_VIEW_IMG,(HL) |
||
999 | savelij | 749 | ; загрузка каталога TR-DOS и поиск выбранного и запуск выбранного BASIC файла |
1186 | savelij | 750 | START_IMG LD H,CMOS.VIRT_REAL_DRIVE |
801 | savelij | 751 | CALL READCMOS |
752 | AND 3 |
||
753 | LD C,A |
||
817 | savelij | 754 | PUSH AF |
999 | savelij | 755 | RST8 _MOUNTER,_CLOSEMOUNT ; !!! |
817 | savelij | 756 | POP AF |
999 | savelij | 757 | RUNMOUNT PUSH AF |
1026 | savelij | 758 | AND 3 |
999 | savelij | 759 | CALL SETUP_DRIVE ; переключение TR-DOS на указанный номер |
760 | RST8 _MOUNTER,_GET_VIRT_BITS |
||
761 | POP AF |
||
801 | savelij | 762 | LD C,1 |
1026 | savelij | 763 | CALL FTR_DOS;TO_DOS4BAS |
801 | savelij | 764 | LD HL,ADR_CAT |
765 | LD DE,0 |
||
1026 | savelij | 766 | LD BC,0x0905 |
767 | CALL FTR_DOS;TO_DOS4BAS ; загрузка TR-DOS диры |
||
801 | savelij | 768 | DI |
769 | LD IX,WIN_FILES |
||
770 | LD B,(IX+8) |
||
771 | INC B |
||
772 | LD IX,ADR_CAT |
||
1026 | savelij | 773 | LD DE,0x10 |
801 | savelij | 774 | NEXT_BAS LD A,(IX+8) |
775 | ADD IX,DE |
||
1186 | savelij | 776 | CP 'B' |
801 | savelij | 777 | JR NZ,NEXT_BAS |
778 | DJNZ NEXT_BAS |
||
779 | PUSH IX |
||
780 | POP HL |
||
781 | SBC HL,DE |
||
782 | LD IX,WIN_FILES |
||
783 | JP RUNFILE1 |
||
784 | |||
785 | SET_RAMD_NAME DEC H |
||
786 | XOR A |
||
787 | LD (HL),A |
||
788 | LD BC,CONF_128 |
||
789 | OUT (C),A |
||
790 | PUSH HL |
||
791 | LD HL,TXT_NONE |
||
792 | LD DE,IN_RAMDISK |
||
793 | LD BC,ETXT_NONE-TXT_NONE |
||
794 | LDIR |
||
795 | LD HL,ERS_FLAGS |
||
796 | BIT B_LOAD_IMG,(HL) |
||
797 | LD BC,CONF_128 |
||
1026 | savelij | 798 | LD A,0x10 |
801 | savelij | 799 | OUT (C),A |
800 | POP HL |
||
801 | RET Z |
||
802 | LD DE,BUF_FILEITEM |
||
803 | LD B,8 |
||
804 | CALL SRN1 |
||
805 | LD B,3 |
||
806 | SRN1 LD A,(DE) |
||
807 | LD (HL),A |
||
808 | DEC H |
||
809 | INC DE |
||
810 | DJNZ SRN1 |
||
811 | RET |
||
812 | |||
999 | savelij | 813 | ; загрузка следующего сектора заголовка FDI |
801 | savelij | 814 | LOAD1SECFDI PUSH HL |
815 | PUSH BC |
||
816 | PUSH DE |
||
817 | PUSH AF |
||
1026 | savelij | 818 | LD HL,0xC000 |
801 | savelij | 819 | LD A,1 |
999 | savelij | 820 | RST8 _COM_FAT,_READ_FILE |
801 | savelij | 821 | INC IXH |
822 | POP AF |
||
823 | POP DE |
||
824 | POP BC |
||
825 | POP HL |
||
826 | RES 1,H |
||
827 | RET |
||
828 | |||
999 | savelij | 829 | ; включение в 1 окно проецирования заданной страницы |
801 | savelij | 830 | SET4MBPAGE PUSH BC |
831 | LD B,A |
||
999 | savelij | 832 | PEC_ON M_SHADOW_BF |
801 | savelij | 833 | LD A,B |
834 | LD BC,WIN_P1 |
||
835 | OUT (C),A |
||
836 | LD B,A |
||
999 | savelij | 837 | PEC_OFF M_SHADOW_BF |
801 | savelij | 838 | LD A,B |
839 | POP BC |
||
840 | RET |
||
841 | |||
842 | LOADIMAGE4 PUSH IX |
||
843 | PUSH IY |
||
844 | LD (LD_FILE_SP),SP |
||
845 | LD SP,ADR_CAT |
||
846 | LD A,RAM_TAPE |
||
999 | savelij | 847 | ; загрузка TRD или TAP образа |
801 | savelij | 848 | LOADIMAGE3 PUSH AF |
849 | CALL SET4MBPAGE |
||
1026 | savelij | 850 | LD HL,0x4000 |
851 | LD A,0x20 |
||
999 | savelij | 852 | RST8 _COM_FAT,_READ_FILE |
801 | savelij | 853 | JR C,END_LOAD_TAP |
854 | POP AF |
||
855 | INC A |
||
856 | JR LOADIMAGE3 |
||
857 | |||
858 | END_LOAD_TAP XOR A |
||
859 | CALL SET4MBPAGE |
||
860 | LD H,A |
||
861 | LD L,A |
||
1026 | savelij | 862 | LD (0x4000),HL |
863 | LD (0x4002),A |
||
864 | LD A,ZXSTD_CPU1 |
||
801 | savelij | 865 | CALL SET4MBPAGE |
866 | LD SP,(LD_FILE_SP) |
||
867 | POP IY |
||
868 | POP IX |
||
1186 | savelij | 869 | LD H,CMOS.BYTE_00 |
801 | savelij | 870 | CALL READCMOS |
1186 | savelij | 871 | OR CMOS_ED.M_EMUL_TAPE |
801 | savelij | 872 | LD L,A |
873 | CALL WRITECMOS |
||
1186 | savelij | 874 | AND CMOS_ED.M_AUTO_TAPE |
801 | savelij | 875 | JP Z,RESTART |
876 | JP TAPELOAD1 |
||
877 | |||
878 | LOAD_IMAGE DI |
||
999 | savelij | 879 | LD D,A ; первый символ расширения |
801 | savelij | 880 | INC HL |
999 | savelij | 881 | LD E,(HL) ; второй символ расширения |
1186 | savelij | 882 | CP 'B' |
801 | savelij | 883 | JR NZ,LOADIMAGE1_ |
884 | LD A,E |
||
1186 | savelij | 885 | CP 'M' |
999 | savelij | 886 | JR Z,LOADIMAGE2 ; BMP |
1186 | savelij | 887 | LOADIMAGE1_ CP 'T' ; TAP или TRD ? |
801 | savelij | 888 | JR NZ,LOADIMAGE1 |
889 | LD A,E |
||
1186 | savelij | 890 | CP 'A' |
999 | savelij | 891 | JP Z,LOADIMAGE4 ; TAP |
801 | savelij | 892 | LOADIMAGE1 LD A,D |
1186 | savelij | 893 | CP 'R' |
801 | savelij | 894 | LD HL,FLASHER |
999 | savelij | 895 | JR Z,LOAD_IMAGE8 ; TRD |
801 | savelij | 896 | LOADIMAGE2 LD HL,RESTART |
897 | LOAD_IMAGE8 PUSH HL |
||
898 | PUSH IX |
||
899 | PUSH IY |
||
900 | LD (LD_FILE_SP),SP |
||
901 | LD SP,ADR_CAT |
||
902 | LD A,D |
||
1186 | savelij | 903 | CP 'S' ; это SCL файл? |
801 | savelij | 904 | JR Z,LOAD_IMAGE2 |
1186 | savelij | 905 | CP 'F' ; это FDI файл? |
801 | savelij | 906 | JP Z,LOAD_FDI |
1186 | savelij | 907 | CP 'B' ; это BMP файл? |
801 | savelij | 908 | JP Z,BMPVIEW |
1186 | savelij | 909 | CP 'T' ; это TRD файл? |
801 | savelij | 910 | JR NZ,LOAD_ROM |
911 | LD HL,ERS_FLAGS |
||
912 | SET B_LOAD_IMG,(HL) |
||
913 | LD A,RAM_DATARAMD |
||
999 | savelij | 914 | ; загрузка TRD или TAP образа |
801 | savelij | 915 | LOAD_IMAGE1 PUSH AF |
916 | CALL SET4MBPAGE |
||
917 | LD HL,CPU1 |
||
1026 | savelij | 918 | LD A,0x20 |
999 | savelij | 919 | RST8 _COM_FAT,_READ_FILE |
801 | savelij | 920 | JP C,END_LOAD_TRD |
921 | POP AF |
||
922 | INC A |
||
923 | JR LOAD_IMAGE1 |
||
924 | |||
1186 | savelij | 925 | LOAD_ROM CP 'R' ; это ROM файл? |
801 | savelij | 926 | JP NZ,ELOAD_IMAGE |
927 | LD A,RAM_FLASHER |
||
928 | CALL LOAD_IN_PAGE |
||
929 | LD SP,(LD_FILE_SP) |
||
930 | POP IY |
||
931 | POP IX |
||
932 | RET |
||
933 | |||
934 | LOAD_IN_PAGE PUSH AF |
||
935 | CALL SET4MBPAGE |
||
936 | LD HL,CPU1 |
||
1026 | savelij | 937 | LD A,0x20 |
999 | savelij | 938 | RST8 _COM_FAT,_READ_FILE |
801 | savelij | 939 | JR C,LOADINPAGE1 |
940 | POP AF |
||
941 | INC A |
||
942 | JR LOAD_IN_PAGE |
||
943 | |||
944 | LOADINPAGE1 POP AF |
||
999 | savelij | 945 | LD A,ZXSTD_CPU1 |
801 | savelij | 946 | JP SET4MBPAGE |
947 | |||
999 | savelij | 948 | ; меню выбора на какую букву диска SCL образ переключить |
949 | LOAD_IMAGE2 LD IX,LOAD_SCL |
||
950 | RST8 _WINW |
||
951 | JP _RULILKA |
||
952 | |||
953 | SCL_A XOR A |
||
954 | JR SCL_ALL |
||
955 | |||
956 | SCL_B LD A,1 |
||
957 | JR SCL_ALL |
||
958 | |||
959 | SCL_C LD A,2 |
||
960 | JR SCL_ALL |
||
961 | |||
962 | SCL_D LD A,3 |
||
963 | SCL_ALL PUSH AF |
||
964 | RST8 _MOUNTER,_SET_VIRTREAL |
||
965 | POP AF |
||
966 | ; загрузка SCL образа |
||
967 | LOAD_SCL_IMAGE LD HL,DSKINFO |
||
1026 | savelij | 968 | LD DE,ADR_CAT+0xF00 |
801 | savelij | 969 | LD BC,DSK_END-DSKINFO |
999 | savelij | 970 | LDIR ; сохранение инфы для создания заголовка дискеты |
801 | savelij | 971 | LD HL,ERS_FLAGS |
972 | SET B_LOAD_IMG,(HL) |
||
973 | LD A,RAM_DATARAMD |
||
974 | LOAD_IMAGE4 PUSH AF |
||
999 | savelij | 975 | CALL SET4MBPAGE ; включили первую страницу откуда рамдиск начинается |
1026 | savelij | 976 | LD HL,0x5000 |
977 | LD A,0x18 |
||
999 | savelij | 978 | RST8 _COM_FAT,_READ_FILE |
979 | PUSH AF ; сохранили флаг окончания загрузки на случай окончания образа |
||
1026 | savelij | 980 | LD HL,0x4000 |
999 | savelij | 981 | PUSH HL ; сохранили адрес начала каталога |
801 | savelij | 982 | LD (HL),L |
983 | LD D,H |
||
984 | LD E,L |
||
985 | INC DE |
||
1026 | savelij | 986 | LD BC,0xFFF |
999 | savelij | 987 | LDIR ; зачистка области первой дорожки для формирования каталога диска |
1026 | savelij | 988 | LD HL,0x5008 ; адрес количества файлов в SCL образе |
999 | savelij | 989 | LD A,(HL) ; взяли количество файлов как счетчик |
990 | INC HL ; перешли на первый описатель файла |
||
801 | savelij | 991 | EXX |
999 | savelij | 992 | LD HL,0 ; номер абсолютного сектора |
993 | LD D,L ; приращение секторов не может быть более 255 секторов |
||
994 | LD B,A ; сохранение количества файлов |
||
801 | savelij | 995 | EXX |
999 | savelij | 996 | POP DE ; вернули адрес начала каталога диска |
801 | savelij | 997 | LOAD_IMAGE3 EX AF,AF' |
1026 | savelij | 998 | LD BC,0x0D |
999 | savelij | 999 | LDIR ; перенесли 13 байт тела описателя |
1000 | LD A,(HL) ; забрали размер файла в секторах |
||
1001 | LDI ; перенесли еще байт |
||
801 | savelij | 1002 | EXX |
1003 | LD E,A |
||
999 | savelij | 1004 | PUSH HL ; сохранили текщее значение номера сектора |
1005 | ADD HL,DE ; увеличили текщее значение на размер файла в секторах |
||
801 | savelij | 1006 | EXX |
1007 | EX (SP),HL |
||
1008 | LD A,L |
||
1009 | ADD HL,HL |
||
1010 | ADD HL,HL |
||
1011 | ADD HL,HL |
||
1012 | ADD HL,HL |
||
1013 | INC H |
||
1026 | savelij | 1014 | AND 0x0F |
801 | savelij | 1015 | LD L,A |
1016 | EX (SP),HL |
||
999 | savelij | 1017 | POP BC ; восстановили текщий номер сектора |
801 | savelij | 1018 | EX DE,HL |
1019 | LD (HL),C |
||
1020 | INC HL |
||
999 | savelij | 1021 | LD (HL),B ; уложили после текущего описателя |
801 | savelij | 1022 | INC HL |
1023 | EX DE,HL |
||
1024 | EX AF,AF' |
||
1025 | DEC A |
||
999 | savelij | 1026 | JR NZ,LOAD_IMAGE3 ; если файлы не кончились продолжаем |
1027 | PUSH HL ; сохранили адрес начала данных |
||
1026 | savelij | 1028 | LD HL,ADR_CAT+0xF00 |
1029 | LD DE,0x48E1 |
||
801 | savelij | 1030 | LD BC,DSK_END-DSKINFO |
1031 | LDIR |
||
1032 | EXX |
||
999 | savelij | 1033 | LD DE,2544 ; стандартный размер дискеты |
801 | savelij | 1034 | EX DE,HL |
1035 | AND A |
||
1036 | SBC HL,DE |
||
1026 | savelij | 1037 | LD (0x48E5),HL ; количество свободных секторов |
801 | savelij | 1038 | EX DE,HL |
1039 | LD A,L |
||
1040 | ADD HL,HL |
||
1041 | ADD HL,HL |
||
1042 | ADD HL,HL |
||
1043 | ADD HL,HL |
||
1044 | INC H |
||
1026 | savelij | 1045 | AND 0x0F |
801 | savelij | 1046 | LD L,A |
1026 | savelij | 1047 | LD (0x48E1),HL ; первый свободный трек и сектор |
801 | savelij | 1048 | LD A,B |
1026 | savelij | 1049 | LD (0x48E4),A ; количество файлов на диске |
801 | savelij | 1050 | EXX |
999 | savelij | 1051 | POP DE ; восстановление адреса начала данных |
1026 | savelij | 1052 | LD HL,0x8000 ; конец окна проецирования |
801 | savelij | 1053 | AND A |
999 | savelij | 1054 | SBC HL,DE ; получили количество байт для сдвига |
801 | savelij | 1055 | LD B,H |
1056 | LD C,L |
||
1026 | savelij | 1057 | LD HL,0x5000 ; начало данных на рамдиске |
801 | savelij | 1058 | EX DE,HL |
999 | savelij | 1059 | LDIR ; сдвинули, после переноса DE = адрес куда далее грузить |
801 | savelij | 1060 | LD A,D |
1026 | savelij | 1061 | CP 0x7E |
801 | savelij | 1062 | JR NC,LOAD_IMAGE7 |
1063 | EX DE,HL |
||
1026 | savelij | 1064 | LD A,0x7F |
801 | savelij | 1065 | SUB H |
1066 | SRL A |
||
1067 | LD IXL,A |
||
999 | savelij | 1068 | RST8 _COM_FAT,_READ_FILE |
1026 | savelij | 1069 | LD DE,0x8000 |
801 | savelij | 1070 | EX DE,HL |
1071 | LOAD_IMAGE7 AND A |
||
999 | savelij | 1072 | SBC HL,DE ; получили сколько байт осталось до конца окна |
801 | savelij | 1073 | LD (OST_HWOST),HL |
1074 | LD (KUDA_HWOST),DE |
||
1075 | LD DE,0 |
||
1076 | EX DE,HL |
||
1077 | SBC HL,DE |
||
1078 | LD A,1 |
||
1079 | AND H |
||
1080 | LD H,A |
||
1081 | LD (NEXT4PAGE),HL |
||
999 | savelij | 1082 | POP AF ; восстановили флаг последней загрузки |
1083 | JP C,END_LOAD_TRD ; если файл уже кончился, то выход |
||
801 | savelij | 1084 | JR LOAD_IMAGE5 |
1085 | |||
1026 | savelij | 1086 | LOAD_IMAGE6 LD DE,0x4000 |
801 | savelij | 1087 | LD BC,0 |
1088 | NEXT4PAGE EQU $-2 |
||
1089 | LDIR |
||
1090 | EX AF,AF' |
||
1091 | JP C,END_LOAD_TRD |
||
1092 | EX DE,HL |
||
1026 | savelij | 1093 | LD A,0x1F |
999 | savelij | 1094 | RST8 _COM_FAT,_READ_FILE |
801 | savelij | 1095 | JP C,END_LOAD_TRD |
1096 | LOAD_IMAGE5 LD HL,ADR_CAT |
||
1097 | PUSH HL |
||
1098 | LD A,1 |
||
999 | savelij | 1099 | RST8 _COM_FAT,_READ_FILE |
1100 | EX AF,AF' ; спрятали флаг загрузки сектора |
||
1101 | POP HL ; восстановили адрес куда сектор в буфер загрузили |
||
801 | savelij | 1102 | LD DE,0 |
999 | savelij | 1103 | KUDA_HWOST EQU $-2 ; куда ложить остаток в окне |
801 | savelij | 1104 | LD BC,0 |
999 | savelij | 1105 | OST_HWOST EQU $-2 ; сколько переносить в конец страницы |
801 | savelij | 1106 | LDIR |
1107 | POP AF |
||
1108 | INC A |
||
1109 | PUSH AF |
||
1110 | CALL SET4MBPAGE |
||
1111 | JR LOAD_IMAGE6 |
||
1112 | |||
999 | savelij | 1113 | ; проверка заголовка HOBETA файла |
1114 | ;на выходе: флаг С=1-не соотвествует |
||
801 | savelij | 1115 | CMP4HOBETA SUB 1 |
1116 | RET NZ |
||
1117 | LD A,(BUF_RDSEC+8) |
||
1186 | savelij | 1118 | CP 'C' ; проверка что это кодовый блок, а не что-то другое |
801 | savelij | 1119 | SCF |
1120 | RET NZ |
||
999 | savelij | 1121 | PUSH DE ; сохранили адрес складирования для дальнейшей проверки |
1122 | LD BC,BUF_RDSEC ; возвращаемся в начало сектора |
||
1123 | CALL HOB_CRC ; считаем CRC HOBETA заголовка |
||
801 | savelij | 1124 | LD A,(BC) |
1125 | INC BC |
||
1126 | LD E,A |
||
1127 | LD A,(BC) |
||
999 | savelij | 1128 | LD D,A ; в "DE" рассчитанное CRC HOBETA заголовка |
1129 | AND A ; в "HL" взятое из смещения +0x0F от начала файла |
||
1130 | SBC HL,DE ; сравниваем |
||
1131 | POP DE ; если не совпало то возможно это не HOBETA |
||
801 | savelij | 1132 | SCF |
999 | savelij | 1133 | RET NZ ; пропускаем файл |
801 | savelij | 1134 | EXX |
1135 | LD HL,(BUF_RDSEC+9) |
||
999 | savelij | 1136 | DEC HL ; для загрузки масимум 40960 байт (160 секторов) |
1026 | savelij | 1137 | LD DE,(BUF_RDSEC+0x0B) |
999 | savelij | 1138 | ADD HL,DE ; проверяем выход за пределы озу |
1139 | EXX ; если вылет за предел озу |
||
1140 | RET C ; пропускаем файл |
||
801 | savelij | 1141 | EXX |
1142 | LD HL,(BUF_RDSEC+9) |
||
1026 | savelij | 1143 | LD DE,0x6000 ; проверяем адрес загрузки |
999 | savelij | 1144 | AND A ; адрес загрузки не должен быть ниже 0x6000 |
801 | savelij | 1145 | SBC HL,DE |
999 | savelij | 1146 | EXX ; если адрес загрузки ниже 0x6000 |
801 | savelij | 1147 | RET |
1148 | |||
999 | savelij | 1149 | ; на входе: BC - адрес заголовка |
1150 | ; на выходе: HL - HOBETA CRC |
||
1026 | savelij | 1151 | HOB_CRC LD A,0x0F |
801 | savelij | 1152 | LD HL,0 |
1153 | EXX |
||
1154 | LD E,0 |
||
1155 | EXX |
||
1156 | HOBCRC1 EX AF,AF' |
||
1157 | LD A,(BC) |
||
1158 | LD E,A |
||
1159 | LD D,A |
||
1160 | ADD HL,DE |
||
1161 | EXX |
||
1162 | LD A,E |
||
1163 | INC E |
||
1164 | EXX |
||
1165 | LD E,A |
||
1166 | LD D,0 |
||
1167 | ADD HL,DE |
||
1168 | EX AF,AF' |
||
1169 | INC BC |
||
1170 | DEC A |
||
1171 | JR NZ,HOBCRC1 |
||
1172 | RET |
||
1173 | |||
1026 | savelij | 1174 | CMP4FONTS LD DE,(BUF_FILEITEM+0x1C) |
1175 | LD HL,(BUF_FILEITEM+0x1E) |
||
801 | savelij | 1176 | LD A,H |
1177 | OR L |
||
1178 | OR E |
||
1179 | SCF |
||
1180 | RET NZ |
||
1181 | LD A,D |
||
1182 | CP 8 |
||
1183 | SCF |
||
1184 | RET NZ |
||
1185 | AND A |
||
1186 | RET |
||
1187 | |||
1026 | savelij | 1188 | CMP4ROMS LD DE,(BUF_FILEITEM+0x1C) |
1189 | LD HL,(BUF_FILEITEM+0x1E) |
||
801 | savelij | 1190 | LD A,H |
1191 | OR D |
||
1192 | OR E |
||
1193 | SCF |
||
1194 | RET NZ |
||
1195 | LD A,L |
||
1196 | CP 8 |
||
1197 | CMP_ROMSIZE EQU $-1 |
||
1198 | SCF |
||
1199 | RET NZ |
||
1200 | CMP4ROMS1 AND A |
||
1201 | RET |
||
1202 | |||
1203 | CMP4FDI EXX |
||
1204 | LD HL,BUF_RDSEC |
||
1205 | LD A,(HL) |
||
1186 | savelij | 1206 | CP 'F' |
801 | savelij | 1207 | SCF |
1208 | RET NZ |
||
1209 | INC HL |
||
1210 | LD A,(HL) |
||
1186 | savelij | 1211 | CP 'D' |
801 | savelij | 1212 | SCF |
1213 | RET NZ |
||
1214 | INC HL |
||
1215 | LD A,(HL) |
||
1186 | savelij | 1216 | CP 'I' |
801 | savelij | 1217 | SCF |
1218 | RET NZ |
||
1219 | INC HL |
||
1220 | INC HL |
||
999 | savelij | 1221 | LD A,(HL) ; количество цилиндров |
1026 | savelij | 1222 | CP 0x57 |
801 | savelij | 1223 | CCF |
1224 | RET C |
||
1225 | INC HL |
||
999 | savelij | 1226 | LD A,(HL) ; должен быть 0 |
801 | savelij | 1227 | AND A |
1228 | SCF |
||
1229 | RET NZ |
||
1230 | INC HL |
||
999 | savelij | 1231 | LD A,(HL) ; количество сторон |
801 | savelij | 1232 | AND A |
1233 | SCF |
||
1234 | RET Z |
||
1235 | CP 3 |
||
1236 | CCF |
||
1237 | RET C |
||
1238 | INC HL |
||
999 | savelij | 1239 | LD A,(HL) ; должно быть 0 |
801 | savelij | 1240 | AND A |
1241 | SCF |
||
1242 | RET NZ |
||
1243 | EXX |
||
1244 | AND A |
||
1245 | RET |
||
1246 | |||
1247 | CMP4IMAGE CP 3 |
||
1248 | JR Z,CMP4FDI |
||
1249 | CP 4 |
||
1250 | JR Z,CMP4BMP |
||
1251 | SUB 1 |
||
999 | savelij | 1252 | RET Z ; для TRD проверка не нужка |
1253 | ; для SCL проверка наличия слова "SINCLAIR" в первых 8 байтах |
||
801 | savelij | 1254 | EXX |
1255 | LD HL,BUF_RDSEC |
||
1256 | LD DE,SIGN_SCL |
||
1257 | LD B,8 |
||
1258 | CMP4IMAGE1 LD A,(DE) |
||
1259 | CP (HL) |
||
1260 | SCF |
||
1261 | RET NZ |
||
1262 | INC DE |
||
1263 | INC HL |
||
1264 | DJNZ CMP4IMAGE1 |
||
1265 | EXX |
||
1266 | AND A |
||
1267 | CMP4TAPES RET |
||
1268 | |||
1269 | CMP4BMP EXX |
||
1270 | LD HL,BUF_RDSEC |
||
1186 | savelij | 1271 | LD A,'B' |
801 | savelij | 1272 | SUB (HL) |
1273 | SCF |
||
1274 | RET NZ |
||
1275 | INC HL |
||
1186 | savelij | 1276 | LD A,'M' |
801 | savelij | 1277 | SUB (HL) |
1278 | SCF |
||
1279 | RET NZ |
||
1026 | savelij | 1280 | LD HL,(BUF_RDSEC+0x12) |
801 | savelij | 1281 | LD DE,320 |
1282 | AND A |
||
1283 | SBC HL,DE |
||
1284 | SCF |
||
1285 | RET NZ |
||
1026 | savelij | 1286 | LD HL,(BUF_RDSEC+0x16) |
801 | savelij | 1287 | LD DE,200 |
1288 | AND A |
||
1289 | SBC HL,DE |
||
1290 | SCF |
||
1291 | RET NZ |
||
1026 | savelij | 1292 | LD A,(BUF_RDSEC+0x1C) |
801 | savelij | 1293 | CP 4 |
1294 | SCF |
||
1295 | RET NZ |
||
1296 | EXX |
||
1297 | AND A |
||
1298 | RET |
||
1299 | |||
1300 | SEARCH_FILE LD A,1 |
||
1301 | LD HL,(GDE_EXT_FILES) |
||
999 | savelij | 1302 | RST8 _COM_FAT,_SET_MASK_EXT |
1303 | LD DE,ADR_CAT_FAT ; адрес буфера куда складировать найденное |
||
1304 | RST8 _COM_FAT,_FIND_FILEITEM |
||
1305 | LD H,A ; номер страницы где найденное брать |
||
801 | savelij | 1306 | LD A,B |
1307 | OR C |
||
1308 | JR NZ,SEARCHF1 |
||
1309 | PUSH IX |
||
1310 | LD IX,NOBASIC |
||
999 | savelij | 1311 | RST8 _WINW |
801 | savelij | 1312 | POP IX |
999 | savelij | 1313 | RST8 _COM_DEV,_KOL_VOL |
801 | savelij | 1314 | DEC E |
1315 | JP Z,NO_BAS |
||
1316 | JP SELECT_DEVICE |
||
1317 | |||
1318 | SEARCHF1 PUSH BC |
||
1319 | PUSH HL |
||
999 | savelij | 1320 | RST8 _SORT_FINDFILES |
1321 | PEC_ON M_SHADOW_BF |
||
801 | savelij | 1322 | POP AF |
1323 | LD BC,WIN_P1 |
||
1324 | OUT (C),A |
||
1325 | LD HL,CPU1 |
||
999 | savelij | 1326 | LD DE,ADR_CAT_SCRH ; адрес буфера складирования по маске |
1026 | savelij | 1327 | LD BC,0x1000 |
801 | savelij | 1328 | LDIR |
1329 | LD BC,WIN_A1 |
||
1026 | savelij | 1330 | LD A,0x7A |
801 | savelij | 1331 | OUT (C),A |
999 | savelij | 1332 | PEC_OFF M_SHADOW_BF |
801 | savelij | 1333 | POP BC |
1334 | LD DE,ADR_CAT_FAT |
||
999 | savelij | 1335 | LD HL,ADR_CAT_SCRH ; адрес буфера складирования по маске |
801 | savelij | 1336 | SEARCHF3 PUSH BC |
1337 | LD C,(HL) |
||
1338 | INC HL |
||
1339 | LD B,(HL) |
||
1340 | DEC HL |
||
1341 | LD A,6 |
||
999 | savelij | 1342 | RST8 _COM_FAT,_POS_FILES |
801 | savelij | 1343 | PUSH HL |
1344 | LD HL,BUF_FILEITEM |
||
999 | savelij | 1345 | RST8 _COM_FAT,_READ_DIR |
801 | savelij | 1346 | PUSH DE |
1026 | savelij | 1347 | LD DE,0x0B |
801 | savelij | 1348 | ADD HL,DE |
1349 | LD A,(HL) |
||
1026 | savelij | 1350 | AND 0x10 |
801 | savelij | 1351 | JR NZ,SEARCHF4 |
999 | savelij | 1352 | RST8 _COM_FAT,_OPEN_FILE |
801 | savelij | 1353 | LD HL,BUF_RDSEC |
1354 | LD A,1 |
||
999 | savelij | 1355 | RST8 _COM_FAT,_READ_FILE |
801 | savelij | 1356 | LD HL,BUF_FILEITEM |
1357 | CALL CP_EXT |
||
1358 | CALL 0 |
||
1359 | CMP_FOUNDED EQU $-2 |
||
1360 | SEARCHF4 POP DE |
||
1361 | POP HL |
||
1362 | JR NC,SEARCHF5 |
||
1363 | INC HL |
||
1364 | INC HL |
||
1365 | JR SEARCH6 |
||
1366 | |||
1367 | SEARCHF5 LDI |
||
1368 | LDI |
||
1369 | SEARCH6 POP BC |
||
1370 | DEC BC |
||
1371 | LD A,B |
||
1372 | OR C |
||
1373 | JR NZ,SEARCHF3 |
||
1374 | LD HL,ADR_CAT_FAT |
||
1375 | EX DE,HL |
||
1376 | SBC HL,DE |
||
1377 | SRL H |
||
1378 | RR L |
||
1379 | LD B,H |
||
1380 | LD C,L |
||
1381 | RET |
||
1382 | |||
1383 | CPETR3 PUSH BC |
||
1384 | PUSH DE |
||
1385 | PUSH HL |
||
1386 | LD C,0 |
||
1387 | LD DE,VIEW_IMAGES |
||
1026 | savelij | 1388 | JR GDE_EXT_FILES.L1 |
801 | savelij | 1389 | |
1390 | CP_EXT PUSH BC |
||
1391 | PUSH DE |
||
1392 | PUSH HL |
||
1393 | LD C,0 |
||
1394 | LD DE,0 |
||
1395 | GDE_EXT_FILES EQU $-2 |
||
1026 | savelij | 1396 | .L1 LD A,(DE) |
801 | savelij | 1397 | AND A |
1026 | savelij | 1398 | JR Z,.L3 |
801 | savelij | 1399 | INC C |
1400 | PUSH DE |
||
1401 | PUSH HL |
||
1402 | CALL COMPARF |
||
1403 | POP HL |
||
1404 | POP DE |
||
1026 | savelij | 1405 | JR Z,.L2 |
801 | savelij | 1406 | INC DE |
1407 | INC DE |
||
1408 | INC DE |
||
1026 | savelij | 1409 | JR .L1 |
801 | savelij | 1410 | |
1026 | savelij | 1411 | .L2 LD A,C |
1412 | .L3 AND A |
||
801 | savelij | 1413 | POP HL |
1414 | POP DE |
||
1415 | POP BC |
||
1416 | RET |
||
1417 | |||
1418 | COMPARF PUSH DE |
||
1419 | LD DE,8 |
||
1420 | ADD HL,DE |
||
1421 | POP DE |
||
1422 | LD B,3 |
||
1026 | savelij | 1423 | .L1 LD A,(DE) |
1186 | savelij | 1424 | CP 'A' |
1026 | savelij | 1425 | JR C,.L2 |
801 | savelij | 1426 | AND %11011111 |
1026 | savelij | 1427 | .L2 CP (HL) |
801 | savelij | 1428 | RET NZ |
1429 | INC HL |
||
1430 | INC DE |
||
1026 | savelij | 1431 | DJNZ .L1 |
801 | savelij | 1432 | RET |
1433 | |||
999 | savelij | 1434 | ; прошиватель пзу с индикацией процесса |
801 | savelij | 1435 | FLASHER LD BC,PENT_CONF |
1436 | XOR A |
||
1437 | OUT (C),A |
||
999 | savelij | 1438 | PEC_ON M_SHADOW_BF |
1026 | savelij | 1439 | LD BC,0xFF77 |
1440 | LD A,0xA3 |
||
999 | savelij | 1441 | OUT (C),A ; принудительное включение турбо режима 7МГЦ |
801 | savelij | 1442 | LD A,(CMP_ROMSIZE) |
1443 | DEC A |
||
1444 | JR NZ,FLASHER6 |
||
1445 | LD IX,UPDATE_CUSTOM |
||
999 | savelij | 1446 | RST8 _WINW |
801 | savelij | 1447 | LD SP,ADR_CAT |
999 | savelij | 1448 | PEC_ON M_SHADOW_BF+M_FLASH_BF |
801 | savelij | 1449 | LD BC,WIN_A0 |
1026 | savelij | 1450 | LD A,0x7F |
999 | savelij | 1451 | OUT (C),A ; отключение пзу в окне 0 |
1069 | dimkam | 1452 | |
1453 | call rom_read_id ; чтение ID чипа |
||
1454 | ex de,hl |
||
1455 | xor a ;стираем только чипы с блоками по 64к |
||
1456 | ld hl,0xe220 |
||
1457 | sbc hl,de |
||
1458 | jr z,FLASHER_CUST_ERASE |
||
1459 | xor a |
||
1460 | ld hl,0xa401 |
||
1461 | sbc hl,de |
||
1462 | jr nz,FLASHER_CUST_PROG |
||
1463 | FLASHER_CUST_ERASE |
||
801 | savelij | 1464 | LD E,0 |
1465 | LD HL,0 |
||
999 | savelij | 1466 | CALL ERASE_BLK ; стирание CUSTOM ROM страницы |
1069 | dimkam | 1467 | FLASHER_CUST_PROG |
801 | savelij | 1468 | LD A,RAM_FLASHER |
1469 | LD E,0 |
||
999 | savelij | 1470 | CALL FLASH_64KB ; программирование CUSTOM ROM страницы |
801 | savelij | 1471 | JP EFLASHER |
1472 | |||
999 | savelij | 1473 | FLASHER6 LD IX,ERASE_ROM ; вывод окна о стирании FLASH |
1474 | RST8 _WINW |
||
1475 | LD IX,UPDATE_WIN ; вывод окна об обновлении FLASH |
||
1476 | RST8 _WINW |
||
801 | savelij | 1477 | LD IX,ERASE_ROM |
1478 | LD SP,ADR_CAT |
||
999 | savelij | 1479 | PEC_ON M_SHADOW_BF+M_FLASH_BF ; разрешение программирования FLASH |
801 | savelij | 1480 | LD BC,WIN_A0 |
1026 | savelij | 1481 | LD A,0x7F |
999 | savelij | 1482 | OUT (C),A ; отключение rom в окне 0 |
801 | savelij | 1483 | LD A,3 |
999 | savelij | 1484 | CALL SETWIN_INDICAT ; установка индикатора процесса |
1069 | dimkam | 1485 | |
1486 | call erase_all_chip |
||
1487 | ; LD E,0 |
||
1488 | ; LD HL,0 |
||
1489 | ;FLASHER4 CALL ERASE_BLK ; стирание блока 64КБ |
||
1490 | ; CALL INC_INDICAT ; обновление индикатора процесса |
||
1491 | ; INC E ; следующий блок |
||
1492 | ; BIT 3,E |
||
1493 | ; JR Z,FLASHER4 |
||
801 | savelij | 1494 | LD IX,UPDATE_WIN |
999 | savelij | 1495 | LD A,RAM_FLASHER ; страница начала загруженного ROM файла |
801 | savelij | 1496 | LD E,0 |
999 | savelij | 1497 | FLASHER3 CALL FLASH_64KB ; прошивание одной 64КБ страницы |
1498 | INC E ; следующая 64кб страница |
||
801 | savelij | 1499 | BIT 3,E |
1500 | JR Z,FLASHER3 |
||
1501 | EFLASHER LD BC,WIN_P3 |
||
1502 | XOR A |
||
1186 | savelij | 1503 | OUT (C),A ; включение 0 паги RAM в окне 3 |
1026 | savelij | 1504 | LD A,(CPU3+0x20) |
801 | savelij | 1505 | XOR B |
1026 | savelij | 1506 | LD (CPU3+0x20),A ; меняем байт для нарушения CRC контроля и полного реинита |
1186 | savelij | 1507 | LD A,(((BUF_VOLUMES + 0xFE) & 0x3FFF) | CPU3) |
801 | savelij | 1508 | XOR B |
1186 | savelij | 1509 | LD (((BUF_VOLUMES + 0xFE) & 0x3FFF) | CPU3),A ; аналогично для DEVICE MANAGER |
999 | savelij | 1510 | PEC_OFF M_FLASH_BF |
1026 | savelij | 1511 | LD HL,0x79ED ; OUT (C),A |
1512 | LD (0xFFFE),HL ; укладка команды OUT (C),A |
||
1513 | LD BC,0xBC77 |
||
801 | savelij | 1514 | LD A,2 |
1026 | savelij | 1515 | JP 0xFFFE |
801 | savelij | 1516 | |
999 | savelij | 1517 | ; прошивание одной 64КБ страницы |
1518 | ; вход: A = номер 16КБ страницы откуда брать байты для прошивания |
||
1519 | ; E = номер прошиваемой 64КБ страницы |
||
801 | savelij | 1520 | FLASH_64KB LD HL,0 |
1521 | PUSH AF |
||
1522 | LD A,E |
||
1523 | ADD A,2 |
||
999 | savelij | 1524 | CALL SETWIN_INDICAT ; обновление индикатора процесса |
801 | savelij | 1525 | POP AF |
1526 | FLASHER2 PUSH AF |
||
1527 | LD BC,WIN_P0 |
||
999 | savelij | 1528 | OUT (C),A ; включение страницы RAM откуда брать байты для прошивания |
801 | savelij | 1529 | PUSH IX |
1530 | LD IX,0 |
||
999 | savelij | 1531 | FLASHER1 LD A,(IX) ; взяли байт для прошивания |
801 | savelij | 1532 | INC A |
999 | savelij | 1533 | JR Z,FLASHER5 ; если байт = 0xFF, то не прошиваем |
801 | savelij | 1534 | DEC A |
999 | savelij | 1535 | CALL PGM_BYTE ; прошили байт |
801 | savelij | 1536 | FLASHER5 INC IX |
1537 | INC HL |
||
1538 | LD A,H |
||
1026 | savelij | 1539 | AND 0x0F |
801 | savelij | 1540 | OR L |
999 | savelij | 1541 | CALL Z,INC_INDICAT ; обновили индикатор если прошили 4КБ |
801 | savelij | 1542 | LD A,IXH |
1026 | savelij | 1543 | AND 0x40 |
999 | savelij | 1544 | JR Z,FLASHER1 ; продолжаем пока не кончится страница выборки байт |
801 | savelij | 1545 | POP IX |
1546 | POP AF |
||
999 | savelij | 1547 | INC A ; следующая страница откуда байты брать для прошивания |
1548 | LD D,A ; временно сохранили |
||
1549 | LD A,H ; проверка на окончание 64КБ страницы |
||
801 | savelij | 1550 | AND A |
999 | savelij | 1551 | LD A,D ; восстановили |
801 | savelij | 1552 | JR NZ,FLASHER2 |
1553 | RET |