標準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
前へ
次へ
ホームページトップへ戻る