6502の姉妹CPU、R6503を動かしてみる+6532RIOTについて調べてみる

 時はコロナ前。秋葉原にて手に入らない部品の一つに、6502というCPUがありました。

幸いにも65C02という互換品?が今でも発売されていたのですが、残念ながらマルツ経由でも手に入れることができないため絶望的だった時代から始まります。

以前秋葉原の部品でApple1を作ると宣言してもう数年経ってるんですけど、一番困ったのがここでした。肝心かなめのCPUが秋葉原で調達できないとか笑えないです。なのでずっと探してたっていう言い訳をさせてくださいオネガイシマス。

■|6502は手に入らない、けど姉妹CPUなら若松にある。

秋葉原でレアなCPUを探すならラジオデパートかラジオ会館と相場が決まっていると思うのですが、そこでもなしのつぶてでどうにもならない日々を送っていたある日。若松通商さんのホームページを検索していると、"6503"という型番のCPUを見つけたのです。

早速突撃して話を聞いてみるとなんと店頭にあるとのこと。(確か店頭にあった気がします。間違えていたらごめんなさい)そこで早速購入してみると、なんだか足の数が少ないんです。

それがこちら。



下のの40PINの大きいやつが6502。んで、小さいのがその入手した6503というCPU。

なんで秋月の袋があるかって?朗報です。ついに秋月が6502を取り扱うようになりました。みんなも6502で電子工作しましょうぞ!!


話を戻しまして。

当時6502には数多くのカスタム版が出回っており、かの有名なATARI2600のCPUも6507というカスタム版を搭載しております。ではこのカスタム版とは何かというと、6502を基準にしてメモリアドレスを減らしたり、機能を絞ったりしたまあ要は廉価版みたいなものですね。ただでさえ機能を絞っている6502をさらに縮小しているのですが、それでも使いやすい設計になっているあたりいかに6502が優れた設計をしていたのかが偲ばれるというものです。

で、今回入手したこの6503はどのようなものなのかというと、

  • メモリアドレスは4KByte
  • RDY、SYNKなどはなし
  • ピンは28本
というコンパクトなものです。

一応、データシートの記載の翻訳と、画質が低くて見えなかったので書き起こしたPin assignmentもといピンアサインを貼っておきます。

(Rockwell R650X and R651X Microprocessors(CPU) datasheetより引用)
  • 4Kbyteのアドレス空間(A0-A11)
  • On-Chip Clock(水晶発振子をつなげるだけで動くとか?ほんとに?)
  • IRQ割り込みがLOWで発動
  • NMI割り込みがLOWで発動
  • 28pinのDIPパッケージ

広いネットの海で一番高解像度な6503CPUのピンアサインが見れるのはここだけだよ!!でも間違ってたらごめんね!!!

いやー、非常にコンパクトですよね。6502で電子工作したい、でも40PINもつなぐのはしんどいという方には非常におすすめだと思います。
当時はいったいどんな需要でこのCPUは生まれたのでしょうか。なにせ情報がないので、一番困ったのはクロック周りです。元のdatasheetがつぶれていてどっちがINでどっちがOUTなのか自信がなかったんですよね。でもいつまでも放置してても仕方ないってことで今回えいやっと動かすことにしました。

今回このピンアサインの解読に時間がかかったわけですが、回路図を起こす段階でkicadを開いたら6503がありしっかりピンアサインが書いてありましたorz
これからはまずkicadで回路図を書き起こすことから始めますかね…

■|こんな小さいRAMがあるか!そしてどうしてRWを同じピンにしたんだ!言え!!!

はい、動かすにあたってまずCPUにつながなくてはならない部品は

  • ROM
  • RAM
  • CLOCK
  • IO
になるわけですが、なにせメモリアドレスがたったの4KByteしかないうえに、Z80と違ってすべてメモリアドレス上に割り当てる必要があります。正気か?

なのでとりあえずROMは2716あたりを使用するとして、問題はRAMです。雑にIOをつなぐとしても、1Kbyteくらいしかありません。若松に行ったら一応1kbyteくらいのSramはあったのですが、今回は偶然手に入れたこのICを使用することにしました。




6532RIOTです。

このICは同じくAtari2600にて使用されていることで有名で、内部に128ByteのRAM、IO、タイマー割り込みを持っているという大変便利な代物です。本来であればこんな複数の機能を実装するなら標準ロジックに555とか組み合わせて苦労するのですが、さすがは6502の周辺ICとして考えられているだけあって大変都合がよくできております。特にRAMアクセスはR/W信号をそのまま突っ込んで使えるようになっているのでうれしいことこの上ないです。
ちなみにどういうわけかAmazonにも売ってます。きわめて怪しいです。Atari2600で使用されているので人気パーツなんですかね…どれもこれも中国発送になっておりますが。

