home *** CD-ROM | disk | FTP | other *** search
- NAME TIME
- ENTRY TIME
-
- STR_MSB EQU 09H
- CLKBAS EQU 50H = CLOCK PORT BASE ADDRESS
- CLKCMD EQU CLKBAS+10 = " COMMAND PORT ADDRESS
- CLKDTA EQU CLKBAS+11 = " DATA " "
- NO_OP EQU 00H
- RDFREE EQU 10H
- HOLD EQU 40H
- SECS01 EQU 00H
- SECS10 EQU 01H
- MINS01 EQU 02H
- MINS10 EQU 03H
- HRS01 EQU 04H
- HRS10 EQU 05H
- AM_PM EQU 05H
-
- TIME:
- ENTR D,2,0
- MOV B,STR_MSB(IX) FIRST POINT BC TO
- MOV C,STR_MSB-1(IX) TOP OF TIMESTRING,THEN
- DCX B POINT TO 1ST CHAR IN STRING.
- MVI A,HOLD STOP THE CLOCK!
- OUT CLKCMD
- MVI A,HRS10 HOURS (TENS) DIGIT READ COMMAND
- * INTO A.
- CALL GETDIGIT GET DIGIT FROM CLOCK & PASS
- * TO PASCAL/Z LAND.
- DCX B
- MVI A,HRS01 SAME FOR HOURS (ONES) DIGIT
- CALL GETDIGIT
- DCX B
- DCX B
- MVI A,MINS10 ETC.
- CALL GETDIGIT
- DCX B
- MVI A,MINS01
- CALL GETDIGIT
- DCX B
- DCX B
- MVI A,SECS10
- CALL GETDIGIT
- DCX B
- MVI A,SECS01
- CALL GETDIGIT
- MVI A,NO_OP RESTART THE CLOCK!
- OUT CLKCMD
- EXIT D,2
-
-
- * GETDIGIT READS A DIGIT FROM THE CLOCK AND STORES IT IN THE
- * APPROPRIATE CHARACTER OF THE PASCAL/Z TIMESTRING.
- * :THE LEAPYEAR AND 24hr MODE BITS ARE MASKED.
- * :ON CALL THE DIGIT COMMAND MUST BE IN A &
- * :AND THE ADDRESS OF THE CHAR IN BC
- GETDIGIT:
- ADI RDFREE ADD 'READ' TO COMMAND.
- OUT CLKCMD
- CPI RDFREE+HRS10 WAS IT HRS10 ?
- * i.e.WILL IT CONTAIN 24hr BIT?
- IN CLKDTA GET DIGIT
- JNZ NOT_HRS10
- SUI 8 IF IT WAS HRS10 THEN KILL 24hr BIT
- NOT_HRS10:
- ADI 30H CONVERT TO ASCII &
- STAX B PLACE IN STRING.
- RET
-
-