LoginSignup
1
0

More than 1 year has passed since last update.

学研の4ビットマイコン GMC-4 で、10進数で表示するカウンタを作ってみた。

仕様

  • 799までカウント可能。超えた場合の動作は保証しない。
  • 2進LEDの上位に100の位、2進LEDの下位に10の位、7セグメントLEDに1の位を表示する。
  • Fキーを押すとカウント値をリセットする(0にする)。
  • F以外の数字キーを押すとカウントを進める(カウント値に1を足す)。

実装方針

  • データメモリの0xD番地に1の位を、0xE番地に10の位を、0xF番地に100の位を保存する。
    • これにより、CAL DSPR 命令で10の位と100の位をそのまま表示できる。
  • カウントアップ時、まず7を足す。
    • キャリーがあった場合、元の値が9(以上)であったことを意味するので、0を格納して桁上り処理を行う。
    • キャリーが無かった場合、6を引いて1を足した状態にし、結果を格納する。

実装

以下のコードは、MikeAssemblerでアセンブルできる。

target gmc4

	; 2進LED上位 / 0xF番地 : 100の位
	; 2進LED下位 / 0xE番地: 10の位
	; 7セグメントLED / 0xD番地 : 1の位

START:
	; 初期化
	TIA 0
	TIY 0xD
	AM
	TIY 0xE
	AM
	TIY 0xF
	AM
SHOW_DATA:
	; カウント値の表示
	TIY 0xD
	MA
	AO
	CAL DSPR
	; キーが離されるのを待つ
KEY_RELEASE_WAIT:
	KA
	JUMP KEY_INPUT_WAIT
	JUMP KEY_RELEASE_WAIT
	; キー入力を待つ
KEY_INPUT_WAIT:
	KA
	JUMP KEY_INPUT_WAIT
	; Fが入力された場合は、カウントをリセットする
	CIA 0xF
	JUMP NOT_RESET
	JUMP START
NOT_RESET:
	; カウントアップ処理
	TIY 0xD
	MA
	AIA 7
	JUMP CARRY_10
	AIA -6
	AM
	JUMP SHOW_DATA
CARRY_10:
	TIA 0
	AM
	TIY 0xE
	MA
	AIA 7
	JUMP CARRY_100
	AIA -6
	AM
	JUMP SHOW_DATA
CARRY_100:
	TIA 0
	AM
	TIY 0xF
	MA
	AIA 1
	AM
	JUMP SHOW_DATA

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

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

実行結果

カウントとリセットができている。

1
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
1
0