■|試作した回路図




6503との接続はKIM-1とかAtariとかApple1とかを参考にして、こんな感じにつないでみました。ピンのタグ方向がひどいですが許してください。初めてなんです…

メモリ配置の計算がちょっと面倒ですね。
6532のピンアサインはこのようになっているのですが、RAMにアクセスする際はA0~A6のアドレスと、CS1をHIGHT、CS2をLOW、RSをROWにせよと記載されています。
つまり、特に何もしないでこれらのピンを6503のA7~A9もしくはA11に接続すると、6503の0ページ後半128byteにRAMを割り当てることになるようです。
ちなみにこれはミラーリングという形で6503のスタックエリアにも被る形になりますので、たった128byteで両方とも満たせるという超合理的な回路になります。これ考えた人はとんでもない変態だったに違いない。

メモリマップは結果的に以下のようになります。

6532への命令周りがアドレスによる割り当てになっているので、疑似レジスタとしてアクセスして設定します。ちなみにプログラムの一番最初で割り込み禁止にすることをお勧めします。そうしないと6532のタイマー割り込みが発動してバグります(滝汗

必要なパーツは以下の通りです。

  • 6503 CPU x 1
  • 6532 RIOT x 1
  • 7404 x 1
  • 2716 EPROM x 1
  • 水晶発振器 1Mhz
  • 3kΩ抵抗 x 2
  • 50v 1μf 電解コンデンサ 1つ
念のため、74HCを使用する場合は7404の間にプルアップ抵抗として4.7kΩを挟むようにしてください。6503の出力電圧が2Vまでしか担保されていないので、うまく認識できない場合があります。

■|デモプログラム


・タイマーカウントと合わせてLEDを光らせる

 
  ;6504 Homebuilt Test Program

    ORG $0800

RESET:      sei            ;6532からの割り込みを拒否
            cld            ;BCDモードをOFF
            ldx #$7f
            txs            ;スタックポインタをリセット
            cli            ;インタラプト(IRQ)割り込みを許可
            lda #$ff
            sta $81                                   
            sta $83        ;6532のA/Bポートを出力に設定
            ldx #$00
            stx $00        ;Start Counter at 0
LOOP:       jsr DELAY      ;Call for a Short Pause
            brk            ;Just to Test Interrupts
            BYTE $00      ;One byte fills hole after BRK
            ldx $00        ;Get the Count
            stx $80        
            stx $82        ;Put Count on Ports A & B
            inx            ;Increment the Count
            stx $00        ;Store the Count
            jmp LOOP       ;Do it all again!
DELAY:      ldx #$ff       ;Begin Delay Subroutine
            ldy #$ff
WAIT:       dex
            bne WAIT
            dey
            bne WAIT       ;End Delay Subroutine
            rts

    ORG $0E00
IRQ:        rti ;割り込みルーチンから復帰

    ORG $0FFC
    BYTE $00, $08 ;Vector to Reset 
    BYTE $00, $0E ;Vector to IRQ 

    END
  



■|どうでもいい悲鳴とあとがき

需要がないコンテンツの情報ほんっっっっっっっっっっっっっっっっっっとにないよねインターネットって!!!!!!!!!!!
誰ですか調べれば出てくるとかネットで十分とか言ってる人。あんなものあてにしてたらなんもできなくなりますよほんと。結局当てになるのは図書館と人だけ。あと実験。
でもきっと世界のどこかの誰かがこんな情報も求めて検索してると信じて書いてまとめて投稿してます。どうしようもない情報まとめサイトとか詐欺商法が蔓延してるこんな時代ですが、こんな草の根サイトがどっこい生きている世界がもっと増えてほしいです。
あ、でも下手に需要が増えると詐欺と情報商材がはびこるんですよね。地獄かな??
適度にマイナー、でも検索すれば出てくる。それくらいがきっとちょうどいいんでしょうね。
ちなみにそれを回避する方法は「英語で検索」することです。不思議なほどまともな情報が出てきます。Unityしかり、その他etc…昨今はブラウザの自動翻訳機能もありますので、充実した記事を読みたいときにはそちらを試してみるのもありかと思います。

コメント

このブログの人気の投稿

ファミコンの完全自作ROM&カセットを作ろう!!その1~立ちはだかるコンパイラの壁~

ファミコンの完全自作ROM&カセット作ろう!〜cc65で起動ROMをつくる〜

74HC595を使ってarduinoの16ビットパラレル出力に挑んでみた