;LAST UPDATE: 30.06.2019 savelij
 
 
 
ITSELECTOR      LD HL,FLAGS
 
                RES B_MOUSE_PRESENT,(HL)        ;ПРИНУДИТЕЛЬНОЕ ОТКЛЮЧЕНИЕ МЫШИ ДЛЯ ТЕКСТМОДА
 
                SET B_VIDEO_MODE,(HL)           ;МЕНЮ ТЕКСТОВОГО ВИДЕОРЕЖИМА
 
                LD HL,KEYBOARDS
 
                LD (ADR_INT),HL                 ;ПО ПРЕРЫВАНИЯМ БУДЕТ ОПРОС КЛАВИАТУРЫ
 
                LD (OLD_STACK),SP
 
                JR SELECTOR
 
 
 
ISELECTOR       LD HL,FLAGS
 
                RES B_VIDEO_MODE,(HL)
 
                CALL DETECTMOUSE
 
                LD (OLD_STACK),SP
 
SELECTOR        EI      
 
                LD A,(FLAGS)
 
                AND M_MOUSE_PRESENT                     ;ПРОВЕРКА НАЛИЧИЯ МЫШИ
 
                JR Z,_RULNMO
 
;FIX КОЛЕСО МЫШИ
 
MKEYPR          EI
 
                LD A,0XFA
 
                IN A,(0XDF)
 
                CPL
 
                AND 7
 
                JR NZ,MKEYPR
 
_RULNMO         CALL SAVE2X2                    ;ЕСЛИ МЕНЮ НАПЕЧАТАЛИ ПОВЕРХ СТРЕЛКИ
 
                CALL SET_ADR_ATR                ;УСТАНОВКА НОВОГО АДРЕСА ДЛЯ ЦВЕТНОЙ ПОЛОСКИ
 
                LD HL,FLAGS_KEY
 
                RES 5,(HL)                      ;НА КЛАВИАТУРЕ НИЧЕГО НЕ НАЖАТО
 
                JR MAINLOP
 
 
 
;НАЖАТА СТРЕЛКА ВВЕРХ
 
UP              CALL CURSOR_UP                  ;СМЕНИЛИ ТЕКУЩИЙ ПУНКТ НА -1
 
                JR SET_POS1                     
 
 
 
;НАЖАТА СТРЕЛКА ВПРАВО
 
RIGHT           BIT 1,(IX+6)                    ;ПРОВЕРКА ПРОСТО МЕНЮ ИЛИ ФАЙЛОВОЕ
 
                PUSH AF                         ;СОХРАНИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ
 
                CALL NZ,PAGEDN                  ;ЕСЛИ ФАЙЛОВОЕ, ТО ЛИСТАНИЕ СТРАНИЧНОЕ
 
                POP AF                          ;ВОССТАНОВИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ
 
                JR NZ,SET_POS1                  ;ЕСЛИ ФАЙЛОВОЕ ПРОДОЛЖАЕМ
 
                LD A,(IX+0X0A)
 
                AND A
 
                JR Z,SET_POS
 
                DEC A                           ;ИНАЧЕ ПЕРЕХОД КУРСОРА НА ПОСЛЕДНИЙ ПУНКТ
 
                JR SET_POS                      ;ИЗМЕНЯЕМ ПОЛОЖЕНИЕ КУРСОРА И ПРОДОЛЖАЕМ
 
 
 
;НАЖАТА СТРЕЛКА ВНИЗ
 
DOWN            CALL CURSOR_DOWN                ;СМЕНИЛИ ТЕКУЩИЙ ПУНКТ НА +1
 
                JR SET_POS1
 
 
 
;НАЖАТА СТРЕЛКА ВЛЕВО
 
