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 / PROGRAMS / CLOCKK / MDCLCK13.LBR / SETTIME.BZS / SETTIME.BAS
BASIC Source File  |  2000-06-30  |  5KB  |  237 lines

  1. 10 'PROGRAM TO SET TIME ON REAL TIME CLOCK INSTALLED IN
  2. 20 'MORROW REV. 2 BOARD  I/O EXPANSION SLOT.
  3. 30 '  MIKE ALLEN 8/11/86
  4. 40 '
  5. 50 'N ARRAY HOLDS DATA FROM MSM5832 CHIP.
  6. 60 '
  7. 70 DIM N(12)
  8. 80 '
  9. 90 'CLEAR SCREEN [^Z]
  10. 100 '
  11. 110 PRINT CHR$(&H1A);
  12. 120 '
  13. 130 'IDENTIFY I/O PORTS FOR 8255
  14. 140 '    PA=PORT A - DATA TO/FROM MSM5832
  15. 150 '    PB=PORT B - ADDRESS TO MSM5832
  16. 160 '    PC=PORT C - CONTROL TO MSM5832
  17. 170 '        BIT 4=HOLD
  18. 180 '        BIT 5=READ
  19. 190 '        BIT 6=WRITE
  20. 200 '        BIT 7=CHIP-SELECT-NOT (0 SELECTS MSM5832)
  21. 210 '
  22. 220 PA=&H30:PB=&H31:PC=&H32:CTRL=&H33
  23. 230 '
  24. 240 'TELL 8255 TO OPERATE IN MODE 0 (SIMPLEST)
  25. 250 '    PORT A IS INPUT
  26. 260 '    PORTS B & C ARE OUTPUT
  27. 270 '
  28. 280 OUT CTRL,&H90
  29. 290 '
  30. 300 'SET READ LINE TO MSM5832 TRUE
  31. 310 '    (ALSO SETS CHIP-SELECT-NOT TO 0 TO ENABLE MSM5832)
  32. 320 '
  33. 330 OUT PC,&H20
  34. 340 FOR A=2 TO 12
  35. 350 '
  36. 360 'ADDRESS THE TOP 11 REGISTERS IN THE MSM5832
  37. 370 'READ THE DATA FROM EACH REGISTER INTO N ARRAY
  38. 380 '
  39. 390 OUT PB,A:N(A)=INP(PA)
  40. 400 NEXT A
  41. 410 '
  42. 420 'TURN OFF THE READ LINE TO THE MSM5832
  43. 430 '
  44. 440 OUT PC,&H0
  45. 450 '
  46. 460 'FORCE ENTRY TO WHILE LOOP
  47. 470 '
  48. 480 NEWIN = -1
  49. 490 '
  50. 500 'KEEP LOOPING UNTIL INPUT IS VALID
  51. 510 '
  52. 520 WHILE (NEWIN<0 OR NEWIN>99)
  53. 530 '
  54. 540 'COMPUTE PRESENT YEAR VALUE
  55. 550 '
  56. 560 NEWIN = 10*N(12)+N(11)
  57. 570 '
  58. 580 'DISPLAY IT
  59. 590 '
  60. 600 PRINT "Year? <";NEWIN;"> ";
  61. 610 '
  62. 620 'ENTER NEW VALUE AS STRING
  63. 630 '
  64. 640 INPUT "",D$
  65. 650 '
  66. 660 'IF SOMETHING WAS ENTERED, CONVERT IT; IF NOT WE KEEP OLD VALUE OF NEWIN
  67. 670 '
  68. 680 IF LEN(D$) THEN NEWIN = VAL(D$)
  69. 690 '
  70. 700 'END OF WHILE LOOP
  71. 710 '
  72. 720 WEND
  73. 730 '
  74. 740 'SET UP FOR MSM5832 REGISTERS
  75. 750 '
  76. 760 N(12)=NEWIN\10
  77. 770 N(11)=NEWIN MOD 10
  78. 780 '
  79. 790 'SINCE MOST OF THE FOLLOWING ENTRY LOOPS ARE MUCH LIKE THE PREVIOUS
  80. 800 'YEAR ENTRY LOOP, ONLY MAJOR DIFFERENCES WILL BE COMMENTED.
  81. 810 '
  82. 820 LY = -1
  83. 830 WHILE(LY<0 OR LY>1)
  84. 840 '
  85. 850 'GET BIT 2 OF N(8) - INDICATES A LEAP YEAR
  86. 860 '
  87. 870 LY = N(8)\4
  88. 880 PRINT "Leap year? [1=yes] <";LY;"> ";
  89. 890 INPUT"",D$
  90. 900 IF LEN(D$) THEN LY=VAL(D$)
  91. 910 WEND
  92. 920 NEWIN=-1
  93. 930 WHILE(NEWIN<1 OR NEWIN >12)
  94. 940 NEWIN=10*N(10)+N(9)
  95. 950 PRINT "Month? <";NEWIN;"> ";
  96. 960 INPUT "",D$
  97. 970 IF LEN(D$) THEN NEWIN=VAL(D$)
  98. 980 WEND
  99. 990 N(10)=NEWIN\10
  100. 1000 N(9)=NEWIN MOD 10
  101. 1010 NEWIN=-1
  102. 1020 WHILE(NEWIN<1 OR NEWIN>31)
  103. 1030 NEWIN=10*(N(8) AND &H3)+N(7)
  104. 1040 PRINT "Day? <";NEWIN;"> ";
  105. 1050 INPUT "",D$
  106. 1060 IF LEN(D$) THEN NEWIN=VAL(D$)
  107. 1070 WEND
  108. 1080 '
  109. 1090 'DON'T FORGET THE LEAP YEAR FLAG
  110. 1100 '
  111. 1110 N(8)=(NEWIN\10)+(4*LY)
  112. 1120 N(7)=NEWIN MOD 10
  113. 1130 NEWIN=-1
  114. 1140 WHILE(NEWIN<0 OR NEWIN>6)
  115. 1150 NEWIN=N(6)
  116. 1160 PRINT "Day of the week? [0=Sunday, 6=Saturday] <";NEWIN;"> ";
  117. 1170 INPUT "",D$
  118. 1180 IF LEN(D$) THEN NEWIN=VAL(D$)
  119. 1190 WEND
  120. 1200 N(6)=NEWIN
  121. 1210 '
  122. 1220 'DEFAULT FOR CIVIL TIME IS AM
  123. 1230 '
  124. 1240 CT=1
  125. 1250 '
  126. 1260 'N(5) > 3 MEANS EITHER PM OR 24 HR TIME
  127. 1270 '
  128. 1280 IF N(5)>3 THEN CT=2
  129. 1290 '
  130. 1300 'N(5) > 7 MEANS 24 HR TIME
  131. 1310 '
  132. 1320 IF N(5)>7 THEN CT=0
  133. 1330 '
  134. 1340 'STRIP 24HR AND PM BITS FROM N(5)
  135. 1350 '
  136. 1360 N(5)=N(5) AND &H3
  137. 1370 NEWIN=-1
  138. 1380 WHILE(NEWIN<0 OR NEWIN>2)
  139. 1390 NEWIN=CT
  140. 1400 PRINT "24 hr[0], AM[1] or PM[2]? <";NEWIN;"> ";
  141. 1410 INPUT "",D$
  142. 1420 IF LEN(D$) THEN NEWIN=VAL(D$)
  143. 1430 WEND
  144. 1440 CT=NEWIN
  145. 1450 '
  146. 1460 'GOTO A DIFFERENT INPUT LOOP FOR 24 HR TIME
  147. 1470 '
  148. 1480 IF CT=0 THEN GOTO 1710
  149. 1490 '
  150. 1500 'MAKE SURE DEFAULT HOURS ARE CONSISTANT WITH 12 HOUR TIME
  151. 1510 '
  152. 1520 NEWIN=10*N(5)+N(4)
  153. 1530 IF NEWIN>12 THEN NEWIN=NEWIN-12
  154. 1540 IF NEWIN=0 THEN NEWIN=12
  155. 1550 N(5)=NEWIN\10
  156. 1560 N(4)=NEWIN MOD 10
  157. 1570 '
  158. 1580 '12 HOUR INPUT LOOP
  159. 1590 '
  160. 1600 NEWIN=-1
  161. 1610 WHILE(NEWIN<1 OR NEWIN>12)
  162. 1620 NEWIN=10*N(5)+N(4)
  163. 1630 PRINT "Hours? <";NEWIN;"> ";
  164. 1640 INPUT "",D$
  165. 1650 IF LEN(D$) THEN NEWIN=VAL(D$)
  166. 1660 WEND
  167. 1670 GOTO 1810
  168. 1680 '
  169. 1690 '24 HOUR INPUT LOOP
  170. 1700 '
  171. 1710 NEWIN=-1
  172. 1720 WHILE(NEWIN<0 OR NEWIN>23)
  173. 1730 NEWIN=10*N(5)+N(4)
  174. 1740 PRINT "Hours? <";NEWIN;"> ";
  175. 1750 INPUT "",D$
  176. 1760 IF LEN(D$) THEN NEWIN=VAL(D$)
  177. 1770 WEND
  178. 1780 '
  179. 1790 'BOTH HOUR INPUT LOOPS COME TOGETHER HERE
  180. 1800 '
  181. 1810 N(5)=NEWIN\10
  182. 1820 N(4)=NEWIN MOD 10
  183. 1830 '
  184. 1840 'DON'T FORGET THE 24HR OR PM FLAGS
  185. 1850 '
  186. 1860 IF CT=0 THEN N(5)=N(5) OR &H8
  187. 1870 IF CT=2 THEN N(5)=N(5) OR &H4
  188. 1880 NEWIN=-1
  189. 1890 WHILE(NEWIN<0 OR NEWIN>59)
  190. 1900 NEWIN=10*N(3)+N(2)
  191. 1910 PRINT "Minutes? <";NEWIN;"> ";
  192. 1920 INPUT "",D$
  193. 1930 IF LEN(D$) THEN NEWIN=VAL(D$)
  194. 1940 WEND
  195. 1950 N(3)=NEWIN\10
  196. 1960 N(2)=NEWIN MOD 10
  197. 1970 INPUT "Press RETURN to start clock on the minute",D$
  198. 1980 '
  199. 1990 'SET ALL 3 8255 PORTS AS OUTPUT
  200. 2000 '
  201. 2010 OUT CTRL,&H80
  202. 2020 '
  203. 2030 'TURN ON HOLD
  204. 2040 '
  205. 2050 OUT PC,&H10
  206. 2060 '
  207. 2070 'NO NEED TO WAIT - BASIC IS PLENTY SLOW
  208. 2080 '
  209. 2090 'WRITE ALL REGISTERS SO SECONDS WILL BE RESET
  210. 2100 '
  211. 2110 FOR I=0 TO 12
  212. 2120 OUT PB,I
  213. 2130 OUT PA,(N(I) AND &HF)
  214. 2140 '
  215. 2150 'STROBE THE WRITE LINE
  216. 2160 '
  217. 2170 OUT PC,&H50
  218. 2180 OUT PC,&H10
  219. 2190 NEXT I
  220. 2200 '
  221. 2210 'TURN OFF THE HOLD'
  222. 2220 '
  223. 2230 OUT PC,&H0
  224. 2240 '
  225. 2250 'SET THE 8255 FOR READING THE CLOCK
  226. 2260 '
  227. 2270 OUT CTRL,&H90
  228. 2280 '
  229. 2290 'EXIT TO CP/M
  230. 2300 '
  231. 2310 SYSTEM
  232. 2320 END
  233. 50 'SET THE 8255 FOR READING THE CLOCK
  234. 2260 '
  235. 2270 OUT CTRL,&H90
  236. 2280 '
  237. 2290 'EXIT