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 |