学研の4ビットマイコン GMC-4 で、テトリス的なブロックを1行揃えて消すゲームを作ってみた。
(「行」は横向きの並びを意味する)
遊び方
2進LEDの0の側を下にして構える。
プログラムを実行すると、4個セットのブロックが上から落ちてくる。
「1」キーを押すと、ブロックの落下を速くすることができる。
「0」キーを押すと、ブロックを即座に一番下まで落とすことができる。
ある行の枠が全てブロックで埋まると、その行のブロックは消え、上の行のブロックがその分下がる。
プログラム
以下のプログラムは、MikeAssembler でアセンブルできる。
target gmc4
; 消去演出の準備
TIY 0xF
TIA 0
AM
main_loop:
; ブロックの位置を初期化
TIY 6
drop_loop:
; ブロックが底にあってさらに落ちようとしたら、消去へ
AIY 1
JUMP erase
; ブロックを1段落とす
AIY -1
CAL SETR
; 上部に (消灯させるべき) 空きがあるかを判定する
AIY 4 + 0x10 - 7
JUMP no_off
AIY 7
CAL RSTR
AIY -7
no_off:
; 判定用の加算を相殺、さらに1段落とす
AIY -4 + 7 - 1
; 落下間のウェイト
CH
TIY 9
wait_loop:
TIA 0
CAL TIMR
KA
JUMP no_key
CIA 0
JUMP no_hard_drop
; 0 : ハードドロップ (即消去)
erase:
; 下4個を点滅させる
TIA 2
erase_loop:
CH
TIY 0xE
TIA 0xF
AM
CAL DSPR
TIA 0
CAL TIMR
AM
CAL DSPR
CAL TIMR
CH
AIA -1
JUMP erase_loop
JUMP main_loop
no_hard_drop:
CIA 1
JUMP no_key
; 1 : 落下加速
TIY 0
no_key:
AIY -1
JUMP wait_loop
CH
JUMP drop_loop
以下は、このプログラムの機械語表現である。
| 0 1 2 3 4 5 6 7 8 9 A B C D E F
--+-----------------------------------
0 | A F 8 0 4 A 6 B 1 F 2 D B F E 1
1 | B D F 1 B B 7 E 2 B 9 B 2 2 A 9
2 | 8 0 E C 0 F 5 0 C 0 F 4 9 8 2 2
3 | A E 8 F 4 E D 8 0 E C 4 E D E C
4 | 2 9 F F 2 F F 0 5 C 1 F 5 0 A 0
5 | B F F 2 0 2 F 0 7
実行結果
このゲームのフィールドは1列しか無いため、ブロックが底に着くと必ず1行揃い、必ず全てのブロックが消える。
(仕様です)