コンセプト
システム全体の階層構造はこのようになる。
仮想マシンDeM |
WOBモニタ |
Arduino互換プラットフォーム |
WOBハードウェア |
仮想マシン DeM
- 単純に”Decimal Machine”(10進数マシン)からの命名。「デム」と読む。
- 初心者にも「分かりやすく」、「やさしく」、かつ「できるだけ普通から外れない」ことを目指す。
- プログラム空間、データ空間、I/O空間はひと続きのリニアマッピングとする。アドレス上位で区別する。
- バイト(10進で2桁)アドレス。asや一般のアセンブラがそうだから。
- アドレス空間は全体で4桁。
- 命令長は1バイト(2桁)。命令によって複数バイトが後続する広義の可変長命令。*1
- レジスタは4バイト(8桁)。
- 演算専用レジスタ(アキュムレータ)1本。汎用レジスタは10本とし、全てインデックスレジスタとして機能する。除算命令を除いて演算には用いられない。*2
- 既存のアセンブラやリンカ(as, ld)を流用しやすくするため、これの流儀にできるだけ沿うようにする。あまりエキセントリックな仕様にすると嫌がられるという側面もある。*3
*1 2バイト固定長命令のほうがロジックが簡単になるが、桁数が増えると初心者に複雑さを感じさせてしまうし、PCが2個ずつ増えていくのも分かりづらいと思うので。
*2 汎用レジスタ+直交命令セットだとハード的な仕組みが複雑になり、初心者がかえって混乱するのではという推測から。汎用レジスタはポインタを含む変数として使用し、いかなる演算もAに移して行うと割り切ることで概念を理解しやすくなると思う。
*3 GNU Assemblerを流用しようとしたのだが、アドレスの演算が加減算しかできない(アドレスを上下バイトに分割するなどができない)こと、コード領域が バイト単位ではないことなどから利用を断念。結局(GNUではない)Atmel製AVRアセンブラAvrasm2を使うことにした。
WOBモニタ
- いわゆる「ROMモニタ」のこと。現代のパソコンではWindowsに相当するソフトウェアと考えれば初心者にはわかりやすいか。厳密にはROM BIOSのほうが近いという指摘はあるだろうけど。それらのうんと原始的なもの。
- ユーザインターフェースにより、ユーザがDeMプログラムを書き込んだり、実行したりする。
- ユーザインターフェースはキーボード、LEDディスプレイ、スピーカ。
- Arduinoの開発環境を使って作成する。