SBCZ80完成

DRAMを動かしてみたい一心で製作を始めたZ80のコンピュータは、とにもかくにもその目的を達成したので、仕上げにロジックを整理した。もとの回路はDRAMまわりを設計したのちにZ80を取って付けた格好。あらためてシステムとして見直すと無駄なゲートをたくさん発見。最終的にはICがひとつ減って、プリント基板に名前を書くスペースができた。現在の回路はZ80を中心に据えたにひとかどのコンピュータだから名前はSBCZ80。

sbcz80_top_new

SBCZ80は無印Z80の標準クロック2.4576MHzで完璧に動作し、ロジックアナライザがきれいな波形を表示する。計算上は倍速の4.9152MHzでも動作するはずだから、すぐ切り替えられるよう、ハンダ面にソルダバッドを仕込んでおいた。

sbcz80_solpad

Z80を高速CMOS版に差し替えて実験。当初、起動したりしなかったりしたが、試行錯誤の結果、ソフトウェアの修正で解決した。DRAM(M5M4416)のデータシートには通電後約500u秒待機し、8回以上のダミーサイクルが必要と書いてある。この条件は満たしているが、倍速だと「約」や「以上」が効いてくるらしい。思い切り余裕をとって、ようやく安定。倍速の4.9152MHzで電源を乱暴にオン/オフしても必ず起動する。

sbcz80_cmos_top

新しい回路を下に示す。結果としてうまく動いているので、SBCZ80はこれをもって完成とする。おそらく、DRAMを使ったコンピュータでもっとも簡単な回路だと思う。

SBCZ80の回路図-sbcz80_sch.pdf

このブログの製作例は通例だと完成したらすぐプリント基板を頒布しているが、今回は大人の事情が邪魔をして少し遅れる。実は、現在執筆中の『ザイログZ80伝説』が発売されるとき出版社がプリント基板をオマケに付けることを検討している。実費とはいえ400円で頒布したあとタダで入手できる方法をお知らせするのはマズイと思う。もったいぶって申し訳ないが、一刻も早く作ってみたいというようなものでもないと思うから、いま少しお待ちいただきたい。もちろん、本がいらない人のために頒布も並行して行います。

広告
カテゴリー: Z80, 世間話 | 5件のコメント

断念したSBC8088に再挑戦して成功

いったんは断念したSBC8088にまた挑戦して今度はうまく動かすことができた。再挑戦のきっかけを与えてくれたのはまるぺじゅんさんのツイート。まったく同じ条件で見事に動かしている。以前、SBC8088のhello, worldを断念のコメントで自分も挑戦すると宣言された人がいて、成功したらヒーローだと答えた。まるぺじゅんさんが同一人物かどうかはわからないが、いずれにしろあなたはヒーローだ。

実をいうとボクはまるぺじゅんさんと違う方法で動かしている。同じ方法をやってみようと思い、SBC8088とSBC8080 SUB改造版をつないで、試しに電源を入れたらそのまんま動いてしまった。だからハードウェアはSBC8088ハローワールド担当の中間報告で述べたとおり。ソフトウェアは、その後、こちらのとおり書き換えた。hello, worldが表示され、続いてエコーバックテストに成功した様子を下に示す。

sbc8088_fix_hello

今まで動かなかった原因はプログラムのミスとフラットケーブルの断線。それに気づかなかった理由は、強いて言えば間が悪かったから。確かに最初のプログラムは8251へリセットコマンドを出したあと十分な時間をとっていない。その点はご指摘をいただいて修正した。しかし、その間のあれこれでフラットケーブルが断線し、正しいプログラムが動かなかったらしい。今回、偶然にも別のフラットケーブルでつないで成功したというわけ。

sbc8088_fix

毎度のことながらわかってみればしょうもない原因で、技術的な観点からいろいろ考えてくれた人たちにはたいへん申し訳なく思う。そそっかしさは十分に自覚しているが、さらに間の悪さとかの要因が重なることもあると肝に銘じておく。

