2026.7.5
前へ
次へ
ホームページトップへ戻る


[新連載開始]W65C02マイコンボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
私としてはW65C02をさわるのは全く初めてです。何から何まで未経験です。さてどうなりますでしょうか。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第3回]



●W65C02のシステムメモリマップ

8080やZ80などの80系CPUではアクセスできるメモリアドレスが0000〜FFFFの64KBであること以外に特別の制約はありません。
あっと少しだけありました。
リセットによってプログラムカウンタがクリアされて0000になるためリセット後のスタートアドレスは0000になります。
またNMIのエントリアドレスは0066に固定されています。
そしてRST0〜RST7のエントリアドレスは0000から8バイトごとに0038までに割り当てられています。
その一方でスタックエリアは規定されていません。
通常はROMの先頭アドレスを0000にそしてRAMの終わりのアドレスをFFFFにすることが多いのでSTACKの開始アドレスはFFFFにすることが多いと思います。
この場合SP(スタックポインタ)は0000を指定します(FFFFではありません)。
さてそれで。
W65C02の場合なのですが。
できるだけ高速でのメモリアクセスを行なえるよう64KBのメモリ空間を256バイトごとのメモリバンクに分けています。
こうすることでアドレスの上位8ビットを00に固定すればアドレス0000〜00FFに対しては下位8ビット(1バイト)だけでそのアドレスを指し示すことができることになります。
その場合暗黙の約束で上位8ビットは00であるような命令を用意することでメモリアクセスが高速で行なえるように工夫されています。
このアドレス空間0000〜00FFをゼロページと言いそのアクセスに特化した命令が用意されています。
そしてスタックに対しては0100〜01FFの256バイトが割り当てられています。
しかしSP(スタックポインタ)にはデフォルトでは値は設定されないらしいので(必要ならばユーザーがプログラムで指定する)これは作法という程度のもので実際には任意のアドレスに設定できるのではと思います。
もっとも多分スタックエンドの下位アドレスは00になっているのではないかと思いますから特に支障がない限りおとなしく作法に従ったほうがよいと思います。

W65C02のメモリマップです。

アドレスFFFA〜FFFFはシステムのジャンプテーブルになっています。
NMI(Non Maskable Interrupt)が発生するとCPUはFFFA〜FFFBに書かれたアドレスにジャンプします。
RESET時にはCPUはFFFC〜FFFDに書かれたアドレスにジャンプします。
通常の割込みまたはBRK命令の実行によってCPUはFFFE〜FFFFに書かれたアドレスをCALLします。

●メモリマップドI/O

W65C02にはI/Oアクセスのための端子がありません。
IOREQもなければIORD、IOWRのような端子もありません。
下は前回お見せしたW65C02周りの回路図です。

W65C02はI/Oもメモリと同じハードとして扱います。
メモリマップの中の一部としてアドレスをつけてあたかもメモリであるかのようにして扱います。
8ビットしかないI/Oだったとしてもそれにアドレスをつけてメモリマップの中にはめ込みます。
たとえばそれにC000というアドレスを与えます。
アドレスセレクト回路を簡単にしたい場合にはたとえばメモリバンクC0(C000〜C0FF)をI/Oのためのアドレスにしてしまいます。
こういう方式をメモリマップドI/Oといいます。
アクセス速度が遅いI/Oに対してはそれに見合うだけの十分なウエイトをかける必要がありますがCPUの外部にあるのはメモリのみということになるのでCPUそのものはより簡単になります。
ちなみにMREQもありませんしなんとMEMRDもありません。
メモリに対するREAD/WRITEはRD/WR_という1本の端子で済ませてしまっています。
普通のスタティックRAMならWRがHのときはデータを出力する(つまりREAD)ということでもできるのですがI/Oの場合RD_入力が必要なものも多いのでその場合には回路に工夫が必要になるかと思います。
今回の試作ボードではとりあえずI/Oの接続は考えていません。
いずれ計画が進んだらそれなりに考えてみるつもりです。

W65C02マイコンボードの製作[第3回]
2026.7.5 upload

前へ
次へ
ホームページトップへ戻る