home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
beehive
/
bbs
/
b5-clock.arc
/
B5C-OKI1.INS
< prev
next >
Wrap
Text File
|
1990-09-20
|
5KB
|
152 lines
;
;**************************************************************
;
; B5C-OKI1.INS A TIME insert for BYE500 and up
; 08/14/85 Note: This is an insert -- not an overlay
; Bucky Carr
; DenHUG (ZBBS) RCP/M, 303-423-3224
;
; Adapted from:
; A clock insert for BYE and MBYE written by Donald E Roth, Denver.
;
; This is an insert for addressing and reading from the OKI MSM5832
; clock chip as addressed by an 8255 USART. In our setup, it happens
; to be connected to a Heathkit H89 and is addressed at port 320Q.
;
; It should be possible to use this code for any ported system, and
; the 8255 and 5832 lend themselves to relatively inexpensive wire-
; wrapping should one desire to roll his own clock board. Schematics
; are available, and perhaps somewhere down the line I will include
; a schematic with this insert....
;
; To set the clock initially we use a clock setting program written for
; that specific purpose (which I cannot lay my hands on at the moment,
; but will search for, for the truly interested. It is written in BASIC.
;
; If you also desire the MBASIC code to read the clock from within
; a BBS program, let me know and I will offer that up, too.
;
;
;
; When called this routine will check the RTCBUF. If a '99H' is in
; the first byte, then clock is initialized. Next, the seconds are
; checked, and if changed since last update of RTC buffer, the clock
; is read and new data copied to the RTCBUF. The BCD hours and
; minutes are converted to binary and stored in CCMIN and CCHOUR.
;
;
; - Bucky Carr, SYSOP,
; World Peace (ZBBS) RCP/M, 303-320-4822
; and
; DenHUG (ZBBS) RCP/M, 303-423-3224
;
;**********************************************************************
;
;these equates are needed to set up the 8255 PPI to read from
;the OKI MSM5832 real time clock chip
MODSET EQU 10000000B ;set mode bit
MODA0 EQU 0 ;Group A mode 0
MODA1 EQU 00100000B ;group A mode 1
MODA2 EQU 01000000B ;group A mode 2
MODB0 EQU 0 ;group B mode 0
MODB1 EQU 00000100B ;group B mode 1
PRTAIN EQU 00010000B ;port A input
PRTAOT EQU 0 ;port A output
PRTBIN EQU 00000010B ;port B input
PRTBOT EQU 0 ;port B output
PRTCUI EQU 00001000B ;port C upper nibble input
PRTCUO EQU 0 ;port C upper nibble output
PRTCLI EQU 1 ;port C lower nibble input
PRTCLO EQU 0 ;port C lower nibble output
RTCPTA EQU 320O ;port A address of PPI for real time clock
RTCPTB EQU RTCPTA+1 ;port B address of PPI for real time clock
RTCPTC EQU RTCPTA+2 ;port C address of PPI for real time clock
RTCCTL EQU RTCPTA+3 ;real time clock PPI control port
;address inputs for MSM5832 real time clock chip
RTCS1 EQU 0 ;seconds
RTCS10 EQU 10H ;seconds X10
RTCM1 EQU 20H ;minutes
RTCM10 EQU 30H ;minutes X10
RTCH1 EQU 40H ;hours
RTCH10 EQU 50H ;hours X10
RTCWK EQU 60H ;day of the week
RTCD1 EQU 70H ;days
RTCD10 EQU 80H ;days X10
RTC1M EQU 90H ;month
RTC10M EQU 0A0H ;months X10
RTCY1 EQU 0B0H ;year
RTCY10 EQU 0C0H ;years X10
RDCLK EQU 10000000B ;read from clock bit
WRTCLK EQU 01000000B ;write to clock
HLDCLK EQU 00000010B ;hold clock
;
CENTURY EQU 19H ;BCD FOR CENTURY #19
;
; The following sets up the 8255 for addressing
; It just happens to be called with each clock read, but need not
; be re-initialized each time, your pleasure. It runs fine like this
;
TIME: MVI A,MODSET+MODA0+MODB0+PRTAIN+PRTBOT+PRTCUO+PRTCLO
OUT RTCCTL
;
RDTIM: MVI L,RTCH1 ;24 hour format, lower hours byte here
MVI A,RTCH10 ;upper hours byte here
CALL RDRTC ;get it
ANI 3 ;mask off extraneous bits
CALL RDBCD1 ;return value as BCD
STA RTCBUF ;save it
CALL BCDBIN ;convert it to binary
STA CCHOUR ;stuff it in here for BYE5xx to use
MVI H,RTCM10 ;upper minutes byte here
MVI L,RTCM1 ;lower minutes byte here
CALL RDBCD ;convert to BCD
STA RTCBUF+1 ;save it
CALL BCDBIN ;convert to binary
STA CCMIN ;stuff it here for BYE5xx to use
MVI H,RTCS10 ;upper seconds byte here
MVI L,RTCS1 ;lower seconds byte here
CALL RDBCD ;convert to BCD
STA RTCBUF+2 ;save it
MVI H,RTCY10 ;upper years byte here
MVI L,RTCY1 ;lower years byte here
CALL RDBCD ;covert to BCD
STA RTCBUF+4 ;save it
MVI H,RTC10M ;upper months byte here
MVI L,RTC1M ;lower months byte here
CALL RDBCD ;convert...
STA RTCBUF+5 ;save....
MVI H,RTCD10 ;upper days byte....
MVI L,RTCD1 ;lower....
CALL RDBCD ;convert....
STA RTCBUF+6 ;save....
MVI A,CENTURY ;get century value (19xx)
STA RTCBUF+3 ;save....
RET ;whew....
;
RDRTC:
OUT RTCPTB ;output address to clock
MVI A,RDCLK ;turn on for read
OUT RTCPTC ;data comes back all at once
IN RTCPTA ;read data from clock
PUSH PSW
XRA A
OUT RTCPTC ;turn off read
POP PSW
RET
;
RDBCD: MOV A,H
CALL RDRTC
;
RDBCD1: RLC ! RLC ! RLC ! RLC
MOV H,A
MOV A,L
CALL RDRTC
ADD H
RET
;.
;. End
;...............