カテゴリー: 世間話 | コメントをどうぞ

Z80でDRAMを動かした

一般社会で何の断りもなくメモリといったらDRAMを指す。電子工作ではもっぱらSRAMが使われるが、一種の嗜みとして、いつかDRAMを動かそうと思っていた。振り返れば、このブログの先頭から6回はDRAMを語り、DRAMコントローラの力を借りて、よく理解しないまま4164を動かしている。今度はTTLで動かして、十分に理解したことを証明したい。漠然とそんな風に考えていた2年前、日米商事でお誂え向きのDRAM、4416と出会い、構想が実現へ動き出した。これ、Z80と組み合わせれば比較的簡単に動くから。

nichibai_4416_p

4416の相方にZ80を選んだ理由は、当初、ただDRAMリフレッシュ機能を持つというだけだったが、実際は4416のほうでもZ80の欠点を補完する形になっていて相性抜群。同じ世代の4164と比べると、最低2個でデータバスを埋められるし、OEで間違った読み出しを止められる。Z80とDRAMを接続する場合、唯一の問題は、書き込み信号の出るタイミングが遅すぎて、Wだけでリード/ライトを区別すると、ライトの前半でリードの動作をしてしまうこと。4416はOEを使ってそれを止め、データバスの混乱を避けられる。

4416_pin_asign

Z80と4416が相性抜群でもTTLで動かすとなるとコンピュータの全体で12個のICが必要になる。全体の回路図は大き過ぎて表示し切れないから、必要ならこちらのPDFをご覧いただきたい。要点は、状況に応じてRASMUXCASを生成する制御回路。大原則はMREQが来たときだけ動くこと。その上で、RAMのアクセス要求(RAM)が来たらRASMUXCASを適当な間隔で出力する。また、リフレッシュ要求(RFSH)が来たらRASだけを出力する。

sbcz80_logoc

試作機の制御回路はRASMUXCASの間隔を広めにとってある。まずは確実に動かし、成功してから切り詰めていく方針。結果、Z80の標準クロック(2.4576MHz)で安定的に動作し、安価なロジックアナライザがきれいな波形を表示した。あまりにきれいなので、そのまま倍速(4.9152MHz)で動かしてみたところ、通常の動作は成功、割り込み処理で誤動作が頻発。想像では、ROMの読み出しが挟まればいいが、RAMのみのリード/ライトが連続すると失敗する感じ。調整で解決するか、これが限界か、見極めなければならない。

sbcz80_logiana

試作機はプリント基板に組み立てた。プリント基板を起こす段階ではまだテストをしていないから大きな間違いが2か所ある。第1にMUXの極性が逆、第2にZ80とSIOの間に無駄なロジックが介在。これらを修正し、ロジックアナライザへ行く電線を引き出したら、ひどい格好になった。この状態で制御回路の調整をやっても再現性に疑問が残るため、リビジョン2の基板を発注。送料込み5枚7.9ドルのやつで、到着は最悪1か月後になるらしい。

sbcz80_proto_final

ソフトウェアは、正式には27128(2764~27512)に書き込む設計。試行錯誤の段階では書き換えしやすいW27C512を使い、アドレスC000Hから書き込んだ。当初、プリント基板の大間違い2か所に悩まされたが、それを修正したあとは物事がトントン拍子に運ぶ。hello, worldとエコーバックテストと受信を割り込みでやるエコーバックテストに成功。そしてついにGrant’s BASICが起動し、約16Kバイトがフリーだと表示した。

sbcz80_basic

4416と出会ってから2年、ICを12個も使い、たびたび失敗ながら、ようやく実現した16Kバイト。嬉しさのあまりツイッターで自慢したら凄いっていう返信とたくさんのいいねをいただいた。このたった16Kバイトの価値をちゃんと評価してくれるみんなも凄いよ。

カテゴリー: DRAM, Z80 | 1件のコメント

