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%

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

カテゴリー: 世間話 パーマリンク

SBC8088ハローワールド担当の中間報告 への15件のフィードバック

  1. asano より:

    ちゃんとクロック数を数えたわけではないのですが、
    8251の初期化のところでリカバリタイム不足していませんかね?

    昔PC-9801いじっていた時はOUT命令の間にNOPを2つくらい挟んでいた記憶があります。

    データシートもさらっと書いてあって、よく読まないとわからなかったような。
    tRV Recovery Time Between WRITES のところ。

    • vintagechips より:

      asanoさん、コメントありがとうございます。8251のリカバリタイムは6周辺クロックですね。8088のout命令は14クロック(7周辺クロック)なので大丈夫な計算です。また、初期化の直前とリセットコマンドの直後に16個のnopを入れる実験もやったのですが、改善がなかったので戻しています。今後ともお気づきの点がありましたら教えてください。

    • vintagechips より:

      asanoさんへ追伸。SBCシリーズを動かしていただきありがとうございます。このブログの製作実例はスペースが埋まってしまいましたので、明日、ツイッターで紹介させていただきます。

    • vintagechips より:

      asanoさん、ごめんなさい。tomi9さんがあちこちにnopを5個ずつ入れまくってhello, worldの表示を成功させました。現在、有効なnopと無駄なnopを見極めているところです。結果が出ましたらあらためて投稿します。

      • asano より:

        気にしないでください。

        というかこちらこそ「OUT毎にNOP入れないと」と書くべきでした。
        なんか馬鹿にしているように見えるかなと思ってあんな書き方にしてしまいました。

        このリカバリタイム、初期化時は6ですがその後のコマンドはさらに長く同期/非同期でも異なるということが注にさらっと書いてあったりするので要注意です。

        私は初めてのシリアルの石が8251だったのでそんなものと思っていましたが、考えてみると癖のあるデバイスですよね。

        有名なソフトリセットの方法といい、このリカバリタイムといい、知らないとデータシート読んでもすぐにはわからないかもしれません。

    • vintagechips より:

      と言いましたが、ボクの製作物ではうまく動きません。引き続き、動かない理由を探ります。

  2. TT より:

    セグメント初期化で
    mov ds,ax
    となってるところですが
    昔の雑誌のソース見ると
    mov os,ax

    • vintagechips より:

      TTさん、コメントありがとうございます。mov os,axという命令がアセンブラを通りませんので、何かの間違いではないでしょうか。

  3. JJ1SUN より:

    8088が手元にないので試していませんが、プログラムの800BHから8016HまでをNOPにしてみたらどうでしょうか。
    ハードリセットをかけると80C51 はモード待ちになりますし、モードで00Hを書くと同期モードになると思いますが、沖電気の日本語データシートに”WRパルス間隔は同期モードコマンド設定時は18クロック”と書かれていることが気になります。

  4. JJ1SUN より:

    82C51を80C51と書いてしまいました。ごめんなさい。

    • vintagechips より:

      JJ1SUNさん、コメント有難うございます。いわゆるおまじないを削除するか、OUT命令の間隔を十分にあけることが必要なようですね。さしあたり間隔をあける方向でテストしていますが、NOPを16個入れたくらいでは解決しないので、ほかにも問題があるようです。

  5. tomi9jp より:

    リカバリータイムの件ですが、個人的には解決したので問題ないと思っています。
    1)モード設定書込みのライト処理まで18CLK(8088の36CLK)同期・非同期不明対策として
    2)モード設定書込み後は8CLK(8088の16CLK)非同期モードの為
    3)初期化後は、vintagechipsの言われる通り各命令で8088の場合は足りていると思っています。
    8086等は、BIUの関係があるので少し厄介ですね。

    それより8080SubBoardを2枚使用して確認されてはいかがですか。
    1枚は、改造品でRAN、ROMボードとして
    もう1枚は、未改造の8251ボードとして(アドレスはソフト変更)

    それより何を動作させるかが一番の問題になっています。誰かアイデアありませんかね?

    • vintagechips より:

      tomi9さん、いつもありがとう。改造が8251の動作に影響しちゃっている可能性は確かにあるなぁと思っています。ここだけの話、いまやるとボスに叱られるんで、見張りのスキを突いてやってみます。

      ところで、ろくにhello, worldも動かせないやつが言うのはどうかと思いますが、ボクは昔、98noteのV30をエミュレーションモードに入れてCP/Mのアプリケーションを動かしました。その経験から、SBC8088にV20を取り付けてGrant’s BASICを動かしたら面白いと思っています。テーマを探しておられるのならご検討ください。

      • tomi9jp より:

        Z80関連を優先させてください。
        V20は動作しているので(なぜ持っているかは記憶にないのですが)それもありですね。
        現在は、86DOSが動作しないかなと思っていますが何が必要かわかっていません。
        夢の中で考え中です。
        CDP1802の基板が終わったらまじめに考えたいと思います。

  6. ピンバック: 断念したSBC8088に再挑戦して成功 | 電脳伝説

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中