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.

学研の4ビットマイコン GMC-4 で、LEDを以下のように点灯させる。

  1. 左から右に1個流れていく。
  2. 右端に着いたら、そこで止まってまた新しい光が左から来る。
  3. 新しい光は既にある光の1個前で止まる。さらに新しい光が左から来る。
  4. 全ての枠が埋まったら、右の光から順に1個ずつ右にはけていく。

このようなパターンで光っている自動販売機があったかなあ。

プログラム

以下のプログラムは、MikeAssembler でアセンブルできる。

target gmc4

start:
	; メモリに右端の位置を記録する
	TIA 0
	TIY 4 ; 記録するメモリの位置 兼 1回の待ち時間
	AM
	CY
	CAL TIMR
loop1_1:
	; 左端を点灯する
	TIY 6
	CAL SETR
loop1_2:
	CAL TIMR
	; 右端か判定する
	CY
	M-
	CIA 0
	JUMP loop1_continue
	; 右端に着いたので、右端を1個左にして左端から再開する
	TIA 1
	M+
	AM
	CY
	CIY 7
	JUMP loop1_1
	; 右端が一番左の時まで終わったので、後半へ
	; ここにJUMP命令を置いて後半に飛ばすかわりに、ここに直接後半のコードを書く
	; メモリに左端の位置を記録する
	CY
	TIA 0
	AM
	CY
loop2:
	CAL TIMR
	; 消灯し、それが右端かを判定する
	CAL RSTR
	AIY -1
	JUMP loop2_continue
	; 右端だったので、左端を1個左にして左端から再開する
	CY
	TIA 1
	M+
	AM
	CY
	CIY 7
	JUMP loop2
	; 左端が一番左の時まで終わったので、前半へ
	CAL TIMR
	JUMP start
loop2_continue:
	; 右端じゃなかったので、点灯する位置を1個右にずらす
	CAL SETR
	JUMP loop2

	; 前半のコードの続き
loop1_continue:
	M-
	CY
	; 点灯する位置を右に1個ずらす
	CAL RSTR
	AIY -1
	CAL SETR
	JUMP loop1_2

以下は、このプログラムの機械語表現である。

  | 0 1 2 3  4 5 6 7  8 9 A B  C D E F
--+-----------------------------------
0 | 8 0 A 4  4 3 E C  A 6 E 1  E C 3 7
1 | C 0 F 4  2 8 1 6  4 3 D 7  F 0 8 3
2 | 8 0 4 3  E C E 2  B F F 3  D 3 8 1
3 | 6 4 3 D  7 F 2 4  E C F 0  0 E 1 F
4 | 2 4 7 3  E 2 B F  E 1 F 0  C

実行結果

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?