8080の回路図を更新

インテルの8080が最初に動いた約2年前、嬉しさのあまりCPUボードの回路図をよく校正しないまま掲載し、さらにはあちこちへ転載して、数人からお叱りのご連絡をいただいた。ごめんなさい、ありがとう。当該の投稿「8080が動いた」に訂正を書き加えました。ということで、本来なら正しい回路図を再掲載するべきだろうが、その後ちまちまと改良を加えたので最新の回路図を公開する。

sbc8080r3_sch
別窓でPDFの回路図を開く

更新したのは次の4点。第1に、HOLDとHLDAをあるべき形に配線してDMAに対応。第2に、12V電源回路の半固定抵抗と電流制限抵抗を廃止。第3に、-5V電源をTK-80方式に変更して反転ICを廃止。第4に、リセットスイッチとパイロットランプを追加。ヤバイのは-5V電源で、実測-4Vしか出ていない。しかし、現実に8080が正しく動作しているし、毎月1800台が捌けたTK-80で特段の問題を生じていないことからこれでよしとする。取り急ぎご報告まで。

広告
カテゴリー: 8080 | 7件のコメント

6809と6309を判別する方法

6309の偽造品が横行している件、現在は中身が6309Eだからすぐわかるが、今後、手口が巧妙化して6809が使われたとき見破るのが難しい。そこで、SBC6809で動いて63~と68~を判別するプログラムCHK309を作った(OneDriveのCHK309.zip)。参考にしたのはChris Burkeの著書THE 6309 BOOK(PDF)。機械語の$1043が、6309だとCOMD、6809だとNOP+COMAになることを応用している。まずはHD468A09EPで実行、はいOK。

chk309_68

続いてマーキングがHD63C09PのやつをHD63C09EPとして実行。これもOK。偽造品には違いないがHD6809EPで偽造するのに比べたら良心的。というのも、本来、HD63C09PとHD63C09EPは工場出荷価格が同じであり、むしろマーキングの書き換えに余計な手間がかかるから、とうていうまい仕事とはいえない。たぶんE付きがだぶついて処分に困ったものが安く出回っているのだと思うが、それにしても大した儲けは出ていないはずだ。

chk309_63

これでたいていの偽造品は判別できる状況ができた。あともうひとつ63B~と63C~を判別したい。できるかどうかわからないが、やってるぞという姿勢を示すことが偽造品の撲滅につながるだろう。

カテゴリー: 6809, 世間話 | 15件のコメント

SBC6809を改造して6809Eを動かす

困ったことにマーキングが6809で中身が6809Eという偽造品が横行している。それとおぼしきものがとうとうボクの手もとにもやってきた。部品店に「これ偽造品ですよ」というからにはそれなりの確証がいる。本物の6809はSBC6809で動くからすぐわかる。動かなかったとき、ただの不良品なのか中身が6809Eなのかを知るため、SBC6809を6809E対応に改造。PIC12F1822で間に合わせのクロックジェネレータを作って空中配線。

sbc6809_e

PIC12F1822のプログラムをGitHubに置いておく。素人臭いソースだが、確実に動き、これでも500kHzのクロックを出力する。下に示す接続でHD468A09EPが動作。TSC、E、Qは接続先変更、5VとGNDは配線追加、Xは切断、あとは現状維持。GrantのMS-BASIC(ソースとバイナリはこちら)がちゃんと走った。ちなみに、500kHzがことさら遅いわけではない。Altair680なんか500kHzの6800だからね。

sbc6809_e_sch

改造したSBC6809に怪しいHD63C09Pを取り付けてみたら、あらら、動いちゃったよ。つまりこのHD63C09Pは中身がHD63C09EP、いやそれでは偽造する側にメリットがないからHD63B09EPか、ことによったらHD6809EPだ。どうせならEなしで偽造すればバレにくいのに、そこまでの知識はないということか。6809に偽装品が目立つのは、E付きで偽造しちゃったせいでバレやすいというだけなのかもしれない。

hd63c09p_fake

今後は6809で偽造した6309が増えるだろう。両者の違いはネイティブモードへ入れてみればわかるから、いずれ偽造品判定プログラムを書いてみたい。まあボクの「いずれやる」は「やらない」と同義なんだけど。

カテゴリー: 6809 | 18件のコメント

ボクのわがままを許して

HD6303のマニュアルですっかり見落としていたのが下の表(クリックで拡大します)。付け加えると、tomi9jpさんやtendai22plusさんから指摘があったにもかかわらず、しばらくは気が付かなくてたぶんお二人をイライラさせたやつ。この表によれば、SBC6303(マルチプレックスモード)をリセットし続けた場合、アドレスバスはハイインピーダンスになるが、データバスはハイインピーダンスにならない。ブートローダを正しく動かすには両方ともハイインピーダンスにする必要がある、というのが今回のテーマ。

hd6303_hiz

この表の脚注を見ると「次の(1)または(2)の対策を行なってください」と書いてある。英語のマニュアルだと「(1) and (2)」なんだけど日本語のほうをとってどちらか一方でいいと解釈。だから(2)にしたがいAS端子にプルダウン抵抗4.7kΩを付加してみた。AS端子はGNDとほどよい距離にあって抵抗の取り付けは簡単。

hd6303_hiz_r

この状態で電源を入れ、リセットスイッチを押し続けて、データバスにつないだLEDが点灯しなければ成功なのだが、結果は点灯。つまり、データバスはハイインピーダンスになっていない。まあそうだろうな。そもそもAS端子にプルダウン抵抗をつなぐ意味がわからない。ボツに決定。それでも、この試みでアドレスバスがハイインピーダンスになっていることは確認できたからまったくの徒労に終わったわけではない、としておこう。

hd6303_hiz_led

