shippoiincho / TinyBASIC

Standalone TinyBASIC for CH32V003

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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


Languages

Language:C 90.0%Language:Makefile 9.4%Language:Assembly 0.6%