Files
Sprinter-BIOS/bios/exp/FUNC_CMOS.ASM
T

107 lines
1.3 KiB
NASM

;
MACRO _mCMOS_MAX_TEST
ASSERT CMOS.MAX_ADDRESS = #7F, "WARNING!!! Logick broken with BIT 7 check"
BIT 7,D
SCF
RET NZ
ENDM
;
; ­¥ ¬¥­ïâì 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
;
; ­¥ ¬¥­ïâì 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