SBC6800のプチ改造で6502を動かす

つねづね6502を動かしてみたいと思っていたところ、ツイッターに画期的な情報があがった。ほうめいさんが無改造のSBC6800とゲタで6502を動かせるとツイート。最終形がまごころせいじつ堂のSBC6800を改造せずに6502を動かす&unimon_6502の移植にまとめられている。後を追ってボクなりのやつを作ったので経緯をまとめておく。ボクはプチ改造してるし6502の一部品種に完全対応していないけれど工数がいくらか少ない。

sbc6502_1

SBC6800で修正が必要なのは下の回路図の赤字部分。X印は切断、印はプルアップ。ほうめいさんと違うのはプルアップを抵抗なしの電源直結にして手抜きしたところ。その一環でRDY(2番ピン)を現状のまま電源直結としている。RDYはW65C02でWAI命令を実行したときLを出力するから本当はまずい。しかし元祖6502やR65C02などは(たぶん)大丈夫だと思うのでW65C02の場合はWAI命令を使わないという条件を付けて問題を雑に解決。

sbc6502_4

プリント基板の加工を最小限にとどめるため切断する4か所はICソケット2段重ね方式。すなわちDIP40ピン平ソケットから1番ピン、3番ピン、5番ピン、39番ピンを抜いて、すでにあるICソケットへ重ね、そこへ6502を挿す。このやりかたは何かの事情で6502を取り外すとき重ねたICソケットのあちこちで6502と一緒にピンが抜けるから気を付けてね。

sbc6502_3

プルアップは電線をハンダ付け。一種の改造には違いないが、たった2か所、復元容易なプチ改造。6800に戻したくなったらすぐ戻せると思う。以上で作業が完了。

SBC6502_bottom

Electrelicさん作、ほうめいさんご提供のUniversal Monitorが動いたところ。実をいうとここに至るまでさんざん失敗したから、動くように作ったんだけど、動いてびっくりだよ。

sbc6502_5

試作機に挿さってるのはWAI命令を使ってはいけないと決めたW65C02。うっかり使っちゃうことを防ぐにはBASICを動かすのがいちばん。てことで、お馴染みGrant SearleさんのGrant’s 6502 ComputerからOSI MS-BASICを拝借、ソース3か所の修正で移植完了。移植済みのファイル一式をOneDriveに置いておく。その中のosi_bas.binが2764のイメージ。

sbc6502_rom

6502のMS-BASICについてはCreate your own Version of Microsoft BASIC for 6502に詳しい解説がある。OSI MS-BASICはオハイオサイエンティフィックにライセンスされた版で、年代でいうとコモドールの後、アップルソフトの前。ボクの英語読解力が正しければ浮動小数点計算機能の有効桁数を9桁から6桁へ切り詰めて8KバイトのROMに詰め込んである。それをやってくれたおかげでSBC6800のROMに書き込むことができた。

sbc6502_6

ほうめいさん、Electrelicさん、Grantさん、そしてKuninetさんに感謝します。Kuninetさんは手配線の6502でOSI MS-BASICを動かし、ほうめいさんのやりかたでもボクより先に実物を完成して勇気とアドバイスをくれました(詳細はこちらをご覧ください)。

カテゴリー: 6502, 6800 パーマリンク

SBC6800のプチ改造で6502を動かす への9件のフィードバック

  1. tomo-n より:

    2相2MHzクロックですが、Attiny85 で Clocksel を弄って、内部16Mhz動作で使えば、ソフトで何とかなるのでは。それでも足りなければ、Osccal を触り、内部20Mhz動作にすれば可能では。

  2. tomo-n より:

    Twitterの #sbc6800
    「SBC6800のPIC12F1822が出力する2相クロックを2MHzへ上げられるかどうか」
    に対するものです。場違いですいません。

    • vintagechips より:

      2019年5月22日のツイートですね。これはプリント基板を改造することなくソフトウェアの更新だけで高速化しようという話なので無理だと結論づけています。プリント基板を改造すればAttiny85に乗せ替えて高速化できる可能性がありますね。

      私はAttiny85を詳しく知らないのですが、PWMの2波の間にデッドタイムをとることはできるのでしょうか。2相2MHzの最大の難関は、一方のクロックが下がったあと少し時間を空けてもう一方を上げるという規則です。

      • tomo-n より:

        あれ、確かに2019年5月22日ですね。つい最近目にしたもので、解り辛くてすいません。
        このアイデアは考えついただけで何も実験していないのですが、
        attiny85 にはハーフブリッジモードは無いので、パルス発生をソフトウェアで行うことを考えました。AVRは1命令1クロックで動作できるので、16Mhz動作ならば500nsの間に最大8命令実行できます。3クロックを「H」とし、1クロックをデッドタイムとすれば、計算上187.5nsのパルスと62.5nsのデッドタイムが取れることになります。
        最高速でクロックを生成しているときCPUは他に何もできないので、リセット信号も生成したい場合には、別ルーチンで「リセット信号有効時だけ、遅いクロックを生成しながらリセット信号のタイミングを計る」処理が必要になります。

        • vintagechips より:

          tomo-nさんやほうめいさんや、みなさんがそれぞれ得意とする技術でSBC6800の改造を試みてくれる状況が頼もしいです。

  3. masa より:

    PIC16F18313で試すCWGによるクロックの生成

    CPU :HD648A00 クロック 2MHz で動作しました。
    32MHz   2MHz    dead time 31nsec
    Fosc => TIMER2+PWM5 -=> CWG half bridge でCLK1とCK2を生成
    dead time の設定でちょっとハマりました
    PPS(ピン再配置)でPIC12F1822とコンパチにしてます。

    ついでに NCO で6850のクロックもつくれます。そしてジャンパを飛ばせば
    PICは1個でOKとなる。Pin6に割り付けてます。
    PICの空き地にリセットSWとLEDを入居させてます。

    さらに
    XC8でチャタリング防止+ディレイのリセットを実装

    拙いソースですがご希望でしたらUPします

    • vintagechips より:

      masaさん、こんにちは。それは凄いわ。ソースはぜひ見たいし、もし可能ならリセットSWとLEDが付いてる写真も見たいです。そして、SBC6800を持ってるみんなにご紹介したいです。ブログをお持ちですか? あるならそちらに書いていただければツイッターで紹介させていただきます。ブログがなければバラでいただいて私がまとめます。よろしくお願い致します。

    • vintagechips より:

      こんな感じでツイートさせていただきました。

コメントを残す

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

WordPress.com ロゴ

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

Google フォト

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

Twitter 画像

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

Facebook の写真

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

%s と連携中