tinyBasic2

PIC32MX

PIC32MX上でtinyBasic2インタプリタを動かそう

PIC32MXでVGA出力の続き

  • /ATMEL_AVR/jpg/basic1.jpg





The Tiny Basic2

元ネタ: 1990-1-1

Raspberry PiにTinyBasicが移植された。

これをPIC32MXで動かしてみました。

  • Raspberry Pi版は、コードサイズで64kB程ありますので、Flash容量32kBのPIC上で動かすのは無理でした。
  • が、その元ネタになっているほうのBASINT.cは14kB程度(Cソース、exeファイルともに)ですので、32kBのFlashに入ります。


  • 実際に動かしてみると、BASIC INTERPRETER自体の占有ファームウェアサイズはmips16で4kB程度、MIPS32でコンパイルしても8kB程度に収まっています。
  • putch(int c)相当の関数さえあれば動作しますので、PIC32MXに限らず他のマイコンへの移植も簡単です。

ダウンロード

ファームウェアソース:mxvga.zip


ライセンス

  • basintのほうはオリジナルサイトを見てもライセンスはunknownとなっています。
  • tinyBasic 2のほうはGPL v2でした。
  • 投げ遣りですが、この版も、GPL v2で宜しいのではないかと考えております。


ソースコードをぱっと見たところでは、

  • 手書きのパーサで、あんまり宜しくない。
  • 処理もかなり不備がある

ように見受けられますので、たぶん、読者の貴方が1から書き直したほうがずっと良いBASICが作れると 思います。

  • test.bat を起動すると、MinGWのgccを使って、Win32コマンドライン版の実行を行います。
  • PIC32MXへの移植では、printf,scanf(現状はダミー)が必要になった程度で、ほぼ手直しなしで動いてしまいました。
  • BASICソースはC言語中に文字列で格納してありますが、改行コードが
  • オリジナル版では CR+LFのところを LFだけでも動作するように改造するのに結構手間取りました。(その必要性は薄かったのですが)


  • また、tinyBasic2の素数プログラムを走らせようとすると、basintのBASIC文法実装が足りていなかったので文法エラーで実行できませんでした。
  • そこで、いくつかのステートメント処理はtinyBasic2からバックポートさせて頂きました。





課題

  • BASIC動作中は画面にジッターが出ます。 --- ジッターは対策しました。
    • 終了するとジッターは消えます。
  • 原因は究明中ですが、よくわかりません。 --- 実はよくわかっていません。割り込み応答が2〜3クロック後、というマニュアルの記述が気になるところです。遅延スロット?それともmips16/MISP32遷移?
    • MIPS32ビルドは試しましたが、症状は変わりませんでした。
  • div,mul命令を使わないようにしてみたのですが、直りませんでした。
    • 乗除命令を使わずに32bit div / mul を書きました。今は使っていません。


答えは、2クロック命令だそうです。(kats_me様、ありがとうございます)

  • RISCなのに2クロックって、知りませんでした。単なるストールとは違うのかな?


  • 単体BASICコンピュータとして完結させるためには、キーボード入力部分(PS/2かな?)やセーブロード部分(SDカードかな?) などの増設の必要性がありそうです。



応用

  • 単体BASICコンピュータ
  • basint.c のみを再利用して、別のマイコン(ARMとか)へ移植。
  • basint.c を拡張。というかFlash容量さえあれば、tinyBasic2をそのまま利用でもOK.
  • RS-232C TTY端末。例えば、Linuxのコンソールに使う。(玄箱のttyコンソールとか)
  • basic以外の言語を動かす(ForthとかLuaとか)


  • CG-ROMを適当に拡張して、SD-Card上の漢字dotを使用して漢字混じり表示。
    • 1画面に出せる漢字の種類(個数)に上限を設ければ可能。





USB経由のBASICコンピュータを目指す

  • KeyBoardやsdcardを繋げるのが面倒なので、とりあえずUSB-CDCデバイスまで取り込んで、
  • WindowsPCからBASICが使えるようにしようという試みです。

(仮)ダウンロード

USB入りファームウェアソース:cdcbasic.zip

  • 現状のものは、USB-CDCデバイスとbasicインタプリタを同居させてはいますが、
  • basicインタプリタはまだ対話型に拡張されておりません。
  • とりあえずprime_vanilla.cを実行したあとは、Teratermなどから、VGA画面にエコーバックのみ行なえます。