home *** CD-ROM | disk | FTP | other *** search
- ;
- ;**************************************************************
- ;
- ; 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
- ;...............
-