Mercurial > hg > Members > kono > os9 > sbc09
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/game09/asm09.game Sun Aug 05 10:34:37 2018 +0900 @@ -0,0 +1,332 @@ +1 BX3A0DDC9909DDD305ND1C03SL080BSR070B--- +2 /CC240CCS250CEQ270CGE2C0CGT2E0CHI220C--- +3 HS240CIT9509LE2F0CLO250CLS230CLT2D0C--- +4 MI2B0CNE260CPL2A0CRA200CRN210CSR8D0C--- +5 VC280CVS290C/LR0F0BMP9C07OM030BWA3C04--- +6 /AA190DEC0A0B/ND0612OR9809QU0012XG1E10--- +7 /CB0112CC0212DB0312///NC0C0B/MP0E02SR9D02--- +8 //DA960ADBD60ADDDC08DS7E08DUDE08DX9E08--- +9 DY3E08EA3001SL080BSR040B/UL3D0D--- +10 /EG000BOP120D/RA9A0ARBDA0ARC1A04RG0512--- +11 /SH340FUL350F//MB0412OL090BOR060B--- +12 TI3B0DTS390D/BC9209ET0712EX1D0DTA9702TBD702TDDD02TS7F02--- +13 TUDF02TX9F02TY3F02UB9306WI3F0EYN130DYS3F04--- +14 /FR1F10ST0D0B/////// +100 .=5 "MC-6809 ASSEMBLER 1.6"/ +110 M=&+1 C=M+8 S=C+14 I=S+52 K=I+52 +120 A=0 O=0 B=0,3 M:B)=0 @=B+1 +121 /"MODE P/S/O/2/T"/ +122 D=$ ;=D="P" M:0)=1 +126 ;=D="2" /"PASS 2 OK?" D=$ #=270 +128 ;=D="T" !=9900 !=3000 !=9990 +130 ;=D="S" M:1)=1 +135 ;=D="O" M:2)=1 /"OBJECT set address=" O=? +140 ;=D<>13 #=122 +147 /"TEXT=" T=? L=T M(2)=O +150 J=0,25 I(J)=J+K K:J)=-1 @=J+1 H=K+J +160 G==+2 S(0)=G J=1,25 @ G=G+1 @=(G:0)="/") S(J)=G+1 @=J+1 +180 E=0 P=1 /"PASS 1"/ C(6)=-1 .=6 +190 @ !=700 L=L+2 !=900 X=0 ;=L:0)="*" #=250 +200 ;=L:X)<>" " !=1000 ;=#L:X) #=250 +210 !=1500 !=W*100+6900 +215 ;=W=$12 A=A+H:0) #=250 +220 A=A+(C(0)>0)+(C(1)>=0)+(C(2)>=0)+(C(3)>0) +230 A=A+(C(3)=2)+(C(3)=4) +250 !=500 ;=L(0)<0 E=1 !=10000 +260 @=(E) +270 /"PASS 2"/ L=T A=0 O=M(2) E=0 C(6)=-1 !=9900 +275 P=2 ;=M:0)=0 .=6 +280 @ !=700 C(5)=A X=0 L=L+2 ;=L:0)="*" #=307 +290 !=850 ;=L:X)=0 #=305 +300 !=1500 !=W*100+6900 ;=C(3)>0 !=100*C(3)+3500 +303 !=460 +307 ;=M:0) !=520 #=420 +400 !=900 !=500 +420 ;=L(0)<0 E=1 !=10000 +430 @=(E) // +435 ;=M:3)=0.(M:0)<>0) !=3000 +440 /"Total error=" ?=M:3) " END=" ??=A ///// +450 !=9990 #=-1 +460 ;=W=$12 #=480 +470 B=0,4 ;=C(B)>=0 O=O+1 A=A+1 ;=M:1)=1 O:-1)=C(B) +475 @=B+1 ] +480 ;=H:0)=0 ] +485 A=A+H:0) ;=M:1)<>1 O=O+H:0) ] +490 B=1,H:0) O:0)=H:B) O=O+1 @=B+1 ] +500 L=L+X ;=L:0) @ L=L+1 @=(#L:0)) +510 L=L+1 ] +520 ;=L:0)="*" .=21 #=600 +530 ??=C(5) " " ;=W<>$12 #=570 +540 ;=H:0)=0 .=16 #=600 +550 Z=1 !=750 !=600 ;=H:0)<7 ] +560 B=7,H:0) .=5 !=750 / @=B+6 ] +570 B=0,4 ;=C(B)>=0 ?$=C(B) #=580 +575 .=2 +580 ;=B<>3 " " +590 @=B+1 .=2 +600 X=0 ?(5)=L(-1) " " ;=L:X)=" " .=7 #=625 +610 ;=L:X)="*" #=630 +620 J=6 !=800 ;=#L:X) #=640 +625 X=X+1 J=4 !=800 +630 ;=L:X)<>0 @ $=L:X) X=X+1 @=(L:X)=0) +640 / #=500 +700 M:6)=0 J=0,4 C(J)=-1 @=J+1 ] +750 " " Z=Z,Z+5 ;=Z>H:0) .=2 #=770 +760 ?$=H:Z) +770 ;=Z&1=0 " " +780 @=Z+1 ] +800 J=0,J ;=L:X)&$DF=0 " " #=820 +810 $=L:X) X=X+1 +820 @=J+1 ] +850 ;=L:X)<>" " @ X=X+1 @=(L:X)&$DF=0) ] +860 ] +900 Z=0,5 $=8 @=Z+1 ?(5)=L(-1) " " ] +1000 K=L:X)-"A" X=X+1 +1010 ;=K>26+(K<0) "MISS LABEL" X=X-1 @ X=X+1 @=(L:X)&$DF=0) #=20000 +1020 Y=I(K) +1025 J=-1 @ J=J+1 D=L:X+J) @=(D<"0").(D>"Z").(J=5) ;=#J V=0 #=1040 +1030 ;=L:X)>Y:0) @ Y=Y+7 @=(L:X)<=Y:0)) +1035 V=-1 @ V=V+1 @=(L:X+V)<>Y:V)).(V=J) ;=L:X+V)>Y:V)&(V<J) Y=Y+7 #=1035 +1040 ;=V>4+(Y:V)=" ") "multi defnition" #=20000 +1050 ;=K<25 J=K+1,25 I(J)=I(J)+7 @=J+1 +1060 G=H H=H+7 V=Y-G/2 J=0 @ J=J-1 H(J)=G(J) @=(J<V) +1070 J=0,4 ;=L:X)>"/" Y:J)=L:X) X=X+1 #=1090 +1080 Y:J)=" " +1090 @=J+1 Y=Y+J Y(0)=A ] +1510 F=L+X+1 X=X+4 +1520 ;=F(0)=$4C42 #=1700 +1525 ;=F:0)<"A"+(F:0)>"Z") #=1595 +1530 G=F:0)-"A" K=S(G) G=S(G+1) F=F+1 +1540 ;=K(0)<>F(0) @ K=K+6 @=(K>=G+(K(0)=F(0))) ;=K>=G #=1595 +1568 J=K:2)-"0" G=K:3)-"0" W=K:5)-"0" +1570 G=G>9*-7+G J=J>9*-7+J W=W>9*-7+W +1584 ;=K:4)="1" W=W+16 +1590 C(1)=J*16+G ] +1595 "OPCODE?" X=X-3 W=13 +1600 Z=0,2 C(Z)=$12 @=Z+1 #=20000 +1700 F=F+1 !=1530 X=X+1 ;=W<>12 ] +1710 W=17 ] +2000 K=L:X)-"A" ;=K<0+(K>26) "label?" #=20000 +2010 Y=I(K) X=X+1 +2015 J=-1 @ J=J+1 K=L:X+J) @=(K<"0").(K>"Z").(J=5) ;=#J U=0 #=2060 +2020 ;=L:X)>Y:0) @ Y=Y+7 @=(L:X)<=Y:0)) +2025 U=-1 @ U=U+1 @=(L:X+U)<>Y:U)).(U=J) ;=L:X+U)>Y:U)&(U<J) Y=Y+7 #=2025 +2030 X=X+U +2040 K=L:X) ;=K>"0" ;=K<"[" X=X+1 #=2040 +2060 ;=U=5.(Y:U)=" ") Y=Y+5 D=Y(0) U=1 ] +2070 U=0 D=0 ;=P=2 "Undifined lable" #=20000 +2080 ] +3000 J=0,25 K=I(J) +3005 ;=K:0)=$FF #=3020 +3007 @ $=J+"A" Z=0,4 $=K:Z) @=Z+1 +3010 .=2 K=K+7 ??=K(-1) .=4 @=(K:0)=$FF +3020 @=J+1 / ] +3500 ] +3600 !=6000 C(3)=D&$FF ] +3700 !=6000 C(4)=D C(3)=C:8) C:8)=0 ] +3800 !=3950 !=6000 D=D-A-Z +3810 ;=(D<-$80)+(D>$7F) "S/branch too long." #=20000 +3820 C(3)=D&$FF ] +3900 !=3950 !=6000 D=D-A-1-Z +3910 C(4)=D C(3)=C:8) C:8)=0 ] +3950 Z=2 +3960 ;=C(0)>0 Z=Z+1 +3970 ;=C(2)>0 Z=Z+1 +3980 ] +4000 Q=0 R=$10 J=0 M:7)=0 +4010 X=X+1 +4020 K=L:X) ;=K=0 "missing operand." #=20000 +4030 ;=K<>"#" #=4070 +4040 X=X+1 R=-$10 ;=(W=9)+(W=10) C(3)=1 ] +4050 ;=(W>4)&(W<9) C(3)=2 ] +4060 "can't immediate." #=20000 +4070 ;=K="[" X=X+1 K=L:X) M:7)=1 +4080 ;=K="," V=X+1 #=4520 +4090 ;=L:X+1)="," ;=(K="A")+(K="B")+(K="D") V=X+2 #=4500 +4100 ;=K="<" Q=Q+1 X=X+1 K=L:X) #=4100 +4105 ;=K=">" Q=3 X=X+1 K=L:X) +4110 V=X +4120 @ V=V+1 K=L:V) @=(K=",")+#(K&$DF) +4130 ;=K="," V=V+1 #=5000 +4140 ;=M:7)=1 C(2)=$9F C(3)=2 ] +4150 ;=W=1 "Nonindex LEA" #=20000 +4155 ;=Q=3 #=4170 +4160 ;=Q R=0 C(3)=1 ] +4162 ;=C(6)<0 #=4170 +4164 Z=X !=6000 X=Z ;=#U "DP undef can't pass 2" #=20000 +4166 ;=C:13)*$100=(D&$FF00) R=0 C(3)=1 ] +4170 R=$20 C(3)=2 ] +4500 C(2)=$80+"B"+5-K ;=K="D" C(2)=$8B +4510 !=5500 #=5200 +4520 Z=4 C(2)=$80 +4530 ;=L:V)="-" V=V+1 Z=2 ;=L:V)="-" V=V+1 Z=3 +4540 !=5500 V=V+1 ;=Z<>4 #=4560 +4550 ;=L:V)="+" V=V+1 Z=0 ;=L:V)="+" V=V+1 Z=1 +4560 ;=#M:7) C(2)=C(2)+Z ] +4570 ;=(Z=0)+(Z=2) "[can't -/+]" #=20000 +4580 C(2)=C(2)+$10+Z ] +5000 ;=L:V)<>"P" #=5030 +5005 ;=Q=3 #=5020 +5010 ;=Q C(2)=$8C C(3)=3 #=5200 +5020 C(2)=$8D C(3)=4 #=5200 +5030 ;=Q=1 #=5090 +5033 ;=Q=3 #=5100 +5035 Z=X !=6000 X=Z ;=Q=2 D=D&$1F #=5055 +5040 ;=F ;=#U "Offset undifined Can't pass2" #=20000 +5045 ;=D=0 C(2)=$84 !=5500 #=5200 +5050 ;=(D<-$10)+(D>$F) #=5080 +5055 ;=M:7) #=5080 +5060 ;=D<0 D=D+$20 +5070 C(2)=D !=5500 ] +5080 ;=(D<-$80)+(D>$7F) #=5100 +5090 C(2)=$88 !=5500 C(3)=1 #=5200 +5100 C(2)=$89 !=5500 C(3)=2 +5200 ;=M:7) C(2)=C(2)+$10 +5210 ] +5500 J=L:V) ;=J="X" ] +5520 ;=J="Y" C(2)=C(2)+$20 ] +5530 ;=J="U" C(2)=C(2)+$40 ] +5540 ;=J="S" C(2)=C(2)+$60 ] +5550 "Index.Regista?" #=20000 +6000 F=0 ;=L:X)=" " X=X+1 +6005 ;=W<>$12 ;=M:6)=$FF ] +6006 M:6)=-1 +6010 B=L:X) D=0 ;=B="."+(B="*") D=A X=X+1 B=L:X) #=6100 +6015 ;=B&$DF=0 #=6140 +6020 ;=(B>="A")&(B<="Z") F=F+1 !=2000 B=L:X) #=6100 +6030 ;=B<>"$" #=6060 +6040 X=X+1 B=L:X) ;=(B>"9")&(B<"A")+(B<"0")+(B>"F") #=6100 +6050 @ D=D*16+B-"0" ;=B>"9" D=D-7 +6055 X=X+1 B=L:X) @=(B>"9")&(B<"A")+(B<"0")+(B>"F") +6060 ;=B=""" D=L:X+1) X=X+3 B=L:X) #=6100 +6070 ;=(B<"0")+(B>"9") #=6100 +6080 @ D=D*10+B-"0" X=X+1 B=L:X) @=(B<"0")+(B>"9") +6100 ;=B="+" X=X+1 G=D !=6010 D=G+D #=6120 +6101 ;=B="*" X=X+1 G=D !=6010 D=G*D #=6120 +6102 ;=B<>"/" #=6110 +6104 X=X++1 G=D !=6010 ;=#U ] +6106 ;=D<>0 D=G/D #=6120 +6108 ;=P=2 "ZERO DIV" #=20000 +6109 D=0 #=6120 +6110 ;=B="-" X=X+1 G=D !=6010 D=G-D +6130 ;=B=","+(B="]")+(B&$DF=0) ] +6140 "ileagal operand" D=0 #=20000 +7000 K=L:X) X=X+1 !=7010 #=4000 +7010 ;=K="X" C(1)=$30 ] +7020 ;=K="Y" C(1)=$31 ] +7030 ;=K="S" C(1)=$32 ] +7040 ;=K="U" C(1)=$33 ] +7050 "LEA regista?" #=20000 +7100 !=4000 ;=C(1)<>$E #=7110 +7105 ;=R C(1)=$5E+R ] +7106 ] +7110 ;=C(1)<$80 C(0)=$10 C(1)=C(1)+$60+R ] +7120 C(1)=C(1)+R ] +7200 ;=L:X)<>"C" W=9 C(1)=$94 #=7800 +7210 W=4 +7300 !=850 ;=L:X)=0 #=4020 +7302 ;=L:X+1)="#" X=X+2 C(3)=1 ] +7303 ;=C(1)=$3F "Immediate only" #=20000 +7304 G=0 @ X=X+1 K=L:X) X=X+1 !=7350 @=(L:X)<>",") ;=C(1)=$1A C(2)=G ] +7306 C(2)=G!$FF ] +7350 ;=K="C" G=G.1 ] +7351 ;=K="V" G=G.2 ] +7352 ;=K="Z" G=G.4 ] +7353 ;=K="N" G=G.8 ] +7354 ;=K="I" G=G.$10 ] +7355 ;=K="H" G=G.$20 ] +7356 ;=K="F" G=G.$40 ] +7357 ;=K="E" G=G.$80 ] +7358 "Not cc frg." #=20000 +7400 ;=L:X)<>"D" W=9 C(1)=$9B #=7800 +7450 #=7850 +7500 ;=L:X)<>"D" W=9 C(1)=$90 #=7800 +7510 #=7850 +7600 K=L:X) +7610 ;=K="D" C(1)=$93 C(0)=$10 #=7850 +7620 ;=K="U" C(1)=$93 C(0)=$11 #=7850 +7630 ;=K="Y" C(0)=$10 #=7850 +7640 ;=K="S" C(0)=$11 #=7850 +7650 ;=K<>"X" W=9 C(1)=$91 #=7800 +7660 #=7850 +7700 ;=C(1)<$80 C(0)=$10 C(1)=C(1)+$60 +7710 #=7900 +7800 ;=L:X)="B" C(1)=C(1)+$40 #=7850 +7810 ;=L:X)<>"A" "Not A,B Regista." #=20000 +7850 X=X+1 +7900 !=4000 C(1)=C(1)+R ] +8000 ;=L:X)="B" C(1)=C(1)+$50 ] +8010 ;=L:X)="A" C(1)=C(1)+$40 ] +8015 ;=L:X)="D"&(C(1)=$F) C(1)=$4F C(2)=$5F ] +8020 !=4000 +8030 ;=R C(1)=R+$50+C(1) ] +8040 ] +8100 C(3)=3 ] +8200 ] +8300 ;=L:X)="2" C(0)=$10 ] +8310 ;=L:X)="3" C(0)=$11 ] +8320 ] +8400 ;=L:X)="U" C(1)=C(1)+2 #=8410 +8405 ;=L:X)<>"S" "Not STACK Regista." #=20000 +8412 G=0 X=X+1 @ X=X+1 K=L:X) !=8415 @ X=X+1 K=L:X) @=(K<"/") +8413 @=(K<>",") C(2)=G ] +8415 ;=K="A" G=G.2 ] +8420 ;=K="B" G=G.4 ] +8425 ;=K="C" G=G.1 ] +8430 ;=K="X" G=G.$10 ] +8435 ;=K="Y" G=G.$20 ] +8440 ;=K="U".(K="S") G=G.$40 ] +8445 ;=K="P" G=G.$80 ] +8450 ;=K<>"D" "REG? PSH/PUL" #=20000 +8455 ;=L:X+1)="P" G=G.8 ] +8460 G=G.6 ] +8500 ;=L:X)=0 K=0 #=8565 +8502 X=X+1 !=8510 @ K=L:X) X=X+1 @=(K=",")+(K=0) +8504 ;=#K #=8565 +8505 Y=G !=8510 ;=Y<8<>(G<8) "tfr 16<>8" #=20000 +8508 C(2)=Y*16+G ] +8510 K=L:X) +8515 ;=K="A" G=8 ] +8520 ;=K="B" G=9 ] +8525 ;=K="C" G=10 ] +8530 ;=K<>"D" #=8545 +8535 ;=L:X+1)="P" G=$B ] +8540 G=0 ] +8545 ;=K="X" G=1 ] +8550 ;=K="Y" G=2 ] +8555 ;=K="U" G=3 ] +8560 ;=K="S" G=4 ] +8565 ;=K<>"P" "REG? TFR" #=20000 +8570 G=5 ] +8600 C(3)=4 +8610 ;=C(1)=$20 C(1)=$16 ] +8620 ;=C(1)=$8D C(1)=$17 ] +8630 C(0)=$10 ] +8700 K=C(1) C(1)=-1 Z=0 !=K*100+8800 H:0)=Z ] +8800 ;=P=2 C(5)=X X=0 !=2000 X=C(5) +8810 C(5)=Y !=6000 Y=C(5) Y(0)=D C(5)=D ] +8900 @ X=X+1 !=6000 !=9800 +8910 @=(L:X)<>",") ] +9000 X=X+1 +9010 ;=L:X)<>""" "chr?" #=20000 +9015 X=X+1 @ D=L:X) !=9800 +9020 X=X+1 @=(L:X)="""+(L:X)=0)) +9030 K=L+X ;=K(0)=$2222 #=9015 +9040 ;=K(0)=$222C X=X+1 #=8900 +9050 ] +9100 @ X=X+1 !=6000 !=9700 +9110 @=(L:X)<>",") ] +9200 !=6000 A=A+D O=O+D ] +9300 !=6000 ;=#M:2) O=D +9310 A=D C(5)=D ] +9471 E=1 ] +9500 !=850 +9510 !=6000 ;=#U "DP undef" C(5)=-1 C(6)=-1 #=20000 +9520 C(6)=D C(5)=D ] +9700 Z=Z+1 H:Z)=D&$FF00/$100 +9800 Z=Z+1 H:Z)=D ] +9910 ] +10000 ] +20000 M:3)=M:3)+1 / ;=M:0)<>0&(P=2) ] +20005 ?(5)=L(-1) +20100 Z=0 @ $=L:Z) Z=Z+1 @=(#L:Z)) / .=6 ]