標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第368回]

●USB接続パーツもブログでご紹介していただきました

もう何回も紹介させていただいているYT様のブログです。
FIAT500と洗車の日々・・・(http://plaza.rakuten.co.jp/flyback/)

先日お送りしたUSB接続パーツ他について、写真でご紹介していただきました。
発送前に写真を撮らなくちゃ、と思っていながら、気がついたら全部発送してしまっていました。
でもYT様が到着後にこうやってちゃんと写真を撮ってくださいました。
有難うございました。

☆☆☆TK80回路の操作説明の続きです☆☆☆

●MYCPU80(TK80回路)操作説明書 8章  モニタサブルーチン

●1. はじめに

TK80回路のモニタプログラムには、幾つかのサブルーチンが含まれており、この中にはユーザーが利用すると便利なものもあります。
ここではそのようなサブルーチンをリストアップして、簡単な説明を加えました。具体的なプログラム内容については、9章のモニタプログラムリストを参照して下さい。

●2. LED表示

●2.1 セグメント表示バッファとLED表示の関係

LEDに何かを表示させるには、RAM内のセグメント表示バッファ(FFF8〜FFFF)にセグメントデータを書き込みます。セグメント表示バッファはDMA回路によって毎秒数百回読み出され、7セグメント表示回路にラッチされ、自動的にLEDにダイナミック表示されます。
セグメント表示バッファから表示データを読み出してLEDにダイナミック表示するまでのプロセスはハードウェアが機械的に行いますから、ソフトウェアでは単にセグメント表示バッファに表示データを書き込むだけで、そのほかの作業は必要ありません。
セグメント表示バッファとLED表示器の各桁とは、下図のように対応しています。


セグメント表示バッファ内のデータの各ビットはLED表示器1桁のセグメントと下図のように関係しています。対応するビットが1のとき、そのセグメントが点灯します。

たとえば 2 という表示に対応するデータは、a、b、d、e、g=1なので、01011011(5B)になります。
一般的には0〜Fを表示するという使い方になるのですが、セグメント表示バッファはそこに書き込まれたデータのビット情報をそのままLEDのセグメントに置き換えて表示しますから、セグメントで表現できる任意の表示パターンを表示させることができます。
例) Hという文字を表示させるには、b、c、e、f、gを1にする、つまり01110110(76)をセグメント表示バッファに書きます。

●2.2 セグメントデータ変換ルーチン
開始アドレス 01C0
                使用レジスタ A、F、B、C、D、E、H、L
表示用データレジスタ(FFF4〜FFF7)の内容を、16進数からセグメント表示データに変換してセグメント表示バッファ(FFF8〜FFFF)に転送します。
2.1で説明したセグメント表示のプロセスのみを利用して、メモリの値などをLEDに表示させようとすると、表示する各桁ごとに16進数をビットデータに変換しなければなりません。
実際にはその変換は必要不可欠なものなのですが、そのためのプログラムの負担を軽減するために、あらかじめLEDの2桁を表示用データレジスタ1個に割り当てておいて、各表示用レジスタにデータを書き込んだあと、このルーチンをCALLすることで、16進数がセグメント表示データに変換されてLEDに表示されます。
表示用データレジスタがそれぞれ次の内容であったとき、このサブルーチンをCALLすると、LEDには図8-3のように表示されます。

表示用データレジスタ 4 FFF7=CD
表示用データレジスタ 3 FFF6=AB
表示用データレジスタ 2 FFF5=34
表示用データレジスタ 1 FFF4=12

●2.3 アドレスレジスタ、データレジスタ表示ルーチン
開始アドレス 01A1
                使用レジスタ A、F、B、C、D、E、H、L
LED表示を行うメモリアドレスとそのデータや、LOAD、SAVEを行う場合の開始アドレスと終了アドレスなどは、必ずRAMのアドレスレジスタ(FFEE〜FFEF)、データレジスタ(FFEC〜FFED)にまず入れられます。
キーから入力されるデータやADRS SETキーによってLEDのアドレス表示部に表示されたデータは、じつはこの4バイトのレジスタエリアの内容がこの表示ルーチンによって表示されていたのです。
この取扱説明書の前の章で、「アドレス表示部にアドレスをセットする」とか「データ表示部にデータを入れる」などと表現してきましたが、それはその方が理解し易いと判断したためで、正しい表現ではそれぞれ「アドレスレジスタにアドレスをセットする」、「データレジスタにデータを入れる」になります。
このサブルーチンはアドレスレジスタとデータレジスタの内容をまず、表示用データレジスタに転送したあと、セグメントデータ変換ルーチンをCALLします。
アドレスレジスタ、データレジスタと表示用データレジスタとの関係は次のようになります。
アドレスレジスタ(H)FFEF → 表示用データレジスタ 1 FFF4
アドレスレジスタ(L)FFEE → 表示用データレジスタ 2 FFF5
データレジスタ(H)FFED → 表示用データレジスタ 3 FFF6
データレジスタ(L)FFEC → 表示用データレジスタ 4 FFF7

●3. キー入力

●3.1 キー入力ルーチン@
                 開始アドレス 0216
                使用レジスタ A、F、B、D、E
キーボードの入力をチェックし、どのキーも押されていなければ、押されるまで待ちます。
キーが押されると、そのキーに対応する数値(キーコード)をAレジスタに入れてリターンします。
キーとキーコードの対応を下に示します。

●3.2 キー入力ルーチンA
                 開始アドレス 0223
                使用レジスタ A、F、B、D、E
 キー入力ルーチン@はキー入力があるまで待ちつづけますが、このキー入力ルーチンAはキーをスキャンしてキーが押されていなければBレジスタにFFを入れてリターンします。
 キーが押されていれば、対応するキーコードをBレジスタに入れてリターンします。

●4. タイマー

●4.1 タイマールーチン@(4.727ms)
開始アドレス 02DD
                使用レジスタ F、D、E

●4.2 タイマールーチンA(9.432ms)
開始アドレス 02EA
                使用レジスタ F、D、E

●4.3 タイマールーチンB(28.307ms)
開始アドレス 02EF
                使用レジスタ F、D、E

2009.10.20upload

前へ
次へ
ホームページトップへ戻る