Mercurial > hg > Members > kono > os9 > sbc09
comparison game09/asm09.game @ 68:ec9ef70bf6e4
add game09
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 05 Aug 2018 10:34:37 +0900 |
parents | |
children | 6be44b5de445 |
comparison
equal
deleted
inserted
replaced
67:02d742bf52e5 | 68:ec9ef70bf6e4 |
---|---|
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 | |
31 210 !=1500 !=W*100+6900 | |
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 | |
41 300 !=1500 !=W*100+6900 ;=C(3)>0 !=100*C(3)+3500 | |
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 | |
104 1590 C(1)=J*16+G ] | |
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 | |
199 6050 @ D=D*16+B-"0" ;=B>"9" D=D-7 | |
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 | |
203 6080 @ D=D*10+B-"0" X=X+1 B=L:X) @=(B<"0")+(B>"9") | |
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 | |
287 8508 C(2)=Y*16+G ] | |
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 ] | |
305 8700 K=C(1) C(1)=-1 Z=0 !=K*100+8800 H:0)=Z ] | |
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 ] |