;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