Z80ゲーム機開発

2013年6月14日
完成させる自信はまだ無いけど作り始める。



2013年7月9日
もっとシンプルなやつ、Z80とROMだけ。データバスにLEDを付けて、
LD (8***h),Aとかで、A15がONの時、LEDを光らせるとか。


2013年7月20日
新品イレーサ。安くて大容量で手軽なフラッシュメモリが大量に売られているのに、なぜ未だに手に入るのか謎。
「ROMイレーサでお待ちのお客様!」と呼ばれて恥ずかしかった。理由があるのなら知りたい。そしたら堂々と買える。



2013年7月20日
リセット回路。シュミットトリガを一つ追加するが、なぜか直ぐ立ち下がってしまう。二つ以上入れると求めてる波形になる。



2013年7月21日
Z80の動作テスト。クロックと、リセットを供給しているだけの回路。
正常にリセットしたらSPが勝手に上昇するはずだから、アドレスバスに繋いだLEDが点滅すると思う。だがそうならない。



2013年7月22日
Z80、Lチカ。リセットが負論理だったので勘違いしていた。
開始するにはLow⇒Highに切り替える必要がある。信号線入力ピンに直接LEDをつけ電圧降下、データバスはGNDに(NOP命令)。
いくつか直すと安定して狙い道理の動作をする。



2013年7月23日
003 Z80動作テスト。
LD A,0
R01:
INC A
LD (0000H),A
JP R01
LS373を追加して、WRの時だけ、データバスをLED点等させる。




2013年7月24日
004 Z80動作テスト。
0000:
JP 0000
ようやく納得の行く結果が得られる。スペック。
CPU Z80 / RAM 0Byte / ROM 3Byte / 表示 8bitLED / RDで読み出した値を表示する。



2013年7月27日
プログラムビューワ。アドレス0には3E(0011 1110)が入っているはずなのに、7C(0111 1100)が出てくる。
散々テストしたはずなのに、気が付いたら上下反対になっていた。



2013年7月28日
007 Z80動作テスト。
0000:
LD A,C6H
LD (8000H),A
JP 0000
ライトの値をLEDで表示するプログラム。




2013年8月1日
Z80工作018
LD A,5CH 3E 5C
0002:
LD (8000H),A 32 00 80
LD A,(8000H) 3A 00 80
JP 0002H C3 02 00
バスの競合はないが失敗してる




2013年8月4日
Z80工作022
LD A,5CH
0002:
LD B,FFH
0004:
LD (8000H),A
LD A,(8000H)
DJNZ -8
INC A
JP 0002H
RAMの読み出しタイミングでのLED表示




2013年8月4日
Z80工作。現在のスペック。CPU:Z80(4Mhz), RAM:32Byte, ROM:32Byte, 出力装置:LEDx8本, 入力装置:なし



2013年8月5日
VRAMを追加。RAM&VRAM共有でBUSREQを使ってウェイトをはさむ方法を考えていたが、
かえって回路が難しくなりそうなのでRAMチップ自体を増やすことに。



2013年8月6日
74LS393。4bitカウンターをタクトスイッチでカウントアップする回路。
チャタリング抑制のつもりでコンデンサを追加してやったら、反応が無くなったり、過剰反応したりと返って不安定になる。



2013年8月9日
ブレッドボードには、見た目はほとんど同じなのに複数種類があるらしい。
相互接続できないし、電源ラインの穴の位置がずれているものがある。要するに粗悪品なんだとおもうけど。



2013年8月10日
LEDディスプレイボードをつくる。前回のなんちゃってPSG工作のときより格段に半田付けが進歩してる。



2013年8月10日
Z80工作用、LEDマトリクス型ディスプレイ装置の開発中。デコーダ(74LS154)を手に入れねば。



2013年8月10日
今回の買出しの一番の目的だった、LS154が無い。



2013年8月11日
『あ』が表示された。LEDディスプレイ表示回路。55fpsで1画面描画。



2013年8月11日
表示信号の一本(1ライン8ドット)分の波形を見ると、当たり前だけど、点等(Low)は8分の1の時間だけ。
8分の1の明るさになってしまっている。



2013年8月11日
テストしたのに動作がおかしい。同じ型番の別のLEDマトリクスで試すと正常。
つまり不良品だったと。ぁあもう半田付けしたあとなのに〜。



2013年8月12日
一晩かかって、ようやく取り外し完了。次はソケット経由にしよう。



