豊四季タイニーBASICのソースをコンパイルしてMS-DOS上で動かしてみる。
きっかけは生の8086上で色々動かせるための環境をどうしようかと考えていてそういえば学生の頃からよく使ったLSI-C86試食版があったな、と。Windows10やWindows7では16bit版のバイナリは実行できないのでこれはMS-DOS Player for Win32-x64を使い、確認のため豊四季タイニーBASICをコンパイルして実行してみた。
以上でだいたいわかった方はこちらをどうぞ↓
(1)LSI-C86試食版のインストール
エル・エス・アイ ジャパン株式会社のフリーソフトウェア集のページからlsic330c.lzhをダウンロードし、.LZH形式が展開できるツールでC:\LSIC86以下に展開。
C:\BIN以下にある_LCCの内容を修正。昔はPC-98だったのでA:ドライブだったよな〜等
# LSI C-86 compiler's configuration file -DLSI_C -XC:\LSIC86\BIN -LC:\LSIC86\LIB -IC:\LSIC86\INCLUDE -T -O -acdos.obj $LSICOPTS & #Command line argument will be inserted here -lknjlib -ldoslib -v
C:\LSIC86\BINにパスを通す。[システムのプロパティ]→[環境変数(N)…]からシステム環境変数のPathにC:\LSIC86\BINを追加。
(2)MS-DOS Playerの導入
MS-DOS Player for Win32-x64からダウンロード。MS-DOSを実行するプロセッサが8086/80286/80386/80486から、コマンド自体が動作する環境が32bit/64bitから選べる。LSI-C86は8086以降から動くのでどれを選んでも問題ない。動作環境はWindows10だと64bit版。これに対応したMSDOS.EXEをC:\LSIC86\BIN以下にコピーする。
ここまでで適当にhello.cなど書いて動作確認。16bitバイナリの実行には頭にMSDOSを付けて実行。
C:\LSIC86> MSDOS LCC HELLO.C
私の環境では普段使っているデスクトップのWindows10機ではウイルススキャンの対象になっているのかうまく動かなかった。WindowsXP→Windows7→Windows10と継ぎ足しで使ってて切り分けも面倒なので別のパソコンで動かしている。
(3)豊四季タイニーBASICの修正
豊四季タイニーBASICはArduino版をベースにコンパイルできるよう修正する。
変更点:
(1) ソースの文字コードをSJISに変換
(2) コメント//を/* */の形式に変換
(3) #define STR_EDITIONを"MSDOS"に
(4) Terminal controlの部分をputch(c) getch() kbhit() に
(5) (uintptr_t)を削除。これArduino Dueで豊四季タイニーBASICを動かそうとした時に追加して反映してもらったパッチなのですが外すことに。
(6) getrnd()再実装。これはarduinoのrandom(MAX,MIN)とrand()の仕様が違うため。
(7) BYE命令追加。一度basicを起動するとMS-DOSに戻る手段がなかったのでNEWとかRUNといった命令を参考に呼んだらexit()を実行するようにした。
(8) 末尾にbasic()を呼び出すmain()関数追加。
配列の上限やらそのあたりはいじっていません。
さて今後ですが、具体的にはV20SBC開発環境として使えないかどうか探っていきます。LSI-C86製品版なら組み込み向けのリンクもできるらしいし、BANDAIの携帯ゲーム機WonderSwanの開発環境WonderWitchにはカスタマイズしたLSI-C86が付属していたのですがどこにしまったかな?
案1:通常のMSDOS向けにリンクしてある.objについて、適切にハードウェアの初期化を行った.objファイルを生成しリンク
案2:豊四季タイニーBASICからMS-DOSやその他ライブラリに依存した部分(入出力とrand()、exit() )を修正してアセンブラ1本にし、他の8086ターゲットアセンブラに持っていく
案3:組み込み向けの使用例があるTurbo-Cあたり 海外の事例探し
といった感じで。








