あなたCPUなんか創ってどうするのかしら?! 第4章 第4節

~あんたCPUなんか創ってどうするのよ?! Vol.4~

2018/10/8
技術書典5 け39

第4章 第4節 ラーメンタイマー

 RAMEN:   ; ラーメン
040:60 MOVA0; 3分LOOP
041:A1 MOV[1]A
 RAMEN1:
042:60 MOVA0; 1分LOOP
043:A2 MOV[2]A
 RAMEN2:
044:60 MOVA0; 10秒LOOP
045:A3 MOV[3]A
 RAMEN3:
046:68 MOVA8; 1秒LOOP
 RAMEN4:
047:A4 MOV[4]A; 秒を保存
048:AE MOV[0xE]A; ハイフン
049:72 MOVB2
04A:BF MOV[0xF]B
04B:42 MOVA[2]; 10秒表示
04C:AE MOV[0xE]A
04D:70 MOVB0
04E:BF MOV[0xF]B
04F:41 MOVA[1]; 分表示
050:AE MOV[0xE]A
051:71 MOVB1
052:BF MOV[0xF]B
053:66 MOVA6; 0.5秒LOOP
054:7F MOVB0xF
 RAMEN5:
055:31 ADDB1
056:E5 JNCRAMEN5
057:05
058:21 ADDA1
059:E5 JNCRAMEN5 ; 0.5秒END
05A:05 
05B:44 MOVA[4]; 点滅
05C:28 ADDA8
05D:E1 JNCRAMEN6
05E:06
05F:F7 JMPRAMEN4 ; 1秒END
060:04 
 RAMEN6:
061:43 MOVA[3]
062:21 ADDA1
063:A3 MOV[3]A; 10秒分岐
064:26 SUBA10
065:E6 JNCRAMEN3 ; 10秒END
066:04 
067:42 MOVA[2]
068:21 ADDA1
069:A2 MOV[2]A; 60秒分岐
06A:2A SUBA6
06B:E4 JNCRAMEN2 ; 1分END
06C:04 
06D:41 MOVA[1]
06E:21 ADDA1
06F:A1 MOV[1]A; 3分LOOP
070:2D SUBA3
071:E2 JNCRAMEN1
072:04
073:60 MOVA0; ハイフン消
074:AE MOV[0xE]A
075:72 MOVB2
076:BF MOV[0xF]B
077:AF MOV[0xF]A; 10秒
078:63 MOVA3; 1分
079:AE MOV[0xE]A
07A:71 MOVB1
07B:BF MOV[0xF]B
07C:FB JMPSTART ; 終了
07D:00 

3分間の時間を計測するタイマーです。

テンキーの1を押した状態で電源ONもしくはリセットで起動します。

TD4EX4にはタイマー機能は無いため、CPUをループさせることで時間を計測しています。そのため正確な時間は計ることが出来ず、おおむね3分のタイマーになっています。

もし正確なタイマーが必要になった場合は、CPUでカウントするのではなく、I/Oポートにタイマー機能を追加するべきですね。

このプログラムにはイミディエイトデータによる減算命令が存在しますが、これは2の補数による加算命令のエイリアスです。

例えば以下の命令は
SUB A, 1 ; A-1

以下の命令に置き換えられます。
ADD A, 0xF ; A+0xF

詳しくは第1章第8節をご覧ください。