Skip to content

shippoiincho/TinyBASIC

Repository files navigation

Standalone Toyoshiki Tiny BASIC for CH32V003

豊四季 Tiny BASICを CH32V003 単体で動くようにしたものです。 フリーエリアとしては 512バイトを確保しています。

Screenshot

電源さえ準備できれば、ほかにパソコンなどは必要ありません。自分はマイコンは 3.3V 動作で、キーボード用に 5V をつないでいますが、 CH32V003 は今どきのマイコンとしては珍しく 5V 動作に対応しているので、すべて 5V で動かした方が簡単かもしれません。

単体で使うために SAVE と LOAD コマンドが追加されています。内蔵フラッシュの末尾 512 バイトに BASIC のプログラムを書き込みます。 なにも SAVE されていないときに LOAD を実行するとゴミがロードされます。

画面出力は NTSC ビデオ出力を使っています。RAMの容量の関係で 16x12 文字という窮屈なものになっています。
接続は、いつものように PC4 とPC6 を使います。
開発ボードではなく、マイコン単体で使う場合は外部クロックが必要です。 (内部クロックでは画面が揺れます) SPI を使用している関係で 8pin 版ではうごきません。

Schematic

キー入力は PS/2 キーボードに対応しています。 PC1 を Clock に PC2 を DATA に接続します。(ほかに 5V と GND も) PC1/2 とも 5V トレラントなので、マイコンを 3.3V で動かしていてもそのままつないでます。 (コード中でプルアップに設定しています)

Arduino に PS/2 キーボードを接続してみる で公開されている日本語キーボード対応の Arduino 用ライブラリ(元は PJRC の物?)を改変して使用しています。

解説

ビデオ出力まわりはいつもの通りです。TIM1 で同期信号を生成すると同時に、 HSYNC 周期で割り込みを発生させて SPI を DMA 駆動してドットを描画しています。 今回は画面が荒いので、縦は2ラインごとに同じものを表示しています。

PS/2 キーボードは PC1 の外部入力割り込みで駆動しています。 割り込みの優先度のを画面出力より高くしている関係で、キーボード入力中は画面にノイズが発生します。 逆にするとビットずれが多発するので、仕方なくこうしています。

RAM もフラッシュもほぼ目一杯使っています。BASIC のバッファを動的に確保するようにすれば、フラッシュは空くかな…

make -j8 all 
   text	   data	    bss	    dec	    hex	filename
  13704	    344	   1216	  15264	   3ba0	TinyBASIC.elf

About

Standalone TinyBASIC for CH32V003

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published