//////////////////////////////////////////////////////////////////////// ; Функция #21. Текущая дата и время. ; ; вход: нет ; выход: D - день ; E - месяц ; IX - год ; H - час ; L - минуты ; B - секунды ; C - день недели //////////////////////////////////////////////////////////////////////// SYSTIME: LD C,BIOS.CMOS_TEST RST ToBIOS JP C,.NOCMOS LD D,7 ;DAY CALL RCMOS PUSH AF LD D,8 ;MONTH CALL RCMOS POP DE LD E,A PUSH DE LD D,4 ;HOUR CALL RCMOS PUSH AF LD D,2 ;MINUTE CALL RCMOS POP DE LD E,A PUSH DE LD D,0 ;SECOND CALL RCMOS PUSH AF LD D,6 ;WEEK DAY LD C,BIOS.CMOS_RD RST ToBIOS POP DE LD E,A PUSH DE LD D,9 ;YEAR CALL RCMOS ;READ AND CONVERT TO DECIMAL PUSH AF LD D,#32 ;CENTURY LD C,BIOS.CMOS_RD RST ToBIOS LD XH,A POP AF CP 80 ;R001, TEST DECIMAL FIX PUSH AF JR C,.XXIAGE LD A,#19 CP XH JR Z,.GOODAGE JR .BADAGE .XXIAGE: LD A,#20 CP XH JR Z,.GOODAGE .BADAGE: PUSH AF LD D,#32 ;CENTURY LD C,BIOS.CMOS_WR RST ToBIOS POP AF LD XH,A .GOODAGE: POP AF LD XL,A LD A,XH CALL BCD2HEX LD L,A LD H,0 LD C,L LD B,H LD XH,B ADD HL,HL ADD HL,HL ADD HL,BC ADD HL,HL ;*10 LD B,H LD C,L ADD HL,HL ADD HL,HL ADD HL,BC ADD HL,HL ;*10(100) EX DE,HL ADD IX,DE POP BC POP HL POP DE AND A RET .NOCMOS: .NC_DAY+1: LD DE,DAY*256+MONTH ;DAY/MONTH .NC_HOUR+1: LD HL,0 ;HOUR/MINUTE .NC_SEC+1: LD BC,1 ;SECOND/WEEKDAY .NC_YEAR+2: LD IX,YEAR ;YEAR AND A RET ; //////////////////////////////////////////////////////////////////////// ; Функция #22. Установить текущую дату и время. ; ; вход: D - день ; E - месяц ; IX - год ; H - час ; L - минуты ; B - секунды ; выход: A - код ошибки, если CF=1 //////////////////////////////////////////////////////////////////////// SETTIME: PUSH IX PUSH BC PUSH HL PUSH DE LD C,BIOS.CMOS_TEST RST ToBIOS JP C,.NOCMOS2 POP AF PUSH AF LD D,7 ;DAY CALL WCMOS POP BC LD A,C LD D,8 ;MONTH CALL WCMOS POP AF PUSH AF LD D,4 ;HOUR CALL WCMOS POP BC LD A,C LD D,2 ;MINUTE CALL WCMOS POP AF PUSH AF LD D,0 ;SECOND CALL WCMOS POP BC LD A,C LD D,6 ;WEEK DAY LD C,BIOS.CMOS_WR RST ToBIOS ; POP HL XOR A LD DE,100 .YR: INC A SBC HL,DE JR NC,.YR ADD HL,DE DEC A PUSH HL LD D,#32 ;CENTURY CALL WCMOS POP BC LD A,C LD D,9 ;YEAR CALL WCMOS AND A RET ; !FIXIT новый биос выставляет время, если с ним что-то не так. .NOCMOS2: LD C,0 LD (SYSTIME.NC_DAY),DE ;DAY/MONTH LD (SYSTIME.NC_HOUR),HL ;HOUR/MINUTE LD (SYSTIME.NC_SEC),BC ;SECOND/WEEKDAY LD (SYSTIME.NC_YEAR),IX ;YEAR AND A RET ;