SSブログ
English Version

ポケコン(PC-G850V)でGAME言語(その3)GAMEコンパイラ [ポケコン]

 前回の「ポケコン(PC-G850V)でGAME言語(その2)」で書いたようにポケコン(G850V)環境でTEXTエディタで編集している内容をGAME言語のソースにコンバートするツールができたので今回はポケコンでGAMEコンパイラを動かしてみました。

 TK-80BS用のGAMEインタプリタは開始アドレスが 8600H ですが、ポケコン(G850)はメモリの後半が ROM なのでインタプリタの開始アドレスを 0400H に変更しています(インタプリタ本体及びワークエリアはそのまま平行移動)。

 従ってGAMEコンパイラを動かすためにはコンパイルの際、埋め込まれるインタプリタ内処理とワークエリアのアドレスを変更する必要があります。
 GAMEコンパイラのソースを眺めてみると $8xxx(xは[0-9,A-F])の部分を

0400H - 8600H

の値を加算したものに変更すれば動きそうです。

 手作業で変更するのは面倒なので変換ツールを作り、一括変換しました。
 変換時のログが下記になります。コンパイラソースの行カウント値、行番号、変更前データ、変更後データを表示しています。

GAMEコンパイラ内のインタプリタ関連アドレス変換ログ
C:\src\G850V\comp>perl cnvcomp.pl <GAMECOM.GAM >GAMEC.GAM

    7    65 : $8D06 -> $0B06
   15   220 : $8603 -> $0403
   15   220 : $8603 -> $0403
   25   380 : $8C83 -> $0A83
   31   440 : $8B58 -> $0958
   33   460 : $8B85 -> $0985
   34   470 : $8D52 -> $0B52
   75  2420 : $8785 -> $0585
   78  2510 : $8C26 -> $0A26
   80  2610 : $8C32 -> $0A32
   81  2620 : $8C31 -> $0A31
   83  2710 : $8C31 -> $0A31
   85  2810 : $8B9C -> $099C
   95  3210 : $8A03 -> $0803
   96  3220 : $8A0F -> $080F
   97  3230 : $8A2C -> $082C
  111  3610 : $8A03 -> $0803
  140  4620 : $889E -> $069E
  144  4720 : $8D4E -> $0B4E
  145  4750 : $8C96 -> $0A96
  148  4800 : $8A5B -> $085B
  149  4810 : $8872 -> $0672
  150  4820 : $8881 -> $0681
  151  4830 : $8904 -> $0704
  190  5740 : $8A03 -> $0803
C:\src\G850V\comp>


 このような処理はGAME言語では荷が重いのでperlを使いました。ソースは以下の通りで使い捨てツールなので凝った作りにはしていません。

GAMEコンパイラ内アドレス変換ツール(perl)
#!/usr/bin/perl # convert GAME compiler to any offset # ver 0.01 2010/01/15 skyriver use strict; use warnings; my $OrgStart = 0x8600; my $NewStart = 0x0400; # set here new start address my $Ofst = $NewStart - $OrgStart; my $LinCnt; # line counter my $LinNo; main(); sub main { my ($ln,$find,$change); while( <> ) { chomp(); $LinCnt++; $ln = $_; if( $ln =~ /^(\d+)/ ) { $LinNo = $1; while ( $ln =~ /\$(8[0-9,A-F]{3})/ ) { $find = $1; $change = eval( "0x" . $find ) + $Ofst; $change = sprintf( "%04X", $change ); printf( STDERR "\n%5d %5s : \$%s -> \$%s", $LinCnt, $LinNo, $find, $change ); $ln =~ s/\$$find/\$$change/; } printf( "%s\n", $ln ); } } }


★2020/01/16 追記 Twitterにポストしたメッセージを貼っておきます。


 「MSX-DOS上でのGAME言語のベンチマーク」の記事でベンチマークに今回のポケコンでのGAMEインタプリタとコンパイラの結果を追記しました。
 G850V(Z-80:8MHz)でのGAMEインタプリタは予想に反してかなり遅い結果で、同じコードが動いているPic24CPM ボード(Z-80:16MHz)のCP/M-80でのGAME80インタプリタの10倍程度遅いです。

 インタプリタ自体は同じコードなのでキーセンス処理が原因かと思い、キー入力チェック無しにリターンするようにしましたが変化はなく、現時点では原因不明です。

 今回移植したGAMEコンパイラの結果も追記していますが、コンパイラの方はクロック相応の速度が出ているようです。

 GAMEコンパイラを同梱したファイルは「ポケコン(PC-G850V)でGAME言語」のページで公開しています。

 GAMEコンパイラのソースを公開していいのか不明(GAME本体のソースも同様)なのでコンパイル後のHEXファイルのみ付けていますが、「3チップ構成Pic24CPMマイコン(その7)GAMEコンパイラ」の記事を参照すればGAMEコンパイラのソースを入手できます。


[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 0

コメントを書く

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