LEFT            BIT 1,(IX+6)                    ;ПРОВЕРКА ПРОСТО МЕНЮ ИЛИ ФАЙЛОВОЕ
 
                PUSH AF                         ;СОХРАНИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ
 
                CALL NZ,PAGEUP                  ;ЕСЛИ ФАЙЛОВОЕ, ТО ЛИСТАНИЕ СТРАНИЧНОЕ
 
                POP AF                          ;ВОССТАНОВИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ
 
                JR NZ,SET_POS1                  ;ЕСЛИ ФАЙЛОВОЕ ПРОДОЛЖАЕМ
 
                XOR A                           ;ИНАЧЕ ПЕРЕХОД КУРСОРА НА ПЕРВЫЙ ПУНКТ
 
SET_POS         BIT 7,(IX+7)
 
                JR Z,SET_POS3
 
                LD L,(IX+8)
 
                LD H,(IX+9)
 
                LD (HL),A
 
                INC HL
 
                LD (HL),A
 
                INC HL
 
                LD (HL),0
 
                JR SET_POS1
 
 
 
SET_POS3        LD (IX+7),A                     ;ИЗМЕНИЛИ ПОЗИЦИЮ КУРСОРА
 
                LD (IX+8),A
 
                LD (IX+9),0                     ;ИЗМЕНИЛИ НОМЕР ВЫБРАННОГО ПУНКТА
 
SET_POS1        CALL COLOR_CURSOR               ;ПЕРЕРИСОВКА ЦВЕТНОЙ ПОЛОСКИ МЕНЮ
 
MAINLOP         LD HL,FLAGS_KEY
 
                RES 5,(HL)                      ;СБРОС НАЖАТЫХ КНОПОК
 
                LD A,(FLAGS)
 
                AND M_MOUSE_PRESENT             ;ПРОВЕРКА НАЛИЧИЯ МЫШИ
 
                JP Z,MAINNMO
 
                LD HL,(ARXY)                    ;СТАРАЯ КООРДИНАТА МЫШИ
 
                PUSH HL
 
                CALL MOUSE                      ;ОПРОС ПОРТОВ МЫШИ
 
                POP BC
 
                AND A
 
                SBC HL,BC
 
                JR Z,NO_SELECT                  ;НЕ БЫЛО ДВИЖЕНИЯ МЫШИ
 
                CALL MOUOPT                     ;ПРОВЕРКА НАВЕДЕНИЯ МЫШИ НА ЗАДАННОЕ ОКНО
 
NO_SELECT       LD BC,0XFADF
 
                IN A,(C)                        ;ОПРОС НАЖАТИЯ КНОПОК МЫШИ
 
                AND 7
 
                CP 6
 
                JR Z,PRESS_MOUSE                ;ЕСЛИ НАЖАТА ЛЕВАЯ КНОПКА МЫШИ
 
                CP 5
 
                JP Z,RESTART                    ;ЕСЛИ НАЖАТА ПРАВАЯ КНОПКА МЫШИ
 
                CALL PRINTTIME                  ;ОБНОВИЛИ ВРЕМЯ ЕСЛИ ИЗМЕНИЛОСЬ
 
                EI
 
                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 E,(IX+7)                     ;ВЗЯЛИ НОМЕР ПУНКТА КУДА ПОПАЛИ МЫШЬЮ
 
                BIT 7,E
 
                JR Z,CP_MOUSE5
 
                LD L,(IX+8)
 
                LD H,(IX+9)
 
                LD E,(HL)
 
CP_MOUSE5       LD D,0
 
                LD HL,(PRESSEDKEY)              ;АДРЕС СПИСКА ХОТКЕЕВ ТЕКУЩЕГО ОКНА
 
                ADD HL,DE                       ;АДРЕС ХОТКЕЯ ВЫБРАННОГО ПУНКТА
 
                LD DE,LAST_K
 
                LDI                             ;ИМИТАЦИЯ НАЖАТИЯ ЗАДАННОЙ КНОПКИ
 
                JR ENTER
 
                
 
