まごころせいじつ堂

浜町庄金 研究開発  マイコンで遊んでばっかりで

2021年01月

豊四季タイニーBASICをMS-DOS上で動かす

 豊四季タイニー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の修正
 豊四季タイニーBASICArduino版をベースにコンパイルできるよう修正する。
変更点:
(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あたり 海外の事例探し

 といった感じで。




SBCV20とクロックジェネレータ

 電脳伝説さんのSBCV20キットが発売になりました。

SBCV20専用プリント基板(オレンジピコショップ)

 技術資料とデータパックはそれぞれの商品説明のページにリンクされている。これによるとV20の代わりに8080を動かすためにはクロックジェネレータをuPD71011Cから8284Aに交換し、クロックを分周してUSARTの通信用クロックを作っている74HC4040のタップを切り替える。これは8088がデューティ比1:2のクロックを必要とするのでi8284Aが大元のクロックを÷3するため。V20は1:1のクロック入力でuPD71011Cは÷2。昔8086搭載パソコンにV30を差し替えるのが流行ったけどクロックジェネレータまでは交換してなかったのでタイミング的には実力で動いていた模様。

 さて8088は昨年秋葉原でなぜか新品と思われるものが店に並び、とある方から地方在住の私宛に送っていただいたので動かそうと思ったのだけど上記の変更に加え水晶振動子を14.7456MHzに交換しなければならない。これは準備していなかったのだがUSARTの通信クロックを独立させればと以前やった『SBC8080SUBボードのクロックをPICで』と同じ手を使った。

2021-01-24 17.57.02

 74HC4040の代わりに小基板をつけて、osc1536.hexをPIC12F1822に書き込み搭載。osc1536.hexについては『モトローラ6800伝説』とSBC6800ルーズキットを参照のこと。

 配線はこちら。
2021-01-24 19.38.25

 PIC12F1822をICソケット経由で実装するとすぐ下になる抵抗とダイオードに干渉するけどちょっと浮くだけだしまあいいか。
2021-01-24 17.58.04


 さて、これでよかろうと動作確認してみたら文字化け。
2020-12-30 12.19.48


 クロックは周波数カウンタで確認してちゃんと出てるけどなんでだろうか?


 これはクロックジェネレータがバイポーラかCMOSかの違いで水晶振動子の両端を抵抗でGNDに落とすか10pFのコンデンサで落とすか処理が異なっていたのが原因。これは知らなかった。

 データシートを見るとバイポーラの8284Aだと510Ωの抵抗で水晶振動子の両端をGNDに落としている。
スクリーンショット 2021-01-24 18.55.54

 このあたり気になったのでFM-11の8088カードで確認したら同様だった。ただしVccにつなぐ30pFのコンデンサはなかった。

 SBCV20基板の10pFコンデンサの足をカットし、裏面に抵抗(680Ω)を付けて動作OK。
2021-01-24 17.57.17

2020-12-30 22.07.36



UPD71011データシート(renesas)を見るとコンデンサで処理してある。8284Aと動作が同じuPD71084を使う場合はCMOSなのでuPD71011Cと同様にしなければならない。

参考:V20/V30の周辺デバイス(Electrelic)









記事検索
プロフィール

hardyboy

カテゴリ別アーカイブ
月別アーカイブ
QRコード
QRコード
  • ライブドアブログ