とりあえず書いて見た。
結局アセンブリで書いてアセンブラに掛けてる俺ガイル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レジスタ値のままでウエイト掛けると段々ウエイト時間が長くなってしまうので
レジスタ値スワップしてそれを回避とか。