home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / bye3 / b3c-5832.ins < prev    next >
Text File  |  1994-07-13  |  3KB  |  99 lines

  1. ;
  2. ;    Generic OKI Semiconductor MSM5832 Clock Routine for BYE3
  3. ;
  4. ;    The 5832 is wired with a 74LS138, 74LS85 and input tristate gate
  5. ;    based at 0F0h. 0F0h is the seconds 'units' and 0FCh is the year
  6. ;    'tens' place. In all cases, the least significant nibble is used
  7. ;    for the clock data, the most significant nibble is garbage. Yea, I
  8. ;    know it is not the most elegant way to do it, but it is cheap. Of
  9. ;    this there is no doubt. My implementation is on the unused prototype 
  10. ;    area of a Mullen S100 bus extender. 5 chips, one oddball crystal - 
  11. ;    32khz -  and a couple of hearing aid batteries for power down standby 
  12. ;    (my clock has been running for over two years without changing them) 
  13. ;    ... well under 20 bucks and an hour to build. Nothing fancy, but
  14. ;    it does work very well.
  15. ;
  16. ;    Leave me a message in my MINIRBBS and Ill drop ya a drawing of it.
  17. ;
  18. ;                            JP Sojak - sysop
  19. ;                            Smokin Silicon RCPM
  20. ;                            (312) 941-0049 
  21. ;
  22. ; Real-Time clock buffer - is organized as HH:MM:SS YYYY/MM/DD
  23. ;
  24. ;RTCBUF:
  25. ;    DB    99H,99H,99H    ;HH:MM:SS (BCD 24HR TIME) 00:00:00-23:59:59
  26. ;    DB    19H,84H,01H,31H ;YYYY/MM/DD (BCD ISO DATE)
  27. ;
  28. ; BYE3 saves and restores registers before/after calling TIME.
  29. ;
  30. CBASE    EQU    0F0h
  31. ;
  32.      IF    RTC
  33. TIME:    IN    CBASE+5        ; Hours tens place
  34.     ANI    00000011B
  35.     MOV    B,A
  36.     IN    CBASE+4        ; Hours ones place
  37.     CALL    SHFTIT
  38.     STA    RTCBUF+0
  39. ;
  40.     IN    CBASE+3        ; Now the tens of minutes
  41.     ANI    00000111B
  42.     MOV    B,A        ; save it at <b> 
  43.     IN    CBASE+2    
  44.     CALL    SHFTIT        
  45.     STA    RTCBUF+1
  46. ;
  47.     IN    CBASE+1        ; Now the tens of seconds
  48.     ANI    00000111B
  49.     MOV    B,A
  50.     IN    CBASE+0        ; now the ticks
  51.     CALL    SHFTIT
  52.     STA    RTCBUF+2
  53. ;
  54. ;    DB    19H,84H,01H,31H ;YYYY/MM/DD (BCD ISO DATE)
  55. ;    
  56.     MVI    A,19H
  57.     STA    RTCBUF+3
  58.     MVI    A,84H
  59.     STA    RTCBUF+4
  60. ;
  61.     IN    CBASE+0Ah    ; Now the tens of month3
  62.     ANI    00000001B
  63.     MOV    B,A
  64.     IN    CBASE+9        ; ones of months
  65.     CALL    SHFTIT
  66.     STA    RTCBUF+5
  67. ;
  68.     IN    CBASE+8        ; Now the day
  69.     ANI    00000011B
  70.     MOV    B,A
  71.     IN    CBASE+7
  72.     CALL    SHFTIT
  73.     STA    RTCBUF+6
  74. ;
  75. CLKEXIT:
  76.     LDA    RTCBUF        ; Pick up BCD HH
  77.     CALL    BCDBIN        ; Convert to binary
  78.     STA    CCHOUR        ; For BYE3
  79.     LDA    RTCBUF+1    ; Pick up BCD MM
  80.     CALL    BCDBIN        ; Convert to binary
  81.     STA    CCMIN        ; For BYE
  82.     RET            ; And return (for now..)
  83.  
  84. SHFTIT:    PUSH    PSW        ; Save the units digit
  85.     MOV    A,B        ; Recover the Tens
  86.     RLC
  87.     RLC
  88.     RLC
  89.     RLC            ; made it the MSN
  90.     MOV    B,A        ; save tens here
  91.     POP    PSW        ; get the units again
  92.     ANI    00001111B    ; and mask crap off
  93.     ORA    B        ; OR in the tens place 
  94.     RET            ; and return with it in <a>
  95.      ENDIF    ;RTC
  96. ;
  97. ;        end
  98. ;----------------------------------------------------------------
  99.