Subversion Repositories pentevo

Rev

Rev 977 | Rev 1030 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. ; LAST UPDATE: 15.01.2022 savelij
  3.  
  4. PAGE
  5.                 TITLE "main.a80"
  6.  
  7.                 include ../../macros.a80
  8.                 include ../../define.a80
  9.                 include ../../global_vars.a80
  10.                 include ../../ports_ide.a80
  11.                 include ../../basic_tokens.a80
  12.                 include ../../bas_trd_vars.a80
  13.                 include ../../tmpkeys.a80
  14.                 include ../../version.a80
  15.                 include ../../nums_devices.a80
  16.  
  17. ;BIT 4,(IY+55)
  18. ;BIT 3,(IY+55)-0-ЗАПРЕТ АНИМАЦИИ КОШАКА, 1-РАЗРЕШЕНИЕ
  19. ;BIT 2,(IY+55)-0-ФАЙЛОВ МЕНЕЕ ВЫСОТЫ ОКНА, 1-БОЛЬШЕ
  20. ;BIT 0,(IY+55)
  21.  
  22. TO_DOS4BAS      EQU 0X3D13
  23. TO_DOS          EQU 0X3D2F
  24.  
  25.  INIT_VAR 0XC000
  26.  SETVAR ADR_CAT,        0XC00           ;EQU 0XC000                     ;АДРЕС БУФЕРА ДЛЯ ДИСКЕТЫ ИЛИ ОБРАЗА
  27.  SETVAR ADR_CAT_FAT,    0X800           ;EQU ADR_CAT+(0X200*6)          ;АДРЕС БУФЕРА НАЙДЕННЫХ ФАЙЛОВ НА FAT
  28.  SETVAR ADR_CAT_SCRH,   0X1000          ;EQU ADR_CAT_FAT+(2048*2)       ;АДРЕС БУФЕРА ДЛЯ ПОИСКА ФАЙЛОВ
  29. ;ADRTBLDIRL     EQU 0XF5FF              ;СТЕК СОХРАНЕНИЯ ДАННЫХ ПРИ ХОЖДЕНИИ ПО ДИРАМ
  30.  SETVAR BUFTSC,         0X180           ;EQU 0XF700                     ;180 ТАБЛИЦА АДРЕСОВ СТРОК ЭКРАНА               F700
  31.  SETVAR MOUSE_BUFF,     0X10            ;EQU BUFTSC+0X0180              ;10 БУФЕР СОХРАНЕНИЯ ПОД МЫШЬЮ
  32.  SETVAR COLBUF,         0X20            ;EQU MOUSE_BUFF+0X10            ;20 БУФЕР СОХРАНЕНИЯ ЦВЕТА
  33.  SETVAR BUF_FILEITEM,   0X20            ;EQU COLBUF+0X20                ;20 БУФЕР ОПИСАТЕЛЯ ФАЙЛА
  34.  SETVAR BUF_RDSEC,      0X200           ;EQU BUFTSC+0X200               ;200 БУФЕР СЕКТОРА ПРИ ПРОВЕРКЕ ФАЙЛОВ          F900
  35.  SETVAR BUF_RDPATH,     0X100           ;EQU BUF_RDSEC+0X200            ;100 БУФЕР ТЕКУЩЕГО ПУТИ                        FB00
  36.  SETVAR BUF_LEVDIR,     0X400           ;EQU BUF_RDPATH+0X100           ;400 БУФЕР УРОВНЕЙ ДИР ДЛЯ ФАЙЛОВОГО ОКНА       FC00
  37.  SETVAR BUF_LINESWIN,   0X200                                           ;200 БУФЕР ДЛЯ ОПИСАТЕЛЕЙ КУРСОРА ПОД МЫШЬЮ
  38.  
  39. H_FILE          EQU 16                          ;ШИРИНА ОКНА ДЛЯ ВЫВОДА ФАЙЛОВ C TR-DOS
  40. V_FILE          EQU 24                          ;ВЫСОТА ОКНА ДЛЯ ВЫВОДА ФАЙЛОВ C TR-DOS
  41. FV_FILE         EQU 26                          ;ШИРИНА ОКНА ДЛЯ ВЫВОДА ФАЙЛОВ C FAT
  42. FV_FILE6        EQU ((FV_FILE-3)*8)/6           ;ШИРИНА ОКНА ДЛЯ ВЫВОДА ФАЙЛОВ С FAT В ЗНАКОМЕСТАХ 6Х8
  43. FH_FILE         EQU 24                          ;ВЫСОТА ОКНА ДЛЯ ВЫВОДА ФАЙЛОВ С FAT
  44. WIDE            EQU 1                           ;два пробела с боков
  45.  
  46. CMOS_ON         EQU 0X80
  47. CMOS_OFF        EQU 0
  48.  
  49.                 ORG 0X6000
  50.                 DI
  51.                 CALL CLEAR_128K
  52.                 LD A,0X10
  53.                 CALL SET_7FFD                   ;ВКЛЮЧЕНИЕ БАСИКА48 И СТРАНИЦЫ 0
  54.                 CALL ADRTSC                     ;СОЗДАНИЕ ТАБЛИЦЫ АДРЕСОВ СТРОК ЭКРАНА
  55.         RST8 _COM_DEV,_DEVFIND
  56.                 JR C,START3
  57.         RST8 _MOUNTER,_FIND_MOUNTED
  58. START3
  59.         RST8 _COM_DEV,_CONTROL_SD
  60.                 EI
  61.                 HALT
  62.                 DI
  63.                 LD H,0
  64.                 CALL READCMOS                   ;ЧТЕНИЕ СЕКУНД ДЛЯ ОПРЕДЕЛЕНИЯ НАЛИЧИЯ КМОС
  65.                 INC L
  66.                 LD HL,ERS_FLAGS
  67.                 JR NZ,START2                    ;ЕСЛИ ПРОЧИТАЛОСЬ 0XFF,ТО
  68.                 RES B_CLOCK_ON,(HL)             ;КМОС НЕ НАЙДЕН
  69.                 JR START1
  70.  
  71. START2          SET 2,(HL)                      ;КМОС НАЙДЕН
  72. START4          CALL SET_MODES
  73. START1          CALL DETECTMOUSE                ;ОПРЕДЕЛЕНИЕ НАЛИЧИЯ МЫШИ
  74. ;               CALL UPDATE_CURRTIME
  75.                 CALL GLUDIN                     ;БУМКНУЛИ В AY
  76.                 CALL MOUSE                      ;ОПРОС МЫШИ
  77.                 LD HL,0X6FCC
  78.                 LD (ARXY),HL                    ;УСТАНОВКА ДЕФОЛТНОЙ ПОЗИЦИИ МЫШИ ПРИ СТАРТЕ
  79.                 CALL DISK_NONE
  80.                 CALL RESET_VG                   ;СБРОС ВГШКИ И УСТАНОВКА ПЕРЕХВАТЧИКА ОШИБОК DOS
  81.                 CALL SYSTEM
  82. ;               LD C,0
  83. ;               CALL TO_DOS4BAS
  84. RESTART         DI
  85.                 LD A,0X10
  86.                 CALL SET_7FFD                   ;ВКЛЮЧИЛИ БАСИК48 И СТРАНИЧКУ 0
  87.                 CALL TURBO_7MHZ
  88.                 CALL SYSTEM
  89.                 CALL RESET_VG                   ;СБРОС ВГШКИ И УСТАНОВКА ПЕРЕХВАТЧИКА ОШИБОК DOS
  90.                 RES 3,(IY+55)
  91.                 LD SP,0X6000
  92.                 LD HL,0X3E00
  93.                 PUSH HL
  94.                 LD HL,0X1303
  95.                 PUSH HL                         ;СФОРМИРОВАЛИ ДНО СТЕКА
  96.                 LD (ERR_SP),SP                  ;ЗАНЕСЛИ ТЕКУЩИЙ АДРЕС В ПЕРЕМЕНЫЕ БАСИКА
  97.                 LD (TEK_SP),SP
  98.                 CALL S_FACE                     ;ВЫВОД НА ЭКРАН ОСНОВНОГО ВИДА
  99.                 LD IX,MAINMENU
  100.         RST8 _WINW
  101.                 RES 5,(IY+1)                    ;НА КЛАВИАТУРЕ НИЧЕГО НЕ НАЖАТО
  102.  
  103.         IFDEF TESTEMUFDD
  104. ; test
  105.         PEC_ON M_SHADOW_BF
  106.         EVOPORT WIN_P2,RAM_DATARAMD
  107.         EVOPORT WIN_P2,ZXSTD_CPU2
  108.         PEC_OFF M_SHADOW_BF!0XFF
  109.  
  110.                 LD HL,VIRT_REAL_DRIVE << 8
  111.                 CALL WRITECMOS
  112.                 LD HL,ADR_TXT_BOOT
  113.                 JP RUNFILE1
  114.  
  115. ADR_TXT_BOOT    DB "boot    "
  116. ; test
  117.         ENDIF
  118.  
  119. ;ВХОД В ГЛАВНЫЙ ЦИКЛ ОПРОСА УПРАВЛЕНИЯ
  120. _RULILKA        EI     
  121.                 LD A,(ERS_FLAGS)
  122.                 AND M_MOUSE_ON                  ;ПРОВЕРКА НАЛИЧИЯ МЫШИ
  123.                 JR Z,_RULNMO
  124. ;FIX КОЛЕСО МЫШИ
  125. MKEYPR          EI
  126.                 HALT
  127.                 LD A,HIGH (MOUSE_KEYS)
  128.                 IN A,(LOW (MOUSE_KEYS))
  129.                 CPL
  130.                 AND 7
  131.                 JR NZ,MKEYPR
  132.                 CALL SAVE2X2                    ;ЕСЛИ МЕНЮ НАПЕЧАТАЛИ ПОВЕРХ СТРЕЛКИ
  133. _RULNMO         CALL SET_ADR_ATR                ;УСТАНОВКА НОВОГО АДРЕСА ДЛЯ ЦВЕТНОЙ ПОЛОСКИ
  134. ;               RES 5,(IY+1)                    ;НА КЛАВИАТУРЕ НИЧЕГО НЕ НАЖАТО
  135.                 JR MAINLOP
  136.  
  137. ;НАЖАТА СТРЕЛКА ВВЕРХ
  138. UP              CALL CURSOR_UP                  ;СМЕНИЛИ ТЕКУЩИЙ ПУНКТ НА -1
  139.                 JR SET_POS1                    
  140.  
  141. ;НАЖАТА СТРЕЛКА ВПРАВО
  142. RIGHT           BIT 1,(IX+_FLAGS)               ;ПРОВЕРКА ПРОСТО МЕНЮ ИЛИ ФАЙЛОВОЕ
  143.                 PUSH AF                         ;СОХРАНИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ
  144.                 CALL NZ,PAGEDN                  ;ЕСЛИ ФАЙЛОВОЕ, ТО ЛИСТАНИЕ СТРАНИЧНОЕ
  145.                 POP AF                          ;ВОССТАНОВИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ
  146.                 JR NZ,SET_POS1                  ;ЕСЛИ ФАЙЛОВОЕ ПРОДОЛЖАЕМ
  147.                 LD A,(IX+_NUM_KOL_L)
  148.                 AND A
  149.                 JR Z,SET_POS
  150.                 DEC A                           ;ИНАЧЕ ПЕРЕХОД КУРСОРА НА ПОСЛЕДНИЙ ПУНКТ
  151.                 JR SET_POS                      ;ИЗМЕНЯЕМ ПОЛОЖЕНИЕ КУРСОРА И ПРОДОЛЖАЕМ
  152.  
  153. ;НАЖАТА СТРЕЛКА ВНИЗ
  154. DOWN            CALL CURSOR_DOWN                ;СМЕНИЛИ ТЕКУЩИЙ ПУНКТ НА +1
  155.                 JR SET_POS1
  156.  
  157. ;НАЖАТА СТРЕЛКА ВЛЕВО
  158. LEFT            BIT 1,(IX+_FLAGS)               ;ПРОВЕРКА ПРОСТО МЕНЮ ИЛИ ФАЙЛОВОЕ
  159.                 PUSH AF                         ;СОХРАНИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ
  160.                 CALL NZ,PAGEUP                  ;ЕСЛИ ФАЙЛОВОЕ, ТО ЛИСТАНИЕ СТРАНИЧНОЕ
  161.                 POP AF                          ;ВОССТАНОВИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ
  162.                 JR NZ,SET_POS1                  ;ЕСЛИ ФАЙЛОВОЕ ПРОДОЛЖАЕМ
  163.                 XOR A                           ;ИНАЧЕ ПЕРЕХОД КУРСОРА НА ПЕРВЫЙ ПУНКТ
  164. SET_POS         LD (IX+_NUM_PKT),A              ;ИЗМЕНИЛИ ПОЗИЦИЮ КУРСОРА
  165.                 LD (IX+_TEK_PKT_L),A
  166.                 LD (IX+_TEK_PKT_H),0            ;ИЗМЕНИЛИ НОМЕР ВЫБРАННОГО ПУНКТА
  167. SET_POS1        CALL COLOR_CURSOR               ;ПЕРЕРИСОВКА ЦВЕТНОЙ ПОЛОСКИ МЕНЮ
  168. SET_POS2        CALL GLUDIN                     ;БУМКНУЛИ В AY
  169. MAINLOP
  170. ;               RES 5,(IY+1)                    ;СБРОС НАЖАТЫХ КНОПОК
  171.         RST8 _COM_DEV,_CONTROL_SD               ;ПРОВЕРКА НАЛИЧИЯ SD КАРТ И ОБНОВЛЕНИЕ ИНДИКАТОРОВ
  172.                 LD A,(ERS_FLAGS)
  173.                 AND M_MOUSE_ON                  ;ПРОВЕРКА НАЛИЧИЯ МЫШИ
  174.                 JP Z,MAINNMO
  175.                 LD HL,(ARXY)                    ;СТАРАЯ КООРДИНАТА МЫШИ
  176.                 PUSH HL
  177.                 CALL MOUSE                      ;ОПРОС ПОРТОВ МЫШИ
  178.                 POP BC
  179.                 AND A
  180.                 SBC HL,BC
  181.                 JR Z,NO_SELECT                  ;НЕ БЫЛО ДВИЖЕНИЯ МЫШИ
  182.                 CALL RESTORE_KOSHAK             ;БЫЛО ДВИЖЕНИЕ МЫШИ, СБРОС СЧЕТЧИКОВ КОШАКА
  183.                 CALL MOUOPT                     ;ПРОВЕРКА НАВЕДЕНИЯ МЫШИ НА ЗАДАННОЕ ОКНО
  184. NO_SELECT       LD BC,MOUSE_KEYS
  185.                 IN A,(C)                        ;ОПРОС НАЖАТИЯ КНОПОК МЫШИ
  186.                 AND 7
  187.                 CP 6
  188.                 JR Z,PRESS_MOUSE                ;ЕСЛИ НАЖАТА ЛЕВАЯ КНОПКА МЫШИ
  189.                 CP 5
  190.                 JP Z,RESTART                    ;ЕСЛИ НАЖАТА ПРАВАЯ КНОПКА МЫШИ
  191.                 CALL PRINTTIME                  ;ОБНОВИЛИ ВРЕМЯ ЕСЛИ ИЗМЕНИЛОСЬ
  192.                 EI
  193.                 HALT
  194.                 CALL REST2X2                    ;ВОССТАНОВИЛИ КУСОК ЭКРАНАА ПОД МЫШЬЮ
  195.                 CALL DRAW_MOUSE                 ;НАРИСОВАЛИ КУРСОР МЫШИ
  196.                 JR MAINQMO                      ;ПРОДОЛЖЕНИЕ ОПРОСА
  197.  
  198. PRESS_MOUSE     CALL OPMSPL
  199.                 AND A
  200.                 JR Z,CP_MOUSE4
  201.                 LD (LAST_K),A
  202.                 CALL TIMELP
  203.                 JR SELECT_KEY
  204.  
  205. CP_MOUSE4       CALL MOUOPT                     ;ПРОВЕРКА ПОПАДАНИЯ МЫШИ В ПРЕДЕЛЫ ТЕКУЩЕГО ОКНА
  206.                 JR C,MAINNMO                    ;НЕ ПОПАЛИ И ЕДЕМ ДАЛЕЕ
  207.                 LD L,(IX+_ADR_HOTKEY_L)
  208.                 LD H,(IX+_ADR_HOTKEY_H)
  209.                 LD A,H
  210.                 OR L
  211.                 JR Z,ENTER                      ;СПИСКА ХОТКЕЕВ НЕТ, ПЕРЕХОДИМ ПО НОМЕРУ ПУНКТА
  212.                 LD E,(IX+_NUM_PKT)              ;ВЗЯЛИ НОМЕР ПУНКТА КУДА ПОПАЛИ МЫШЬЮ
  213.                 LD D,0
  214.                 ADD HL,DE                       ;АДРЕС ХОТКЕЯ ВЫБРАННОГО ПУНКТА
  215.                 LD DE,LAST_K
  216.                 LDI                             ;ЭМИТАЦИЯ НАЖАТИЯ ЗАДАННОЙ КНОПКИ
  217.                 JR ENTER
  218.                
  219. MAINNMO         CALL PRINTTIME                  ;ОБНОВЛЕНИЕ ВРЕМЕНИ, ЕСЛИ В ОНО ОБНОВИЛОСЬ
  220.                 EI
  221.                 HALT
  222. MAINQMO         BIT 5,(IY+1)                    ;ПРОВЕРКА НАЖАТИЯ КНОПОК КЛАВИАТУРЫ
  223.                 CALL Z,CP_TIME_KOSHAK           ;ЕСЛИ НЕ НАЖАТО НИЧЕГО, ПРОВЕРЯЕМ СЧЕТЧИК КОШАКА
  224.                 JP Z,MAINLOP                    ;ПРОДОЛЖАЕМ ОПРОС УПРАВЛЕНИЯ
  225.                 CALL 0X1F54                     ;ПРОВЕРКА НА BREAK
  226.                 JP NC,RESTART                   ;ЕСЛИ BREAK НАЖАТ ПЕРЕЗАПУСКАЕМСЯ
  227. SELECT_KEY      CALL RESTORE_KOSHAK             ;НАЖАТО НЕЧТО НА КЛАВЕ, СБРОС СЧЕТЧИКА КОШАКА
  228.                 RES 5,(IY+1)                    ;НА КЛАВИАТУРЕ НИЧЕГО НЕ НАЖАТО
  229.                 LD HL,LAST_K
  230.                 LD A,(HL)                       ;ВЗЯЛИ НАЖАТУЮ КЛАВИШУ
  231.                 LD B,0
  232.                 LD HL,MAIN_KEYS
  233.                 LD C,(HL)                       ;КОЛИЧЕСТВО ДОСТУПНЫХ КНОПОК
  234.                 LD D,C
  235.                 INC HL
  236.                 CPIR
  237.                 JR NZ,NOMAINKEYS                ;НИЧЕГО НЕ НАШЛИ, ДАЛЕЕ СМОТРИМ КНОПКИ ТЕКУЩЕГО ОКНА
  238.                                                 ;НАЖАТО ЧТО-ТО ИЗ ГЛАВНЫХ КНОПОК, ДОСТУПНЫХ ВСЕГДА
  239.                 LD HL,ADREXEKEYS
  240.                 LD A,D                          ;КОЛИЧЕСТВО КНОПОК В ТАБЛИЦЕ -1
  241.                 SUB C                           ;ПОЛУЧИЛИ ВЫБРАННЫЙ НОМЕР
  242.                 DEC A
  243.                 JR JUMP2HL
  244.  
  245. ;ПРОВЕРКА ХОТКЕЕВ В ТЕКУЩЕМ ОКНЕ
  246. NOMAINKEYS      LD L,(IX+_ADR_HOTKEY_L)
  247.                 LD H,(IX+_ADR_HOTKEY_H)
  248.                 LD C,A
  249.                 LD A,H
  250.                 OR L
  251.                 JP Z,MAINLOP                    ;ЕСЛИ СПИСКА НЕТ, ПРОДОЛЖАЕМ ОПРОС
  252.                 LD A,C
  253.                 LD C,(IX+_V_SIZE)
  254.                 LD E,(HL)
  255.                 INC HL
  256.                 DEC C                           ;КОЛИЧЕСТВО КНОПОК
  257.                 DEC C                           ;ВЫСОТА ОКНА -2
  258.                 LD D,C
  259.                 LD B,0
  260.                 CPIR                            ;СКАНИРОВАНИЕ СПИСКА ЗАДАННЫХ КЛАВИШ
  261.                 JR NZ,OSTAT_KEYS
  262.                 LD A,D                          ;ВЫСОТА ОКНА
  263.                 SUB C
  264.                 DEC A                           ;ПОЛУЧИЛИ НОМЕР НАЖАТОЙ КНОПКИ И -1
  265.                 LD (IX+_NUM_PKT),A              ;НОМЕР ПУНКТА В ОКНЕ
  266.                 LD (IX+_TEK_PKT_L),A            ;НОМЕР НАЖАТОЙ КЛАВИШИ ПО УКАЗАННОМУ СПИСКУ
  267. ENTER           LD A,(ERS_FLAGS)
  268.                 AND M_MOUSE_ON
  269.                 CALL NZ,TIMELP                  ;ОБНОВЛЕНИЕ ВРЕМЕНИ ЕСЛИ ОНО ИЗМЕНИЛОСЬ
  270.                 CALL REST2X2                    ;СТЕРЛИ КУРСОР МЫШИ
  271.                 CALL GLUDIN                     ;БУМКНУЛИ В AY
  272.                 LD A,(IX+_NUM_PKT)              ;НОМЕР ИЗ СПИСКА КОТОРЫЙ ВЫЗВАТЬ
  273. JUMP2HL1        LD L,(IX+_ADR_PRG_L)
  274.                 LD H,(IX+_ADR_PRG_H)            ;ВЗЯЛИ СПИСОК АДРЕСОВ 1 ИЗ КОТОРЫХ БУДЕМ ВЫЗЫВАТЬ
  275. JUMP2HL         ADD A,A
  276.                 ADD A,L
  277.                 LD L,A
  278.                 ADC A,H
  279.                 SUB L
  280.                 LD H,A
  281.                 LD A,(HL)
  282.                 INC HL
  283.                 LD H,(HL)
  284.                 LD L,A
  285.                 JP (HL)
  286.  
  287. OSTAT_KEYS      EX AF,AF'
  288.                 LD A,E
  289.                 SUB D
  290.                 JP Z,MAINLOP
  291.                 LD C,A
  292.                 EX AF,AF'
  293.                 CPIR
  294.                 JP NZ,MAINLOP
  295.                 LD A,E
  296.                 SUB C
  297.                 DEC A
  298.                 JR JUMP2HL1
  299.  
  300. ;ИЗМЕНЕНИЕ РЕЖИМА ПАМЯТИ
  301. CHNGMODE        LD HL,MEMMODE
  302.                 DEC (HL)                        ;СМЕНИЛИ РЕЖИМ ПАМЯТИ
  303.                 JP P,CHNGMODEY
  304.                 LD (HL),2                       ;ЕСЛИ ПЕРЕШЛИ ЧЕРЕЗ 0, ТО ВЫСТАВИЛИ РЕЖИМ 48
  305. CHNGMODEY       LD A,(ERS_FLAGS)
  306.                 AND M_CLOCK_ON                  ;ПРОВЕРКА НАЛИЧИЯ КМОСА
  307.                 RET Z
  308.                 LD A,(ERS_FLAGS)
  309.                 AND M_EMU_TAPE
  310.                 RLCA
  311.                 RLCA
  312.                 LD L,A
  313.                 LD A,(MEMMODE)
  314.                 OR L
  315.                 LD L,A
  316. CHNGMODEY1      LD A,(SYSREG1)
  317.                 AND 0X10
  318.                 RLCA
  319.                 RLCA
  320.                 RLCA
  321.                 OR L
  322.                 LD C,A
  323.                 LD H,CMOS_BYTE_01
  324.                 CALL READCMOS
  325.                 AND %01111100
  326.                 OR C
  327. CHANGE_MODES    LD L,A
  328.                 CALL WRITECMOS                  ;СОХРАНИЛИ В КМОС ИЗМЕНЕНЫЙ РЕЖИМ
  329.                 CALL REST2X2
  330.                 CALL SET_MODES
  331.                 CALL PRT_MODES
  332.                 LD A,(ERS_FLAGS)
  333.                 AND M_MOUSE_ON
  334.                 JP Z,MAINLOP
  335.                 CALL DRAW_MOUSE
  336.                 CALL TIMELP
  337.                 JP MAINLOP
  338.  
  339. ;ИЗМЕНЕНИЕ РЕЖИМА ТУРБО 0=3,5MHZ, 1=7MHZ, 2-14MHZ
  340. CHNGTURBO       LD HL,TURBO_NUM
  341.                 INC (HL)                        ;СМЕНИЛИ TURBO РЕЖИМ
  342.                 LD A,(HL)
  343.                 CP 3
  344.                 JR C,CHNGTURBO1
  345.                 LD (HL),0                       ;ЕСЛИ ПЕРЕШЛИ ЧЕРЕЗ 0, ТО ВЫСТАВИЛИ РЕЖИМ 14MHZ
  346. CHNGTURBO1      LD A,(HL)
  347.                 AND A
  348.                 LD DE,0X1000
  349.                 JR Z,CHNGTURBO2
  350.                 DEC A
  351.                 LD DE,0
  352.                 JR Z,CHNGTURBO2
  353.                 LD DE,0X10*0X100+M_TURBO14
  354. CHNGTURBO2      LD A,D
  355.                 LD HL,SYSREG1
  356.                 LD A,(HL)
  357.                 AND %11101111                   ;ИНВЕРСИЯ БИТА ТУРБОРЕЖИМА
  358.                 OR D
  359.                 LD (HL),A
  360.                 LD H,CMOS_BYTE_00
  361.                 CALL READCMOS
  362.                 AND M_TURBO14!0XFF
  363.                 OR E
  364.                 LD L,A
  365.                 LD H,CMOS_BYTE_00
  366.                 CALL WRITECMOS
  367.                 JP CHNGMODEY
  368.  
  369. CHNGTAPMODE     LD H,CMOS_BYTE_00
  370.                 CALL READCMOS
  371.                 XOR M_EMUL_TAPE
  372.                 JR CHANGE_MODES
  373.  
  374. CHNGGLUKMOD     LD H,CMOS_BYTE_00
  375.                 CALL READCMOS
  376.                 AND MKOL_MODES!0XFF
  377.                 LD C,A
  378.                 LD A,L
  379.                 AND MKOL_MODES
  380.                 INC A
  381.                 CP KOL_MODES
  382.                 JR C,CHNGGLUKMOD1
  383.                 XOR A
  384. CHNGGLUKMOD1    OR C
  385.                 LD L,A
  386.                 JR CHANGE_MODES
  387.  
  388. EN_AUTOMNT      LD H,CMOS_BYTE_01
  389.                 CALL READCMOS
  390.                 XOR M_AUTOMOUNT
  391.                 JP CHANGE_MODES
  392.  
  393. EN_LOADFONT     LD H,CMOS_BYTE_00
  394.                 CALL READCMOS
  395.                 XOR M_RELOAD_FONT
  396.                 JP CHANGE_MODES
  397.  
  398. SET_TYPEFONT    LD H,CMOS_BYTE_00
  399.                 CALL READCMOS
  400.                 XOR M_TYPE_FONT
  401.                 PUSH AF
  402.                 PUSH HL
  403.                 AND M_TYPE_FONT
  404.                 JR Z,SETTYPEFONT
  405.                 LD A,1
  406. SETTYPEFONT
  407.         RST8 _SETUP_FONT
  408.                 POP HL
  409.                 POP AF
  410.                 JP CHANGE_MODES
  411.  
  412. ;ВКЛЮЧЕНИЕ/ВЫКЛЮЧЕНИE ОТОБРАЖЕНИЯ ЧАСОВ
  413. CMOS_ONOFF      LD A,(ERS_FLAGS)
  414.                 AND M_CLOCK_ON                  ;ПРОВЕРКА НАЛИЧИЯ КМОСА
  415.                 JP Z,MAINLOP
  416.                 LD H,CMOS_BYTE_01
  417.                 CALL READCMOS
  418.                 XOR M_CLOCK_VIEW
  419.                 LD L,A
  420.                 PUSH AF
  421.                 LD H,CMOS_BYTE_01
  422.                 CALL WRITECMOS
  423.                 POP AF
  424.                 AND M_CLOCK_VIEW
  425.                 JP Z,MAINLOP
  426.                 LD HL,TIME_OFF
  427.         RST8 _PRINT_MESSAGE
  428.                 JP MAINLOP
  429.  
  430. ;ВКЛЮЧЕНИЕ/ВЫКЛЮЧЕНИЕ КУРСОРА МЫШИ
  431. MOUSE_ONOFF     LD HL,ERS_FLAGS
  432.                 LD A,(HL)
  433.                 XOR M_MOUSE_ON                  ;ИНВЕРСИЯ ОТОБРАЖЕНИЯ МЫШИ
  434.                 LD (HL),A
  435.                 AND M_MOUSE_ON
  436.                 CALL NZ,DETECTMOUSE             ;ЕСЛИ ВКЛЮЧИЛИ, ПРОВЕРЯЕМ НАЛИЧИЕ
  437.                 CALL NC,REST2X2                 ;ЕСЛИ МЫШЬ НЕ НАЙДЕНА, ТО ВЫКЛЮЧАЕМ ОТОБРАЖЕНИЕ
  438.                 JP MAINLOP
  439.  
  440. ;ОЖИДАНИЕ НАЖАТИЯ ЧЕГО-НИБУДЬ ПОСЛЕ ОШИБКИ
  441. EXIT4ERROR      RES 5,(IY+1)                    ;НА КЛАВИАТУРЕ НИЧЕГО НЕ НАЖАТО
  442.                 LD BC,MOUSE_KEYS
  443.                 IN D,(C)
  444. E4E1            CALL PRINTTIME
  445.                 EI
  446.                 HALT
  447.                 BIT 5,(IY+1)
  448.                 JR NZ,E4E3
  449.                 LD A,(ERS_FLAGS)
  450.                 AND M_MOUSE_ON
  451.                 JR NZ,E4E1
  452.                 LD A,HIGH (MOUSE_KEYS)
  453.                 IN A,(LOW (MOUSE_KEYS))
  454.                 CP D
  455.                 JR Z,E4E1
  456. E4E2            EX AF,AF'
  457.                 CALL TIMELP
  458.                 EX AF,AF'
  459.                 RRA
  460.                 RET
  461.  
  462. E4E3            XOR A
  463.                 IN A,(0XFE)
  464.                 CPL
  465.                 AND 0X1F
  466.                 JR NZ,E4E3
  467.                 LD (LAST_K),A
  468.                 RES 5,(IY+1)                    ;НА КЛАВИАТУРЕ НИЧЕГО НЕ НАЖАТО
  469.                 RET
  470.  
  471. ;ПЕЧАТЬ ТЕКУЩЕГО ВЫБРАННОГО ДИСКОВОДА
  472. PRT_DRV_SYM     LD A,(TRD_5CF8)
  473.                 ADD A,"A"
  474.                 LD (TXT_DRIVE),A
  475.                 LD HL,TRDDRV_MODE
  476.         RST8 _PRINT_MESSAGE
  477.                 RET
  478.  
  479. ;РАСПЕЧАТКА ТЕКУЩЕГО РЕЖИМА
  480. PRT_MODES       LD HL,SPEED_MODE
  481.         RST8 _PRINT_MESSAGE
  482.                 LD HL,MEM_MODE
  483.         RST8 _PRINT_MESSAGE
  484.                 LD HL,EMUTAPLOAD
  485.         RST8 _PRINT_MESSAGE
  486.                 LD HL,SET_RESET
  487.         RST8 _PRINT_MESSAGE
  488.                 LD HL,ROMLOADFONT
  489.         RST8 _PRINT_MESSAGE
  490.                 LD HL,TYPESFONT
  491.         RST8 _PRINT_MESSAGE
  492.                 LD HL,TXT_AUTOMOUNT
  493.         RST8 _PRINT_MESSAGE
  494.                 RET
  495.  
  496. ;РАСПЕЧАТКА ТЕКУЩЕГО ВИРТУАЛЬНОГО ДИСКОВОДА
  497. PRT_VIRTDRV
  498.         RST8 _MOUNTER,_GET_VIRT_BITS
  499.                 LD D,A
  500.                 LD H,VIRT_REAL_DRIVE
  501.                 CALL READCMOS
  502.                 AND 3
  503.                 LD B,A
  504.                 INC B
  505.                 ADD A,'A'
  506.                 LD C,A
  507.                 LD A,%10000000
  508. .L1             RLCA
  509.                 DJNZ .L1
  510.                 AND D
  511.                 LD HL,VIRT_DRIVE
  512.                 JR NZ,PRTVIRTDRV2
  513.                 LD (HL)," "
  514.                 INC HL
  515.                 LD (HL),C
  516.                 INC HL
  517.                 LD (HL)," "
  518.                 JR PRTVIRTDRV1
  519.  
  520. PRTVIRTDRV2     LD (HL),"o"
  521.                 INC HL
  522.                 LD (HL),"f"
  523.                 INC HL
  524.                 LD (HL),"f"
  525. PRTVIRTDRV1     LD HL,VIRTUAL_DRV
  526.         RST8 _PRINT_MESSAGE
  527.                 LD HL,ADR_CAT
  528.         RST8  _MOUNTER,_GET_MOUNTED
  529.                 LD HL,ADR_CAT
  530.                 LD DE,MNT_DRV_A
  531.                 CALL COPY_MNTNAME
  532.                 LD L,0X40
  533.                 LD DE,MNT_DRV_B
  534.                 CALL COPY_MNTNAME
  535.                 LD L,0X80
  536.                 LD DE,MNT_DRV_C
  537.                 CALL COPY_MNTNAME
  538.                 LD L,0XC0
  539.                 LD DE,MNT_DRV_D
  540.                 CALL COPY_MNTNAME
  541.                 CALL GET_RAMD_NAME
  542.                 LD HL,MOUNTED_DRV
  543.         RST8 _PRINT_MESSAGE
  544.                 RET
  545.  
  546. COPY_MNTNAME    PUSH HL
  547.                 LD A,(HL)
  548.                 AND A
  549.                 JR NZ,COPY_MNTNAME1
  550.                 LD HL,TXT_NONE
  551.                 LD BC,0X0C
  552.                 JR COPY_MNTNAME3
  553.  
  554. COPY_MNTNAME1   LD BC,8
  555.                 LDIR
  556.                 LD A,"."
  557.                 LD (DE),A
  558.                 INC DE
  559.                 LD C,3
  560. COPY_MNTNAME3   LDIR
  561.                 POP HL
  562.                 RET
  563.  
  564. ;ПОЛУЧЕНИЕ ИМЕНИ ФАЙЛА ЗАГРУЖЕННОГО В РАМДИСК
  565. GET_RAMD_NAME
  566.         PEC_ON M_SHADOW_BF
  567.                 LD BC,WIN_P2
  568.                 LD A,RAM_RAMDISK
  569.                 OUT (C),A
  570.                 LD DE,CPU2+0X3DFF
  571.                 LD A,(DE)
  572.                 AND A
  573.                 JR Z,GRN1
  574.                 LD HL,GRN1
  575.                 PUSH HL
  576.                 LD HL,IN_RAMDISK
  577.                 LD B,8
  578.                 CALL GRN2
  579.                 LD B,3
  580.                 LD (HL),"."
  581.                 INC HL
  582. GRN2            LD A,(DE)
  583.                 LD (HL),A
  584.                 DEC D
  585.                 INC HL
  586.                 DJNZ GRN2
  587.                 RET
  588.  
  589. GRN1            LD BC,WIN_P2
  590.                 LD A,ZXSTD_CPU2;0XFD
  591.                 OUT (C),A
  592.         PEC_OFF M_SHADOW_BF
  593.                 RET
  594.  
  595. ;ВЫВОД ОСНОВНОГО МЕНЮ И НАДПИСЕЙ
  596. S_FACE          LD A,7
  597.                 CALL CLS
  598.                 LD HL,TXTFULLSCR
  599.         RST8 _PRINT_MESSAGE
  600.         RST8 _VERSION
  601.                 BIT B_INCORRECTFPGA,A
  602.                 JR Z,.L1
  603.                 RES B_INCORRECTFPGA,A
  604.                 AND A
  605.                 JR Z,.L1
  606.                 LD HL,INCORRECTFPGA
  607.         RST8 _PRINT_MESSAGE
  608. .L1             CALL PRT_DRV_SYM                ;ПЕЧАТЬ ТЕКУЩЕГО ДИСКОВОДА
  609.                 CALL PRT_MODES                  ;ПЕЧАТЬ ТЕКУЩЕГО РЕЖИМА
  610.                 CALL PRT_VIRTDRV                ;ПЕЧАТЬ ТЕКУЩЕГО ВИРТУАЛЬНОГО ДИСКОВОДА
  611.                 XOR A
  612.                 JP DRAW_KOSHAK                  ;ВЫВОД 0 ФАЗЫ КОШАКА
  613.  
  614. SET_EFF7_A_     LD A,(SYSREG1)
  615. SET_EFF7        LD BC,PENT_CONF
  616.                 OUT (C),A
  617.                 RET
  618.  
  619. SET_7FFD_0      LD A,0X10
  620. SET_7FFD        PUSH BC
  621.                 LD BC,CONF_128
  622.                 OUT (C),A
  623.                 POP BC
  624.                 RET
  625.  
  626. MEMSET          CALL CLEAR_128K
  627.                 LD A,(TURBO_NUM)                ;УСТАНОВКА TURBO РЕЖИМА
  628.                 AND A
  629.                 LD DE,0X10A3                    ;3,5MHZ PORTS EFF7 BIT4=1 XX77 BIT3=0
  630.                 JR Z,MEMSET01
  631.                 DEC A
  632.                 LD DE,0XA3                      ;7MHZ PORTS EFF7 BIT4=0 XX77 BIT3=0
  633.                 JR Z,MEMSET01
  634.                 LD DE,0X10AB                    ;14MHZ PORTS EFF7 BIT4=1 XX77 BIT3=1
  635. MEMSET01        LD BC,0XFF77
  636.         PEC_ON M_SHADOW_BF
  637.                 OUT (C),E
  638.         PEC_OFF M_SHADOW_BF
  639.                 LD A,D
  640.                 CALL SET_EFF7
  641.                 LD A,(MEMMODE)
  642.                 AND A
  643.                 RET Z                           ;РЕЖИМ ПОЛНОЙ ПАМЯТИ
  644. MEMSET1         DEC A
  645.                 JR Z,MEMORY48
  646. ;ВКЛЮЧЕНИЕ РЕЖИМА BASIC128
  647. ON_BIT128       LD A,(SYSREG1)
  648.                 AND 0X10
  649.                 ADD A,4
  650.                 CALL SET_EFF7
  651.                 JR SET_7FFD_0
  652.  
  653. ;ВКЛЮЧЕНИЕ РЕЖИМА BASI48
  654. MEMORY48        CALL ON_BIT128
  655.                 LD A,0X30
  656.                 JR SET_7FFD
  657.  
  658. ;ЧТЕНИЕ CMOS И ИЗМЕНЕНИЕ СООБЩЕНИЙ ДЛЯ ВЫВОДА НА ЭКРАН ОБ УСТАНОВЛЕННЫХ РЕЖИМАХ
  659. SET_MODES       LD H,0X0B                       ;ЧИТАТЬ РЕЖИМ СЧЕТА ЧАСОВ
  660.                 CALL READCMOS
  661.                 RES 2,L                         ;ПРИНУДИТЕЛЬНО ВКЛЮЧАЕМ БИНАРНЫЙ СЧЕТ
  662.                 CALL WRITECMOS                  ;СОХРАНЯЕМ ИЗМЕНЕНИЯ
  663.                 LD H,CMOS_BYTE_01               ;ЧИТАЕМ УСТАНОВКИ ТУРБО И ПАМЯТИ
  664.                 CALL READCMOS
  665.                 AND M_TURBO357
  666.                 RRCA
  667.                 RRCA
  668.                 RRCA
  669.                 LD (SYSREG1),A                  ;СОДЕРЖИМОЕ ДЛЯ ЗАПИСИ В ПОРТ EFF7
  670.                 LD B,A
  671.                 LD A,L
  672.                 AND _128K | _48K | _1MB
  673.                 LD (MEMMODE),A                  ;ВЫБРАННЫЙ РЕЖИМ ПАМЯТИ
  674.                 LD H,CMOS_BYTE_00
  675.                 CALL READCMOS                   ;ЧИТАЕМ ОСНОВНЫЕ УСТАНОВКИ
  676.                 LD C,A
  677.                 AND M_TURBO14
  678.                 LD HL,TURBO_NUM                 ;НОМЕР ТУРБО РЕЖИМА
  679.                 LD (HL),2                       ;РЕЖИМ 14МГЦ
  680.                 JR NZ,SETMODES04
  681.                 LD A,B
  682.                 DEC (HL)                        ;РЕЖИМ 7МГЦ
  683.                 AND 0X10
  684.                 JR Z,SETMODES04
  685.                 DEC (HL)                        ;РЕЖИМ 3,5МГЦ
  686. SETMODES04      LD A,(HL)                       ;ВЗЯЛИ ТЕКУЩИЙ ТУРБО РЕЖИМ
  687.                 ADD A,A
  688.                 ADD A,A
  689.                 LD E,A
  690.                 LD D,0
  691.                 LD HL,TXTTURBOMODE              ;ТЕКСТ ТУРБО РЕЖИМОВ
  692.                 ADD HL,DE                       ;ПЕРЕШЛИ НА НУЖНЫЙ ТЕКСТ
  693.                 LD DE,TXT_SPEED
  694.                 LD A,C
  695.                 LDI
  696.                 LDI
  697.                 LDI
  698.                 LDI                             ;ПЕРЕНЕСЛИ ДЛЯ ВЫВОДА ЭКРАН
  699.                 LD C,A
  700.                 AND M_EMUL_TAPE
  701.                 LD HL,EMTAPLOAD
  702.                 CALL SET_ONOFF                  ;ПЕРЕНОС СИМВОЛОВ ДЛЯ ВЫВОДА НА ЭКРАН, ON ИЛИ OFF
  703.                 LD A,C
  704.                 AND M_RELOAD_FONT
  705.                 XOR M_RELOAD_FONT
  706.                 LD HL,EROMLOADFONT
  707.                 CALL SET_ONOFF                  ;ПЕРЕНОС СИМВОЛОВ ДЛЯ ВЫВОДА НА ЭКРАН, ON ИЛИ OFF
  708.                 LD A,C
  709.                 AND M_TYPE_FONT
  710.                 PUSH BC
  711.                 LD HL,TXTMODTYPE
  712.                 LD BC,5
  713.                 JR Z,SET_FONT2
  714.                 ADD HL,BC
  715. SET_FONT2       LD DE,ETYPESFONT
  716.                 LDIR
  717.                 POP BC
  718.                 LD A,C
  719.                 AND MKOL_MODES
  720.                 CP KOL_MODES
  721.                 JR C,SETMODES03
  722.                 XOR A
  723. SETMODES03      LD L,A
  724.                 ADD A,A
  725.                 ADD A,L
  726.                 ADD A,A
  727.                 ADD A,A
  728.                 LD H,0
  729.                 LD L,A
  730.                 LD DE,TXT_RESETTO
  731.                 ADD HL,DE
  732.                 LD DE,TXT_RESET
  733.                 LD A,C
  734.                 LD BC,0X0C
  735.                 LDIR
  736.                 LD C,A
  737.                 AND M_PRINTER_AY
  738.                 LD HL,ETXT_AYPRINTER
  739.                 CALL SET_ONOFF                  ;ПЕРЕНОС СИМВОЛОВ ДЛЯ ВЫВОДА НА ЭКРАН, ON ИЛИ OFF
  740. SETMODES02      LD A,(MEMMODE)
  741.                 AND A
  742.                 LD HL,T_ALL
  743.                 JR Z,SETMODES01                 ;ALL MEMORY
  744.                 LD HL,T_48
  745.                 DEC A
  746.                 JR Z,SETMODES01                 ;48K
  747.                 LD HL,T_128                     ;128K
  748. SETMODES01      LD DE,TXT_MEM                   ;РЕЖИМ ПАМЯТИ
  749.                 LD A,C
  750.                 LD BC,3
  751.                 LDIR
  752.                 LD H,CMOS_BYTE_01
  753.                 CALL READCMOS
  754.                 PUSH AF
  755.                 AND M_AUTOMOUNT
  756.                 LD HL,ETXT_AUTOMOUNT
  757.                 CALL SET_ONOFF
  758.                 POP AF
  759. ;ДЛЯ РЕЗИДЕНТА HONEY COMANDER
  760.         IFDEF REZIDENT
  761.                 AND M_REZIDENT
  762.                 LD HL,TXT_REZIDENT
  763.                 CALL SET_ONOFF
  764.                 LD H,CMOS_BYTE_03
  765.                 CALL READCMOS
  766.                 AND M_KILL_REZIDENT
  767.                 LD HL,TXT_KILLREZID
  768.                 CALL SET_ONOFF
  769.         ENDIF;REZIDENT
  770.                 LD A,(ERS_FLAGS)
  771.                 AND M_CLOCK_ON
  772.                 RET Z
  773.                 LD DE,VERS_CONF
  774.                 LD L,0
  775.                 CALL GET_VERS_EVO               ;ВЕРСИЯ БАЗОВОЙ КОНФИГУРАЦИИ
  776.                 LD DE,VERS_BOOT
  777.                 LD L,1
  778.                 JP GET_VERS_EVO                 ;ВЕРСИЯ AVRBOOT
  779.  
  780. ;ПЕРЕНОС СИМВОЛОВ ДЛЯ ВЫВОДА НА ЭКРАН, ON ИЛИ OFF
  781. SET_ONOFF       LD DE,"n "
  782.                 JR NZ,SET_ONOFF1
  783.                 LD DE,"ff"
  784. SET_ONOFF1      LD (HL),D
  785.                 INC HL
  786.                 LD (HL),E
  787.                 RET
  788.  
  789. TURBO_7MHZ      LD E,0XA3
  790.                 LD BC,0XFF77
  791.         PEC_ON M_SHADOW_BF
  792.                 OUT (C),E
  793.         PEC_OFF M_SHADOW_BF
  794.                 XOR A
  795.                 JP SET_EFF7
  796.  
  797.                 include menu_data.a80
  798.                 include menu_execute.a80
  799.                 include mouse.a80
  800.                 include window.a80
  801.                 include call_cmos.a80
  802.                 include call_trdos.a80
  803.                 include koshak.a80
  804.                 include pc_keys_test.a80
  805.                 include flasher.a80
  806.                 include fat_boot.a80
  807.                 include bmp_view.a80
  808.  
  809. CLEAR_128K      DI
  810.                 LD HL,0
  811.                 LD A,0X17
  812.                 CALL CLEAR128K0
  813.                 LD A,0X16
  814.                 CALL CLEAR128K0
  815.                 LD A,0X14
  816.                 CALL CLEAR128K0
  817.                 LD A,0X13
  818.                 CALL CLEAR128K0
  819.                 LD A,0X11
  820.                 CALL CLEAR128K0
  821.                 LD A,0X10
  822. CLEAR128K0      LD (TEMP_SAVE_SP),SP
  823.                 LD BC,CONF_128
  824.                 OUT (C),A
  825.                 LD SP,0
  826.                 LD B,0X80
  827. CLEAR128K1      REPT 64
  828.                 PUSH HL
  829.                 ENDM
  830.                 DJNZ CLEAR128K1
  831.                 LD SP,0
  832. TEMP_SAVE_SP    EQU $-2
  833.                 RET
  834.  
  835. ;УСТАНОВКА ПЕРЕМЕННЫХ БАСИКА И ТЫРДОСА, УСТАНОВКА ВЫБРАННОГО ДИСКОВОДА
  836. SYSTEM          LD HL,BAS_VAR
  837.                 LD DE,KSTATE0
  838.                 LD BC,EBAS_VAR-BAS_VAR
  839.                 LDIR                            ;УСТАНОВКА СТАНДАРТНЫХ ПЕРЕМЕННЫХ BASIC И TR-DOS
  840. GET_DRV_SYM     LD A,(ERS_FLAGS)                ;ПРОВЕРЯЕМ НАЛИЧИЕ КМОСА
  841.                 AND M_CLOCK_ON
  842.                 JR Z,SET_DRIVE
  843.                 LD H,VIRT_REAL_DRIVE
  844.                 CALL READCMOS
  845.                 RRCA
  846.                 RRCA
  847.                 AND 3
  848. SETUP_DRIVE     LD (DRV_SYM),A                  ;УСТАНОВКА ВЫБРАННОГО РЕАЛЬНОГО ДИСКОВОДА
  849. SET_DRIVE       LD A,(DRV_SYM)                  ;ИЗМЕНЕНИЕ СИСТЕМНЫХ ПЕРЕМЕННЫХ ДЛЯ ДИСКА
  850.                 LD (TRD_5D19),A
  851.                 LD (TRD_5CF6),A
  852.                 LD L,A
  853.                 LD H,A
  854.                 LD (TRD_5CF8),HL
  855.                 OR 0X3C
  856.                 LD (TRD_5D16),A
  857.                 RET
  858.  
  859. GLUDIN          LD H,CMOS_BYTE_01
  860.                 CALL READCMOS
  861.                 AND M_SOUNDKEYS
  862.                 RET Z
  863.                 LD HL,DIN+0X0D
  864.                 LD A,0X0D
  865. GLUDIN1         LD BC,0XFFFD
  866.                 OUT (C),A
  867.                 LD B,0XBF
  868.                 OUTD
  869.                 SUB 1
  870.                 JR NC,GLUDIN1
  871.                 RET
  872.  
  873. SHUT2AY         LD H,CMOS_BYTE_01
  874.                 CALL READCMOS
  875.                 AND M_SOUNDKEYS
  876.                 RET Z
  877.                 LD DE,0X0E00
  878. SHUT2AY1        DEC D
  879.                 LD H,D
  880.                 LD L,E
  881.                 CALL SHUT2AY2
  882.                 JR NZ,SHUT2AY1                  ;для первых никронов
  883.                 LD HL,0X073F
  884. SHUT2AY2        LD BC,0XFFFD
  885.                 OUT (C),H
  886.                 LD B,0XBF
  887.                 OUT (C),L
  888.                 RET
  889.  
  890. TIMELP          CALL PRINTTIME
  891.                 LD A,HIGH (MOUSE_KEYS)
  892.                 IN A,(LOW (MOUSE_KEYS)) ;КНОПКИ МЫШИ
  893.                 CPL
  894.                 AND 7
  895.                 JR NZ,TIMELP                    ;ПОКА НЕ ОТПУСТЯТ
  896.                 RET
  897.  
  898. ;ЗАПУСК PERFECT COMMANDER
  899. PERFECT         DI
  900.                 LD SP,0XC000
  901.         PEC_ON M_SHADOW_BF
  902.                 LD BC,WIN_A0
  903.                 LD A,ROM_RST81
  904.                 OUT (C),A
  905.                 LD HL,(ADR_PERFECT)
  906.                 LD DE,0X5B00
  907.                 CALL UNPACK
  908.                 LD BC,WIN_A0
  909.                 LD A,0X83
  910.                 OUT (C),A
  911.         PEC_OFF M_SHADOW_BF
  912.                 LD A,0XC9
  913.                 LD (0X66D2),A
  914.                 LD SP,0X5FE4
  915.                 JP 0X8A1D
  916.  
  917. ISDOS_BOOT      LD HL,ISDOS_BOOT1
  918.                 LD DE,0X5E00
  919.                 LD BC,ISDOS_BOOT2-ISDOS_BOOT1
  920.                 LDIR
  921.                 JP 0X5E00
  922.  
  923.                 include hdd_detect.a80
  924.  
  925. ISDOS_BOOT1     include isdos_boot.a80
  926. ISDOS_BOOT2
  927.  
  928. SEL_FAT_DRV     ;АДРЕС СОЗДАНИЯ ТЕКСТА, АДРЕСОВ ВЫЗЫВОВ И СПИСКА ГОРЯЧИХ КЛАВИШ МЕНЮ ВЫБОРА РАЗДЕЛОВ FAT
  929.