Subversion Repositories pentevo

Rev

Rev 952 | Rev 1026 | 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.                 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.                 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.