あなた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個表示するようにしてあります。