Subversion Repositories pentevo

Rev

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

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