-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathalpa.bas
More file actions
424 lines (423 loc) · 14.4 KB
/
alpa.bas
File metadata and controls
424 lines (423 loc) · 14.4 KB
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
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
#RetroDevStudio.MetaData.BASIC:2049,BASIC V2,uppercase,10,10
0 REM
100 REM ********** ALPA ***********
110 REM * P.ROSHAMM 12/4/1984 *
111 REM * AND DANNY DAVIS *
112 REM * *
115 REM * ASSEMBLY LANGUAGE *
116 REM * PROGRAMMING AID *
118 REM * *
120 REM ***************************
150 GOTO 9000
1000 REM
1010 REM PROCESS LINE
1020 REM
1030 F=0:FM=0:ER=0
1040 FOR J=P1 TO P2
1050 IF C$(J,1) = " " THEN 1110
1053 CO$=C$(J,1):IFC$(J,2)<>" "THEN CO$=CO$+C$(J,2)
1054 IFC$(J,3)<>" "THENCO$=CO$+C$(J,3)
1055 GOSUB 30000
1056 IF ER>0 THEN 1110
1061 IF J<100 THENPRINT" ";
1062 IF J<10 THENPRINT" ";
1069 PRINT J;": ";
1070 IF LEFT$(C$(J,2),1)="L" THEN 1075
1071 GOTO 1080
1075 PRINTC$(J,1)+" "+C$(J,2)+C$(J,3);" ";:GOTO 1090
1080 PRINTC$(J,1);" ";C$(J,2);" ";C$(J,3);
1090 F=F+1
1095 PRINTSPC(8);DI$
1100 IF F=22 THEN GOTO 1120
1110 NEXT J
1120 RETURN
2000 REM
2010 REM MAIN ROUTINE
2020 A$="":INPUT"COMMAND OR LINE(###) : ";A$
2040 IF LEFT$(A$,1)>"9" GOTO3000
2042 PRINT"";:FOR I=1TO 36:PRINT" ";:NEXTI:PRINTCHR$(13);"";
2045 IF LEFT$(A$,1)<"0"GOTO 2020
2050 K$="":FORK=1TO 4
2060 IF MID$(A$,K,1)=" " GOTO 2090
2065 IF MID$(A$,K,1)="" THEN A$=" ":J=VAL(K$):N=J:GOTO 2170
2067 IF MID$(A$,K,1)>"9"ORMID$(A$,K,1)<"0" THEN PRINT"INVALID LINE #":GOTO 2020
2070 K$=K$+MID$(A$,K,1)
2080 NEXT K
2090 IF K=5 OR VAL(K$)=ZE OR VAL(K$)>LN GOTO 2020
2100 J=VAL(K$):N=J
2110 A$=RIGHT$(A$,(LEN(A$)-K))
2120 LET K$=""
2130 FORK=1 TO LEN(A$)
2140 IF MID$(A$,K,1)<> " " THENK$=K$+MID$(A$,K,1)
2150 NEXT K
2160 A$=K$
2162 IF LEFT$(A$,1)="L"THEN GOTO 2020
2170 FORI=1 TO 5 STEP 2
2180 K=INT(I/2+1)
2190 C$(J,K)=MID$(A$,I,2)
2195 C$(J,K)=LEFT$(C$(J,K)+" ",2)
2200 NEXTI
2210 IF C$(N,OE)=" "THEN2250
2220 IF N<TP THENTP=N
2230 IF N>BPTHENBP=N
2240 GOTO 2320
2250 IFN<>BP GOTO2280
2260 IF BP=1 OR C$(BP,1)<>" "GOTO2320
2270 BP=BP-OE:GOTO2260
2280 IF N<>TP GOTO 2320
2290 IF C$(TP,OE)<>" "THENGOTO2320
2300 IF TP<>BP AND TP<>LN THENTP=TP+OE:GOTO2290
2310 TP=OE
2320 PP=N
2330 IF N<TP THEN PP=TP:GOTO2380
2340 NU=ZE
2350 IF PP=TP OR NU=0 THENGOTO2380
2360 IF C$(PP,OE)<>" " THENNU=NU+OE
2370 PP=PP-OE:GOTO2350
2380 P1=PP:P2=PP
2385 IF C$(N,1)=" " THEN 2020
2390 GOSUB 1000
2391 IF ER=1 THEN PRINT"ILLEGAL OP-CODE"
2392 IF ER=2 THEN PRINT"INVALID OP-CODE"
2393 IF ER=3 THEN PRINT"INVALID LENGTH OPERAND"
2394 IF ER=4 THEN PRINT"ILLEGAL OPERAND"
2400 GOTO 2020
2590 REM***********WATCH/NOWATCH
2600 INPUT"WATCH WHAT ADDRESS : ";QZ$:XQ$=RIGHT$(("0000"+QZ$),4)
2610 GOSUB 15000:IF ER=1 THEN 2600
2620 WQ=XQ:WQ$=XQ$:GOTO2020
2630 IF WA<>1 THEN2640
2635 PRINT"ADDRESS ";WQ$;"= <BEFORE> $";:ET=PEEK(WQ):GOSUB 40000
2636 PRINTRIGHT$(HB$,2)
2640 IF PEEK(R)=0 THEN PRINT "NO PROGRAM IN MEMORY":PRINT:GOTO 2645
2641 SYS R
2645 IF WA<>1 THEN2660
2650 PRINT"ADDRESS ";WQ$;"= <AFTER > $";:ET=PEEK(WQ):GOSUB40000
2655 PRINTRIGHT$(HB$,2)
2660 GOTO2020
2700 REM *********DUMP MEMORY
2710 DC$="0000"
2720 INPUT"DUMP FROM WHAT ADDRESS ";DM$
2730 XQ$=RIGHT$((DC$+DM$),4):GOSUB15000:IF ER=1 THEN 2720
2740 DM=XQ
2750 PRINT "DUMPING FROM ADDRESS $";XQ$
2755 G=DM
2760 FOR MM=G TO(G+176)STEP 8:F$=""
2765 ET=MM:GOSUB40000:PRINTHB$;" : ";
2770 FOR MW=0TO7:MQ(MW)=PEEK(MM+MW)
2775 A=MQ(MW):IF A<32 OR A>127 OR A>159 THEN F$=F$+CHR$(32):GOTO2780
2776 F$=F$+CHR$(A)
2780 H=INT(MQ(MW)/16):L=MQ(MW)-16*H
2785 PRINTMID$(D$,H+1,1)+MID$(D$,L+1,1);
2789 NEXT MW:PRINT SPC(8);F$
2790 NEXT MM
2795 GET K$:IF K$="" THEN 2795
2800 IF K$<>"M" THEN G=MM:GOTO2760
2810 GOTO 2020
3000 REM
3005 IF A$="" GOTO 2020
3010 REM ****** COMMANDS ******
3020 K$=LEFT$(A$,TW)
3030 IF K$="EN" THEN 5000
3040 IF K$="QU" THEN STOP
3044 IF K$="WA" THEN WA=1:GOTO 2600
3046 IF K$="NW" THEN WA=0:GOTO 2020
3050 IF K$="LI" THEN 4000
3060 IF K$="LO" THEN 7000
3070 IF K$="ME" THEN 6000
3080 IF K$="NE" THEN RUN
3090 IF K$="RU" THEN GOTO 2630
3100 IF K$="SA" THEN 8000
3110 IF K$="CH" THEN 9150
3115 IF K$="DU" THEN 2700
3119 PRINT"INVALID COMMAND "
3120 GOTO2000
4000 REM
4010 REM **** LIST ROUNTINE ******
4020 P1=TP:P2=BP
4025 IFLEN(A$)<5 THEN 4040
4030 N1=ASC(MID$(A$,6,1))
4040 IF LEN(A$)>FR AND N1>47 AND N1<58 THEN P1=VAL(MID$(A$,5,3))
4045 PRINT""
4050 GOSUB 1000
4060 GOTO2020
5000 REM
5010 REM DUNPROUTINE *******
5020 G=R:PRINT"ENTERING AT ADDRESS $";:ET=G:GOSUB40000:PRINTHB$
5040 FOR J=TP TO BP
5050 IF C$(J,OE)=" "THENGOTO5470
5060 IF MID$(C$(J,TW),1,1)<>"L" THEN5380
5070 POKE G,ZE:POKEG+OE,ZE:POKE G+TW,ZE:POKE G+TR,ZE
5080 J1=VAL(MID$(C$(J,TW),TW,1)+C$(J,TR))
5090 IFLEFT$(C$(J,2),1)="L"THENPRINTJ;" : ";C$(J,1)+" "+C$(J,2)+C$(J,3):GOTO5100
5095 PRINTJ;" : ";C$(J,1);" ";C$(J,2);C$(J,3)
5100 IF J1<ZE OR J1>LN THEN5460
5110 JJ$=C$(J,1):GOSUB 20000:CJ=JJ
5120 IFLEFT$(C$(J,2),1)<>"L" THEN 5125
5121 PRINTJ1;" : ";C$(J1,1)+" "+C$(J1,2)+C$(J1,3):GOTO5130
5125 PRINTJ1;" : ";C$(J1,1);" ";C$(J1,2);" ";C$(J1,3)
5130 IF ABS(CJ)<> OE THENGOTO5460
5140 DD=(J1<J)-(J1>J)
5150 JA=G:DP=ZE
5160 IF J1=J THENGOTO5270
5170 CL=J+DD
5180 N1=ZE:IF C$(CL,OE)=" "THENGOTO5220
5190 IF LEFT$(C$(CL,2),1)="L" GOTO5200
5192 N1=OE-(C$(CL,TW)<>" ")-(C$(CL,TR)<>" "):GOTO5220
5200 JJ$=C$(CL,1):GOSUB 20000:TJ=JJ
5210 N1=((TJ=OE)*TR+(TJ=-OE)*TW)*-1
5220 IF CL=J1 AND DD>0GOTO5270
5230 DP=DP+N1
5240 IF CL=J1 THENGOTO5270
5250 CL=CL+DD
5260 GOTO5180
5270 IF CJ=1THENJA=JA+DD*DP+(DD>0)*-3:GOTO5310
5280 IF DD>ZE THEN DP=DP+2
5290 IF DP>126 ANDDD<ZE THENGOTO5460
5300 IFDP>129ANDDD>ZE THENGOTO5460
5310 XQ$=MID$(C$(J,1),1,2):GOSUB10000:V=XQ
5320 POKEG,V:G=G+OE
5330 IF CJ=OE THENPOKEG,JA-INT(JA/QK)*QK:G=G+OE:POKEG,INT(JA/QK):G=G+OE:GOTO5360
5340 IF DD<ZE THEN DP=256-DP
5345 IF DP=0 THEN DP=256
5350 DP=DP-TW:POKEG,DP:G=G+1
5360 PRINT "OK"
5370 GOTO5470
5380 FORI=1TO5 STEP 2
5390 K=INT(I/TW+OE)
5400 XQ$=MID$(C$(J,K),1,2):GOSUB10000:V=XQ
5410 IF ER=1 OR V=-1 THENGOTO5440
5420 POKEG,V
5430 G=G+OE
5440 NEXT I
5450 GOTO5470
5460 PRINT"** ERROR/BRANCH OUT OF RANGE **"
5470 NEXTJ
5480 GOTO2020
6000 CO$=""
6010 REM *********DISEMBLE
6020 DC$="0000"
6030 INPUT"DISASSEMBLE FROM WHAT ADDRESS ";DM$
6035 XQ$=RIGHT$((DC$+DM$),4):GOSUB15000:IF ER=1 THEN 6030
6038 DM=XQ
6039 PRINT"DISASSEMBLING FROM ADDRESS $";XQ$
6040 G=DM:F=0:FM=0
6050 F=F+1:CO$=""
6060 FORI=1TO3
6070 V(I)=PEEK(G):H=INT(V(I)/16):L=V(I)-16*H
6080 R$(I)=MID$(D$,H+1,1)+MID$(D$,L+1,1)
6090 G=G+1:NEXTI
6100 FORI=1TOPC(V(1)+1):CO$=CO$+R$(I):NEXTI
6110 GOSUB30000
6115 ET=DM:GOSUB 40000:PRINTHB$;": ";
6117 FOR I=1TOPC(Y)
6120 PRINT R$(I);" ";
6130 NEXTI
6134 WW=15-(LEN(CO$)+PC(Y)):PRINTSPC(WW);DI$
6138 G=(G-3)+PC(Y):DM=G
6140 IF F<> 22 THENGOTO6050
6150 GET K$:IF K$="" THEN 6150
6160 IF K$<>"M" THEN F=ZE:GOTO6050
6200 GOTO2020
7000 REM
7010 REM ********LOAD
7020 PRINT""
7030 PRINT"LOAD PROGRAM"
7035 INPUT"INPUT FILENAME";N$
7037 IF N$="" THEN7035
7040 OPEN1,1,0,N$
7041 T=0:FF=0
7045 FOR I=1TO200:CD$(I)="":J$(I)=""
7046 T=T+1
7047 GET#1,I$(I)
7048 IF I$(I)=CHR$(13)THEN FF=0:GOTO7058
7049 IF I$(I)="," THEN FF=1:GOTO7047
7050 IF FF=1 GOTO 7057
7051 IF I$(I)>CHR$(47) AND I$(I)<CHR$(58)ANDFF=0THEN J$(I)=J$(I)+I$(I):GOTO7047
7054 IF I$(I)="*" THEN 7059
7055 IF I$(I)=" " THEN 7047
7057 CD$(I)=CD$(I)+I$(I):GOTO7047
7058 NEXTI
7059 CLOSE1
7060 FOR I = 1 TO T-1
7061 X(I)=VAL(J$(I)):Y=1
7062 FOR J=1TO3
7063 C$(X(I),J)=MID$(CD$(I),Y,2)
7066 C$(X(I),J)=LEFT$(C$(X(I),J)+" ",2)
7067 Y=Y+2
7068 NEXT J:NEXT I
7069 FOR I=1 TO 200
7070 TP=I
7080 IF C$(I,1)<>" "THEN7100
7090 NEXTI
7100 FORI=200TO1 STEP -1
7110 BP=I
7120 IF C$(I,1)<>" "THEN7140
7130 NEXTI
7140 GOTO2020
8000 REM
8010 REM *********SAVE
8020 INPUT"ENTER NAME : ";N$
8030 IF N$="" THEN 8020
8035 R$=","
8040 OPEN1,1,1,N$
8050 FORI=1TO200
8052 IF C$(I,1)=" "THEN 8080
8055 CO$=C$(I,1)+C$(I,2)+C$(I,3)
8060 PRINT#1,I;R$CO$
8080 NEXT I
8090 PRINT#1,"*":CLOSE1
8100 GOTO2020
9000 REM
9010 REM INITIALIZATION
9020 ZE=0:OE=1:TW=OE+OE:TR=OE+TW:FR=TW+TW:QK=256:MR=2020:LN=200
9030 DIM A$(15),J$(200),X(200)
9040 TP=LN:BP=OE:REM LINE. BUFFER
9050 DIM C$(LN,TR),I$(1200)
9060 PRINT" INITIALIZING"
9070 FORI=OE TO LN
9080 FORJ=OE TO TR
9090 C$(I,J)=" "
9100 NEXTJ
9120 NEXT I
9125 DIM PC(256),DS$(256),R$(7),CD$(200),MQ(176)
9126 FOR A=1TO256:READ PC(A),DS$(A):NEXTA
9130 D$="0123456789ABCDEF"
9150 PRINT""
9160 INPUT "LOCATE PROGRAM AT ADDRESS : ";XQ$:XQ$=LEFT$(XQ$+"0000",4)
9170 GOSUB15000:IF ER=1 OR XQ=0 THEN 9160
9175 R=XQ:POKER,0
9180 PRINT""
9185 ET=R:GOSUB 40000
9190 PRINT"PROGRAM TO BE LOCATED AT ADDRESS $";HB$
9191 GOTO 2020
9198 REM ALL SPACES IN DATA STATEMENTS MUST BE TYPED IN
9199 DATA1,BRK,2,"ORA ($ ,X)",1,???,1,???,1,???,2,ORA $,2,ASL $,1,???
9200 DATA1,PHP,2,ORA #$,1,ASL A,1,???,1,???,3,ORA $,3,ASL $,1,???
9201 DATA2,"BPL "
9202 DATA2,"ORA ($ ),Y",1,???,1,???,1,???,2,"ORA $ ,X",2,"ASL $ ,X"
9203 DATA1,???,1,CLC,3,"ORC $ ,Y",1,???,1,???,1,???,3,"ORA $ ,X"
9204 DATA3,"ASL $ ,X",1,???,3,JSR ,2,"AND ($ ,X)",1,???,1,???,2,"BIT $"
9205 DATA2,AND $,2,ROL $,1,???,1,PLP,2,AND #$,1,ROL A,1,???,3,"BIT $"
9206 DATA3,AND $,3,ROL $,1,???,2,BMI $,2,"AND ($ ),Y"
9207 DATA1,???,1,???,1,???,2,"AND $ ,X"
9208 DATA2,"ROL $ ,X",1,???,1,SEC,3,"AND $ ,Y",1,???,1,???,1,???
9209 DATA3,"AND $ ,X",3,"ROL $ ,X",1,???,1,RTI,2,"EOR ($ ,X)",1,???
9210 DATA1,???,1,???,2,EOR $,2,LSR $,1,???,1,PHA,2,EOR #$,1,LSR A,1,???
9211 DATA3,JMP ,3,EOR $,3,LSR $,1,???,2,"BVC "
9212 DATA2,"EOR ($ ),Y",1,???
9213 DATA1,???,1,???,2,"EOR $ ,X",2,"LSR $ ,X",1,???,1,CLI,3,"EOR $ ,Y"
9214 DATA1,???,1,???,1,???,3,"EOR $ ,X",3,"LSR $ ,X",1,???,1,RTS
9215 DATA2,"ADC ($ ,X)",1,???,1,???,1,???,2,ADC $,2,ROR $,1,???,1,PLA
9313 DATA2,ADC #$,1,ROR A,1,???,3,JMP (,3,ADC $,3,ROR $,1,???
9314 DATA2,BVS ,2,"ADC ($ ),Y"
9315 DATA1,???,1,???,1,???,2,"ADC $ ,X",2,"ROR $ ,X",1,???,1,"SEI"
9316 DATA3,"ADC $ ,Y",1,???,1,???,1,???,3,"ADC $ ,X",3,"ROR $ ,X"
9317 DATA1,???,1,???,2,"STA ($ ,X)",1,???,1,???,2,STY $,2,STA $,2,"STX $"
9318 DATA1,???,1,DEY,1,???,1,TXA,1,???,3,STY $,3,STA $,3,STX $,1,???
9319 DATA2,BCC ,2,"STA ($ ,X)"
9320 DATA1,???,1,???,2,"STY $ ,X",2,"STA $ ,X"
9321 DATA2,"STX $ ,Y",1,???,1,TYA,3,"STA $ ,Y"
9322 DATA 1,TXS,1,???,1,???,3,"STA $ ,X",1,???,1,???,2,"LDY #$"
9323 DATA2,"LDA ($ ,X)",2,LDX #$,1,???,2,LDY $,2,LDA $,2,LDX $,1,???
9324 DATA 1,TAY,2,LDA #$,1,TAX,1,???,3,LDY $,3,LDA $,3,LDX $,1,???
9325 DATA2,BCS ,2,"LDA ($ ),Y",1,???,1,???,2,"LDY $ ,X",2,"LDA $ ,X"
9326 DATA2,"LDX $ ,Y",1,???,1,CLV,3,"LDA $ ,Y",1,TSX,1,???,3,"LDY $ ,X"
9327 DATA3,"LDA $ ,X",3,"LDX $ ,Y",1,???,2,CPY #$,2,"CMP ($ ,X)"
9329 DATA1,???,1,???,2,CPY $,2,CMP $,2,DEC $,1,???,1,INY,2,CMP #$,1,DEX
9331 DATA1,???,3,CPY $,3,CMP $,3,DEC $,1,???,2,"BNE ",2,"CMP ($ ),Y"
9333 DATA1,???,1,???,1,???,2,"CMP $ ,X",2,"DEC $ ,X",1,???,1,CLD
9335 DATA3,"CMP $ ,Y",1,???,1,???,1,???,3,"CMP $ ,X",3,"DEC $ ,X"
9337 DATA1,???,2,CPX #$,2,"SBC ($ ,X)",1,???,1,???,2,CPX $,2,"SBC $"
9339 DATA2,INC $,1,???,1,INX,2,SBC #$,1,NOP,1,???,3,CPX $,3,"SBC $"
9341 DATA3,INC $,1,???,2,BEQ ,2,"SBC ($ ),Y",1,???,1,???,1,???
9343 DATA2,"SBC $ ,X",2,"INC $ ,X",1,???,1,SED,3,"SBC $ ,Y",1,???,1,???
9345 DATA1,???,3,"SBC $ ,X",3,"INC $ ,X",1,???
10000 IFXQ$=""THEN XQ=-1:ER=1:RETURN
10005 AS=ASC(LEFT$(XQ$,1))-48:IFAS>22THEN ER=1:RETURN
10006 IF AS<10 AND AS>-1 THEN GOTO 10010
10007 AS=AS-7:IF AS<10 THEN ER=1:RETURN
10010 XQ=ASC(RIGHT$(XQ$,1))-48:IFXQ>22THEN ER=1:RETURN
10016 IF XQ<10 AND XQ>-1THEN GOTO 10020
10017 XQ=XQ-7:IF XQ<10 THEN ER=1:RETURN
10020 XQ=XQ+16*AS:ER=0:RETURN
15000 QQ$=LEFT$(XQ$,2):QW$=RIGHT$(XQ$,2)
15005 XQ$=QQ$:GOSUB 10005:QQ=256*XQ
15007 IF ER=1 THEN RETURN
15010 XQ$=QW$:GOSUB 10005
15020 XQ=XQ+QQ:XQ$=QQ$+QW$
15030 RETURN
20000 JJ=(JJ$="90")+(JJ$="B0")+(JJ$="F0")+(JJ$="30")+(JJ$="D0")+(JJ$="10")
20010 JJ=(JJ+(JJ$="50")+(JJ$="70"))-((JJ$="4C")+(JJ$="6C")+(JJ$="20"))
20020 RETURN
30000 XQ$=LEFT$(CO$,2):IFXQ$=" " THEN DI$="":RETURN
30001 FL=0:SH=0:ER=0
30002 GOSUB 10000:Y=XQ+1:XQ=0
30003 GOSUB 32000
30004 IF ER=2 AND FM=1 THEN30011
30005 IF ER>0ORXQ=-1THEN C$(J,1)=" ":RETURN
30010 JJ$=XQ$:GOSUB20000
30011 IF PC(Y)=1 THEN DI$=DS$(Y):RETURN
30015 DI$=LEFT$(DS$(Y),5)
30020 IF JJ<>0 THEN 30140
30030 IF RIGHT$(DI$,1)="("OR RIGHT$(DI$,1)="#" THENDI$=DI$+"$"
30040 IF PC(Y)=2 THEN DI$=DI$+RIGHT$(CO$,2)
30050 IF PC(Y)=3 THEN 30090
30060 IF LEN(DS$(Y))=9 THEN DI$=DI$+RIGHT$(DS$(Y),2)
30070 IF LEN(DS$(Y))=11 THEN DI$=DI$+RIGHT$(DS$(Y),3)
30080 RETURN
30090 OP$=RIGHT$(CO$,2)+MID$(CO$,3,2)
30100 IF LEN(DS$(Y))=5 THEN DI$=DI$+OP$
30110 IF LEN(DS$(Y))=10 THEN DI$=DI$+OP$+RIGHT$(DS$(Y),1)
30120 IF LEN(DS$(Y))=11 THEN DI$=DI$+OP$+RIGHT$(DS$(Y),2)
30130 RETURN
30140 OP$=RIGHT$(CO$,2)+MID$(CO$,3,2)
30150 IF MID$(CO$,3,1)="L" THENDI$=DS$(Y)+RIGHT$(CO$,(LEN(CO$)-2)):SH=1
30157 IF JJ=1 AND FM=1 THEN DI$=DI$+OP$
30170 IF JJ=1 AND FM=0 AND SH=0 AND LEN(DS$(Y))=4THEN DI$=DI$+OP$
30175 IF JJ=1 AND FM=0 AND SH=0 AND LEN(DS$(Y))=5THEN DI$=DS$(Y)+OP$+")"
30180 IF JJ<>-1 OR FM<>1 THEN RETURN
30190 XQ$=RIGHT$(CO$,2):GOSUB 10000:ZZ=(G-3)+PC(Y)
30200 IF XQ>127 THEN XQ=-1*(256-XQ)
30210 ET=ZZ+XQ:GOSUB 40000
30220 DI$=DI$+HB$:RETURN
32000 IF ER=1 GOTO 32090
32010 IF DS$(Y)="???" THEN ER=2:GOTO32090
32020 IF LEN(CO$)<>PC(Y)*2 AND MID$(CO$,3,1)<>"L" THENER=3:GOTO32090
32030 FORFI=2 TO LEN(CO$)
32040 IF MID$(CO$,3,1)="L" THEN 32080
32050 IF MID$(CO$,FI,1)<CHR$(48) THEN ER=4
32060 IF MID$(CO$,FI,1)>CHR$(57) AND MID$(CO$,FI,1)<CHR$(65) THEN ER=4
32070 IF MID$(CO$,FI,1)>CHR$(70) THEN ER=4
32080 NEXTFI
32090 RETURN
40000 HB$="":IF ET>65535 THEN ET=ET-65536:GOTO40000
40003 FORRR=3TO0STEP-1
40005 RT=INT(ET/(16RR))
40010 ET=ET-RT*16RR:RT=(RT+48)-7*(RT>9)
40015 HB$=HB$+CHR$(RT):NEXTRR
40020 RETURN
60000 REM **********CHEXSUM
60010 REM WARNING PROOF READ THIS SECTION
60020 REM CAREFULLY
62000 T=PEEK(62)*256+PEEK(61)+1
62010 INPUT"TO PRINTER (Y OR N) ";Q$
62011 IF Q$<>"Y"THEN62020
62015 CLOSE4,4:OPEN4,4:CMD4:PRINTCHR$(1);CHR$(129)
62020 PRINTCHR$(147);"CHECK SUM :-":LINK=PEEK(44)*256+PEEK(43):E=62000
62100 REM****MAIN LOOP
62120 T=LINK
62130 LINK=PEEK(T+1)*256+PEEK(T)
62135 LN=PEEK(T+3)*256+PEEK(T+2)
62136 IF LN>E THEN PRINT:PRINT"TOTAL=";CH:CLOSE4,4:END
62137 S$=STR$(LN):L=LEN(S$)-1:S$=MID$(S$,2,L)
62138 PRINTSPC(6-L);S$;
62140 CS=0:N=0:C=0
62150 FORP=T+4 TO LINK-2:PK=PEEK(P)
62160 IF PK=143 THEN P=LINK-2:GOTO62190
62165 IF PK=34 THENC=(C=0)
62170 IF C=0 AND PK=32 THEN 62190
62180 IF PK=137 THENN=N+1:CS=CS+(203ORN):PK=164
62185 N=N+1:CS=CS+(PKORN)
62190 NEXTP:CH=CH+CS:PRINT"=";RIGHT$(STR$(CS),LEN(STR$(CS))-1):GOTO62120
62999 REM