Comments
Description
Transcript
6502 マイコン・ボード製作記
連 載 マイコン・システムのしくみを基礎から理解する 6502 マイコン・ボード製作記 〈第 6 回〉6502 の信号と バス・タイミング(後編) ∼制御信号の役割と詳細∼ 桑野 雅彦 Masahiko Kuwano 前回(第 5 回,2006 年 9 月号)は,A 0 ∼ A 15 ,BE, D0 ∼ D7 の各信号について解説しました.今回は,そ れます.‘ 1’になっていると割り込み要求は受け付 けられず,‘0’になった時点で受け付けられます. のほかの信号とバス・タイミングについて詳しく解説 Z 6502 の割り込み処理 します. 6502 は割り込みを受け付けると,プログラム・カ ウンタの値(割り込み復帰後に実行すべき命令のある CPU の信号とその役割 ② アドレス)の上位 8 ビット,下位 8 ビット,P レジスタ をこの順でスタックに待避します.続いて I ビットを ● IRQB (Interrupt Request) マスク可能割り込み要求信号です.IRQB がアサー ‘ 1’にセットして立て続けに割り込みが入ってしま うことを防ぎます. ト(“L”)されたとき,プロセッサ・ステータス・レジ この後,割り込みベクタ領域($FFFE,$FFFF)に書 スタ(P レジスタ:フラグ・レジスタ)の I ビット(ビ ット 2)が‘0’になっていれば割り込みが受け付けら かれている割り込み処理ルーチン(マニュアルでは 「割り込みハンドラ」)の先頭アドレスを読み出してジ CPU メモリ I NT 割り込み要求 CPU 割り込み コントローラ ① I /OがCPUに割り込み 要求 I/O メモリ 割り込みベクタ番号 D0∼D7 割り込みアクノリッジ 割り込み I NTA コントローラ I NT ② CPUの割り込み受け 付けサイクルで割り 込みベクタ番号を渡 す(このステップがな いものもある) I/O ベクタ・テーブル・ アドレス CPU 割り込みベクタ メモリ 割り込み コントローラ I/O ③ 受け取ったベクタ番 号に対応するベクタ・ アドレスに書かれた 図6−1 割り込みベクタを読 割り込みベクタ番号を持つ CPU の割り込み む 応答動作 6502 は②のステップがない Keywords IRQB,MLB,NMIB,PHI2,PHI2O,PHI1O,RWB,RDY,RESB,SOB,SYNC,VPB,割り込みのネスティング,リード・モ ディファイ・ライト・サイクル,マルチプロセッサ・システム,ウェイト,セットアップ・タイム,ホールド・タイム 2006 年 10 月号 215 ャンプし,割り込み処理を開始します.このときのバ スの動きは,VPB 信号がアサートされる以外は通常 レス情報)という 3 バイトのコードを CPU に送るとい う仕様になっていました. のメモリ・リード・サイクルと同様です. IRQB は,割り込み処理ルーチンのなかで,割り込 現在ではこのような,命令コードをフェッチする, というものはまれで,ここで説明したようなベクタ番 み要因がクリアされるまでアサートしておきます. 号を読むという方法か,6502 と同様に直接割り込み 割 り 込 み 処 理 の 最 後 で は , RTI( ReTurn from Interrupt)命令を実行します.この命令では,スタッ ベクタ領域を読むという方法が使われています. 6502 の場合には②の段階がありませんが,ベクタ クから P レジスタ,プログラム・カウンタの下位 8 ビ ット,上位 8 ビットを順次取り出し,元のプログラム 領域をリードしているということは VPB 信号を見て いるとわかります.もし,割り込み要求元に応じた先 の実行を再開します. に分岐させたいときは,このサイクルではメモリ・ア 割り込みマスク用のフラグ・ビットである I ビット は,割り込み処理に入ったときに自動的にセットされ クセスをさせずに,I/O 側からベクタ・アドレスを出 力したり下位の何ビットかだけを I/O のデータとすり (CLear Interrupt disable bit)命 ますが,これを CLI 令などでクリアすると,新たな割り込み要求を受け付 替えるという方法も考えられます. 今回は,I/O は 16550 一つだけなので,このような けられるようになります.このように,割り込み処理 細工はせず,単純に IRQB に 16550 の割り込み要求信 のなかでさらに割り込みを受け付けることを割り込み のネスティングと言います. 号端子を接続しています. Z割り込みベクタを持つ CPU の割り込み処理 6502 の場合,IRQB に対応する割り込みベクタは一 ● MLB (Memory Lock) メモリ・ロック信号です. つだけです.しかし,数多くの割り込み要因に配慮し た CPU では,割り込みを受け付けたときに,対応す Zリード・モディファイ・ライト・サイクル CPU のメモリ・アクセスのなかには,1 命令の処理 る割り込みベクタ番号を受け取るようになっています. のなかでメモリのデータを読み出して変更したものを なお,複数の割り込み要因のどれを先に受け付けるか という判定やベクタ番号の生成などは少々面倒なため, 書き戻すという,リード・モディファイ・ライト・サ イクルを実行するものがあります. 割り込みコントローラという専用 IC が用意されてい ます(現在はマイコン内部に組み込まれることが多い) . (Set Memory Bit 0) 6502 の場合には,例えば SMB0 命令などがこれに相当します.SMB0 は指定されたア 図 6 − 1 に,割り込みベクタ番号をもつ CPU の割り ドレスのビット 0 を‘1’にする命令ですが,CPU と 込み応答動作を示します. メモリの間は 8 ビット単位でのデータ転送しかできな いので,CPU はいったん 8 ビットぶんを読み取って, ① I/O から割り込み要求が発生すると,割り込み コントローラは CPU に対して割り込み要求を行う ビット 0 を‘1’にしたデータを作成しメモリに書き 込むという動作を行います(図 6 − 2). ② CPU は割り込みを受け付けると,バス上に割り Zマルチプロセッサ・システムで生じる問題 込み応答サイクルを生成する(ここでは INTA 信号 で通知するように書いている).割り込みコントロ CPU が一つであればよいのですが,マルチプロセ ッサ・システムなどで,複数の CPU が同一のメモリ ーラは割り込み応答サイクルを検出すると,割り込 みベクタ番号をデータ・バス上に出力し,CPU が 領域をアクセスするようなときには問題が生じます. 図 6 − 3 のように,CPU が二つあり,CPU#1 側で, これを読む ③ CPU は割り込みベクタ番号に対応したメモリ 上の割り込みベクタ・テーブルをアクセスする. SMB0 $80 CPU#2 側で, SMB1 $80 CPU はスタックにフラグや戻り先の番地などを待 避し,割り込み禁止状態にしてからベクタ・テーブ を実行したとします.メモリの初期値は $00 であっ たとしましょう.このとき CPU#1 と CPU#2 による ルに書かれていた割り込み処理ルーチンのアドレス に制御を移す 命令実行が交互に行われていれば,メモリの内容はビ ット 0 とビット 1 の両方がセットされて $03 になるは ずです. なお,8080 の割り込み応答サイクルは,3 バイトの 命令フェッチ・サイクルになっていました.このため, ところが,図のようにちょうどタイミングが一致し て,リード・モディファイ・ライト・サイクルの間に 8080 用の割り込みコントローラ 8259(8259A を 8080 モードで動かしたときも同じ)では,割り込み応答サ 相手のアクセスが挟まったとしたらどうなるでしょう. (CD は CALL 命令,XX XX はアド イクルで CD XX XX 216 ① CPU#2 がメモリの内容を読む($00 が読める) 2006 年 10 月号