Subversion Repositories pentevo

Rev

Rev 888 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ; LAST UPDATE: 04.10.2022 savelij
  3.  
  4.                 TITLE "call_trdos.a80"
  5.  
  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.  
  13. SEL_FILES_WIN   LD HL,ERS_FLAGS
  14.                 BIT B_VIEW_IMG,(HL)
  15.                 JP Z,RESTART
  16.                 JP FILES_BROWSE
  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
  26.                 LD B,(HL)                       ; получили текущий выбранный номер
  27.                 LD A,6
  28.         RST8 _COM_FAT,_POS_FILES                ; установка внутреннего указателя FAT драйвера
  29.                 LD HL,BUF_FILEITEM
  30.         RST8 _COM_FAT,_READ_DIR                 ; получили описатель по установленному номеру
  31.                 LD DE,0x0B
  32.                 ADD HL,DE
  33.                 LD A,(HL)
  34.                 SBC HL,DE
  35.                 AND 0x10
  36.                 JP NZ,_RULILKA                  ; попытка просмотра директории
  37.                 PUSH HL
  38.                 CALL REST_COLCURS               ; стирание цветного курсора
  39.                 CALL REST2X2                    ; восстановление экрана под курсором мыши
  40.                 POP HL
  41.                 CALL CPETR3                     ; проверка расширения
  42.                 JP Z,_RULILKA                   ;попытка просмотра не поддерживаемого расширения (SCL, TRD ONLY)
  43.  
  44.                 LD (TYPE_FILE),A
  45.                 PUSH AF
  46.         RST8 _COM_FAT,_OPEN_FILE
  47.                 POP AF
  48.                 DEC A
  49.                 LD HL,ADR_CAT                   ; TYPE_FILE = 1 - TRD
  50.                 JR Z,VIEWIMG1
  51.                 LD HL,ADR_CAT+0x200             ; TYPE_FILE = 2 - SCL
  52. VIEWIMG1        PUSH AF
  53.                 LD A,5
  54.         RST8 _COM_FAT,_READ_FILE
  55.                 POP AF
  56.                 JR Z,VIEWIMG3
  57.                 LD DE,ADR_CAT
  58.                 LD HL,ADR_CAT+0x200+8
  59.                 LD A,(HL)
  60.                 PUSH AF
  61.                 INC HL
  62. VIEWIMG2        LD BC,0x0E
  63.                 LDIR
  64.                 INC DE
  65.                 INC DE
  66.                 DEC A
  67.                 JR NZ,VIEWIMG2
  68.                 LD HL,ADR_CAT+0x0A00
  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
  79.                 LD DE,ADR_CAT+0x8E1
  80.                 LD BC,DSK_END-DSKINFO
  81.                 LDIR
  82.                 POP AF
  83.                 LD (ADR_CAT+0x8E4),A
  84. VIEWIMG3        LD HL,ERS_FLAGS
  85.                 RES B_RUN_FAT,(HL)              ; вывод окна для TR-DOS
  86.                 SET B_VIEW_IMG,(HL)             ; просмотр образа TR-DOS
  87.  
  88.                 JP VIEW_ALL
  89.  
  90. GLUBOOT         LD HL,ERS_FLAGS
  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
  96.                 LD HL,ADR_CAT
  97.                 LD DE,8
  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
  103.                 LD HL,ADR_CAT
  104.                 LD DE,0
  105.                 LD BC,0x0905
  106.                 CALL FTR_DOS;TO_DOS4BAS                 ;загрузка TR-DOS диры
  107.                 LD A,(ADR_CAT+0x8E7)
  108.                 CP 0x10                         ; проверка на признак TR_DOS
  109.                 JP NZ,_STUPID
  110. VIEW_ALL        LD IX,ADR_CAT
  111.                 LD DE,0x10
  112.                 LD A,(ADR_CAT+0x8E4)
  113.                 AND A
  114.                 JP Z,NO_BAS
  115.                 LD B,A                          ; сколько файлов надо просмотреть
  116.                 LD C,0                          ; обнуление счетчика найденного
  117.                 EXX
  118.                 PUSH IX
  119.                 POP DE
  120.                 EXX
  121. FIND_BASIC      LD A,(IX+8)
  122.                 CP "B"                          ; ищем только басик файлы
  123.                 JR NZ,FINDBAS1
  124.                 LD A,(IX+0)
  125.                 DEC A                           ; проверка на удаленный файл
  126.                 JR Z,FINDBAS1
  127.                 EXX
  128.                 PUSH IX
  129.                 POP HL                          ; откуда переносить описатель
  130.                 LD BC,0x10
  131.                 LDIR
  132.                 EXX
  133.                 INC C
  134. FINDBAS1        ADD IX,DE
  135.                 DJNZ FIND_BASIC
  136.                 LD IX,WIN_FILES                 ; окно для вывода басик файлов
  137. OUT_HOB         LD (IX+_NUM_PKT),0
  138.                 LD (IX+_NUM_KOL_L),C
  139.                 LD (IX+_NUM_KOL_H),B            ; полное количество найденного
  140.                 LD (IX+_TEK_PKT_L),0
  141.                 LD (IX+_TEK_PKT_H),0            ; обнуляем позицию файлов и курсора
  142. REOUT_HOB       LD A,B
  143.                 OR C                            ; проверка количества найденного
  144.                 JP Z,NO_BAS                     ; если 0, то нет басиков
  145.                 LD HL,ERS_FLAGS
  146.                 RES 2,(IY+55)                   ; предположительно файлов менее высоты окна
  147.                 LD A,B
  148.                 AND A
  149.                 LD A,V_FILE-2
  150.                 JR NZ,FINDBAS2                  ; если более 256 файлов, то полная высота окна
  151.                 LD A,C
  152.                 CP V_FILE-1
  153.                 JR C,FINDBAS2
  154.                 SET 2,(IY+55)                   ; файлов больше высоты окна
  155.                 LD A,V_FILE-2
  156. FINDBAS2        LD C,A
  157.                 ADD A,2
  158.                 LD (IX+_V_SIZE),A               ; установка вычисленной высоты окна
  159.                 LD (IX+_H_SIZE),H_FILE          ; установка ширины окна
  160. FINDBAS6        BIT B_RUN_FAT,(HL)
  161.                 JR Z,FINDBAS5                   ; если работа с TR-DOS, то переходим на вывод окна
  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
  170.         RST8 _WINW
  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
  177. FINDBAS8
  178.         RST8 _WINW
  179. FINDBAS7        CALL OUT_TEK_DIR                ; выводим кусочек директории
  180.                 JP _RULILKA
  181.  
  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)              ; получили позицию курсора в окне
  186.                 XOR A
  187.                 LD D,A
  188.                 SBC HL,DE                       ; вычислили позицию файла с которого будем выводить
  189.                 ADD HL,HL
  190.                 LD A,(ERS_FLAGS)
  191.                 AND M_RUN_FAT
  192.                 JR NZ,OUT_TEK_FAT               ; переход если для FAT
  193. ; вывод для TR-DOS файлов
  194.                 LD DE,ADR_CAT
  195.                 ADD HL,HL
  196.                 ADD HL,HL
  197.                 ADD HL,HL                       ; умножили на размер описателя
  198.                 ADD HL,DE                       ; вычислили адрес описателя с которого будем выводить
  199.                 LD C,(IX+_V_SIZE)
  200.                 DEC C
  201.                 DEC C                           ; вычислили сколько выводить
  202.                 LD D,(IX+_X_COORD)
  203.                 LD E,(IX+_Y_COORD)
  204.                 INC D
  205.                 INC D
  206.                 INC E                           ; вычислили позицию вывода на экран
  207. FINDBAS3        LD B,8                          ; печатаем только имя
  208.                 PUSH DE
  209. FINDBAS4        LD A,(HL)
  210.                 INC HL
  211.                 CALL PRT_SYM
  212.                 DJNZ FINDBAS4
  213.                 LD DE,8                         ; 8 символов напечатали, остальные 8 пропускаем
  214.                 ADD HL,DE
  215.                 POP DE
  216.                 INC E
  217.                 DEC C
  218.                 JR NZ,FINDBAS3                  ; если не кончились переходим на печать следующего имени
  219.                 RET
  220.  
  221. ; вывод диры на FAT
  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
  227.                 INC E                           ; вычислили позицию вывода на экран
  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
  238.         RST8 _COM_FAT,_POS_FILES
  239.                 LD HL,BUF_FILEITEM
  240.         RST8 _COM_FAT,_READ_DIR
  241.                 POP DE
  242.                 PUSH DE
  243.                 LD BC,0x0B
  244.                 ADD HL,BC
  245.                 LD A,(HL)
  246.                 SBC HL,BC
  247.                 AND 0x10
  248.                 LD A,0                          ; символ папки
  249.                 JR NZ,OTF4
  250.                 LD A,1                          ; символ файла
  251. OTF4            CALL PRTSPECSYM
  252.                 LD HL,OUT_NAME_FILET
  253.         RST8 _COM_FAT,_GET_LONGNAME
  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
  308.         RST8 _PRINT_MESSAGE
  309.                 RET
  310.  
  311. NO_BAS          LD HL,ERS_FLAGS
  312.                 BIT B_VIEW_IMG,(HL)
  313.                 JP NZ,FILES_BROWSE
  314.                 LD IX,NOBASIC
  315.         RST8 _WINW
  316.                 JP _RULILKA
  317.  
  318. RUNFILE         DI
  319.                 CALL SHUT2AY                    ; бумкалка в AY
  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)
  326.                 JP RUN_HOB                      ; переход на загрузку и запуск из SCL образа
  327.  
  328. RUNFILE2        LD L,(IX+_TEK_PKT_L)
  329.                 LD H,(IX+_TEK_PKT_H)            ; номер выбранного файла
  330.                 LD DE,ADR_CAT
  331.                 ADD HL,HL
  332.                 ADD HL,HL
  333.                 ADD HL,HL
  334.                 ADD HL,HL
  335.                 ADD HL,DE                       ; откуда имя файла взять
  336. RUNFILE1        LD DE,RUNNAM
  337.                 LD BC,8
  338.                 LDIR
  339.                 LD HL,0x3E08+0xA7
  340.                 LD DE,0xFFFF
  341.                 LD C,0xA8                       ; 21 символ UDG
  342.                 LDDR
  343.                 LD HL,RUN_BASIC
  344.                 LD DE,0x5D3B
  345.                 LD BC,ERUN_BASIC-RUN_BASIC
  346.                 LDIR                            ; перенос бейсик проги для запуска
  347.                 CALL MEMSET                     ; выставили режим компа
  348.                 CALL FOR_RUN
  349.                 EI
  350.                 LD BC,0xFF56
  351.                 CALL 0x1EB7
  352.                 LD HL,0x1B7D                    ; запуск перенесенной бейсик проги
  353.                 PUSH HL
  354.                 LD HL,0x6000
  355.                 LD DE,0x6001
  356.                 LD BC,0xFF00-0x6000
  357.                 LD (HL),0
  358.                 JP 0x33C3
  359.  
  360. FOR_RUN         SET 3,(IY+1)
  361.                 LD IY,ERR_NR
  362.                 LD (IY),0xFF
  363.                 SET 7,(IY+1)
  364.                 RES 4,(IY+1)
  365.                 LD HL,0x2758
  366.                 EXX
  367.                 LD A,0xC9
  368.                 LD (TRD_5CC2),A
  369.                 LD HL,0
  370.                 LD (NEWPPC),HL
  371.                 XOR A
  372.                 LD (NSPPS),A
  373.                 RET
  374.  
  375. ; круговой перебор имени дисковода 1-4 (A-D)
  376. NEXTDRIVE       LD A,(TXT_DRIVE)                ; взяли букву текущего дисковода
  377.                 INC A                           ; +1, то есть выбрали следующий по порядку
  378.                 SUB 0x10                        ; превратили в номер
  379.                 CP "5"                          ; если превысили 4
  380.                 JR C,SELDRV1
  381.                 SUB 4                           ; то изменили на номер первый
  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
  389.                 LD H,VIRT_REAL_DRIVE
  390.                 CALL READCMOS
  391.                 AND 3                           ; A = сдвинутый номер виртуального дисковода
  392.                 INC A
  393.                 CP 4
  394.                 JR C,NEXTVIRT1
  395.                 XOR A
  396. NEXTVIRT1       LD D,A                          ; сохранили виртуальный дисковод
  397.                 LD A,L
  398.                 AND %11111100                   ; A = сбросили старый номер виртуального дисковода
  399.                 OR D                            ; добавили новый номер виртуального дисковода
  400.                 LD L,A
  401.                 CALL WRITECMOS                  ; сохранили номер реального и виртуального дисковода
  402. ;       RST8 _MOUNTER,_MOUNT_RAMDISK            ; монтирование рамдиска
  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.  
  410. ; изменение номера дисковода и сохранение в кмосе если таковой обнаружен
  411. SELDRV          LD A,(LAST_K)                   ; взяли номер дисковода
  412. SELDRV1         SUB "1"                         ; обратили в бинарный вид для записи в переменную
  413.                 LD HL,MAINLOP                   ; адрес куда вернуться после записи
  414.                 PUSH HL
  415. SELDRVPP        LD (DRV_SYM),A                  ; сохранили новый номер реального дисковода
  416.                 RLCA
  417.                 RLCA
  418.                 LD D,A                          ; сдвинутый номер виртуального дисковода
  419.                 LD A,(ERS_FLAGS)
  420.                 AND M_CLOCK_ON
  421.                 RET Z                           ; если кмос не найден, выходим
  422.                 LD H,VIRT_REAL_DRIVE
  423.                 CALL READCMOS
  424.                 AND %11110011                   ; сбросили старый номер реального дисковода
  425.                 OR D                            ; добавили новый номер реального дисковода
  426.                 LD L,A
  427.                 CALL WRITECMOS                  ; сохраняем в кмосе
  428.                 CALL SET_DRIVE                  ; установка изменения
  429.                 CALL REST2X2                    ; восстановили под курсором мыши
  430.                 CALL PRT_DRV_SYM                ; перепечатали строку о дисководах
  431.                 LD A,(ERS_FLAGS)
  432.                 AND M_MOUSE_ON
  433.                 RET Z
  434.                 JP DRAW_MOUSE                   ; нарисовали мышь на старом месте
  435.  
  436. ; FIX mouse key if no mouse
  437. ONERNCLS        LD A,(ERS_FLAGS)
  438.                 AND M_MOUSE_ON
  439.                 JR Z,ONERNC1
  440.                 LD A,0xFA
  441.                 IN A,(0xDF)
  442.                 RRA
  443.                 JP NC,_STUPID
  444. ONERNC1         POP AF
  445.                 EX (SP),HL
  446.                 RET
  447.  
  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. ; перехват дисковой ошибки для обработки
  614. ONERR           EX (SP),HL
  615.                 PUSH AF
  616.  
  617.                 PUSH DE
  618.                 PUSH HL
  619.                 LD DE,0x1303
  620.                 AND A
  621.                 SBC HL,DE
  622.                 POP HL
  623.                 POP DE
  624.                 JR Z,ONERR1
  625.                 PUSH DE
  626.                 PUSH HL
  627.                 LD DE,0x0D6B
  628.                 AND A
  629.                 SBC HL,DE
  630.                 POP HL
  631.                 POP DE
  632.                 JR NZ,ONERNCLS
  633. ;               LD A,H
  634. ;               CP HIGH (0x0D6B)
  635. ;               JR NZ,ONERNCLS
  636. ;               LD A,L
  637. ;               CP LOW (0x0D6B)
  638. ;               JR NZ,ONERNCLS
  639.  
  640. ONERR1          POP HL
  641.                 POP HL
  642.                 POP HL
  643.                 POP HL
  644.                 POP HL
  645.         ENDIF
  646. RAI
  647.                 EI
  648.                 CALL GLUDIN
  649.                 LD HL,TRD_5CF4
  650.                 LD A,(HL)                       ; взяли номер сектора
  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
  657.                 LD A,(HL)                       ; взяли номер трека
  658.                 SRL A
  659.                 LD E,A
  660.                 ADC A,"0"
  661.                 SUB E
  662.                 LD (SIDE_DISK),A                ; сторона диска
  663.                 LD A,E
  664.                 CALL DIV10
  665.                 LD (NUM_TRK_TXT+1),A
  666.                 LD A,D
  667.                 LD (NUM_TRK_TXT),A
  668.                 LD IX,DSK_ERR                   ; окно выводим полностью
  669.         RST8 _WINW
  670.                 JP _RULILKA
  671.  
  672. RESET_VG        LD C,0xFF
  673.                 XOR A
  674.                 LD IX,0x3FF0                    ; OUT (C),A
  675.                 CALL DOSIX
  676.                 LD A,(DRV_SYM)
  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
  690.