home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
SIMTEL
/
CPMUG
/
CPMUG042.ARK
/
CLKROM.ASM
< prev
next >
Wrap
Assembly Source File
|
1984-04-29
|
2KB
|
129 lines
; THIS PROGRAM WILL READ AND DISPLAY THE
; TIME AND DATE FROM A COMPU/TIME BOARD
;
; ASSIGNMENTS
;
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
;
; ENTRY VECTORS
;
JMP DATE ; GET THE DATE
JMP TIME ; GET THE TIME
;
; 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