-   
- ;LAST UPDATE: 03.03.2020 savelij 
-   
- PAGE 
-                 TITLE "main.a80" 
-   
-                 include ../../macros.a80 
-                 include ../../define.a80 
-                 include ../../global_vars.a80 
-                 include ../../ports_ide.a80 
-                 include ../../basic_tokens.a80 
-                 include ../../bas_trd_vars.a80 
-                 include ../../tmpkeys.a80 
-                 include ../../version.a80 
-                 include ../../nums_devices.a80 
-   
- ;BIT 4,(IY+55) 
- ;BIT 3,(IY+55)-0-ЗАПРЕТ АНИМАЦИИ КОШАКА, 1-РАЗРЕШЕНИЕ 
- ;BIT 2,(IY+55)-0-ФАЙЛОВ МЕНЕЕ ВЫСОТЫ ОКНА, 1-БОЛЬШЕ 
- ;BIT 0,(IY+55) 
-   
- TO_DOS4BAS      EQU 0X3D13 
- TO_DOS          EQU 0X3D2F 
-   
-  INIT_VAR 0XC000 
-  SETVAR ADR_CAT,        0XC00           ;EQU 0XC000                     ;АДРЕС БУФЕРА ДЛЯ ДИСКЕТЫ ИЛИ ОБРАЗА 
-  SETVAR ADR_CAT_FAT,    0X800           ;EQU ADR_CAT+(0X200*6)          ;АДРЕС БУФЕРА НАЙДЕННЫХ ФАЙЛОВ НА FAT 
-  SETVAR ADR_CAT_SCRH,   0X1000          ;EQU ADR_CAT_FAT+(2048*2)       ;АДРЕС БУФЕРА ДЛЯ ПОИСКА ФАЙЛОВ 
- ;ADRTBLDIRL     EQU 0XF5FF              ;СТЕК СОХРАНЕНИЯ ДАННЫХ ПРИ ХОЖДЕНИИ ПО ДИРАМ 
-  SETVAR BUFTSC,         0X180           ;EQU 0XF700                     ;180 ТАБЛИЦА АДРЕСОВ СТРОК ЭКРАНА               F700 
-  SETVAR MOUSE_BUFF,     0X10            ;EQU BUFTSC+0X0180              ;10 БУФЕР СОХРАНЕНИЯ ПОД МЫШЬЮ 
-  SETVAR COLBUF,         0X20            ;EQU MOUSE_BUFF+0X10            ;20 БУФЕР СОХРАНЕНИЯ ЦВЕТА 
-  SETVAR BUF_FILEITEM,   0X20            ;EQU COLBUF+0X20                ;20 БУФЕР ОПИСАТЕЛЯ ФАЙЛА 
-  SETVAR BUF_RDSEC,      0X200           ;EQU BUFTSC+0X200               ;200 БУФЕР СЕКТОРА ПРИ ПРОВЕРКЕ ФАЙЛОВ          F900 
-  SETVAR BUF_RDPATH,     0X100           ;EQU BUF_RDSEC+0X200            ;100 БУФЕР ТЕКУЩЕГО ПУТИ                        FB00 
-  SETVAR BUF_LEVDIR,     0X400           ;EQU BUF_RDPATH+0X100           ;400 БУФЕР УРОВНЕЙ ДИР ДЛЯ ФАЙЛОВОГО ОКНА       FC00 
-  SETVAR BUF_LINESWIN,   0X200                                           ;200 БУФЕР ДЛЯ ОПИСАТЕЛЕЙ КУРСОРА ПОД МЫШЬЮ 
-   
- H_FILE          EQU 16                          ;ШИРИНА ОКНА ДЛЯ ВЫВОДА ФАЙЛОВ C TR-DOS 
- V_FILE          EQU 24                          ;ВЫСОТА ОКНА ДЛЯ ВЫВОДА ФАЙЛОВ C TR-DOS 
- FV_FILE         EQU 26                          ;ШИРИНА ОКНА ДЛЯ ВЫВОДА ФАЙЛОВ C FAT 
- FV_FILE6        EQU ((FV_FILE-3)*8)/6           ;ШИРИНА ОКНА ДЛЯ ВЫВОДА ФАЙЛОВ С FAT В ЗНАКОМЕСТАХ 6Х8 
- FH_FILE         EQU 24                          ;ВЫСОТА ОКНА ДЛЯ ВЫВОДА ФАЙЛОВ С FAT 
- WIDE            EQU 1                           ;два пробела с боков 
-   
- CMOS_ON         EQU 0X80 
- CMOS_OFF        EQU 0 
-   
-                 ORG 0X6000 
-                 DI 
-                 CALL CLEAR_128K 
-                 LD A,0X10 
-                 CALL SET_7FFD                   ;ВКЛЮЧЕНИЕ БАСИКА48 И СТРАНИЦЫ 0 
-                 CALL ADRTSC                     ;СОЗДАНИЕ ТАБЛИЦЫ АДРЕСОВ СТРОК ЭКРАНА 
-                 RST8 _COM_DEV,_DEVFIND 
-                 JR C,START3 
-                 RST8 _MOUNTER,_FIND_MOUNTED 
- START3          RST8 _COM_DEV,_CONTROL_SD 
-                 EI 
-                 HALT 
-                 DI 
-                 LD H,0 
-                 CALL READCMOS                   ;ЧТЕНИЕ СЕКУНД ДЛЯ ОПРЕДЕЛЕНИЯ НАЛИЧИЯ КМОС 
-                 INC L 
-                 LD HL,ERS_FLAGS 
-                 JR NZ,START2                    ;ЕСЛИ ПРОЧИТАЛОСЬ 0XFF,ТО 
-                 RES B_CLOCK_ON,(HL)             ;КМОС НЕ НАЙДЕН 
-                 JR START1 
-   
- START2          SET 2,(HL)                      ;КМОС НАЙДЕН 
- START4          CALL SET_MODES 
- START1          CALL DETECTMOUSE                ;ОПРЕДЕЛЕНИЕ НАЛИЧИЯ МЫШИ 
- ;               CALL UPDATE_CURRTIME 
-                 CALL GLUDIN                     ;БУМКНУЛИ В AY 
-                 CALL MOUSE                      ;ОПРОС МЫШИ 
-                 LD HL,0X6FCC 
-                 LD (ARXY),HL                    ;УСТАНОВКА ДЕФОЛТНОЙ ПОЗИЦИИ МЫШИ ПРИ СТАРТЕ 
-                 CALL DISK_NONE 
-                 CALL RESET_VG                   ;СБРОС ВГШКИ И УСТАНОВКА ПЕРЕХВАТЧИКА ОШИБОК DOS 
-                 CALL SYSTEM 
- ;               LD C,0 
- ;               CALL TO_DOS4BAS 
- RESTART         DI 
-                 LD A,0X10 
-                 CALL SET_7FFD                   ;ВКЛЮЧИЛИ БАСИК48 И СТРАНИЧКУ 0 
-                 CALL TURBO_7MHZ 
-                 CALL SYSTEM 
-                 CALL RESET_VG                   ;СБРОС ВГШКИ И УСТАНОВКА ПЕРЕХВАТЧИКА ОШИБОК DOS 
-                 RES 3,(IY+55) 
-                 LD SP,0X6000 
-                 LD HL,0X3E00 
-                 PUSH HL 
-                 LD HL,0X1303 
-                 PUSH HL                         ;СФОРМИРОВАЛИ ДНО СТЕКА 
-                 LD (ERR_SP),SP                  ;ЗАНЕСЛИ ТЕКУЩИЙ АДРЕС В ПЕРЕМЕНЫЕ БАСИКА 
-                 LD (TEK_SP),SP 
-                 CALL S_FACE                     ;ВЫВОД НА ЭКРАН ОСНОВНОГО ВИДА 
-                 LD IX,MAINMENU 
-                 RST8 _WINW 
-                 RES 5,(IY+1)                    ;НА КЛАВИАТУРЕ НИЧЕГО НЕ НАЖАТО 
- ;ВХОД В ГЛАВНЫЙ ЦИКЛ ОПРОСА УПРАВЛЕНИЯ 
- _RULILKA        EI       
-                 LD A,(ERS_FLAGS) 
-                 AND M_MOUSE_ON                  ;ПРОВЕРКА НАЛИЧИЯ МЫШИ 
-                 JR Z,_RULNMO 
- ;FIX КОЛЕСО МЫШИ 
- MKEYPR          EI 
-                 HALT 
-                 LD A,HIGH (MOUSE_KEYS) 
-                 IN A,(LOW (MOUSE_KEYS)) 
-                 CPL 
-                 AND 7 
-                 JR NZ,MKEYPR 
-                 CALL SAVE2X2                    ;ЕСЛИ МЕНЮ НАПЕЧАТАЛИ ПОВЕРХ СТРЕЛКИ 
- _RULNMO         CALL SET_ADR_ATR                ;УСТАНОВКА НОВОГО АДРЕСА ДЛЯ ЦВЕТНОЙ ПОЛОСКИ 
- ;               RES 5,(IY+1)                    ;НА КЛАВИАТУРЕ НИЧЕГО НЕ НАЖАТО 
-                 JR MAINLOP 
-   
- ;НАЖАТА СТРЕЛКА ВВЕРХ 
- UP              CALL CURSOR_UP                  ;СМЕНИЛИ ТЕКУЩИЙ ПУНКТ НА -1 
-                 JR SET_POS1                      
-   
- ;НАЖАТА СТРЕЛКА ВПРАВО 
- RIGHT           BIT 1,(IX+_FLAGS)               ;ПРОВЕРКА ПРОСТО МЕНЮ ИЛИ ФАЙЛОВОЕ 
-                 PUSH AF                         ;СОХРАНИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ 
-                 CALL NZ,PAGEDN                  ;ЕСЛИ ФАЙЛОВОЕ, ТО ЛИСТАНИЕ СТРАНИЧНОЕ 
-                 POP AF                          ;ВОССТАНОВИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ 
-                 JR NZ,SET_POS1                  ;ЕСЛИ ФАЙЛОВОЕ ПРОДОЛЖАЕМ 
-                 LD A,(IX+_NUM_KOL_L) 
-                 AND A 
-                 JR Z,SET_POS 
-                 DEC A                           ;ИНАЧЕ ПЕРЕХОД КУРСОРА НА ПОСЛЕДНИЙ ПУНКТ 
-                 JR SET_POS                      ;ИЗМЕНЯЕМ ПОЛОЖЕНИЕ КУРСОРА И ПРОДОЛЖАЕМ 
-   
- ;НАЖАТА СТРЕЛКА ВНИЗ 
- DOWN            CALL CURSOR_DOWN                ;СМЕНИЛИ ТЕКУЩИЙ ПУНКТ НА +1 
-                 JR SET_POS1 
-   
- ;НАЖАТА СТРЕЛКА ВЛЕВО 
- LEFT            BIT 1,(IX+_FLAGS)               ;ПРОВЕРКА ПРОСТО МЕНЮ ИЛИ ФАЙЛОВОЕ 
-                 PUSH AF                         ;СОХРАНИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ 
-                 CALL NZ,PAGEUP                  ;ЕСЛИ ФАЙЛОВОЕ, ТО ЛИСТАНИЕ СТРАНИЧНОЕ 
-                 POP AF                          ;ВОССТАНОВИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ 
-                 JR NZ,SET_POS1                  ;ЕСЛИ ФАЙЛОВОЕ ПРОДОЛЖАЕМ 
-                 XOR A                           ;ИНАЧЕ ПЕРЕХОД КУРСОРА НА ПЕРВЫЙ ПУНКТ 
- SET_POS         LD (IX+_NUM_PKT),A              ;ИЗМЕНИЛИ ПОЗИЦИЮ КУРСОРА 
-                 LD (IX+_TEK_PKT_L),A 
-                 LD (IX+_TEK_PKT_H),0            ;ИЗМЕНИЛИ НОМЕР ВЫБРАННОГО ПУНКТА 
- SET_POS1        CALL COLOR_CURSOR               ;ПЕРЕРИСОВКА ЦВЕТНОЙ ПОЛОСКИ МЕНЮ 
- SET_POS2        CALL GLUDIN                     ;БУМКНУЛИ В AY 
- MAINLOP 
- ;               RES 5,(IY+1)                    ;СБРОС НАЖАТЫХ КНОПОК 
-                 RST8 _COM_DEV,_CONTROL_SD       ;ПРОВЕРКА НАЛИЧИЯ SD КАРТ И ОБНОВЛЕНИЕ ИНДИКАТОРОВ 
-                 LD A,(ERS_FLAGS) 
-                 AND M_MOUSE_ON                  ;ПРОВЕРКА НАЛИЧИЯ МЫШИ 
-                 JP Z,MAINNMO 
-                 LD HL,(ARXY)                    ;СТАРАЯ КООРДИНАТА МЫШИ 
-                 PUSH HL 
-                 CALL MOUSE                      ;ОПРОС ПОРТОВ МЫШИ 
-                 POP BC 
-                 AND A 
-                 SBC HL,BC 
-                 JR Z,NO_SELECT                  ;НЕ БЫЛО ДВИЖЕНИЯ МЫШИ 
-                 CALL RESTORE_KOSHAK             ;БЫЛО ДВИЖЕНИЕ МЫШИ, СБРОС СЧЕТЧИКОВ КОШАКА 
-                 CALL MOUOPT                     ;ПРОВЕРКА НАВЕДЕНИЯ МЫШИ НА ЗАДАННОЕ ОКНО 
- NO_SELECT       LD BC,MOUSE_KEYS 
-                 IN A,(C)                        ;ОПРОС НАЖАТИЯ КНОПОК МЫШИ 
-                 AND 7 
-                 CP 6 
-                 JR Z,PRESS_MOUSE                ;ЕСЛИ НАЖАТА ЛЕВАЯ КНОПКА МЫШИ 
-                 CP 5 
-                 JP Z,RESTART                    ;ЕСЛИ НАЖАТА ПРАВАЯ КНОПКА МЫШИ 
-                 CALL PRINTTIME                  ;ОБНОВИЛИ ВРЕМЯ ЕСЛИ ИЗМЕНИЛОСЬ 
-                 EI 
-                 HALT 
-                 CALL REST2X2                    ;ВОССТАНОВИЛИ КУСОК ЭКРАНАА ПОД МЫШЬЮ 
-                 CALL DRAW_MOUSE                 ;НАРИСОВАЛИ КУРСОР МЫШИ 
-                 JR MAINQMO                      ;ПРОДОЛЖЕНИЕ ОПРОСА 
-   
- PRESS_MOUSE     CALL OPMSPL 
-                 AND A 
-                 JR Z,CP_MOUSE4 
-                 LD (LAST_K),A 
-                 CALL TIMELP 
-                 JR SELECT_KEY 
-   
- CP_MOUSE4       CALL MOUOPT                     ;ПРОВЕРКА ПОПАДАНИЯ МЫШИ В ПРЕДЕЛЫ ТЕКУЩЕГО ОКНА 
-                 JR C,MAINNMO                    ;НЕ ПОПАЛИ И ЕДЕМ ДАЛЕЕ 
-                 LD L,(IX+_ADR_HOTKEY_L) 
-                 LD H,(IX+_ADR_HOTKEY_H) 
-                 LD A,H 
-                 OR L 
-                 JR Z,ENTER                      ;СПИСКА ХОТКЕЕВ НЕТ, ПЕРЕХОДИМ ПО НОМЕРУ ПУНКТА 
-                 LD E,(IX+_NUM_PKT)              ;ВЗЯЛИ НОМЕР ПУНКТА КУДА ПОПАЛИ МЫШЬЮ 
-                 LD D,0 
-                 ADD HL,DE                       ;АДРЕС ХОТКЕЯ ВЫБРАННОГО ПУНКТА 
-                 LD DE,LAST_K 
-                 LDI                             ;ЭМИТАЦИЯ НАЖАТИЯ ЗАДАННОЙ КНОПКИ 
-                 JR ENTER 
-                  
- MAINNMO         CALL PRINTTIME                  ;ОБНОВЛЕНИЕ ВРЕМЕНИ, ЕСЛИ В ОНО ОБНОВИЛОСЬ 
-                 EI 
-                 HALT 
- MAINQMO         BIT 5,(IY+1)                    ;ПРОВЕРКА НАЖАТИЯ КНОПОК КЛАВИАТУРЫ 
-                 CALL Z,CP_TIME_KOSHAK           ;ЕСЛИ НЕ НАЖАТО НИЧЕГО, ПРОВЕРЯЕМ СЧЕТЧИК КОШАКА 
-                 JP Z,MAINLOP                    ;ПРОДОЛЖАЕМ ОПРОС УПРАВЛЕНИЯ 
-                 CALL 0X1F54                     ;ПРОВЕРКА НА BREAK 
-                 JP NC,RESTART                   ;ЕСЛИ BREAK НАЖАТ ПЕРЕЗАПУСКАЕМСЯ 
- SELECT_KEY      CALL RESTORE_KOSHAK             ;НАЖАТО НЕЧТО НА КЛАВЕ, СБРОС СЧЕТЧИКА КОШАКА 
-                 RES 5,(IY+1)                    ;НА КЛАВИАТУРЕ НИЧЕГО НЕ НАЖАТО 
-                 LD HL,LAST_K 
-                 LD A,(HL)                       ;ВЗЯЛИ НАЖАТУЮ КЛАВИШУ 
-                 LD B,0 
-                 LD HL,MAIN_KEYS 
-                 LD C,(HL)                       ;КОЛИЧЕСТВО ДОСТУПНЫХ КНОПОК 
-                 LD D,C 
-                 INC HL 
-                 CPIR 
-                 JR NZ,NOMAINKEYS                ;НИЧЕГО НЕ НАШЛИ, ДАЛЕЕ СМОТРИМ КНОПКИ ТЕКУЩЕГО ОКНА 
-                                                 ;НАЖАТО ЧТО-ТО ИЗ ГЛАВНЫХ КНОПОК, ДОСТУПНЫХ ВСЕГДА 
-                 LD HL,ADREXEKEYS 
-                 LD A,D                          ;КОЛИЧЕСТВО КНОПОК В ТАБЛИЦЕ -1 
-                 SUB C                           ;ПОЛУЧИЛИ ВЫБРАННЫЙ НОМЕР 
-                 DEC A 
-                 JR JUMP2HL 
-   
- ;ПРОВЕРКА ХОТКЕЕВ В ТЕКУЩЕМ ОКНЕ 
- NOMAINKEYS      LD L,(IX+_ADR_HOTKEY_L) 
-                 LD H,(IX+_ADR_HOTKEY_H) 
-                 LD C,A 
-                 LD A,H 
-                 OR L 
-                 JP Z,MAINLOP                    ;ЕСЛИ СПИСКА НЕТ, ПРОДОЛЖАЕМ ОПРОС 
-                 LD A,C 
-                 LD C,(IX+_V_SIZE) 
-                 LD E,(HL) 
-                 INC HL 
-                 DEC C                           ;КОЛИЧЕСТВО КНОПОК 
-                 DEC C                           ;ВЫСОТА ОКНА -2 
-                 LD D,C 
-                 LD B,0 
-                 CPIR                            ;СКАНИРОВАНИЕ СПИСКА ЗАДАННЫХ КЛАВИШ 
-                 JR NZ,OSTAT_KEYS 
-                 LD A,D                          ;ВЫСОТА ОКНА 
-                 SUB C 
-                 DEC A                           ;ПОЛУЧИЛИ НОМЕР НАЖАТОЙ КНОПКИ И -1 
-                 LD (IX+_NUM_PKT),A              ;НОМЕР ПУНКТА В ОКНЕ 
-                 LD (IX+_TEK_PKT_L),A            ;НОМЕР НАЖАТОЙ КЛАВИШИ ПО УКАЗАННОМУ СПИСКУ 
- ENTER           LD A,(ERS_FLAGS) 
-                 AND M_MOUSE_ON 
-                 CALL NZ,TIMELP                  ;ОБНОВЛЕНИЕ ВРЕМЕНИ ЕСЛИ ОНО ИЗМЕНИЛОСЬ  
-                 CALL REST2X2                    ;СТЕРЛИ КУРСОР МЫШИ 
-                 CALL GLUDIN                     ;БУМКНУЛИ В AY 
-                 LD A,(IX+_NUM_PKT)              ;НОМЕР ИЗ СПИСКА КОТОРЫЙ ВЫЗВАТЬ 
- JUMP2HL1        LD L,(IX+_ADR_PRG_L) 
-                 LD H,(IX+_ADR_PRG_H)            ;ВЗЯЛИ СПИСОК АДРЕСОВ 1 ИЗ КОТОРЫХ БУДЕМ ВЫЗЫВАТЬ 
- JUMP2HL         ADD A,A 
-                 ADD A,L 
-                 LD L,A 
-                 ADC A,H 
-                 SUB L 
-                 LD H,A 
-                 LD A,(HL) 
-                 INC HL 
-                 LD H,(HL) 
-                 LD L,A 
-                 JP (HL) 
-   
- OSTAT_KEYS      EX AF,AF' 
-                 LD A,E 
-                 SUB D 
-                 JP Z,MAINLOP 
-                 LD C,A 
-                 EX AF,AF' 
-                 CPIR 
-                 JP NZ,MAINLOP 
-                 LD A,E 
-                 SUB C 
-                 DEC A 
-                 JR JUMP2HL1 
-   
- ;ИЗМЕНЕНИЕ РЕЖИМА ПАМЯТИ 
- CHNGMODE        LD HL,MEMMODE 
-                 DEC (HL)                        ;СМЕНИЛИ РЕЖИМ ПАМЯТИ 
-                 JP P,CHNGMODEY 
-                 LD (HL),2                       ;ЕСЛИ ПЕРЕШЛИ ЧЕРЕЗ 0, ТО ВЫСТАВИЛИ РЕЖИМ 48 
- CHNGMODEY       LD A,(ERS_FLAGS) 
-                 AND M_CLOCK_ON                  ;ПРОВЕРКА НАЛИЧИЯ КМОСА 
-                 RET Z 
-                 LD A,(ERS_FLAGS) 
-                 AND M_EMU_TAPE 
-                 RLCA 
-                 RLCA 
-                 LD L,A 
-                 LD A,(MEMMODE) 
-                 OR L 
-                 LD L,A 
- CHNGMODEY1      LD A,(SYSREG1) 
-                 AND 0X10 
-                 RLCA 
-                 RLCA 
-                 RLCA 
-                 OR L 
-                 LD C,A 
-                 LD H,CMOS_BYTE_01 
-                 CALL READCMOS 
-                 AND %01111100 
-                 OR C 
- CHANGE_MODES    LD L,A 
-                 CALL WRITECMOS                  ;СОХРАНИЛИ В КМОС ИЗМЕНЕНЫЙ РЕЖИМ 
-                 CALL REST2X2 
-                 CALL SET_MODES 
-                 CALL PRT_MODES 
-                 LD A,(ERS_FLAGS) 
-                 AND M_MOUSE_ON 
-                 JP Z,MAINLOP 
-                 CALL DRAW_MOUSE 
-                 CALL TIMELP 
-                 JP MAINLOP 
-   
- ;ИЗМЕНЕНИЕ РЕЖИМА ТУРБО 0=3,5MHZ, 1=7MHZ, 2-14MHZ 
- CHNGTURBO       LD HL,TURBO_NUM 
-                 INC (HL)                        ;СМЕНИЛИ TURBO РЕЖИМ 
-                 LD A,(HL) 
-                 CP 3 
-                 JR C,CHNGTURBO1 
-                 LD (HL),0                       ;ЕСЛИ ПЕРЕШЛИ ЧЕРЕЗ 0, ТО ВЫСТАВИЛИ РЕЖИМ 14MHZ 
- CHNGTURBO1      LD A,(HL) 
-                 AND A 
-                 LD DE,0X1000 
-                 JR Z,CHNGTURBO2 
-                 DEC A 
-                 LD DE,0 
-                 JR Z,CHNGTURBO2 
-                 LD DE,0X10*0X100+M_TURBO14 
- CHNGTURBO2      LD A,D 
-                 LD HL,SYSREG1 
-                 LD A,(HL) 
-                 AND %11101111                   ;ИНВЕРСИЯ БИТА ТУРБОРЕЖИМА 
-                 OR D 
-                 LD (HL),A 
-                 LD H,CMOS_BYTE_00 
-                 CALL READCMOS 
-                 AND M_TURBO14!0XFF 
-                 OR E 
-                 LD L,A 
-                 LD H,CMOS_BYTE_00 
-                 CALL WRITECMOS 
-                 JP CHNGMODEY 
-   
- CHNGTAPMODE     LD H,CMOS_BYTE_00 
-                 CALL READCMOS 
-                 XOR M_EMUL_TAPE 
-                 JR CHANGE_MODES 
-   
- CHNGGLUKMOD     LD H,CMOS_BYTE_00 
-                 CALL READCMOS 
-                 AND MKOL_MODES!0XFF 
-                 LD C,A 
-                 LD A,L 
-                 AND MKOL_MODES 
-                 INC A 
-                 CP KOL_MODES 
-                 JR C,CHNGGLUKMOD1 
-                 XOR A 
- CHNGGLUKMOD1    OR C 
-                 LD L,A 
-                 JR CHANGE_MODES 
-   
- EN_AUTOMNT      LD H,CMOS_BYTE_01 
-                 CALL READCMOS 
-                 XOR M_AUTOMOUNT 
-                 JP CHANGE_MODES 
-   
- EN_LOADFONT     LD H,CMOS_BYTE_00 
-                 CALL READCMOS 
-                 XOR M_RELOAD_FONT 
-                 JP CHANGE_MODES 
-   
- SET_TYPEFONT    LD H,CMOS_BYTE_00 
-                 CALL READCMOS 
-                 XOR M_TYPE_FONT 
-                 PUSH AF 
-                 PUSH HL 
-                 AND M_TYPE_FONT 
-                 JR Z,SETTYPEFONT 
-                 LD A,1 
- SETTYPEFONT     RST8 _SETUP_FONT 
-                 POP HL 
-                 POP AF 
-                 JP CHANGE_MODES 
-   
- ;ВКЛЮЧЕНИЕ/ВЫКЛЮЧЕНИE ОТОБРАЖЕНИЯ ЧАСОВ 
- CMOS_ONOFF      LD A,(ERS_FLAGS) 
-                 AND M_CLOCK_ON                  ;ПРОВЕРКА НАЛИЧИЯ КМОСА 
-                 JP Z,MAINLOP 
-                 LD H,CMOS_BYTE_01 
-                 CALL READCMOS 
-                 XOR M_CLOCK_VIEW 
-                 LD L,A 
-                 PUSH AF 
-                 LD H,CMOS_BYTE_01 
-                 CALL WRITECMOS 
-                 POP AF 
-                 AND M_CLOCK_VIEW 
-                 JP Z,MAINLOP 
-                 LD HL,TIME_OFF 
-                 RST8 _PRINT_MESSAGE 
-                 JP MAINLOP 
-   
- ;ВКЛЮЧЕНИЕ/ВЫКЛЮЧЕНИЕ КУРСОРА МЫШИ 
- MOUSE_ONOFF     LD HL,ERS_FLAGS 
-                 LD A,(HL) 
-                 XOR M_MOUSE_ON                  ;ИНВЕРСИЯ ОТОБРАЖЕНИЯ МЫШИ 
-                 LD (HL),A 
-                 AND M_MOUSE_ON 
-                 CALL NZ,DETECTMOUSE             ;ЕСЛИ ВКЛЮЧИЛИ, ПРОВЕРЯЕМ НАЛИЧИЕ 
-                 CALL NC,REST2X2                 ;ЕСЛИ МЫШЬ НЕ НАЙДЕНА, ТО ВЫКЛЮЧАЕМ ОТОБРАЖЕНИЕ 
-                 JP MAINLOP 
-   
- ;ОЖИДАНИЕ НАЖАТИЯ ЧЕГО-НИБУДЬ ПОСЛЕ ОШИБКИ 
- EXIT4ERROR      RES 5,(IY+1)                    ;НА КЛАВИАТУРЕ НИЧЕГО НЕ НАЖАТО 
-                 LD BC,MOUSE_KEYS 
-                 IN D,(C) 
- E4E1            CALL PRINTTIME 
-                 EI 
-                 HALT 
-                 BIT 5,(IY+1) 
-                 JR NZ,E4E3 
-                 LD A,(ERS_FLAGS) 
-                 AND M_MOUSE_ON 
-                 JR NZ,E4E1 
-                 LD A,HIGH (MOUSE_KEYS) 
-                 IN A,(LOW (MOUSE_KEYS)) 
-                 CP D 
-                 JR Z,E4E1 
- E4E2            EX AF,AF' 
-                 CALL TIMELP 
-                 EX AF,AF' 
-                 RRA 
-                 RET 
-   
- E4E3            XOR A 
-                 IN A,(0XFE) 
-                 CPL 
-                 AND 0X1F 
-                 JR NZ,E4E3 
-                 LD (LAST_K),A 
-                 RES 5,(IY+1)                    ;НА КЛАВИАТУРЕ НИЧЕГО НЕ НАЖАТО 
-                 RET 
-   
- ;ПЕЧАТЬ ТЕКУЩЕГО ВЫБРАННОГО ДИСКОВОДА 
- PRT_DRV_SYM     LD A,(TRD_5CF8) 
-                 ADD A,"A" 
-                 LD (TXT_DRIVE),A 
-                 LD HL,TRDDRV_MODE 
-                 RST8 _PRINT_MESSAGE 
-                 RET 
-   
- ;РАСПЕЧАТКА ТЕКУЩЕГО РЕЖИМА 
- PRT_MODES       LD HL,SPEED_MODE 
-                 RST8 _PRINT_MESSAGE 
-                 LD HL,MEM_MODE 
-                 RST8 _PRINT_MESSAGE 
-                 LD HL,EMUTAPLOAD 
-                 RST8 _PRINT_MESSAGE 
-                 LD HL,SET_RESET 
-                 RST8 _PRINT_MESSAGE 
-                 LD HL,ROMLOADFONT 
-                 RST8 _PRINT_MESSAGE 
-                 LD HL,TYPESFONT 
-                 RST8 _PRINT_MESSAGE 
-                 LD HL,TXT_AUTOMOUNT 
-                 RST8 _PRINT_MESSAGE 
-                 RET 
-   
- ;РАСПЕЧАТКА ТЕКУЩЕГО ВИРТУАЛЬНОГО ДИСКОВОДА 
- PRT_VIRTDRV     RST8 _MOUNTER,_GET_VIRT_BITS 
-                 LD D,A 
- ;       REPT 4 
- ;               RRCA 
- ;       ENDM 
-                 LD H,VIRT_REAL_DRIVE 
-                 CALL READCMOS 
-                 AND 3 
-                 LD B,A 
-                 INC B 
-                 ADD A,'A' 
-                 LD C,A 
- ;               LD A,%00001000 
-                 LD A,%10000000 
- .L1             RLCA 
-                 DJNZ .L1 
-                 AND D 
-                 LD HL,VIRT_DRIVE 
-                 JR NZ,PRTVIRTDRV2 
-                 LD (HL)," " 
-                 INC HL 
-                 LD (HL),C 
-                 INC HL 
-                 LD (HL)," " 
-                 JR PRTVIRTDRV1 
-   
- PRTVIRTDRV2     LD (HL),"o" 
-                 INC HL 
-                 LD (HL),"f" 
-                 INC HL 
-                 LD (HL),"f" 
- PRTVIRTDRV1     LD HL,VIRTUAL_DRV 
-                 RST8 _PRINT_MESSAGE 
-                 LD HL,ADR_CAT 
-                 RST8  _MOUNTER,_GET_MOUNTED 
-                 LD HL,ADR_CAT 
-                 LD DE,MNT_DRV_A 
-                 CALL COPY_MNTNAME 
-                 LD L,0X40 
-                 LD DE,MNT_DRV_B 
-                 CALL COPY_MNTNAME 
-                 LD L,0X80 
-                 LD DE,MNT_DRV_C 
-                 CALL COPY_MNTNAME 
-                 LD L,0XC0 
-                 LD DE,MNT_DRV_D 
-                 CALL COPY_MNTNAME 
-                 CALL GET_RAMD_NAME 
-                 LD HL,MOUNTED_DRV 
-                 RST8 _PRINT_MESSAGE 
-                 RET 
-   
- COPY_MNTNAME    PUSH HL 
-                 LD A,(HL) 
-                 AND A 
-                 JR NZ,COPY_MNTNAME1 
-                 LD HL,TXT_NONE 
-                 LD BC,0X0C 
-                 JR COPY_MNTNAME3 
-   
- COPY_MNTNAME1   LD BC,8 
-                 LDIR 
-                 LD A,"." 
-                 LD (DE),A 
-                 INC DE 
-                 LD C,3 
- COPY_MNTNAME3   LDIR 
-                 POP HL 
-                 RET 
-   
- ;ПОЛУЧЕНИЕ ИМЕНИ ФАЙЛА ЗАГРУЖЕННОГО В РАМДИСК 
- GET_RAMD_NAME   PEC_ON M_SHADOW_BF 
-                 LD BC,WIN_P2 
-                 LD A,RAM_RAMDISK 
-                 OUT (C),A 
-                 LD DE,CPU2+0X3DFF 
-                 LD A,(DE) 
-                 AND A 
-                 JR Z,GRN1 
-                 LD HL,GRN1 
-                 PUSH HL 
-                 LD HL,IN_RAMDISK 
-                 LD B,8 
-                 CALL GRN2 
-                 LD B,3 
-                 LD (HL),"." 
-                 INC HL 
- GRN2            LD A,(DE) 
-                 LD (HL),A 
-                 DEC D 
-                 INC HL 
-                 DJNZ GRN2 
-                 RET 
-   
- GRN1            LD BC,WIN_P2 
-                 LD A,ZXSTD_CPU2;0XFD 
-                 OUT (C),A 
-                 PEC_OFF M_SHADOW_BF 
-                 RET 
-   
- ;ВЫВОД ОСНОВНОГО МЕНЮ И НАДПИСЕЙ 
- S_FACE          LD A,7 
-                 CALL CLS 
-                 LD HL,TXTFULLSCR 
-                 RST8 _PRINT_MESSAGE 
-                 CALL PRT_DRV_SYM                ;ПЕЧАТЬ ТЕКУЩЕГО ДИСКОВОДА 
-                 CALL PRT_MODES                  ;ПЕЧАТЬ ТЕКУЩЕГО РЕЖИМА 
-                 CALL PRT_VIRTDRV                ;ПЕЧАТЬ ТЕКУЩЕГО ВИРТУАЛЬНОГО ДИСКОВОДА 
-                 XOR A 
-                 JP DRAW_KOSHAK                  ;ВЫВОД 0 ФАЗЫ КОШАКА 
-   
- SET_EFF7_A_     LD A,(SYSREG1) 
- SET_EFF7        LD BC,PENT_CONF 
-                 OUT (C),A 
-                 RET 
-   
- SET_7FFD_0      LD A,0X10 
- SET_7FFD        PUSH BC 
-                 LD BC,CONF_128 
-                 OUT (C),A 
-                 POP BC 
-                 RET 
-   
- MEMSET          CALL CLEAR_128K 
-                 LD A,(TURBO_NUM)                ;УСТАНОВКА TURBO РЕЖИМА 
-                 AND A 
-                 LD DE,0X10A3                    ;3,5MHZ PORTS EFF7 BIT4=1 XX77 BIT3=0 
-                 JR Z,MEMSET01 
-                 DEC A 
-                 LD DE,0XA3                      ;7MHZ PORTS EFF7 BIT4=0 XX77 BIT3=0 
-                 JR Z,MEMSET01 
-                 LD DE,0X10AB                    ;14MHZ PORTS EFF7 BIT4=1 XX77 BIT3=1 
- MEMSET01        LD BC,0XFF77 
-                 PEC_ON M_SHADOW_BF 
-                 OUT (C),E 
-                 PEC_OFF M_SHADOW_BF 
-                 LD A,D 
-                 CALL SET_EFF7 
-                 LD A,(MEMMODE) 
-                 AND A 
-                 RET Z                           ;РЕЖИМ ПОЛНОЙ ПАМЯТИ 
- MEMSET1         DEC A 
-                 JR Z,MEMORY48 
- ;ВКЛЮЧЕНИЕ РЕЖИМА BASIC128 
- ON_BIT128       LD A,(SYSREG1) 
-                 AND 0X10 
-                 ADD A,4 
-                 CALL SET_EFF7 
-                 JR SET_7FFD_0 
-   
- ;ВКЛЮЧЕНИЕ РЕЖИМА BASI48 
- MEMORY48        CALL ON_BIT128 
-                 LD A,0X30 
-                 JR SET_7FFD 
-   
- ;ЧТЕНИЕ CMOS И ИЗМЕНЕНИЕ СООБЩЕНИЙ ДЛЯ ВЫВОДА НА ЭКРАН ОБ УСТАНОВЛЕННЫХ РЕЖИМАХ 
- SET_MODES       LD H,0X0B                       ;ЧИТАТЬ РЕЖИМ СЧЕТА ЧАСОВ 
-                 CALL READCMOS 
-                 RES 2,L                         ;ПРИНУДИТЕЛЬНО ВКЛЮЧАЕМ БИНАРНЫЙ СЧЕТ 
-                 CALL WRITECMOS                  ;СОХРАНЯЕМ ИЗМЕНЕНИЯ 
-                 LD H,CMOS_BYTE_01               ;ЧИТАЕМ УСТАНОВКИ ТУРБО И ПАМЯТИ 
-                 CALL READCMOS 
-                 AND M_TURBO357 
-                 RRCA 
-                 RRCA 
-                 RRCA 
-                 LD (SYSREG1),A                  ;СОДЕРЖИМОЕ ДЛЯ ЗАПИСИ В ПОРТ EFF7 
-                 LD B,A 
-                 LD A,L 
-                 AND _128K | _48K | _1MB 
-                 LD (MEMMODE),A                  ;ВЫБРАННЫЙ РЕЖИМ ПАМЯТИ 
-                 LD H,CMOS_BYTE_00 
-                 CALL READCMOS                   ;ЧИТАЕМ ОСНОВНЫЕ УСТАНОВКИ 
-                 LD C,A 
-                 AND M_TURBO14 
-                 LD HL,TURBO_NUM                 ;НОМЕР ТУРБО РЕЖИМА 
-                 LD (HL),2                       ;РЕЖИМ 14МГЦ 
-                 JR NZ,SETMODES04 
-                 LD A,B 
-                 DEC (HL)                        ;РЕЖИМ 7МГЦ 
-                 AND 0X10 
-                 JR Z,SETMODES04 
-                 DEC (HL)                        ;РЕЖИМ 3,5МГЦ 
- SETMODES04      LD A,(HL)                       ;ВЗЯЛИ ТЕКУЩИЙ ТУРБО РЕЖИМ 
-                 ADD A,A 
-                 ADD A,A 
-                 LD E,A 
-                 LD D,0 
-                 LD HL,TXTTURBOMODE              ;ТЕКСТ ТУРБО РЕЖИМОВ 
-                 ADD HL,DE                       ;ПЕРЕШЛИ НА НУЖНЫЙ ТЕКСТ 
-                 LD DE,TXT_SPEED 
-                 LD A,C 
-                 LDI 
-                 LDI 
-                 LDI 
-                 LDI                             ;ПЕРЕНЕСЛИ ДЛЯ ВЫВОДА ЭКРАН 
-                 LD C,A 
-                 AND M_EMUL_TAPE 
-                 LD HL,EMTAPLOAD 
-                 CALL SET_ONOFF                  ;ПЕРЕНОС СИМВОЛОВ ДЛЯ ВЫВОДА НА ЭКРАН, ON ИЛИ OFF 
-                 LD A,C 
-                 AND M_RELOAD_FONT 
-                 XOR M_RELOAD_FONT 
-                 LD HL,EROMLOADFONT 
-                 CALL SET_ONOFF                  ;ПЕРЕНОС СИМВОЛОВ ДЛЯ ВЫВОДА НА ЭКРАН, ON ИЛИ OFF 
-                 LD A,C 
-                 AND M_TYPE_FONT 
-                 PUSH BC 
-                 LD HL,TXTMODTYPE 
-                 LD BC,5 
-                 JR Z,SET_FONT2 
-                 ADD HL,BC 
- SET_FONT2       LD DE,ETYPESFONT 
-                 LDIR 
-                 POP BC 
-                 LD A,C 
-                 AND MKOL_MODES 
-                 CP KOL_MODES 
-                 JR C,SETMODES03 
-                 XOR A 
- SETMODES03      LD L,A 
-                 ADD A,A 
-                 ADD A,L 
-                 ADD A,A 
-                 ADD A,A 
-                 LD H,0 
-                 LD L,A 
-                 LD DE,TXT_RESETTO 
-                 ADD HL,DE 
-                 LD DE,TXT_RESET 
-                 LD A,C 
-                 LD BC,0X0C 
-                 LDIR 
-                 LD C,A 
-                 AND M_PRINTER_AY 
-                 LD HL,ETXT_AYPRINTER 
-                 CALL SET_ONOFF                  ;ПЕРЕНОС СИМВОЛОВ ДЛЯ ВЫВОДА НА ЭКРАН, ON ИЛИ OFF 
- SETMODES02      LD A,(MEMMODE) 
-                 AND A 
-                 LD HL,T_ALL 
-                 JR Z,SETMODES01                 ;ALL MEMORY 
-                 LD HL,T_48 
-                 DEC A 
-                 JR Z,SETMODES01                 ;48K 
-                 LD HL,T_128                     ;128K 
- SETMODES01      LD DE,TXT_MEM                   ;РЕЖИМ ПАМЯТИ 
-                 LD A,C 
-                 LD BC,3 
-                 LDIR 
-                 LD H,CMOS_BYTE_01 
-                 CALL READCMOS 
-                 PUSH AF 
-                 AND M_AUTOMOUNT 
-                 LD HL,ETXT_AUTOMOUNT 
-                 CALL SET_ONOFF 
-                 POP AF 
- ;ДЛЯ РЕЗИДЕНТА HONEY COMANDER 
-         IFDEF REZIDENT 
-                 AND M_REZIDENT 
-                 LD HL,TXT_REZIDENT 
-                 CALL SET_ONOFF 
-                 LD H,CMOS_BYTE_03 
-                 CALL READCMOS 
-                 AND M_KILL_REZIDENT 
-                 LD HL,TXT_KILLREZID 
-                 CALL SET_ONOFF 
-         ENDIF;REZIDENT 
-                 LD A,(ERS_FLAGS) 
-                 AND M_CLOCK_ON 
-                 RET Z 
-                 LD DE,VERS_CONF 
-                 LD L,0 
-                 CALL GET_VERS_EVO               ;ВЕРСИЯ БАЗОВОЙ КОНФИГУРАЦИИ 
-                 LD DE,VERS_BOOT 
-                 LD L,1 
-                 JP GET_VERS_EVO                 ;ВЕРСИЯ AVRBOOT 
-   
- ;ПЕРЕНОС СИМВОЛОВ ДЛЯ ВЫВОДА НА ЭКРАН, ON ИЛИ OFF 
- SET_ONOFF       LD DE,"n " 
-                 JR NZ,SET_ONOFF1 
-                 LD DE,"ff" 
- SET_ONOFF1      LD (HL),D 
-                 INC HL 
-                 LD (HL),E 
-                 RET 
-   
- TURBO_7MHZ      LD E,0XA3 
-                 LD BC,0XFF77 
-                 PEC_ON M_SHADOW_BF 
-                 OUT (C),E 
-                 PEC_OFF M_SHADOW_BF 
-                 XOR A 
-                 JP SET_EFF7 
-   
-                 include menu_data.a80 
-                 include menu_execute.a80 
-                 include mouse.a80 
-                 include window.a80 
-                 include call_cmos.a80 
-                 include call_trdos.a80 
-                 include koshak.a80 
-                 include pc_keys_test.a80 
-                 include flasher.a80 
-                 include fat_boot.a80 
-                 include bmp_view.a80 
-   
- CLEAR_128K      DI 
-                 LD HL,0 
-                 LD A,0X17 
-                 CALL CLEAR128K0 
-                 LD A,0X16 
-                 CALL CLEAR128K0 
-                 LD A,0X14 
-                 CALL CLEAR128K0 
-                 LD A,0X13 
-                 CALL CLEAR128K0 
-                 LD A,0X11 
-                 CALL CLEAR128K0 
-                 LD A,0X10 
- CLEAR128K0      LD (TEMP_SAVE_SP),SP 
-                 LD BC,CONF_128 
-                 OUT (C),A 
-                 LD SP,0 
-                 LD B,0X80 
- CLEAR128K1      REPT 64 
-                 PUSH HL 
-                 ENDM 
-                 DJNZ CLEAR128K1 
-                 LD SP,0 
- TEMP_SAVE_SP    EQU $-2 
-                 RET 
-   
- ;УСТАНОВКА ПЕРЕМЕННЫХ БАСИКА И ТЫРДОСА, УСТАНОВКА ВЫБРАННОГО ДИСКОВОДА 
- SYSTEM          LD HL,BAS_VAR 
-                 LD DE,KSTATE0 
-                 LD BC,EBAS_VAR-BAS_VAR 
-                 LDIR                            ;УСТАНОВКА СТАНДАРТНЫХ ПЕРЕМЕННЫХ BASIC И TR-DOS 
- GET_DRV_SYM     LD A,(ERS_FLAGS)                ;ПРОВЕРЯЕМ НАЛИЧИЕ КМОСА 
-                 AND M_CLOCK_ON 
-                 JR Z,SET_DRIVE 
-                 LD H,VIRT_REAL_DRIVE 
-                 CALL READCMOS 
-                 RRCA 
-                 RRCA 
-                 AND 3 
-                 LD (DRV_SYM),A                  ;УСТАНОВКА ВЫБРАННОГО РЕАЛЬНОГО ДИСКОВОДА 
- SET_DRIVE       LD A,(DRV_SYM)                  ;ИЗМЕНЕНИЕ СИСТЕМНЫХ ПЕРЕМЕННЫХ ДЛЯ ДИСКА 
-                 LD (TRD_5D19),A 
-                 LD (TRD_5CF6),A 
-                 LD L,A 
-                 LD H,A 
-                 LD (TRD_5CF8),HL 
-                 OR 0X3C 
-                 LD (TRD_5D16),A 
-                 RET 
-   
- GLUDIN          LD H,CMOS_BYTE_01 
-                 CALL READCMOS 
-                 AND M_SOUNDKEYS 
-                 RET Z 
-                 LD HL,DIN+0X0D 
-                 LD A,0X0D 
- GLUDIN1         LD BC,0XFFFD 
-                 OUT (C),A 
-                 LD B,0XBF 
-                 OUTD 
-                 SUB 1 
-                 JR NC,GLUDIN1 
-                 RET 
-   
- SHUT2AY         LD H,CMOS_BYTE_01 
-                 CALL READCMOS 
-                 AND M_SOUNDKEYS 
-                 RET Z 
-                 LD DE,0X0E00 
- SHUT2AY1        DEC D 
-                 LD H,D 
-                 LD L,E 
-                 CALL SHUT2AY2 
-                 JR NZ,SHUT2AY1                  ;для первых никронов 
-                 LD HL,0X073F 
- SHUT2AY2        LD BC,0XFFFD 
-                 OUT (C),H 
-                 LD B,0XBF 
-                 OUT (C),L 
-                 RET 
-   
- TIMELP          CALL PRINTTIME 
-                 LD A,HIGH (MOUSE_KEYS) 
-                 IN A,(LOW (MOUSE_KEYS)) ;КНОПКИ МЫШИ 
-                 CPL 
-                 AND 7 
-                 JR NZ,TIMELP                    ;ПОКА НЕ ОТПУСТЯТ 
-                 RET 
-   
- ;ЗАПУСК PERFECT COMMANDER 
- PERFECT         DI 
-                 LD SP,0XC000 
-                 PEC_ON M_SHADOW_BF 
-                 LD BC,WIN_A0 
-                 LD A,ROM_RST81 
-                 OUT (C),A 
-                 LD HL,(ADR_PERFECT) 
-                 LD DE,0X5B00 
-                 CALL UNPACK 
-                 LD BC,WIN_A0 
-                 LD A,0X83 
-                 OUT (C),A 
-                 PEC_OFF M_SHADOW_BF 
-                 LD A,0XC9 
-                 LD (0X66D2),A 
-                 LD SP,0X5FE4 
-                 JP 0X8A1D 
-   
- ISDOS_BOOT      LD HL,ISDOS_BOOT1 
-                 LD DE,0X5E00 
-                 LD BC,ISDOS_BOOT2-ISDOS_BOOT1 
-                 LDIR 
-                 JP 0X5E00 
-   
-                 include hdd_detect.a80 
-   
- ISDOS_BOOT1     include isdos_boot.a80 
- ISDOS_BOOT2 
-   
- SEL_FAT_DRV     ;АДРЕС СОЗДАНИЯ ТЕКСТА, АДРЕСОВ ВЫЗЫВОВ И СПИСКА ГОРЯЧИХ КЛАВИШ МЕНЮ ВЫБОРА РАЗДЕЛОВ FAT 
-