SSブログ
English Version

PIC24FJ64GAでGAME言語(その2) [PIC]

 PIC24FJ版GAME言語についてはもっと使いやすくなるように色々考え中です ^^

 GAME言語はライン番号付きのソースなのでライン番号のリナンバーをしたくなることがありますが当然エディタにはそんな機能は付けていませんw
 perl等で処理すれば楽なのですが、GAME言語のリハビリも兼ねてリナンバープログラムを作成してみました。
 昔のPCを探せば出てきそうな気もしますが、PIC24FJ版のGAME言語では前回も書いたように各ソース行の先頭に行のバイト数情報を追加しているので以前のものをそのまま使えるわけではありません。

 下記はPIC24FJ版GAME起動後から次の操作を行った操作ログです(水色が入力部分)。
  1. リナンバープログラムのロード(teratermでコピペ)
  2. ロードしたプログラムのリスト表示
  3. プログラムの開始アドレスと終了アドレスの確認
  4. 実行(リナンバープログラム自身をリナンバー対象としてリナンバー後のプログラムを0x1800からの領域に書き込む)
  5. リナンバー後のプログラムのリスト表示

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言語と下記の差異があります。
  1. 入力時にプロンプト’:’を自動表示しない。
  2. オリジナルでは&はソース終了アドレスを示しますがPIC24FJ版ではソース終了アドレス+1を示します。
  3. オリジナルにあった &:0)=$F0 でのプログラムロック機能には対応していません。


[TOP] [ 前へ ] 連載記事 [ 次へ ]
nice!(0)  コメント(0)  トラックバック(2) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 2