FX-Z80についての質問

戻る ホーム 上へ 進む

メモリとI/Oにウェイトを入れる必要がありますか。

割り込みコントローラの使い方を教えてください。

モニタユニットを汎用のキーボードと7セグメントLED表示として使いたいのですが
どのようにすればよいでしょうか。

Z-VisionやRM-80でトレース中に割り込み信号を入れても
割り込みプログラムに処理が移りません。なぜですか。

Z-VisionやRM80を使っている最中にマシン語モニタに戻す方法はありますか。

Z-Visionが起動しないことがあるのですがどんなことが考えられますか。

ひとつのROMでどうしていくつものモニタプログラムが使えるのですか。

ROMの中のサブルーチンを使いたいのですが。

メモリとI/Oにウェイトを入れる必要がありますか。

    FX-Z80に搭載されているメモリーのスピードは,ROM,RAMともに100ns以下で,モニタプログラムはノーウェイトで実行されています。

    しかし,実際にノーウェイトで実行させるためには48ns以下のメモリーを使用する必要があります。(計算方法は川崎マイクロエレクトロニクス株式会社発行の「KL5C80A16CFPハードウェアマニュアル」と「アプリケーションノート」をご覧ください。川崎マイクロエレクトロニクスのホームページからもダウンロードできます。)

    ところで,メモリーはある程度スピードの余裕を持たせて製造されているようで,FX-Z80に実装されているメモリーでも問題なく動作します。もちろんこのような使用方法はメーカーでも保証範囲外であり,外部条件やロット,メーカーの組み合わせによっては動作しないこともありえます。特に製品に組み込む場合は無視できません。

    FX-Z80は試作用,また学習用という製品の性格上,オーバースペックになりますがあえてノーウェイトで出荷しています。しかし,これはすべての条件で動作するという保証を弊社において行っているものではありません。

    それで,スペック内に収めるためにはメモリーアクセスに1ウェイト挿入するようにしてください。(SCR4で設定します。この場合は148ns以下のメモリーが使用可能です。)

    I/Oについては,内部I/Oのみであれば1ウェイト挿入(もっとも早いタイミング)で問題なく動作します。外部にI/Oを増設するときはアクセススピードに応じてウェイトを増やしてください。(SCR4で設定します。)

[先頭に戻る]

割り込みコントローラの使い方を教えてください。

    FX−Z80に登載されているKL5C80A16CFPの割り込みコントローラは、モード2割り込みに対応しています。ここでは特に割り込みベクタの設定方法を中心に初期設定の方法について説明します。また、タイマ/カウンタのCh0で1秒毎に割り込みをかけ、その度に2進数で+1し、その様子をマシン語モニタの7セグメントLEDに表示するプログラムを載せています。リストも併せてご覧下さい。

    モード2割り込みを使うには、まずメモリに予め割り込みベクタテーブルと呼ばれる領域を作っておきます(リストでは8800h番地から881Fh番地)。ここには割り込みが発生したときにジャンプしたいプログラムのスタートアドレスを割り込み要因別にセットしておきます。

    次に割り込みベクタテーブルの先頭アドレス(8800h)をCPUと割り込みコントローラにセットします。CPUに対してはIレジスタに先頭アドレスの上位8ビット(88h)をセットします(リスト@)。割り込みコントローラに対してはIVRに先頭アドレスの下位8ビット(00h)をセットします。

    では次に割り込みが発生したときにどの様に割り込みベクタが作られるか見てみましょう。このプログラムではタイマ/カウンタCh0が割り込みをかけてきますから、IR12が割り込み要求元となります。割り込みが発生するとCPUは割り込みコントローラからIVRにセットした8ビットデータを受け取ります。このうち上位3ビットは予めセットしたデータですが、下位5ビットは割り込み要求元により次のように変化します。

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
初期設定でセットした値 割り込み要求元に応じて下記のように出力 0固定
IVR7 IVR6 IVR5 0
  IR15のとき→ 1 1 1 1  
IR14のとき→ 1 1 1 0
IR13のとき→ 1 1 0 1
IR12のとき→ 1 1 0 0
 

IR0のとき→ 0 0 0 0

    このプログラムではIVRには00hをセットしているのでbit7-5は‘000’、IR12が割り込み要求元なのでbit4-1は‘1100’、bit0は‘0’固定で最終的には18h(00011000b)を割り込みコントローラから受け取ります。

    次にCPUはIレジスタの値を上位8ビット、割り込みコントローラから受け取った値を下位8ビットとする16ビットの値、このプログラムでは8818hをアドレスとし、このアドレスにセットされている2バイトデータをリードします(8022h)。そして、この値をアドレスとしてそこにジャンプします。このプログラムでは8022h番地から割り込みプログラムが記されています。

    さて次の割り込みを受け付けるためには、割り込み処理が終了した事を割り込みコントローラに知らせる必要があります。割り込みコントローラはCPUがRETIを実行したか常に監視し、実行されると割り込み処理が終了したと判断します。それで、割り込み処理の最後は必ずRETIにします。

    割り込みコントローラの初期設定ではそのほかにもセットするデータがあります。それについては次の表をご覧下さい。併せて、割り込み要求元と、割り込みコントローラのポートアドレスについても示します。

 

割り込み要求元

