home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / BYE5 / B5-DSSW.IZS / B5-DSSW.INS
Text File  |  2000-06-30  |  5KB  |  185 lines

  1. ;
  2. ; REAL TIME CLOCK DRIVER INSERT FOR THE DALLAS SEMICONDUCTOR
  3. ; "SMARTWATCH", DS1213, WHICH SITS UNDER AN EPROM OR RAM
  4. ; CHIP AT A MEMORY ADDRESS WHICH YOU MUST SPECIFY AT LABEL "SWBASE"
  5. ;
  6. ; THIS CODE IS Z-80 CODE, ASSEMBLED WITH 'DB' PSUDO-OPCODES
  7. ; SO 'MAC' WON'T BARF. FOR 8080/85, THE DJNZ, JR,JRNZ,JRZ AND BIT
  8. ; TEST INSTRUCTIONS WILL HAVE TO BE RE-WRITTEN USING INTEL LOGICAL
  9. ; OPERATORS LEST THE 8080/85 BARF
  10. ;
  11. ; THIS INSERT WAS WRITTEN FOR USE WITH BYE510 AND PBBS 4.0
  12. ; YOU MUST SET BCDBIN=YES IN BYE510 FOR THIS INSERT TO
  13. ; ASSEMBLE WITH BYE CORRECTLY.
  14. ;
  15. ; AUTHOR: MICHAEL R. MCCARREY
  16. ;         SOFTWARE ENGINEER
  17. ;         ISC SYSTEMS CORP.
  18. ;         SPOKANE, WA
  19. ;         (509) 927-5105 (BUS)
  20. ;         (509) 489-9562 (RES)
  21. ;
  22. TIME:    CALL    SWSEL        ; GET SMARTWATCH ONLINE
  23.     LXI    H,BCDDATA    ; SET POINTER TO BCD DATA STOW
  24.     CALL    READCLK        ; READ THE SMARTWATCH
  25.     CALL    EXTRACT        ; EXTRACT AND CONVERT BCD VALUES
  26.     RET            ; RETURN TO CALLER
  27.  
  28. ;
  29. ; THIS IS THE ROUTINE WHICH EXTRACTS AND CONVERTS
  30. ; RETURNED BCD DATA FROM THE SMARTWATCH INTO SOMETHING
  31. ; THAT CAN BE USED BY THE CALLING PROGRAM
  32. ;
  33.  
  34. EXTRACT    EQU    $
  35. ;
  36. ;========  EXTRACT AND SAVE SECONDS
  37.     LDA    SWSEC        ; LOAD AND
  38.     STA    RTCBUF+2    ;  SAVE SECONDS
  39. ;
  40. ;========  EXTRECT AND CONVERT MINUTES
  41.     LDA    SWMIN        ; LOAD AND
  42.     STA    RTCBUF+1    ;  SAVE MINUTES
  43.     CALL    BCDBIN        ; CONVERT BCD MINUTES
  44.     STA    CCMIN        ; UPDATE CURRENT MINUTE
  45. ;
  46. ;========  EXTRACT AND CONVERT HOURS
  47.     LDA    SWHOUR        ; LOAD AND
  48.     STA    RTCBUF+0    ;  SAVE HOURS
  49.     CALL    BCDBIN        ; CONVERT HOURS TO BINARY
  50.     STA    CCHOUR        ; UPDATE CURRENT HOUR
  51. ;
  52. ;========  EXTRACT AND SAVE DATE
  53.     LDA    SWDATE        ; GET DATE
  54.     STA    RTCBUF+6    ;  SAVE DATE
  55. ;
  56. ;========  EXTRACT AND SAVE MONTH
  57.     LDA    SWMONTH        ; LOAD AND
  58.     STA    RTCBUF+5    ;  SAVE MONTH
  59. ;
  60. ;======== EXTRACT AND SAVE YEAR
  61.     LDA    SWYEAR        ; LOAD AND
  62.     STA    RTCBUF+4    ;  SAVE YEAR
  63. ;
  64. ;======== SET THE CORRECT CENTURY
  65.     MVI    A,19H        ; AS IN 19XX
  66.     STA    RTCBUF+3    ;  SAVE CENTURY
  67.  
  68.     RET            ; BACK TO CALLER
  69.  
  70. ;
  71. ; THIS IS THE SMARTWATCH SELECT ROUTINE
  72. ;
  73. ; REGISTERS ON ENTRY:
  74. ; N/A
  75. ;
  76. ; REGISTERS ON EXIT:
  77. ; HL --> DTKEY+8
  78. ;
  79. ; REGISTERS DESTROYED: AF, HL
  80. ;
  81. SWSEL:    LDA    SWBASE+4    ; RESET SMARTWATCH COMPARE REG
  82.     LXI    H,DTKEY        ; STRING TO WAKE-UP THE SMARTWATCH
  83.     CALL    WRITCLK        ; OK SUCKER, TIME GET UP
  84.     RET            ; BACK TO CALLER
  85. ;
  86. ; THIS IS THE WRITE CLOCK ROUTINE.
  87. ;
  88. ; REGISTERS ON ENRTY:
  89. ; HL --> BCDDATA STOW
  90. ;
  91. ; REGISTERS ON EXIT:
  92. ; HL --> BCDDATA+8
  93. ;
  94. ; REGISTERS DESTROYED: AF, BC
  95. ;
  96. WRITCLK:MVI    B,8        ; REGISTER COUNT
  97. T040:    PUSH    B        ; SAVE COUNT
  98.     MOV    C,M        ; GRAB SOME DATA
  99.     MVI    B,8        ; BITS/BYTE
  100. T050:    DB    0CBH        ; IS THE 1ST
  101.     DB    041H        ;  A ZERO?
  102.     DB    28H        ; ZERO, SO
  103.     DB    05H        ;  GO AROUND
  104.     LDA    SWBASE+1    ; MAKE A0=0
  105.     DB    18H        ; GO
  106.     DB    03H        ;  AROUND
  107. T070:    LDA    SWBASE+0    ; MAKE A0=1
  108. TCONT:    DB    0CBH        ; SHIFT RIGHT
  109.     DB    039H        ; 1 BIT
  110.     DB    10H        ;  UNTIL A COMPLETE
  111.     DB    0F0H        ;   BYTE IS ASSEMBLED
  112.     INX    H        ; ADJUST POINTER
  113.     POP    B        ; RECOVER REGISTER COUNT
  114.     DB    10H        ; DO IT TO ALL
  115.     DB    0E8H        ;  SMARTWATCH REGISTERS
  116.     RET            ; BACK TO CALLER
  117. ;
  118. ; THIS IS THE READ CLOCK ROUTINE.
  119. ;
  120. ; REGISTERS ON ENRTY:
  121. ; HL --> BCDDATA STOW
  122. ;
  123. ; REGISTERS ON EXIT:
  124. ; HL --> BCDDATA+8
  125. ;
  126. ; REGISTERS DESTROYED: AF, BC
  127. ;
  128. READCLK:MVI    B,8        ; REGISTER COUNT IN SMARTWATCH
  129. T020:    PUSH    B        ; SAVE REG COUNT
  130.     MVI    C,0
  131.     MVI    B,8        ; BITS/BYTE COUNT
  132. T030:    LDA    SWBASE+4    ; RAISE A2 (READ)
  133.     ANI    1
  134.     ORA    C        ; CLEAR CARRY
  135.     MOV    C,A
  136.     DB    0CBH        ; SHIFT IN
  137.     DB    09H        ;  A BIT
  138.     DB    10H        ;   UNTIL A BYTE IS ASSEMBELED IN 'C'
  139.     DB    0F5H        ;    USING THE Z-80 'DJNZ' INST.
  140.     MOV    M,C        ; STOW THE BYTE
  141.     INX    H        ; ADJUST POINTER
  142.     POP    B        ; RECOVER REGISTER COUNT
  143.     DB    10H        ; DO ALL 8 REGISTERS
  144.     DB    0EBH        ;  USING THAT 'DJNZ' AGAIN
  145.     RET            ; BACK TO CALLER
  146.  
  147. ;
  148. ; THIS IS THE CODE THAT IS WRITTEN TO THE MEMORY ADDRESS
  149. ; THE SMARTWATCH OCCOUPIES. THE SMARTWATCH DETECTS THIS
  150. ; PATTERN, DE-SELECTS WHATEVER IS PLUGGED INTO IT, PROM,
  151. ; RAM OR WHATEVER, AND THE NEXT 64 ACCESSES TO IT WILL
  152. ; BE READS OR WRITES TO OR FROM THE REGISTERS. IT IS OKAY
  153. ; TO DO OTHER THINGS, ANY WHERE ELSE IN THE ADDRESS AREA
  154. ; AS LONG AS THEY DON'T INVOLVE THE AREA OF THE SMARTWATCH.
  155. ;
  156. DTKEY:    DB    0C5H,03AH,0A3H,05CH,0C5H,03AH,0A3H,05CH
  157.  
  158. ;
  159. ; THIS IS THE BEGINNING MEMORY ADDRESS FOR THE
  160. ; SMARTWATCH. YOU MUST CUSTOMIZE IT TO FIT YOUR
  161. ; OWN MEMORY MAP.
  162. ;
  163. SWBASE    EQU    0D000H        ; BASE ADDRESS FOR ADDRESSING
  164.  
  165. ;
  166. ; THIS IS THE STOW FOR BCD DATA FROM OR TO THE
  167. ; SMARTWATCH. THE DATA MUST BE READ IN ASCENDING
  168. ; ADDRESSES ONLY AS THIS IS THE WAY IT IS PRESENTED
  169. ; BY THE SMARTWATCH. IT GOES WITHOUT SAYING THAT
  170. ; WRITING TO THE SMARTWATCH MUST ALSO BE DONE IN THE
  171. ; SAME MANNER AS READING.
  172. ;
  173. BCDDATA:DB    0        ; 1/10 SECOND
  174. SWSEC:    DB    0        ; SECONDS
  175. SWMIN:    DB    0        ; MINUTES
  176. SWHOUR:    DB    0        ; HOURS
  177. SWDOW:    DB    0        ; DAY OF WEEK
  178. SWDATE:    DB    0        ; DATE
  179. SWMONTH:DB    0        ; MONTH
  180. SWYEAR:    DB    0        ; YEAR
  181.  
  182.     ENDIF            ; CLOCK OR RSPEED
  183. ;
  184. ;             end of clock routine
  185.