forked from robhagemans/basicode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathA11_EPROM_als_teller.bc3
236 lines (235 loc) · 9.28 KB
/
A11_EPROM_als_teller.bc3
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
1000 A=100:GOTO20:REM (E)PROM ALS TELLER
1010 HB=HO+1:VB=VE:MO=2
1020 SP$=" ":S1$=" "
1030 DIMA(255)
1040 SR$="(E)PROM als teller":GOSUB5000
1050 VE=4:HO=0:GOSUB110:PRINT" U kunt kiezen uit:"
1060 VE=6:SR$="(I)nvoer":GOSUB5020:SR$="(U)itvoer"
1070 GOSUB5020:SR$="(P)rinten":GOSUB5020
1080 SR$="(B)ekijken":GOSUB5020:SR$="(L)aden"
1090 GOSUB5020:SR$="(S)aven"
1100 GOSUB5020:SR$="(H)elp":GOSUB5020:SR$="(E)inde"
1110 GOSUB5020:PRINT:PRINT
1120 PRINT" Geef uw keuze (I,U,P,B,L,S,H,E) ";
1130 GOSUB210:IFIN=73 THEN GOSUB1500
1140 IFIN=85 THEN GOSUB2000
1150 IFIN=80 THEN GOSUB2500
1160 IFIN=66 THEN GOSUB3000
1170 IFIN=76 THEN GOSUB3500
1180 IFIN=83 THEN GOSUB4000
1190 IFIN=72 THEN GOSUB4500
1200 IFIN=69 THEN950
1210 GOTO1040
1500 SR$="INVOER":GOSUB5000:PRINT:PRINT
1510 PRINT"Startadres: ";:INPUTH$:GOSUB5500:SA=H
1520 IFSA>255 THEN1500
1530 GOSUB5000:PRINT:PRINT:PRINT:SR=SA:GOSUB300:GOSUB5040
1540 H$="":PRINT" adres ";SR$;" ";:INPUTH$
1550 IFH$="" THENRETURN
1560 IFLEFT$(H$,1)<>"*" THEN GOSUB5500:GOTO1640
1570 IFLEN(H$)=1 THEN1540
1580 SR$=MID$(H$,2,1):GOSUB330
1590 IFSR$="B" THENMO=0
1600 IFSR$="O" THENMO=1
1610 IFSR$="D" THENMO=2
1620 IFSR$="H" THENMO=3
1630 GOTO1650
1640 A(SA)=H:SA=SA+1:IFSA>255 THENSA=0
1650 SR=SA:GOSUB300:GOSUB5040:GOTO1540
2000 GOSUB100:VE=1:K=0:GOSUB7000
2010 GOSUB210:IFIN=82 THENK=0:GOSUB100:GOTO2060
2020 IFIN=77 THENRETURN
2030 IFIN<>71 THENK=A(K):GOTO2060
2040 PRINT:PRINT:PRINT"Geef startadres: ";:INPUTH$
2050 GOSUB5500:K=H:GOSUB100
2060 GOSUB7000:GOTO2010
2500 SR$="PRINTEN":GOSUB5000
2510 GOSUB5050:PRINT:PRINT
2520 PRINT"Stel uw printer in en druk een toets";
2530 GOSUB210:SR$=" adres"+S1$+" binair "+S1$+" "
2540 SR$=SR$+"octaal"+S1$+" decimaal"+" "+" hex"
2550 GOSUB360:GOSUB350:GOSUB360:GOSUB360
2560 FORK=BE TOEJ
2570 H=A(K):GOSUB6000:SR=K:GOSUB300
2580 SR$=LEFT$(S1$,7-LEN(SR$))+SR$:GOSUB350
2590 SR$=S1$+B$:GOSUB350:SR$=S1$+A$:GOSUB350
2600 SR$=S1$+D$:GOSUB350:SR$=S1$+H$:GOSUB350:GOSUB360
2610 NEXTK:RETURN
3000 SR$="BEKIJKEN":GOSUB5000:GOSUB5050
3010 J=VB-1:GOSUB100
3020 IFEJ<=VB-1 THENJ=EJ
3030 FORK=BE TOJ
3040 GOSUB7000:NEXTK
3050 K=K-1:GOSUB210:IFEJ<=VB THENRETURN
3060 K=K+1:GOSUB7000:GOSUB210:IFK<EJ THEN3060
3070 RETURN
3500 SR$="LADEN":GOSUB5000:PRINT:PRINT:PRINT
3510 PRINT" Van welk medium wilt u laden:"
3520 GOSUB5080:PRINT:PRINT
3530 PRINT" Wat is de naam van het bestand ";
3540 INPUTNF$:GOSUB500:PRINT:PRINT:PRINT"Laden...";
3550 FORI=0 TO255:GOSUB540:A(I)=VAL(IN$):NEXTI
3560 GOSUB580:RETURN
4000 SR$="SAVEN":GOSUB5000:PRINT:PRINT:PRINT
4010 PRINT" Op welk medium wilt u saven:":GOSUB5080
4020 PRINT:PRINT:PRINT" Onder welke naam ";:INPUTNF$
4030 NF=NF+1:GOSUB500:PRINT:PRINT"Saven...";
4040 FORI=0 TO255:SR=A(I):GOSUB300:GOSUB560:NEXTI
4050 GOSUB580:RETURN
4500 SR$="UITLEG":GOSUB5000:PRINT:PRINT:PRINT
4510 V=3:H1=1:RESTORE
4520 I=1:READA$:A$=A$+" ":H$=""
4530 HH$=MID$(A$,I,1):H$=H$+HH$
4540 IFHH$<>" " THEN4640
4550 IFH$="@ " THENPRINT:V=V+1:H1=1:H$="":GOTO4520
4560 IFH$="@@ " THEN GOSUB4650:RETURN
4570 HH=LEN(H$)
4580 IFI=LEN(A$) THEN GOSUB4600:GOTO4520
4590 GOSUB4600:GOTO4640
4600 IFHH+H1<HB THENPRINTH$;:H1=H1+HH:H$="":RETURN
4610 PRINT:PRINTH$;:H1=HH:V=V+1:H$="":IFV<VB-3 THENRETURN
4620 GOSUB4650:V=3:H1=1:GOSUB100:GOSUB5000
4630 PRINT:PRINT:PRINT:RETURN
4640 I=I+1:GOTO4530
4650 VE=VB-1:HO=HB-10:GOSUB110:PRINT"<<TOETS>>";
4660 GOSUB210:RETURN
4670 GOTO4670
5000 GOSUB100:VE=0:HO=INT(HB/2-LEN(SR$)/2)-3
5010 GOSUB110:GOSUB150:RETURN
5020 VE=VE+1:HO=INT(HB/2-LEN(SR$)/2):GOSUB110:PRINTSR$
5030 RETURN
5040 H=LEN(SR$):IFH<4 THENSR$=SR$+LEFT$(SP$,4-H):RETURN
5050 PRINT:PRINT:PRINT" Beginadres: ";:INPUTH$
5060 GOSUB5500:BE=H:PRINT" Eindadres: ";:INPUTH$
5070 GOSUB5500:EJ=H:RETURN
5080 VE=6:SR$="(B)asicode":GOSUB5020
5090 VE=VE+1:SR$="(C)assette":GOSUB5020
5100 VE=VE+1:SR$="(D)isk-drive":GOSUB5020
5110 PRINT:PRINT:PRINT:PRINT" Geef uw keuze (B,C,D): ";
5120 GOSUB210:IF(IN<66)OR(IN>68) THEN5120
5130 NF=(IN-66)*2:RETURN
5500 ONMO+1 GOSUB5520,5550,5580,5590
5510 RETURN
5520 H=0:FORI=LEN(H$)-1 TO0 STEP-1
5530 IFMID$(H$,LEN(H$)-I,1)="1" THENH=H+2^I
5540 NEXTI:RETURN
5550 H=0:FORI=LEN(H$)-1 TO0 STEP-1
5560 HH=VAL(MID$(H$,LEN(H$)-I,1))
5570 H=H+HH*8^I:NEXTI:RETURN
5580 H=VAL(H$):RETURN
5590 H=0:FORI=LEN(H$)-1 TO0 STEP-1
5600 SR$=MID$(H$,LEN(H$)-I,1):GOSUB330
5610 IFSR$="A" THENHH=10:GOTO5680
5620 IFSR$="B" THENHH=11:GOTO5680
5630 IFSR$="C" THENHH=12:GOTO5680
5640 IFSR$="D" THENHH=13:GOTO5680
5650 IFSR$="E" THENHH=14:GOTO5680
5660 IFSR$="F" THENHH=15:GOTO5680
5670 HH=VAL(SR$)
5680 H=H+HH*16^I:NEXTI:RETURN
6000 I=0:HH=H:B$="":SR=H:GOSUB300:D$=SR$
6010 IFH-2^I>=0 THENI=I+1:GOTO6010
6020 FORJ=I-1 TO0 STEP-1
6030 IFH-2^J<0 THENB$=B$+"0":GOTO6050
6040 H=H-2^J:B$=B$+"1"
6050 NEXTJ:H=HH
6060 IFLEN(B$)>7 THEN6080
6070 B$=LEFT$("00000000",8-LEN(B$))+B$
6080 B$=" "+B$:I=0:H=HH:A$=""
6090 IFH-8^I>=0 THENI=I+1:GOTO6090
6100 FORJ=I-1 TO0 STEP-1:V=1
6110 IFH-V*8^J>=0 THENV=V+1:GOTO6110
6120 SR=V-1:GOSUB300:H=H-SR*8^J
6130 A$=A$+SR$:NEXTJ:H=HH
6140 A$=LEFT$(S1$,6-LEN(A$))+A$
6150 I=0:H$=""
6160 IFH-16^I>=0 THENI=I+1:GOTO6160
6170 FORJ=I-1 TO0 STEP-1:V=1
6180 IFH-V*16^J>=0 THENV=V+1:GOTO6180
6190 SR=V-1:IFSR<10 THEN GOSUB300:GOTO6210
6200 SR$=MID$("ABCDEF",SR-9,1)
6210 H$=H$+SR$:H=H-SR*16^J:NEXTJ
6220 H$=LEFT$(S1$,3-LEN(H$))+H$
6230 D$=LEFT$(S1$,8-LEN(D$))+D$
6240 RETURN
7000 IFVE=VB THEN GOSUB110:PRINT
7010 GOSUB120:V=VE:IFV=VB THENV=V-1
7020 HO=0:VE=0:GOSUB110
7030 PRINT"Adres binair octaal decimaal hex"
7040 VE=V+1:HO=0:H=A(K):GOSUB6000:SR=K:GOSUB300
7050 SR$=LEFT$(S1$,4-LEN(SR$))+SR$:GOSUB110
7060 PRINTSR$;B$;" ";A$;D$;" ";H$;
7070 RETURN
25000 DATA"(E)PROM ALS TELLER","@","------------------"
25010 DATA"@","@","Als u wel eens digitale schakelingen"
25020 DATA"ontwerpt zult u ook wel eens voor het probleem"
25030 DATA"hebben gestaan dat u een teller wilde die niet"
25040 DATA"zomaar in IC-vorm verkrijgbaar is. Een binaire"
25050 DATA"teller lukt nog wel, moeilijker wordt het bij"
25060 DATA"een BCD-teller en haast onmogelijk als u een"
25070 DATA"teller wilt die telt op een door u vastgestelde"
25080 DATA"manier (bv. 1,2,4,5,1,2,4,5). Door nu echter een"
25090 DATA"(E)PROM op een bijzondere manier te gebruiken"
25100 DATA"kunt u elke (on)mogelijke teller maken. U dient"
25110 DATA"dan de data-uitgangen van de (E)PROM via een"
25120 DATA"buffer door te verbinden met de adreslijnen van"
25130 DATA"de (E)PROM. De uitgang van de buffer (die dus"
25140 DATA"naar de adreslijnen gaat) is tevens de uitgang"
25150 DATA"van teller. Door nu de (E)PROM op de juiste"
25160 DATA"manier te programmeren, kunt u elke gewenste"
25170 DATA"teller maken. Stel dat u begint op adres nul en"
25180 DATA"dat daar vijftien staat. De (E)PROM springt nu"
25190 DATA"naar adres vijftien, waar een zeven staat. De"
25200 DATA"(E)PROM springt nu naar adres zeven waar"
25210 DATA"bijvoorbeeld een nul staat. De (E)PROM springt"
25220 DATA"weer naar adres nul, vandaar weer naar adres"
25230 DATA"vijftien enz. Er is dus een teller ontstaan, die"
25240 DATA"als volgt telt: 0,15,7,0,15,7. Dit is nog maar"
25250 DATA"een simpel voorbeeld, maar als u acht datalijnen"
25260 DATA"neemt, kunt u een aardig ingewikkelde teller"
25270 DATA"maken. Om nu uit te zoeken hoe de inhoud van de"
25280 DATA"(E)PROM dient te zijn, kunt u dit programma"
25290 DATA"gebruiken. U kunt de inhoud van de (E)PROM"
25300 DATA"invoeren en vervolgens kijken wat dat voor een"
25310 DATA"teller geeft. U dient hiervoor optie (I) te"
25320 DATA"kiezen. Vervolgens wordt er naar het startadres"
25330 DATA"gevraagd. Nu kunt u invoeren. In eerste"
25340 DATA"instantie decimaal, maar als u dit wilt"
25350 DATA"veranderen, kunt u invoeren *B voor binair, *O"
25360 DATA"voor octaal en *H voor hexa-decimaal. Om weer"
25370 DATA"terug te keren naar decimaal, tikt u *D in. Als"
25380 DATA"u bijvoorbeeld naar octaal bent overgestapt,"
25390 DATA"dient u ook alle andere invoer in het programma"
25400 DATA"octaal in te voeren! Om naar het menu terug te"
25410 DATA"keren drukt u alleen op <RETURN> zonder iets in"
25420 DATA"te voeren. Door nu de optie 'U' te kiezen, kunt"
25430 DATA"u kijken welke teller u hebt 'gemaakt' De teller"
25440 DATA"telt steeds een verder als u op een toets drukt."
25450 DATA"Als u op 'R' drukt, begint de teller weer bij"
25460 DATA"adres nul. Als u op 'G' drukt, kunt u zelf een"
25470 DATA"startadres ingeven. Door op 'M' te drukken keert"
25480 DATA"u weer terug naar het menu. U kunt de invoer ook"
25490 DATA"printen door de optie 'P' te kiezen. Als u de"
25500 DATA"invoer alleen maar op het scherm wilt zien, kunt"
25510 DATA"u de optie 'B' gebruiken. Wijzigen kunt u met de"
25520 DATA"invoerroutine. Bij het startadres geeft u dan"
25530 DATA"het te wijzigen adres op. Als u eenmaal een"
25540 DATA"juiste teller hebt gemaakt, kunt u deze saven en"
25550 DATA"later weer laden door respectievelijk de opties"
25560 DATA"'S' en 'L'.","@@"
30000 REM---------------------
30010 REM
30020 REM (E)PROM ALS TELLER
30030 REM
30040 REM GEMAAKT OP EEN
30050 REM ACORN ELECTRON
30060 REM
30070 REM---------------------
30080 REM
32000 REM DOOR RONALD VAN VUGT
32010 REM PA3EAH
32020 REM
32030 REM---------------------
32040 REM AUGUSTUS 1987, V1.1
32050 REM---------------------
32060 REM TROS-RADIO dd 871014