シンプル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ロータリースイッチは、組み上がった後で後悔しました。
あれは本来、頻繁にぐるぐる回す物じゃないんです。
プログラムをひたすら入力しながら、こんなにぐるぐる回していたら早く壊れそうな感じがしました。
だから、おすすめしません。
シンプルZ80マイコン(2)
2025.09.11
コンピュータとは、すなわち配線なり。
とにかく配線が大変だと思えば良いです。

トランジスタ百万個とか数千万個を集積・・・と聞きますが、実際にはトランジスタ等の素子同士をつなぐ配線のほうが多くの面積を占めていると思います。

昔、通っていた学校には汎用機(メインフレーム)があり、後ろの穴からのぞきこむと、ラッピング線がたくさん接続されていました。CPUを構成する基板が何枚もささっていて、これらをお互いに接続する為のバックプレーンの配線です。

4ビット、8ビット、16ビット、32ビット、64ビット、ということは、それだけ配線の数が増えるということです。

64ビットを手配線することを想像すれば、データ8本、アドレス16本のZ80なんか楽だと思うことにしましょう。(今後も時々思い出しながら配線すると、難行苦行も難なくこなせるかも)


さて、本に載っていた簡単マイコン回路の課題を書きます。

あの頃は何も知らず、書いてある通りに作るしかありませんでした。
就職してから上司に聞いてみると、わけのわからない事を言われて頭がパンクしました。
そのレベルに追いつくまでずいぶん時間を要しましたが、いまでは下記のように説明できます。

この回路の課題

■リセット回路
(1)立ち上がりが遅い場合、/RESETがバタついてZ80が不安定になる事がある。
シュミットトリガ74LS14等を通して入力する事。

(2)この回路では瞬間的な電圧低下に対してリセットがかからない場合がある。
放電用としてDがついているけれど短時間にON/OFFされると放電しきれずリセットがかからない場合がある。
実験的には構わないが、リセットIC(電圧検出)を付けること。

(3)リセットスイッチSW1で電解コンデンサをショートしているので、瞬間的に大電流が流れ、接点を傷める。
SW1と直列に数十Ωを接続すること。

■制御信号/MREQ、/WR
ダイオードを通している為、その順方向電圧によりLレベルが持ち上がるのでノイズマージンが低下する。
Lレベルが持ち上がりすぎると正常に動作しないことがある。
もしどうしてもダイオードを使うならショットキーダイオードを使用することが望ましい。

当時は最初ダイオードで試してなぜかうまくいかず(ほかの原因もあったでしょうけれど)、結局はICをいくつか使った回路にしてようやく動きました。

■DMA
BUSREQとBUSACKを使うやり方が多いと思うけど、単純にZ80にリセットをかけ続ける(Lレベル継続)とバスが開放されるので、アドレス・データスイッチからDMAが可能となる。
これでRAMに直接プログラムを書いたり読んだりする。

BUSREQでバスを開放させた場合と、RESETをかけ続けてバスを開放させた場合での違いについて、データシートの記述を良く確認して比較してみる。
MREQ, RD, WRの信号がハイインピーダンスになるか、Hレベルになるか、そういった違いもあったような気がする。(年数経過で忘れた。要確認)

■クロック
そのマイコンが対応できる最大の周波数にしたくなるのが人の性
それ以上にしてみたくなる人の性
さらに、どこまでいけるか試してみたくなるのも人の性

実験で動かしてみるだけなら遅いクロックで十分。
それでも人間より速い。
かえって遅くしたほうが、目で動きが追えるので面白い。

注意:NMOS版Z80では最低動作周波数がある。内部がダイナミック回路になっているため。

CMOS版では手動クロックでも動作可能。
押しボタンの信号をチャタリング処理して、クロックとして与える。
1クロックずつの動作を追ってみるのも勉強になる。

NMOS版ではクロックの入力条件が本来は厳しい。
おそらく内部でクロックをたくさん分配しているから負荷が重たいのだろうけど、いろんな製作例を見ても、厳密にはほとんど条件を満足していないようです。
それでもとりあえず動いています。

■DMA部
スイッチ側のアドレス・データにはバッファを入れる。/RESET=Lの時だけバッファをイネーブルする。

■そのほか
バスにプルアップ抵抗を入れるべきかどうか。入れておくと良い。
参考値10KΩで、コモンタイプの抵抗アレイ8素子入が使いやすい。

バスの使用条件でハイインピーダンスになる場合があるなら入れるべき。/RESET=Lの時とか、BUSREQ=Lの時とか。
シンプルZ80マイコン(1)
2025.09.11
学生の頃に買って読んでいた本「マイコン回路の手ほどき」白土義男著、日本放送出版協会

そのP.73に載っている回路図、というよりもブロック図


このシンプルさに惹かれたのでした、当時の自分は。
簡単に作れそうだ、作ってみようと。

すでに高2の時にワンボードマイコンを作っていたから、まあ、この時代でマイコン作りなんて時代遅れとか誰もやってないとか色々言われたもんだが、勉強して自分の財産になった。

だが、簡単そうに見えてじつは「深い」世界への入口だなんて全く想像もできなかったわけ。

このブロック図を元に、具体的な回路図を描き、部品を買ってきてユニバーサル基板に1本ずつ配線し始めた。

この学生時代に下宿していた市には、あの子どもの頃からあこがれたパーツ屋さんが有り、いつでもパーツを買いに行けたのだ!

