chip-8 assemblerをc8a用にカスタマイズしたc8aasm、ひっそり公開しました。
Raspberry Piで動くc8aもレポジトリにひっそり公開しておきました。
まだ、stdoutにputcharする機能しか実装していないのでほんとに「動く」ってだけですが。
もうメーカーのOSに振りまわされるのはごめんだ!
Arduinoやその他マイコンを小さいコンピュータとして使いたい。
何か良い方法がないか、というところから始まったプロジェクト。
Chip-8という古いバイナリインタプリタを元にして、単体のコンピュータとして使えるように調整したもの。
Chip-8 subset for Arduino、略してc8aです。
名前はとりあえず仮です。(何か薬関係と名前がかぶってるみたい)
とりあえずgitのレポジトリ。
※Chip-8を元にしていますが、Chip-8とは一部命令が異なりますのでエミュレータとしては使えません。
また、あくまでインタプリタですので速度を要求するゲームなどには向かないとおもいます。
(とはいえChip-8の実機動作より速いので使い様によってはゲームも全然イケるとおもいますが、ArduboyとかGamebuinoみたいなのを期待するとあーあ、ってなっちゃいますよっていう意味で無理かなという話で。もごもご)
マイコン上で言語が動くとかいうものはたくさんあります、
c8aが他と何が違うのかという点について説明します。
ごく一部を除いて、マイコン上で言語を動かしたりする環境というのはMCUのもつSRAM領域を利用して動作します、それに対してc8aは外付けメモリにバイナリコードを読み込み動作します。現在の仕様では64Kbyteまで対応しています。
またSDカードからメモリへバイナリをロードして動作しますので、動作中のプログラムの変更や、部分的なデータの変更、また自己プログラミングなど様々な事が可能になります。
解る方は8bitコンピュータ(マイコンと呼ばれていたアレです)を思い浮かべていただければ大体どんな感じかわかってもらえるのではないでしょうか。
もともとのchip-8がそうであったように、仮想環境ですのでプラットフォームを選びません。
現在はArduino用のみを開発していますが将来的に別のプラットフォームへの対応も視野にいれています。
ハードウェアを最小限にしているのも狙いがあってのことです。
現在c8aに要求されるハードウェアはMCU本体とSDカード、そして外付けのSPI-SRAMのみです。
MCUによっては十分な内蔵メモリが搭載されていて外付けSRAMが必要ないかもしれません。
ディスプレイや入力装置を必須にしていないのはどんな使い方でも出来るようにという考えからです。
(そのせいで開発が難航しているのは事実ですが)
ArduboyやGamebuino、Ichigo Jamなどのようにハードウェアを固定化してしまえば簡単なのでしょうがそれでは面白くないし自由度も減ってしまう。
ハードウェアを後付けしてもバイナリを書けば対応できるようにする。
そんなコンセプトで開発しています。
とてもシンプルなハードウェアで、レベル変換に74HC4050を使い、SPIのSRAMとSDカードソケットを追加したというもの。マイクロファンのSD/RAM-PLUSというシールドを使えばCSを変更するだけで使えそう。
回路図だと分かり辛いので。
SD CSがD9
SRAM CSがD10
です。
SDやSRAMからのMISOがレベル変換通っていないのは、3v3の電圧なのでそのまま5vのArduinoにINPUTしてもHIGH,LOWを判断できるからで、気になる方は74HC4050ではなく双方向レベル変換などを使えば良いとおもいます。
SDやSRAMの各端子へ5vが流れ込むことはないはずなので基本的にこれで大丈夫です。
準備中。