シンプルZ80マイコン(11)
2025.09.18
高校の実習教科書に、Z80じゃないけど8085をステップ実行させる実習課題があったのを思い出しました。
ROMどころかRAMも無いのです。
RAMが有れば、RAMにプログラムを書き込む仕組みもいるでしょう。おのずと配線は複雑になる。
そこで、ゴッソリと削ぎ落とし、本当に最低限の構成とする。
スイッチからひとつずつ命令を与えて実行するという仕組み。
操作するあなた自身がROMやRAMの働きをするというわけ。
だから、アドレスを指定するスイッチも無い。
1命令サイクルを実行し、その都度結果を確認して、考えた通りに動いている事を確認していく。
究極のシンプルマイコンボード?じゃないかと思います。
不便は不便よ、確かに。
ですが、動きを理解するには良い教材だと思いました。あくまでも教材なのです。実用品ではありません。(この点を勘違いしないように)
Z80でも同様にやれるでしょうけど、さすがにそこまで省略したものは見たことがない。
NMOSのZ80だと内部ダイナミック構成で、要するに最低クロックが決まっているから1Hzとか手動では動かせない。
CMOSのZ80ならOK。たとえばTMPZ84C00とか。
クロック1発ずつ入れて、それぞれの信号の動きを確かめていく。
私が初めて読んだコンピュータの本
「ニャロメのおもしろコンピュータ探検」
いまだに覚えていて、CPUが命令を取り込んで実行するまでの話だったと思うけど、
「人間がスイッチをひねるには10分の1秒もかかるね」「そんなのまだるっこしくて待ってられないッスよ」といったやりとりがありました。
そこで、この超シンプルマイコンボードは、CPUのクロックを極端に遅くすることで人間様のほうが速いという逆の立場になるわけです。
クロックは人間様が握っているのです。CPUの心臓を動かすも止めるも人間しだいです。
それにしても、スイッチを「ひねる」という言い方。いまでは絶対言わないね。
もはや「ポチッとな」と押すようなスイッチも希少。
スイッチをひねる、なんて言うのは真空管ラジオじゃないかと思います。
「ひねる」この言葉、気に入っています。
ROMどころかRAMも無いのです。
RAMが有れば、RAMにプログラムを書き込む仕組みもいるでしょう。おのずと配線は複雑になる。
そこで、ゴッソリと削ぎ落とし、本当に最低限の構成とする。
スイッチからひとつずつ命令を与えて実行するという仕組み。
操作するあなた自身がROMやRAMの働きをするというわけ。
だから、アドレスを指定するスイッチも無い。
1命令サイクルを実行し、その都度結果を確認して、考えた通りに動いている事を確認していく。
究極のシンプルマイコンボード?じゃないかと思います。
不便は不便よ、確かに。
ですが、動きを理解するには良い教材だと思いました。あくまでも教材なのです。実用品ではありません。(この点を勘違いしないように)
Z80でも同様にやれるでしょうけど、さすがにそこまで省略したものは見たことがない。
NMOSのZ80だと内部ダイナミック構成で、要するに最低クロックが決まっているから1Hzとか手動では動かせない。
CMOSのZ80ならOK。たとえばTMPZ84C00とか。
クロック1発ずつ入れて、それぞれの信号の動きを確かめていく。
私が初めて読んだコンピュータの本
「ニャロメのおもしろコンピュータ探検」
いまだに覚えていて、CPUが命令を取り込んで実行するまでの話だったと思うけど、
「人間がスイッチをひねるには10分の1秒もかかるね」「そんなのまだるっこしくて待ってられないッスよ」といったやりとりがありました。
そこで、この超シンプルマイコンボードは、CPUのクロックを極端に遅くすることで人間様のほうが速いという逆の立場になるわけです。
クロックは人間様が握っているのです。CPUの心臓を動かすも止めるも人間しだいです。
それにしても、スイッチを「ひねる」という言い方。いまでは絶対言わないね。
もはや「ポチッとな」と押すようなスイッチも希少。
スイッチをひねる、なんて言うのは真空管ラジオじゃないかと思います。
「ひねる」この言葉、気に入っています。
シンプルZ80マイコン(10)
2025.09.14
どうやって配線するか、これ次第で成否が決まる。
太いビニール線で配線していると、すぐに盛り上がってきて「盛りそばのスパゲティトッピング」になってしまい破綻する。線が邪魔くさい。
その盛りそばをかきわけながら配線しているうちにイヤになり、放りだしたくなる。
太いビニール線というのは何を基準に太いといっているかというと、AWG22番ではまだ太い。AWG24以上を目安に考えて下さい。AWGの番号が大きくなるほど細くなる。
電源周りは太くて良いけど、信号線は本数も多いから細い線を使ってスッキリさせる。
よく見かけるビニール線だとはんだごてが当たった時に融けてしまう。やはり耐熱線を使った方が良い。
パーツ屋さんでAWG24の10色セットが有る。
色分けは凝らなくて良い。勿論、色分けをして見やすくするのが良いけど、色分けを細かくしようとするとどれがどれやらわかりにくくなる。
特定の色ばかり良く使ってしまい、足りなくなってまた線の切り売りを買い足すなど面倒だ。
面倒くさい要素は排除しよう。
配線はユニバーサル基板の表面を通すべきか、裏面か。これはどっちが良いだろう。どっちも試してみたけどそれぞれ優劣がある。
表面(部品面)に通したほうが、半田面はスッキリする。
配線をきれいに束ねたり曲げたりして見た目を良くしたい。
線をまとめる為の糸があって、モノヒラと言ったっけ。ナイロン糸の柔らかいもの。別に、タコ糸のような物で縛ってもよい。
インシュロックだといくら細い物でも基板上では盛り上がって邪魔になる。
ホットボンドは剥がしやすい時には剥がせるので便利かも。見た目はあまりきれいにならない。
ICやソケット等のピンとリード線の接続は、プロだとリード線の先端をピンに巻き付けてからハンダ付けする。一箇所に2本以上接続する時、巻き付けだとはずれにくくて作業しやすい。
抵抗やコンデンサは直接ハンダ付けして良いが、値を変更する可能性がある部品については、とくにソケットを使ったほうが便利。丸ピンソケットにそのまま差し込む。
配線をするときは元の回路図の複写を取り、それをみながら1本ずつ配線が済むたびに赤鉛筆で塗っていく。
これは絶対忘れないように、1本ずつ確実に進めていく。
おっと、思い出した。
ポリウレタン線での配線
学生の頃にワイヤリングペンという物を買ってきて試したけど、本に書いてあるようにはうまくいかず、放りだしてしまって数十年たった今もそのまま残っている。
ポリウレタン線を使うと、特にバス配線が楽になると言う。たとえばアドレスA0を、Z80、ROM、RAM、8255、コネクタ、とつないでいく。
巻き付けながら線を引いていき、最後にハンダ付けすれば良いという。
はんだを流しながら加熱すると被膜が融けるから、被覆をむく必要もなく、簡単にできると書いてあったんだが・・・当時使ったはんだごての温度が足りなかったのかもしれない。
実際には思ったように融けず、こりゃソケットやICを焼きすぎて壊れるんじゃないかと不安になった。その当時。
太いビニール線で配線していると、すぐに盛り上がってきて「盛りそばのスパゲティトッピング」になってしまい破綻する。線が邪魔くさい。
その盛りそばをかきわけながら配線しているうちにイヤになり、放りだしたくなる。
太いビニール線というのは何を基準に太いといっているかというと、AWG22番ではまだ太い。AWG24以上を目安に考えて下さい。AWGの番号が大きくなるほど細くなる。
電源周りは太くて良いけど、信号線は本数も多いから細い線を使ってスッキリさせる。
よく見かけるビニール線だとはんだごてが当たった時に融けてしまう。やはり耐熱線を使った方が良い。
パーツ屋さんでAWG24の10色セットが有る。
色分けは凝らなくて良い。勿論、色分けをして見やすくするのが良いけど、色分けを細かくしようとするとどれがどれやらわかりにくくなる。
特定の色ばかり良く使ってしまい、足りなくなってまた線の切り売りを買い足すなど面倒だ。
面倒くさい要素は排除しよう。
配線はユニバーサル基板の表面を通すべきか、裏面か。これはどっちが良いだろう。どっちも試してみたけどそれぞれ優劣がある。
表面(部品面)に通したほうが、半田面はスッキリする。
配線をきれいに束ねたり曲げたりして見た目を良くしたい。
線をまとめる為の糸があって、モノヒラと言ったっけ。ナイロン糸の柔らかいもの。別に、タコ糸のような物で縛ってもよい。
インシュロックだといくら細い物でも基板上では盛り上がって邪魔になる。
ホットボンドは剥がしやすい時には剥がせるので便利かも。見た目はあまりきれいにならない。
ICやソケット等のピンとリード線の接続は、プロだとリード線の先端をピンに巻き付けてからハンダ付けする。一箇所に2本以上接続する時、巻き付けだとはずれにくくて作業しやすい。
抵抗やコンデンサは直接ハンダ付けして良いが、値を変更する可能性がある部品については、とくにソケットを使ったほうが便利。丸ピンソケットにそのまま差し込む。
配線をするときは元の回路図の複写を取り、それをみながら1本ずつ配線が済むたびに赤鉛筆で塗っていく。
これは絶対忘れないように、1本ずつ確実に進めていく。
おっと、思い出した。
ポリウレタン線での配線
学生の頃にワイヤリングペンという物を買ってきて試したけど、本に書いてあるようにはうまくいかず、放りだしてしまって数十年たった今もそのまま残っている。
ポリウレタン線を使うと、特にバス配線が楽になると言う。たとえばアドレスA0を、Z80、ROM、RAM、8255、コネクタ、とつないでいく。
巻き付けながら線を引いていき、最後にハンダ付けすれば良いという。
はんだを流しながら加熱すると被膜が融けるから、被覆をむく必要もなく、簡単にできると書いてあったんだが・・・当時使ったはんだごての温度が足りなかったのかもしれない。
実際には思ったように融けず、こりゃソケットやICを焼きすぎて壊れるんじゃないかと不安になった。その当時。
シンプルZ80マイコン(9)
2025.09.13
ROMを書き込む装置がない場合、
毎回、電源を入れるたびにトグルスイッチをパチパチやってプログラムを入れ直す。
バッテリーバックアップを組込み、毎回やらなくても済むように工夫する。
電池切れや暴走で消えたら仕方ない。またパチパチ入力する。
ダイオードでROMを作ってブートローダを実現する(ヤメレ)。
ROMの書込ってやつは当時の自分には敷居が高く、製作記事は見たが、
やはり地獄のトグルスイッチ方式
1バイト、1ビットたりともミスは許されない一発勝負(笑)
こんな地獄の三丁目みたいな物、ROMライタは欲しいけれど作りたくもなかった。
ROMはどうやって手に入れたかと言うと、MZ-1P07がヘッドから煙を吹いて壊れたので、そこから抜いた2764が2個
エレキットのおしゃべりさんの音声ROM、地元の嘉穂無線の店が在庫処分で安売りしていたので、その時に買い込んだ。これを消去すれば使えるだろうと。
MSXのスロットに差し込んで、BASICからの制御で書き込むものを自作したのは1992年のこと。
最初は50msパルスで2764を書いていた。
書き込むのは良いが消去できないと、書き直しや再利用で困る。
いわゆるイレーサーが必要。紫外線ランプを利用する。
日本の端っこの田舎だったから、紫外線ランプなんかどこで売っているのか見当もつかない。
蛍光管の一種で、一般の蛍光管は白いけど、紫外線蛍光管は透明で内部に水銀の粒が見える。
4W程度のものが使いやすい。直接見ないように、必ず、箱に入れて照射する。
イレーサーを持っていなかった学生時代、床屋の息子に頼んで、殺菌灯で消してきてくれと帰省時にROMを預けたものである。
イレーサーは上司から使い古しの物を譲り受けて最初の頃使っていた。
タイマーが無いから、自分で時間を管理する必要あり。
引き出しがついていて、そこに2716だったら3個、2764は横向きに1個入るかなという物だった。もともと24ピン用の引き出しなんだな。
ROMライタは自作もしたが、就職先がROMライタの会社だったので、私用で使うのはまずいだろうけれど上司に申し出てみたら別に構わないんじゃないと、当時は緩かった。
会社で借りることはできたが、やはり手元にないと、すぐ使いたい時に不便だ。それで購入を検討しながら、ボーナスで買うなら現物支給で良いなと・・・
半分本気+半分冗談で、今度のボーナスは現物支給でいいです(ROMライタ)と言ったら本気にされて、営業部の人が来て、どの機種が良い?オプションどれにする?と聞かれた(笑)
毎回、電源を入れるたびにトグルスイッチをパチパチやってプログラムを入れ直す。
バッテリーバックアップを組込み、毎回やらなくても済むように工夫する。
電池切れや暴走で消えたら仕方ない。またパチパチ入力する。
ダイオードでROMを作ってブートローダを実現する(ヤメレ)。
ROMの書込ってやつは当時の自分には敷居が高く、製作記事は見たが、
やはり地獄のトグルスイッチ方式
1バイト、1ビットたりともミスは許されない一発勝負(笑)
こんな地獄の三丁目みたいな物、ROMライタは欲しいけれど作りたくもなかった。
ROMはどうやって手に入れたかと言うと、MZ-1P07がヘッドから煙を吹いて壊れたので、そこから抜いた2764が2個
エレキットのおしゃべりさんの音声ROM、地元の嘉穂無線の店が在庫処分で安売りしていたので、その時に買い込んだ。これを消去すれば使えるだろうと。
MSXのスロットに差し込んで、BASICからの制御で書き込むものを自作したのは1992年のこと。
最初は50msパルスで2764を書いていた。
書き込むのは良いが消去できないと、書き直しや再利用で困る。
いわゆるイレーサーが必要。紫外線ランプを利用する。
日本の端っこの田舎だったから、紫外線ランプなんかどこで売っているのか見当もつかない。
蛍光管の一種で、一般の蛍光管は白いけど、紫外線蛍光管は透明で内部に水銀の粒が見える。
4W程度のものが使いやすい。直接見ないように、必ず、箱に入れて照射する。
イレーサーを持っていなかった学生時代、床屋の息子に頼んで、殺菌灯で消してきてくれと帰省時にROMを預けたものである。
イレーサーは上司から使い古しの物を譲り受けて最初の頃使っていた。
タイマーが無いから、自分で時間を管理する必要あり。
引き出しがついていて、そこに2716だったら3個、2764は横向きに1個入るかなという物だった。もともと24ピン用の引き出しなんだな。
ROMライタは自作もしたが、就職先がROMライタの会社だったので、私用で使うのはまずいだろうけれど上司に申し出てみたら別に構わないんじゃないと、当時は緩かった。
会社で借りることはできたが、やはり手元にないと、すぐ使いたい時に不便だ。それで購入を検討しながら、ボーナスで買うなら現物支給で良いなと・・・
半分本気+半分冗談で、今度のボーナスは現物支給でいいです(ROMライタ)と言ったら本気にされて、営業部の人が来て、どの機種が良い?オプションどれにする?と聞かれた(笑)
シンプルZ80マイコン(8)
2025.09.13
高校生の頃に、後輩と議論していました。
最も良い入力方法は?
良いの基準は何だったでしょう。
それは、できるだけ単純なハードウェアと操作方法。
ROMを書き込む装置がないから、プログラムを使わなくてハードだけで済む方法。
彼が言うには、ファミコンの十字キーのようにしたらいいのではないか、という提案です。
左・右でアドレスを進めたり戻したりする。
上・下でデータを増やしたり減らしたりする。
入力操作には、とても時間がかかりそうです。
16進数1桁なら何とかなりそうですけど、2桁ですからね。
(いまの時代だと同じような操作方式の物があります。制御機器、インバータ等のパラメータ設定で少ないボタンと限られた7セグ表示器で項目を選んで、数値を設定します)
結局、キーボードから打ち込むかと考えたが、
実際に使っていくうちにキーボードでも面倒くさくなるわけですよ。
人間というものは欲があるので。
当時はPCをつないで、シリアル通信で流し込むなんてのは、視野になかった。
RS-232Cは標準装備じゃなかったから。(MSX等)
16進数を7セグ表示するためのICはF9368ってのがあったけど、当時かなり高価で、手に入りにくかった。
ロジックICで工夫して同じ働きの回路を作りました、という記事を見たような見たことがないような記憶だけれど、
あとで考えてみればROMとか他に方法はあったわけです。
ダイオードを並べるのはチョット大変ね。
最も良い入力方法は?
良いの基準は何だったでしょう。
それは、できるだけ単純なハードウェアと操作方法。
ROMを書き込む装置がないから、プログラムを使わなくてハードだけで済む方法。
彼が言うには、ファミコンの十字キーのようにしたらいいのではないか、という提案です。
左・右でアドレスを進めたり戻したりする。
上・下でデータを増やしたり減らしたりする。
入力操作には、とても時間がかかりそうです。
16進数1桁なら何とかなりそうですけど、2桁ですからね。
(いまの時代だと同じような操作方式の物があります。制御機器、インバータ等のパラメータ設定で少ないボタンと限られた7セグ表示器で項目を選んで、数値を設定します)
結局、キーボードから打ち込むかと考えたが、
実際に使っていくうちにキーボードでも面倒くさくなるわけですよ。
人間というものは欲があるので。
当時はPCをつないで、シリアル通信で流し込むなんてのは、視野になかった。
RS-232Cは標準装備じゃなかったから。(MSX等)
16進数を7セグ表示するためのICはF9368ってのがあったけど、当時かなり高価で、手に入りにくかった。
ロジックICで工夫して同じ働きの回路を作りました、という記事を見たような見たことがないような記憶だけれど、
あとで考えてみればROMとか他に方法はあったわけです。
ダイオードを並べるのはチョット大変ね。
シンプルZ80マイコン(7)
2025.09.12
アドレスバスは必要な本数だけ接続すれば良いです。
仮にメモリが合計64KBあったとしても、16本全部つなぐのは面倒です。
256バイト分なら8本だけでいいです。もっと少なくして、必要になったらつなぐのでもいいです。
但し、SRAMのアドレスピンの余りは開放せず、+5VまたはGNDにつないでおきます。
いや、Z80からアドレス16本出ているからSRAMは64KBのせて、全部つながないともったいない?
でも、トグルスイッチで32KBも64KBも入力する気か、って立ち止まって考えてみます。
256バイトでもスイッチパチパチは大変です。
そんなの経験ないからわかんない、やってみなきゃ、と思うなら経験するのも良いです。
100バイト程度でローダーのプログラムを作り、あとで8251をつないでRS-232Cからプログラムをロードできるようにした方が楽です。そうすればBASICなど使えます。
これは後の拡張しだいです。
ローダーを毎回パチパチ入力するのは大変ですから、SRAMのバッテリーバックアップを追加したり、あるいはROM化するかです。
ミニコンピュータの時代、フロントパネルに並んだスイッチからブートローダーを打ち込みましたが、せいぜい16ワード程度でした。
NEAC3200で遊んでいた頃そのコードを覚えてしまい、手が勝手に動いて打ち込んだものです。コアメモリだったので電源が落ちても消えず、暴走や何かの拍子に消えたら打ち込み直していました。
ブートローダーによって紙テープを読み込ませ、その読み込んだプログラムを実行させる仕組みでした。
ところで、
トグルスイッチでプログラムを打ち込んだりしていると、アドレスの操作が面倒になるでしょう。ミスも起きがちです。
しまった、アドレスを進めてなかったからやり直しだ。どこまで戻れば? そんな事が起きます。
打ち込んだプログラムを先頭から順番に読みながら、正しく入力できたか確認したいときもあるでしょう。
そんなとき、いちいちトグルスイッチを操作してアドレスを進めるのですから面倒くささにもほどがあります。
そこで、アドレスにカウンタを組み込み、書込ボタンなど押すたびに自動的に+1してくれればいいのにと思いつきます。
ランダムアクセス的にアドレスを指定するのはトグルスイッチで、
そのカウンタの開始値の設定もトグルスイッチで、
あとは、書込ボタンを押した後に+1される。
読み出しは、書込を伴わない+1だけのボタンが有ればいいな。
色々凝り始めて、結局は・・・複雑になりそうです。
キーボードから打ち込むのが楽でいいなと考えるけど、それはまた別バージョンです。
仮にメモリが合計64KBあったとしても、16本全部つなぐのは面倒です。
256バイト分なら8本だけでいいです。もっと少なくして、必要になったらつなぐのでもいいです。
但し、SRAMのアドレスピンの余りは開放せず、+5VまたはGNDにつないでおきます。
いや、Z80からアドレス16本出ているからSRAMは64KBのせて、全部つながないともったいない?
でも、トグルスイッチで32KBも64KBも入力する気か、って立ち止まって考えてみます。
256バイトでもスイッチパチパチは大変です。
そんなの経験ないからわかんない、やってみなきゃ、と思うなら経験するのも良いです。
100バイト程度でローダーのプログラムを作り、あとで8251をつないでRS-232Cからプログラムをロードできるようにした方が楽です。そうすればBASICなど使えます。
これは後の拡張しだいです。
ローダーを毎回パチパチ入力するのは大変ですから、SRAMのバッテリーバックアップを追加したり、あるいはROM化するかです。
ミニコンピュータの時代、フロントパネルに並んだスイッチからブートローダーを打ち込みましたが、せいぜい16ワード程度でした。
NEAC3200で遊んでいた頃そのコードを覚えてしまい、手が勝手に動いて打ち込んだものです。コアメモリだったので電源が落ちても消えず、暴走や何かの拍子に消えたら打ち込み直していました。
ブートローダーによって紙テープを読み込ませ、その読み込んだプログラムを実行させる仕組みでした。
ところで、
トグルスイッチでプログラムを打ち込んだりしていると、アドレスの操作が面倒になるでしょう。ミスも起きがちです。
しまった、アドレスを進めてなかったからやり直しだ。どこまで戻れば? そんな事が起きます。
打ち込んだプログラムを先頭から順番に読みながら、正しく入力できたか確認したいときもあるでしょう。
そんなとき、いちいちトグルスイッチを操作してアドレスを進めるのですから面倒くささにもほどがあります。
そこで、アドレスにカウンタを組み込み、書込ボタンなど押すたびに自動的に+1してくれればいいのにと思いつきます。
ランダムアクセス的にアドレスを指定するのはトグルスイッチで、
そのカウンタの開始値の設定もトグルスイッチで、
あとは、書込ボタンを押した後に+1される。
読み出しは、書込を伴わない+1だけのボタンが有ればいいな。
色々凝り始めて、結局は・・・複雑になりそうです。
キーボードから打ち込むのが楽でいいなと考えるけど、それはまた別バージョンです。