V30を思い出した

SBC8088に関するやり取りの中でV30に話が及び、以前、日本電気の98noteを持っていてV30に熱中したことを思い出した。V30はインテル8086にいろいろな機能を追加したCPUで、とりわけ8080のエミュレーションモードを特徴とした。確かエミュレーションモードでCP/Mを動かしたんだよなぁって古いハードディスクを探したら、書きためたいろいろなソフトウェアと98noteの残骸が見付かった。

98note

98noteのMS-DOSでCP/Mを動かすことは比較的簡単だった。V30はエミュレーションモードに切り替えると8080のバイナリを実行するし、エミュレーションモードのままネイティブモードを呼び出すこともできる。だからCP/MのBIOSやBDOSはパラメータをMS-DOSへ引き渡すだけで実現する。参考までに、そういうやりかたをしたEMV.EXEとMASMのソースをOneDriveに置いておく。著作権はパブリックドメインに変更する。

日本電気PC-98シリーズV30搭載機専用CP/Mの実行ファイルとソース-EMV.ZIP

SBC8088はやはりエミュレーションモードを持つV20が動くらしい。OSがないからCP/Mはたいへんだろうが、hello, worldの一部を借りてGrant’s BASICが走ると思う。ぜひやってみたいが、うちの場合、まだSBC8088が完成していない。どんどん広がる夢に現実が追い付かない。

カテゴリー: 8080, 世間話 | コメントをどうぞ

SBC8088のhello, worldを断念

SBC8088 CPUボード修正版とSBC8080サブボード改造版によるhello, worldは皆さんから頂いた対策を含め、現状、思い付く限りのことをやってみたが成功しない。止むを得ず、前回の投稿のあと試みたことをまとめた上で、開発を断念する。このブログでは、いったん断念した開発に再挑戦して成功した事例がたくさんあるので、今回の件もいつか復活して成功する可能性がある。

うまくいかない原因のいちばん有望な見立ては8251に対するout/in命令の間隔が狭すぎるというもの。実際、数個のNOPを入れて解決した人がいる。うちの場合、NOPを10個入れてもダメなので、下に示すサブルーチンを書き足し、out/in命令を実行するたびに呼び出したが、やはりうまくいかない。out/in命令の間隔が狭すぎることは事実だとして、原因がそれだけではなさそうだ。

                        ;
                        ;       Delay
 8041 B91000            delay:  mov     CX,16
 8044 E2FE         8044 dlst1:  loop    dlst1
 8046 C3                        ret

ほかにやってみたことは次のとおり。

・すべてのハンダ付けをやり直した(上からハンダを盛り直した)
・8088とメモリと8251のアドレスバスとデータバスの導通テストをやった
・8088を予備と交換してみた(いずれもAMDのP8088)
・74LS257を予備と交換したり74HC257と交換したりした
・OKI M82C51A-2、NEC D8251AC、NEC D8251Cで試した
・out/in命令のIOアドレス指定を即値とdxで試した
・おまじないを省略してみた
・水晶を14.7456MHz、8MHz、4.9152MHzに交換した

これらの試みで次のような反応が見られた。

・拡張コネクタのIOWは、out xx,alだとH、out dx,alだと振れる
・out dx,alで、NEC D8251ACの場合のみゴミが表示される
・ゴミは電源オンまたはリセットの直後に80個くらい表示されて停止

sbc8088_proto_bug

以上の断片的な事実がひとつのストーリーでつながったとき問題が解決するのだと思う。三題小噺みたいなもんだろうが、即興にもお笑いにも才能がなくて困っている。

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

SBC8088ハローワールド担当の中間報告

オレンジピコさんで動作未確認SBC8088プロジェクト専用基板3枚組が販売されている。発端はボクが描いたCPUまわりのみの雑な回路図で、以降、tomi9さんが現実的な設計を加えてCPUボードサブボードSBC-BUSを完成させた。この過程でソフトウェアをどうするという話になったとき「hello, worldくらいなら書きます」と発言した関係で、誰からも任命されていないが、ボクがハローワールド担当を自称している。