MAINNMO         CALL PRINTTIME                  ;ОБНОВЛЕНИЕ ВРЕМЕНИ, ЕСЛИ В ОНО ОБНОВИЛОСЬ
 
                EI
 
                HALT
 
MAINQMO         LD A,(FLAGS_KEY)
 
                BIT 5,A                         ;ПРОВЕРКА НАЖАТИЯ КНОПОК КЛАВИАТУРЫ
 
                JP Z,MAINLOP                    ;ПРОДОЛЖАЕМ ОПРОС УПРАВЛЕНИЯ
 
                ROMCALL BREAK_KEY,ROM_RST82     ;ПРОВЕРКА НА BREAK
 
                JR C,SELECT_KEY                 ;ЕСЛИ BREAK НЕ НАЖАТ ПРОДОЛЖАЕМ
 
RESTART         DI
 
                CALL TRESTORE_CLINE
 
                LD A,1
 
                RET
 
 
 
SELECT_KEY      DI
 
                LD HL,SET_POS1
 
                PUSH HL
 
                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
 
                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)
 
 
 
;ПРОВЕРКА ХОТКЕЕВ В ТЕКУЩЕМ ОКНЕ
 
NOMAINKEYS      LD L,(IX+0X12)
 
                LD H,(IX+0X13)                  ;АДРЕС СПИСКА НАЖАТЫХ КНОПОК ТЕКУЩЕГО ОКНА
 
                LD C,A
 
                LD A,H
 
                OR L
 
                JP Z,MAINLOP                    ;ЕСЛИ СПИСКА НЕТ, ПРОДОЛЖАЕМ ОПРОС
 
                LD A,C
 
                LD C,(IX+2)
 
                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
 
                BIT 7,(IX+7)
 
                JR Z,ENTER1
 
                LD L,(IX+8)
 
                LD H,(IX+9)
 
                LD (HL),A
 
                INC HL
 
                LD (HL),A
 
                JR ENTER
 
 
 
ENTER1          LD (IX+7),A                     ;НОМЕР ПУНКТА В ОКНЕ
 
                LD (IX+8),A                     ;НОМЕР НАЖАТОЙ КЛАВИШИ ПО УКАЗАННОМУ СПИСКУ
 
ENTER           LD A,(FLAGS)
 
                AND M_MOUSE_PRESENT
 
                CALL NZ,TIMELP                  ;ОБНОВЛЕНИЕ ВРЕМЕНИ ЕСЛИ ОНО ИЗМЕНИЛОСЬ 
 
                CALL REST2X2                    ;СТЕРЛИ КУРСОР МЫШИ
 
                LD A,(IX+7)                     ;НОМЕР ИЗ СПИСКА КОТОРЫЙ ВЫЗВАТЬ
 
                BIT 7,A
 
                JR Z,JUMP2HL1
 
                LD L,(IX+8)
 
                LD H,(IX+9)
 
                LD A,(HL)
 
JUMP2HL1        LD L,(IX+0X0E)
 
                LD H,(IX+0X0F)                  ;ВЗЯЛИ СПИСОК АДРЕСОВ 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
 
 
 
TIMELP          CALL PRINTTIME
 
                LD A,0XFA
 
                IN A,(0XDF)                     ;КНОПКИ МЫШИ
 
                CPL
 
                AND 7
 
                JR NZ,TIMELP                    ;ПОКА НЕ ОТПУСТЯТ
 
                RET
 
 
 
CURSOR_UP       LD C,(IX+8)
 
                LD B,(IX+9)
 
                BIT 7,(IX+7)
 
                JR Z,CURSOR_UP3
 
                LD L,(IX+8)
 
                LD H,(IX+9)
 
                INC HL
 
                LD C,(HL)
 
                INC HL
 
                LD B,(HL)
 
