home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / amiga / info / amscsi.lzh / SmartWatch (.txt) < prev    next >
Encoding:
AmigaBASIC Source Code  |  1987-05-27  |  4.4 KB  |  191 lines

  1.   REM: Smart Watch Time setting program
  2.   REM: Rich Frantz            3/24/87
  3.   REM: 
  4.   
  5. sclk0 = 8421392   : REM: hex 808010
  6. sclk1 = sclk0 + 2  : REM: hex 808012
  7. rclk = 8421400    : REM: hex 808018 
  8.  
  9. DIM i(65) : DIM d(65) :DIM p(65)
  10. INIT:   GOSUB PATT1:
  11. START:  GOSUB RDTM:
  12.         INPUT "Do you want to change the time (Y/N)?";Q$
  13.         IF Q$ = "Y" GOTO START1:
  14.         END
  15. START1: INPUT "YEAR ";yr
  16.         INPUT "MONTH ";mo
  17.         INPUT "DATE ";dt
  18.         INPUT "DAY of the Week ";dy
  19.         INPUT "HOUR ";hr
  20.         INPUT "MIN. ";min
  21.         GOSUB SETCLK:
  22.         GOSUB RDTM:
  23.         END
  24.         
  25.   REM: This routine will read the SmartWatch
  26.   
  27. RDTM:   GOSUB PATT: : REM: send the 64bit wake-up pattern      
  28.         GOSUB RD64: : REM: read the time.
  29.         GOSUB DSPLY:
  30.         RETURN
  31.         
  32.   REM: this routine displays the time
  33. DSPLY:  
  34.         yr = i(57) + 2*i(58) + 4*i(59) + 8*i(60) + 10*i(61) + 20*i(62) + 40*i(63) + 80*i(64)
  35.         mo = i(49) + 2*i(50) + 4*i(51) + 8*i(52) + 10*i(53)
  36.         dt = i(41) + 2*i(42) + 4*i(43) + 8*i(44) + 10*i(45) + 20*i(46)
  37.         dy = i(33) + 2*i(34) + 4*i(35) + 8*i(36)
  38.         hr = i(25) + 2*i(26) + 4*i(27) + 8*i(28) + 10*i(29) + 20*i(30)
  39.         min = i(17) + 2*i(18) + 4*i(19) + 8*i(20) + 10*i(21) + 20*i(22) + 40*i(23)
  40.         sec = i(9) + 2*i(10) + 4*i(11) + 8*i(12) + 10*i(13) + 20*i(14) + 40*i(15)     
  41.         dy$ = "DAY OF THE WEEK ERROR"
  42.         IF dy = 1 THEN dy$ = "SUNDAY"
  43.         IF dy = 2 THEN dy$ = "MONDAY"
  44.         IF dy = 3 THEN dy$ = "TUESDAY"
  45.         IF dy = 4 THEN dy$ = "WEDENSDAY"
  46.         IF dy = 5 THEN dy$ = "THURSDAY"
  47.         IF dy = 6 THEN dy$ = "FRIDAY"
  48.         IF dy = 7 THEN dy$ = "SATURDAY"
  49.         IF mo = 1 THEN mo$ = "Jan"
  50.         IF mo = 2 THEN mo$ = "Feb"
  51.         IF mo = 3 THEN mo$ = "Mar"
  52.         IF mo = 4 THEN mo$ = "Apr"
  53.         IF mo = 5 THEN mo$ = "May"
  54.         IF mo = 6 THEN mo$ = "Jun"
  55.         IF mo = 7 THEN mo$ = "Jul"
  56.         IF mo = 8 THEN mo$ = "Aug"
  57.         IF mo = 9 THEN mo$ = "Sep"
  58.         IF mo = 10 THEN mo$ = "Oct"
  59.         IF mo = 11 THEN mo$ = "Nov"
  60.         IF mo = 12 THEN mo$ = "Dec"
  61.         CLS
  62.         PRINT dy$;" , ";mo$;dt; yr + 1900
  63.         PRINT hr;":";min;":";sec
  64.         
  65.         RETURN
  66.         
  67.   REM: this routine will set the SmartWatch
  68. SETCLK: INPUT "Hit <cr> when ready ";Q$
  69.         GOSUB PATT: : REM: wake-up the SmartWatch
  70.         FOR x = 1 TO 64
  71.         d(x) = 0 
  72.         NEXT x
  73.         tempb = yr
  74.         GOSUB BCD:
  75.         FOR x = 1 TO 8
  76.         d(x+56) = b(x)
  77.         NEXT x
  78.         tempb = mo
  79.         GOSUB BCD:
  80.         FOR x = 1 TO 5
  81.         d(x+48) = b(x)
  82.         NEXT x
  83.         tempb = dt
  84.         GOSUB BCD:
  85.         FOR x = 1 TO 6
  86.         d(x+40) = b(x)
  87.         NEXT x
  88.         tempb = dy
  89.         GOSUB BCD:
  90.         FOR x = 1 TO 4
  91.         d(x+32) = b(x)
  92.         NEXT x
  93.         tempb = hr
  94.         GOSUB BCD:
  95.         FOR x = 1 TO 6
  96.         d(x+24) = b(x)
  97.         NEXT x
  98.         tempb = min
  99.         GOSUB BCD:
  100.         FOR x = 1 TO 7
  101.         d(x+16) = b(x)
  102.         NEXT x
  103.         GOSUB SND64:
  104.         RETURN
  105.         
  106.   REM: This routine converts decimal to BCD
  107.           
  108. BCD:    tempc = INT(tempb/10)
  109.         tempb = tempb - tempc * 10
  110.         FOR y = 1 TO 8 
  111.         b(y) = 0
  112.         NEXT y
  113.         IF tempb < 8 THEN GOTO BCD1:              
  114.         tempb = tempb - 8
  115.         b(4) = 1
  116. BCD1:   IF tempb < 4 THEN GOTO BCD2:
  117.         tempb = tempb - 4
  118.         b(3) = 1
  119. BCD2:   IF tempb < 2 THEN GOTO BCD3:
  120.         tempb = tempb - 2
  121.         b(2) = 1
  122. BCD3:   IF tempb < 1 THEN GOTO BCD4:
  123.         b(1) = 1
  124. BCD4:   IF tempc < 8 THEN GOTO BCD5:
  125.         tempc = tempc - 8
  126.         b(8) = 1
  127. BCD5:   IF tempc < 4 THEN GOTO BCD6:
  128.         tempc = tempc - 4
  129.         b(7) = 1
  130. BCD6:   IF tempc < 2 THEN GOTO BCD7:
  131.         tempc = tempc - 2
  132.         b(6) = 1
  133. BCD7:   IF tempc < 1 THEN GOTO BCD8:
  134.         b(5) = 1
  135. BCD8:   RETURN
  136.  
  137.   REM: This ruotine will wake up the SmartWatch
  138. PATT:   nil = PEEK(rclk)
  139.         FOR x = 1 TO 64
  140.         IF p(x) > 0 THEN GOTO PSND1:
  141.         nil = PEEK (sclk0)
  142. PATLP:  
  143.         NEXT x
  144.         RETURN
  145. PSND1:   nil = PEEK (sclk1)
  146.         GOTO PATLP:  
  147.   
  148. PATT1:  FOR x = 1 TO 32
  149.         READ p(x)
  150.         p(x + 32) = p(x) : REM: pattern repeats after 32 bits
  151.         NEXT x
  152.         RESTORE
  153.         RETURN
  154.                     
  155.   REM: This routine sends 64 bits to the SmartWatch
  156.   REM: The bits to be sent must be in d(1) thru d(64)
  157.   
  158. SND64:  FOR x = 1 TO 64
  159.         IF d(x) > 0 THEN GOTO SND1:
  160.         nil = PEEK (sclk0)
  161. SNDLP:  
  162.         NEXT x
  163.         RETURN
  164. SND1:   nil = PEEK (sclk1)
  165.         GOTO SNDLP:
  166.         
  167.   REM: This routine receives 64 bits of data from the SmartWatch
  168.   REM: The data is returned as 1's or 0's in i(x)
  169.   
  170. RD64:  
  171.         FOR x = 1 TO 64
  172.         i(x) = PEEK (rclk)
  173.         GOSUB MASKBIT:
  174.         NEXT x
  175.         RETURN
  176.         
  177.   REM: This routine masks all but bit 0 from i(x)
  178.   
  179. MASKBIT: tempa = INT ( i(x) / 2 )
  180.          IF i(x) = (tempa * 2) THEN GOTO ZERO:
  181.          i(x) = 1
  182.          RETURN
  183. ZERO:    i(x) = 0
  184.          RETURN
  185.          
  186. DATA 1,0,1,0,0,0,1,1
  187. DATA 0,1,0,1,1,1,0,0
  188. DATA 1,1,0,0,0,1,0,1
  189. DATA 0,0,1,1,1,0,1,0
  190.  
  191.