;LAST UPDATE: 04.07.2014 savelij
;ПОСЛЕДОВАТЕЛЬНОСТЬ ДЛЯ RST 8
;СТАРЫЙ СТЕК HL AF BC RF ADR_RET DE ->
;-> НОВЫЙ СТЕК HL(НОМЕР ПАГИ И ПОРТ BF) DE(RAMNROM И DOS7FFD) BC' DE' HL' IX IY AF' ->
;-> ЧТЕНИЕ КОНФИГА
CODE_NMIRST
PHASE 0;ADR_SEL_ROM
DUPL 8-$,0
NOP
JP NEW_RST8
DUPL ADR_SEL_ROM-$,0
OUT (C),A ;ПЕРЕКЛЮЧЕНИЕ СТРАНИЦ ДЛЯ ПЕРЕХОДОВ
NOP
FOR_RET NOP
JP RAMSEL1
OUT_NMI OUT (0XBE),A
RETN
DUPL 0X0038-$,0XFF
IM_EI_RET EI
RET
DUPL 0X0066-$,0XFF
NOP
ADR_MAGIC JP NMI_SERVICE
ADR_NMI_JUMP EQU $-2
PHASE $+CPU6
;СЧИТАННАЯ КОНФИГУРАЦИЯ ПОРТОВ ДЛЯ RST 8
R_BF DB 0XFF
R_77 DB 0XFF
R_EFF7 DB 0XFF
R_7FFD DB 0XFF
R_DOS7FFD DB 0XFF
R_RAMNROM DB 0XFF
R_1WINA3 DB 0XFF
R_1WINA2 DB 0XFF
R_1WINA1 DB 0XFF
R_1WINA0 DB 0XFF
R_0WINA3 DB 0XFF
R_0WINA2 DB 0XFF
R_0WINA1 DB 0XFF
R_0WINA0 DB 0XFF
;СЧИТАННАЯ КОНФИГУРАЦИЯ ПОРТОВ ДЛЯ NMI
N_BF DB 0XFF
N_77 DB 0XFF
N_EFF7 DB 0XFF
N_7FFD DB 0XFF
N_DOS7FFD DB 0XFF
N_RAMNROM DB 0XFF
N_1WINA3 DB 0XFF
N_1WINA2 DB 0XFF
N_1WINA1 DB 0XFF
N_1WINA0 DB 0XFF
N_0WINA3 DB 0XFF
N_0WINA2 DB 0XFF
N_0WINA1 DB 0XFF
N_0WINA0 DB 0XFF
N_TEK_PALS DUPL 0X10,0XFF
;СОХРАНЕННЫЕ РЕГИСТРЫ ПРИ ВЫЗОВЕ RST 8
RREG_FI DB 0XFF
RREG_I DB 0XFF ;IF
RREG_FF DB 0XFF
RREG_AA DB 0XFF ;AF'
RREG_IYL DB 0XFF
RREG_IYH DB 0XFF ;IY
RREG_IXL DB 0XFF
RREG_IXH DB 0XFF ;IX
RREG_LL DB 0XFF
RREG_HH DB 0XFF ;HL'
RREG_EE DB 0XFF
RREG_DD DB 0XFF ;DE'
RREG_CC DB 0XFF
RREG_BB DB 0XFF ;BC'
RDOS7FFD DB 0XFF ;БИТЫ DOS7FFD ПЕРЕД ВЫЗОВОМ
RRAMNROM DB 0XFF ;БИТЫ RAMNROM ПЕРЕД ВЫЗОВОМ
RPBF_CALL DB 0XFF ;СОДЕРЖИМОЕ ПОРТА BF ПЕРЕД ВЫЗОВОМ
RPAGE_CALL DB 0XFF ;НОМЕР СТРАНИЦЫ ОТКУДА ПРИШЛИ
RREG_E DB 0XFF
RREG_D DB 0XFF ;DE
RADRRET_L DB 0XFF
RADRRET_H DB 0XFF ;ADR_RET
REI_DI DB 0XFF
R_R DB 0XFF ;RF
RREG_C DB 0XFF
RREG_B DB 0XFF ;BC
RREG_F DB 0XFF
RREG_A DB 0XFF ;AF
RREG_L DB 0XFF
RREG_H DB 0XFF ;HL
RST8_SAVE_SP DW 0XFF
;СОХРАНЕННЫЕ РЕГИСТРЫ ПРИ ВЫЗОВЕ NMI
;ADR_RET AF' IY IX BC' DE' HL' BC DE RF IF AF HL
NADRRET_L DB 0XFF ;ADR RET
NADRRET_H DB 0XFF
NREG_FF DB 0XFF ;AF'
NREG_AA DB 0XFF
NREG_IYL DB 0XFF ;IY
NREG_IYH DB 0XFF
NREG_IXL DB 0XFF ;IX
NREG_IXH DB 0XFF
NREG_CC DB 0XFF ;BC'
NREG_BB DB 0XFF
NREG_EE DB 0XFF ;DE'
NREG_DD DB 0XFF
NREG_LL DB 0XFF ;HL'
NREG_HH DB 0XFF
NREG_C DB 0XFF ;BC
NREG_B DB 0XFF
NREG_E DB 0XFF ;DE
NREG_D DB 0XFF
NREG_EI_DI_2 DB 0XFF ;RF
NREG_R DB 0XFF
NREG_EI_DI_1 DB 0XFF ;IF
NREG_I DB 0XFF
NREG_F DB 0XFF ;AF
NREG_A DB 0XFF
NREG_L DB 0XFF ;HL
NREG_H DB 0XFF
NMI_SAVE_SP DW 0XFF ;АДРЕС СОХРАНЕНИЯ СТЕКА ПРОГРАММЫ ПРЕРВАННОЙ ПО NMI
INTERNAL_SP DW 0XFF ;АДРЕС ХРАНЕНИЯ СТЕКА ПРИ РАБОТЕ СЕРВИСОВ
B0_CPU0 DB 0XFF ;БАЙТ ДЛЯ ПОРТА 0 ОКНА 0 МАПЕРА
P0_CPU0 DB 0XFF ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ПОРТА ДЛЯ 0 ОКНА 0 МАПЕРА
B0_CPU1 DB 0XFF ;БАЙТ ДЛЯ ПОРТА 1 ОКНА 0 МАПЕРА
P0_CPU1 DB 0XFF ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ПОРТА ДЛЯ 1 ОКНА 0 МАПЕРА
B0_CPU2 DB 0XFF ;БАЙТ ДЛЯ ПОРТА 2 ОКНА 0 МАПЕРА
P0_CPU2 DB 0XFF ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ПОРТА ДЛЯ 2 ОКНА 0 МАПЕРА
B0_CPU3 DB 0XFF ;БАЙТ ДЛЯ ПОРТА 3 ОКНА 0 МАПЕРА
P0_CPU3 DB 0XFF ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ПОРТА ДЛЯ 3 ОКНА 0 МАПЕРА
B1_CPU0 DB 0XFF ;БАЙТ ДЛЯ ПОРТА 0 ОКНА 0 МАПЕРА
P1_CPU0 DB 0XFF ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ПОРТА ДЛЯ 0 ОКНА 0 МАПЕРА
B1_CPU1 DB 0XFF ;БАЙТ ДЛЯ ПОРТА 1 ОКНА 0 МАПЕРА
P1_CPU1 DB 0XFF ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ПОРТА ДЛЯ 1 ОКНА 0 МАПЕРА
B1_CPU2 DB 0XFF ;БАЙТ ДЛЯ ПОРТА 2 ОКНА 0 МАПЕРА
P1_CPU2 DB 0XFF ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ПОРТА ДЛЯ 2 ОКНА 0 МАПЕРА
B1_CPU3 DB 0XFF ;БАЙТ ДЛЯ ПОРТА 3 ОКНА 0 МАПЕРА
P1_CPU3 DB 0XFF ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ПОРТА ДЛЯ 3 ОКНА 0 МАПЕРА
B_PORT77 DB 0XFF ;БАЙТ ДЛЯ ВЫВОДА В ПОРТ ХХ77
P_PORT77 DB 0XFF ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ХХ77
F_INTEXT_DRV DB 0XFF ;ФЛАГИ ПРИ ВНЕШНИХ/ВНУТРЕННИХ ВЫЗОВАХ ДРАЙВЕРОВ
PHASE $-CPU6
DUPL HIGH ($)*0X100+0XFF-$,0XFF
DW IM_EI_RET
DUPL HIGH ($)*0X100+0X80-$,0XFF
STACK_RST
DUPL (HIGH ($)+1)*0X100-$,0XFF
STACK_NMI
JP NMI_EXIT_DBG
RAMSEL1
LD (RST8_SAVE_SP-CPU6),SP ;СОХРАНИЛИ СТАРЫЙ СТЕК
LD SP,RREG_E-CPU6
PUSH HL ;НОМЕР СТРАНИЦЫ ОТКУДА ПРИШЛИ И СОДЕРЖИМОЕ ПОРТА BF
PUSH DE ;БИТЫ RAMNROM+DOS7FFD
EXX
PUSH BC ;BC'
PUSH DE ;DE'
PUSH HL ;HL'
EXX
PUSH IX ;IX
PUSH IY ;IY
EX AF,AF'
PUSH AF ;AF'
LD A,I
PUSH AF ;IF
LD HL,OUT_NMI
LD (ADR_NMI_JUMP),HL
LD A,0XC9
LD (FOR_RET),A
XOR A
LD I,A
LD HL,(RST8_SAVE_SP-CPU6)
LD DE,RREG_E-CPU6
LD BC,RREG_H-RPAGE_CALL
LDIR
LD HL,R_77-CPU6
LD BC,RD_77
INIR
INI
LD HL,(RDOS7FFD-CPU6)
LD (R_DOS7FFD-CPU6),HL
LD SP,STACK_RST
LD A,(R_77-CPU6)
AND 7
OR 0XA0;8 ;ВЫКЛЮЧЕНИЕ ТУРБО 14 МГЦ
LD BC,0XFF77
OUT (C),A
PEC_OFF SHADOW_BF
LD BC,PENT_CONF
LD A,(R_EFF7-CPU6)
AND %11101111
OUT (C),A ;ВКЛЮЧЕНИЕ ТУРБО 7 МГЦ
PEC_ON SHADOW_BF
LD A,(R_7FFD-CPU6)
AND 0X10
LD HL,R_0WINA0-CPU6
JR Z,RAMSEL3
LD HL,R_1WINA0-CPU6
RAMSEL3 LD A,(RPAGE_CALL-CPU6)
LD (HL),A
ATMPORT WIN_A3,0X40
LD BC,WIN_P6
XOR A
OUT (C),A
LD BC,WIN_A0
LD A,P_RST8
LD HL,CPU6
ADD HL,SP
LD SP,HL
LD HL,CONT_RST8 ;АДРЕС ПРОДОЛЖЕНИЯ ОБРАБОТКИ RST 8
PUSH HL
JP ADR_SEL_ROM
P4_EXIT_RST8 LD HL,NMI_SERVICE
LD (ADR_NMI_JUMP),HL
XOR A
LD (FOR_RET),A
PEC_OFF SHADOW_BF
LD BC,PENT_CONF
LD A,(R_EFF7-CPU6)
OUT (C),A
PEC_ON SHADOW_BF
LD C,LOW (WIN_A5)
LD A,(R_7FFD-CPU6)
AND 0X10
LD HL,B0_CPU1-CPU2
JR Z,RENS11
LD HL,B1_CPU1-CPU2
RENS11 LD A,3
RENS12 EX AF,AF'
LD E,(HL) ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
INC HL
LD D,(HL) ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
INC HL
LD A,D
OR 7
LD B,A
OUT (C),E
EX AF,AF'
DEC A
JR NZ,RENS12
LD HL,RST8_SAVE_SP-(RREG_H-RPAGE_CALL)-CPU6
LD DE,(RST8_SAVE_SP-CPU6)
LD BC,RREG_H-RPAGE_CALL
LDIR
LD BC,(B_PORT77-CPU6)
LD A,C
LD C,0X77
OUT (C),A
LD SP,RREG_FI-CPU6
POP AF
LD I,A
POP AF
EX AF,AF'
POP IY
POP IX
POP HL
POP DE
POP BC
EXX
POP DE
POP HL
LD SP,(RST8_SAVE_SP-CPU6) ;ВОССТАНОВИЛИ СТЕК ВЫЗВАШЕЙ ПРОГРАММЫ
LD BC,ADR_RST8END ;АДРЕС ВОЗВРАТА
PUSH BC
LD C,LOW (WIN_A0)
LD A,(R_7FFD-CPU6)
AND 0X10
LD DE,(B0_CPU0-CPU6)
JR Z,RENS13
LD DE,(B1_CPU0-CPU6)
RENS13 LD A,D
OR 7
LD B,A
LD A,E ;СТРАНИЦА ROM КУДА ВОЗВРАЩАТЬСЯ
JP ADR_SEL_ROM
NMI_SERVICE LD (NMI_SAVE_SP-CPU6),SP ;СОХРАНЕНИЕ СТЕКА
LD SP,NMI_SAVE_SP-CPU6 ;НОВЫЙ СТЕК
PUSH HL ;СОХРАНИЛИ HL
PUSH AF ;СОХРАНИЛИ AF
LD A,I
PUSH AF ;СОХРАНИЛИ I, ФЛАГИ И РЕЖИМ ПРЕРЫВАНИЙ
LD A,R
PUSH AF ;СОХРАНИЛИ R
PUSH DE ;СОХРАНИЛИ DE
PUSH BC ;СОХРАНИЛИ BC
EXX
PUSH HL ;СОХРАНИЛИ АЛЬТ HL
PUSH DE ;СОХРАНИЛИ АЛЬТ DE
PUSH BC ;СОХРАНИЛИ АЛЬТ BC
PUSH IX ;СОХРАНИЛИ IX
PUSH IY ;СОХРАНИЛИ IY
EX AF,AF'
PUSH AF ;СОХРАНИЛИ АЛЬТ AF
LD HL,(NMI_SAVE_SP-CPU6)
LD E,(HL)
INC HL
LD D,(HL)
PUSH DE
LD SP,STACK_NMI
LD HL,OUT_NMI
LD (ADR_NMI_JUMP),HL
LD A,0XC9
LD (FOR_RET),A ;RET ДЛЯ ПЕРЕКЛЮЧЕНИЯ СТРАНИЦ ROM/RAM
LD A,0X80-0X0C
LD HL,NREG_R-CPU6
SLA (HL)
RLA
ADD A,(HL)
RRCA
LD (HL),A
LD HL,N_BF-CPU6 ;АДРЕС СОХРАНЕНИЯ ПРОЧИТАННЫХ РЕГИСТРОВ КОНФИГУРАЦИИ
IN A,(PEVO_CONF)
LD (HL),A
INC HL
LD BC,RD_77
NMISERV002 INIR
INI
XOR A
LD I,A ;ОБРАБОТЧИК ПРЕРЫВАНИЯ ПЕРЕСТАВИЛИИ ДЛЯ АДРЕСА 00FF
PEC_ON SHADOW_BF
; LD DE,0XA70F ;ДАЛЬШЕ СОХРАНЯЕМ ТЕКУЩУЮ ПАЛИТРУ
; LD BC,0XBD77
; OUT (C),D ;ВКЛЮЧЕНИЕ ТЕКСТМОДА
; LD (ADR_PALITRA),HL
; LD BC,RD_PALITRA
; EI
; HALT
; DI
;NMISERV003 LD A,E
; BIT 3,E
; OUT (0XFE),A
; JR Z,NMISERV004
; OUT (0XF6),A
;NMISERV004 IN A,(C)
; LD (HL),A
; INC HL
; DEC E
; JP P,NMISERV003 ;ПАЛИТРУ СОХРАНИЛИ
; LD HL,MAGIC_PAL
; LD E,0X0F
;SETPAL1 LD A,E
; BIT 3,E
; OUT (0XFE),A
; JR Z,$+4
; OUT (0XF6),A
; LD A,(HL)
; INC HL
; OR %00001100
; OUT (0XFF),A
; DEC E
; JP P,SETPAL1
; LD BC,0XFF77
; OUT (C),D
LD BC,WIN_P6
XOR A
OUT (C),A ;ВКЛЮЧИЛИ ПОСЛЕДНЮЮ СТРАНИЦУ ОЗУ
LD B,HIGH (WIN_A3)
LD A,0X40
OUT (C),A ;СНЯЛИ ЗАВИСИМОСТЬ 3 ОКНА ОТ ПОРТА 7FFD
LD DE,CPU6
ADD HL,DE
LD (ADR_PALITRA),HL
LD HL,CPU6
ADD HL,SP
LD SP,HL
LD B,HIGH (WIN_A0)
LD A,P_RST8
OUT (C),A
;PEREHVAT DUPL 3,0
; LD A,(DEBUG_ONOFF)
; AND A
; JR NZ,IN_DEBUG
LD HL,CONTINUE_MAGIC
PUSH HL
JP OUT_NMI
;IN_DEBUG XOR A
; IN A,(0XFE)
; CPL
; AND 0X1F
; JR NZ,IN_DEBUG
; LD B,HIGH (WIN_P0)
; LD A,PAGE_STS
; OUT (C),A
; LD HL,DEBUGGER
; PUSH HL
; JP OUT_NMI
;ВЫХОД ИЗ МАГИКА
EXITNMISERVICE LD HL,ADR_MAGIC
LD (HL),0XC9 ;ЗАГЛУШКА НА MAGIC
IN A,(PEVO_CONF)
OR NMI_BF ;SET 3,A
OUT (PEVO_CONF),A
AND NMI_BF!0XFF ;RES 3,A
OUT (PEVO_CONF),A
HALT ;ЖДЕМ СРАБАТЫВАНИЯ MAGIC
FALSE_NMI LD HL,ADR_MAGIC
LD (HL),0XC3 ;РАЗРЕШЕНИЕ ОБРАБОТЧИКА MAGIC ПЕРЕД ВЫХОДОМ
; LD HL,0
;ADR_PALITRA EQU $-2
; LD A,(N_77-CPU6)
; LD E,0X0F
; AND E
; OR 0XA0
; LD D,A
; LD BC,0XBD77 ;ДОСТУП К ПАЛИТРЕ
; OUT (C),D ;ВКЛ.PAL
;SETPAL0 LD A,E
; BIT 3,E
; OUT (0XFE),A
; JR Z,$+4
; OUT (0XF6),A
; LD A,(HL)
; INC HL
; OR %00001100
; OUT (0XFF),A
; DEC E
; JP P,SETPAL0
; LD BC,0XFF77
; OUT (C),D
LD C,LOW (WIN_A0)
LD A,(N_7FFD-CPU6)
AND 0X10
LD HL,B0_CPU0-CPU6
JR Z,ENS11
LD HL,B1_CPU0-CPU6
ENS11 LD A,4
ENS12 EX AF,AF'
LD E,(HL) ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
INC HL
LD D,(HL) ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
INC HL
LD A,D
OR 0X3F
LD B,A
BIT 3,D
JR NZ,ENS15
LD A,D
AND 3
RRCA
RRCA
OUT (C),A
RES 3,B
ENS15 OUT (C),E
EX AF,AF'
DEC A
JR NZ,ENS12
PEC_OFF SHADOW_BF
LD BC,PENT_CONF
LD A,(N_EFF7-CPU6)
OUT (C),A
PEC_ON SHADOW_BF
LD BC,(B_PORT77-CPU6)
LD A,C
LD C,0X77
OUT (C),A
LD A,(N_BF-CPU6)
OUT (PEVO_CONF),A
LD BC,CONF_128
LD A,(N_7FFD-CPU6)
OUT (C),A
LD HL,NMI_SERVICE
LD (ADR_NMI_JUMP),HL
XOR A
LD (FOR_RET),A
LD SP,NADRRET_L-CPU6
POP AF ;СБРОС АДРЕСА ВОЗВРАТА
POP AF
EX AF,AF'
POP IY
POP IX
POP BC
POP DE
POP HL
EXX
POP BC
POP DE
; EI
; HALT
; DI
POP AF
JP PO,ENMISERV1
EI
ENMISERV1 LD A,0X80-0X0A
LD HL,NREG_R-CPU6
SLA (HL)
RLA
ADD A,(HL)
RRCA
LD R,A
POP AF
LD I,A
POP AF
POP HL
LD SP,(NMI_SAVE_SP-CPU6)
OUT (0XBE),A
RETN
;MAGIC_PAL DB 0X0C,0X2D,0X4E,0X6F,0X9C,0XBD,0XDE,0XFF
; DB 0XEC,0XED,0XEE,0XEF,0XFC,0XFD,0XFE,0XFF
LDIR__BYTES LD HL,CPU6
ADD HL,SP
LD SP,HL
LD A,(R_7FFD-CPU6)
AND 0X10
LD HL,B0_CPU1-CPU2
JR Z,LDIR_BYTES5
LD HL,B1_CPU1-CPU2
LDIR_BYTES5 LD C,LOW (WIN_A0)
LD A,3
LDIR_BYTES3 EX AF,AF'
LD E,(HL) ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
INC HL
LD D,(HL) ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
INC HL
LD A,D
OR 0X3F
LD B,A
BIT 3,D
JR NZ,LDIR_BYTES4
LD A,D
AND 3
RRCA
RRCA
OUT (C),A
RES 3,B
LDIR_BYTES4 OUT (C),E
EX AF,AF'
DEC A
JR NZ,LDIR_BYTES3
EXX
LDIR
LD BC,WIN_P6
XOR A
OUT (C),A
LD HL,CPU6
ADD HL,SP
LD SP,HL
LD BC,WIN_A0
LD A,P_RST8
JP ADR_SEL_ROM
NEW_RST8 JP $
PHASE $+CPU6
;ВЫЗОВ ПОДПРОГРАММ ИЗ ДРУГИХ СТРАНИЦ
CALL2PAGE EX (SP),HL
PUSH BC
PUSH AF
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD (ADRCALL),BC
LD BC,RD_7FFD
IN A,(C)
AND 0X10
LD BC,RD_0WINA0
JR Z,CALL2PAGE1
LD BC,RD_1WINA0
CALL2PAGE1 IN A,(C)
AND 0X3F
LD BC,STEK_PAGES
TEKPAGE EQU $-2
LD (BC),A
INC BC
LD (TEKPAGE),BC
LD A,(HL)
INC HL
LD BC,WIN_A0
OUT (C),A
POP AF
POP BC
EX (SP),HL
CALL 0
ADRCALL EQU $-2
PUSH BC
PUSH AF
LD BC,(TEKPAGE)
DEC BC
LD A,(BC)
LD (TEKPAGE),BC
LD BC,WIN_A0
OUT (C),A
POP AF
POP BC
RET
;ВХОД В ОТЛАДЧИК
DEBUGGER DI
LD HL,CPU6+DEBUG_ONOFF
BIT 7,(HL)
JR Z,DEBUGGER1
;ПРИНУДИТЕЛЬНЫЙ ВХОД В ОТЛАДЧИК С ВОЗВРАТОМ В ОСНОВНОЕ МЕНЮ NMI
LD HL,JMP2MAINMENU
PUSH HL
JR DEBUGGER2
;ВХОД В ОТЛАДЧИК ИЗ ОСНОВНОГО МЕНЮ NMI
DEBUGGER1 LD HL,RESTART_MAIN
PUSH HL
LD HL,EXIT_DEBUG
PUSH HL
LD HL,CPU6+DEBUG_ONOFF
SET 7,(HL)
DEBUGGER2 LD HL,CONTINUE_PROG
LD DE,NADRRET_L
EVOPORT WIN_P3,PAGE_STS ;ВКЛЮЧИЛИ СТРАНИЦУ С УСТАНОВЛЕННЫМ STS
LD BC,N_BF
LD A,(N_77)
EX AF,AF'
LD A,NO_EXIT_DEBUG-EXIT_DEBUG
JP START_STS
;НОРМАЛЬНЫЙ ВЫХОД ИЗ ОТЛАДЧИКА
EXIT_DEBUG LD HL,CPU6+DEBUG_ONOFF
RES 7,(HL)
;ВЫХОД ИЗ ОТЛАДЧИКА МИНУЯ ОСНОВНОЕ МЕНЮ NMI
NO_EXIT_DEBUG EVOPORT WIN_A0,P_ADDONS
LD HL,CPU6+DEBUG_ONOFF
LD A,TRACE_DBG
AND (HL)
RET Z
LD HL,TRACER_DBG
EX (SP),HL
RET
;ВХОД В ОТЛАДЧИК МИНУЯ ОСНОВНОЕ МЕНЮ NMI
JMP2MAINMENU LD HL,CPU6+DEBUG_ONOFF
RES 7,(HL)
EVOPORT WIN_A0,P_RST8
LD HL,CPU6+DEBUG_ONOFF
LD A,TRACE_DBG
AND (HL)
JP NZ,CONTMAGIC3
JP RESTART_NMI
;ВОЗВРАТ ИЗ NMI ДЛЯ ОТЛАДЧИКА. НЕ ВОССТАНАВЛИВАЕТСЯ:
;ПАЛИТРА, ФОНТ, ВИДЕОРЕЖИМ
NMI_EXIT_DBG EVOPORT WIN_A0,P_ADDONS
PCALL RESTORE_AY,P_RST8 ;ВОССТАНОВЛЕНИЕ РАГИСТРОВ AY
LD HL,ADR_MAGIC
LD (HL),0XC9 ;ЗАГЛУШКА НА MAGIC
IN A,(PEVO_CONF)
OR NMI_BF
OUT (PEVO_CONF),A
AND NMI_BF!0XFF
OUT (PEVO_CONF),A
HALT ;ЖДЕМ СРАБАТЫВАНИЯ MAGIC
LD HL,ADR_MAGIC
LD (HL),0XC3 ;РАЗРЕШЕНИЕ ОБРАБОТЧИКА MAGIC ПЕРЕД ВЫХОДОМ
LD C,LOW (WIN_A0)
LD A,(N_7FFD-CPU6)
AND 0X10
LD HL,B0_CPU0-CPU6
JR Z,ENSDBG11
LD HL,B1_CPU0-CPU6
ENSDBG11 LD A,4
ENSDBG12 EX AF,AF'
LD E,(HL) ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
INC HL
LD D,(HL) ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА
INC HL
LD A,D
OR 0X3F
LD B,A
BIT 3,D
JR NZ,ENSDBG15
LD A,D
AND 3
RRCA
RRCA
OUT (C),A
RES 3,B
ENSDBG15 OUT (C),E
EX AF,AF'
DEC A
JR NZ,ENSDBG12
PEC_OFF SHADOW_BF
LD BC,PENT_CONF
LD A,(N_EFF7-CPU6)
OUT (C),A
PEC_ON SHADOW_BF
; LD BC,(B_PORT77-CPU6)
; LD A,C
; LD C,0X77
; OUT (C),A
LD A,(N_BF-CPU6)
OUT (PEVO_CONF),A
LD BC,CONF_128
LD A,(N_7FFD-CPU6)
OUT (C),A
LD HL,NMI_SERVICE
LD (ADR_NMI_JUMP),HL
XOR A
LD (FOR_RET),A
LD SP,NADRRET_L-CPU6
POP AF ;СБРОС АДРЕСА ВОЗВРАТА
POP AF
EX AF,AF'
POP IY
POP IX
POP BC
POP DE
POP HL
EXX
POP BC
POP DE
; EI
; HALT
; DI
POP AF
JP PO,ENMIDBGSERV1
EI
ENMIDBGSERV1 LD A,0X80-0X0A
LD HL,NREG_R-CPU6
SLA (HL)
RLA
ADD A,(HL)
RRCA
LD R,A
POP AF
LD I,A
POP AF
POP HL
LD SP,(NMI_SAVE_SP-CPU6)
OUT (0XBE),A
RETN
SET_CPU3 PUSH BC
LD BC,WIN_A3
EX AF,AF'
LD A,0X40
OUT (C),A
EX AF,AF'
LD B,HIGH (WIN_P3)
OUT (C),A
POP BC
RET
STEK_PAGES DUPL 0X10,0XFF ;10
RST_FLAGS DB 0XFF ;1
TXT_COLOR DB 0XFF ;1
COORD_XY DW 0XFF ;2
COLBUF DUPL 0X50,0XFF ;50 БУФЕР СОХРАНЕНИЯ СТРОКИ ЦВЕТА С ЭКРАНА
MOUSE_BUFF DUPL 0X10,0XFF ;10 БУФЕР СОХРАНЕНИЯ ЧАСТИ ЭКРАНА ПОД КУРСОРОМ МЫШИ
PRESSEDKEY DW 0XFFFF ;2 АДРЕС СПИСКА ГОРЯЧИХ КЛАВИШ ПОСЛЕ ВЫВОДА ОКНА
FLAGS DB 0XFF ;1 СИСТЕМНЫЕ ФЛАГИ
;BIT 7-=1-TXT, =0-ZX SCREEN MODE
;BIT 6
;BIT 5
;BIT 4-=1-ВНЕШНЕЕ ОКНО, =0-ВНУТРЕННЕ ОКНО
;BIT 3-=1-ЗАПУСК С ФАТА, =0-ЗАПУСК С ДИСКЕТЫ
;BIT 2-=1-ЧАСЫ НАЙДЕНЫ, =0-НЕТ
;BIT 1-=1-МЫШЬ ЕСТЬ, =0-НЕТ
;BIT 0-КАКОЙ КУРСОР РИСОВАТЬ, ДЛЯ МИГАНИЯ
NEXTBYTERST8 DB 0XFF ;1 СЛЕДУЮЩИЙ БАЙТ ПОСЛЕ ВЫЗОВА RST 8, КОД ДЛЯ ВЫЗОВА ДРАЙВЕРА
OLD_STACK DW 0XFFFF ;2
ADR_INT DW 0XFFFF ;2
ADR_PALITRA DW 0XFFFF ;2
XNEW DB 0XFF ;1
ADRSTR_Y DB 0XFF ;1
ADRSTR_X DB 0XFF ;1
TXNEW DB 0XFF ;1
TADRSTR_Y DB 0XFF ;1
TADRSTR_X DB 0XFF ;1
NO_INW DB 0XFF ;1
COLOR4SYM DB 0XFF ;1
PAGE4READ DB 0XFF ;1
PAGE4SCR DB 0XFF ;1
DAT_MAIN_MENU DUPL 3,0 ;3
DAT_SETUP_MENU DUPL 3,0 ;3
DAT_FILEBROWS DUPL 5,0 ;5
DAT_MOUNT DUPL 3,0 ;3
WIN_DEV DUPL 0X30,0 ;30
COL_CURSOR DW 0XFFFF ;2
_MORG DB 0XFF ;1
ARXY DW 0XFFFF ;2
ADR_REST DW 0XFFFF ;2
MOUPOS DW 0XFFFF ;2
TEK_MODES DB 0XFF ;1
CMP_FONT_FLAG DB 0XFF ;1
BUFF4TXT DUPL 0X2B,0XFF ;2B
EXT4FOUND DUPL 0X10*3+1,0XFF ;10*3+1
CMOS4CRC16 DUPL ECMOS_DEFAULT-CMOS_DEFAULT,0XFF
KSTATE0 DB 0XFF ;1 |
KSTATE1 DB 0 ;1 |
KSTATE2 DB 0 ;1 |
KSTATE3 DB 0 ;1 |
KSTATE4 DB 0XFF ;1 | АНАЛОГ
KSTATE5 DB 0 ;1 | BASIC
KSTATE6 DB 0 ;1 | ПЕРЕМЕННЫХ
KSTATE7 DB 0 ;1 | ОПРОСА
LAST_K DB 0 ;1 | КЛАВИАТУРЫ
REPDEL DB 0X10 ;1 |
REPPER DB 1 ;1 |
FLAGS_KEY DB 0 ;1 |
FLAGS_KEY1 DB 0X10 ;1 |
MOUNT_SYM DB 0XFF ;1
EXT_TYPE DB 0XFF ;1
OST_HWOST DW 0XFFFF ;2
KUDA_HWOST DW 0XFFFF ;2
SCROLL_MODE DB 0XFF ;1
NEXT4PAGE DW 0XFFFF ;2
OSTAT_SECT DW 0XFFFF ;2
NACH_SECT DW 0XFFFF ;2
START_DATA DW 0XFFFF ;2
AY_REGS DUPL 0X0E,0XFF ;D
TEKBUFTSC DW 0XFFFF ;2
TEK_TEXT DW 0XFFFF ;2
TURBO_MODE DUPL 5,0XFF ;5
MEMORY_MODE DUPL 4,0XFF ;3
BUFF_TIME DB 0X16,0X00,0X48,0X17,CYAN<<3+BLUE+0XC0
TXT_TIME DB "00:00:00",0X16,0X01,0X48
TXT_DATA DB "00.00.00",0X17,0XFF,0
EBUFF_TIME
NAME_RAMDISK DUPL 0X20,0
FILE_DEST DUPL 0X20,0XFF ;20 ОПИСАТЕЛЬ ОТКРЫТОГО ФАЙЛА (КУДА)
FB_EXT DUPL 0X0B,0XFF ;B БУФЕР 8.3 ДЛЯ ПОИСКА ИМЕНИ
SAVE_IY DW 0XFFFF ;2 ВНУТРЕНЕЕ СОХРАНЕНИЕ РЕГИСТРОВ ДЛЯ ДАЛЬНЕЙШЕГО ИСПОЛЬЗОВАНИЯ
ADR_MASK_EXT DW 0XFFFF ;2 АДРЕС РАСШИРЕНИЙ ФАЙЛОВ ДЛЯ ПОИСКА
ADR_SKLAD DW 0XFFFF ;2 АДРЕС СКЛАДИРОВАНИЯ НАЙДЕННОГО
ADR_SKLAD_NAME DW 0XFFFF ;2
MAKS_ADR DB 0XFF ;1 СТАРШИЙ БАЙТ МАКСИМАЛЬНОГО АДРЕСА БУФЕРА СКЛАДИРОВАНИЯ
KOL_FOUNDED DW 0XFFFF ;2 КОЛИЧЕСТВО НАЙДЕННЫХ ОПИСАТЕЛЕЙ
OUT_NAME_FILE DB 0X17,0XFF,0X16,0,0,0
OUT_NAME_FILET EQU $-3
BUF_FILEITEM DUPL 0X20,0XFF
EXTERN_PAL DUPL 0X10,0XFF
ENMI_SERVICE
DEPHASE
PHASE $-CPU6