Apple][とかファミコンで有名な6502CPU。部品箱に死蔵してあったものを動かしてみました。回路の参考にしたのは、いつもお世話になっているGrantさんのページです。
6502がちょい盛り上がり
昔の8bitCPUなれど、以下のような専門書が出たりとちょっと盛り上がってきている気がします。(私見ですが…^^);;;)
オレンジピコさんでも6502CPUのCMOS版を取り扱っていまして、いつかはマイコンボードして動かして見ようと買ってあったのでした。
参考にした情報など…
Grantさんのページ
6502CPUでマイコンボードを作るにあたり参考にしたのは、まずいつもお世話になっておりますGrantさんのページです。6502CPUとROM、メモリー、MC6850シリアルチップでマイコンを動かしています。
これなら部品点数も少なく、手持ちの部品で揃いそうでしたので自作できそうです。
トランジスタ技術 2006年5月号からの連載記事
トランジスタ技術誌 2006年5月号からの「6502マイコンボード製作記」という記事がありまして、ネットで「6502」で検索するとサンプルページがヒットしたりしますけども…
こちらが、今回使用しようとしているCMOS版 6502CPU W65C02を使用していてたいへん参考になります。
https://toragi.cqpub.co.jp/Portals/0/backnumber/2006/05/p221-222.pdf
いつもの国会図書館の遠隔複写サービスで、これまたこの連載記事だいぶ以前にゲットしていました。内容としてはちょっと古めですが、パチパチマイコン的にモニターを手動入力する方法で動作させています。
実はもう6502マイコンボードを実現している方が!!
実はSBC6800ボードを少々改造するだけで6502 CPUを稼働させた方がおられまして、これからチャレンジするなら、こちらの方が再現性が高いのでご紹介します。
CPUに下駄をはかせたものと、アドレスデコーダー(74LS138)をちょい改造するだけというお手軽さで稼働します。感動モノです。配線量極小です。しかも下駄使用なのでSBC6800ボードは無改造であるため、1枚のボードでMC6800 CPUと6502 CPUのどちらも稼働させて楽しめるという素敵さです。以下は私の改造作例です。はんだ付けがちょっと汚いですが….
6502マイコンボードの回路検討
気を取り直して、私の6502マイコンボードの回路検討した内容を列挙します。基本はGrantさんの回路を参考にアドレス等は合わせてみました。
6502CPUのあたり
- 6502CPUのあたりの回路としてはリセット回路と各種信号線の処理となります。
- リセット回路はKZ80-CPUBと同様CRの回路を組みましてリセットボタンも装備しました。
- 制御信号線のうち割り込み関係(#IRQ/#NMI)は使用しないのでプルアップ。RDY、BE、#SOもトラ技の記事なども参考にプルアップとしました。
- W65C02のデータシートで、入力電圧がVccx0.7(5Vだと3.5v以上?)という厳しい事が書いてあったため、念の為データバスはプルアップしました。(いらなかったかも)
クロック発生回路
- クロック発生回路はKZ80-CPUBと同じく74HC04または74HCU04での回路としました。
- ただ、手持ちに1.8432MHzの水晶振動子がなかったので、これまたKZ80-CPUBでも使った7.3728MHzを1/4に分周して使用することにしました。(74HC74のD-FFを2つ使います)
- クロックはCPUとMC6850シリアルLSIの両方で使用します。
- Grantさんの回路では6502CPU用にはさらに1/2にして1MHz弱に落としていますが、今回使用するW65C02 CPUは14MHzまで行けるらしいので1.8432MHzのままで供給することにしました。
シリアルはTTLレベル
- シリアルについては、いままでの他のマイコンボードといっしょでTTLレベルのFTDIコンパチのコネクタとしてUSB-シリアルアダプタでつなぐことにしました。
- クロックが1.8432MHzで供給されて内部で1/16になりますので115.2kbpsで繋がる感じ。
- 今回はメモリーマップドI/Oとなりまして$A000〜がアドレスとなります。(デコードはちょっと贅沢ですが)
ROMは28C256(256kbit)、RAMも32kB SRAM
- ROMは手持ちが28C256タイプのフラッシュEPROMでしたので、そちらを採用します。
- #WEとA14はプルアップします。
- Grantさんの作例とアドレスを合わせるため、#CSにはアドレスバスA15とA14をNAND経由で接続します。
- SRAMは32k分つかうのでわりと素直な接続です。
- 6502 CPUのR/#W信号線から#RD/#WR信号を作成するため、74HC00でPH2信号と合わせています。6502CPUはPH2信号に合わせて動くらしいです。
SBC6303バス装備
だいぶ以前に、SBC6303ボードをつかって色々と試したこともありましたし、以前から作ってみたかったtomi9さん作のSBC-IOもつなげてみたかったので、SBC6303バスを装備しました。
回路図データの公開先
今回のマイコンボードの回路図等はgithubで公開しています。
ユニバーサル基板で試作&動作確認
ユニバーサル基板へ部品を搭載
回路の確認のため、いつもの秋月電子Bタイプユニバーサル基板に部品を搭載してみました。ちょっとギュウギュウですが、ギリ搭載できる感じです。プリント基板にすればわりとヨユーな気がします。
クロック出力確認
まずはクロックが正しく発生しているか確認しました。以下のように想定していた1.8432MHzぐらいが出ているみたいです。
実はこの段階でちょっとハマったのですが、電源ラインの配線をミスしていろいろと配線を直していたところ……
ロジックICのVccがプルアップ抵抗経由でつながってしまい、IC搭載前にテスターで計測すると5V出ていたものが、74HC00、74HC74、74HC04などロジックICを搭載すると何故か2Vとか1.8Vしか出ず原因がわからず苦しみました。配線変更は慌てず実施しないとダメですね。
ROMを搭載して稼働確認
GrantさんのページでZ80同様BASICのROMが公開されていましたので、ROMライターTL866CSを使って焼き込んで起動してみました。
ROMは$C000〜$FFFFまでのアドレスに配置する必要があり、TL866CSの焼き込みソフトでIntelHex形式のファイルを読む際に$4000番地以降に読み込んで焼き込む点だけ注意です。
無事BASICが起動して、TeraTERMから115.2kbpsでつないでマイコンボードを使用することができるようになりました。
今後、6502の機械語でプログラムもしてみたいため機械語モニターを載せてみたいと思っています。Electrelicさんが以下で公開されているUniversal Monitor のソースを展開したところ6502用のものも入っていましたので、ありがたく使わせていただこうと思います。これは、また次回以降の記事で…
コメント