IR15 外部入力(P23)
IR14 外部入力(P22)
IR13 タイマ/カウンタ(Ch1)
IR12 タイマ/カウンタ(Ch0)
IR11 SIO ブレーク検出/エラー検出(Ch0)
IR10 SIO RxRdy(Ch0)
IR9 SIO TxRdy(Ch0)
IR8 クロック同期シリアルI/O(Ch0)
IR7 DMA(Ch0)
IR6 DMA(Ch1)
IR5 SIO ブレーク検出/エラー検出(Ch1),外部入力(P21)
IR4 SIO RxRdy(Ch1)
IR3 SIO TxRdy(Ch1)
IR2 クロック同期シリアルI/O(Ch1),外部入力(P20)
IR1 タイマ/カウンタ(Ch3),外部入力(P21)
IR0 タイマ/カウンタ(Ch2),外部入力(P20)

 

ポートアドレス アウト イン
IVRライト前 IVRライト後
34h LERL PGRL ISRL
35h LERH PGRH ISRH
36h   IMRL IMRL
37h IVR IMRH IMRH

ハードリセット後,最初にLERL,LERHを,次にIVRを,その後,PGRL,PGRH,IMRL,IMRHを設定します。LERL,LERH,IVRはハードリセットがない限り再設定できません。

 

◆ISR(In Service Register)

  bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 割り込み中のビットが1になります。
ISRH ISR15 ISR14 ISR13 ISR12 ISR11 ISR10 ISR9 ISR8
ISRL ISR7 ISR6 ISR5 ISR4 ISR3 ISR2 ISR1 ISR0

 

◆IVR(Interrupt Vector Register)

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 割り込み時にCPUに送るデータ。
D4〜D1は割り込み時にIR15からIR1に応じて自動的に設定されます。
IVR IVR7  IVR6 IVR5 D4 D3 D2 D1 0

 

◆LER(Level/Edge Register)

  bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 割り込み要求を入力をレベル入力にするかエッジ入力にするか設定します。(0-Level/1-Edge)
LERH LER15 LER14 LER13 LER12 LER11 LER10 LER9 LER8
LERL LER7 LER6 LER5 LER4 LER3 LER2 LER1 LER0

 

◆PGR(Priority Group Register)

  bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 ここで1にセットしたものの中で割り込みレベルの大きなものから優先して割り込みを受け付けます。
PGRH PGR15 PGR14 PGR13 PGR12 PGR11 PGR10 PGR9 PGR8
PGRL PGR7 PGR6 PGR5 PGR4 PGR3 PGR2 PGR1 PGR0

 

◆IMR(Interrupt Mask Register)

  bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 割り込み入力をマスクします。
(0-マスクしない/1-マスクする)
IMRH IMR15 IMR14 IMR13 IMR12 IMR11 IMR10 IMR9 IMR8
IMRL IMR7 IMR6 IMR5 IMR4 IMR3 IMR2 IMR1 IMR0

[先頭に戻る]

モニタユニットを
汎用のキーボードと7セグメントLED表示として使いたいのですが
どのようにすればよいでしょうか。

    基本的な方法についてはマシン語モニタの「マシン語モニタ操作説明書」の付録に記載されていますのでそちらをご覧ください。TK-Z80と大きく異なる点は,RAMに表示データをセットするだけでは表示されずサブルーチンを定期的にCALLしつづける必要がある,というところです。また,キーデータと表示データはシリアルで入出力する必要があります。

[先頭に戻る]

Z-VisionやRM-80でトレース中に割り込み信号を入れても
割り込みプログラムに処理が移りません。なぜですか。

    Z-VisionやRM-80のトレースは,次に実行する命令の,さらに次に実行する命令を‘INT30H’に置き換えることで,1命令実行したあとでデバッガに処理を移しています。例として次のプログラムをトレースする場合を考えます。

LD A,30h ;(1)ここまでトレースしてきた
LD B,16h ;(2)次にこの命令を実行する
ADD A,B ;(3)

    (1)で止まっているときに割り込み信号を入れると,リモートデバッガ内はDIになっているので割り込みは一時保留になります。リモートデバッガからトレースでアプリケーションに処理が移るときに,これまでアプリケーションでEIであればEIに戻すので,それ以降,割り込みを受け付けることになります。つまり,(2)の命令を実行する前に割り込みを受け付けます。

    さて,(1)で止まっているときに割り込み信号を入れ,そしてトレースを行うと,(3)を‘INT30H’に置き換えてからアプリケーションに処理を移すので,割り込み処理と(2)の命令を実行してからデバッガに処理が移ります。というわけで,トレースでは割り込みプログラムに処理を移すことができません。

    対応策は,割り込みプログラムのデバッグは,割り込みプログラムの先頭にブレークをはって実行し(Goコマンド),一度ブレークをかけてからトレースすることで行います。

[先頭に戻る]

Z-VisionやRM80を使っている最中に
マシン語モニタに戻す方法はありますか。

Z-Visionが起動しないことがあるのですが
どんなことが考えられますか。

ひとつのROMでどうしていくつもの
モニタプログラムが使えるのですか。

    これらの質問については,次の資料をダウンロードしてください。(mon_chng.pdf

[先頭に戻る]

ROMの中のサブルーチンを使いたいのですが。

    汎用サブルーチンの資料をダウンロードしてください(sub.pdf)。また,FX-Z80のROMの内容についてはソースリストを参照してください。(モニタプログラムのダウンロード

[先頭に戻る]

戻る ホーム 上へ 進む

Copyright (c) 2000-2024 ToyoLinx Co.,Ltd.