view game09/asm09.game @ 180:c3145f913f3d default tip

possible features
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 04 May 2019 11:17:42 +0900
parents 6be44b5de445
children
line wrap: on
line source

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 ]