home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol147 / rsj.bas < prev    next >
Encoding:
BASIC Source File  |  1984-04-29  |  3.8 KB  |  127 lines

  1. 5 REM
  2. 10 REM     TimEPROMmer Clock Read-Set Routine w/ Julian Date
  3. 13 REM 
  4. 15 REM  For the TimEPROMmer Card from Optronics Technology, 
  5. 17 REM  2990 Atlantic Avenue, Penfield, NY 14526
  6. 20 REM
  7. 30 REM  D. Mc Lanahan, POBox 17, Marlow,NH 25 Mar 83
  8. 50 REM  Julian date-time assumes TP-100 set to Universal Time (GMT)
  9. 55 REM  Julian decimals set to agree with 1-second resolution of TP-100
  10. 57 REM
  11. 60 REM  FOR 24-HOUR (MILITARY) TIME, SET MIL=8
  12. 70 REM  FOR 12-HOUR (USUAL) TIME, SET MIL=0 (NOT IMPLEMENTED)
  13. 80 ON ERROR GOTO 710
  14. 90 MIL=8
  15. 100 DIM TIME(13),W$(7)
  16. 110 DATA Sunday, Monday,Tuesday,Wednesday,Thursday,Friday,Saturday
  17. 120 FOR X=1 TO 7 : READ W$(X) : NEXT X
  18. 130 P=40 : P1=41 : REM---TP-100 Addresses- MUST match on-card switches!
  19. 140 GOSUB 550 : REM Go read clock
  20. 150 YR=TIME(1)*10+TIME(2)+1900 : REM  format data
  21. 160 MO=(TIME(3) AND 1)*10+TIME(4)
  22. 170 DA=(TIME(5) AND 3)*10+TIME(6)
  23. 180 W=TIME(7)+1
  24. 190 HR=(TIME(8) AND 3)*10+TIME(9)
  25. 200 MIN=(TIME(10) AND 7)*10+TIME(11)
  26. 210 S=(TIME(12) AND 7)*10+TIME(13)
  27. 220 D$=W$(W)
  28. 230 PRINT USING "##";MO; : REM  print date-time
  29. 240 PRINT "-";
  30. 250 PRINT USING "##";DA;
  31. 260 PRINT "-";
  32. 270 PRINT YR;
  33. 280 PRINT ",  ";
  34. 290 PRINT D$". ";
  35. 300 PRINT HR;":";MIN;":";S;" "
  36. 310 SECS=HR*3600+MIN*60+S
  37. 320 JT=SECS/86400!
  38. 330 GOSUB 400 :  REM This routine determines the Julian Date
  39. 340 OF#=2159407.5#
  40. 350 PRINT "Julian date-time is ";
  41. 360 PRINT USING "########,.#####";(X+OF#+JT)
  42. 370 PRINT ""
  43. 380 GOTO 650
  44. 390 REM ***SUBROUTINES***
  45. 400 GOSUB 490:D1=DA:M1=MO:Y1=YR:GOSUB 430:REM***TEST DATE***
  46. 410 IF D1<>DA OR M1<>MO OR Y1<>YR THEN PRINT:PRINT "INVALID DATE":GOTO 400
  47. 420 RETURN
  48. 430 Y=INT((X+60)/365.25):REM ***NUMBER TO DATE***
  49. 440 I=X-INT(Y*365.25)+120+INT(Y/100)-INT(Y/400)
  50. 450 M=INT((I-.1)/30.6):IF M<4 THEN M=M+12:Y=Y-1:GOTO 440
  51. 460 I=I-INT(M*30.6):IF M>13 THEN M=M-12:Y=Y+1
  52. 470 YR=Y+1200:MO=M-1:DA=I
  53. 480 RETURN
  54. 490 D=DA:M=MO:Y=YR-1200:REM ***DATE TO NUMBER***
  55. 500 M=M+1:IF M<=3 THEN Y=Y-1:M=M+12
  56. 510 X=INT(365.25*Y)+INT(30.6*M)+D-120-INT(Y/100)+INT(Y/400)
  57. 520 RETURN
  58. 530 GOTO 650
  59. 540 REM ****** READ DATA ****** 
  60. 550 OUT P,16 : REM  output hold bit
  61. 560 OUT P,48 : REM  output hold + read bits
  62. 570 FOR X=1 TO 13 : REM  output address & input d-t data
  63. 580 OUT P,61-X
  64. 590 TIME(X)=INP(P1) : NEXT X
  65. 600 OUT P,0 : REM  remove clock hold
  66. 610 FOR X=1 TO 13
  67. 620 TIME(X)=(TIME(X)) AND 15 : NEXT X
  68. 630 TIME(8)=TIME(8) AND 3
  69. 640 RETURN
  70. 650 PRINT"Type (1) To Display time"
  71. 660 PRINT"     (2) To Return to Basic"
  72. 670 PRINT"     (3) To set clock"
  73. 680 PRINT"     (4) To return to CP/M"
  74. 690 INPUT L
  75. 700 ON L GOTO 140,1210,790,1200
  76. 710 IF ERR=9 AND ERL=220 THEN 720
  77. 720 PRINT CHR$(7)
  78. 730 PRINT CHR$(7)
  79. 740 PRINT "TimEPROMmer either not installed, or not configured for ";HEX$(P);" Hex."
  80. 750 PRINT "Check that DIP switch 17 matches 'P' in the header of this program."
  81. 760 PRINT CHR$(7)
  82. 770 GOTO 1210
  83. 780 REM
  84. 790 REM      TimEPROM ClockSet DEMO  Routine
  85. 800 REM     ******     SET   .BAS    ****** 11-11-82
  86. 810 PRINT " TIME SET ROUTINE IN BASIC"
  87. 820 REM GET DATA
  88. 830 PRINT "ENTER DATE IN THE FORM:YR,MO,DA "
  89. 840 INPUT YR,MO,DA
  90. 850 PRINT "ENTER DAY OF THE WEEK, 0=SUN, 2=TUES, 4=THURS"
  91. 860 INPUT W
  92. 870 PRINT "ENTER 24 HR TIME AS : HR,MIN"
  93. 880 INPUT HR,MIN
  94. 890 REM PREPARE THE DATA FOR ENTRY
  95. 900 LEAP=0
  96. 910 IF ((YR MOD 4=0) AND (MO=2)) THEN LEAP=4
  97. 920 TIME(1)=INT(YR/10)
  98. 930 TIME(2)=(YR AND 15)
  99. 940 TIME(3)=INT((MO/10)+LEAP)
  100. 950 TIME(4)=(MO-10*INT(MO/10))
  101. 960 TIME(5)=INT(DA/10)
  102. 970 TIME(6)=(DA-10*INT(DA/10))
  103. 980 TIME(7)=W
  104. 990 TIME(8)=INT((HR/10)+MIL)
  105. 1000 TIME (9)=(HR-10*INT(HR/10))
  106. 1010 TIME(10)=INT(MIN/10)
  107. 1020 TIME(11)=(MIN-10*INT(MIN/10))
  108. 1030 TIME(12)=1
  109. 1040 TIME(13)=0
  110. 1050 PRINT "PUSH CR ON THE ZERO SECOND"
  111. 1060 INPUT J
  112. 1070 OUT P,16
  113. 1080 FOR X= 1 TO 14
  114. 1090 OUT P,15+X
  115. 1100 OUT P1,TIME(14-X)
  116. 1110 FOR I=1 TO 4
  117. 1120 NEXT I
  118. 1130 OUT P,79+X
  119. 1140 OUT P,79+X
  120. 1150 OUT P,15+X
  121. 1160 NEXT X
  122. 1170 OUT P,0
  123. 1180  PRINT "THE CLOCK IS SET"
  124. 1190 GOTO 140
  125. 1200 SYSTEM
  126. 1210 END
  127.