学研の4ビットマイコン GMC-4 で、
「1、2、3、4、5、6、7、8、2、2、3、4、5、6、7、8、3、2、3、4、5、6、7、8、…」
のようなカウントをしてみた。
プログラム
以下のプログラムは、MikeAssembler でアセンブルできる。
target gmc4
TIA 1
AO
outer_loop:
CH
TIA 1
inner_loop:
CY
TIA 2
CAL SHTS
CAL TIMR
CY
AIA 1 + 0x10 - 9
JUMP inner_loop_end
AIA -(0x10 - 9)
AO
JUMP inner_loop
inner_loop_end:
CH
AIA 1
AO
JUMP outer_loop
以下は、このプログラムの機械語表現である。
| 0 1 2 3 4 5 6 7 8 9 A B C D E F
--+-----------------------------------
0 | 8 1 1 2 8 1 3 8 2 E 9 E C 3 9 8
1 | F 1 9 9 9 1 F 0 6 2 9 1 1 F 0 3
解説
outer_loop:
の直後の CH
命令で、各8個のかたまりの最初の数字をBレジスタに退避する。
inner_loop:
の最初は、かたまりごとに増えていくカウントが AO
命令により表示された状態で回る。
カウントとして短い音を鳴らして時間を置いた後、以下の処理を行う。
- かたまり内のカウントに1を加え、同時に
0x10 - 9
を加えてカウントが9(以上)になったかをチェックする。 - カウントが9(以上)の場合、
inner_loop
を抜ける。 - チェック用に加えた
0x10 - 9
を引き、相殺する。 - 新しいカウントを
AO
命令により表示する。
inner_loop
から抜けた後 (inner_loop_end:
) は、退避していたかたまりの最初の数字を CH
命令でAレジスタに戻し、さらに1を加えて AO
命令により表示する。