2013年8月12日
長細い『あ』の表示。74138をもう一つ追加し、8x16ドットのLEDディスプレイに拡張。



2013年8月12日
前のはアノードコモン状態だったのでLEDマトリクスを取り外し90度回させて付け直した。
カウンタ(走査線)が3bitから4bitになったので、更にLEDへの通電時間は半分になったが、輝度が半分な感じがしない。



2013年8月14日
M27C256のOutputVoltageは3.6V 、計ると5V近く出ている。
一方、74LS373のOutputVoltegeは3.1V、計ると2.8V。
後者はまぁ範囲内だが前者は大きくオーバーしている。LEDが付かないので調べた。



2013年8月14日
表示回路。



2013年8月18日
Z80工作。行き詰まってまた0から。
Z80 User's Manualにリファレンス回路が乗っていたので、それを参考に接続。004の正常動作。
/MEREQ=(/RD+/RFSH)が正しく、RDとMEREQの意味を反対だと認識していた。



2013年8月18日
ブレッドボード。台の金属部分を指で触るとLEDが点等する。
そんなバカな。今まで再テストで動作が変わってた最大の理由はコレか!



2013年8月18日
クリスタルオシレータ。激オソになるパターンの外、波形が波打つパターンがある。
クリスタルがサイン派を発生させることがあるのかどうか知りたいところだけど・・



2013年8月20日
Z80工作。BUSREQを手動スイッチで入れBUSAKの応答を確認。280ns。



2013年8月22日
表示装置を実験しやすいように上下反転しても使えるように拡張



2013年8月24日
Z80工作028
0000
LD HL,8000H 21 00 80
0003
LD (HL),42 36 42
JP 0003H C3 03 00
書込みタイミングの信号を確認。




2013年8月25日
全く同じ部品と同じ回路なのにも関わらず、上は不安定で下は安定。部品を相互に入れ替えても症状は変わらず。



2013年8月25日
チャタリング防止回路の不具合。調子の悪いクリスタルオシレータをつけるとノイズがのり、
外すと綺麗な波形になる。オシレータが原因で間違い。



2013年8月25日
チャタリング防止回路。
ボタンの右側に接続していたコンデンサを左に持ってくると、完全な綺麗な波形になってノイズが載らなくなった。



2013年8月25日
恒例の『1から組みなおし』で、ノイズ源を見つけよう。
波形を見ながら同じように組み上げていけば、ノイズが発生する(しだす)瞬間を確認できるはず。



2013年8月25日
オシロスコープに限らない。コンデンサをボタンの右に配置した場合だとノイズが増えるのは、
コンデンサのGND側がぐるっと遠まわしになってその間、外の回路の電力消費をノイズとしてひらっていたと。



2013年8月25日
ジャンパーでショートカットを作って、安定動作を確認。
波形を見るとノイズは無くなってはいない。ノイズの山が小さくなっている。
電源が並列になって片方にノイズが載っているから半分の高さになったということか。



2013年8月25日
試しに強引に全部のICに0.1μFのパスコンをつけてみた。結果は変わらず。



2013年8月28日
リセット毎に、なぜかデータバスのbit4に信号は入らないことがある。
信号にノイズが載っていないから、この信号を出しているROM、
またはその先のCPUが不安定と言う事になる・・・もう空で覚えてしまうくらい何度も組んでるんだけど。



2013年8月31日
RAMのオーソドックスな書き読み手順は、書きCE(OFF)⇒R/W A0~ D0~ ⇒CE(ON)。
読みCE(OFF)⇒R/W A0~ ⇒CE(ON)。の確認。



2013年8月31日
ミニマムな回路にしてもまだZ80は熱くなる。
4Mhz,5Vだったらこんなもんなのかな?と納得しかかっていたら、ここでも24Vを発見。
リセット回路に問題がある。ここはかなり初期に確定した部分だから、ずっとこれで実験していたことになる。



2013年8月31日
Z80工作。ボタンで発生させるBUSRQのバス割り込みでRAMを読み出す実験はOK。
割り込み解除方法に問題があるらしく、連打するとおかしくなる。



2013年9月5日
Z80工作027
0000
LD A,5CH
LD (8000H),A
LD A,89H
LD (8001H),A
JP 0000H
BUSRQで割り込んでRAMの内容を表示する回路。整理していたらいつの間にか正常動作。