で、今後どうするかということ。すでにtendai22plusさんからユニークな解決方法が提案されていて、tomi9jpさんが検証してくれる流れになっている。そういう状況で、ちょっと勇気がいるのだけれど、正直な気持ちをいっておきたい。SBC6303は過去9回の修正で幅広いソフトウェアに対応し、かつ最小限の部品で動くように練り上げた。その過程を見守ってくれた人たちもいる。土壇場になってブートローダを必要としない人には関係のない機能を盛り込むことはやや抵抗がある。

tendai22plusさんの解決方法はとても面白いし、何より一緒に考えてくれたことに深く感謝している。それはそれとして、ブートローダの問題はブートローダの側で解決したい。tomi9jpさんが指摘してくれたデータバスがハイインピーダンスにならない件はブートローダに3ステートバッファを追加して何とかしようと思う。ごめんね、これがボクの流儀なんだ。ありがとう、みんなの技術に負けないように頑張る。

カテゴリー: 6800 | 4件のコメント

みなさんのおかげ

SBC6303ブートローダは6303のバスがリセット期間中にハイインピーダンスとなる前提で設計をした。だってデータシートの目立つところにそう書いてあるんだから。しかし、tomi9jpさんの検証によれば必ずしもそうはならないらしい。実際に動かしてみて写真付きで解説しているため疑いの余地がない。

さらにtendai22plusさんからも指摘があった。たとえリセット期間中であろうともマルチプレクスモードでEが有効の期間ではデータバスがHになるとデータシートの目立たないところに書いてある。ああ絶望的。ブートローダではなく本体のほうを作り直さなければならない。とうとうプリント基板のリビジョン番号が2桁に乗る。

なるべく小さな修正で済ませたいと思いつつ実験を繰り返したら、ピンが折れ、電線が外れ、どうしたってこれ以上は立ち行かない。一息入れて、ちゃんと修正しよう。そしてもし大きな修正になったとしても現実を直視しよう。

sbc6303_ipl_proto2

SBC6303ブートローダが動かないって愚痴ったらたちまち情報を寄せてもらえたのは良いほうの想定外。ほかにも、コメントするには至らずとも一緒に考えてくれた人がいると思う。本当は時間切れで開発を断念するつもりだったが、みんなに背中を押されて、また頑張ってみようという気持ちになった。

カテゴリー: 6800 | 4件のコメント

SBC6303ブートローダが動かない

SBC6303と並行してブートローダを作っている。ブートローダはArduino Pro miniレベルシフト回路搭載マイクロSDブレークアウト(以下ArduinoとマイクロSDカード)を備えていて、マイクロSDに保存しておいたHEXファイルまたはSファイルでSBC6303を起動させる。試作機のArduinoとマイクロSDカードは純正品だが、Amazonで売っている互換品を使えばArduinoが送料込み350円、マイクロSDカードは送料込み150円。

sbc6303_ipl_sd

試作機の1号機がまともに動かないことは織り込み済み。だとしてもこのプリント基板はいつもにも増してミスが多い。配線の誤りを電線で修正、ハンダ面に取り付ける予定だったマイクロSDカードはArduinoのピンとぶつかることがわかって部品面に仮付け。最悪なのはリセットスイッチ。ハンダ面に配置しちゃったせいで普通に置くとリセットする。

sbc6303_ipl_reset

ArduinoのスケッチはSDカードからHEXファイルを読み出す動作とRAMへ書き込む動作を個別に確認。両方とも正常なのに両方を組み合わせて動かすとSBC6303がうんともすんともいわない。問題がありそうなところを順次コメントアウトしていったら最後に何もしないスケッチが出来上がり、それでようやくRAMがただの外付けRAMとして動いた。本体には存在しないアドレス$0100以降のRAMでHELLO, WORLDを動かしたところ。

sbc6303_ipl_test1

諸般の事情によりSBC6303関係の開発は2月までと期限が切られている。えっと今日は2月33日でしたっけ? とかいう誤魔化しかたもいよいよ限界を迎え、見切りでSBC6303リビジョン9とブートローダのリビジョン2を注文してしまった。SBC6303はたぶん大丈夫。ブートローダはここへ暫定の回路図を置いておき、折りを見て詳細を検討しようと思う。スケッチの書きかたで解決する問題だと助かるんだけどな。

sbc6303_ipl_proto
別窓でPDFの回路図(暫定版)を開く

SBC6303の68系バスは過去にもDRAMをつなごうとして失敗した経緯がある(正確にいうと半分のクロックで正しく動いた)。68系バスは鬼門、というか、何か思いもよらないところで勘違いをしているのかもしれない。だとすると普通の間違いより厄介だな。

カテゴリー: 6800 | 18件のコメント

SBC6303をまたもや修正

SBC6303はリビジョン7のプリント基板に少し修正を加えて完成を宣言、リビジョン8のプリント基板を注文したが、それが届く前にまた修正を思い付いてしまった。リセットが掛かっている間、アドレスラッチの出力が無効(ハイインピーダンス)となるように変更。ラッチしないアドレスとデータは、もともとリセットが掛かっている間は無効。だから、結論をいうとこれでROMのかわりに外部のRAMへプログラムを書き込んで動かせる。

sbc6303v3
別窓でPDFの回路図を開く

簡単に動くはずの6803は、実際、簡単に動いたが、引き続き美しく動かすための修正を繰り返してプリント基板がとうとうリビジョン9に達した。もしかしたらまた修正するかもしれないから、このプリント基板は少し時間を置いて注文する。過去のプリント基板の写真をつないだら面白いアニメーションが出来上がると思う。こうなるともう6803が奥深いというよりボクの知識が浅いんだろうな。

カテゴリー: 6800 | 5件のコメント