CURSOR_UP3      LD A,B
 
                OR C
 
                RET Z
 
                DEC BC
 
                BIT 7,(IX+7)
 
                JR Z,CURSOR_UP2
 
                LD (HL),B
 
                DEC HL
 
                LD (HL),C
 
                DEC HL
 
                LD A,(HL)
 
                AND A
 
                JR Z,CURSOR_UP1
 
                DEC (HL)
 
                RET
 
 
 
CURSOR_UP2      LD (IX+8),C
 
                LD (IX+9),B
 
                LD A,(IX+7)
 
                AND A
 
                JR Z,CURSOR_UP1
 
                DEC (IX+7)
 
                RET
 
 
 
CURSOR_UP1      CALL REST2X2
 
                CALL RESTORE_CLINE
 
                CALL SCRDN
 
                LD E,(IX+1)
 
                INC E
 
DOWN1           LD D,(IX+0)
 
                INC D
 
                INC D
 
                EVOPORT WIN_P3,RAM_TEMP2
 
                LD L,(IX+8)
 
                LD H,(IX+9)
 
                BIT 7,(IX+7)
 
                JR Z,DOWN3
 
                DEC D
 
                INC HL
 
                LD A,(HL)
 
                INC HL
 
                LD H,(HL)
 
                LD L,A
 
DOWN3           LD BC,CPU3
 
                ADD HL,HL
 
                ADD HL,BC
 
                LD C,(HL)
 
                INC HL
 
                LD B,(HL)
 
                PUSH DE
 
                ROMCALL POSTF06,ROM_RST83
 
                ROMCALL READ_DIR,ROM_RST83
 
                LD DE,FILES_EXT
 
                ROMCALL CP_EXT,ROM_RST83
 
                EX AF,AF'
 
                LD BC,0X0B
 
                ADD HL,BC
 
                LD A,(HL)
 
                SBC HL,BC
 
                AND 0X10
 
                LD A,BLUE<<3+WHITE+BR_INK
 
                LD (OUT_NAME_FILE+1),A          ;ЕСЛИ ДИРЕКТОРИЯ ТО ЦВЕТ БЕЛЫЙ
 
                JR NZ,DOWN7
 
                EX AF,AF'
 
                LD L,A
 
                INC A
 
                JR Z,DOWN6
 
                LD A,L
 
DOWN6           LD HL,COLOR_EXT
 
                ADD A,L
 
                LD L,A
 
                ADC A,H
 
                SUB L
 
                LD A,(HL)
 
                ADD A,BLUE<<3+BR_INK
 
                LD (OUT_NAME_FILE+1),A
 
DOWN7           LD HL,BUF_256
 
                ROMCALL GET_LONGNAME,ROM_RST83
 
                POP DE
 
                CALL FILENAME8_3
 
                JP SET_ADR_ATR
 
 
 
CURSOR_DOWN     LD L,(IX+0X0A)
 
                LD H,(IX+0X0B)                  ;КОЛИЧЕСТВО ПУНКТОВ
 
                BIT 6,(IX+7)
 
                JR Z,CURSOR_DOWN6
 
                LD L,(IX+8)                     ;ПОЛУЧЕНИЕ КОЛИЧЕСТВА ПУНКТОВ           
 
                LD H,(IX+9)                     ;ИЗ УКАЗАННОГО АДРЕСА
 
                INC HL
 
                INC HL
 
                INC HL
 
                LD A,(HL)
 
                INC HL
 
                LD H,(HL)
 
                LD L,A                          ;КОЛИЧЕСТВО ПУНКТОВ В ЭТОМ МЕНЮ
 
CURSOR_DOWN6    LD A,H
 
                OR L
 
                RET Z
 
                BIT 7,(IX+7)
 
                JR Z,CURSOR_DOWN2
 
                LD E,(IX+8)
 
                LD D,(IX+9)                     ;ТЕКУЩИЙ НОМЕР
 
                EX DE,HL
 
                INC HL
 
                LD C,(HL)
 
                INC HL
 
                LD B,(HL)
 
                EX DE,HL
 
                JR CURSOR_DOWN3
 
 
 
