「ほっ」と。キャンペーン

GMC-4 4ビット足し算器

4ビット足し算器

4ビットの足し算を計算するプログラム。二つの数を16進キーボードから入力すると答えが表示される。

メイン
00 8 3 (TIA 3) #サブルーチンコールから戻るジャンプ命令のある下位アドレス(53番地にジャンプ命令がある。)
02 F 2 0 (JUMP 2 0) #サブルーチンコール。
05 A F (TIY F) #データ用メモリ(5F番地)をYレジスタで指定。
07 4 (AM) #Aレジスタのデータをメモリ(5F番地に)代入。
08 8 6 (TIA 6) #サブルーチンからのリターンのためのジャンプ命令を指定(56番地)。
0A F 2 0 (JUMP 2 0) #サブルーチンコール
0D A F (TIY F) #データ用メモリ(5F番地)を指定。さっき入力した値。
0F 6 (M+) #Aレジスタの値に5F番地のメモリの値を加算する。
10 1 (AO) #Aレジスタの値を表示。
11 E 7 (CAL ENDS) #エンド音を鳴らす。
13 F 0 0 (JUMP 0 0) #メインルーチンの最初にジャンプする。無限ループになる。

キー入力サブルーチン
20 A 2 (TIY 2) #ポインタの下位アドレスを指示。
22 4 (AM) #ポインタの下位アドレスにメインルーチンからAレジスタで渡された値をセット。
23 0 (KA) #キースキャン
24 F 2 3 (JUMP 2 3) #キー入力待ちのループへのジャンプ
27 1 (AO) #入力された数字を表示
28 E 9 (CALL SHTS) #キー入力音
2A F 5 0 (JUMP 5 0) #サブルーチンからリターン

ジャンプテーブル
50 F 5 0 (JUMP 5 0) #戻りアドレスへジャンプするためのポインタ。ジャンプ先はプログラムで書き換えられる。
53 F 0 5 (JUMP 0 5) #1回目のサブルーチン呼び出しの戻りアドレス。
56 F 0 D (JUMP 0 D) #2回目のサブルーチン呼び出しの戻りアドレス。

ビープ音がうるさいが、キー入力の時のチャタリング対策(なつかしい!)。また、プログラムの実行中にプログラムを書き換えるなど、化石になった技法が使えるのがうれしい。ひさしぶりにマイコンを堪能した。

このプログラムはデータのメモリへの読み書きと、アキュームレータとの演算の使用例が目的だ。GMC-4ではメモリの読み書きはYレジスタに入れたアドレスの下位ニブルで間接アドレッシングする読み書きだけだ。このため、プログラムで読み書き可能な領域は50~5F番地のみに制限されている。プログラムを置けるのは00~4F番地の80ニブル。

また、スタック操作やプログラムカウンタを操作する命令はないので、サブルーチンコールは使えない。アキュームレータのビット論理計算ができないので、マスクによるフラグのチェックなどはできなさそう。

機械語の仕様としては変則的だが、雰囲気を味わうことはできるし、いろいろな作業をさせることができる。また、どれくらいの規模の言語仕様であれば、普通にプログラムできるかという問題は興味深い。ARMのCPUのトランジスタは30000個くらいというから、言語の仕様が小さければICは作りやすくなる。プリンタでパーソナルICが作れる時代になれば、カスタムICを自分で作れるようになるので部品の組み立ての工程が激減する。また、究極の少量多品種の製造ができる。そういう時代になったら、小さい仕様で集積度の低いCPUパターンが活躍するかもしれない。

いずれにしてもGMC-4は触っているだけで楽しい。
[PR]
by tnomura9 | 2009-07-12 21:55 | 話のネタ | Comments(0)
<< GMC-4 のビット操作 GMC-4 でサブルーチンを使う >>