;
	MACRO _mCMOS_MAX_TEST
	 ASSERT CMOS.MAX_ADDRESS = #7F, "WARNING!!! Logick broken with BIT 7 check"
	 BIT	7,D
	 SCF
	 RET	NZ
	ENDM
;


;!FIXIT по доке на функцию должен перед выходом CF ставиться
CMOS_EMU_WR:
	PUSH DE

	LD C,SLOT3
	IN B,(C)
	LD E,SYS_PAGE
	OUT (C),E
	LD E,D
	LD D,#FF
	LD (DE),A
	OUT (C),B

	POP DE
	RET
;

; запись в CMOS
CMOS_WR:
	; [x]
	 _mCMOS_MAX_TEST
	;
	CALL CMOS_TEST
	JR C,CMOS_EMU_WR
.WR:	LD BC,CMOS.Port.Address.Write
	OUT (C),D
	LD BC,CMOS.Port.Data.Write
	OUT (C),A
	RET
;

;!FIXIT по доке на функцию должен перед выходом CF ставиться
CMOS_EMU_RD:
	PUSH	DE

	LD	C,SLOT3
	IN	B,(C)
	LD	E,SYS_PAGE
	OUT	(C),E
	LD	E,D
	LD	D, high SYS_PAGE.CMOS_EMULATOR
	LD	A,(DE)
	OUT	(C),B

	POP	DE
	RET
;

; чтение из CMOS
CMOS_RD:
	; [x]
	 _mCMOS_MAX_TEST
	;
	CALL	CMOS_TEST
	JR	C,CMOS_EMU_RD
.RD:	LD	BC,CMOS.Port.Address.Write
	OUT	(C),D
	LD	BC,CMOS.Port.Data.Read
	IN	A,(C)
	RET
;

;Проверка наличия CMOS
CMOS_TEST:
	PUSH AF
	PUSH DE
	PUSH BC

	LD D,CMOS.TEST_CELL	; [x] раньше писало в ячейку чек-суммы
	CALL CMOS_RD.RD
	LD E,A
	CPL
	CALL CMOS_WR.WR
	CALL CMOS_RD.RD
	CPL
	CP E
	LD A,E
	JR NZ,.CMOS_ERR
	CALL CMOS_WR.WR

	POP BC
	POP DE
	POP AF
	AND A
	RET
	;
.CMOS_ERR:
	CALL CMOS_WR.WR
	POP BC
	POP DE
	POP AF
	SCF
	RET

; Не портит HL
; GET_CMOS_VALUE:	LD	A,L
; 		CALL	CMOS_RD
; 		AND	H
; .loop:		RRCA
; 		RRC	H
; 		JR	NC,.loop
; 		RLCA
; 		RET 