;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