home *** CD-ROM | disk | FTP | other *** search
- NAME DATE
- ENTRY DATE
-
- VBYTES EQU 05 # OF BYTES ON THE STACK
- STR_MSB EQU 12
- DAY_MSB EQU 10
- 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
- DAYS01 EQU 07H
- DAYS10 EQU 08H
- MTHS01 EQU 09H
- MTHS10 EQU 0AH
- YRS01 EQU 0BH
- YRS10 EQU 0CH
- LEAPYR EQU 08H
- WKDAY EQU 06H
-
- DATE:
- ENTR D,2,0
- MOV B,STR_MSB(IX) FIRST POINT BC TO
- MOV C,STR_MSB-1(IX) TOP OF DATESTRING,THEN
- DCX B POINT TO 1ST CHAR IN STRING.
- MVI A,HOLD STOP THE CLOCK!
- OUT CLKCMD
- MVI A,MTHS10 MONTHS-(TENS)-DIGIT-READ COMMAND
- * INTO A.
- CALL GETDIGIT GET DIGIT FROM CLOCK & PASS
- * TO PASCAL/Z LAND.
- DCX B
- MVI A,MTHS01 SAME FOR MONTHS (ONES) DIGIT
- CALL GETDIGIT
- DCX B SKIP '/'
- DCX B
- MVI A,DAYS10 ETC.
- CALL GETDIGIT
- DCX B
- MVI A,DAYS01
- CALL GETDIGIT
- DCX B SKIP '/',
- DCX B | & SKIP
- DCX B | CENTURY DIGITS.
- DCX B
- MVI A,YRS10
- CALL GETDIGIT
- DCX B
- MVI A,YRS01
- CALL GETDIGIT
- MOV B,DAY_MSB(IX) NOW TO GET THE
- MOV C,DAY_MSB-1(IX) DAY OF THE WEEK!
- MVI A,0
- STAX B MSB = 0
- DCX B
- MVI A,WKDAY
- ADI RDFREE
- OUT CLKCMD
- IN CLKDTA GET LSB
- STAX B
- MVI A,NO_OP RESTART THE CLOCK!
- OUT CLKCMD
- EXIT D,VBYTES
-
-
- * GETDIGIT READS A DIGIT FROM THE CLOCK AND STORES IT IN THE
- * APPROPRIATE CHARACTER OF THE PASCAL/Z DATESTRING.
- * :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
- IN CLKDTA GET DIGIT
- ADI 30H CONVERT TO ASCII &
- STAX B PLACE IN STRING.
- RET
-
-