以前つくった6502CPUのマイコンに、65ファミリーのLSIをつなげてI/Oボードを作ってみたいと思って試作開始です。
今回はW65C22 VIAパラレル&タイマーICでLEDが点灯するところまで確認しました。
65ファミリーの石を手に入れたい
68系LSIの問題点
6502CPUはMC68系から派生したとも言える石ですので、68系の周辺LSIとは相性がわりと良いです。以前も書きましたがTomi9さんのSBC-IOに載った6821(PIA)とか6840(RTC)タイマーICなどを動かすことができました。
ただ、65ファミリーのLSIではないため16bitタイマー値のセット方法のエンディアン問題などでハマったりしてました。6800などはビッグエンディアンですが6502は80系のCPUと似ていてリトルエンディアンです。メモリーへ16bit数値を保存する順番が上位/下位逆転しています。やはり65ファミリーのLSIも使ってみたい。
6502.org などからリンクされている6502マイコンの制作例などを見ても圧倒的に65ファミリーをみなさんお使いです。羨ましい。日本国内ではなかなか取り扱っている部品店がありません。
mouserにはあるが…
W65C02のファミリーLSIですが、実はmouserさんには取り扱いがありまして、W65C22 VIAというパラレル&タイマーICもお手頃価格です。ただやっぱり輸入になっちゃうみたいで送料とか関税?とかなんか….とちょっと躊躇してました
Twitterでこのことをつぶやいていましたら、なんとオレンジピコさんが取り扱ってくれるというお話になりまして、感謝感激。
6502CPUマイコンへつなぐ回路
さて、LSIが入手できることとなりましたので、6502CPUマイコンへつなぐ回路を考えます。基本は6502CPUマイコンに装備したSBC-IOのSBC68系っぽいバスに別基板としてぶら下げてみたいと思います。
回路はこんな感じで、アドレスデコーダー+W65C22 VIA パラレル&タイマーIC、W65C51 ACIA シリアルICというシンプル構成です。パラレルICからの入出力はZ80マイコン用拡張基板として作ったKZ80-IOB風な感じ。
KiCADで回路図をいろいろといじっておりまして こーいうアドレスデコーダーをつけてみようとか、バスにアドレスデコード信号を出したり出さなかったりを74HC125をつけてみようとか欲張りすぎて 最初は大きな回路になったのですが、まずはこれらのICを動かすことを主眼にW65C51 シリアルICのクロックもメインクロックからもらうことにしました。この回路図はgithubにもUPしました。現時点では「lite」ブランチにあります。そのうちmasterブランチにマージ(置換)しちゃうかもです。
W65C51 シリアルICは1.8432MHzのクリスタル(水晶振動子)をつなげれば発振する仕組みもあったりするみたいなんですが、この周波数のクリスタルは持ってないという事情もありまして…(X_X)
配線は秋月電子Bタイプユニバーサルにポリウレタン銅線
試作はいつもの秋月電子Bタイプユニバーサル基板(10cmx7.5cmぐらい)で行いました。いつもは基板部品面からラッピング用ワイヤで配線するのですが、今回はちょっと苦手意識がついたままのポリウレタン銅線(0.26mm)で基板裏配線に挑戦してみました。
最近はずっと部品面から配線していたため、基版裏のICのピンNoを間違えたりして何度も配線を一からやり直したりしまして、ちょっとへこたれつつも配線できました。
ポリウレタン銅線はだいぶ以前に最初にZ80マイコンをユニバーサル基板で試作したときには使用したのですが、それ以降は被覆がうまくハンダゴテの熱で溶けなくてハンダが弾かれたり、はんだ付けされているつもりで接触不良だったりと使いこなせず部品箱の肥やしになっていたのです。
今回はYouTube動画で、ポリウレタン銅線を使う場合は予備ハンダしてから対象の場所にはんだ付けすると良いという話をみたり、Twitterで予備ハンダの技を教えていただいたりしながらなんとか配線できました。
配線の後半だいぶ慣れてきたのですが…..ハンダゴテに糸ハンダを乗せる→フラックスが飛ぶ前にポリウレタン銅線の先端をコテ先のハンダの中へ→3秒ぐらい我慢していると被覆が溶けて線がハンダに埋没。という感じで予備ハンダ(ハンダメッキ)ができました。
被覆がちゃんと溶けた状態の線なら、対象箇所へのはんだ付けもハンダを弾くこともなくしっかりと留まる感じです。
W65C22 VIAのパラレルI/Oのテスト
基板ができたので、6502CPUマイコンに40pinフラットケーブルで接続しいつも使っている機械語モニターUniversal Monitorで、W65C22 VIAのコントロール用レジスタアドレスを操作して、LEDチカチカで動作確認してみたいと思います。
上記回路図にもコメントを入れてありますが、W65C22 VIAパラレル&タイマーICのコントロール用のレジスタはメモリー $8010〜801Fにマッピングしています。
データシートによると以下のようなレジスターがあります。
W65C22 Datasheet
モトローラ系のMC6821などと似た感じで、Aポート、Bポートそれぞれに方向レジスタ(DDRA/DDRB)と入出力レジスタ(ORA/IRA、ORB/IRB)があるようですので、以下のようにメモリーに書き込む要領で DDRA($8013)へ $FF(出力)を設定。
その後 ORA($8012)へ $55とか$AAを機械語モニターのSコマンドで書き込んでみます。
上記操作で、無事 6502CPU用I/OボードのポートA端子につないだLEDがチカチカと動くところが確認できました!!!
今後の予定…
今後の予定としては、W65C22 VIAはパラレルICであり、かつタイマーICということですので、MC6840みたいに音楽を奏でたりできないものか、とかタイマー割り込みを起こしてみようとか、そのようなあたりを考えています。
タイマー割り込みを動かすには、Universal Monitorに割り込みハンドラを差し込んだりする必要がありそうです。
また、まだ動かしていないW65C51 ACIA シリアルIC用のUniversal Monitor用ドライバーを書いてみようとか、まだ色々とやってみたいと思います。
まずは、以下の本で6502機械語の復習から…^^);;
コメント