つねづね6502を動かしてみたいと思っていたところ、ツイッターに画期的な情報があがった。ほうめいさんが無改造のSBC6800とゲタで6502を動かせるとツイート。最終形がまごころせいじつ堂のSBC6800を改造せずに6502を動かす&unimon_6502の移植にまとめられている。後を追ってボクなりのやつを作ったので経緯をまとめておく。ボクはプチ改造してるし6502の一部品種に完全対応していないけれど工数がいくらか少ない。
SBC6800で修正が必要なのは下の回路図の赤字部分。X印は切断、▽印はプルアップ。ほうめいさんと違うのはプルアップを抵抗なしの電源直結にして手抜きしたところ。その一環でRDY(2番ピン)を現状のまま電源直結としている。RDYはW65C02でWAI命令を実行したときLを出力するから本当はまずい。しかし元祖6502やR65C02などは(たぶん)大丈夫だと思うのでW65C02の場合はWAI命令を使わないという条件を付けて問題を雑に解決。
プリント基板の加工を最小限にとどめるため切断する4か所はICソケット2段重ね方式。すなわちDIP40ピン平ソケットから1番ピン、3番ピン、5番ピン、39番ピンを抜いて、すでにあるICソケットへ重ね、そこへ6502を挿す。このやりかたは何かの事情で6502を取り外すとき重ねたICソケットのあちこちで6502と一緒にピンが抜けるから気を付けてね。
プルアップは電線をハンダ付け。一種の改造には違いないが、たった2か所、復元容易なプチ改造。6800に戻したくなったらすぐ戻せると思う。以上で作業が完了。
Electrelicさん作、ほうめいさんご提供のUniversal Monitorが動いたところ。実をいうとここに至るまでさんざん失敗したから、動くように作ったんだけど、動いてびっくりだよ。

試作機に挿さってるのはWAI命令を使ってはいけないと決めたW65C02。うっかり使っちゃうことを防ぐにはBASICを動かすのがいちばん。てことで、お馴染みGrant SearleさんのGrant’s 6502 ComputerからOSI MS-BASICを拝借、ソース3か所の修正で移植完了。移植済みのファイル一式をOneDriveに置いておく。その中のosi_bas.binが2764のイメージ。
6502のMS-BASICについてはCreate your own Version of Microsoft BASIC for 6502に詳しい解説がある。OSI MS-BASICはオハイオサイエンティフィックにライセンスされた版で、年代でいうとコモドールの後、アップルソフトの前。ボクの英語読解力が正しければ浮動小数点計算機能の有効桁数を9桁から6桁へ切り詰めて8KバイトのROMに詰め込んである。それをやってくれたおかげでSBC6800のROMに書き込むことができた。

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





2相2MHzクロックですが、Attiny85 で Clocksel を弄って、内部16Mhz動作で使えば、ソフトで何とかなるのでは。それでも足りなければ、Osccal を触り、内部20Mhz動作にすれば可能では。
tomo-nさん、こんにちは。2相2MHzとはどの製作物のどういう問題を解決されようとしているのでしょうか。
Twitterの #sbc6800
「SBC6800のPIC12F1822が出力する2相クロックを2MHzへ上げられるかどうか」
に対するものです。場違いですいません。
2019年5月22日のツイートですね。これはプリント基板を改造することなくソフトウェアの更新だけで高速化しようという話なので無理だと結論づけています。プリント基板を改造すればAttiny85に乗せ替えて高速化できる可能性がありますね。
私はAttiny85を詳しく知らないのですが、PWMの2波の間にデッドタイムをとることはできるのでしょうか。2相2MHzの最大の難関は、一方のクロックが下がったあと少し時間を空けてもう一方を上げるという規則です。
あれ、確かに2019年5月22日ですね。つい最近目にしたもので、解り辛くてすいません。
このアイデアは考えついただけで何も実験していないのですが、
attiny85 にはハーフブリッジモードは無いので、パルス発生をソフトウェアで行うことを考えました。AVRは1命令1クロックで動作できるので、16Mhz動作ならば500nsの間に最大8命令実行できます。3クロックを「H」とし、1クロックをデッドタイムとすれば、計算上187.5nsのパルスと62.5nsのデッドタイムが取れることになります。
最高速でクロックを生成しているときCPUは他に何もできないので、リセット信号も生成したい場合には、別ルーチンで「リセット信号有効時だけ、遅いクロックを生成しながらリセット信号のタイミングを計る」処理が必要になります。
tomo-nさんやほうめいさんや、みなさんがそれぞれ得意とする技術でSBC6800の改造を試みてくれる状況が頼もしいです。
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します
masaさん、こんにちは。それは凄いわ。ソースはぜひ見たいし、もし可能ならリセットSWとLEDが付いてる写真も見たいです。そして、SBC6800を持ってるみんなにご紹介したいです。ブログをお持ちですか? あるならそちらに書いていただければツイッターで紹介させていただきます。ブログがなければバラでいただいて私がまとめます。よろしくお願い致します。
こんな感じでツイートさせていただきました。
ようやく、SBC6809ボードを組み立てました。
BASIC09とTESTPOL9が動いてます。
ついでに
メモリの増設もしました。
RAM 8k -> 32k(IDT71256)、ROM 8k -> 24k(AT29C256)
クロック源は、6800と同じく16F18313で作ってみました。
したがって、クリスタルとリセットのCR類は使ってません。
仕様
1.CPUクロック
CLKRモジュールで、32MHzを分周したのを出力してます。
出力は1/(2^n)のステップが可能で、今回は4MHzに設定しています。
CLCのD-FFを使い6809E用の2相クロックも作ってみました。
CLKRの出力をCLCに入れて1/4の周波数が出ます。
2.ACIAクロック
6800と同じくNCOで153.6kHzを生成
(16MHzまで、約15Hzステップで作れる)
3.手動リセット + POWER LED
内容は6800と同じです。
6350(CMOS)の場合USB側からの回り込みが発生しますが、パワーオンリセットはかかります。
BASIC09では、回り込みによりRAMがデータを保持してるようでCOLDスタートがかからない。
予めwarm flag($6e)をクリアしておくと、COLDスタートがかかる。
※
SBCZ80にも、パターンカットなしで取り付けられます。
74HC4040のNCピンを利用します。
PICの向きを逆にして、4040のACIAとPICのそれが合致するようにするのがよさそう。
基板がないので試してないけど・・
ご要望があればデータをUPしますよ。
あっ、カテゴリここでよかったかな?
masaさん、いつもどうも。カテゴリは、どこでもいいです。前回同様、データをアップしていただけるとありがたいです。現在、SBCZ80が大人気なので、特にSBCZ80にも取り付けられるというあたりは、たとえ実機でテストしていない構想だとしても、話題として盛り上がりそうです。
こんな感じでツイートさせていただきました。