2013年9月5日
Z80工作。念願のLEDディスプレイが装備される。
spec CPU:Z80(4Mhz) ROM:128byte / RAM:0byte / VRAM:16byte BUSREQ割り込み描画。



2013年9月7日
PSG装置にリベンジ中



2013年9月14日
ピッチは2.54mm何だけど、ピンが平べったくて基盤の穴ギリギリ押し込む感じ。



2013年9月15日
74LS138。出力ピンの電流を測ると23mA~26mA。
と言うことは、ICの内部抵抗が200Ω程度ある、と言うことになるのか。
オープンコレクタ的な増幅器として使うには0Ωとかを期待していた。



2013年9月22日
Z80工作。LEDマトリクスの表示回路だけブレッドボードから移行



2013年9月29日
メインボードもブレッドボードから移行。



2013年9月30日
先は長い。



2013年10月2日
Z80工作。029。アドレスバス7bitのブレッドボードと同じ回路にしても動作がおかしい。
大方正常な信号が出ているように見えるが、IORQがなぜか発生する。
使われていないはずのA7~A14にも信号が出ている。



2013年10月6日
Z80工作。A15と使われていないA11に全く同じ信号が出ている。
どちらも未接続だから、BUSRQも切って(High)にしてある。
プログラムで出力するように書かないと出ないはずだが出る。



2013年10月8日
耐熱ワイヤーと新しいストリッパーのお陰で、前は一晩掛かった32本の結線が一時間程で終わる。



2013年10月8日
さっき作ったコネクタを使って表示基板の動作確認。



2013年10月11日
同じサイズの基板を買ったのに、メーカーが違うと穴の位置が違って使え無いとか



2013年10月13日
5本のアドレスバスから4つの/CEをセレクトをする回路。
ソフトウェアならif文を4つ並べるだけだけど、ハードだと7つのORにNOTが2つ必要。7404一個と7408が2つ。
当然基板のどこかに場所を確保して配線を半田付けする必要がある。



2013年10月15日
配線が汚くて、一つ調べるのにもやたら時間がかかっている。ICも裏表が反対だからその混乱もある。
回路図をちゃんと書いてそれをベースに考えた方がよさそう。



2013年10月16日
Z80工作。回路図を起こしていて、結線ミス一つと、設計ミスが見つかる。
74373は双方向じゃないから、ジョイスティックデバイスをここには繋げられない。



2013年10月17日
現状相当の機能の回路図に起こす。比べると断然観やすくなった。



2013年10月20日
74245のDIR双方向切り替え検証。DIRをH/Lで違うLEDが点等することを確認。



2013年10月20日
表示されなかった6ライン目に過電流を流してやると7個まで点等するようになる。不思議だ。
実験で酷使してるLEDはこんなにデリケートじゃないんだけどな。



2013年10月20日
全点等テスト。6列目に接続すると右半分が消える。ショートしているように見える。



2013年10月29日
G80、ディスプレイユニット。
頭で考えているといろんなアイデアが出てくるが、最初に手を付けた方法で崩れていない所まで手を付けたくなる。
脱線ややり直しは良いけどちゃぶ台返しは良くない。趣味でもそれはダメ。只の迷走だから。



2013年11月10日
Z80工作。色々再勉強して改めて回路を組みなおすが、以前の基板と同じくA8~A14にありえない信号が載るようになる。
前はブレッドボード版は載らなかった。



2013年11月10日
同じ電極を繋いでいるのに、光る場所が違う。



2013年11月15日
トランジスタで極性を入れ替える実験。二箇所以上光らせようとすると失敗する。何か根本的なミスをしていそう。



2013年11月18日
555によるLEDの点滅を試す。



2013年11月18日
極性を入れ替える実験。90度回転するはず。トランジスタを再勉強して試すが結果は同じで関係ない部分も光る。
ただ無関係のところは暗い。漏電しているように見える。



2013年11月26日
記録を調べると9月5日の段階で今と同レベルの物が動いていた。 
大差無いようだけど前のは色々雑。今のが82本の抵抗が使われているのに対し、前のは一本だけ。



2013年12月1日
波形が乱れる原因をさがしていたら壊れた抵抗に行き着いた。と思ったら僅かに色違い。紛らわしい。



2013年12月22日
16個のLEDが、 ナイト2000のように往復しながら点滅する回路。



2014年4月18日
行き詰って中断していた電子工作。Z80バス割り込みを使ったダイナミック点灯で8x16の電光掲示板を表示出来た所まで。
キー入力割り込みをみ追加しようとして思考の無限ループに陥ってしまった。今なら解決できるか。、



