Rev 1026 | Details | Compare with Previous | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 801 | savelij | 1 | |
| 1186 | savelij | 2 | ; LAST UPDATE: 14.02.2025 savelij |
| 801 | savelij | 3 | |
| 4 | TITLE "call_trdos.a80" |
||
| 5 | |||
| 1026 | savelij | 6 | INIT_VAR 1 |
| 7 | SETVAR ERR_NO_TRDOS_DISK |
||
| 8 | SETVAR ERR_DISK_ERROR |
||
| 9 | SETVAR ERR_NO_DISK |
||
| 10 | SETVAR ERR_DISK_READ_ONLY |
||
| 11 | |||
| 12 | |||
| 801 | savelij | 13 | SEL_FILES_WIN LD HL,ERS_FLAGS |
| 14 | BIT B_VIEW_IMG,(HL) |
||
| 15 | JP Z,RESTART |
||
| 1186 | savelij | 16 | JP FILE_BROWSER |
| 801 | savelij | 17 | |
| 18 | VIEW_IMAGE DI |
||
| 19 | LD BC,ADR_CAT_FAT |
||
| 20 | LD L,(IX+_TEK_PKT_L) |
||
| 21 | LD H,(IX+_TEK_PKT_H) |
||
| 22 | ADD HL,HL |
||
| 23 | ADD HL,BC |
||
| 24 | LD C,(HL) |
||
| 25 | INC HL |
||
| 1026 | savelij | 26 | LD B,(HL) ; получили текущий выбранный номер |
| 801 | savelij | 27 | LD A,6 |
| 1026 | savelij | 28 | RST8 _COM_FAT,_POS_FILES ; установка внутреннего указателя FAT драйвера |
| 801 | savelij | 29 | LD HL,BUF_FILEITEM |
| 1026 | savelij | 30 | RST8 _COM_FAT,_READ_DIR ; получили описатель по установленному номеру |
| 31 | LD DE,0x0B |
||
| 801 | savelij | 32 | ADD HL,DE |
| 33 | LD A,(HL) |
||
| 34 | SBC HL,DE |
||
| 1026 | savelij | 35 | AND 0x10 |
| 36 | JP NZ,_RULILKA ; попытка просмотра директории |
||
| 801 | savelij | 37 | PUSH HL |
| 1026 | savelij | 38 | CALL REST_COLCURS ; стирание цветного курсора |
| 39 | CALL REST2X2 ; восстановление экрана под курсором мыши |
||
| 801 | savelij | 40 | POP HL |
| 1026 | savelij | 41 | CALL CPETR3 ; проверка расширения |
| 42 | JP Z,_RULILKA ;попытка просмотра не поддерживаемого расширения (SCL, TRD ONLY) |
||
| 801 | savelij | 43 | |
| 44 | LD (TYPE_FILE),A |
||
| 45 | PUSH AF |
||
| 1026 | savelij | 46 | RST8 _COM_FAT,_OPEN_FILE |
| 801 | savelij | 47 | POP AF |
| 48 | DEC A |
||
| 1026 | savelij | 49 | LD HL,ADR_CAT ; TYPE_FILE = 1 - TRD |
| 801 | savelij | 50 | JR Z,VIEWIMG1 |
| 1026 | savelij | 51 | LD HL,ADR_CAT+0x200 ; TYPE_FILE = 2 - SCL |
| 801 | savelij | 52 | VIEWIMG1 PUSH AF |
| 53 | LD A,5 |
||
| 1026 | savelij | 54 | RST8 _COM_FAT,_READ_FILE |
| 801 | savelij | 55 | POP AF |
| 56 | JR Z,VIEWIMG3 |
||
| 57 | LD DE,ADR_CAT |
||
| 1026 | savelij | 58 | LD HL,ADR_CAT+0x200+8 |
| 801 | savelij | 59 | LD A,(HL) |
| 60 | PUSH AF |
||
| 61 | INC HL |
||
| 1026 | savelij | 62 | VIEWIMG2 LD BC,0x0E |
| 801 | savelij | 63 | LDIR |
| 64 | INC DE |
||
| 65 | INC DE |
||
| 66 | DEC A |
||
| 67 | JR NZ,VIEWIMG2 |
||
| 1026 | savelij | 68 | LD HL,ADR_CAT+0x0A00 |
| 801 | savelij | 69 | SCF |
| 70 | SBC HL,DE |
||
| 71 | LD B,H |
||
| 72 | LD C,L |
||
| 73 | LD H,D |
||
| 74 | LD L,E |
||
| 75 | INC DE |
||
| 76 | LD (HL),0 |
||
| 77 | LDIR |
||
| 78 | LD HL,DSKINFO |
||
| 1026 | savelij | 79 | LD DE,ADR_CAT+0x8E1 |
| 801 | savelij | 80 | LD BC,DSK_END-DSKINFO |
| 81 | LDIR |
||
| 82 | POP AF |
||
| 1026 | savelij | 83 | LD (ADR_CAT+0x8E4),A |
| 801 | savelij | 84 | VIEWIMG3 LD HL,ERS_FLAGS |
| 1026 | savelij | 85 | RES B_RUN_FAT,(HL) ; вывод окна для TR-DOS |
| 86 | SET B_VIEW_IMG,(HL) ; просмотр образа TR-DOS |
||
| 801 | savelij | 87 | |
| 88 | JP VIEW_ALL |
||
| 89 | |||
| 90 | GLUBOOT LD HL,ERS_FLAGS |
||
| 1026 | savelij | 91 | RES B_RUN_FAT,(HL) ; запуск с дискеты |
| 92 | RES B_VIEW_IMG,(HL) ; работа с реальным каталогом TR-DOS |
||
| 93 | LD A,(DRV_SYM) |
||
| 94 | LD C,1 |
||
| 95 | CALL FTR_DOS |
||
| 801 | savelij | 96 | LD HL,ADR_CAT |
| 97 | LD DE,8 |
||
| 1026 | savelij | 98 | LD BC,0x0105 |
| 99 | CALL FTR_DOS;TO_DOS4BAS ;загрузили 9 сектор |
||
| 100 | LD A,(ADR_CAT+0xE7) |
||
| 101 | CP 0x10 ; проверка на признак TR_DOS |
||
| 102 | JP NZ,CMP_VIRTUAL ; ошибка, диск не TR-DOS |
||
| 801 | savelij | 103 | LD HL,ADR_CAT |
| 104 | LD DE,0 |
||
| 1026 | savelij | 105 | LD BC,0x0905 |
| 106 | CALL FTR_DOS;TO_DOS4BAS ;загрузка TR-DOS диры |
||
| 107 | LD A,(ADR_CAT+0x8E7) |
||
| 108 | CP 0x10 ; проверка на признак TR_DOS |
||
| 801 | savelij | 109 | JP NZ,_STUPID |
| 110 | VIEW_ALL LD IX,ADR_CAT |
||
| 1026 | savelij | 111 | LD DE,0x10 |
| 112 | LD A,(ADR_CAT+0x8E4) |
||
| 801 | savelij | 113 | AND A |
| 114 | JP Z,NO_BAS |
||
| 1026 | savelij | 115 | LD B,A ; сколько файлов надо просмотреть |
| 116 | LD C,0 ; обнуление счетчика найденного |
||
| 801 | savelij | 117 | EXX |
| 118 | PUSH IX |
||
| 119 | POP DE |
||
| 120 | EXX |
||
| 121 | FIND_BASIC LD A,(IX+8) |
||
| 1026 | savelij | 122 | CP "B" ; ищем только басик файлы |
| 801 | savelij | 123 | JR NZ,FINDBAS1 |
| 124 | LD A,(IX+0) |
||
| 1026 | savelij | 125 | DEC A ; проверка на удаленный файл |
| 801 | savelij | 126 | JR Z,FINDBAS1 |
| 127 | EXX |
||
| 128 | PUSH IX |
||
| 1026 | savelij | 129 | POP HL ; откуда переносить описатель |
| 130 | LD BC,0x10 |
||
| 801 | savelij | 131 | LDIR |
| 132 | EXX |
||
| 133 | INC C |
||
| 134 | FINDBAS1 ADD IX,DE |
||
| 135 | DJNZ FIND_BASIC |
||
| 1026 | savelij | 136 | LD IX,WIN_FILES ; окно для вывода басик файлов |
| 801 | savelij | 137 | OUT_HOB LD (IX+_NUM_PKT),0 |
| 138 | LD (IX+_NUM_KOL_L),C |
||
| 1026 | savelij | 139 | LD (IX+_NUM_KOL_H),B ; полное количество найденного |
| 801 | savelij | 140 | LD (IX+_TEK_PKT_L),0 |
| 1026 | savelij | 141 | LD (IX+_TEK_PKT_H),0 ; обнуляем позицию файлов и курсора |
| 801 | savelij | 142 | REOUT_HOB LD A,B |
| 1026 | savelij | 143 | OR C ; проверка количества найденного |
| 144 | JP Z,NO_BAS ; если 0, то нет басиков |
||
| 801 | savelij | 145 | LD HL,ERS_FLAGS |
| 1026 | savelij | 146 | RES 2,(IY+55) ; предположительно файлов менее высоты окна |
| 801 | savelij | 147 | LD A,B |
| 148 | AND A |
||
| 149 | LD A,V_FILE-2 |
||
| 1026 | savelij | 150 | JR NZ,FINDBAS2 ; если более 256 файлов, то полная высота окна |
| 801 | savelij | 151 | LD A,C |
| 152 | CP V_FILE-1 |
||
| 153 | JR C,FINDBAS2 |
||
| 1026 | savelij | 154 | SET 2,(IY+55) ; файлов больше высоты окна |
| 801 | savelij | 155 | LD A,V_FILE-2 |
| 156 | FINDBAS2 LD C,A |
||
| 157 | ADD A,2 |
||
| 1026 | savelij | 158 | LD (IX+_V_SIZE),A ; установка вычисленной высоты окна |
| 159 | LD (IX+_H_SIZE),H_FILE ; установка ширины окна |
||
| 801 | savelij | 160 | FINDBAS6 BIT B_RUN_FAT,(HL) |
| 1026 | savelij | 161 | JR Z,FINDBAS5 ; если работа с TR-DOS, то переходим на вывод окна |
| 801 | savelij | 162 | LD A,C |
| 163 | CP FH_FILE-1 |
||
| 164 | JR C,FINDBAS9 |
||
| 165 | LD C,FH_FILE-2 |
||
| 166 | FINDBAS9 LD A,C |
||
| 167 | LD (KOL4OUT),A |
||
| 168 | LD (IX+_V_SIZE),FH_FILE |
||
| 169 | LD (IX+_H_SIZE),FV_FILE |
||
| 1026 | savelij | 170 | RST8 _WINW |
| 801 | savelij | 171 | JR FINDBAS7 |
| 172 | |||
| 173 | FINDBAS5 LD A,(ERS_FLAGS) |
||
| 174 | AND M_RUN_FAT |
||
| 175 | JR NZ,FINDBAS8 |
||
| 176 | LD (IX+_H_SIZE),H_FILE-4 |
||
| 1026 | savelij | 177 | FINDBAS8 |
| 178 | RST8 _WINW |
||
| 179 | FINDBAS7 CALL OUT_TEK_DIR ; выводим кусочек директории |
||
| 801 | savelij | 180 | JP _RULILKA |
| 181 | |||
| 1026 | savelij | 182 | ; вывод части директории с указанной позиции |
| 183 | OUT_TEK_DIR LD L,(IX+_TEK_PKT_L) ; вывод диры TR-DOS диска |
||
| 184 | LD H,(IX+_TEK_PKT_H) ; получили номер текущей позиции |
||
| 185 | LD E,(IX+_NUM_PKT) ; получили позицию курсора в окне |
||
| 801 | savelij | 186 | XOR A |
| 187 | LD D,A |
||
| 1026 | savelij | 188 | SBC HL,DE ; вычислили позицию файла с которого будем выводить |
| 801 | savelij | 189 | ADD HL,HL |
| 190 | LD A,(ERS_FLAGS) |
||
| 191 | AND M_RUN_FAT |
||
| 1026 | savelij | 192 | JR NZ,OUT_TEK_FAT ; переход если для FAT |
| 193 | ; вывод для TR-DOS файлов |
||
| 801 | savelij | 194 | LD DE,ADR_CAT |
| 195 | ADD HL,HL |
||
| 196 | ADD HL,HL |
||
| 1026 | savelij | 197 | ADD HL,HL ; умножили на размер описателя |
| 198 | ADD HL,DE ; вычислили адрес описателя с которого будем выводить |
||
| 801 | savelij | 199 | LD C,(IX+_V_SIZE) |
| 200 | DEC C |
||
| 1026 | savelij | 201 | DEC C ; вычислили сколько выводить |
| 801 | savelij | 202 | LD D,(IX+_X_COORD) |
| 203 | LD E,(IX+_Y_COORD) |
||
| 204 | INC D |
||
| 205 | INC D |
||
| 1026 | savelij | 206 | INC E ; вычислили позицию вывода на экран |
| 207 | FINDBAS3 LD B,8 ; печатаем только имя |
||
| 801 | savelij | 208 | PUSH DE |
| 209 | FINDBAS4 LD A,(HL) |
||
| 210 | INC HL |
||
| 211 | CALL PRT_SYM |
||
| 212 | DJNZ FINDBAS4 |
||
| 1026 | savelij | 213 | LD DE,8 ; 8 символов напечатали, остальные 8 пропускаем |
| 801 | savelij | 214 | ADD HL,DE |
| 215 | POP DE |
||
| 216 | INC E |
||
| 217 | DEC C |
||
| 1026 | savelij | 218 | JR NZ,FINDBAS3 ; если не кончились переходим на печать следующего имени |
| 801 | savelij | 219 | RET |
| 220 | |||
| 1026 | savelij | 221 | ; вывод диры на FAT |
| 801 | savelij | 222 | OUT_TEK_FAT LD DE,ADR_CAT_FAT |
| 223 | ADD HL,DE |
||
| 224 | LD D,(IX+_X_COORD) |
||
| 225 | LD E,(IX+_Y_COORD) |
||
| 226 | INC D |
||
| 1026 | savelij | 227 | INC E ; вычислили позицию вывода на экран |
| 801 | savelij | 228 | LD C,0 |
| 229 | KOL4OUT EQU $-1 |
||
| 230 | OTF2 PUSH BC |
||
| 231 | LD C,(HL) |
||
| 232 | INC HL |
||
| 233 | LD B,(HL) |
||
| 234 | INC HL |
||
| 235 | PUSH HL |
||
| 236 | PUSH DE |
||
| 237 | LD A,6 |
||
| 1026 | savelij | 238 | RST8 _COM_FAT,_POS_FILES |
| 801 | savelij | 239 | LD HL,BUF_FILEITEM |
| 1026 | savelij | 240 | RST8 _COM_FAT,_READ_DIR |
| 801 | savelij | 241 | POP DE |
| 242 | PUSH DE |
||
| 1026 | savelij | 243 | LD BC,0x0B |
| 801 | savelij | 244 | ADD HL,BC |
| 245 | LD A,(HL) |
||
| 246 | SBC HL,BC |
||
| 1026 | savelij | 247 | AND 0x10 |
| 248 | LD A,0 ; символ папки |
||
| 801 | savelij | 249 | JR NZ,OTF4 |
| 1026 | savelij | 250 | LD A,1 ; символ файла |
| 801 | savelij | 251 | OTF4 CALL PRTSPECSYM |
| 252 | LD HL,OUT_NAME_FILET |
||
| 1026 | savelij | 253 | RST8 _COM_FAT,_GET_LONGNAME |
| 801 | savelij | 254 | LD (LONG_NAME),A |
| 255 | CALL FILENAME8_3 |
||
| 256 | POP DE |
||
| 257 | POP HL |
||
| 258 | POP BC |
||
| 259 | INC E |
||
| 260 | DEC C |
||
| 261 | JR NZ,OTF2 |
||
| 262 | RET |
||
| 263 | |||
| 264 | FILENAME8_3 LD A,(ERS_FLAGS) |
||
| 265 | AND M_RUN_FAT |
||
| 266 | JR NZ,OTF5 |
||
| 267 | LD B,8 |
||
| 268 | OTF1 LD A,(HL) |
||
| 269 | INC HL |
||
| 270 | CALL PRT_SYM |
||
| 271 | DJNZ OTF1 |
||
| 272 | RET |
||
| 273 | |||
| 274 | OTF5 EX DE,HL |
||
| 275 | LD A,H |
||
| 276 | ADD A,A |
||
| 277 | ADD A,A |
||
| 278 | ADD A,A |
||
| 279 | LD H,A |
||
| 280 | INC H |
||
| 281 | LD (OUT_NAME_FILE+1),HL |
||
| 282 | LD HL,OUT_NAME_FILET |
||
| 283 | LD BC,0 |
||
| 284 | LONG_NAME EQU $-2 |
||
| 285 | LD A,FV_FILE6 |
||
| 286 | CP C |
||
| 287 | JR Z,OTF7 |
||
| 288 | JR NC,OTF6 |
||
| 289 | EX DE,HL |
||
| 290 | LD HL,FV_FILE6 |
||
| 291 | ADD HL,DE |
||
| 292 | LD (HL),">" |
||
| 293 | INC HL |
||
| 294 | LD (HL),0 |
||
| 295 | JR OTF7 |
||
| 296 | |||
| 297 | OTF6 SUB C |
||
| 298 | ADD HL,BC |
||
| 299 | LD C,A |
||
| 300 | LD D,H |
||
| 301 | LD E,L |
||
| 302 | INC DE |
||
| 303 | LD (HL)," " |
||
| 304 | LDIR |
||
| 305 | XOR A |
||
| 306 | LD (DE),A |
||
| 307 | OTF7 LD HL,OUT_NAME_FILE |
||
| 1026 | savelij | 308 | RST8 _PRINT_MESSAGE |
| 801 | savelij | 309 | RET |
| 310 | |||
| 311 | NO_BAS LD HL,ERS_FLAGS |
||
| 312 | BIT B_VIEW_IMG,(HL) |
||
| 1186 | savelij | 313 | JP NZ,FILE_BROWSER |
| 801 | savelij | 314 | LD IX,NOBASIC |
| 1026 | savelij | 315 | RST8 _WINW |
| 801 | savelij | 316 | JP _RULILKA |
| 317 | |||
| 318 | RUNFILE DI |
||
| 1026 | savelij | 319 | CALL SHUT2AY ; бумкалка в AY |
| 801 | savelij | 320 | LD HL,ERS_FLAGS |
| 321 | BIT B_VIEW_IMG,(HL) |
||
| 322 | JR Z,RUNFILE2 |
||
| 323 | LD IX,FAT_FILES |
||
| 324 | LD HL,ERS_FLAGS |
||
| 325 | SET B_VIEW_IMG,(HL) |
||
| 1026 | savelij | 326 | JP RUN_HOB ; переход на загрузку и запуск из SCL образа |
| 801 | savelij | 327 | |
| 328 | RUNFILE2 LD L,(IX+_TEK_PKT_L) |
||
| 1026 | savelij | 329 | LD H,(IX+_TEK_PKT_H) ; номер выбранного файла |
| 801 | savelij | 330 | LD DE,ADR_CAT |
| 331 | ADD HL,HL |
||
| 332 | ADD HL,HL |
||
| 333 | ADD HL,HL |
||
| 334 | ADD HL,HL |
||
| 1026 | savelij | 335 | ADD HL,DE ; откуда имя файла взять |
| 801 | savelij | 336 | RUNFILE1 LD DE,RUNNAM |
| 337 | LD BC,8 |
||
| 338 | LDIR |
||
| 1026 | savelij | 339 | LD HL,0x3E08+0xA7 |
| 340 | LD DE,0xFFFF |
||
| 341 | LD C,0xA8 ; 21 символ UDG |
||
| 801 | savelij | 342 | LDDR |
| 343 | LD HL,RUN_BASIC |
||
| 1026 | savelij | 344 | LD DE,0x5D3B |
| 801 | savelij | 345 | LD BC,ERUN_BASIC-RUN_BASIC |
| 1026 | savelij | 346 | LDIR ; перенос бейсик проги для запуска |
| 347 | CALL MEMSET ; выставили режим компа |
||
| 801 | savelij | 348 | CALL FOR_RUN |
| 349 | EI |
||
| 1026 | savelij | 350 | LD BC,0xFF56 |
| 351 | CALL 0x1EB7 |
||
| 352 | LD HL,0x1B7D ; запуск перенесенной бейсик проги |
||
| 801 | savelij | 353 | PUSH HL |
| 1026 | savelij | 354 | LD HL,0x6000 |
| 355 | LD DE,0x6001 |
||
| 356 | LD BC,0xFF00-0x6000 |
||
| 801 | savelij | 357 | LD (HL),0 |
| 1026 | savelij | 358 | JP 0x33C3 |
| 801 | savelij | 359 | |
| 360 | FOR_RUN SET 3,(IY+1) |
||
| 361 | LD IY,ERR_NR |
||
| 1026 | savelij | 362 | LD (IY),0xFF |
| 801 | savelij | 363 | SET 7,(IY+1) |
| 364 | RES 4,(IY+1) |
||
| 1026 | savelij | 365 | LD HL,0x2758 |
| 801 | savelij | 366 | EXX |
| 1026 | savelij | 367 | LD A,0xC9 |
| 801 | savelij | 368 | LD (TRD_5CC2),A |
| 369 | LD HL,0 |
||
| 370 | LD (NEWPPC),HL |
||
| 371 | XOR A |
||
| 372 | LD (NSPPS),A |
||
| 373 | RET |
||
| 374 | |||
| 1026 | savelij | 375 | ; круговой перебор имени дисковода 1-4 (A-D) |
| 376 | NEXTDRIVE LD A,(TXT_DRIVE) ; взяли букву текущего дисковода |
||
| 377 | INC A ; +1, то есть выбрали следующий по порядку |
||
| 378 | SUB 0x10 ; превратили в номер |
||
| 379 | CP "5" ; если превысили 4 |
||
| 801 | savelij | 380 | JR C,SELDRV1 |
| 1026 | savelij | 381 | SUB 4 ; то изменили на номер первый |
| 801 | savelij | 382 | JR SELDRV1 |
| 383 | |||
| 384 | NEXTVIRT LD HL,MAINLOP |
||
| 385 | PUSH HL |
||
| 386 | LD A,(ERS_FLAGS) |
||
| 387 | AND M_CLOCK_ON |
||
| 388 | RET Z |
||
| 1186 | savelij | 389 | LD H,CMOS.VIRT_REAL_DRIVE |
| 801 | savelij | 390 | CALL READCMOS |
| 1026 | savelij | 391 | AND 3 ; A = сдвинутый номер виртуального дисковода |
| 801 | savelij | 392 | INC A |
| 393 | CP 4 |
||
| 394 | JR C,NEXTVIRT1 |
||
| 395 | XOR A |
||
| 1026 | savelij | 396 | NEXTVIRT1 LD D,A ; сохранили виртуальный дисковод |
| 801 | savelij | 397 | LD A,L |
| 1026 | savelij | 398 | AND %11111100 ; A = сбросили старый номер виртуального дисковода |
| 399 | OR D ; добавили новый номер виртуального дисковода |
||
| 801 | savelij | 400 | LD L,A |
| 1026 | savelij | 401 | CALL WRITECMOS ; сохранили номер реального и виртуального дисковода |
| 402 | ; RST8 _MOUNTER,_MOUNT_RAMDISK ; монтирование рамдиска |
||
| 801 | savelij | 403 | CALL REST2X2 |
| 404 | CALL PRT_VIRTDRV |
||
| 405 | LD A,(ERS_FLAGS) |
||
| 406 | AND M_MOUSE_ON |
||
| 407 | RET Z |
||
| 408 | JP DRAW_MOUSE |
||
| 409 | |||
| 1026 | savelij | 410 | ; изменение номера дисковода и сохранение в кмосе если таковой обнаружен |
| 411 | SELDRV LD A,(LAST_K) ; взяли номер дисковода |
||
| 412 | SELDRV1 SUB "1" ; обратили в бинарный вид для записи в переменную |
||
| 413 | LD HL,MAINLOP ; адрес куда вернуться после записи |
||
| 801 | savelij | 414 | PUSH HL |
| 1026 | savelij | 415 | SELDRVPP LD (DRV_SYM),A ; сохранили новый номер реального дисковода |
| 801 | savelij | 416 | RLCA |
| 417 | RLCA |
||
| 1026 | savelij | 418 | LD D,A ; сдвинутый номер виртуального дисковода |
| 801 | savelij | 419 | LD A,(ERS_FLAGS) |
| 420 | AND M_CLOCK_ON |
||
| 1026 | savelij | 421 | RET Z ; если кмос не найден, выходим |
| 1186 | savelij | 422 | LD H,CMOS.VIRT_REAL_DRIVE |
| 801 | savelij | 423 | CALL READCMOS |
| 1026 | savelij | 424 | AND %11110011 ; сбросили старый номер реального дисковода |
| 425 | OR D ; добавили новый номер реального дисковода |
||
| 801 | savelij | 426 | LD L,A |
| 1026 | savelij | 427 | CALL WRITECMOS ; сохраняем в кмосе |
| 428 | CALL SET_DRIVE ; установка изменения |
||
| 429 | CALL REST2X2 ; восстановили под курсором мыши |
||
| 430 | CALL PRT_DRV_SYM ; перепечатали строку о дисководах |
||
| 801 | savelij | 431 | LD A,(ERS_FLAGS) |
| 432 | AND M_MOUSE_ON |
||
| 433 | RET Z |
||
| 1026 | savelij | 434 | JP DRAW_MOUSE ; нарисовали мышь на старом месте |
| 801 | savelij | 435 | |
| 1026 | savelij | 436 | ; FIX mouse key if no mouse |
| 801 | savelij | 437 | ONERNCLS LD A,(ERS_FLAGS) |
| 438 | AND M_MOUSE_ON |
||
| 439 | JR Z,ONERNC1 |
||
| 1026 | savelij | 440 | LD A,0xFA |
| 441 | IN A,(0xDF) |
||
| 801 | savelij | 442 | RRA |
| 443 | JP NC,_STUPID |
||
| 444 | ONERNC1 POP AF |
||
| 445 | EX (SP),HL |
||
| 446 | RET |
||
| 447 | |||
| 1026 | savelij | 448 | SET_DOS_PAGE PUSH HL |
| 449 | DOSIX PUSH IX |
||
| 450 | JP TO_DOS |
||
| 451 | |||
| 452 | ; проверка наличия маркера рамдиска, при отсуствии создание диска на 640КБ |
||
| 453 | DISK_NONE |
||
| 454 | PEC_ON M_SHADOW_BF |
||
| 455 | LD A,RAM_RAMDISK |
||
| 456 | LD BC,WIN_P1 |
||
| 457 | OUT (C),A |
||
| 458 | LD HL,0x7FFF |
||
| 459 | LD A,(HL) |
||
| 460 | DEC H |
||
| 461 | CP "R" |
||
| 462 | JR NZ,DISK_NONE1 |
||
| 463 | LD A,(HL) |
||
| 464 | CP "D" |
||
| 465 | DISK_NONE1 EX AF,AF' |
||
| 466 | LD A,ZXSTD_CPU1 |
||
| 467 | OUT (C),A |
||
| 468 | PEC_OFF M_SHADOW_BF |
||
| 469 | EX AF,AF' |
||
| 470 | LD HL,ERS_FLAGS |
||
| 471 | RES B_LOAD_IMG,(HL) |
||
| 472 | JP NZ,CREATE_TRDRAM ; маркер не обнаружен, создать |
||
| 473 | RET |
||
| 474 | |||
| 475 | DIV10 LD D,0x30-1 |
||
| 476 | INC D |
||
| 477 | SUB 0x0A |
||
| 478 | JR NC,$-3 |
||
| 479 | ADD A,0x0A+0x30 |
||
| 480 | RET |
||
| 481 | |||
| 482 | _RETRY LD A,"R" |
||
| 483 | JR $+4 |
||
| 484 | |||
| 485 | _IGNORE LD A,"I" |
||
| 486 | LD HL,0x3F7E |
||
| 487 | EX (SP),HL |
||
| 488 | DI |
||
| 489 | JP TO_DOS |
||
| 490 | |||
| 491 | ; вызов вместо 0x3D13 |
||
| 492 | FTR_DOS ;jp 0x3D13 |
||
| 493 | PUSH HL |
||
| 494 | LD HL,(ERR_SP) |
||
| 495 | LD (DOSVARS.TMP_ERR_SP),HL |
||
| 496 | LD HL,DSK_ERR_CAPTURE |
||
| 497 | LD (TRD_5CC3),HL |
||
| 498 | LD HL,DERROR |
||
| 499 | EX (SP),HL |
||
| 500 | LD (ERR_SP),SP |
||
| 501 | EX AF,AF' |
||
| 502 | LD A,0xC3 |
||
| 503 | LD (TRD_5CC2),A |
||
| 504 | XOR A |
||
| 505 | LD (TRD_5D0F),A |
||
| 506 | LD (TRD_5D10),A |
||
| 507 | LD (DOSVARS.DSKERR),A |
||
| 508 | LD (DOSVARS.COPY_1F),A |
||
| 509 | DEC A |
||
| 510 | LD (ERR_NR),A |
||
| 511 | LD A,(TRD_5D19) |
||
| 512 | LD (TRD_5CF6),A |
||
| 513 | EX AF,AF' |
||
| 514 | JP 0x3D13 |
||
| 515 | |||
| 516 | ; возврат из 0x3D13 и проверка на ошибку |
||
| 517 | DERROR DI |
||
| 518 | LD HL,(DOSVARS.TMP_ERR_SP) |
||
| 519 | LD (ERR_SP),HL |
||
| 520 | LD A,(TRD_5D16) |
||
| 521 | AND 3 |
||
| 522 | LD (TRD_5D19),A |
||
| 523 | LD HL,TRD_5CC2 |
||
| 524 | LD (HL),0xC9 |
||
| 525 | LD HL,(DOSVARS.COPY_1F) |
||
| 526 | LD A,(TRD_5D0F) |
||
| 527 | LD H,A |
||
| 528 | LD A,L |
||
| 529 | AND A |
||
| 530 | JR NZ,.L1 |
||
| 531 | LD A,H |
||
| 532 | AND A |
||
| 533 | RET Z ; ошибок нет |
||
| 534 | .L1 LD A,H |
||
| 535 | LD C,ERR_NO_DISK |
||
| 536 | CP 6 ; нет диска |
||
| 537 | JR Z,.L2 |
||
| 538 | LD C,ERR_DISK_READ_ONLY |
||
| 539 | LD A,0x40 |
||
| 540 | AND L |
||
| 541 | JR NZ,.L2 |
||
| 542 | LD A,(TRD_5CF4) |
||
| 543 | CP 8 |
||
| 544 | JR NZ,.L2 |
||
| 545 | LD C,ERR_DISK_ERROR ; ошибка диска |
||
| 546 | .L2 LD A,C |
||
| 547 | LD (DOSVARS.DSKERR),A |
||
| 548 | CP ERR_DISK_ERROR |
||
| 549 | PUSH AF |
||
| 550 | CALL Z,STOPDSK |
||
| 551 | POP AF |
||
| 552 | LD IX,(DOSVARS.CURR_IX) |
||
| 553 | LD A,H |
||
| 554 | CP 6 |
||
| 555 | RET NZ |
||
| 556 | JP _STUPID ; диска нет |
||
| 557 | |||
| 558 | ; остановка дискеты |
||
| 559 | STOPDSK LD A,(TRD_5D16) |
||
| 560 | PUSH AF |
||
| 561 | XOR 3 |
||
| 562 | CALL .L1 |
||
| 563 | POP AF |
||
| 564 | .L1 LD HL,0x02B9 |
||
| 565 | PUSH HL |
||
| 566 | JP 0x3D2F |
||
| 567 | |||
| 568 | ; перехват адреса 0x5CC2 |
||
| 569 | DSK_ERR_CAPTURE |
||
| 570 | DI |
||
| 571 | POP DE |
||
| 572 | LD HL,0x0D6B |
||
| 573 | AND A |
||
| 574 | SBC HL,DE |
||
| 575 | JR NZ,.L1 |
||
| 576 | LD A,B |
||
| 577 | LD (DOSVARS.COPY_1F),A |
||
| 578 | RET |
||
| 579 | |||
| 580 | .L1 LD HL,0x10 |
||
| 581 | AND A |
||
| 582 | SBC HL,DE |
||
| 583 | RET Z |
||
| 584 | LD HL,0x1A1B |
||
| 585 | AND A |
||
| 586 | SBC HL,DE |
||
| 587 | RET Z |
||
| 588 | AND A |
||
| 589 | LD HL,0x028E |
||
| 590 | SBC HL,DE |
||
| 591 | SCF |
||
| 592 | RET Z |
||
| 593 | LD HL,0x031E |
||
| 594 | AND A |
||
| 595 | SBC HL,DE |
||
| 596 | SCF |
||
| 597 | RET Z |
||
| 598 | LD HL,0x1F54 |
||
| 599 | AND A |
||
| 600 | SBC HL,DE |
||
| 601 | SCF |
||
| 602 | RET Z |
||
| 603 | LD HL,0x0333 |
||
| 604 | AND A |
||
| 605 | SBC HL,DE |
||
| 606 | JR Z,RAI |
||
| 607 | PUSH DE |
||
| 608 | LD HL,(TRD_5D02) |
||
| 609 | LD DE,(TRD_5D04) |
||
| 610 | RET |
||
| 611 | |||
| 612 | IF 0 |
||
| 613 | ; перехват дисковой ошибки для обработки |
||
| 801 | savelij | 614 | ONERR EX (SP),HL |
| 615 | PUSH AF |
||
| 616 | |||
| 617 | PUSH DE |
||
| 618 | PUSH HL |
||
| 1026 | savelij | 619 | LD DE,0x1303 |
| 801 | savelij | 620 | AND A |
| 621 | SBC HL,DE |
||
| 622 | POP HL |
||
| 623 | POP DE |
||
| 624 | JR Z,ONERR1 |
||
| 625 | PUSH DE |
||
| 626 | PUSH HL |
||
| 1026 | savelij | 627 | LD DE,0x0D6B |
| 801 | savelij | 628 | AND A |
| 629 | SBC HL,DE |
||
| 630 | POP HL |
||
| 631 | POP DE |
||
| 632 | JR NZ,ONERNCLS |
||
| 633 | ; LD A,H |
||
| 1026 | savelij | 634 | ; CP HIGH (0x0D6B) |
| 801 | savelij | 635 | ; JR NZ,ONERNCLS |
| 636 | ; LD A,L |
||
| 1026 | savelij | 637 | ; CP LOW (0x0D6B) |
| 801 | savelij | 638 | ; JR NZ,ONERNCLS |
| 639 | |||
| 640 | ONERR1 POP HL |
||
| 641 | POP HL |
||
| 642 | POP HL |
||
| 643 | POP HL |
||
| 644 | POP HL |
||
| 1026 | savelij | 645 | ENDIF |
| 646 | RAI |
||
| 801 | savelij | 647 | EI |
| 648 | CALL GLUDIN |
||
| 649 | LD HL,TRD_5CF4 |
||
| 1026 | savelij | 650 | LD A,(HL) ; взяли номер сектора |
| 801 | savelij | 651 | INC A |
| 652 | CALL DIV10 |
||
| 653 | LD (NUM_SEC_TXT+1),A |
||
| 654 | LD A,D |
||
| 655 | LD (NUM_SEC_TXT),A |
||
| 656 | INC HL |
||
| 1026 | savelij | 657 | LD A,(HL) ; взяли номер трека |
| 801 | savelij | 658 | SRL A |
| 659 | LD E,A |
||
| 660 | ADC A,"0" |
||
| 661 | SUB E |
||
| 1026 | savelij | 662 | LD (SIDE_DISK),A ; сторона диска |
| 801 | savelij | 663 | LD A,E |
| 664 | CALL DIV10 |
||
| 665 | LD (NUM_TRK_TXT+1),A |
||
| 666 | LD A,D |
||
| 667 | LD (NUM_TRK_TXT),A |
||
| 1026 | savelij | 668 | LD IX,DSK_ERR ; окно выводим полностью |
| 669 | RST8 _WINW |
||
| 801 | savelij | 670 | JP _RULILKA |
| 671 | |||
| 1026 | savelij | 672 | RESET_VG LD C,0xFF |
| 801 | savelij | 673 | XOR A |
| 1026 | savelij | 674 | LD IX,0x3FF0 ; OUT (C),A |
| 801 | savelij | 675 | CALL DOSIX |
| 676 | LD A,(DRV_SYM) |
||
| 1026 | savelij | 677 | OR 0x3C |
| 678 | LD HL,0x2A53 |
||
| 679 | CALL SET_DOS_PAGE ; установка DOS страницы |
||
| 680 | LD A,0x68 ; шаг назад |
||
| 681 | LD C,0x1F |
||
| 682 | JP DOSIX |
||
| 683 | ; LD HL,DSTUPID |
||
| 684 | ; LD (ERR_SP),HL |
||
| 685 | ; LD A,0xC3 |
||
| 686 | ; LD (TRD_5CC2),A |
||
| 687 | ; LD HL,ONERR |
||
| 688 | ; LD (TRD_5CC3),HL |
||
| 689 | ; RET |