CURSOR_DOWN2    LD C,(IX+8)
 
                LD B,(IX+9)
 
CURSOR_DOWN3    SCF
 
                SBC HL,BC
 
                RET Z
 
                INC BC
 
                BIT 7,(IX+7)
 
                JR Z,CURSOR_DOWN4
 
                EX DE,HL
 
                LD (HL),B
 
                DEC HL
 
                LD (HL),C
 
                DEC HL
 
                LD A,(IX+2)
 
                SUB 3
 
                CP (HL)
 
                JR Z,CURSOR_DOWN1
 
                INC (HL)
 
                RET
 
 
 
CURSOR_DOWN4    LD (IX+8),C
 
                LD (IX+9),B
 
                LD A,(IX+2)
 
                SUB 3
 
                CP (IX+7)
 
                JR Z,CURSOR_DOWN1
 
                INC (IX+7)
 
                RET
 
 
 
CURSOR_DOWN1    CALL REST2X2
 
                CALL RESTORE_CLINE
 
                CALL SCRUP
 
                LD A,(IX+1)
 
                ADD A,(IX+2)
 
                SUB 2
 
                LD E,A
 
                JP DOWN1
 
 
 
GET_XY          LD L,(IX+8)
 
                LD H,(IX+9)             ;ТЕКУЩИЙ НОМЕР
 
                BIT 7,(IX+7)
 
                JR Z,GETXY1
 
;ПОЛУЧЕНИЕ НОМЕРА ТЕКУЩЕГО ПУНКТА ИЗ УКАЗАТЕЛЯ
 
                INC HL
 
                LD E,(HL)
 
                INC HL
 
                LD D,(HL)               ;ТЕКУЩИЙ НОМЕР ИЗ УКАЗАННОГО АДРЕСА
 
                EX DE,HL
 
                BIT 6,(IX+7)
 
                JR Z,GETXY1
 
;ПОЛУЧЕНИЕ КОЛИЧЕСТВА ПУНКТОВ ИЗ УККАЗАТЕЛЯ
 
                EX DE,HL
 
                INC HL
 
                LD A,(HL)
 
                INC HL
 
                LD H,(HL)
 
                LD L,A                  ;КОЛИЧЕСТВО ПУНКТОВ ИЗ УКАЗАННОГО АДРЕСА
 
                EX DE,HL
 
                JR GETXY2
 
 
 
GETXY1          LD E,(IX+0X0A)
 
                LD D,(IX+0X0B)          ;КОЛ-ВО ПУНКТОВ
 
GETXY2          LD A,(IX+2)
 
                SUB 3
 
                LD C,A                  ;КОЛИЧЕСТВО ПУНКТОВ В ВЫСОТЕ ОКНА
 
                LD B,0
 
                LD A,D
 
                OR E
 
                LD A,C
 
                RET
 
 
 
;ПЕРЕМЕЩЕНИЕ НА СТРАНИЦУ ВВЕРХ
 
PAGEUP          CALL GET_XY
 
                RET Z
 
                XOR A
 
                SBC HL,BC
 
                EX DE,HL
 
                JR NC,PDUN0
 
PDU0            LD D,A
 
                LD E,A
 
                JR PDUN0
 
 
 
;ПЕРЕМЕЩЕНИЕ НА СТРАНИЦУ ВНИЗ
 
PAGEDN          CALL GET_XY
 
                RET Z
 
                EX DE,HL
 
                AND A
 
                SBC HL,BC
 
                ADD HL,BC
 
                EX DE,HL
 
                JR NC,PDN00
 
                DEC DE
 
                LD A,E
 
                JR PDUN0
 
 
 
PDN00           ADD HL,BC
 
                EX DE,HL
 
                SBC HL,DE
 
                ADD HL,DE
 
                JR Z,PDUN1
 
                JR NC,PDUN0
 
PDUN1           EX DE,HL
 
                DEC DE
 
