; DISPLAY "Service" ; !FIXIT тут можно, походу, дохрена убрать ; страницы с конфой для Sp97, для совместимости с древними прогами PG_SP1 equ #EC PG_SP2 equ #EE PG_AY equ #EA ; ;!TODO замутить заливку конфы, рестарт, перехват ресета силами BIOS PG_Sp2000 EQU #FE ; RST_CONF: ;--[] ZX Spectrum .AY8910: LD D,#35 ;!HARDCODE выяснить за что раньше эта ячейка в кмос отвечала. похоже на хранение значения Port_All_Mode или CONFIG_DE+1 CALL CMOS_RD OR 1 CALL CMOS_WR LD BC,Port_All_Mode IN A,(C) AND #FE ;!HARDCODE OUT (C),A ; ACC_OFF LD A,PG_AY LD DE,#FFFC JR .INT_PLD ;--[] ;--[] Sprinter ZX .SP97_1: LD D,#35 ;!HARDCODE выяснить за что раньше эта ячейка в кмос отвечала. похоже на хранение значения Port_All_Mode или CONFIG_DE+1 CALL CMOS_RD AND #FE CALL CMOS_WR LD BC,Port_All_Mode IN A,(C) AND #FE ;!HARDCODE OUT (C),A ; ACC_OFF LD A,PG_SP1 LD DE,#FFFE ;!HARDCODE JR .INT_PLD ;--[] ;--[] .SP97_2: LD BC,Port_All_Mode IN A,(C) OR 1 ; ACC_ON OUT (C),A LD A,PG_SP2 LD DE,#FFFD ;!HARDCODE JR .INT_PLD ;--[] ;--[] .CUSTOM: CP #80 JR NC,.CHOOSE_CNF ; only for old FLEX10K soft compatible LD C,SLOT3 IN B,(C) OUT (C),A ; PAGE с прошивкой LD DE,(#C090) ; PLD-ID OUT (C),B ; RET page ;--[] ;JR INT_PLD .INT_PLD: ; only for old FLEX10K soft compatible LD C,SLOT3 IN B,(C) LD A,SYS_PAGE OUT (C),A LD (SYS_PAGE.CONFIG_BYTE),DE OUT (C),B LD A,E ; config-byte CP #FF LD A,128 JR Z,.YES_CBL XOR A .YES_CBL: LD BC,CBL.SYS_PORT OUT (C),A LD A,E ; config-byte OR #FE ;!HARDCODE LD BC,Port_All_Mode ; SYSTEM Spectrum/Sprinter OUT (C),A LD A,#3C OUT (FDC_93.DrvCTRL),A XOR A RET .CHOOSE_CNF: ;!TEST CP PG_Sp2000 LD DE,SP2000_ConfID JR Z,.INIT_ACEX ; ; only for old FLEX10K soft compatible CP PG_SP1 LD DE,#FFFE ;!HARDCODE JR Z,.INT_PLD CP PG_SP2 LD DE,#FFFD JR Z,.INT_PLD CP PG_AY LD DE,#FFFC JR Z,.INT_PLD SCF RET .INIT_ACEX: ; .. ... ... .. ;!TODO сделать функцию по заливке своей конфы, перехвату ресета. ; .. ... ... .. LD BC,256*BIOS.REINIT.HARD_RESET + BIOS.REINIT JP_to_BIOS ;*************************************** ;!TEST ;--------------------------[;!TODO потестить]--------------------------; ; B - параметр сброса ; B = 1 - RESTART. ; B = 2 - Soft reset ; B = 3 - Hard reset ; B = 4 - Reinit spectrum pages REINIT: DEC B JR Z,.Restart ;1 DEC B JR Z,.SoftReset ;2 DEC B JR Z,.HardReset ;3 DEC B SCF RET NZ .ReinitZXpages: ;4 LD DE,RESERVED_PAGES ; таблица занятых системных страниц LD HL,SYS_PAGE.RAMD_FAT ; Адрес FAT ОЗУ. LD C,SLOT3 IN B,(C) LD A,SYS_PAGE OUT (SLOT3),A LD A,(DE) .zxloop: CP #FF JR Z,.endzxloop INC DE LD L,A LD A,(HL) AND A JR NZ,.errorzxloop LD A,(DE) LD (HL),A JR .zxloop .errorzxloop: DEC DE LD HL,-RESERVED_PAGES-1 ADD HL,DE JR NC,.errorzxloop_noChanges DEC DE LD H,high SYS_PAGE.RAMD_FAT LD A,(DE) LD L,A LD A,#FF LD (HL),A .errorzxloop_noChanges: SCF .endzxloop: OUT (C),B RET ; ;!TEST .HardReset: DI LD A,DCP_PAGE OUT (SLOT1),A ; set DCP page LD A,ACEX.RESET LD (#4400),A ; open for WR .loop: LD BC,#0100 ; цикл сброса OUT (C),C LD BC,0 OUT (C),C JR .loop ; полностью зациклить! ; ;!TEST .Restart: DI LD A,0 LD BC,#1FFD OUT (C),A LD B,#7F OUT (C),A LD A,#40 OUT (SLOT3),A LD A,5 OUT (SLOT1),A LD A,2 OUT (SLOT3),A LD A,0 OUT (SLOT0),A OUT (RGADR),A OUT (RGMOD),A JP 0 ;Restart ; ; .SoftReset: DI LD A,#10 LD BC,#1FFD OUT (C),A ; 8-я страница !! LD A,RESET_PAGE OUT (SLOT3),A LD A,CNF_PORT.TURBO.OFF OUT (SYS_PORT.ROM),A .loop2: LD (#C000),A ; Soft RESET !!! JR .loop2 ; ;----------------------------------------------------------------------; ;