108 lines
1.4 KiB
NASM
108 lines
1.4 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
|
||
;
|
||
|
||
|
||
;!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
|
||
;
|
||
|
||
;<3B>஢¥àª «¨ç¨ï 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
|
||
|
||
; <20>¥ ¯®àâ¨â HL
|
||
; GET_CMOS_VALUE: LD A,L
|
||
; CALL CMOS_RD
|
||
; AND H
|
||
; .loop: RRCA
|
||
; RRC H
|
||
; JR NC,.loop
|
||
; RLCA
|
||
; RET |