LoginSignup
0
0

More than 5 years have passed since last update.

VTL_on_FPGA[その2 GAME86インタープリター]

Last updated at Posted at 2018-07-07

効能

 VTL_on_FPGAのGAME80コンパイラーをパソコン上で動作させることが出来ます。

元ネタ

 スクラッチからでは能力的にも時間がかかりそうなので、下記サイトのものを使わせてもらっています。
 Linux用なので、IOをWindowsにちょこちょこと書き換えて動かしています。
 VTLソースの編集は外部エディタで行うので、ラインエディタ系は動かない可能性大。
  [たけおか ぼちぼち日記]
 ※許諾については記載が無いので、黙って使わせていただいておりますが、問題あれば取り下げます。

GAME86インタープリター

 ソースはここに上げています。
 [GAME86]
 VS2017(無償版)でコンパイルしており、「game86.sln」でコンパイルできるはずです。
 VS2017無い場合も、へんな命令は使っていないつもりなので、その辺のコンパイラでも可と思う。
 それもめんどうな場合は「game86.exe」を起動してみてください。
 ※但し、「誰も使っていない怪しいソフト」として、ノートンなどがクレームをつける恐れあり。

 起動すると下記が表示されます。
 「ESC」キーで実行中の中断、「\」キーで終了します。
VTL及びGAME-IIIのコマンドを打ち込むと実行できます。

--- VTL_on_FPGA Interpreter ---
G>>

改変、機能追加

 GAME86に、VTL_on_FPGAとして機能させる為に下記機能に変更、追加を行っている。
 1.配列は標準では16ビットモードで動作  A:0) -> 8bit A(0) -> 16bit A[0) -> 32bit
 2.行の途中からのコメントを許容。※判りやすくなる

    10 A=$1000 * 開始番地  <- 「*」以降はコメントとなり、実行されない。

 3.ソース格納エリアを2分割(コンパイラとコンパイルターゲットソースを格納)するコマンドを追加。
  [P0 メモリアドレス $0000 - $7FFF コンパイルターゲットソースを格納
  [P1 メモリアドレス $8000 - $FFFF GAME86上で動作するコンパイラ(GM80)を格納
 4.デバッグコマンドとして[Txを追加。
  [T0 デバッグコマンド([T1 - [T3)を無効化
  [T1 トレース実行(実行中の行番号を表示)
  [T2 ステップ実行(行番号毎に中断)
  [T3 ブレーク有効(ソース中に !! マークが有れば中断)
  ※中断後に、](+ret)で再スタートする。
 5.プログラムのロード、セーブ
  [LO xxxx ファイルxxxxからプログラムをロードする。
  [SA xxxx ファイルxxxxにプログラムをセーブする
  [L0 xxxx ファイルxxxxからプログラムを、[P0にマージしながらロードする
  [L1 xxxx ファイルxxxxからプログラムを、[P1にマージしながらロードする
 6.FPGAへの書き込み支援
  [MR xxxx ファイルxxxxにVTL機械語を、verilogソース形式で格納(但し32bit)
  [MM xxxx ファイルxxxxにVTL機械語を、mif形式で格納(但し32bit)
  [MH xxxx ファイルxxxxにVTL機械語を、バイト形式で格納
  [MC xxxx ファイルxxxxにVTL機械語を、coe形式で格納(但し32bit)
  [CW クリップボードにVTL機械語を、バイト形式で格納
  ※[MHでFPGAに機械語を受け渡す、[CWはデバッグ時に使用
  ※32bitモードは、今回は使用しない
 7.コンパイル操作支援
  (1)[¥¥ VTL_on_FPGAに必要なソースをすべてロードし、コンパイルを実行
   "[P0 [LO gm80\gm80.gm [L0 gm80\moni.gm [L0 gm80\bios.gm [L0 gm80\gm80ovf.gm [P1 [LO gm80\gm80.gm [L1 gm80\gm80ovp.gm #=1"
  (2)[@@ VTL_on_FPGAのモニター部分をロードし、コンパイルを実行
   "[P0 [LO gm80\moni.gm [P1 [LO gm80\gm80.gm #=1"
  (3)[[[ test.gmをロードし、コンパイルを実行
   "[p0 [LO gm80\test.gm [p1 [LO gm80\gm80.gm #=1"
 8.グラフィック(20180722追加)
  拡張IOに合わせたグラフィックが表示可能です。
  <\$18=1 ウインドを表示。
  <\$18=0 ウインドをリフレッシュ
  <\$15=XX X座標を指定
  <\$16=YY Y座標を指定
  <\$18=CC 指定した色を表示(但しWinではリフレッシュが必要)

GAME86の文法

[GAME86 Compiler for MS-DOS 1.00C記]より
 ※インタープリターは上記URLとは別物です。

    <行番号>   1 ? 32767
    <10進定数> 0 ? 65535
    <16進定数> $0000 ? $FFFF
    <文字定数> "文字"
    <変数名>   A ? Z または冗長形(ABC等 先頭1文字が有効)
    <1バイト配列> ::= 変数名 ( <式> )
                      変数の値 + 2 * 式の値 のアドレスの内容を値とする.
    <2バイト配列> ::= 変数名 : <式> )
                      変数の値 + 式の値 のアドレスの内容を値とする.
    <定数> ::= <10進定数> | <16進定数> | <文字定数>
    <変数> ::= <変数名> | <1バイト配列> | <2バイト配列>
    <式> ::= <項> | <項> <二項演算子> <項>
    <項> ::= <定数> | <変数> | <配列> |( <式> )| <単項演算子> <項>
    <二項演算子> ::= + | - | * | / | = | <> | < | > | <= | >=
                    比較演算 は 真:1, 偽:0の値を取る.
    <単項演算子> ::= - | + | % | ' | #
                     + は絶対値, % は直前に実行した除算の余り,
                     ' は乱数, #は否定.
    <行> ::= <行番号> スペース <文> [ 空白 <文> ] 改行
             | <行番号> スペース以外の文字 コメント 改行

    <文>
        <変数>=<項>     変数への代入
        #=<項>            <項>の値の行番号の文にジャンプ(GOTO)
                          行番号がなければ行番号より大きい最初の行へジャンプ
        #=-1              プログラムの終了(END)
        !=<項>            <項>の値の行番号のサブルーチンへジャンプ(GOSUB)
        ]                 サブルーチンから戻る(RETURN)
        ;=式              式の値が真の場合は次の文に進み,
                          偽の場合は次の行を実行.
        @                 DO
        @=(式)            UNTIL
        変数=初期値,ステップ FOR
        @=式              NEXT
        /                 改行出力
        "文字列"          文字列出力
        ?=<項>            <項>の結果を数値出力 左詰め
        ??=<項>           <項>の結果を数値出力 16進4桁
        ?$=<項>           <項>の結果の下位1バイトを数値出力 16進2桁
        ?(n)=<項>         <項>の値の数値出力 n桁で右詰め
        $=<項>            <項>の値の下位バイトを文字コードとする1文字を出力
        .=<項>            <項>の値の下位バイトの数だけ空白を出力
        '=<項>            <項>の値で乱数シードを設定
        <変数>=?          10進数値を入力して変数に代入
        <変数>=$          1文字を入力して変数に代入

その他

 とりあえず動いているのレベルであり、状況によっては動かない可能性が有ります。
 上記記載のハード、ソフトは無保証であり、各自の責任においてご利用願います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0