Subversion Repositories pentevo

Rev

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