Created
May 13, 2023 11:04
-
-
Save kkismd/161daaa06d1e4614c12773bcd8214f9c to your computer and use it in GitHub Desktop.
EMUZ80-6502RAM VTLC02-GM ASCIIART Compile sample
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CALL$EA00 | |
==02000 | |
&=0 | |
10 F=50 | |
20 Y=-12 | |
30 X=-39 | |
40 C=X*229/100 | |
50 D=Y*416/100 | |
60 A=C | |
70 B=D | |
80 I=0 | |
90 Q=B/F S=B-(Q*F) | |
100 T=((A*A)-(B*B))/F+C | |
110 B=2*((A*Q)+(A*S/F))+D | |
120 A=T | |
130 P=A/F Q=B/F | |
140 ;=((P*P)+(Q*Q))>5 #=180 | |
150 I=I+1 ;=I<16 #=90 | |
160 ?=" "; | |
170 #=200 | |
180 ;=I>10 I=I+7 | |
190 $=48+I | |
200 ;=X<39 X=X+1 #=40 | |
210 ?="" | |
220 ;=Y<12 Y=Y+1 #=30 | |
==0400 | |
&=0 | |
10 G=02000 ?="source program start at $2000" | |
20 S=03000 ?="object code start at $3000" | |
30 A=S | |
40 P=1 ?="pass 1" ?="Line Object Source" !=100 | |
50 A=S D=080 | |
60 G=02000 P=2 ?="pass 2" !=100 | |
80 ?="program size: "; ?=A-S ?=" ("; ??=S ?="-"; ??=A-1 ?=")" | |
90 ?="end" #=0FFFF | |
100 ) 1-2 PASS ROUTINE | |
110 O=1 | |
200 ) TOP OF LINE | |
210 V=G@0+(G@1*256) | |
220 B=G@0 ;=B=0FF :O)=07FFF :O+1)=0EA1B @=A,04C <=A+1,0EA1B A=A+3 ] | |
225 ?=V ?=" "; ??=A ?=" "; ??=G ?="" | |
230 ;=P=1 :O)=V :O+1)=A O=O+2 | |
240 G=G+3 | |
300 )** TOP OF STATEMENT ** | |
310 N=G@0 M=G@2 | |
320 ;=N=")" #=900 | |
330 ;=M=""" #=2300 | |
350 ;=N="#" Q=04C #=1000 | |
360 ;=N="!" Q=020 #=1000 | |
370 ;=N="]" #=1100 | |
400 ;=N="?" #=2500 | |
410 ;=("Z">N)*(N>"A") #=5000 | |
420 ;=N=";" #=5500 | |
460 ;=N="$" G=G+2 Z=0FD39 #=2900 | |
480 ;=N=" " #=700 | |
490 ?="G="; ??=G ?=" N="; $=N ?=" "; #=20000 | |
500 K=0 ;=G@0="0" G=G+1 #=530 ) parse num (dec or hex) | |
510 E=G@0-030 ;=(E<0)+(9<E) ] | |
520 K=K*10+E G=G+1 #=510 | |
530 H=G@0 E=H-(030*(H<"A"))-(037*(H>"9")) | |
540 ;=(E<0)+(E>15) ] | |
550 K=K*16+E G=G+1 #=530 | |
600 @=A,0E8 A=A+1 @=A,0E8 A=A+1 ] ) eb inx x2 ; argスタックのプッシュ | |
610 @=A,0CA A=A+1 @=A,0CA A=A+1 ] ) ca dex x2 ; argスタックのポップ | |
620 @=A,0A2 A=A+2 @=(A-1),0E0 ] ) a2e0 ldx #arg ; argスタックのポインタxを初期化 | |
630 !=600 !=4000 !=610 ] ) パースした値を次のargに入れる | |
700 )** END OF STATEMENT ** | |
710 ;=G@0=0 G=G+1 #=200 | |
730 ;=G@0=" " G=G+1 #=710 | |
740 #=300 | |
900 )** REM ** | |
910 ;=G@0=0 G=G+1 #=200 | |
920 G=G+1 #=910 | |
1000 G=G+2 !=1400 | |
1010 #=700 | |
1100 G=G+1 @=A,060 A=A+1 #=700 | |
1400 ;=G@0="-" G=G+1 !=500 K=07FFF #=1500 ) マイナスならプログラム終了の処理 | |
1410 !=500 ) 数値をパースしてKにセット | |
1500 @=A,Q A=A+3 ;=P=1 ] ) pass1ならJP/CALLをセットして終わる | |
1510 J=-1 { J=J+2 X=:J) }=X>K ) pass2なら飛び先アドレスをラベルテーブルから検索 | |
1520 ??=:J+1) ?="" ) ヒットしたアドレスを表示 | |
1530 <=(A-2),(:J+1)) ] ) 飛び先アドレスをオペランドにセットして終了 | |
2300 G=G+2 @=A,04C A=A+1 I=2 ) 4c1e06 jmp L2 | |
2310 Q=A+2 { C=G@(I-1) @=A+I,C I=I+1 }=C=""" | |
2320 <=A,(A+I) G=G+I-1 A=A+I | |
2330 @=A,0A9 A=A+2 @=A-1,(Q&0FF) ) a902 lda #<L1 | |
2340 @=A,085 A=A+2 @=A-1,080 ) 8580 sta $80 | |
2350 @=A,0A9 A=A+2 @=A-1,(Q/256) ) a906 lda #>L1 | |
2360 @=A,085 A=A+2 @=A-1,081 ) 8581 sta at+1 | |
2370 @=A,0A2 A=A+2 @=A-1,(""") ) a200 ldx #'"' | |
2380 @=A,0A0 A=A+2 @=A-1,0 ) a000 ldy #0 | |
2390 @=A,020 A=A+3 <=A-2,0EB22 ) 2022eb jsr outmsg | |
2400 N=G@0 ;=N=";" G=G+1 #=700 | |
2410 @=A,0A9 A=A+2 @=A-1,13 ) a90d lda #13 | |
2420 @=A,020 A=A+3 <=A-2,0FD39 ) 2039fd jsr outch | |
2430 #=700 | |
2500 ;=G@1#"=" #=2600 ) ?のうしろが=じゃない場合次へ | |
2510 G=G+2 Z=0EC57 #=2900 ) 単純な10進数値出力 -> サブルーチンのアドレスをセット | |
2900 !=3000 ) 式のパース処理 | |
2910 @=A,0A5 A=A+2 @=(A-1),0E0 ) a5e0 lda arg[0] | |
2920 @=A,020 A=A+3 <=(A-2),Z #=700 ) 20xxxx jsr xxxx | |
2999** EXPRESSION ** | |
3000 !=620 ) xを初期化 | |
3010 !=4000 ) 左辺をパースして結果をarg[x]に保存 | |
3200 H=G@0 G=G+1 ) 演算子を取り出す | |
3210 ;=H="+" !=630 H=0EE3A #=3500 ) 足し算 | |
3220 ;=H="-" !=630 H=0EE48 #=3480 ) 引き算 | |
3230 ;=H="*" !=630 H=0EE00 #=3500 ) 掛け算 | |
3240 ;=H="/" !=630 H=0EF0C #=3500 ) 割り算 | |
3250 ;=(H#"<")*(H#"=")*(H#">") #=3290 ) 比較の場合 | |
3260 C=H !=600 !=4000 !=610 ) 演算子をCに退避して右辺をパース | |
3270 @=A,0A9 A=A+2 @=(A-1),C ) a8xx lda #{H} 演算子をAレジスタに | |
3280 H=0EE88 #=3480 ) 比較のルーチンを呼ぶ | |
3290 G=G-1 ] ) 演算子でなかったのでポインタを戻して終了 | |
3480 @=A,038 A=A+1 ) 38 sec ; 引き算の前にキャリークリア | |
3490 @=A,0CA A=A+1 ) ca dex ; 引き算等はpre-decrementが必要 | |
3500 @=A,020 A=A+3 <=A-2,H #=3200 ) 20xxxx jsr {H} | |
3999 ) ** 項のパース処理 ** | |
4000 H=G@0 G=G+1 ) 先頭から文字を1つ取り出す | |
4010 ;=(H>"0")*(("9")>H) #=4210 ) 数値か? | |
4020 ;=H=""" #=4200 ) 文字か? | |
4030 ;=H="-" !=500 K=0-K !=8887 #=4230 ) マイナス記号? -> 符号反転 | |
4040 ;=(H<"A")+(H>"Z") #=4500 ) その他システム変数(記号)の処理 | |
4060 H=2*H|128 ) 変数参照処理 | |
4070 @=A,0A5 A=A+2 @=(A-1),H ) A5XX lda {H} ; 変数の16bit値をarg[x]にセット | |
4080 @=A,095 A=A+2 @=(A-1),0 ) 9500 sta 0,x | |
4090 @=A,0A5 A=A+2 @=(A-1),(H+1) ) A5XX lda {H}+1 | |
4100 @=A,095 A=A+2 @=(A-1),1 ] ) 9501 sta 1,x | |
4200 K=G@0 G=G+2 #=4270 ) 文字→バイト値 | |
4210 G=G-1 !=500 ) 数値をパースして結果をarg[x]にセットする | |
4230 @=A,0A9 A=A+2 @=(A-1),(K&255) ) a9XX lda <#K ; Aにパース結果のLSBをロード | |
4240 @=A,095 A=A+2 @=(A-1),0 ) 9500 sta 0,x | |
4250 @=A,0A9 A=A+2 @=(A-1),(K]8) ) a9XX lda >#K | |
4260 @=A,095 A=A+2 @=(A-1),1 ] ) 9501 sta 1,x | |
4270 @=A,0A5 A=A+2 @=(A-1),K ) A5XX lda {K} | |
4280 @=A,095 A=A+2 @=(A-1),0 ) 9500 sta 0,x | |
4290 @=A,074 A=A+2 @=(A-1),1 ] ) 7401 stz 1,x | |
4500 ;=H#"(" #=4600 | |
4510 !=3010 ;=G@0#")" #=20000 ) 括弧の処理 | |
4520 G=G+1 ] | |
4800 ;=H="#" #=-1 | |
4890 #=20000 | |
4999 ) ** 変数への代入処理 ** | |
5000 Z=2*(G@0)|128 ) 変数名からアドレスを求めてZにセットする | |
5300 G=G+2 !=3000 ) パラメータの値をarg{0}にセット | |
5310 @=A,0A5 A=A+2 @=(A-1),0E0 ) a5e2 lda arg | |
5320 @=A,085 A=A+2 @=(A-1),Z ) 85XX sta {Z} | |
5330 @=A,0A5 A=A+2 @=(A-1),0E1 ) a5e3 lda arg+1 | |
5340 @=A,085 A=A+2 @=(A-1),(Z+1) #=700 ) 85XX sta {Z}+1 | |
5499 ) *** IF statement *** | |
5500 ;=G@1#"=" #=20000 ) イコールがなければエラー | |
5510 G=G+2 !=3000 ) ポインタを進めてパラメータをパース | |
5520 @=A,0B5 A=A+2 @=(A-1),0 ) b500 lda 0,x | |
5530 @=A,015 A=A+2 @=(A-1),1 ) 1501 ora 1,x | |
5540 @=A,0D0 A=A+2 @=(A-1),3 ) d003 bne next_statement | |
5550 Q=04C K=V+1 !=1500 #=700 ) 4cxxxx JMP xxxx ; 次の行へジャンプ | |
8887 ?="K="; ?$=K&255 ?=":"; ?$=K]8 ?="" ] | |
8888 ?="**** "; ?="O="; ?=O-2 ?=" LINE="; ?=:O-2) ?=" ADDR="; ??=:O-1) ?=" ****" ] | |
20000 ?="ERROR AT "; ?=!-1 #=-1 | |
#=1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment