vintagechips連ドラを見てると最終回のひとつ前に無理やりな大事件が起きるでしょ、あれいらないよね。みたいな大事件が発生。ROMのプログラムが完璧に動くのにDRAMに読み込んだプログラムが動かない。DRAMの制御回路を精査すると、命令を読み込んだあとリフレッシュへ移るところで両方のRASがつながっちゃってる。ここは本来、MREQをかまして区切りを入れなければならないが、それが入っていない。下の図はたぶんこうなっているんだろうなという想像で描いており、実測値ではありません(実測し忘れた)。ことで制御回路を次のように再再再修正。MREQをかますところでNANDを使ったから、RASに合わせてMUXとCASを上げるNANDがひとつ足りなくなり、MUXだけダイオードで上げている。長きにわたりああだこうだと検討した時定数も計算し直し。手間をかけたあげく何だかダサい回路になってしまったが、LS00とLS04を1個ずつだけで組み立てれば誰がやってもこうなると思う、知らんけど。これはきっちりロジアナで観測したやつ。オシロスコープの波形もどうぞ。これはMREQをトリガにしてRAS、MUX、CASを観測し、合成したやつ。目盛はX軸50n秒、Y軸5V。立下がりは計算より早めだが規定の範囲内。立上がりは、苦し紛れにダイオードで上げたMUXのほうがNANDで上げたのより早いや。誤差の範囲だけど、こんなことならCASもダイオードで簡単にやればよかったかな。してついにSBCZ80が完成、したのに調子に乗って余計なことしちゃう性分なんだよね。プリント基板を作り直してRTSとCTSをつなぐソルダバッドを追加。これ、シリアル端子のRTSが開放になっちゃうときつなぐんだけど、普通のUSB-シリアル変換ケーブルを使えばいらない。いらないのにうっかりつないだら普通のUSB-シリアル変換ケーブルのRTSがショートして壊れる。ああだめだ、またプリント基板を作り直し。リビジョン番号が無駄に上がっていくぞ。見てもらったのが倍速のデータだからこれもクロックのソルダバッドを切った貼ったして倍速にしたやつ。Z80とSIOは6MHz版、ROMも念のために比較的高速なEEPROMを取り付けてある。これ見よがしの頑張りました感が出てるよね。個人的には昔ながらの標準クロックでのんびり動かすほうがおすすめかな。SBCZ80全回路図はこちら(別窓でPDFが開きます)子供のころさ、時計やらラジオやら、そこらへんにあるもの片っ端から分解して中身を見てたんだよね。狭いところに部品がいっぱい詰まってるでしょ。ボクもああいう風に作ってちゃんと動かせる大人になりたいなぁと思ったわけ。SBCZ80はこのブログの製作物でいちばんたくさんの部品を使っている。子供のころ夢見た大人になれただろうか。vintagechipsSBCZ80は完成したと2回も宣言しているとおりなかなか完成しない。今回もまた問題はDRAMの制御回路。格安のロジックアナライザでRAS、MUX、CASの完璧な動作を確認しているが、ほかの製作物をやっているうちにロジックアナライザの精度に疑義が生じた。そこで細かいところのタイミングを改めて格安のオシロスコープで観測した。オシロスコープの波形がロジックアナライザの波形とかなり違うため「SBCZ80を再検討」で再検討した回路を再再検討。途中のあれこれを省略して結論だけ言うとC5の10pFを22pFに変更した。最終的な波形を下に示す。X軸目盛50n秒、Y軸目盛5V。RAM(赤)をトリガにしてRAS(黄)とMUX(青)とCAS(緑)を個別に観測して合成。オシロスコープの波形はロジックアナライザの波形よりLの期間が長い。DRAMのアクセスタイムは150n秒だからこの調子ならZ80を10MHzで動かしても大丈夫。いやSIOがついてこれらないね。RAS、MUX、CASの間隔をもう少し広げて余裕をとろうか。みたいな具合で、SBCZ80は現物が正しく動いているにもかかわらず設計が完成しないのだ。vintagechipsWRT8755(8755書き込み装置)は手作り基板で動作確認した製作物の焼き直しだからちょろいと思っていたら唯一の変更点、書き込み電圧25Vを作る昇圧回路でつまずいた。詳しく言うと製作過程のテストではきっちり25Vを出していたのに完成したら30V付近をふらふらして安定しない。しかたなくアドリブで変更したかもしれない部品をもとあったんじゃないかと思われる部品に戻してみながら原因を追究。記憶が曖昧で迷走を極める。スルーホールにハンダ付けした部品を取り換えるという苦行に耐えて数日、原因が判明。ICソケットのMC34063をNJM2360に挿し替えたら安定的な約25Vが出た。MC34063とNJM2360はピン互換だが電気的特性に差異があるらしい。MC34063は手持ち5個が全部ダメ、NJM2360は手持ち2個が全部OK。SBC8080の12Vの昇圧回路では問題にならなかったから、電圧が出力可能な上限(仕様では40V)に近づいて差異が顕著になったようだ。検討を要する問題があとひとつ。ときどき、書き込みを指示したとたんリセットする。書き込みでは昇圧回路の負荷がビシバシ切り替わる。昇圧回路は電圧を維持するためにそのつど大きな電流を消費し、電源を瞬断させているのだと思う。そこで、普段からある程度の負荷がかかるよう電圧調整用の抵抗値を小さくした。現状、普通に使えているので、まだ多少の不安はあるがこれをもって暫定的に完成とする。回路図-PDFの回路図ガーバーデータ-WRT8755.zipソフトウェア-Writer55fw.X.zipここへ至る過程で多数の8755を破壊した。中にはほぼ正常に見えて一部だけ壊れている8755があったらしい。いう8755へ書き込みをするとPIC18F4525のファームウェアが書き換わり、書き換わったPIC18F4525が8755を壊すという悪循環に陥る。現在、怪しい8755を廃棄し、PIC18F4525にファームウェアを書き直して、ようやく平穏な日常を取り戻した。こんな状態なので、もう少し使い込んでみるまで、きっぱり完成とは言い難い。vintagechipsこのブログを始める時点でもう所有していた、いわば創業メンバーのHD68P05V07。いままで話題にしなかった第1の理由はプログラミングモデルがシンプルすぎてまともな仕事をやらせる自信がなかったから。実質2本の8ビットレジスタだけで動かさなければならない上にPUSH/POP命令がなくて使い回しが難しい。あかん、と思っていたらcafe2.54さんがブログに<HD68P05V07で工作>を投稿してくれたんで、じゃあボクもやってみる。いままで手を付けなかった第2の理由は、やろうと思えばいつでもできそうだったから。ピギーバックって電源だけつなげばすぐ動くイメージだよね。実際はクロックジェネレータの外付け部品とかリセット回路とかが必要だし、電源まわりに電源スイッチとパイロットランプを付けようとすればなおのこと面倒になる。揃えてみた部品が下のとおり。あらら、抵抗2本とICソケットとピンソケットとユニバーサル基板を忘れてる。実体配線図と回路図を下に示す。実体配線図は秋月電子通商の片面ガラスCタイプのユニバーサル基板に組み立てる想定で描いてあり、配線しやすいよう底面図とした。部品の定数は回路図に書き込んである。リセットスイッチと直列に入れてあったのだが大した働きをしていないから省略した。その点と一部の抵抗の定数はこのあと示す製作例の写真と一致していない。雑な設計で作り始めてからいろいろ見直す性分。別窓でPDFの回路図を開く別窓でPDFのHD68P05V07日本語データシートを開くHD68P05V07の両側には必要に応じて回路を追加できるようにピンソケットを立てておいた。このピンソケットは普通に取り付けたらHD68P05V07が押し広げる格好になってしまったので、これから作る人はユニバーサル基板の穴の径が許す限り広げて取り付けるほうがいい。そのほかDCジャックやタクトスイッチの脚がユニバーサル基板にはまらないなどいろいろな問題に直面するだろうが、そこは各自の工夫でうまいこと解決してほしい。これで何をやるか、作ったあとで考えるのが趣味の電子工作。ハードウェアはUSB-シリアル変換ケーブルを下のとおりつないでおしまい。あとはソフトウェアシリアルでやる。目標は、1文字出力を作って文字列を出力、ついでに1文字入力も作ってエコーバックを成功させる。製作の担当者としてはそこまでが業務範囲であとは知らんというのがこのブログの方針。ソフトウェアシリアルは過去に何回か成功させていて複数の作り方を承知している。タイマ割り込みを使う方法が見た目かっこいいが速度が出ない。愚直に命令を並べ、実行クロック数を数えてタイミングをとることにした。この方法は、普通の人には簡単だが、そそっかしいやつはよく足し算を間違える。UV-EPROMを消しては書いているうちにEEPROMが使えるんじゃないかと思って試したらなんとW27C512まで大丈夫なことがわかった。WORLDとエコーバックテストに成功。アセンブリ言語のソースHELLO05.asmをGistにあげておく。入出力に使うポートはどこにでも設定可能。これがソフトウェアシリアルの利点だよね。ひとつ残念ながら文字列出力をサブルーチンの形にまとめられなかった。そこはプログラミングモデルがシンプルすぎるHD68P05V07の限界。面白そうだから作ってみよう、なんていう人はいないと思うが、レポートの様式としていちおう再現性を担保しておく。HD68P05V07は若松通商に在庫がある。ROMは本来2732を使うのだが前述のとおりW27C512が使えて、そのほうが安いし便利。後半の$F000以降が有効で、それより前は無効。W27C512はオレンジピコショップで販売している。千石電商の2件だけで間に合うはず。このブログでは動作確認に成功したあと次のふたつをやることが恒例になっている。ひとつはプリント基板を頒布すること、なんだけど今回は手配線しても大した手間ではないからやめておく。ひとつは得意満面で自慢すること。vintagechipsSBCZ80は正常に動作していったん開発を終了したが、その後、DRAMの制御回路がまずいんじゃないかというご意見をいただいたので再検討した。ご意見の趣旨を説明しておくと、下に示す部分で前のCASが終了しないうちに次のRASが始まるおそれがあること。現状、RAS、MUX、CASを下げるのと同じ時間差で上げているが、上げるほうはいっせいに上げるべきだというわけ。ご意見をいただいた時点でDRAMの制御回路は下に示すとおり。RASからMUXまで46n秒、MUXからCASまで52n秒で合計98n秒。許される時間差は最大100n秒だから、どうにか間に合っているもののギリギリ。ちなみに、ご意見ではMREQからRASまでの時間を足してぜんぜん間に合っていないといっているが、RASが遅れた分は次のRASも遅れるわけだから考慮しなくていいと思う。この制御回路はコンデンサC5とC8を調整して最終的に時間差を合計60n秒まで縮めた。それで正常に動作し、オシロスコープで波形を観測してもまったく問題がない。設計の目標はDRAMが動くいちばんシンプルなロジックだったから、これをひとつの答えにしようと思う。RAS、MUX、CASをいっせいに上げるべきだという意見は正論だし、万が一、できないからやらないんだと思われても困るので、下に示す回路を作った。試作機はもちろん正常に動作した。正論に近づく方向で作ったんだから。部品に変更がないためプリント基板はそっくり。抵抗とコンデンサの位置が微妙に違うのとリビジョン番号が03から04に上がっている。痛いな、これで15ドルだよ。いうわけで似たようなのふたつも作っちゃったな。いいやZ80が好きだから。したら正式リリースの段階で出版社がリビジョン04にしろっていうかもしれないし。vintagechipsザイログのZ8002を採用したコンピュータSBCZ8002が完成し、プリント基板の頒布をピコショップ(新店舗)にお願いした。SBCZ8002は簡易モニタを備え、単体でメモリの読み書き、HEXファイルのロード、サブルーチンの呼び出しができる。製作には28C16とPIC12F1822とGAL16V8の書き込みが必要で、ごめんね、誰にでも簡単とは言い難い。●製作と運用に必要なファイル部品表-sbcz8002_partslist.pdf回路図-sbcz8002_sch.pdfデータパック-sbcz8002_datapack.zip●SBCZ8002の製作1.部品表にしたがって部品を揃える。2.データパックのファームウェア等を書き込む。Plusがすべてに対応しているという情報をいただきました。3.部品番号で照合し、プリント基板の所定の位置に取り付ける。●SBCZ8002の運用1.部品表にしたがって運用に必要な製品を揃える。2.セットアップする。電源スイッチを入れる3.簡易モニタで遊ぶ。●独自のアプリの開発SBCZ8002のアプリおよび簡易モニタのアプリはgcc(2.9だけど)で開発できる。開発の手順と実例はこちらの投稿を参照SBCZ8002は世界でいちばん貧弱なZ8002マシンを目指しており、メモリが小さいし、インタフェースがさびしい。それでは満足できない人がいると思うから、Z8002の両側にピンソケットを立てておいた。さあ、ドータボードでも作って好きなように拡張しやがれ。vintagechipsSBCZ8002のアプリはFedoraCore9とz8kgccのクロス開発環境で能率的に開発することができる。実際、簡易モニタmonz8kが比較的短時間で完成した。その開発工程が頭から消えてしまわないうちに、クロス開発環境の要点をまとめておこうと思う。1.クロス開発環境の構築Z8000のクロス開発環境にしたがいクロス開発環境を構築。2.開発用のディレクトリを作り開発に必要なファイルを保存データパックのsbcz8002.tar.gzをホームディレクトリに置く。以降のコマンドを「端末」から入力。sbcz8002.tar.gz開発用のディレクトリへ入ってファイルを確認。sbcz8002ls●標準アプリと簡易モニタ用アプリSBCZ8002のROMに書き込んで実行するアプリを標準アプリと呼ぶ。簡易モニタでRAMにロードして実行するアプリを簡易モニタ用アプリと呼ぶ。標準アプリに関係するファイルは次のとおり。sbcz8002.x-標準アプリのROMイメージを作るリンカースクリプトsplitとsplit.c-ROMイメージを偶数/奇数に振り分けるプログラムとソースmonz8k.*-簡易モニタのソースと開発の過程で生成されたファイルmonz8k_even.binとmonz8k_odd.bin-偶数ROMと奇数ROMのイメージ簡易モニタ用アプリに関係するファイルは次のとおり。monapp.x-簡易モニタ用アプリのHEXファイルを作るリンカースクリプトhello.*-簡易モニタ用アプリのサンプル標準アプリと簡易モニタ用アプリは開発の手順が少し違う。標準アプリの開発手順を述べ、次に簡易モニタ用アプリの開発手順を述べる。標準アプリはZ8002のリセットによって実行されるためスタートアップルーチン(リセットベクタとスタックポインタの設定)が必要。3.C言語のソースを記述する先頭にこんな感じでスタートアップルーチンを記述。_main");ポートの入出力はこんな感じで記述。char)value));}一連の操作をできるだけ簡単に済ませるため、ソースはひとつのファイルにまとめ、標準ライブラリを使わず、参照はすべてこのファイルの中で解決する。4.ROMイメージの生成C言語のソースから偶数/奇数ROMのイメージを作る工程は次のとおり。ソースが正しく記述されていれば機械的な操作で済むが、実際は各段階でエラーが発生しがち。簡易モニタ用アプリはスタートアップルーチンやポートの入出力などハードウェア寄りの処理がいらない。コードは%8000から配置され、実行開始アドレスも%8000となる。3.C言語のソースを記述する簡易モニタ用アプリは簡易モニタの内部関数を呼び出すことができる。内部関数のアドレスは次の操作で表示される。worldを表示する記述例hello.cは次のとおり。world\15\12");}4.HEXファイルの生成hello.cからhello.hexを作る操作は次のとおり。hello.hex率直なところ、以上の説明があらゆる場合に十分かどうかはわからないし、達人が見たらだっせーことやってるなと感じるかもしれない。しても、この手順で今のところ問題が生じていないのは事実。少なくとも簡易モニタを拡張して普通のモニタへ発展させることはできると思う。検索:お知らせツイッターはこちらSBC6800製作実例はこちらSBC6809製作実例はこちら豊四季タイニーBASICはこちらコメントには必ず返信しておりますが、返信への返信には返信しておりません(永久ループを防ぐため)。使用に同意したとみなされます。