シンプルZ80マイコン(5)
2025.09.12
DMAについて
この場合のDMAは、我々がトグルスイッチ等から(アドレス、データ指定して)RAMに書き込んだり、逆にアドレスを指定してRAMから読み出してLED表示するといった、手動の操作をさします。
RESETをL固定にした場合と、BUSRQをLにした場合では信号の変化に違いがあります。
(RESET)
アドレスバス: ハイインピーダンス
データバス: ハイインピーダンス
MREQ: H
IORQ: H
RD: H
WR: H
(BUSRQ)
アドレスバス: ハイインピーダンス
データバス: ハイインピーダンス
MREQ: ハイインピーダンス
IORQ: ハイインピーダンス
RD: ハイインピーダンス
WR: ハイインピーダンス
ハイインピーダンスというのはLでもHでもない開放状態になるので、もし何かのICが接続されていて入力が不定になると困る場合、プルアップかプルダウン抵抗を追加しなければなりません。
BUSRQの場合、Z80が自分以外にバスを明け渡しています。RD,WRも自由に操作してくれという感じですね。
一方、RESET中のMREQ等はHレベルで、完全に明け渡したのではありません。
RESETの場合、MREQ等についてはプルアップ抵抗不要で済むわけです。
RESET=LでZ80のアドレス、データバスがハイインピーダンスになっても、すぐにDMA回路がドライブするから、これらは不定になりません。
この場合のDMAは、我々がトグルスイッチ等から(アドレス、データ指定して)RAMに書き込んだり、逆にアドレスを指定してRAMから読み出してLED表示するといった、手動の操作をさします。
RESETをL固定にした場合と、BUSRQをLにした場合では信号の変化に違いがあります。
(RESET)
アドレスバス: ハイインピーダンス
データバス: ハイインピーダンス
MREQ: H
IORQ: H
RD: H
WR: H
(BUSRQ)
アドレスバス: ハイインピーダンス
データバス: ハイインピーダンス
MREQ: ハイインピーダンス
IORQ: ハイインピーダンス
RD: ハイインピーダンス
WR: ハイインピーダンス
ハイインピーダンスというのはLでもHでもない開放状態になるので、もし何かのICが接続されていて入力が不定になると困る場合、プルアップかプルダウン抵抗を追加しなければなりません。
BUSRQの場合、Z80が自分以外にバスを明け渡しています。RD,WRも自由に操作してくれという感じですね。
一方、RESET中のMREQ等はHレベルで、完全に明け渡したのではありません。
RESETの場合、MREQ等についてはプルアップ抵抗不要で済むわけです。
RESET=LでZ80のアドレス、データバスがハイインピーダンスになっても、すぐにDMA回路がドライブするから、これらは不定になりません。
シンプルZ80マイコン(4)
2025.09.11
シンプルに仕上げたいと思えば部品を減らしたくなるものです。
しかしI/Oまで付けないと、動かした結果を見たり、何らかの入力ができなくて困ります。
じゃあ、8255でもくっつけようか、となります。
そこでアドレスデコーダが必要になると考えるでしょう。
でも、本当にそれだけ(8255を1個)しか接続しないという条件ならば、アドレスデコーダを省略してもとりあえず使えます。
Z80の/IORQ信号を、8255の/CSに直接つないでしまう。これなら単純にI/Oアクセスで8255が選ばれます。アドレスは全部8255の4バイトずつの繰り返しで埋め尽くされます。
8255でなくても、入力のバッファと出力のラッチをたとえばLS244とLS273あたりで・・・さらに若干のロジックが必要になりそうです。結局ICは何個必要になるか。それなら8255を1個使ったほうが楽でしょう。
クロックの発振回路は、
市販のオシレータ(通称:銀水晶 ・・・ってセーラームーンか)が手軽でしょう。
近頃あまり5V用は売ってないようです。特価処分で安かったりします。
Z80Aのクロックに合わせてたとえば4MHzにします。
低い周波数でもとにかく発振していればよいなら、色々な発振回路がありますのでそれが視野に入ります。
なるべくシンプルに簡単に楽をして作れるように工夫します。
さて、続くのでしょうか。
しかしI/Oまで付けないと、動かした結果を見たり、何らかの入力ができなくて困ります。
じゃあ、8255でもくっつけようか、となります。
そこでアドレスデコーダが必要になると考えるでしょう。
でも、本当にそれだけ(8255を1個)しか接続しないという条件ならば、アドレスデコーダを省略してもとりあえず使えます。
Z80の/IORQ信号を、8255の/CSに直接つないでしまう。これなら単純にI/Oアクセスで8255が選ばれます。アドレスは全部8255の4バイトずつの繰り返しで埋め尽くされます。
8255でなくても、入力のバッファと出力のラッチをたとえばLS244とLS273あたりで・・・さらに若干のロジックが必要になりそうです。結局ICは何個必要になるか。それなら8255を1個使ったほうが楽でしょう。
クロックの発振回路は、
市販のオシレータ(通称:銀水晶 ・・・ってセーラームーンか)が手軽でしょう。
近頃あまり5V用は売ってないようです。特価処分で安かったりします。
Z80Aのクロックに合わせてたとえば4MHzにします。
低い周波数でもとにかく発振していればよいなら、色々な発振回路がありますのでそれが視野に入ります。
なるべくシンプルに簡単に楽をして作れるように工夫します。
さて、続くのでしょうか。
シンプルZ80マイコン(3)
2025.09.11
アドレスとデータの操作スイッチ
トグルスイッチを並べたものを良く見かけます。
フロントパネルにLEDと共に並べると格好良いかもしれませんが、加工は大変だし、値段もそれなりにかかります。
当時の自分が選んだのはDIPロータリースイッチ(16進数)
たとえば秋月で売っている販売コード102276のようなもの。
自分が買ったのはオムロンの製品で、当時はかなり高価でした。確か600円かそれ以上。
何も知らずに買ってきたが、じつは正論理と負論理を間違えて失敗した。
論理が逆じゃないかと。
対策としては、バッファを論理の異なるものに替える。たとえばLS541とLS540とか。
当時どうしたっけ。
DIPスイッチの信号をプルアップしてCOMをGNDに落とすんじゃなくて、プルダウンでCOMは+5Vにしたっけ。もう忘れてしまいました。
LS541で思い出したが、私が就職したばかりの頃、先輩方から
「そんな便利なICを使うなんてナマイキだ」
「LS244と245でなんとかしろ」
などと言われたものでした。(なんでそんな制約を受けないといけないのか、意味がわかりません)
もしトグルスイッチで構成する場合、スイッチを上下どっちにした時に0か1か、そんなところまで細かく考えて実施する必要があります。慣れた人にはそんなの当たり前かもしれませんが、なかなか最初は気づかなくて、あれっ逆じゃないかと、初めて作ってから気づくものです。
DIPロータリースイッチは、組み上がった後で後悔しました。
あれは本来、頻繁にぐるぐる回す物じゃないんです。
プログラムをひたすら入力しながら、こんなにぐるぐる回していたら早く壊れそうな感じがしました。
だから、おすすめしません。
トグルスイッチを並べたものを良く見かけます。
フロントパネルにLEDと共に並べると格好良いかもしれませんが、加工は大変だし、値段もそれなりにかかります。
当時の自分が選んだのはDIPロータリースイッチ(16進数)
たとえば秋月で売っている販売コード102276のようなもの。
自分が買ったのはオムロンの製品で、当時はかなり高価でした。確か600円かそれ以上。
何も知らずに買ってきたが、じつは正論理と負論理を間違えて失敗した。
論理が逆じゃないかと。
対策としては、バッファを論理の異なるものに替える。たとえばLS541とLS540とか。
当時どうしたっけ。
DIPスイッチの信号をプルアップしてCOMをGNDに落とすんじゃなくて、プルダウンでCOMは+5Vにしたっけ。もう忘れてしまいました。
LS541で思い出したが、私が就職したばかりの頃、先輩方から
「そんな便利なICを使うなんてナマイキだ」
「LS244と245でなんとかしろ」
などと言われたものでした。(なんでそんな制約を受けないといけないのか、意味がわかりません)
もしトグルスイッチで構成する場合、スイッチを上下どっちにした時に0か1か、そんなところまで細かく考えて実施する必要があります。慣れた人にはそんなの当たり前かもしれませんが、なかなか最初は気づかなくて、あれっ逆じゃないかと、初めて作ってから気づくものです。
DIPロータリースイッチは、組み上がった後で後悔しました。
あれは本来、頻繁にぐるぐる回す物じゃないんです。
プログラムをひたすら入力しながら、こんなにぐるぐる回していたら早く壊れそうな感じがしました。
だから、おすすめしません。