...

6502 マイコン・ボード製作記

by user

on
Category: Documents
2

views

Report

Comments

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 月号
Fly UP