home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / beehive / bbs / b5-clock.arc / B5C-OKI1.INS < prev    next >
Text File  |  1990-09-20  |  5KB  |  152 lines

  1. ;
  2. ;**************************************************************
  3. ;
  4. ; B5C-OKI1.INS A TIME insert for BYE500 and up
  5. ;  08/14/85    Note:  This is an insert -- not an overlay
  6. ;            Bucky Carr
  7. ;            DenHUG (ZBBS) RCP/M, 303-423-3224
  8. ;
  9. ; Adapted from:
  10. ;   A clock insert for BYE and MBYE written by Donald E Roth, Denver.
  11. ;
  12. ;   This is an insert for addressing and reading from the OKI MSM5832
  13. ;   clock chip as addressed by an 8255 USART.  In our setup, it happens
  14. ;   to be connected to a Heathkit H89 and is addressed at port 320Q.
  15. ;
  16. ;   It should be possible to use this code for any ported system, and
  17. ;   the 8255 and 5832 lend themselves to relatively inexpensive wire-
  18. ;   wrapping should one desire to roll his own clock board.  Schematics
  19. ;   are available, and perhaps somewhere down the line I will include
  20. ;   a schematic with this insert....
  21. ;
  22. ;   To set the clock initially we use a clock setting program written for
  23. ;   that specific purpose (which I cannot lay my hands on at the moment,
  24. ;   but will search for, for the truly interested.  It is written in BASIC.
  25. ;
  26. ;   If you also desire the MBASIC code to read the clock from within
  27. ;   a BBS program, let me know and I will offer that up, too.
  28. ;
  29. ;
  30. ;
  31. ;   When called this routine will check the RTCBUF.  If a '99H' is in
  32. ;   the first byte, then clock is initialized.    Next, the seconds are
  33. ;   checked, and if changed since last update of RTC buffer, the clock
  34. ;   is read and new data copied to the RTCBUF.    The BCD hours and
  35. ;   minutes are converted to binary and stored in CCMIN and CCHOUR.
  36. ;
  37. ;
  38. ;                    - Bucky Carr, SYSOP,
  39. ;                    World Peace (ZBBS) RCP/M, 303-320-4822
  40. ;                            and
  41. ;                    DenHUG (ZBBS) RCP/M, 303-423-3224
  42. ;
  43. ;**********************************************************************
  44. ;
  45. ;these equates are needed to set up the 8255 PPI to read from
  46. ;the OKI MSM5832 real time clock chip
  47.  
  48. MODSET    EQU    10000000B    ;set mode bit
  49. MODA0    EQU    0        ;Group A mode 0
  50. MODA1    EQU    00100000B    ;group A mode 1
  51. MODA2    EQU    01000000B    ;group A mode 2
  52. MODB0    EQU    0        ;group B mode 0
  53. MODB1    EQU    00000100B    ;group B mode 1
  54. PRTAIN    EQU    00010000B    ;port A input
  55. PRTAOT    EQU    0        ;port A output
  56. PRTBIN    EQU    00000010B    ;port B input
  57. PRTBOT    EQU    0        ;port B output
  58. PRTCUI    EQU    00001000B    ;port C upper nibble input
  59. PRTCUO    EQU    0        ;port C upper nibble output
  60. PRTCLI    EQU    1        ;port C lower nibble input
  61. PRTCLO    EQU    0        ;port C lower nibble output
  62.  
  63. RTCPTA    EQU    320O        ;port A address of PPI for real time clock
  64. RTCPTB    EQU    RTCPTA+1    ;port B address of PPI for real time clock
  65. RTCPTC    EQU    RTCPTA+2    ;port C address of PPI for real time clock
  66. RTCCTL    EQU    RTCPTA+3    ;real time clock PPI control port
  67. ;address inputs for MSM5832 real time clock chip
  68. RTCS1    EQU    0        ;seconds
  69. RTCS10    EQU    10H        ;seconds X10
  70. RTCM1    EQU    20H        ;minutes
  71. RTCM10    EQU    30H        ;minutes X10
  72. RTCH1    EQU    40H        ;hours
  73. RTCH10    EQU    50H        ;hours X10
  74. RTCWK    EQU    60H        ;day of the week
  75. RTCD1    EQU    70H        ;days
  76. RTCD10    EQU    80H        ;days X10
  77. RTC1M    EQU    90H        ;month
  78. RTC10M    EQU    0A0H        ;months X10
  79. RTCY1    EQU    0B0H        ;year
  80. RTCY10    EQU    0C0H        ;years X10
  81.  
  82. RDCLK    EQU    10000000B    ;read from clock bit
  83. WRTCLK    EQU    01000000B    ;write to clock
  84. HLDCLK    EQU    00000010B    ;hold clock
  85. ;
  86. CENTURY EQU    19H        ;BCD FOR CENTURY #19
  87. ;
  88. ;  The following sets up the 8255 for addressing
  89. ;  It just happens to be called with each clock read, but need not
  90. ;  be re-initialized each time, your pleasure.    It runs fine like this
  91. ;
  92. TIME:    MVI    A,MODSET+MODA0+MODB0+PRTAIN+PRTBOT+PRTCUO+PRTCLO
  93.     OUT    RTCCTL
  94. ;
  95. RDTIM:    MVI    L,RTCH1     ;24 hour format, lower hours byte here
  96.     MVI    A,RTCH10    ;upper hours byte here
  97.     CALL    RDRTC        ;get it
  98.     ANI    3        ;mask off extraneous bits
  99.     CALL    RDBCD1        ;return value as BCD
  100.     STA    RTCBUF        ;save it
  101.     CALL    BCDBIN        ;convert it to binary
  102.     STA    CCHOUR        ;stuff it in here for BYE5xx to use
  103.     MVI    H,RTCM10    ;upper minutes byte here
  104.     MVI    L,RTCM1     ;lower minutes byte here
  105.     CALL    RDBCD        ;convert to BCD
  106.     STA    RTCBUF+1    ;save it
  107.     CALL    BCDBIN        ;convert to binary
  108.     STA    CCMIN        ;stuff it here for BYE5xx to use
  109.     MVI    H,RTCS10    ;upper seconds byte here
  110.     MVI    L,RTCS1     ;lower seconds byte here
  111.     CALL    RDBCD        ;convert to BCD
  112.     STA    RTCBUF+2    ;save it
  113.     MVI    H,RTCY10    ;upper years byte here
  114.     MVI    L,RTCY1     ;lower years byte here
  115.     CALL    RDBCD        ;covert to BCD
  116.     STA    RTCBUF+4    ;save it
  117.     MVI    H,RTC10M    ;upper months byte here
  118.     MVI    L,RTC1M     ;lower months byte here
  119.     CALL    RDBCD        ;convert...
  120.     STA    RTCBUF+5    ;save....
  121.     MVI    H,RTCD10    ;upper days byte....
  122.     MVI    L,RTCD1     ;lower....
  123.     CALL    RDBCD        ;convert....
  124.     STA    RTCBUF+6    ;save....
  125.     MVI    A,CENTURY    ;get century value (19xx)
  126.     STA    RTCBUF+3    ;save....
  127.     RET            ;whew....
  128. ;
  129. RDRTC:
  130.     OUT    RTCPTB        ;output address to clock
  131.     MVI    A,RDCLK        ;turn on for read
  132.     OUT    RTCPTC        ;data comes back all at once
  133.     IN    RTCPTA        ;read data from clock
  134.     PUSH    PSW
  135.     XRA    A
  136.     OUT    RTCPTC        ;turn off read
  137.     POP    PSW
  138.     RET
  139. ;
  140. RDBCD:    MOV    A,H
  141.     CALL    RDRTC
  142. ;
  143. RDBCD1: RLC ! RLC ! RLC ! RLC
  144.     MOV    H,A
  145.     MOV    A,L
  146.     CALL    RDRTC
  147.     ADD    H
  148.     RET
  149. ;.
  150. ;. End
  151. ;...............
  152.