;LAST UPDATE: 10.03.2020 savelij
TITLE "menu_execute.a80"
;[ЗАГРУЗКА С ЛЕНТЫ]
TAPELOAD LD H,CMOS_BYTE_00
CALL READCMOS
AND M_EMUL_TAPE
JP NZ,EMULTAPLOAD
LD IX,TAPE_LDT
RST8 _WINW
TAPELOAD1 CALL MEMSET ;ВЫСТАВИЛИ РЕЖИМЫ ПАМЯТИ И ТУРБЫ
LD HL,BAS4TAPE
LD DE,0X5C3A
LD BC,EBAS4TAPE-BAS4TAPE
LDIR ;ПЕРЕМЕННЫЕ БАСИКА СДЕЛАЛИ FOR ONLY TAPE
LD HL,ERROR_TAPE
PUSH HL
LD (0X5C3D),SP ;ПЕРЕХВАТ ОШИБКИ ЕСЛИ ЕСТЬ ЖЕЛАНИЕ ВЕРНУТЬСЯ
LD HL,0XFF58
LD SP,HL ;ВЫСТАВИЛИ СТЕК А ЛЯ БЕЙСИК 48
LD DE,0X3E08
LD BC,0XA8
EX DE,HL
LDIR ;ПОЛОЖИЛИ ШРИФТ UDG
LD HL,0X3E00
PUSH HL
LD HL,0X1303
PUSH HL
LD HL,0X1B76
PUSH HL ;ЗАПОЛНИЛИ ДНО ПЕРЕСТАВЛЕННОГО СТЕКА
LD IX,0X5CD1 ;УСТАНОВИЛИ ДЛЯ ЗАГРУЗКИ С ЛЕНТЫ
JP 0X073E ;ПЕРЕХОД НА ЗАГРУЗКУ С ЛЕНТЫ
;[ПЕРЕХВАТ ОШИБКИ ИЛИ БРЕКА ДЛЯ ВОЗВРАТА]
ERROR_TAPE LD HL,BAS_VAR
LD DE,0X5C00
LD BC,EBAS_VAR-BAS_VAR
LDIR ;ВЕРНУЛИ ТЫРДОСНЫЕ ПЕРЕМЕННЫЕ НА МЕСТО
XOR A
LD (0X5C3D),BC ;СНЯЛИ ПЕРЕХВАТЧИК ОШИБОК
OUT (0XFE),A
DEC A
LD (gFenv),A
CALL GLUDIN ;ПОГУДЕЛИ В АУ ЧТО БЫЛА ОШИБКА
LD A,1
LD (gFenv),A
JP RESTART ;ПЕРЕЗАПУСК HE GLUK
;[СОЗДАНИЕ РАМ ДИСКА НА 640К]
RAM_640 LD HL,RESTART
PUSH HL
CREATE_TRDRAM LD HL,636*4 ;RAM DISK НА 640 КИЛОБАЙТ
; JR KILRAMd
;СОЗДАНИЕ РАМ ДИСКА НА 896 КИЛ
;RAM_892 LD HL,RESTART
; PUSH HL
; LD HL,892*4 ;RAM DISK НА 896 КИЛОБАЙТ
KILRAMd LD (SECFREE),HL ;ВЫСТАВИЛИ ПЕРЕМЕННУЮ КОЛИЧЕСТВА СЕКТОРОВ НА RAM DISK
DI
PEC_ON M_SHADOW_BF
LD A,RAM_RAMDISK+1
LD BC,WIN_P2
OUT (C),A
LD HL,0X8000
LD D,H
LD E,L
INC DE
LD BC,0X0FFF
LD (HL),L
LDIR ;ОЧИСТИЛИ СТРАНИЦУ TR-DOS ДИРЕКТОРИИ
LD HL,DSKINFO
LD DE,0X88E1
LD C,DSK_END-DSKINFO
LDIR ;ПЕРЕНЕСЛИ ШАБЛОН ДЛЯ 9 СЕКТОРА ДИРЫ
LD A,ZXSTD_CPU2;0XFD
LD BC,WIN_P2
OUT (C),A
PEC_OFF M_SHADOW_BF
JP CREATE_TRD640
;[СБРОС NEOGS]
RESETNGS LD A,0X80
OUT (0X33),A
JP RESTART
;[FILE NOT FOUND]
FILE_NONE LD IX,FILENONE
RST8 _WINW
JP STUPID1
;[ПРОВЕРКА ВИРТУАЛЬНОГО ПРИВОДА]
CMP_VIRTUAL LD H,VIRT_REAL_DRIVE
CALL READCMOS
LD A,(DRV_SYM)
LD D,A ;НОМЕР ТЕКУЩЕГО РЕАЛЬНОГО ДИСКОВОДА
LD A,L
RRCA
RRCA
AND 3 ;НОМЕР РЕАЛЬНОГО ДИСКОВОДА ИЗ CMOS
CP D
JR NZ,PRT_NONETRDOS
LD IX,ERR_VIRTUAL
JR PRT_NONETRDOS1
PRT_NONETRDOS LD IX,NONETRDOS
PRT_NONETRDOS1 RST8 _WINW
JR STUPID1
;[ВЫВОД ПОМОЩИ]
VIEW_HELP LD IX,WIN_HELP
RST8 _WINW
VIEWHELP1 CALL PRINTTIME
EI
HALT
BIT 5,(IY+1)
CALL Z,CP_TIME_KOSHAK
JR Z,VIEWHELP1
RES 5,(IY+1)
JR STUPID1
LDFDI_ERROR LD IX,LDFDIERROR
RST8 _WINW
JR STUPID1
_STUPID LD IX,MSTUPID
CALL DRAWWIN
LD HL,_STUPID
LD (DSTUPID),HL
STUPID1 LD SP,0
TEK_SP EQU $-2
CALL SET_7FFD_0
EI
CALL RESET_VG
CALL EXIT4ERROR
; LD A,0XFF
; LD (gFenv),A
; CALL GLUDIN ;HL
; LD A,1
; LD (gFenv),A
JP RESTART
;[ПЕРЕХОДИЛКА В БАСИК128]
BAS128 CALL SYSTEM
CALL MEMSET
DI
CALL INIT_LOADTAPE
XOR A
CALL SET_7FFD
RST 0
;[СБРОС УКАЗАТЕЛЯ ЗАГРУЗЧИКА TAPE]
INIT_LOADTAPE PEC_ON M_SHADOW_BF
LD BC,WIN_P2
XOR A
OUT (C),A
LD HL,0X8000
LD (HL),A
INC L
LD (HL),A
INC L
LD (HL),A
LD B,HIGH (WIN_A2)
LD A,0X7D
OUT (C),A
PEC_OFF M_SHADOW_BF
RET
;[ПЕРЕХОДИЛКА В БАСИК48]
BAS48 CALL SYSTEM
CALL MEMSET
CALL INIT_LOADTAPE
LD A,0X30
CALL SET_7FFD
RST 0
;[ПЕРЕХОДИЛКА В ТЫРДОС]
DOS128 CALL SYSTEM
CALL MEMSET
LD IX,0
JP DOSIX
;МЕНЮХА ЗАЧИСТКИ СТРАНИЦ, ФОРМАТИРОВАНИЯ РАМДИСКА И ДИСКЕТНЫЙ КОПИР
_KILLS LD IX,MKILLS
RST8 _WINW
JP _RULILKA
;[СБРОС В BASIC 48 СО СТАНДАРТНОЙ ПРОШИВКОЙ ПРИ ВЫКЛЮЧЕННОМ ТУРБО РЕЖИМЕ]
BAS48STD DI
CALL SET_EMU_TAPE
LD BC,PENT_CONF
LD A,0X14
OUT (C),A
LD BC,CONF_128
LD A,0X30
OUT (C),A
PEC_ON M_SHADOW_BF
ATMPORT WIN_A0,0X3F
EVOPORT WIN_P0,0
LD HL,0
LD (HL),H
INC L
LD (HL),H
INC L
LD (HL),H
ATMPORT WIN_A0,ROM_BAS48_STD
PEC_OFF M_SHADOW_BF
JP 0
;[СБРОС В BASIC 128 СО СТАНДАРТНОЙ ПРОШИВКОЙ ПРИ ВЫКЛЮЧЕННОМ ТУРБО РЕЖИМЕ]
BAS128STD DI
CALL SET_EMU_TAPE
LD BC,PENT_CONF
LD A,0X14
OUT (C),A
PEC_ON M_SHADOW_BF
ATMPORT WIN_A0,0X3F
EVOPORT WIN_P0,0
LD HL,0
LD (HL),H
INC L
LD (HL),H
INC L
LD (HL),H
ATMPORT WIN_A0,ROM_BAS48_128
LD BC,CONF_128
XOR A
OUT (C),A
ATMPORT WIN_A0,ROM_BAS128_STD
PEC_OFF M_SHADOW_BF
JP 0
;[HDD BOOT]
HDD_BOOT LD HL,ADR_CAT
PUSH HL
RST8 _COM_DEV,_COMHDDN,_DEV_INIT
LD A,H
POP HL
AND A
JR NZ,HDDBOOT1
HDDBOOT4 PUSH HL
CALL MEMSET
POP DE
PUSH DE
LD HL,HDDBOOT2
LD BC,EHDDBOOT2-HDDBOOT2
LDIR
RET
HDDBOOT1 LD IX,HDDBOOT_ERROR
RST8 _WINW
JP STUPID1
HDDBOOT2 LD HL,0X6000 ;ГРУЗИТЬ БУДЕМ КАК И БЫЛ АДРЕС
PUSH HL ;ПОСЛЕ ЗАГРУЗКИ ЗАПУСКАЕМ ЗАГРУЖЕННОЕ
LD BC,0
LD DE,2
LD A,0X30
RST8 _COM_DEV,_COMHDDN,_DEV_READ
RET
LD DE,2 ;ГРУЗИМ НАЧИНАЯ С СЕКТОРА 2 ИБО LBA
LD BC,0XFF00+PN_1F6
LD A,0XE0 ;ВЫБРАЛИ МАСТЕР И LBA РЕЖИМ
OUT (C),A
LD C,PN_1F5
OUT (C),D
LD C,PN_1F4
OUT (C),D
LD C,PN_1F3
OUT (C),E
LD C,PN_1F2
LD A,0X30 ;ГРУЗИМ СЕКТОРОВ КАК И БЫЛО
OUT (C),A
EX AF,AF' ;СПРЯТАЛИ КОЛИЧЕСТВО СЕКТОРОВ ЗАГРУЗКИ
LD C,PN_1F7
LD A,0X20
OUT (C),A ;КОМАНДА ЧТЕНИЯ
LD C,PN_1F7
HDDRD1_ IN A,(C)
AND 0X88
CP 8
JR NZ,HDDRD1_
EX AF,AF'
HDDRD2_ EX AF,AF'
XOR A
LD C,PN_1F0
READSC1_ IN E,(C)
INC C
IN D,(C)
DEC C
LD (HL),E
INC HL
LD (HL),D
INC HL
DEC A
JR NZ,READSC1_
LD C,PN_1F7
HDDRD3_ IN A,(C)
AND 0X80
JR NZ,HDDRD3_
EX AF,AF'
DEC A
JR NZ,HDDRD2_
RET
EHDDBOOT2
include "hdd_cd_boot.a80"
HDDRDLN EQU $-HDDREAD
;[CD BOOT]
CDBOOT XOR A
CALL CLS
CALL MEMSET
CALL HDDBINI
EI
JP CDBOOTGO
UMOUNTIMAGE RST8 _MOUNTER,_GET_VIRT_BITS
AND 0X0F
JP Z,RESTART
LD IX,WDISMOUNT
RST8 _WINW
JP _RULILKA ;ВОЗВРАЩАЕМСЯ К ОБЩЕМУ УПРАВЛЕНИЮ
DISMOUNT_A XOR A
DISMOUNT_DRV RST8 _MOUNTER,_CLOSEMOUNT
JP RESTART
DISMOUNT_B LD A,1
JR DISMOUNT_DRV
DISMOUNT_C LD A,2
JR DISMOUNT_DRV
DISMOUNT_D LD A,3
JR DISMOUNT_DRV
;[СБРОС CMOS]
RESET_CMOS RST8 _CMOS_RW,_CLEAR_CMOS
CALL SET_MODES
JP RESTART
;[УСТАНОВКА ЗАДЕРЖКИ ДО ОПРЕДЕЛЕНИЯ HDD]
HDDTIMEOUT LD H,HDD_TIMEOUT
CALL READCMOS
LD E,A
AND 0X0F
INC A
CP 10
JR C,HDDTIMEOUT1
XOR A
HDDTIMEOUT1 LD D,A
LD A,E
AND 0XF0
OR D
LD L,A
CALL WRITECMOS
AND 0X0F
ADD A,'0'
LD (TXT_HDDTIMEOUT),A
JR REPRINT_MENU
IF 0
;[УСТАНОВКА ЗАДЕРЖКИ ЗАПУСКА SCREENSAVER]
SCRSAVTIMEOUT LD H,HDD_TIMEOUT
CALL READCMOS
LD E,A
AND 0XF0
ADD A,0X10
CP 0XA0
JR C,.L0
XOR A
.L0 LD D,A
LD A,E
AND 0X0F
OR D
LD L,A
CALL WRITECMOS
AND 0XF0
RRCA
RRCA
RRCA
RRCA
LD (TIMEOUTSCRSAV),A
ADD A,'0'
LD (TXT_SCRSAVDELAY),A
JR REPRINT_MENU
ENDIF
;[УСТАНОВКА РАЗРЕШЕНИЯ/ЗАПРЕЩЕНИЯ ОЗВУЧКИ КЛАВИАТУРЫ]
SOUND_KEYS LD C,M_SOUNDKEYS
LD HL,SNDKEYS_STAT
SET_MENU PUSH HL
LD H,CMOS_BYTE_01
SET_MENU1 CALL READCMOS
XOR C
LD L,A
CALL WRITECMOS
AND C
POP HL
CALL SET_ONOFF
REPRINT_MENU LD HL,SETUPERTXT
RST8 _PRINT_MESSAGE
CALL REST_COLCURS
RST8 _COM_DEV,_CONTROL_SD
JP _RULILKA
;[УСТАНОВКА РАЗРЕШЕНИЯ/ЗАПРЕЩЕНИЯ ДОСТУПА К SD КАРТЕ NEOGS]
ACS_SDNGS LD C,M_ACCESSSDG
LD HL,ACCSSDG_STAT
JR SET_MENU
;[УСТАНОВКА ВЫБОРА ДРАЙВЕРА ПРИНТЕРА]
AYPRN_SETUP LD C,M_TYPE_FONT
LD HL,ETXT_AYPRINTER
JR SET_MENU
;[ВКЛЮЧЕНИЕ/ВЫКЛЮЧЕНИЕ АВТОСТАРТА TAP ФАЙЛА ПРИ ВЫБОРЕ В FILE BROWSER]
AUTO_TAPE LD C,M_AUTO_TAPE
LD HL,TXT_AUTOTAPE
PUSH HL
LD H,CMOS_BYTE_00
JR SET_MENU1
;для резидента HONEY COMANDER
IFDEF REZIDENT
;включение/выключение резидента
REZID_SETUP LD C,M_REZIDENT
LD HL,TXT_REZIDENT
JR SET_MENU
;включение/выключения порчи резидента при запуске
KILL_REZID LD C,M_KILL_REZIDENT
LD HL,TXT_KILLREZID
PUSH HL
LD H,CMOS_BYTE_03
JR SET_MENU1
ENDIF;REZIDENT
;[УСТАНОВКА ПЕРЕД ВЫВОДОМ МЕНЮ SETUP]
SETUPM LD IX,SETUPER
LD H,CMOS_BYTE_01
CALL READCMOS
LD B,A
AND M_SOUNDKEYS
LD HL,SNDKEYS_STAT
CALL SET_ONOFF
LD A,B
AND M_ACCESSSDG
LD HL,ACCSSDG_STAT
CALL SET_ONOFF
LD H,CMOS_BYTE_00
CALL READCMOS
AND M_AUTO_TAPE
LD HL,TXT_AUTOTAPE
CALL SET_ONOFF
LD H,HDD_TIMEOUT
CALL READCMOS
LD D,A
AND 0X0F
ADD A,'0'
LD (TXT_HDDTIMEOUT),A
LD A,D
AND 0XF0
RRCA
RRCA
RRCA
RRCA
ADD A,'0'
; LD (TXT_SCRSAVDELAY),A
RST8 _WINW
JP _RULILKA
;[ATM CP/M]
ATM_CPM EI
HALT
DI
PEC_ON M_SHADOW_BF
LD HL,CPM_PAGES
LD DE,0X3F
ATM_CPM1 LD BC,CONF_128
OUT (C),D
LD BC,LOW (WIN_A3)
ATM_CPM2 OUTI
LD A,B
SUB E
LD B,A
JR NZ,ATM_CPM2
LD A,D
XOR 0X10
LD D,A
JR NZ,ATM_CPM1
LD SP,0X8000
LD BC,0X177
LD A,6
OUT (C),A
PEC_OFF M_SHADOW_BF
JP 0X000C
CPM_PAGES DB 3!0X7F,2!0X7F,4!0X7F,0!0X7F
DB 3!0X7F,2!0X7F,5!0X7F,ROM_ATMCPM
;[УСТАНОВКА РАЗРЕШЕНИЯ/ЗАПРЕЩЕНИЯ ЭМУЛЯЦИИ ЛЕНТЫ]
SET_EMU_TAPE LD H,CMOS_BYTE_00
CALL READCMOS
AND M_EMUL_TAPE
RET Z
LD BC,BREAK_LOW_WR
LD A,LOW (ADRBRK_EMUTAP)
OUT (C),A
LD B,HIGH (BREAK_HIGH_WR)
LD A,HIGH (ADRBRK_EMUTAP)
OUT (C),A
PEC_ON M_BREAK_BF
RET
include sdcardboot.a80
SONGLN CALL START_SONGLN
JP RESTART
START_SONGLN DI
PUSH IX
PUSH IY
LD A,0X11
CALL SET_7FFD
LD A,0X10
CALL SET_EFF7
LD HL,0X4000
LD DE,0XE000
LD BC,0X1B00
LDIR
LD HL,0XD000
LD DE,0XD001
LD BC,0X1000
LD (HL),0
LDIR
SONGLN1 XOR A
IN A,(0XFE)
CPL
AND 0X1F
JR NZ,SONGLN1
PEC_ON M_SHADOW_BF
EVOPORT WIN_A0,ROM_RST82
CALL UNP_SONGLN
EVOPORT WIN_A0,ROM_BAS48|0X80
PEC_OFF M_SHADOW_BF
CALL 0XC000
LD HL,0XE000
LD DE,0X4000
LD BC,0X1B00
LDIR
LD HL,0XC000
LD DE,0XC001
LD BC,0X3FFF
LD (HL),0
LDIR
LD A,0X10
CALL SET_7FFD
XOR A
CALL SET_EFF7
POP IY
POP IX
RET