豊四季 Tiny BASICを CH32V003 単体で動くようにしたものです。
フリーエリアとしては 512バイトを確保しています。
電源さえ準備できれば、ほかにパソコンなどは必要ありません。自分はマイコンは 3.3V 動作で、キーボード用に 5V をつないでいますが、
CH32V003 は今どきのマイコンとしては珍しく 5V 動作に対応しているので、すべて 5V で動かした方が簡単かもしれません。
単体で使うために SAVE と LOAD コマンドが追加されています。内蔵フラッシュの末尾 512 バイトに BASIC のプログラムを書き込みます。
なにも SAVE されていないときに LOAD を実行するとゴミがロードされます。
画面出力は NTSC ビデオ出力を使っています。RAMの容量の関係で 16x12 文字という窮屈なものになっています。
接続は、いつものように PC4 とPC6 を使います。
開発ボードではなく、マイコン単体で使う場合は外部クロックが必要です。
(内部クロックでは画面が揺れます)
SPI を使用している関係で 8pin 版ではうごきません。
キー入力は 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