あなたCPUなんか創ってどうするのかしら?! 第4章 第2節
~あんたCPUなんか創ってどうするのよ?! Vol.4~
2018/10/8
技術書典5 け39
第4章 第2節 初期化およびデモンストレーションの切り替え
TD4EX4 | 1KHz | ||||||
INIT: | |||||||
000: | 60 | MOV | A | 0 | ; 全キー確認 | ||
001: | AE | MOV | [0xE] | A | |||
002: | 7E | MOV | B | 0xE | |||
003: | 9E | SUB | B | [0xE] | ; 入力無し | ||
004: | E0 | JNC | CALC2 | ; 2桁電卓 | |||
005: | 20 | ||||||
006: | AF | MOV | [0xF] | A | ; 入力有 | ||
007: | 61 | MOV | A | 1 | ; ゼロ表示 | ||
008: | AF | MOV | [0xF] | A | |||
009: | 62 | MOV | A | 2 | |||
00A: | AF | MOV | [0xF] | A | |||
START: | |||||||
00B: | 60 | MOV | A | 0 | |||
00C: | A0 | MOV | [0] | A | |||
00D: | F0 | JMP | KBDIN | ; キー入力 | |||
00E: | 08 | ||||||
SELECT: | |||||||
00F: | 2F | SUB | A | 1 | ; 0キー | ||
010: | E0 | JNC | CNT99 | ; 0→99 | |||
011: | 02 | ||||||
012: | 2F | SUB | A | 1 | ; 1キー | ||
013: | E0 | JNC | RAMEN | ; ラーメン | |||
014: | 04 | ||||||
015: | 2F | SUB | A | 1 | ; 2キー | ||
016: | E0 | JNC | KBDTST | ; 入力テスト | |||
017: | 12 | ||||||
018: | 2F | SUB | A | 1 | ; 3キー | ||
019: | E0 | JNC | CALC1 | ; 1桁電卓 | |||
01A: | 18 | ||||||
01B: | 2F | SUB | A | 1 | ; 4キー | ||
01C: | E0 | JNC | CALC2 | ; 2桁電卓 | |||
01D: | 20 | ||||||
01E: | FB | JMP | START | ; 入力待機 | |||
01F: | 00 | ; 終了 |
電源ONもしくはリセットされるとTD4EX4はROMのアドレスの0番地からプログラムの実行を開始します。これはTD4と同じです。
実行を開始するとすぐにテンキーの状態を確認し、何のキーも押されていなければ2桁電卓へと分岐します。何かのキーが押されている場合はKBDINという疑似サブルーチンを実行し、キーの判別を行います。これについては後ほど説明します。
いきなりKBDINによるキーの判別をせずに、最初にキー入力の有無を確認している理由は、KBDINが何かのキーが押されるまで戻ってこない仕様になっているからです。
KBDINから戻ると、Aレジスタに押されているキーの数値が格納されています。従ってAレジスタの内容をチェックして実行すべきデモンストレーション・プログラムへ分岐します。
LEDの初期化は個々のデモンストレーション・プログラムに任せています。ただし何らかの原因でTD4EX4が正常動作しなかった場合に、初期化ルーチンまでは動作していることを示す目的で0を2個表示するようにしてあります。