シンプル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回路がドライブするから、これらは不定になりません。
シンプル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にします。

低い周波数でもとにかく発振していればよいなら、色々な発振回路がありますのでそれが視野に入ります。

なるべくシンプルに簡単に楽をして作れるように工夫します。

さて、続くのでしょうか。
シンプルZ80マイコン(3)
2025.09.11
アドレスとデータの操作スイッチ

トグルスイッチを並べたものを良く見かけます。
フロントパネルにLEDと共に並べると格好良いかもしれませんが、加工は大変だし、値段もそれなりにかかります。

当時の自分が選んだのはDIPロータリースイッチ(16進数)

たとえば秋月で売っている販売コード102276のようなもの。
自分が買ったのはオムロンの製品で、当時はかなり高価でした。確か600円かそれ以上。

何も知らずに買ってきたが、じつは正論理と負論理を間違えて失敗した。
論理が逆じゃないかと。

対策としては、バッファを論理の異なるものに替える。たとえばLS541とLS540とか。

当時どうしたっけ。
DIPスイッチの信号をプルアップしてCOMをGNDに落とすんじゃなくて、プルダウンでCOMは+5Vにしたっけ。もう忘れてしまいました。

LS541で思い出したが、私が就職したばかりの頃、先輩方から
「そんな便利なICを使うなんてナマイキだ」
「LS244と245でなんとかしろ」
などと言われたものでした。(なんでそんな制約を受けないといけないのか、意味がわかりません)

もしトグルスイッチで構成する場合、スイッチを上下どっちにした時に0か1か、そんなところまで細かく考えて実施する必要があります。慣れた人にはそんなの当たり前かもしれませんが、なかなか最初は気づかなくて、あれっ逆じゃないかと、初めて作ってから気づくものです。

DIPロータリースイッチは、組み上がった後で後悔しました。
あれは本来、頻繁にぐるぐる回す物じゃないんです。
プログラムをひたすら入力しながら、こんなにぐるぐる回していたら早く壊れそうな感じがしました。
だから、おすすめしません。

- CafeLog -