; 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