とりあえずコードを書いて見る。


とりあえず書いて見た。
結局アセンブリで書いてアセンブラに掛けてる俺ガイルw
コメントの英文が適当だけど気にしない〜。
つかオペコードのフルスペル教えてくれよと。
その方が暗記し易いのに。


INCRVIEW.ASM

INIT:	TIA	0	;Transfer Areg (INIT Areg)
	TIY	0	;Transfer Yreg (INIT Yreg)
LOOP:	CY		;Change value Areg to Yreg
	AIA	1	;Add Areg + 1 (INCR)
	AO		;Output 7seg LED to Areg
	CY		;Change value Areg to Yreg
	CAL TIMR		;CALL TIMER (time wait) 0.1 * (+ Areg value) Seq
	JUMP	LOOP	;goto "LOOP:"

んで実際打ち込む命令コードはこれ。


INCRVIEW.BIN

アドレス	命令	命令コード 
00	TIA	8 
01	<0>	0 
02	TIY	A 
03	<0>	0 
04	CY	3 
05	AIA	9 
06	<1>	1 
07	AO	1 
08	CY	3 
09	CAL	E 
0A	_TIMR	C 
0B	JUMP	F 
0C	<0>	0 
0D	<4>	4 


アセンブラは以下のPHPスクリプトを利用。
Gakken GMC-4 Assembler
http://www.musashinodenpa.com/misc/GMC4/


ラベルは、ラベル単一行ってのはダメで
上記ASMソースみたく
ラベルの次にはそのラベルのアドレスに来る命令も同一行に含めなくてはダメな様子。
";"以降のコメントも一緒にコードとして処理されてしまうので
アセンブル掛けるときは消しとくべし。


動作自体は単純で
0.1秒周期で1〜Fまで順に表示してって
桁超えたらまた0に戻っての繰り返し。


AレジスタとYレジスタわざわざ入れ替えて増分してるのは
CAL TIMR が 0.1秒 * (Aレジスタ値 + 1) となってる為。
Aレジスタ値のままでウエイト掛けると段々ウエイト時間が長くなってしまうので
レジスタスワップしてそれを回避とか。