2014年02月02日

SRの割り込みについて

  mk2SRの割り込みについて調べました。



  『Mr.PC Technical Collection』に書かれている割り込み関連のI/Oポートは以下の通りです。

  0xB8:割り込みベクタ(SUB-CPU)
  0xB9:割り込みベクタ(JOYSTICK)
  0xBA:割り込みベクタ(TIMER)
  0xBB:割り込みベクタ(VOICE)
  0xBC:割り込みベクタ(VRTC)
  0xBD:割り込みベクタ(RS-232C)
  0xBE:割り込みベクタ(Printer)
  0xBF:割り込みベクタ(EXT INT)


  0xFA:割り込みコントロール
  bit7-0:1の時、割り込み禁止。0の時、割り込み許可。

  0xFB:割り込みベクタコントロール
  bit7-0:1の時、割り込みベクタイネーブル。0の時、割り込みベクタディセーブル。


  bit0:SUB-CPU
  bit1:JOYSTICK
  bit2:TIMER
  bit3:VOICE
  bit4:VRTC
  bit5:RS-232C
  bit6:Printer
  bit7:EXT INT


  この割り込み関連の情報は、SRモードの時のみに機能します。mk2/66 の割り込みの制御は、代わりにポート0xF3、0xF4、0xF5、0xF7を使います。


  上記の情報だけだと、何が何だか、という感じだと思います(まあ、あまり触らないトコロではありますが)。


  実際にプログラムで動かしてみました。モード6のみです。

srint.zip


  プログラムの内容は、

 ・割り込みの飛び先を0xD100〜に設定する(Iレジスタの設定)
 ・割り込みが発生した時の飛び先になる、割り込みベクタを設定する(0xB8〜0xBF)

 ・その後、無限ループに入る

  です。

  SUB-CPUを除く、それぞれの割り込みが発生したら、画面上に文字が表示されます。

  SUB-CPUからの割り込みが発生した場合、SUB-CPUにデータを読み込みに行ってそのデータを画面に表示します(キーボードを押すと、その内容が画面に表示されます)。同時に、SUB-CPU以外の割り込みが発生した時の、画面上の文字を消します。


  Printerからの割り込みを禁止していますが、これは後述します。


  プログラムを動かして、何がトリガになっているかを調べました。


 SUB-CPU:
  トリガは、サブCPUの割り込み要求信号(SUB-nINT)。"L"のレベルで割り込み発生。

 JOYSTICK:
  トリガは、ジョイスティックの7ピン(JOY-7)。"L"のレベルで割り込み発生。

 TIMER:
  カスタムLSI内部のため、トリガは不明。

 VOICE:
  トリガは、uPD7752のREQ信号の反転(VO-nREQ)。"L"のレベルで割り込み発生。

 VRTC:
  トリガは、垂直同期信号(nVSYNC)。"L"→"H"の立ち上がりで割り込み発生。

 RS-232C:
  トリガは、RS-232CのポートのRxRDY。"L"のレベルで割り込み発生。

 Printer:
  トリガは、プリンタからのBUSY信号の反転(nBUSY)。"L"のレベルで割り込み発生。

 EXT INT:
  トリガは、拡張カートリッジコネクタの8ピンのnEXINT。"L"のレベルで割り込み発生。



  外部からの入力が4本もあります。これらの信号は、すべてレベルで動作します。例えば、JOYSTICK をつないで、ボタンを押したら割り込むようにしても、押している間はずっと割り込みが掛かってしまいます。

  さらに、Printer からの割り込み信号ですが、論理が間違っているようで、プリンタに接続していない場合、nBUSY="L"となるため、常に割り込みが発生します。




  66SRも同じ構成なので同じような結果になるはずですが、SUB-CPU関連に関しては調べていません。
  SUB-CPUから出力される割り込みベクタが追加されている(TVR、DATE)と思いますが、その辺りは別の機会に。


posted by えすび at 18:13| Comment(2) | P6解析:回路全般 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
>  さらに、Printer からの割り込み信号ですが、論理が間違っているようで、プリンタに接続していない場合、nBUSY="L"となるため、常に割り込みが発生します。

プリンタポートのBUSYは正論理(LでREADY、HでBUSY)なので合っています。回路の不備
ですね。多分プルダウンされていないのでしょう。
Posted by かかっくん at 2014年02月06日 21:46
>>>  さらに、Printer からの割り込み信号ですが、論理が間違ってい>>るようで、プリンタに接続していない場合、nBUSY="L"となるため、>>常に割り込みが発生します。
>>
>>プリンタポートのBUSYは正論理(LでREADY、HでBUSY)なので合ってい>>ます。回路の不備
>>ですね。多分プルダウンされていないのでしょう。

  プリンタからの入力箇所でプルアップされています。

  通常状態が"H"が正解なら、反転してからLSIに入力すべきですね。
 (uPD7752からの入力は反転してから入力しています)

Posted by えすび at 2014年02月06日 21:59
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。