しかし、意外にも高くついたので一部妥協するしかなかった。いまでも覚えている。レジで自分の持っているお金を上回る金額だとわかり、あせって、いくつか買わずに返してきた。

図には具体的に描いてないけど、プログラムを書き込んだり読んだりするのにはトグルスイッチとLEDが必要になる。

データ用8bit(8個)、アドレスは・・・いきなりそんな大きいプログラムを入力するだろうか?トグルスイッチでは面倒だろうと予想した。とりあえず8bit(8個)に、しかし単価をかけると高すぎるなあ。
代わりに何かないかと探したら、ロータリー式DIPスイッチがあった。0~Fまで16進数が入力できるやつ。これだ。これを4個使えばアドレスとデータが入力できる。これを買おう。

いずれにしてもアドレス8bitでは256バイト以内でプログラムとデータ、それにスタック領域をおさめなければならない。

まあなんとかなるだろうと、楽観的だったと思う。

結局、シンプルで楽々できるだろうと思ったら予想以上に悪戦苦闘、まだ当時は未熟だったし、配線はもりそばにスパゲティトッピングになってしまった。

あれこれやって試して手直ししたり、回路を見直したりと現在では覚えていないが、最終的には動くようになった。そこまでの道のりが長かった。

あのダイオードが曲者で、ICを使わなくて済むなあ、と思ったら厄介な問題が潜んでいた。一体、何が? (つづく)
もしもシリーズ
2025.09.06
ドリフのコントじゃないけど・・・もしもシリーズ

もしも・・・だったら? と、様々なことに当てはめて日々妄想に精進していきたいと思います。

1.
SC-3000とMSXはハード的に似ているので、もしもMSXでSC-3000のソフトが動かせたら?
そこでMSX上でSC-3000のソフトが使えるハードウェアを作ってみたのがMPC-EX256
見た目はMSXなのに、動いているのはSEGAのBASICやゲームという奇妙な体験でした。

2.
MSXにDMAが有ったら・・・というのは実際には作ってないけど、FDDは2HD対応になっていたでしょう。そのほか、ちょっと思いつきませんが何らかの性能向上にもつながっていたものと思います。

DMAというのはダイレクトメモリアクセスで、プログラムを介さずにデータを転送する機能です。プログラムで転送元番地から転送先番地へ指定バイト数を転送、あるいはI/Oから入(出)力したデータをメモリ上へ(から)転送することは有るでしょう。プログラムを介すのでその実行時間も加わった時間を要します。これをハード的に直接やってしまえば、ほぼ純粋な転送時間だけに短縮される、これをDMAといいます。
スロットコネクタには空きピンが2つ有るので、「六角堂」、「MPC-Sシリーズ」ではDMA用の信号を割り付けてみました。

3.
Z80がワンチップマイコンになっていたら・・・これは当時欲しかったものです。
Z84C015では周辺LSIまでワンチップに組み込まれましたが、ROMとRAMは外付けでした。
HD64180もROM内蔵だったかRAM内蔵だったか、有ったような記憶です。(使ったことがない)

もしもROMとRAMまでワンチップになっていたら、用途が広がっていたかもしれません。そのままZ80資産を活かしたいという希望はありましたから。

じつはそういうワンチップは有りまして、かなり古いのですが遊技機用の通称「V2チップ」です。ROMは8KB、RAMは256か512バイトだったと思います。残念ながら一般向けには販売されず、遊技機メーカー向けでした。
一般向けに出回ったら容易に裏ROMを作られてしまうのでダメでした。しかし、正規の用途としてゲームセンター向けに改造している業者も有り、そこで需要があったかも?
実際には単体Z80またはZ84C015をベースにした「げた基板」を作って使われていたようです。(ROMのプログラムは遊技機メーカーの許諾を得て、ゲームセンター向け仕様の改造を施していた)

4.
上記3の続き
当時はZ80以外に活路を見出すしかなく、H8/3048Fを使い始めたきっかけじゃないかな。そんなH8/3048Fも今では廃止品?

5.
MSXのVDPが超強力な物になっていたら?
CPUもそれなりに性能が高くならないとバランスがとれないでしょうけど、同時に、過去との互換性も維持しなければなりません。
これはなかなか自分で試すのは難しいかな・・・というのは昔の感覚で、いまではFPGAをいじれば何とかできそうです。やるかどうかは別として・・・
超強力というわけではないが、SEGAのVDPを使ったこともありました。MPC-SGT1基板

6.
MSXがインターネットに接続できたら? 少なくともLANに接続
先人が作ったOBSONETも有りました。
MET-5134X基板
実験は出来ました。あとの応用はなかなかできませんでした。

7.
MSXに別のマイコンをつないで、計算などを高速化
昔のI/Oにハードウェア乗算器の製作という力作があり、当時インパクトがあってその号を買って今でも持っています。実際に作るまでには至りませんでした。(お金なし)
こんなふうに、計算などを外部ハードウェアに投げて短時間で処理し、結果をもらうまでの時間がZ80のプログラムより速ければ、というものです。

実際にPICマイコンを載せてみたのは、
MPC-PSP877基板 でした。

PICマイコン自体にバス接続の機能が内蔵されているので、データバスにぶら下げてレジスタの読み書きができました。
この機能を持っているPICはずいぶん古い品番になりました。その後の887等には内蔵されていません。

- CafeLog -