1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
1 REM clock.bas
2 REM by Scott Baker, http://www.smbaker.com/
3 REM Demonstrates use of BQ4845 RTC and TIL311 FrontPanel Board
5 REM set 24-hour mode
6 OUT &HCE, 2
10 LS=999
20 MD=1
30 CTR=0
40 ADDR=0
100 x=INP(4)
110 if (x and 1)=1 THEN MD=1
120 if (x and 2)=2 THEN CTR=0 : MD=2
130 if (x and 4)=4 THEN ADDR=0 : MD=3
140 if (x and 8)=8 THEN MD=4
199 REM MD=1 is clock
200 IF MD<>1 GOTO 300
210 GOSUB 1000
215 D=0
220 if (LS = S) GOTO 100
230 LS = S
240 GOSUB 2000
250 GOTO 100
299 REM MD=2 is counter
300 IF MD<>2 GOTO 400
310 I=CTR
320 J=0
330 GOSUB 2200
340 CTR=CTR+1
350 GOTO 100
399 REM MD=3 is dump
400 IF MD<>3 GOTO 500
410 J=ADDR
420 I=PEEK(ADDR)
430 GOSUB 2300
440 ADDR=ADDR+1
450 GOTO 100
399 REM MD=4 is feedface
500 IF MD<>4 GOTO 600
510 OUT 0, &HFE
520 OUT 1, &HED
530 OUT 2, &HFA
540 OUT 3, &HCE
550 GOTO 100
600 GOTO 100
998 REM read the current time from the RTC
999 REM store it in the variables H, M, S.
1000 X=inp(&HC0)
1010 S=(X and 15) + INT(X/16)*10
1020 X=inp(&HC2)
1030 M=(X and 15) + INT(X/16)*10
1040 X=inp(&HC4)
1050 H=(X and 15) + (INT(X/16) and 3)*10
1060 RETURN
1999 REM print (D, H, M, S) on front panel
2000 TS=INT(S/10)
2010 OS=S-(TS*10)
2020 OUT &H03, TS*16 + OS
2030 TM=INT(M/10)
2040 OM=M-(TM*10)
2050 OUT &H02, TM*16 + OM
2060 TH=INT(H/10)
2070 OH=H-(TH*10)
2080 OUT &H01, TH*16 + OH
2090 TD=INT(D/10)
2100 OD=D-(TD*10)
2100 OUT &H00, TD*16 + OD
2110 RETURN
2199 REM print 16-bit integers (J,I) on front panel in decimal
2200 D=INT(J/100)
2210 H=J-(D*100)
2220 M=INT(I/100)
2230 S=I-(M*100)
2240 GOSUB 2000
2250 RETURN
2299 REM print 16-bit integers (J,I) on front panel in hex
2300 OUT 0, INT(J/256)
2310 OUT 1, J-INT(J/256)*256
2320 OUT 2, INT(I/256)
2330 OUT 3, I-INT(I/256)*256
2340 RETURN
2999 REM set the clock using H, M, S
3000 TS=INT(S/10)
3010 OS=S-(TS*10)
3020 OUT &HC0, TS*16 + OS
3030 TM=INT(M/10)
3040 OM=M-(TM*10)
3050 OUT &HC2, TM*16 + OM
3060 TH=INT(H/10)
3070 OH=H-(TH*10)
3080 OUT &HC4, TH*16 + OH
3090 RETURN
|