SBC8088プロジェクト専用基板のうちサブボードとSBC-BUSはtomi9さんが検証されているのでご覧いただきたい。ボクの目標はCPUボードと外部の8251でhello, worldを動かすことにある。実はもうtomi9さんがCPUボードと外部のFT232HLで成功させているのだが、ボクのほうはいまだにモタついている。成果が上がらないからといって何も言わないと何の参考にもならないと思うので、中間報告として、動かない現状を述べておく。

あらかじめ断っておくとtomi9さんは当初から動作保証なしを明言されている。ボクもひとつ勘違いをしてtomi9さんの設計に悪影響を及ぼした経緯がある。実際、SBC8088プロジェクト専用基板は、普通に組み立てれば動くというものにはなっていない。この点は、わざわざ断らなくても了解が成立していると思うが、断っておくことで、このあと基板の修正方法などを述べる際、免責に関する説明を省略させていただく。

sbc8088cpu_top

CPUボードはアドレスラッチ(U3の74LS573)から拡張コネクタへ向かうA0~A7が逆順になっている。このパターンはハンダ面に並んでいるので、ルーターでバッサリ削り取り(緑色矢印)、電線で正しい順序に配線し直した。tomi9さんはこのように修正したCPUボードと外部のFT232HLでhello, worldを成功させているから、ほかに修正の必要なところはないと思う。なお、CPUボードの水晶は指定が14.7456MHzだが、ボクのCPUボードは8251がついてこられない事態を避けるため一時的に8MHzへ落としてある。

sbc8088cpu_bottom

SBC8088 CPUボードは同サブボードと組み合わせるのがスジだろうが、部品の持ち合わせがなくて完成しないのと、技術的な成り立ちを十分に理解していないため、勝手知ったるSBC8080サブボードを改造してつないだ。改造の趣旨は、ROMを上位アドレス(8000h~FFFFh)、RAMを下位ドレス(0000h~7FFFFh)に配置すること、すなわち改造前の配置と上下を逆にする。まず、部品面のパターン2か所をカット(黄色矢印)。

sbc8080subimp_top

ハンダ面はパターン1か所をカット(黄色矢印)。こうしておいてROMとRAMのチップセレクトを入れ替える。部品面のパターンをカットしたとき止むを得ずA15も切り離してしまっているから、A15を改めて配線。ROMのICソケットにはWinbondのW27C512を取り付けた。プログラムはW27C512の8000h以降がそのままのアドレスで使われる。

sbc8080subimp_bottom

この構成で動くはずのhello, worldをGistにアップしたが、実際はウンともスンともいわないので、怪しいところをことごとく削除し、現在は下に示す短いプログラムでテストしている。もはやhello, worldではなく、ただHを出力し続けるだけなのに、やはりうまくいかない。ちなみに、8251を制御する手順はSBC8080/SBC8085でうまく動作したプログラムと一致させてある。

                        ;       SBC8088 terminal test program
                        ;       SBC8080 SUB Board 8251 polling version
                        ;
   0000                 RAM     equ     0000h   ;0000h..7fffh
   8000                 ROM     equ     8000h   ;8000h..0ffffh
   4000                 STACK   equ     4000h   ;stack top
   0000                 REGAD   equ     00h     ;8251 data register
   0001                 REGAC   equ     01h     ;8251 control register
                        ;
                                org     ROM
                        ;
                        ;       start
 8000 8CC8              start:  mov     ax,cs           ;set com model
 8002 8ED8                      mov     ds,ax
 8004 8EC0                      mov     es,ax
 8006 8ED0                      mov     ss,ax
 8008 BC0040                    mov     sp,STACK        ;set stack
                        ;
                        ;       setup
 800B B000                      mov     al,00h          ;escape
 800D E601                      out     REGAC,al
 800F E601                      out     REGAC,al
 8011 E601                      out     REGAC,al
 8013 B040                      mov     al,01000000b    ;reset
 8015 E601                      out     REGAC,al
 8017 B04E                      mov     al,01001110b    ;mode
 8019 E601                      out     REGAC,al
 801B B037                      mov     al,00110111b    ;command
 801D E601                      out     REGAC,al
                        ;
                        ;       H
 801F E401              puth:   in      al,REGAC        ;get status
 8021 2401                      and     al,01h          ;check TxBUF enpty
 8023 74FA         801F         jz      puth            ;wait for empty
 8025 B048                      mov     al,'H'
 8027 E600                      out     REGAD,al
 8029 E9F3FF       801F         jmp     puth
                        ;
                        ;       reset
                                org     0fff0h
 FFF0 EA                        db      0eah    ;jmp
 FFF1 0080                      dw      start   ;offset
 FFF3 0000                      dw      0000h   ;segment
                        ;
                                end