2014年4月20日
Z80工作。取りあえず考え付くIOの0xFFFFにボタン8個をマップする回路。
今気が付いた、IOポートにマップするのならアドレスバスを全部読む必要が無いな。



2014年4月20日
Z80工作。IOポートに入力ボタンを8個接続する回路。
これで良い、チップが2個減った。拡張性も無くなるけど、そういうことは将来考えるべし。



2014年4月22日
Z80工作。 IOポートに繋いだボタンを読み込んでLEDに出力するんだ!いぇ~! ~
0000 IN A,(0)
DB 00
OUT (0),A D3 00
JP 0000H C3 00 00



2014年4月23日
Z80工作。8個のボタン入力を呼んで1行目に表示するプログラムが走っている。ようやくコンピュータになってくれた感。



2014年8月12日
8x16で『あ』の字表示。アノードカソードが反転したLEDマトリクスが手に入ったので試す。
極性を変える必要が無くなってトランジスタ24個分の配置面積が浮く。試作用はコンパクトで無いと。



2014年8月14日
8x16の表示装置に、7segを追加し『4』を表示。



2014年8月15日
オシレーター。丁寧な箱に入ってて使うのが惜しくなる。



2014年8月15日
Z80。PSG(YM295)制御回路。リードはROMからのみライトはPSGのみの単純な設計。多分動く。



2014年8月15日
やたら明るい7SEG。4.7KΩを繋いで丁度良いくらいの明るさ。これならトランジスタで増幅してやる必要も無い。



2014年8月23日
Z80+PSG装置にボタンを8個追加した回路。I/OのRDでボタンの読み込み。多分動く



2014年8月24日
ボタンを4つにして、PSG音源試作が一応完成。あとはプログラム。



2014年10月11日
移し替え作業終わり。アップすると間違いに気がつく。。



2014年10月11日
眩しい位の新品ROMが10個届く。



2014年10月12日
安っぽくてブレッドボードで抜けやすいソケット。使うことは無いと思ってたけど、
手で簡単に抜き差しが出来るのでROMには丁度良い感じに。何でも使い所が有る物だ。



2014年10月15日
4x4LEDマトリクスを追加したブレッドボードとテストプログラムを作って動作を確認。
アセンブラがあるとハンドアセンブルに比べてテストプログラムがすごく気楽。
前はミスると原因特定が困難になるから慎重さが必要だった。



2014年9月15日
『あ』表示のテストROMも動作した。ようやく念願のプロトタイプが完成。
Z80+8ボタン+PSG+16x8ドットディスプレイ+7セグ表示。



2014年10月16日
4x4のLEDマトリクスモジュールの制作。モジュール化したら楽になると思って試す。
そのままブレッドボードに刺してもテスト出来る様に足を付ける。
モジュール化することを前提にしたら回路図もモジュール化出来るなと。



2014年10月17日
4xLEDマトリクスが完成したけど、一個だけ通電はするけど点灯し無いLEDが有る。半田付けの熱で壊れたのかも。



2014年10月17日
本当は三角形に点灯するはず。一個LEDが潰れたのが原因なのか、
そのLEDの縦横の他のLEDはつきっぱなしになってしまう。
しかも明るい。どういう理屈でこうなるのか。



2014年10月18日
壊れたと思ってたLEDが短絡していた。両方直る。



2014年10月21日
アドレスバスとデータバスを半田付け。



2014年10月22日
因縁のプル抵抗を大量取り付け。
丁度ソケットの間に抵抗一個横たえられるスペースがあった。おかけで配線量が大分減る。



2014年10月25日
CPUボード側は全て配線終了。
PSGもこっちに乗せて有るので、電子オルゴールのテストプログラムは動作するはず。



2014年10月25日
回路図チェック。



2014年10月28日
デバッグしやすい様に、パワーLEDを付けたり、
電源スイッチを付けたり改良が続くが、なかなか動いてくれ無い。



2015年5月9日
ブレットボードへの再移植版。動いた。



2015年5月9日
裏返した状態。
基盤もブレットボード見たいに表に配線出来たら、見やすくなるんじゃ無いかとか思案する。



2015年5月6日
半年後の再開。前はブレッドボードの試作で完成後、
CPUボード側を半田付け基板化したが上手く行かなかった状態まで。
今回は半田付け基板と同じレイアウトでブレッドボードで再現させて原因調査しようと思って始めたところ。



