シンプル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だけのボタンが有ればいいな。
色々凝り始めて、結局は・・・複雑になりそうです。
キーボードから打ち込むのが楽でいいなと考えるけど、それはまた別バージョンです。
シンプルZ80マイコン(6)
2025.09.12
ここは、あとで使うかもしれないから(拡張とか)、直接+5Vにつなぐんじゃなくてプルアップ抵抗を入れておこう。そうすれば後からスイッチをつないだりするのに便利よな。
・・・そんな感じで進めていくと、どんどん部品が増えてきます。シンプルから遠ざかります。
いまから作ろうとしている物のイメージというか目標を決めて、これはこの用途にしか使わないから余計なものは付けないという割り切り、決心が必要です。
フリーランニングから始めて、そこから最低限必要なものを足していくのもよいでしょう。
Z80だけを動かしてみます。ブレッドボードに差し込む。
+5V、GNDをつなぐ。
CLKをつなぐ。
INT, NMI, WAIT, BUSREQ, は使わないので+5Vにつなぐ。
出力ピンとなるアドレス(A0-15)と、HALT,MREQ,IORQ,RD,WR,BUSACK,M1,RFSHは開放でOK。
データバス(D0-7)は出力になる事もあるから、壊さないようにとりあえず1KΩの抵抗を通してGNDにつなぐ。これはNOP(00h)を入力することになります。
あとはRESETで、とりあえず簡易的なリセット回路で良いので、よくみかけるあれをつないでおきます。(抵抗、コンデンサ、ダイオード)
アドレスピンのどれかにLEDをつなぎます。A14か15あたりなら点滅が見やすいかもしれません。
さあ、あとは電源をつなぐだけ。
アドレスの変化を目で見ることができるでしょう。
基本的には、このままの回路でいいやとなります。
割り込み使わないからINTとNMIは+5V直結
WAITも使わない、DMAはリセットだけにするからBUSREQも使わない。+5V直結
・・・そんな感じで進めていくと、どんどん部品が増えてきます。シンプルから遠ざかります。
いまから作ろうとしている物のイメージというか目標を決めて、これはこの用途にしか使わないから余計なものは付けないという割り切り、決心が必要です。
フリーランニングから始めて、そこから最低限必要なものを足していくのもよいでしょう。
Z80だけを動かしてみます。ブレッドボードに差し込む。
+5V、GNDをつなぐ。
CLKをつなぐ。
INT, NMI, WAIT, BUSREQ, は使わないので+5Vにつなぐ。
出力ピンとなるアドレス(A0-15)と、HALT,MREQ,IORQ,RD,WR,BUSACK,M1,RFSHは開放でOK。
データバス(D0-7)は出力になる事もあるから、壊さないようにとりあえず1KΩの抵抗を通してGNDにつなぐ。これはNOP(00h)を入力することになります。
あとはRESETで、とりあえず簡易的なリセット回路で良いので、よくみかけるあれをつないでおきます。(抵抗、コンデンサ、ダイオード)
アドレスピンのどれかにLEDをつなぎます。A14か15あたりなら点滅が見やすいかもしれません。
さあ、あとは電源をつなぐだけ。
アドレスの変化を目で見ることができるでしょう。
基本的には、このままの回路でいいやとなります。
割り込み使わないからINTとNMIは+5V直結
WAITも使わない、DMAはリセットだけにするからBUSREQも使わない。+5V直結
シンプル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回路がドライブするから、これらは不定になりません。
2025.09.13 16:41
|
