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 ]