|
前回の、4ビットマイコンGMC-4用、『数字読み取りゲーム(仮称)』ver1.0の簡単なプログラム解説です。
【プログラム ver1.0】
※アドレス、命令コード、命令記号の順
00: E CAL RSTO
01: 0
02: 8 TIA <A>
03: A
04: E CAL TIMR
05: C
06: A TIY <F>
07: F
08: 5 MA
09: B AIY <1>
0A: 1
0B: 6 M+
0C: 4 AM
0D: 9 AIA <6>
0E: 6
0F: F JUMP <0C>
10: 0
11: C
12: D CIY <F>
13: F
14: F JUMP <08>
15: 0
16: 8
17: A TIY <0>
18: 0
19: 5 MA
1A: 1 AO
1B: 8 TIA <3>
1C: 3
1D: E CAL
1E: C TIMR
1F: B AIY <1>
20: 1
21: D CIY <7>
22: 7
23: F JUMP <19>
24: 1
25: 9
26: E CAL RSTO
27: 0
28: A TIY <0>
29: 0
2A: 0 KA
2B: F JUMP <31>
2C: 3
2D: 1
2E: F JUMP <2A>
2F: 2
30: A
31: 0 KA
32: F JUMP <31>
33: 3
34: 1
35: 1 AO
36: 7 M-
37: C CIA <0>
38: 0
39: F JUMP <48>
3A: 4
3B: 8
3C: B AIY <1>
3D: 1
3E: D CIY <7>
3F: 7
40: F JUMP <2A>
41: 2
42: A
43: E CAL ENDS
44: 7
45: F JUMP <00>
46: 0
47: 0
48: E CAL SHTS
49: 9
4A: F JUMP <00>
4B: 0
4C: 0
◆00〜05
ゲームが始まる前に数字LEDを消灯し、約1秒の間をあけます。
◆06〜16
乱数っぽい数を作ります。
アドレス50〜5Fに格納されている各数値を次のアドレスに格納されている数値に足しこんで、新しい数を作っています。(※アドレス50には4Fではなく5Fに格納されている数値を足しこんている)
できた数値を0〜9の範囲にまるめるため、6を足し桁あふれが生じるかチェックします。
桁あふれが生じたときは、数値がA〜Fだったということになるので、6を足すことでA〜F以外に変更された数字を再度格納しなおします。
この処理を、アドレス50〜5Fまで16桁分行っています。
◆17〜25
アドレス50〜56までの7桁分の数値を順に表示します。
アドレス1Cの値は次の数字を表示するまでの時間です(1Cの値+1 ×0.1秒)
◆26〜47
数字LEDを消灯し、プレイヤーのキー入力待ちに移行します。
ここでは、キーが押されていないのを確認してから、キー入力待ち処理に移行するようにしています。
ここの処理は7回ループされるため、この処理を入れておかないと、1桁目のキーを離すより早く2桁目以降のキー入力までもチェックされてしまうからです。
数値の正否チェック方法はアドレス50〜に格納されている数値からキー入力された数値を引いた値が0になるかどうかで判断します。
違っていればアドレス48以降のエラー処理に飛んだ後、プログラムの先頭に戻ります。
7桁すべて合っていた場合は効果音を鳴らして、プログラムの先頭に戻ります。
◆48〜4C
間違った時の処理
【感想】
今回、初めてのプログラミングでしたが、命令の少なさと、メモリの少なさに苦労しました。
レジスタは、A、B、Y、Z、A'、B'、Y',Z'とありますが、AとBの値を入れ替える「CH命令」は、同時にYとZをも入れ替えてしまうので使いどころがよくわからず、A、B、Y、Zと、A'、B'、Y',Z'の値をすべて入れ替える「CAL_CHNG命令」にいたってはその存在意義すらわからない始末。結局レジスタはAとYしか使っていません。
プログラムサイズも4Fまでに収めるのに苦労しましたが、アドレス50〜5Fもプログラム領域として使用可能のようですね。
【ゲームデザイン】
最初は『戦艦ヤマト砲撃ゲーム』という名前で作り出し、「味方観測機より敵艦の座標が知らされるので、その位置を正確に砲撃する。失敗すると、その間に逆に敵からの攻撃を受けてしまう」というストーリーだったのですが、それならば7桁全部入力し終わった後で、命中!ハズレ!の結果を出すようにしないと違和感があるよなぁ・・・と思えてき、結局、砲撃のストーリーは外して単に『数字読み取りゲーム(仮称)』になってしまいました(笑)
次はあるかなぁ〜??
|