PDUN0           BIT 7,(IX+7)
 
                JR Z,PDUN2
 
                LD L,(IX+8)
 
                LD H,(IX+9)
 
                LD (HL),A
 
                INC HL
 
                LD (HL),E
 
                INC HL
 
                LD (HL),D
 
                JR PDUN3
 
 
 
PDUN2           LD (IX+7),A
 
                LD (IX+8),E
 
                LD (IX+9),D
 
PDUN3           CALL RESTORE_CLINE
 
                JP OUT_TEK_DIR
 
 
 
PRINTTIME       DI
 
                LD H,0X0C
 
                CALL READCMOS
 
                AND 0X10
 
                RET Z                           ;ЕСЛИ ВРЕМЯ ЕЩЕ НЕ ОБНОВИЛОСЬ, ВЫХОДИМ НИЧЕГО НЕ ВЫВОДЯ
 
                LD BC,TXT_TIME                  ;ЧТЕНИЕ И ПРЕОБРАЗОВАНИЕ ВРЕМЕНИ
 
                LD H,4
 
                CALL READCMOS                   ;ПРОЧИТАЛИ ЧАСЫ
 
                CALL BYTE2TXT                   ;СКОНВЕРТИЛИ ЧАСЫ С УКЛАДКОЙ В БУФЕР
 
                LD A,(BC)
 
                XOR 0X1A                        ;КОНВЕРСИЯ МИГАЮЩЕГО ДВОЕТОЧИЯ
 
                LD (BC),A
 
                INC BC
 
                LD H,2
 
                CALL READCMOS                   ;ПРОЧИТАЛИ МИНУТЫ
 
                CALL BYTE2TXT                   ;СКОНВЕРТИЛИ ЧАСЫ С УКЛАДКОЙ В БУФЕР
 
                LD A,(BC)
 
                XOR ':'-' '                     ;КОНВЕРСИЯ МИГАЮЩЕГО ДВОЕТОЧИЯ
 
                LD (BC),A
 
                INC BC
 
                LD H,0
 
                CALL READCMOS                   ;ПРОЧИТАЛИ СЕКУНДЫ
 
                CALL BYTE2TXT
 
                LD BC,TXT_DATA                  ;ДАЛЕЕ ЧТЕНИЕ И ПРЕОБРАЗОВАНИЕ ДАТЫ
 
                LD H,7
 
                CALL READCMOS
 
                CALL BYTE2TXT
 
                INC BC
 
                LD H,8
 
                CALL READCMOS
 
                CALL BYTE2TXT
 
                INC BC
 
                LD H,9
 
                CALL READCMOS
 
                CALL BYTE2TXT
 
                LD HL,BUFF_TIME                 ;ПЕЧАТАЕМ ВРЕМЯ ИЗ БУФЕРА
 
                JP ITPRINT_MESSAGE
 
 
 
;ПЕРЕВОД "A" В ДЕСЯТИЧКУ И В ТЕКСТ
 
A2TXT           PUSH HL
 
                LD L,A
 
                LD H,0
 
                LD DE,10
 
                XOR A
 
                DEC A
 
                INC A
 
                SBC HL,DE
 
                JR NC,$-3
 
                ADD HL,DE
 
                ADD A,"0"
 
                LD D,A
 
                LD A,L
 
                ADD A,"0"
 
                POP HL
 
                LD (HL),D
 
                INC HL
 
                LD (HL),A
 
                INC HL
 
                RET
 
 
 
BYTE2TXT        LD L,A
 
                LD H,"0"
 
                RRCA
 
                RRCA
 
                RRCA
 
                RRCA
 
                AND 0X0F
 
                ADD A,H
 
                LD (BC),A
 
                INC BC
 
                LD A,L
 
                AND 0X0F
 
                ADD A,H
 
                LD (BC),A
 
                INC BC
 
                RET
 
 
 
;ВЫХОД ИЗ MAGIC
 
