PIC24FJ64GAでGAME言語(その2) [PIC]
PIC24FJ版GAME言語についてはもっと使いやすくなるように色々考え中です ^^
GAME言語はライン番号付きのソースなのでライン番号のリナンバーをしたくなることがありますが当然エディタにはそんな機能は付けていませんw
perl等で処理すれば楽なのですが、GAME言語のリハビリも兼ねてリナンバープログラムを作成してみました。
昔のPCを探せば出てきそうな気もしますが、PIC24FJ版のGAME言語では前回も書いたように各ソース行の先頭に行のバイト数情報を追加しているので以前のものをそのまま使えるわけではありません。
下記はPIC24FJ版GAME起動後から次の操作を行った操作ログです(水色が入力部分)。
★2015/07/25 リナンバープログラムを若干改善しました
2015/08/10 """ の処理改善
★2015/08/02 追記
オリジナルのGAME言語と下記の差異があります。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
GAME言語はライン番号付きのソースなのでライン番号のリナンバーをしたくなることがありますが当然エディタにはそんな機能は付けていませんw
perl等で処理すれば楽なのですが、GAME言語のリハビリも兼ねてリナンバープログラムを作成してみました。
昔のPCを探せば出てきそうな気もしますが、PIC24FJ版のGAME言語では前回も書いたように各ソース行の先頭に行のバイト数情報を追加しているので以前のものをそのまま使えるわけではありません。
下記はPIC24FJ版GAME起動後から次の操作を行った操作ログです(水色が入力部分)。
- リナンバープログラムのロード(teratermでコピペ)
- ロードしたプログラムのリスト表示
- プログラムの開始アドレスと終了アドレスの確認
- 実行(リナンバープログラム自身をリナンバー対象としてリナンバー後のプログラムを0x1800からの領域に書き込む)
- リナンバー後のプログラムのリスト表示
GAME interpreter in PIC24FJ64GA Ver 0.02 2015/07/26 by skyriver :1' renumber for GAME in PIC24FJ64GA 2015/08/10 by skyriver :100 /"src address : " S=? :110 /"dst address : " D=? :112 /"line start : " B=? :114 /"line step : " E=? :120 Z=& TBL=Z+6 :130 P=S IDX=0 :140 @ :150 TBL(IDX)=P:2)*256+P:1) :160 P=P+P:0) IDX=IDX+1 :170 @=(P:0)=0) :180 P=S IDX=0 :190 @ :200 CNT=D NEW=E*IDX+B :210 D:1)=NEW D:2)=NEW/256 D=D+3 P=P+3 :212 / ?(5)=TBL(IDX) " :" ?(5)=NEW :220 ;=P:0)<>" " @ D:0)=P:0) D=D+1 P=P+1 @=(P:0)=0) :230 @ :234 ;=(P:0)=""")&(P:-1)<>" ")&(P:-1)<>"/") D(0)=P(0) D:2)=P:2) D=D+3 P=P+3 :236 ;=P:0)=""" @ D:0)=P:0) D=D+1 P=P+1 @=(P:0)=""") :240 ;=(P:0)="#")|(P:0)="!") !=1000 :250 D:0)=P:0) :260 D=D+1 P=P+1 :300 @=(P:-1)=0) :310 IDX=IDX+1 CNT:0)=D-CNT :320 @=(P:0)=0) :322 D:0)=0 :330 #=-1 :1000' goto,gosub :1010 ;=(P:1)<>"=")|(P:2)="-") ] :1020 D:0)=P:0) D:1)="=" D=D+2 P=P+2 :1030 LINE=0 @ LINE=LINE*10+(P:0)-"0") P=P+1 @=((P:0)<"0")|(P:0)>"9")) :1040 " " $=D:-2) "=" ?=LINE " -> " :1050 F=-1 @ F=F+1 @=(TBL(F)>=LINE) :1060 LINE=E*F+B X=Z-1 ?=LINE :1062 @ X=X+1 LINE=LINE/10 X:0)=%(0)+"0" @=(LINE=0) :1070 @ D:0)=X:0) D=D+1 X=X-1 @=(X<Z) :1080 ] :0 1' renumber for GAME in PIC24FJ64GA 2015/08/10 by skyriver 100 /"src address : " S=? 110 /"dst address : " D=? 112 /"line start : " B=? 114 /"line step : " E=? 120 Z=& TBL=Z+6 130 P=S IDX=0 140 @ 150 TBL(IDX)=P:2)*256+P:1) 160 P=P+P:0) IDX=IDX+1 170 @=(P:0)=0) 180 P=S IDX=0 190 @ 200 CNT=D NEW=E*IDX+B 210 D:1)=NEW D:2)=NEW/256 D=D+3 P=P+3 212 / ?(5)=TBL(IDX) " :" ?(5)=NEW 220 ;=P:0)<>" " @ D:0)=P:0) D=D+1 P=P+1 @=(P:0)=0) 230 @ 234 ;=(P:0)=""")&(P:-1)<>" ")&(P:-1)<>"/") D(0)=P(0) D:2)=P:2) D=D+3 P=P+3 236 ;=P:0)=""" @ D:0)=P:0) D=D+1 P=P+1 @=(P:0)=""") 240 ;=(P:0)="#")|(P:0)="!") !=1000 250 D:0)=P:0) 260 D=D+1 P=P+1 300 @=(P:-1)=0) 310 IDX=IDX+1 CNT:0)=D-CNT 320 @=(P:0)=0) 322 D:0)=0 330 #=-1 1000' goto,gosub 1010 ;=(P:1)<>"=")|(P:2)="-") ] 1020 D:0)=P:0) D:1)="=" D=D+2 P=P+2 1030 LINE=0 @ LINE=LINE*10+(P:0)-"0") P=P+1 @=((P:0)<"0")|(P:0)>"9")) 1040 " " $=D:-2) "=" ?=LINE " -> " 1050 F=-1 @ F=F+1 @=(TBL(F)>=LINE) 1060 LINE=E*F+B X=Z-1 ?=LINE 1062 @ X=X+1 LINE=LINE/10 X:0)=%(0)+"0" @=(LINE=0) 1070 @ D:0)=X:0) D=D+1 X=X-1 @=(X<Z) 1080 ] :??== 1000 :??=& 142C :#=1 src address : = dst address : $1800 line start : 1 line step : 1 1 : 1 100 : 2 110 : 3 112 : 4 114 : 5 120 : 6 130 : 7 140 : 8 150 : 9 160 : 10 170 : 11 180 : 12 190 : 13 200 : 14 210 : 15 212 : 16 220 : 17 230 : 18 234 : 19 236 : 20 240 : 21 !=1000 -> 29 250 : 22 260 : 23 300 : 24 310 : 25 320 : 26 322 : 27 330 : 28 1000 : 29 1010 : 30 1020 : 31 1030 : 32 1040 : 33 1050 : 34 1060 : 35 1062 : 36 1070 : 37 1080 : 38 :=$1800 :0 1' renumber for GAME in PIC24FJ64GA 2015/08/10 by skyriver 2 /"src address : " S=? 3 /"dst address : " D=? 4 /"line start : " B=? 5 /"line step : " E=? 6 Z=& TBL=Z+6 7 P=S IDX=0 8 @ 9 TBL(IDX)=P:2)*256+P:1) 10 P=P+P:0) IDX=IDX+1 11 @=(P:0)=0) 12 P=S IDX=0 13 @ 14 CNT=D NEW=E*IDX+B 15 D:1)=NEW D:2)=NEW/256 D=D+3 P=P+3 16 / ?(5)=TBL(IDX) " :" ?(5)=NEW 17 ;=P:0)<>" " @ D:0)=P:0) D=D+1 P=P+1 @=(P:0)=0) 18 @ 19 ;=(P:0)=""")&(P:-1)<>" ")&(P:-1)<>"/") D(0)=P(0) D:2)=P:2) D=D+3 P=P+3 20 ;=P:0)=""" @ D:0)=P:0) D=D+1 P=P+1 @=(P:0)=""") 21 ;=(P:0)="#")|(P:0)="!") !=29 22 D:0)=P:0) 23 D=D+1 P=P+1 24 @=(P:-1)=0) 25 IDX=IDX+1 CNT:0)=D-CNT 26 @=(P:0)=0) 27 D:0)=0 28 #=-1 29' goto,gosub 30 ;=(P:1)<>"=")|(P:2)="-") ] 31 D:0)=P:0) D:1)="=" D=D+2 P=P+2 32 LINE=0 @ LINE=LINE*10+(P:0)-"0") P=P+1 @=((P:0)<"0")|(P:0)>"9")) 33 " " $=D:-2) "=" ?=LINE " -> " 34 F=-1 @ F=F+1 @=(TBL(F)>=LINE) 35 LINE=E*F+B X=Z-1 ?=LINE 36 @ X=X+1 LINE=LINE/10 X:0)=%(0)+"0" @=(LINE=0) 37 @ D:0)=X:0) D=D+1 X=X-1 @=(X<Z) 38 ] : |
★2015/07/25 リナンバープログラムを若干改善しました
2015/08/10 """ の処理改善
★2015/08/02 追記
オリジナルのGAME言語と下記の差異があります。
- 入力時にプロンプト’:’を自動表示しない。
- オリジナルでは&はソース終了アドレスを示しますがPIC24FJ版ではソース終了アドレス+1を示します。
- オリジナルにあった &:0)=$F0 でのプログラムロック機能には対応していません。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
コメント 0