2015年3月1日
74LS04。10KΩのプルダウンでも、出力は0Vのまま。5KΩでようやく反応。
内部抵抗は7KΩ位あると言うことか。想像してたよりかなり大きい。



2015年8月14日
引越し後の再開。BB版の動作とハンダ版の非動作を確認と。前はここでプチコンを触り出していまにいたる。今回はハンダ版のCPU基板側が動作するまでプチコンは封印。



2015年8月19日
結局のところブレッドボードではずっと安定して動作していたと言うこと。ハンダ版が動かないのは接触不良か配線ミスだよなぁ、普通に考えたら。


2015年8月20日
原因の一つが見つかる。真ん中のA8が断然していた。



2015年8月20日
Z80のD0,D1,D2が、メモリのD1,D2,D3、PSGのD2,D3,D0に繋がっていた。無茶苦茶だな。


2015年8月24日
プルダウン抵抗値を確認してたら、10KΩの所、半分の5KΩしか出てないピンが二つ有ることに気がつく。アナログテスターだと大差無いから誤差程度に思ってたけどショートしてると気がつく。調べるとハンダが溢れてた。



2015年8月24日
断線一箇所、ショート一箇所、配線ミス三箇所の修繕をすませ全バス、全信号線、全電源、全プルアップ・ダウン抵抗のチェックを済ませるが、まだ動作せず。決まって/RDに5秒程波形が出た後信号が消えてしまう現象。


2015年8月27日
ようやくハンダ付け基板での正常動作時の波形を確認できた。



2015年8月27日
無事、音が鳴った。最後の問題はいじってる間にリセット信号線が外れ、間違って結線していたこと。
2015年8月29日
パスコン、リセット回路用コンデンサ、電源LEDを切り離し可能な部品にした。



2015年8月30日
スピーカーと、トランジスタのアンプと、ボリュームつまみを追加。RAMも接続して、CPUボードの方が一応の完成。ようやく一歩進んだ。



2015年9月8日
実基板でオルガンROMが動作しないので、左端をCPUボードに見たてたブレッドボードでまた組み直し。二列目がバスに見立ててある。オルゴールROMは動作。



2015年9月8日
実基板でオルガンROMが動作しないので、ブレッドボードで再現するとあっさり動作。同じ事を繰り返してるけど、一歩一歩。



2015年9月8日
実基板のボタン入力が機能する。機能毎にテストした方が早いのは毎度思うんだけどつい全部一気に繋げてしまいたい衝動に抗えず、何度も結線しては剥がしてをやってしまってる。



2015年9月13日
16x8LEDマトリクスの表示回路を分離、ROMから読み出して表示。ブレッドボードとはいえ複雑になると何がなんやらわからなくなる。ボード毎分離すべきだと中断中に考えてたこと。



2015年9月13日
CPU回路にLEDマトリクス回路を接続。あっさり動作。やっぱりブレッドボードでもコンポーネント化した方が良い。



2015年9月13日
わけがわからなくなって、回路図を起こして、ブレッドボードで確認して、コンポーネント化を進めて、それでも改めて見るとノイローゼを起こしそうなくらいごちゃごちゃしている事は変わらない。また剥がすか。



2015年9月20日
やつまた。やっと実基板で表示回路が動作出来た。



2015年9月22日 実基盤での『あ』の表示とキー入力が上手く行く。



2015年9月22日 @yukizokinA0,A1,A2,A3,A4➡︎A3,A2,A1,A0,A4になってた。基板から回路図起こした時に理想配線に置き換えて、結線し直すのを忘れていたらしい。
2015年9月22日
実基板だけでキー入力と16x8画面とPSGサウンドの動作を確認。二年前にやろうとしてた所にたどり着いた。



2015年9月26日
7セグx8個を繋ぐ56本の配線終了



2015年9月27日
7セグ、4x4マトリクスも含む全配線の結線終了した。



2015年9月30日
実基板のみで、2,3おかしな所はあるが全機能の動作を確認出来た。それよりもLEDの明るさがマチマチ過ぎるのが問題。



2015年某日
一応完成したZ80ゲーム機。スペックは16x8+4x4ドットマトリクス画面と、PSGと32KBのROM/RAM。
完成はしたけれどLEDの明るさ画面ムラだらけで残念ながらこのマシン用のゲームを作るモチベーションがでなくなってしまった。