CONTINUE_PROG   DI
 
                LD SP,(OLD_STACK)
 
                XOR A
 
                RET
 
 
 
;ПЕРЕЗАПУСК MAGIC МЕНЮ С ПОЛНОЙ ПЕРЕРИСОВКОЙ ЭКРАНА
 
RESTART_MAIN    DI
 
                LD SP,(OLD_STACK)
 
                LD A,1
 
                RET
 
 
 
;ВЫХОД ИЗ ОТЛАДЧИКА
 
TRACER_DBG      DI
 
                LD SP,(OLD_STACK)
 
                LD A,2
 
                RET
 
 
 
SETUP           LD IX,SETUP_MENU
 
                CALL ITWINW
 
                JP SET_ADR_ATR
 
 
 
;ПЕРЕБОР TURBO РЕЖИМОВ С ЗАПИСЬЮ В CMOS И ИЗМЕНЕНИЕМ ПОСЛЕ ВЫХОДА ИЗ NMI
 
;0-7MHZ 1-3,5MHZ 2-14,0MHZ
 
SET_TURBO       DI
 
                LD H,CMOS_BYTE_01
 
                CALL READCMOS
 
                LD E,L                          ;TURBO AND MEMORY MODE
 
                LD H,CMOS_BYTE_00
 
                CALL READCMOS
 
                LD D,L                          ;TURBO 14
 
                RLCA
 
                LD C,A
 
                LD A,E
 
                RLCA
 
                LD A,C
 
                RLA
 
                AND 3
 
                INC A                           ;СМЕНИЛИ TURBO РЕЖИМ
 
                CP 3
 
                JR C,SETTURBO1
 
                XOR A                           ;ЕСЛИ ПЕРЕШЛИ ЧЕРЕЗ 0, ТО ВЫСТАВИЛИ РЕЖИМ 14MHZ
 
SETTURBO1       LD C,A
 
                PUSH BC
 
                AND A
 
                RES 7,E                         ;TURBO 7        0
 
                RES 7,D                         ;TURBO 14=7MHZ  0
 
                JR Z,SETTURBO3
 
                DEC A
 
                SET 7,E                         ;TURBO 7        1
 
                RES 7,D                         ;TURBO 14=3,5   0
 
                JR Z,SETTURBO3
 
                RES 7,E                         ;TURBO 7        0
 
                SET 7,D                         ;TURBO 14=14    1
 
SETTURBO3       LD H,CMOS_BYTE_00
 
                LD L,D
 
                PUSH DE
 
                CALL IWRITECMOS
 
                POP DE
 
                LD H,CMOS_BYTE_01
 
                LD L,E
 
                CALL IWRITECMOS
 
                POP BC
 
                LD A,C
 
                AND A
 
                LD DE,%0000000000000000         ;7MHZ
 
                JR Z,SETTURBO4
 
                DEC A
 
                LD DE,%0001000000000000         ;3,5MHZ
 
                JR Z,SETTURBO4
 
                LD DE,%0000000000001000         ;14MHZ
 
SETTURBO4       LD A,(B_PORT77)
 
                AND %11110111
 
                OR E
 
                LD (B_PORT77),A
 
                LD A,(N_EFF7)
 
                AND %11101111
 
                OR D
 
                LD (N_EFF7),A
 
SETANDPRINT     CALL SETUP4SEL
 
                LD HL,TXT_SETUPMENU
 
                JP ITPRINT_MESSAGE
 
 
 
;ПЕРЕБОР РЕЖИМОВ ПАМЯТИ С ЗАПИСЬЮ В CMOS И ИЗМЕНЕНИЕМ ПОСЛЕ ВЫХОДА ИЗ NMI
 
SET_MEMORY      DI
 
                LD H,CMOS_BYTE_01
 
                CALL READCMOS
 
                AND 3
 
                INC A
 
                CP 3
 
                JR C,SETMEMORY1
 
                XOR A
 
