;	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,#80
	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
;
;----------------------------------------------------------------------;
;