0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GMC-4 / ORANGE-4Advent Calendar 2022

Day 22

【GMC-4】ブロックを1行揃えて消すゲーム (笑)

Posted at

学研の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行揃い、必ず全てのブロックが消える。
(仕様です)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?