SETMEMORY1      LD C,A
 
                LD A,L
 
                AND %11111100
 
                OR C
 
                LD L,A
 
                CALL IWRITECMOS
 
                JR SETANDPRINT
 
 
 
        IFDEF REZIDENT
 
;ВКЛЮЧЕНИЕ/ВЫКЛЮЧЕНИЕ РЕЗИДЕНТА HONEY COMANDER
 
SET_REZIDENT    DI
 
                LD H,CMOS_BYTE_01
 
                CALL READCMOS
 
                XOR M_REZIDENT
 
                LD L,A
 
                CALL IWRITECMOS
 
                JR SETANDPRINT
 
 
 
KILL_REZID      DI
 
                LD H,CMOS_BYTE_03
 
                CALL READCMOS
 
                XOR M_KILL_REZIDENT
 
                LD L,A
 
                CALL IWRITECMOS
 
                JR SETANDPRINT
 
        ENDIF;REZIDENT
 
 
 
;ИЗМЕНЕНИЕ ТЕКСТА В МЕНЮ
 
SETUP4SEL       DI
 
                LD H,CMOS_BYTE_01
 
                CALL READCMOS
 
                LD E,L                          ;TURBO AND MEMORY MODE
 
                LD H,CMOS_BYTE_00
 
                CALL READCMOS
 
                LD D,L                          ;TURBO 14
 
                RLCA
 
                LD C,A
 
                LD A,E
 
                RLCA
 
                LD A,C
 
                RLA
 
                AND 3
 
                CP 3
 
                JR C,SETUP4SEL1
 
                DEC A
 
SETUP4SEL1      ADD A,A
 
                ADD A,A
 
                LD HL,TXT_TURBO
 
                LD C,A
 
                LD B,0
 
                ADD HL,BC
 
                PUSH DE
 
                LD DE,TURBO_MODE
 
                LDI
 
                LDI
 
                LDI
 
                LDI
 
                EX DE,HL
 
                LD (HL),2
 
                POP DE
 
                PUSH DE
 
                LD A,E
 
                AND 3
 
                LD C,A
 
                LD B,0
 
                LD HL,TXT_MEMORY
 
                ADD HL,BC
 
                ADD HL,BC
 
                ADD HL,BC
 
                LD DE,MEMORY_MODE
 
                LDI
 
                LDI
 
                LDI
 
                EX DE,HL
 
                LD (HL),2
 
                POP DE
 
;ДЛЯ РЕЗИДЕНТА HONEY COMANDER
 
        IFDEF REZIDENT
 
                LD A,E
 
                AND M_REZIDENT
 
                LD HL,TXT_ONOFF
 
                JR NZ,.ON
 
                LD HL,TXT_ONOFF+3
 
.ON             LD DE,REZIDENT_MODE
 
                LDI
 
                LDI
 
                LDI
 
                EX DE,HL
 
                LD (HL),2
 
                LD H,CMOS_BYTE_03
 
                CALL READCMOS
 
                AND M_KILL_REZIDENT
 
                LD HL,TXT_ONOFF
 
                JR NZ,.ON1
 
                LD HL,TXT_ONOFF+3
 
.ON1            LD DE,TXT_KILLREZID
 
                LDI
 
                LDI
 
                LDI
 
                EX DE,HL
 
                LD (HL),2
 
        ENDIF;REZIDENT
 
                RET
 
 
 
;ОЖИДАНИЕ НАЖАТИЯ И ОТПУСКАНИЯ ЛЮБОЙ КЛАВИШИ
 
ANY_KEYS        XOR A
 
                IN A,(0XFE)
 
                CPL
 
                AND 0X1F
 
                JR Z,ANY_KEYS
 
ANYKEYS1        XOR A
 
                IN A,(0XFE)
 
                CPL
 
                AND 0X1F
 
                JR NZ,ANYKEYS1
 
                RET