68
|
1 1 BX3A0DDC9909DDD305ND1C03SL080BSR070B---
|
|
2 2 /CC240CCS250CEQ270CGE2C0CGT2E0CHI220C---
|
|
3 3 HS240CIT9509LE2F0CLO250CLS230CLT2D0C---
|
|
4 4 MI2B0CNE260CPL2A0CRA200CRN210CSR8D0C---
|
|
5 5 VC280CVS290C/LR0F0BMP9C07OM030BWA3C04---
|
|
6 6 /AA190DEC0A0B/ND0612OR9809QU0012XG1E10---
|
|
7 7 /CB0112CC0212DB0312///NC0C0B/MP0E02SR9D02---
|
|
8 8 //DA960ADBD60ADDDC08DS7E08DUDE08DX9E08---
|
|
9 9 DY3E08EA3001SL080BSR040B/UL3D0D---
|
|
10 10 /EG000BOP120D/RA9A0ARBDA0ARC1A04RG0512---
|
|
11 11 /SH340FUL350F//MB0412OL090BOR060B---
|
|
12 12 TI3B0DTS390D/BC9209ET0712EX1D0DTA9702TBD702TDDD02TS7F02---
|
|
13 13 TUDF02TX9F02TY3F02UB9306WI3F0EYN130DYS3F04---
|
|
14 14 /FR1F10ST0D0B///////
|
|
15 100 .=5 "MC-6809 ASSEMBLER 1.6"/
|
|
16 110 M=&+1 C=M+8 S=C+14 I=S+52 K=I+52
|
|
17 120 A=0 O=0 B=0,3 M:B)=0 @=B+1
|
|
18 121 /"MODE P/S/O/2/T"/
|
|
19 122 D=$ ;=D="P" M:0)=1
|
|
20 126 ;=D="2" /"PASS 2 OK?" D=$ #=270
|
|
21 128 ;=D="T" !=9900 !=3000 !=9990
|
|
22 130 ;=D="S" M:1)=1
|
|
23 135 ;=D="O" M:2)=1 /"OBJECT set address=" O=?
|
|
24 140 ;=D<>13 #=122
|
|
25 147 /"TEXT=" T=? L=T M(2)=O
|
|
26 150 J=0,25 I(J)=J+K K:J)=-1 @=J+1 H=K+J
|
|
27 160 G==+2 S(0)=G J=1,25 @ G=G+1 @=(G:0)="/") S(J)=G+1 @=J+1
|
|
28 180 E=0 P=1 /"PASS 1"/ C(6)=-1 .=6
|
|
29 190 @ !=700 L=L+2 !=900 X=0 ;=L:0)="*" #=250
|
|
30 200 ;=L:X)<>" " !=1000 ;=#L:X) #=250
|
116
|
31 210 !=1500 !=(W*100)+6900
|
68
|
32 215 ;=W=$12 A=A+H:0) #=250
|
|
33 220 A=A+(C(0)>0)+(C(1)>=0)+(C(2)>=0)+(C(3)>0)
|
|
34 230 A=A+(C(3)=2)+(C(3)=4)
|
|
35 250 !=500 ;=L(0)<0 E=1 !=10000
|
|
36 260 @=(E)
|
|
37 270 /"PASS 2"/ L=T A=0 O=M(2) E=0 C(6)=-1 !=9900
|
|
38 275 P=2 ;=M:0)=0 .=6
|
|
39 280 @ !=700 C(5)=A X=0 L=L+2 ;=L:0)="*" #=307
|
|
40 290 !=850 ;=L:X)=0 #=305
|
116
|
41 300 !=1500 !=(W*100)+6900 ;=C(3)>0 !=(100*C(3))+3500
|
68
|
42 303 !=460
|
|
43 307 ;=M:0) !=520 #=420
|
|
44 400 !=900 !=500
|
|
45 420 ;=L(0)<0 E=1 !=10000
|
|
46 430 @=(E) //
|
|
47 435 ;=M:3)=0.(M:0)<>0) !=3000
|
|
48 440 /"Total error=" ?=M:3) " END=" ??=A /////
|
|
49 450 !=9990 #=-1
|
|
50 460 ;=W=$12 #=480
|
|
51 470 B=0,4 ;=C(B)>=0 O=O+1 A=A+1 ;=M:1)=1 O:-1)=C(B)
|
|
52 475 @=B+1 ]
|
|
53 480 ;=H:0)=0 ]
|
|
54 485 A=A+H:0) ;=M:1)<>1 O=O+H:0) ]
|
|
55 490 B=1,H:0) O:0)=H:B) O=O+1 @=B+1 ]
|
|
56 500 L=L+X ;=L:0) @ L=L+1 @=(#L:0))
|
|
57 510 L=L+1 ]
|
|
58 520 ;=L:0)="*" .=21 #=600
|
|
59 530 ??=C(5) " " ;=W<>$12 #=570
|
|
60 540 ;=H:0)=0 .=16 #=600
|
|
61 550 Z=1 !=750 !=600 ;=H:0)<7 ]
|
|
62 560 B=7,H:0) .=5 !=750 / @=B+6 ]
|
|
63 570 B=0,4 ;=C(B)>=0 ?$=C(B) #=580
|
|
64 575 .=2
|
|
65 580 ;=B<>3 " "
|
|
66 590 @=B+1 .=2
|
|
67 600 X=0 ?(5)=L(-1) " " ;=L:X)=" " .=7 #=625
|
|
68 610 ;=L:X)="*" #=630
|
|
69 620 J=6 !=800 ;=#L:X) #=640
|
|
70 625 X=X+1 J=4 !=800
|
|
71 630 ;=L:X)<>0 @ $=L:X) X=X+1 @=(L:X)=0)
|
|
72 640 / #=500
|
|
73 700 M:6)=0 J=0,4 C(J)=-1 @=J+1 ]
|
|
74 750 " " Z=Z,Z+5 ;=Z>H:0) .=2 #=770
|
|
75 760 ?$=H:Z)
|
|
76 770 ;=Z&1=0 " "
|
|
77 780 @=Z+1 ]
|
|
78 800 J=0,J ;=L:X)&$DF=0 " " #=820
|
|
79 810 $=L:X) X=X+1
|
|
80 820 @=J+1 ]
|
|
81 850 ;=L:X)<>" " @ X=X+1 @=(L:X)&$DF=0) ]
|
|
82 860 ]
|
|
83 900 Z=0,5 $=8 @=Z+1 ?(5)=L(-1) " " ]
|
|
84 1000 K=L:X)-"A" X=X+1
|
|
85 1010 ;=K>26+(K<0) "MISS LABEL" X=X-1 @ X=X+1 @=(L:X)&$DF=0) #=20000
|
|
86 1020 Y=I(K)
|
|
87 1025 J=-1 @ J=J+1 D=L:X+J) @=(D<"0").(D>"Z").(J=5) ;=#J V=0 #=1040
|
|
88 1030 ;=L:X)>Y:0) @ Y=Y+7 @=(L:X)<=Y:0))
|
|
89 1035 V=-1 @ V=V+1 @=(L:X+V)<>Y:V)).(V=J) ;=L:X+V)>Y:V)&(V<J) Y=Y+7 #=1035
|
|
90 1040 ;=V>4+(Y:V)=" ") "multi defnition" #=20000
|
|
91 1050 ;=K<25 J=K+1,25 I(J)=I(J)+7 @=J+1
|
|
92 1060 G=H H=H+7 V=Y-G/2 J=0 @ J=J-1 H(J)=G(J) @=(J<V)
|
|
93 1070 J=0,4 ;=L:X)>"/" Y:J)=L:X) X=X+1 #=1090
|
|
94 1080 Y:J)=" "
|
|
95 1090 @=J+1 Y=Y+J Y(0)=A ]
|
|
96 1510 F=L+X+1 X=X+4
|
|
97 1520 ;=F(0)=$4C42 #=1700
|
|
98 1525 ;=F:0)<"A"+(F:0)>"Z") #=1595
|
|
99 1530 G=F:0)-"A" K=S(G) G=S(G+1) F=F+1
|
|
100 1540 ;=K(0)<>F(0) @ K=K+6 @=(K>=G+(K(0)=F(0))) ;=K>=G #=1595
|
|
101 1568 J=K:2)-"0" G=K:3)-"0" W=K:5)-"0"
|
|
102 1570 G=G>9*-7+G J=J>9*-7+J W=W>9*-7+W
|
|
103 1584 ;=K:4)="1" W=W+16
|
116
|
104 1590 C(1)=(J*16)+G ]
|
68
|
105 1595 "OPCODE?" X=X-3 W=13
|
|
106 1600 Z=0,2 C(Z)=$12 @=Z+1 #=20000
|
|
107 1700 F=F+1 !=1530 X=X+1 ;=W<>12 ]
|
|
108 1710 W=17 ]
|
|
109 2000 K=L:X)-"A" ;=K<0+(K>26) "label?" #=20000
|
|
110 2010 Y=I(K) X=X+1
|
|
111 2015 J=-1 @ J=J+1 K=L:X+J) @=(K<"0").(K>"Z").(J=5) ;=#J U=0 #=2060
|
|
112 2020 ;=L:X)>Y:0) @ Y=Y+7 @=(L:X)<=Y:0))
|
|
113 2025 U=-1 @ U=U+1 @=(L:X+U)<>Y:U)).(U=J) ;=L:X+U)>Y:U)&(U<J) Y=Y+7 #=2025
|
|
114 2030 X=X+U
|
|
115 2040 K=L:X) ;=K>"0" ;=K<"[" X=X+1 #=2040
|
|
116 2060 ;=U=5.(Y:U)=" ") Y=Y+5 D=Y(0) U=1 ]
|
|
117 2070 U=0 D=0 ;=P=2 "Undifined lable" #=20000
|
|
118 2080 ]
|
|
119 3000 J=0,25 K=I(J)
|
|
120 3005 ;=K:0)=$FF #=3020
|
|
121 3007 @ $=J+"A" Z=0,4 $=K:Z) @=Z+1
|
|
122 3010 .=2 K=K+7 ??=K(-1) .=4 @=(K:0)=$FF
|
|
123 3020 @=J+1 / ]
|
|
124 3500 ]
|
|
125 3600 !=6000 C(3)=D&$FF ]
|
|
126 3700 !=6000 C(4)=D C(3)=C:8) C:8)=0 ]
|
|
127 3800 !=3950 !=6000 D=D-A-Z
|
|
128 3810 ;=(D<-$80)+(D>$7F) "S/branch too long." #=20000
|
|
129 3820 C(3)=D&$FF ]
|
|
130 3900 !=3950 !=6000 D=D-A-1-Z
|
|
131 3910 C(4)=D C(3)=C:8) C:8)=0 ]
|
|
132 3950 Z=2
|
|
133 3960 ;=C(0)>0 Z=Z+1
|
|
134 3970 ;=C(2)>0 Z=Z+1
|
|
135 3980 ]
|
|
136 4000 Q=0 R=$10 J=0 M:7)=0
|
|
137 4010 X=X+1
|
|
138 4020 K=L:X) ;=K=0 "missing operand." #=20000
|
|
139 4030 ;=K<>"#" #=4070
|
|
140 4040 X=X+1 R=-$10 ;=(W=9)+(W=10) C(3)=1 ]
|
|
141 4050 ;=(W>4)&(W<9) C(3)=2 ]
|
|
142 4060 "can't immediate." #=20000
|
|
143 4070 ;=K="[" X=X+1 K=L:X) M:7)=1
|
|
144 4080 ;=K="," V=X+1 #=4520
|
|
145 4090 ;=L:X+1)="," ;=(K="A")+(K="B")+(K="D") V=X+2 #=4500
|
|
146 4100 ;=K="<" Q=Q+1 X=X+1 K=L:X) #=4100
|
|
147 4105 ;=K=">" Q=3 X=X+1 K=L:X)
|
|
148 4110 V=X
|
|
149 4120 @ V=V+1 K=L:V) @=(K=",")+#(K&$DF)
|
|
150 4130 ;=K="," V=V+1 #=5000
|
|
151 4140 ;=M:7)=1 C(2)=$9F C(3)=2 ]
|
|
152 4150 ;=W=1 "Nonindex LEA" #=20000
|
|
153 4155 ;=Q=3 #=4170
|
|
154 4160 ;=Q R=0 C(3)=1 ]
|
|
155 4162 ;=C(6)<0 #=4170
|
|
156 4164 Z=X !=6000 X=Z ;=#U "DP undef can't pass 2" #=20000
|
|
157 4166 ;=C:13)*$100=(D&$FF00) R=0 C(3)=1 ]
|
|
158 4170 R=$20 C(3)=2 ]
|
|
159 4500 C(2)=$80+"B"+5-K ;=K="D" C(2)=$8B
|
|
160 4510 !=5500 #=5200
|
|
161 4520 Z=4 C(2)=$80
|
|
162 4530 ;=L:V)="-" V=V+1 Z=2 ;=L:V)="-" V=V+1 Z=3
|
|
163 4540 !=5500 V=V+1 ;=Z<>4 #=4560
|
|
164 4550 ;=L:V)="+" V=V+1 Z=0 ;=L:V)="+" V=V+1 Z=1
|
|
165 4560 ;=#M:7) C(2)=C(2)+Z ]
|
|
166 4570 ;=(Z=0)+(Z=2) "[can't -/+]" #=20000
|
|
167 4580 C(2)=C(2)+$10+Z ]
|
|
168 5000 ;=L:V)<>"P" #=5030
|
|
169 5005 ;=Q=3 #=5020
|
|
170 5010 ;=Q C(2)=$8C C(3)=3 #=5200
|
|
171 5020 C(2)=$8D C(3)=4 #=5200
|
|
172 5030 ;=Q=1 #=5090
|
|
173 5033 ;=Q=3 #=5100
|
|
174 5035 Z=X !=6000 X=Z ;=Q=2 D=D&$1F #=5055
|
|
175 5040 ;=F ;=#U "Offset undifined Can't pass2" #=20000
|
|
176 5045 ;=D=0 C(2)=$84 !=5500 #=5200
|
|
177 5050 ;=(D<-$10)+(D>$F) #=5080
|
|
178 5055 ;=M:7) #=5080
|
|
179 5060 ;=D<0 D=D+$20
|
|
180 5070 C(2)=D !=5500 ]
|
|
181 5080 ;=(D<-$80)+(D>$7F) #=5100
|
|
182 5090 C(2)=$88 !=5500 C(3)=1 #=5200
|
|
183 5100 C(2)=$89 !=5500 C(3)=2
|
|
184 5200 ;=M:7) C(2)=C(2)+$10
|
|
185 5210 ]
|
|
186 5500 J=L:V) ;=J="X" ]
|
|
187 5520 ;=J="Y" C(2)=C(2)+$20 ]
|
|
188 5530 ;=J="U" C(2)=C(2)+$40 ]
|
|
189 5540 ;=J="S" C(2)=C(2)+$60 ]
|
|
190 5550 "Index.Regista?" #=20000
|
|
191 6000 F=0 ;=L:X)=" " X=X+1
|
|
192 6005 ;=W<>$12 ;=M:6)=$FF ]
|
|
193 6006 M:6)=-1
|
|
194 6010 B=L:X) D=0 ;=B="."+(B="*") D=A X=X+1 B=L:X) #=6100
|
|
195 6015 ;=B&$DF=0 #=6140
|
|
196 6020 ;=(B>="A")&(B<="Z") F=F+1 !=2000 B=L:X) #=6100
|
|
197 6030 ;=B<>"$" #=6060
|
|
198 6040 X=X+1 B=L:X) ;=(B>"9")&(B<"A")+(B<"0")+(B>"F") #=6100
|
116
|
199 6050 @ D=(D*16)+B-"0" ;=B>"9" D=D-7
|
68
|
200 6055 X=X+1 B=L:X) @=(B>"9")&(B<"A")+(B<"0")+(B>"F")
|
|
201 6060 ;=B=""" D=L:X+1) X=X+3 B=L:X) #=6100
|
|
202 6070 ;=(B<"0")+(B>"9") #=6100
|
116
|
203 6080 @ D=(D*10)+B-"0" X=X+1 B=L:X) @=(B<"0")+(B>"9")
|
68
|
204 6100 ;=B="+" X=X+1 G=D !=6010 D=G+D #=6120
|
|
205 6101 ;=B="*" X=X+1 G=D !=6010 D=G*D #=6120
|
|
206 6102 ;=B<>"/" #=6110
|
|
207 6104 X=X++1 G=D !=6010 ;=#U ]
|
|
208 6106 ;=D<>0 D=G/D #=6120
|
|
209 6108 ;=P=2 "ZERO DIV" #=20000
|
|
210 6109 D=0 #=6120
|
|
211 6110 ;=B="-" X=X+1 G=D !=6010 D=G-D
|
|
212 6130 ;=B=","+(B="]")+(B&$DF=0) ]
|
|
213 6140 "ileagal operand" D=0 #=20000
|
|
214 7000 K=L:X) X=X+1 !=7010 #=4000
|
|
215 7010 ;=K="X" C(1)=$30 ]
|
|
216 7020 ;=K="Y" C(1)=$31 ]
|
|
217 7030 ;=K="S" C(1)=$32 ]
|
|
218 7040 ;=K="U" C(1)=$33 ]
|
|
219 7050 "LEA regista?" #=20000
|
|
220 7100 !=4000 ;=C(1)<>$E #=7110
|
|
221 7105 ;=R C(1)=$5E+R ]
|
|
222 7106 ]
|
|
223 7110 ;=C(1)<$80 C(0)=$10 C(1)=C(1)+$60+R ]
|
|
224 7120 C(1)=C(1)+R ]
|
|
225 7200 ;=L:X)<>"C" W=9 C(1)=$94 #=7800
|
|
226 7210 W=4
|
|
227 7300 !=850 ;=L:X)=0 #=4020
|
|
228 7302 ;=L:X+1)="#" X=X+2 C(3)=1 ]
|
|
229 7303 ;=C(1)=$3F "Immediate only" #=20000
|
|
230 7304 G=0 @ X=X+1 K=L:X) X=X+1 !=7350 @=(L:X)<>",") ;=C(1)=$1A C(2)=G ]
|
|
231 7306 C(2)=G!$FF ]
|
|
232 7350 ;=K="C" G=G.1 ]
|
|
233 7351 ;=K="V" G=G.2 ]
|
|
234 7352 ;=K="Z" G=G.4 ]
|
|
235 7353 ;=K="N" G=G.8 ]
|
|
236 7354 ;=K="I" G=G.$10 ]
|
|
237 7355 ;=K="H" G=G.$20 ]
|
|
238 7356 ;=K="F" G=G.$40 ]
|
|
239 7357 ;=K="E" G=G.$80 ]
|
|
240 7358 "Not cc frg." #=20000
|
|
241 7400 ;=L:X)<>"D" W=9 C(1)=$9B #=7800
|
|
242 7450 #=7850
|
|
243 7500 ;=L:X)<>"D" W=9 C(1)=$90 #=7800
|
|
244 7510 #=7850
|
|
245 7600 K=L:X)
|
|
246 7610 ;=K="D" C(1)=$93 C(0)=$10 #=7850
|
|
247 7620 ;=K="U" C(1)=$93 C(0)=$11 #=7850
|
|
248 7630 ;=K="Y" C(0)=$10 #=7850
|
|
249 7640 ;=K="S" C(0)=$11 #=7850
|
|
250 7650 ;=K<>"X" W=9 C(1)=$91 #=7800
|
|
251 7660 #=7850
|
|
252 7700 ;=C(1)<$80 C(0)=$10 C(1)=C(1)+$60
|
|
253 7710 #=7900
|
|
254 7800 ;=L:X)="B" C(1)=C(1)+$40 #=7850
|
|
255 7810 ;=L:X)<>"A" "Not A,B Regista." #=20000
|
|
256 7850 X=X+1
|
|
257 7900 !=4000 C(1)=C(1)+R ]
|
|
258 8000 ;=L:X)="B" C(1)=C(1)+$50 ]
|
|
259 8010 ;=L:X)="A" C(1)=C(1)+$40 ]
|
|
260 8015 ;=L:X)="D"&(C(1)=$F) C(1)=$4F C(2)=$5F ]
|
|
261 8020 !=4000
|
|
262 8030 ;=R C(1)=R+$50+C(1) ]
|
|
263 8040 ]
|
|
264 8100 C(3)=3 ]
|
|
265 8200 ]
|
|
266 8300 ;=L:X)="2" C(0)=$10 ]
|
|
267 8310 ;=L:X)="3" C(0)=$11 ]
|
|
268 8320 ]
|
|
269 8400 ;=L:X)="U" C(1)=C(1)+2 #=8410
|
|
270 8405 ;=L:X)<>"S" "Not STACK Regista." #=20000
|
|
271 8412 G=0 X=X+1 @ X=X+1 K=L:X) !=8415 @ X=X+1 K=L:X) @=(K<"/")
|
|
272 8413 @=(K<>",") C(2)=G ]
|
|
273 8415 ;=K="A" G=G.2 ]
|
|
274 8420 ;=K="B" G=G.4 ]
|
|
275 8425 ;=K="C" G=G.1 ]
|
|
276 8430 ;=K="X" G=G.$10 ]
|
|
277 8435 ;=K="Y" G=G.$20 ]
|
|
278 8440 ;=K="U".(K="S") G=G.$40 ]
|
|
279 8445 ;=K="P" G=G.$80 ]
|
|
280 8450 ;=K<>"D" "REG? PSH/PUL" #=20000
|
|
281 8455 ;=L:X+1)="P" G=G.8 ]
|
|
282 8460 G=G.6 ]
|
|
283 8500 ;=L:X)=0 K=0 #=8565
|
|
284 8502 X=X+1 !=8510 @ K=L:X) X=X+1 @=(K=",")+(K=0)
|
|
285 8504 ;=#K #=8565
|
|
286 8505 Y=G !=8510 ;=Y<8<>(G<8) "tfr 16<>8" #=20000
|
116
|
287 8508 C(2)=(Y*16)+G ]
|
68
|
288 8510 K=L:X)
|
|
289 8515 ;=K="A" G=8 ]
|
|
290 8520 ;=K="B" G=9 ]
|
|
291 8525 ;=K="C" G=10 ]
|
|
292 8530 ;=K<>"D" #=8545
|
|
293 8535 ;=L:X+1)="P" G=$B ]
|
|
294 8540 G=0 ]
|
|
295 8545 ;=K="X" G=1 ]
|
|
296 8550 ;=K="Y" G=2 ]
|
|
297 8555 ;=K="U" G=3 ]
|
|
298 8560 ;=K="S" G=4 ]
|
|
299 8565 ;=K<>"P" "REG? TFR" #=20000
|
|
300 8570 G=5 ]
|
|
301 8600 C(3)=4
|
|
302 8610 ;=C(1)=$20 C(1)=$16 ]
|
|
303 8620 ;=C(1)=$8D C(1)=$17 ]
|
|
304 8630 C(0)=$10 ]
|
116
|
305 8700 K=C(1) C(1)=-1 Z=0 !=(K*100)+8800 H:0)=Z ]
|
68
|
306 8800 ;=P=2 C(5)=X X=0 !=2000 X=C(5)
|
|
307 8810 C(5)=Y !=6000 Y=C(5) Y(0)=D C(5)=D ]
|
|
308 8900 @ X=X+1 !=6000 !=9800
|
|
309 8910 @=(L:X)<>",") ]
|
|
310 9000 X=X+1
|
|
311 9010 ;=L:X)<>""" "chr?" #=20000
|
|
312 9015 X=X+1 @ D=L:X) !=9800
|
|
313 9020 X=X+1 @=(L:X)="""+(L:X)=0))
|
|
314 9030 K=L+X ;=K(0)=$2222 #=9015
|
|
315 9040 ;=K(0)=$222C X=X+1 #=8900
|
|
316 9050 ]
|
|
317 9100 @ X=X+1 !=6000 !=9700
|
|
318 9110 @=(L:X)<>",") ]
|
|
319 9200 !=6000 A=A+D O=O+D ]
|
|
320 9300 !=6000 ;=#M:2) O=D
|
|
321 9310 A=D C(5)=D ]
|
|
322 9471 E=1 ]
|
|
323 9500 !=850
|
|
324 9510 !=6000 ;=#U "DP undef" C(5)=-1 C(6)=-1 #=20000
|
|
325 9520 C(6)=D C(5)=D ]
|
|
326 9700 Z=Z+1 H:Z)=D&$FF00/$100
|
|
327 9800 Z=Z+1 H:Z)=D ]
|
|
328 9910 ]
|
|
329 10000 ]
|
|
330 20000 M:3)=M:3)+1 / ;=M:0)<>0&(P=2) ]
|
|
331 20005 ?(5)=L(-1)
|
|
332 20100 Z=0 @ $=L:Z) Z=Z+1 @=(#L:Z)) / .=6 ]
|