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

  1. ;
  2. ; B5C-KP4.INS
  3. ;  07/15/85    Clock insert for BYE500 and later
  4. ;        and the KayPro 4-84
  5. ;
  6. ;        Based on the code in TIME2.ASM 
  7. ;        Wayne Masters
  8. ;        Potpourri, (408) 378-7474
  9. ;
  10. ;    Note:    This is an insert, not an overlay.  Remove the existing code
  11. ;        in BYE5 at label TIME: and insert this code instead.
  12. ;        Set the equate TIMEON EQU YES in BYE5.
  13. ;
  14. ;        Use the program TIME2.ASM or later, to initialize your clock
  15. ;        with correct date/time prior to loading BYE.
  16. ;
  17. ;
  18. CENTURY    EQU    019H        ; 19h = 19 bcd, reset this every 100 years
  19. CYEAR    EQU    085H        ; 85h = 85 bcd, reset this every year
  20. RTCA    EQU    20H        ; Clock address select reg
  21. RTCD    EQU    24H        ; Clock data register
  22. RTCS    EQU    22H        ; Clock status register
  23. REGEND    EQU    8        ; Ending register count for time loop
  24. ;
  25. ;
  26. TIME:    MVI    A,0CFH        ; Initial status setup byte
  27.     OUT    RTCS        ; Set pio for mode 3 in/output
  28.     MVI    A,0E0H        ; Low 5 bits output, top 3 input
  29.     OUT    RTCS        ; Set pio in/out bits
  30.     MVI    A,03H        ; Disable interrupts
  31.     OUT    RTCS        ; Do it
  32.     MVI    A,14H        ; Status reg addr
  33.     OUT    RTCA        ; Select it
  34.     IN    RTCD        ; Reset status bit
  35. ;
  36. DOREAD:    LXI    H,LOCBUF    ; Point to time save area
  37.     MVI    B,2        ; Start with seconds
  38. ;
  39. BURST:    MOV    A,B        ; A is register we want to read
  40.     CPI    REGEND        ; Gotten all we want?
  41.     JNC    ROLLCK        ; Yes, done getting time
  42.     OUT    RTCA        ; Select that register of clock
  43.     IN    RTCD        ; Read the clock data
  44.     MOV    M,A        ; Save in core
  45.     INX    H        ; Next memory location
  46.     INR    B        ; Next reg addr
  47.     JMP    BURST        ; Go get more data
  48. ;
  49. ; See if the clock rolled over during the reads.
  50. ;
  51. ROLLCK:    MVI    A,14H        ; Status reg addr
  52.     OUT    RTCA        ; Select it
  53.     IN    RTCD        ; Get status
  54.     ORA    A        ; Was clock roll?
  55.     JNZ    DOREAD        ; Yes, go read again
  56. ;
  57. ; Format the date and time for bye's realtime clock buffer
  58. ;
  59.     LDA    LOCBUF        ; BCD seconds
  60.     STA    RTCBUF+2
  61.     LDA    LOCBUF+1    ; BCD minutes
  62.     STA    RTCBUF+1
  63.     CALL    BCDBIN        ; Convert to binary
  64.     STA    CCMIN        ; For bye5
  65.     LDA    LOCBUF+2    ; BCD hours
  66.     STA    RTCBUF
  67.     CALL    BCDBIN        ; Convert to binary
  68.     STA    CCHOUR        ; For bye5
  69.     LDA    LOCBUF+4    ; BCD day of month
  70.     STA    RTCBUF+6
  71.     LDA    LOCBUF+5    ; BCD month
  72.     STA    RTCBUF+5
  73.     MVI    A,CENTURY
  74.     STA    RTCBUF+3
  75.     MVI    A,CYEAR
  76.     STA    RTCBUF+4
  77.     RET            ; All done
  78. ;
  79. ;
  80. LOCBUF:    DB    0        ; Seconds
  81.     DB    0        ; Minutes
  82.     DB    0        ; Hours
  83.     DB    0        ; Day of week (not used by us)
  84.     DB    0        ; Day of month
  85.     DB    0        ; Month of year
  86. ;
  87. ;    End of B5C-KP4.  Put all this code in between the if timeon
  88. ;    and the endif timeon at label TIME: and it should work.
  89.