あなたCPUなんか創ってどうするのかしら?! 第4章 第4節
~あんたCPUなんか創ってどうするのよ?! Vol.4~
2018/10/8
技術書典5 け39
第4章 第4節 ラーメンタイマー
RAMEN: | ; ラーメン | |||||
040: | 60 | MOV | A | 0 | ; 3分LOOP | |
041: | A1 | MOV | [1] | A | ||
RAMEN1: | ||||||
042: | 60 | MOV | A | 0 | ; 1分LOOP | |
043: | A2 | MOV | [2] | A | ||
RAMEN2: | ||||||
044: | 60 | MOV | A | 0 | ; 10秒LOOP | |
045: | A3 | MOV | [3] | A | ||
RAMEN3: | ||||||
046: | 68 | MOV | A | 8 | ; 1秒LOOP | |
RAMEN4: | ||||||
047: | A4 | MOV | [4] | A | ; 秒を保存 | |
048: | AE | MOV | [0xE] | A | ; ハイフン | |
049: | 72 | MOV | B | 2 | ||
04A: | BF | MOV | [0xF] | B | ||
04B: | 42 | MOV | A | [2] | ; 10秒表示 | |
04C: | AE | MOV | [0xE] | A | ||
04D: | 70 | MOV | B | 0 | ||
04E: | BF | MOV | [0xF] | B | ||
04F: | 41 | MOV | A | [1] | ; 分表示 | |
050: | AE | MOV | [0xE] | A | ||
051: | 71 | MOV | B | 1 | ||
052: | BF | MOV | [0xF] | B | ||
053: | 66 | MOV | A | 6 | ; 0.5秒LOOP | |
054: | 7F | MOV | B | 0xF | ||
RAMEN5: | ||||||
055: | 31 | ADD | B | 1 | ||
056: | E5 | JNC | RAMEN5 | |||
057: | 05 | |||||
058: | 21 | ADD | A | 1 | ||
059: | E5 | JNC | RAMEN5 | ; 0.5秒END | ||
05A: | 05 | |||||
05B: | 44 | MOV | A | [4] | ; 点滅 | |
05C: | 28 | ADD | A | 8 | ||
05D: | E1 | JNC | RAMEN6 | |||
05E: | 06 | |||||
05F: | F7 | JMP | RAMEN4 | ; 1秒END | ||
060: | 04 | |||||
RAMEN6: | ||||||
061: | 43 | MOV | A | [3] | ||
062: | 21 | ADD | A | 1 | ||
063: | A3 | MOV | [3] | A | ; 10秒分岐 | |
064: | 26 | SUB | A | 10 | ||
065: | E6 | JNC | RAMEN3 | ; 10秒END | ||
066: | 04 | |||||
067: | 42 | MOV | A | [2] | ||
068: | 21 | ADD | A | 1 | ||
069: | A2 | MOV | [2] | A | ; 60秒分岐 | |
06A: | 2A | SUB | A | 6 | ||
06B: | E4 | JNC | RAMEN2 | ; 1分END | ||
06C: | 04 | |||||
06D: | 41 | MOV | A | [1] | ||
06E: | 21 | ADD | A | 1 | ||
06F: | A1 | MOV | [1] | A | ; 3分LOOP | |
070: | 2D | SUB | A | 3 | ||
071: | E2 | JNC | RAMEN1 | |||
072: | 04 | |||||
073: | 60 | MOV | A | 0 | ; ハイフン消 | |
074: | AE | MOV | [0xE] | A | ||
075: | 72 | MOV | B | 2 | ||
076: | BF | MOV | [0xF] | B | ||
077: | AF | MOV | [0xF] | A | ; 10秒 | |
078: | 63 | MOV | A | 3 | ; 1分 | |
079: | AE | MOV | [0xE] | A | ||
07A: | 71 | MOV | B | 1 | ||
07B: | BF | MOV | [0xF] | B | ||
07C: | FB | JMP | START | ; 終了 | ||
07D: | 00 |
3分間の時間を計測するタイマーです。
テンキーの1を押した状態で電源ONもしくはリセットで起動します。
TD4EX4にはタイマー機能は無いため、CPUをループさせることで時間を計測しています。そのため正確な時間は計ることが出来ず、おおむね3分のタイマーになっています。
もし正確なタイマーが必要になった場合は、CPUでカウントするのではなく、I/Oポートにタイマー機能を追加するべきですね。
このプログラムにはイミディエイトデータによる減算命令が存在しますが、これは2の補数による加算命令のエイリアスです。
例えば以下の命令は
SUB A, 1 ; A-1
以下の命令に置き換えられます。
ADD A, 0xF ; A+0xF
詳しくは第1章第8節をご覧ください。