home *** CD-ROM | disk | FTP | other *** search
- ; THIS PROGRAM WILL READ AND DISPLAY THE
- ; TIME AND DATE FROM A COMPU/TIME BOARD
- ; UNDER THE CP/M OPERATING SYSTEM
- ;
- ;
- ORG 100H
- ;
- ; SET UP THE NEW STACK
- ;
- LXI H,0
- DAD SP
- SHLD OLDSP
- LXI SP,STACK
- ;
- ; ASSIGNMENTS
- ;
- ENTRY: EQU 5 ; CP/M ENTRY
- CR: EQU 0DH ; CARRIAGE RETURN
- LF: EQU 0AH ; LINE FEED
- ACONT: EQU 25H ; PORT A CONTROL
- ADATA: EQU 24H ; PORT A DATA
- BCONT: EQU 27H ; PORT B CONTROL
- BDATA: EQU 26H ; PORT B DATA
- ;
- ; DISPLAY TIME AND DATE
- ;
- LXI D,MON
- CALL DATE
- LXI D,HOUR
- CALL TIME
- LXI D,PDATE
- MVI C,9
- CALL ENTRY
- ;
- ; RETURN TO CP/M THROUGH CCP
- ;
- RETCPM: LHLD OLDSP ; GET CCP'S STACK
- SPHL
- RET
- ;
- ; READ A DIGIT ROUTINE
- ;
- RDIGIT: MOV A,D ; SELECT DIGIT
- OUT ADATA
- IN ADATA ; RESET INTERRUPT
- DWAIT: IN ACONT ; TEST FOR DIGIT PRESENT
- ANI 80H ; IS IT THERE?
- JZ DWAIT ; NO, THEN LOOP
- IN ADATA ; READ A DIGIT
- ANI 0FH ; MASK ZONE
- ORI 30H ; SET ASCII
- RET
- ;
- ; READ FOUR DIGITS ROUTINE
- ;
- READ4: MVI D,0 ; SELECT FIRST DIGIT
- NEXT: CALL RDIGIT ; DELAY ONE DIGIT SCAN
- CALL RSDIG ; READ AND STORE DIGIT
- MOV A,D
- CPI 20H ; TEST IF TWO DIGITS DONE
- JNZ SKIP
- MOV A,C
- CPI 0 ; DATE
- JNZ COLON ; IT'S FOR TIME
- MVI A,'/' ; IT'S FOR DATE
- JMP DOIT
- COLON: MVI A,':'
- DOIT: CALL SDIGIT
- SKIP: MOV A,D ; TEST FOR ALL DONE
- CPI 40H
- RZ
- JMP NEXT ; GET ANOTHER DIGIT
- ;
- ; STORE A DIGIT ROUTINE
- ;
- SDIGIT: MOV M,A
- INX H
- RET
- ;
- ; READ DATE ROUTINE
- ;
- DATE: CALL BOARD ; IS THERE A BOARD
- JZ NOBOARD ; NOPE
- CALL CLKINT
- XCHG
- MVI A,0 ; SET DATE DISPLAY MODE
- OUT BDATA
- MVI C,0 ; TELL READ4 THIS IS DATE
- CALL READ4
- MVI A,'/'
- CALL SDIGIT
- MVI A,'7' ; SET TENS OF YEARS
- CALL SDIGIT
- MVI A,'9' ; SET UNITS OF YEARS
- CALL SDIGIT
- RET
- ;
- ; READ THE TIME
- ;
- TIME: CALL BOARD ; CHECK IF BOARD THERE
- JZ NOBOARD
- CALL CLKINT
- XCHG
- MVI A,40H ; SET TIME DISPLAY MODE
- OUT BDATA
- MVI C,1 ; TELL READ4 THIS IS TIME
- CALL READ4
- MVI A,':'
- CALL SDIGIT
- CALL RSDIG
- ;
- ; READ AND STORE A DIGIT
- ;
- RSDIG: CALL RDIGIT
- CALL SDIGIT
- MOV A,D
- ADI 10H
- MOV D,A
- RET
- ;
- ; NO BOARD IN THE SYSTEM
- ;
- NOBOARD: XCHG
- MVI A,0
- CALL SDIGIT
- CALL SDIGIT
- CALL SDIGIT
- CALL SDIGIT
- CALL SDIGIT
- CALL SDIGIT
- CALL SDIGIT
- CALL SDIGIT
- RET
- ;
- ; SEE IF BOARD PRESENT
- ;
- BOARD: IN ADATA
- CPI 0FFH
- RET
- ;
- ; INITIALIZE CLOCK/CALENDAR PORT
- ;
- CLKINT: MVI A,70H
- OUT ADATA
- MVI A,77H
- OUT BDATA
- MVI A,14H
- OUT ACONT
- MVI A,04
- OUT BCONT
- RET
- ;
- ; STORAGE AREA
- ;
- PDATE: DB CR,LF,'DATE '
- MON: DB 'XX'
- DS 1
- DAT: DB 'XX'
- DS 3
- DPTIME: DB ' TIME '
- HOUR: DB 'XX'
- DS 1
- MIN: DB 'XX'
- DS 1
- SEC: DB 'XX'
- DB CR,LF,'$'
- TBUFF: DB 13,0
- MONI: DS 2
- DS 1
- DS 2
- DS 1
- HOURI: DS 2
- DS 1
- DS 2
- OLDSP: DS 2
- DS 100H
- STACK: DB 0
-