標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第213回]
●DAD命令の回路の説明の続きです
前回は、DADの回路は、8ビットのADDを2回実行するような回路にすればよい、というお話をしました。
ADDを2回だから、DAD(Double ADD)です。駄洒落じゃないですよー(多分)。
Intel社の8080datasheetには、Double Addという表現は使われていませんが、AMD社のdatasheetには、そう書いてあります。
[出典]AMD社datasheet(詳細不明) (赤四角は筆者)
●DAD命令のタイミングチャートです
回路図よりも、先にタイミングチャートを使って、説明した方がよさそうです。
M2、T4で、Lレジスタの値をALUのレジスタ”A”に入れます。
s3〜s0=1101にしてregRDをアクティブにすることで、Lレジスタの値を、内部データバスに読み出します。
M3、T6でターゲットになるレジスタ(下位レジスタ)の値を、ALUのレジスタ”B”に入れます。
DADの命令コード、00pp1001の、OP5、OP4によって、s3〜s1の値を決めます(下位レジスタなので、s0=1です)。
C、E、Lレジスタはs3=1で、s2=OP5、s1=OP4ですが、SPL(スタックポインタ下位8ビット)は、s3=0で、s2=1、s1=0なので、OP5、OP4をそのまま当てはめることはできません(そのための回路が別に必要です)。
そのあたりの関係を下に示します。
Cレジスタ(s3〜s0=1001)
OP5=0 s2=0
OP4=0 s1=0
Eレジスタ(s3〜s0=1011)
OP5=0 s2=0
OP4=1 s1=1
Lレジスタ(s3〜s0=1101)
OP5=1 s2=1
OP4=0 s1=0
スタックポインタ下位8ビット(s3〜s0=0101)
OP5=1 s2=1
OP4=1 s1=0
タイミングチャートの説明を続けます。
M4、T8でADDの結果をLレジスタに書き込みます。
M4の期間、AddRDがアクティブになってADDの結果が内部データバスに読み出されます。
d2=1、d1=0(d3、d0は1)にして、regWRをアクティブにするので、LレジスタにADDの結果が書かれます。
Lレジスタはd3〜d0=1101のときに選択されます。
加算の結果の上位桁へのキャリーの有無をC(キャリー)フラグに反映させるため、AddFenblをアクティブにします。
次に上位レジスタの加算を行います。
M5、T10で、Hレジスタの値をALUのレジスタ”A”に入れます。
s3〜s0=1100にしてregRDをアクティブにすることで、Hレジスタの値を、内部データバスに読み出します。
M6、T12でターゲットになるレジスタ(上位レジスタ)の値を、ALUのレジスタ”B”に入れます。
DADの命令コード、00pp1001の、OP5、OP4によって、s3〜s1の値を決めます(上位レジスタなので、s0=0です)。
B、D、Hレジスタはs3=1で、s2=OP5、s1=OP4です。
SPH(スタックポインタ上位8ビット)は、s3=0、s2=1、s1=0です。
s0が0になることを除いて、OP5、OP4とs2、s1との関係は、先に説明した下位レジスタと同じです(下記)。
Bレジスタ(s3〜s0=1000)
OP5=0 s2=0
OP4=0 s1=0
Dレジスタ(s3〜s0=1010)
OP5=0 s2=0
OP4=1 s1=1
Hレジスタ(s3〜s0=1100)
OP5=1 s2=1
OP4=0 s1=0
スタックポインタ上位8ビット(s3〜s0=0100)
OP5=1 s2=1
OP4=1 s1=0
M7、T14でADDの結果をHレジスタに書き込みます。
M4の期間、AddRDがアクティブになってADDの結果が内部データバスに読み出されます。
d2=1、d1=0(d3は1、d0は0)にして、regWRをアクティブにするので、HレジスタにADDの結果が書かれます。
Hレジスタはd3〜d0=1100のときに選択されます。
加算の結果の上位桁へのキャリーの有無をC(キャリー)フラグに反映させるため、AddFenblをアクティブにします。
2009.4.25upload
前へ
次へ
ホームページトップへ戻る