END OF ASSEMBLY.  NUMBER OF ERRORS:   0.  USE FACTOR:  0%

というわけで、現在、製作の工程をハンダ不良から見直しているし、プログラムは古い書籍や雑誌の記事で勉強し直している。「そこは常識的にいって正しいに決まってる」みたいな話を言い出したら間違いがないことになってしまうので、ありとあらゆる事実を疑ってかかることにした。凄腕の人からしたら、ときどきそこじゃないよってところで悩んでいるように見えるだろうが、それしかやりようを知らないから、しばらくは温かく見守ってほしい。いやもちろん、間違いをズバッと指摘してくれたらなお嬉しい。

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

SBCZ8が完成

ザイログZ8でBASICが動くシングルボードコンピュータSBCZ8が完成しました。これまで2度の試作に失敗し、今回も最初の回路図にいろいろと問題があったのですが、たくさんの人がこのブログやツイッターで助言を寄せてくださり、どうにか修正することができました。深く感謝します。SBCZ8のプリント基板はオレンジピコで頒布します。

SBCZ8_g_top

SBCZ8はZ8681(元祖Z8)とZ86C9116(高速・CMOS・レジスタ増量版Z8)で正常に動作することを確認しました。シリアル端子とパラレル端子を備え、BASICで制御することができます。回路図、部品表など技術的な内容はSBCZ8技術資料をご覧ください。BASICと応用プログラム例はSBCZ8データパックにまとめてあります。

SBCZ8技術資料(pdf)
SBCZ8データパック(zip)
・Z8のデータシート(pdf)-Z8 Famry Design Handbook
・BASICの文法(pdf)-BASIC/DEBUG Reference Manual

BASICはシリアル端末に接続したパソコンの端末ソフトで操作します。主要なレジスタとRAMの全域を操作できるのでZ8の機能をすべて引き出すことができます。下のプログラムはパラレル端子のPORT2を動かしていわゆるLチカをやるものです。

100 REM BLINK LED
110 @246=0 :REM SET P2 AS OUTPUT
120 @2=0   :REM OUT L
130 GOSUB 200
140 @2=255 :REM OUT H
150 GOSUB 200
160 GOTO 120
200 REM DELAY SUBROUTIN
210 I=0
220 I=I+1
230 IF I<20 GOTO 220
240 RETURN

実行結果を下に示します。標準Z8の場合、PORT2に接続したLEDが約1秒ごとに点滅します。なお、PORT2は自由に使うことができますが、PORT0はアドレスバス兼用、PORT3はシリアル端子兼用ですから、慎重に操作してください。

sbcz8_blink

ザイログのCPUはZ80が有名すぎてZ8がいくぶん過小評価されているように感じます。Z8は、Z80とよく似た命令体系を持ち、捉えようによってはARMより凄い124本の汎用レジスタを備えた近代的な設計です。これを機会にZ8の魅力に触れていただければ嬉しいことです。

カテゴリー: Z8 | コメントをどうぞ