;LAST UPDATE: 01.12.2014 savelij
include ../../macros.a80
include ../../define.a80
include ../../global_vars.a80
include ../../ports_ngs.a80
include ../../sdcomand.a80
include ../../fat_vars.a80
READ_7FFD MACRO
LD A,HIGH (RD_7FFD)
IN A,(LOW (RD_7FFD))
ENDM
CPU5 EQU CPU1
CPU6 EQU CPU2
WIN_A5 EQU WIN_A1
WIN_A6 EQU WIN_A2
WIN_P5 EQU WIN_P1
WIN_P6 EQU WIN_P2
_CMP_FONT EQU 0
TXTMODE_DEBUG EQU 0
H_FILES EQU 0X3C
V_FILES EQU 0X18
MAGIC_COLOR EQU BLUE<<3+WHITE+BR_INK
PHASE 0
JP $ ;0000
DUPL 0X0008-$,0XFF
JP $ ;0008
DUPL 0X0010-$,0XFF
JP $ ;0010
DUPL ADR_SEL_ROM-$,0XFF
OUT (C),A ;0014
NOP
RET
DUPL 0X0018-$,0XFF
JP $ ;0018
DUPL 0X001C-$,0XFF
JP RST8_DOS
DUPL 0X0020-$,0XFF
JP $ ;0020
DUPL 0X0024-$,0XFF
JP RST8PAGE0 ;0024
DUPL 0X0028-$,0XFF
JP $ ;0028
DUPL CONT_RST8-$,0XFF ;002C
JP NEXT_RST8
;[ПЕРЕХОД В СТРАНИЦУ 4 С ВОЗВРАТОМ]
DUPL 0X0030-$,0XFF
JP CALL2PAGE ;0030
;[ПРОДОЛЖЕНИЕ ОБРАБОТКИ НАЖАТИЯ MAGIC]
DUPL CONTINUE_MAGIC-$,0XFF ;0034
JP CONT_MAGIC
DUPL 0X0038-$,0XFF ;0038
; PUSH HL ;11
; LD HL,(ADR_INT) ;16
; EX (SP),HL ;19
; RET ;10=56
EI ;4
RET ;10=14
DUPL 0X003E-$,0XFF
EI
RET
;[ВЫХОД ИЗ RST8]
EXIT_RST8 LD BC,P4_EXIT_RST8 ;АДРЕС ВОЗВРАТА В ПОСЛЕДНЕЙ СТРАНИЦЕ RAM
PUSH BC
LD BC,WIN_P0
XOR A
JP ADR_SEL_ROM
;[ВХОД RST 8 ДЛЯ DOS]
RST8_DOS LD HL,ERST8_DOS
JP NEXT_RST
;[ВЫХОД RST 8 ДЛЯ DOS]
ERST8_DOS LD BC,WIN_A0
LD A,6
JP ADR_SEL_ROM
;[ОБРАБОТЧИК MAGIC]
DUPL 0X0066-$,0XFF
CONT_MAGIC NOP
DI
LD HL,N_77
CALL CONVERT_BPORT
CALL STORE_AY ;СОХРАНЕНИЕ СОСТОЯНИЯ РЕГИСТРОВ И ЗАГЛУШЕНИЕ AY
LD A,(CPU6+DEBUG_ONOFF)
AND TRACE_DBG
JP NZ,DEBUGGER
LD A,(N_BF)
AND BREAK_BF
JP Z,CONT_MAGIC2
LD HL,(NADRRET_L)
LD A,H
CP 5
JP NZ,CONT_MAGIC2
LD A,L
CP 0X6C
JP NC,CONT_MAGIC2
CP 0X67
JP C,CONT_MAGIC2
CALL MAINPAGE3_TAP
LD HL,(NREG_IXL)
LD (RREG_IXL),HL
LD HL,(NREG_E)
LD (RREG_E),HL
LD HL,(NREG_F)
LD (RREG_F),HL
PCALL EMULOADTAP,P_ADDONS
LD HL,(RREG_IXL)
LD (NREG_IXL),HL
LD HL,(RREG_E)
LD (NREG_E),HL
LD HL,0X56B
LD (NADRRET_L),HL
LD HL,(RREG_F)
LD (NREG_F),HL
JP CONTMAGIC3
DUPL 0X00FF-$,0XFF
DW 0X0038
;[ТАБЛИЦА ПЕРЕХОДОВ НА ДЛЯ RST 8]
CODE_TABL DW AY_PRN_INIT_ ;40
DW AY_PRN_A__ ;41
DW AY_PRN_TOKEN_ ;42
DW AY_PRN_SCR_ ;43
DW TAPE_INIT_ ;44
DW TAPE_EMUL_ ;45
DW WINW_ ;46
DW PRINT_MESSAGE_ ;47
DW PRINT_A_ ;48
DW SCRUP_ ;49
DW SCRDN_ ;4A
DW SET_MODE_ ;4B
DW RESERVED ;4C
DW RESERVED ;4D
DW RESERVED ;4E
DW RESERVED ;4F
DW COM_DEV ;50
DW COM_FAT ;51
DW SORT_FINDFILES ;52
DW MOUNTER ;53
DW INST_FATBOOT_ ;54
DW CMOS_RW_ ;55
DW SETUP_PAL_ ;56
ECODE_TABL
;===============
;[ВХОД В ОСНОВНОЕ МЕНЮ MAGIC ЕСЛИ НЕ ПЕРЕХВАЧЕНО ОТЛАДЧИКОМ]
CONT_MAGIC2 LD BC,CONF_128
; LD A,(N_7FFD)
READ_7FFD
AND ZX_SCREEN!0XFF
OUT (C),A ;ВКЛЮЧЕНИЕ ОТОБРАЖЕНИЯ ЭКРАНА 0
LD A,(N_77)
CALL CMP_SCRMODE ;ПРОВЕРКА ВИДЕОРЕЖИМА ПРЕРВАННОЙ ПРОГРАММЫ
LD HL,EI_RET
LD (ADR_INT),HL ;ЗАГЛУШКА НА ПРЕРЫВАНИЯ
PCALL STORE_TXTMODE,P_ADDONS ;СОХРАНЕНИЕ ТЕКСТМОДНОГО ЭКРАНА
PCALL SCAN_FONT,P_ADDON2 ;ЧТЕНИЕ ТЕКУЩЕГО ЗАГРУЖЕННОГО ШРИФТА
PCALL RD_SET_PAL,P_ADDONS ;СОХРАНЕНИЕ И УСТАНОВКА ПАЛИТРЫ ДЛЯ MAGIC
;==========ВРЕМЯНКА
IF _CMP_FONT=1
CALL CMP_FONT ;ВРЕМЯНКА, ПРОВЕРКА СЧИТАННОГО ШРИФТА
RLA
LD (CMP_FONT_FLAG),A
ENDIF
;==========ВРЕМЯНКА
PCALL MAGIC_FONT,P_ADDONS ;УСТАНОВКА ВРЕМЕННОГО ШРИФТА ДЛЯ MAGIC РЕЖИМА
CONT_MAGIC1 LD A,(CPU6+DEBUG_ONOFF)
AND JMP_DBG
JP NZ,DEBUGGER
JP RESTART_NMI
SET_MAP_ PCALL SET_MAP,P_ERS
RET
SETUP_PAL_ PCALL SETUP_PAL,P_ADDONS
RESERVED RET
AY_PRN_INIT_ PCALL AY_PRN_INIT,P_ADDONS
RET
AY_PRN_A__ PCALL AY_PRN_A_,P_ADDONS
RET
AY_PRN_TOKEN_ PCALL AY_PRN_TOKEN,P_ADDONS
RET
AY_PRN_SCR_ PCALL AY_PRN_SCR,P_ADDONS
RET
TAPE_INIT_ PCALL TAPE_INIT,P_ADDONS
RET
TAPE_EMUL_ PCALL TAPE_EMUL,P_ADDONS
RET
WINW_ PCALL WINW,P_ADDONS
RET
PRINT_MESSAGE_ PCALL PRINT_MESSAGE,P_ADDONS
RET
PRINT_A_ PCALL PRINT_A,P_ADDONS
RET
SCRUP_ LD A,(RREG_A)
LD (SCROLL_MODE),A
PCALL SCRUP,P_ADDONS
RET
SCRDN_ LD A,(RREG_A)
LD (SCROLL_MODE),A
PCALL SCRDN,P_ADDONS
RET
SET_MODE_ PCALL SET_MODE,P_ADDONS
RET
INST_FATBOOT_ PCALL UNP_MICRO_BOOT,P_ADDON2
RET
CMOS_RW_ PCALL CMOS_RW,P_ADDONS
RET
RST8PAGE0 LD HL,ERST8PAGE0
JP NEXT_RST
ERST8PAGE0 LD BC,WIN_A0
XOR A
JP ADR_SEL_ROM
SELECT_MAPPER
; LD A,(R_7FFD)
READ_7FFD
AND 0X10
RET NZ
LD A,-8
ADD A,L
LD L,A
RET
;[RESTART_NMI]
RESTART_NMI PCALL CLS_TXTMODE8,P_ADDONS ;ОЧИСТКА ТЕКСТМОДНОГО ЭКРАНА
EVOPORT WIN_A5,P_RST8 ;ВКЛЮЧЕНИЕ ЭТОЙ СТРАНИЦЫ ROM ВО 2 ОКНО ПРОЕЦИРОВАНИЯ
LD HL,CPU5+TEXT_PORTREGS
PCALL PRTT_MSG,P_ADDONS ;ПЕЧАТЬ ТЕКСТА
PCALL PRT_PORTREGS,P_ADDONS ;ПЕЧАТЬ СОДЕРЖИМОГО ПОРТОВ СЧИТАННОЙ КОНФИГУРАЦИИ
;==========ВРЕМЯНКА
IF _CMP_FONT=1
LD HL,CPU5+TXT_VERIFY_FONT
PCALL PRTT_MSG,P_ADDONS ;ПЕЧАТЬ ТЕКСТА О ПРОВЕРКЕ ШРИФТА
LD A,(CMP_FONT_FLAG)
RRA
LD HL,CPU5+TXT_VERIFY_OK ;ТЕКСТ ЕСЛИ ВСЕ СОВПАЛО
JR NC,CONTMAGIC3_
LD HL,CPU5+TXT_VERIFY_ERR ;ТЕКСТ ЕСЛИ НЕ СОВПАЛО
CONTMAGIC3_ PCALL PRTT_MSG,P_ADDONS ;ПЕЧАТЬ ОБ ОШИБКЕ
ENDIF
;==========ВРЕМЯНКА
EVOPORT WIN_A5,P_ADDON1 ;ВКЛЮЧЕНИЕ ДОПОЛНЕНИЙ В 1 ОКНО ПРОЕЦИРОВАНИЯ
LD IX,MAIN_MENU
PCALL SETUP4SEL,P_ADDONS
PCALL ITWINW,P_ADDONS ;ВЫВОД ОКНА НА ТЕКСТМОДНЫЙ ЭКРАН
PCALL ITSELECTOR,P_ADDONS
AND A
JR Z,CONTMAGIC2
DEC A
JR Z,RESTART_NMI
DEC A
JR Z,CONTMAGIC3
CONTMAGIC2 XOR A
IN A,(0XFE)
CPL
AND 0X1F
JR NZ,CONTMAGIC2 ;ЖДЕМ ОТПУСКАНИЯ КНОПОК КЛАВИАТУРЫ
PCALL RESTORE_TXTMODE,P_ADDONS ;ВОССТАНОВЛЕНИЕ ТЕКСТМОДНОГО ЭКРАНА
PCALL RESTORE_FONT,P_ADDONS ;ВОССТАНОВЛЕНИЕ ШРИФТА
PCALL RESTORE_PAL,P_ADDONS ;ВОССТАНОВЛЕНИЕ ПАЛИТРЫ
CONTMAGIC3 CALL RESTORE_AY ;ВОССТАНОВЛЕНИЕ РАГИСТРОВ AY
LD BC,EXITNMISERVICE
PUSH BC
LD BC,WIN_P0
XOR A
JP ADR_SEL_ROM
;[ПРОДОЛЖЕНИЕ ОБРАБОТКИ RST8]
NEXT_RST8 LD HL,EXIT_RST8
NEXT_RST PUSH HL
LD (INTERNAL_SP),SP
LD HL,R_77
CALL CONVERT_BPORT
CALL P5_READ_BYTE
LD A,(R_77)
CALL CMP_SCRMODE
LD HL,B1_CPU2
CALL SELECT_MAPPER
NEXT_RST1 LD B,(HL)
INC HL
LD A,(HL)
AND 8
LD A,B
JR Z,NEXT_RST2
OR 0XC0
NEXT_RST2 LD (PAGE4READ),A
LD A,(NEXTBYTERST8)
AND 0X3F
LD L,A
LD H,0
ADD HL,HL
LD DE,CODE_TABL
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
EX DE,HL
JP (HL)
;[ПЕРЕКОНФИГУРАЦИЯ ОКОН ПРОЕЦИРОВАНИЯ]
;СТРАНИЦА ПЕРЕМЕННЫХ В ОКНО 1, ОСНОВНАЯ ПАМЯТЬ В ЗАВИСИМОСТИ ОТ АДРЕСА В ОКНА 2 И 3
RESETUP_WINS EXX
LD BC,WIN_P5
XOR A
OUT (C),A ;СТРАНИЦА ПЕРЕМЕННЫХ В ОКНО 1
LD HL,CPU3
ADD HL,SP
LD SP,HL ;СТЕК ТОЖЕ В ОКНО 1
LD HL,B1_CPU0-CPU5 ;ДЛЯ 0 МАППЕРА
CALL SELECT_MAPPER
RESETUPWINS1 EXX
LD BC,CPU6 ;АДРЕС ЧТЕНИЯ/ЗАПИСИ НА 0X8000 ВЫШЕ
LD A,H ;ПРОВЕРКА СТАРШЕГО БАЙТА АДРЕСА
EXX
CP 0X40
JR C,RESETUPWINS2 ;УСТАНОВКА ДЛЯ ОКОН 0,1
INC HL
INC HL
EXX
LD BC,CPU5 ;АДРЕС ЧТЕНИЯ/ЗАПИСИ НА 0X4000 ВЫШЕ
EXX
CP 0X80
JR C,RESETUPWINS2 ;УСТАНОВКА ДЛЯ ОКОН 1,2
INC HL
INC HL
EXX
LD BC,CPU0 ;АДРЕС ЧТЕНИЯ/ЗАПИСИ БЕЗ ИЗМЕНЕНИЙ
EXX
CP 0XC0
JR C,RESETUPWINS2 ;УСТАНОВКА ДЛЯ ОКОН 2,3
INC HL
INC HL
EXX
LD BC,CPU3 ;АДРЕС ЧТЕНИЯ/ЗАПИСИ НА 0X4000 НИЖЕ
EXX
LD B,HIGH (WIN_A6) ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ОКНА 2
CALL RESETUPWINS4
LD DE,0XFFF8
ADD HL,DE ;АДРЕС ГДЕ КОНФИГ СТРАНИЦ ОСНОВНОЙ ПАМЯТИ ЛЕЖИТ
JR RESETUPWINS5
RESETUPWINS2 LD B,HIGH (WIN_A6) ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ОКНА 2
CALL RESETUPWINS4
RESETUPWINS5 LD B,HIGH (WIN_A3) ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ОКНА 3
CALL RESETUPWINS4
EXX
RET
RESETUPWINS4 LD E,(HL) ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
INC HL ;УКАЗАНИЕ НА БАЙТ АДРЕСА ПОРТА
BIT 3,(HL)
JR NZ,RESETUPWINS3
SET 3,B
LD A,(HL)
AND 3
RRCA
RRCA
OUT (C),A ;СНАЧАЛА ПИШЕМ В ПОРТ XFF7
RES 3,B
RESETUPWINS3 INC HL
OUT (C),E ;ТЕПЕРЬ ПИШЕМ В ПОРТ X7F7
RET
;[ЧТЕНИЕ БАЙТА ИЗ ОБЛАСТИ ПАМЯТИ ВЫЗВАШЕЙ ПРОГИ]
P5_READ_BYTE PUSH HL
PUSH DE
PUSH BC
PUSH AF
LD A,(RADRRET_H) ;СТАРШИЙ БАЙТ АДРЕСА ОТКУДА ЧИТАТЬ
CP 0X40
JR NC,READBYTE_03
;ЕСЛИ АДРЕС ЧТЕНИЯ НИЖЕ 0X4000
LD HL,B1_CPU0 ;БАЙТЫ И АДРЕСА ПОРТОВ 0 МАППЕРА
CALL SELECT_MAPPER
READ_CPU0_01 LD D,(HL) ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
INC HL
LD A,(HL) ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА НУЖНОЙ СТРАНИЦЫ
AND HIGH (WIN_A5)
OR HIGH (WIN_P5) ;ПРЕОБРАЗОВАЛИ СТАРШИЙ БАЙТ АДРЕСА ДЛЯ ВКЛЮЧЕНИЯ В 1 ОКНЕ
LD B,A
LD C,LOW (WIN_A0) ;BC=АДРЕС ПОРТА
LD A,(R_77)
LD E,0X3F
AND 0X10 ;ОПРЕДЕЛЯЕМ DOS ИЛИ НЕ DOS
JR Z,READ_CPU0_02
DEC E
READ_CPU0_02 LD A,D
AND E
OUT (C),A ;ВКЛЮЧАЕМ ПАГУ BASIC ИЛИ DOS
LD DE,CPU5 ;СМЕЩЕНИЕ ДО 1 ОКНА ПРОЕЦИРОВАНИЯ
LD HL,(RADRRET_L) ;АДРЕС ОТКУДА ЧИТАТЬ
ADD HL,DE ;ЧИТАТЬ ЧЕРЕЗ 1 ОКНО ПРОЕЦИРОВАНИЯ
LD A,(HL) ;ПРОЧИТАЛИ БАЙТ
SBC HL,DE ;ВЕРНУЛИ АДРЕС БАЙТА
INC HL ;УВЕЛИЧИЛИ АДРЕС ВОЗВРАТА
LD (RADRRET_L),HL ;ВЕРНУЛИ АДРЕС ВОЗВРАТА
JR READBYTE_02
;ЕСЛИ АДРЕС ЧТЕНИЯ ВЫШЕ 0X4000
READBYTE_03 LD HL,B1_CPU0 ;БАЙТЫ И АДРЕСА ПОРТОВ 0 МАППЕРА
CALL SELECT_MAPPER
READBYTE_01 LD A,(RADRRET_H) ;СТАРШИЙ БАЙТ АДРЕСА ОТКУДА ЧИТАТЬ
AND 0XC0
LD C,A
RLCA
RLCA
RLCA
LD E,A
LD D,0 ;DE=СМЕЩЕНИЕ В ТАБЛИЦЕ БАЙТА И СТАРШЕГО БАЙТА СТРАНИЦЫ ЧТЕНИЯ
ADD HL,DE
LD D,(HL) ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
INC HL
LD A,(HL)
AND HIGH (WIN_A5)
OR HIGH (WIN_P5)
LD B,A
LD C,LOW (WIN_A5) ;BC=АДРЕС ПОРТА ДЛЯ 1 ОКНА ПРОЕЦИРОВАНИЯ
LD HL,(RADRRET_L) ;АДРЕС ОТКУДА ЧИТАТЬ
OUT (C),D ;ВКЛЮЧИЛИ СТРАНИЦУ ДЛЯ ЧТЕНИЯ БАЙТА
LD E,L ;МЛАДШИЙ БАЙТ АДРЕСА ЧТЕНИЯ
LD A,H
AND HIGH (WIN_A5)
OR HIGH (CPU5)
LD D,A ;СТАРШИЙ БАЙТ АДРЕСА ЧТЕНИЯ
LD A,(DE) ;ПРОЧИТАЛИ БАЙТ
INC HL ;УВЕЛИЧИЛИ АДРЕС ВОЗВРАТА
LD (RADRRET_L),HL ;ВЕРНУЛИ АДРЕС ВОЗВРАТА
READBYTE_02 LD (NEXTBYTERST8),A ;ПОЛОЖИЛИ ПРОЧИТАННЫЙ БАЙТ
CALL MAIN_MEM13 ;ВЕРНУЛИ СТРАНИЦЫ В 1 И 3 ОКНО ПРОЕЦИРОВАНИЯ
POP AF
POP BC
POP DE
POP HL
RET
LDIR_BYTES EXX
LD BC,INT_ONLY_RET
PUSH BC
LD BC,LDIR__BYTES
PUSH BC
LD BC,WIN_P0
XOR A
JP ADR_SEL_ROM
;[ВОССТАНОВЛЕНИE СТРАНИЦ В ОКНАХ ПРОЕЦИРОВАНИЯ 1 И 3]
MAIN_MEM13 LD HL,B1_CPU1 ;ДЛЯ 0 МАППЕРА
CALL SELECT_MAPPER
MAINMEM1 CALL MAINMEM3 ;ВЕРНУЛИ ДЛЯ 1 ОКНА ПРОЕЦИРОВАНИЯ
INC HL ;ДАЛЕЕ ВОЗВРАЩАЕМ ДЛЯ 3 ОКНА ПРОЕЦИРОВАНИЯ
INC HL
CALL MAINMEM3
SET_7FFD DEC HL
BIT 3,(HL)
RET Z
DEC HL
BIT 7,(HL)
RET Z
READ_7FFD
LD D,A
LD E,0
LD HL,PAGES_7FFD_ALL
JR NZ,SET7FFD1
AND 0XE0
RRCA
RRCA
LD E,A
SET7FFD1 LD A,D
AND 7
OR E
LD E,A
LD D,0
ADD HL,DE
LD A,(HL)
OUT (C),A
RET
XXF7_7FFD MACRO B
PLUSIK := B
REPT 8
DB PLUSIK
PLUSIK := PLUSIK-1
ENDM
ENDM
PAGES_7FFD_ALL XXF7_7FFD 0XFF
XXF7_7FFD 0XEF
XXF7_7FFD 0XDF
XXF7_7FFD 0XCF
XXF7_7FFD 0XF7
XXF7_7FFD 0XE7
XXF7_7FFD 0XD7
XXF7_7FFD 0XC7
MAINPAGE3_TAP LD HL,B1_CPU3
CALL SELECT_MAPPER
CALL MAINMEM3
JR SET_7FFD
MAINMEM3 LD C,LOW (WIN_A0)
LD E,(HL)
INC HL
LD A,8
AND (HL)
LD A,E
JR Z,MAINMEM4
OR 0XC0
MAINMEM4 LD E,A
LD A,(HL)
OR 0X3F
LD B,A
LD A,0X40
OUT (C),A
RES 3,B
INC HL
OUT (C),E
INT_ONLY_RET RET
;[КОНВЕРСИЯ СЧИТАННЫХ ЗНАЧЕНИЙ ИЗ ПОРТОВ КОНФИГУРАЦИИ]
;HL=АДРЕС ОТКУДА БРАТЬ СЧИТАННЫЕ ЗНАЧЕНИЯ ДЛЯ КОНВЕРСИИ
;DE=БИТЫ 7,6 ДЛЯ ДЕКОДИРОВАНИЯ
;BC=КУДА СКЛАДЫВАТЬ ДЕКОДИРОВАННОЕ
;A=СЧИТАННОЕ ЗНАЧЕНИЕ ДЛЯ КОНВЕРСИИ ДЛЯ ПОРТА XX77
CONVERT_BPORT LD A,(HL)
PUSH AF
INC HL
INC HL
INC HL
LD E,(HL)
INC HL
LD D,(HL)
LD BC,8
LD A,C ;КОНВЕРТИТЬ 8 БАЙТ
ADD HL,BC
LD BC,B0_CPU0
LD IYL,HIGH (WIN_A3)&0XF8
CBPORT03 EX AF,AF'
LD A,(HL)
CP 0XC0
JR NC,CBPORT01
;ЕСЛИ ЧИСЛО МЕНЕЕ, ТО ВОССТАНАВЛИВАТЬ В ПОРТЫ X7F7
LD (BC),A ;НОМЕР СТРАНИЦЫ ДЛЯ ЗАПИСИ В ПОРТ ПРИ ВОССТАНОВЛЕНИИ
INC BC
LD A,IYL
ADD A,0X40
LD IYL,A
AND 0XF0
SRL E
SRL D
LD (BC),A ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
INC BC
JR CBPORT02
;ЕСЛИ ЧИСЛО БОЛЬШЕ, ТО ВОССТАНАВЛИВАТЬ В ПОРТЫ XFF7
CBPORT01 LD A,(HL)
RLCA
RLCA
SRL D
RRA
SRL E
RRA
LD (BC),A ;НОМЕР СТРАНИЦЫ ДЛЯ ЗАПИСИ В ПОРТ ПРИ ВОССТАНОВЛЕНИИ
INC BC
LD A,IYL
ADD A,0X40
LD IYL,A
LD (BC),A ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
INC BC
CBPORT02 DEC HL
EX AF,AF'
DEC A
JR NZ,CBPORT03
POP HL
LD L,0XBC
LD A,H
AND 0X0F
OR 0XA0
LD (BC),A ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ ПРИ ВОССТАНОВЛЕНИИ
INC BC
LD A,H
AND 0X80
RRCA
OR L
LD L,A
LD A,H
AND 0X60
RLCA
RLCA
RLCA
OR L
LD (BC),A ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
RET
READ_KEYS
RET
include fat/mounter.a80
include fat/dev_drv.a80
include fat/ngs_sd_drv.a80
include fat/z_sd_drv.a80
include fat/nemo_drv.a80
include fat/read_fat.a80
SUPPORT_EXT DB "TRDSCLFDITAPSPG$C FNTBMPROM",0
;[СОРТИРОВКА СПИСКА НАЙДЕННЫХ ДИРЕКТОРИЙ/ФАЙЛОВ]
SORT_FINDFILES LD HL,(KOL_FOUNDED)
LD A,H
OR L
RET Z ;ВЫХОД ЕСЛИ НИЧЕГО НЕ НАЙДЕНО
DEC HL
LD A,H
OR L
RET Z ;ВЫХОД ЕСЛИ ДИРЕКТОРИЯ/ФАЙЛ ТОЛЬКО 1
EVOPORT WIN_P3,PAGE_TEMP2
LD HL,CPU3+0X1000 ;АДРЕС ПЕРВЫХ СИМВОЛОВ
LD DE,0X1000
LD BC,SYMS4SORT
EXX
LD HL,CPU3+0X2000 ;АДРЕС КУДА СКЛАДИРОВАТЬ СОРТИРОВАННОЕ
LD BC,(KOLFIND)
EXX
;ПЕРВЫЙ ПРОХОД ДЛЯ ДИРЕКТОРИЙ
SORTIR03 LD A,(HL)
AND 0X10
JR Z,SORTIR01
INC HL
LD A,(BC)
CP (HL)
DEC HL
JR NZ,SORTIR01
SBC HL,DE ;ПЕРЕХОД К НОМЕРАМ
LD A,(HL)
INC HL
EXX
LD (HL),A
INC HL
EXX
LD A,(HL)
INC HL
EXX
LD (HL),A
INC HL
DEC BC
LD A,B
OR C
EXX
JR Z,SORTIR05 ;ЕСЛИ КОНЧИЛОСЬ ТО ТОЖЕ САМОЕ ДЛЯ ФАЙЛОВ
ADD HL,DE ;ВОЗВРАТ К ФЛАГАМ И ИМЕНАМ
JR SORTIR03
;НЕ ДИРЕКТОРИЯ, СЛЕДУЮЩАЯ ПАРА
SORTIR01 INC HL
INC HL
EXX
DEC BC
LD A,B
OR C
EXX
JR NZ,SORTIR03
SORTIR05 EXX
LD BC,(KOLFIND)
EXX
LD HL,CPU3+0X1000
INC BC
LD A,(BC)
AND A
JR NZ,SORTIR03
LD BC,SYMS4SORT
LD HL,CPU3+0X1000
;ВТОРОЙ ПРОХОД ДЛЯ ФАЙЛОВ
SORTIR02 LD A,(HL)
AND 0X10
JR NZ,SORTIR04
INC HL
LD A,(BC)
CP (HL)
DEC HL
JR NZ,SORTIR04
SBC HL,DE
LD A,(HL)
INC HL
EXX
LD (HL),A
INC HL
EXX
LD A,(HL)
INC HL
EXX
LD (HL),A
INC HL
DEC BC
LD A,B
OR C
EXX
JR Z,SORTIR07
ADD HL,DE
JR SORTIR02
SORTIR04 INC HL
INC HL
EXX
DEC BC
LD A,B
OR C
EXX
JR NZ,SORTIR02
SORTIR07 EXX
LD BC,(KOLFIND)
EXX
LD HL,CPU3+0X1000
INC BC
LD A,(BC)
AND A
JR NZ,SORTIR02
LD HL,CPU3+0X2000
LD DE,CPU3
LD BC,0X1000
LDIR
RET
;[STORE_AY]
STORE_AY LD HL,AY_REGS
LD DE,0XFFC0
LD C,0XFD
LD A,0X0D
STORE_AY1 LD B,D
OUT (C),A
LD B,E
INI
DEC A
JP P,STORE_AY1
DEC E
LD H,0
LD A,0X0D
STORE_AY2 LD B,D
OUT (C),A
LD B,E
OUT (C),H
DEC A
JP P,STORE_AY2
RET
;[RESTORE_AY]
RESTORE_AY LD HL,AY_REGS
LD DE,0XFFC0
LD C,0XFD
LD A,0X0D
RESTORE_AY1 LD B,D
OUT (C),A
LD B,E
OUTI
DEC A
JP P,RESTORE_AY1
RET
SYMS4SORT DB ".!#$%&'()-0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`{}~",0X7F
DB "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯЁ",0
X_OFFSET EQU 63
Y_OFFSET EQU 2
TEXT_PORTREGS DB 0X17,MAGIC_COLOR
DB 0X16,Y_OFFSET+0X01,X_OFFSET+0,"SP= PC="
DB 0X16,Y_OFFSET+0X02,X_OFFSET+0,"IR="
DB 0X16,Y_OFFSET+0X03,X_OFFSET+0,"AF= AF'="
DB 0X16,Y_OFFSET+0X04,X_OFFSET+0,"BC= BC'="
DB 0X16,Y_OFFSET+0X05,X_OFFSET+0,"DE= DE'="
DB 0X16,Y_OFFSET+0X06,X_OFFSET+0,"HL= HL'="
DB 0X16,Y_OFFSET+0X07,X_OFFSET+0,"IX= IY="
DB 0X16,Y_OFFSET+0X09,X_OFFSET+0," MAP 0 1"
DB 0X16,Y_OFFSET+0X0A,X_OFFSET+0,"CPU3="
DB 0X16,Y_OFFSET+0X0B,X_OFFSET+0,"CPU2="
DB 0X16,Y_OFFSET+0X0C,X_OFFSET+0,"CPU1="
DB 0X16,Y_OFFSET+0X0D,X_OFFSET+0,"CPU0="
DB 0X16,Y_OFFSET+0X0F,X_OFFSET+0,"7FFD="
DB 0X16,Y_OFFSET+0X10,X_OFFSET+0,"EFF7="
DB 0X16,Y_OFFSET+0X11,X_OFFSET+2,"77="
DB 0X16,Y_OFFSET+0X12,X_OFFSET+2,"BF="
DB 0X16,Y_OFFSET+0X14,X_OFFSET+0,"DOS ENABLE= "
DB 0X16,1,0X10,0X17,0X32," EVO Magic Service beta ",0
TXT_VERIFY_FONT DB 0X16,0X18,0,0X17,0X22," VERIFY READING FONT ",0
TXT_VERIFY_OK DB " OK ",0
TXT_VERIFY_ERR DB "ERROR ",0
;[ПРОВЕРКА СЧИТАННОГО ФОНТА]
IF _CMP_FONT=1
CMP_FONT LD H,CMOS_BYTE_00
PCALL READCMOS,P_ADDONS
AND TYPE_FONT
LD HL,CP866_FONT
JR Z,CMPFONT1
LD HL,ATM_FONT
CMPFONT1 LD DE,CPU1+OFFSET_BUFSYM
PUSH DE
PCALL UNPACK,P_ADDON1
POP DE
INC D
LD BC,0X700
LD HL,CPU1+OFFSET_FNTSAVE+0X100
CMPFONT2 LD A,(DE)
INC DE
CP (HL)
SCF
RET NZ
CPI
JP PE,CMPFONT2
XOR A
RET
ENDIF
;[CMP_SCRMODE]
CMP_SCRMODE LD HL,FLAGS
RES 7,(HL)
AND 7
CP 3
RET Z
SET 7,(HL)
RET
;[SD_CARD_LOST]
SD_CARD_LOST LD HL,FLAGS_DRV
LD A,B_NEW_SD
OR (HL)
LD (HL),A
PEC_ON SHADOW_BF
CALL MAIN_MEM13
LD IX,SDCARD_LOST
PCALL IWINW,P_ADDONS
JR $
DUPL 0X3FF8-$,0XFF
DB "RST_08"
DW DATA_VERS
DEPHASE
include addons.a80
include addon1.a80
include addon2.a80