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


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

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

[第76回]



●ROM(27C256)を接続しました

いよいよ次のステップに入ります。
今までのテスト基板は64KBのメモリ空間の全部にRAMを配していました(必要なときは$0200〜$02FFにI/Oを割り当てます)。
昔と違って今はWindowsパソコンと簡単にUSBで接続することができます。
プログラムの開発やデバッグなどもその環境で(つまりこの連載でずっと使っているまさにその環境で)RAMにプログラムを書いて即実行しデバッグするのが最も簡単で手軽な方法です。
これから作成していくつもりのシステムプログラムなどもそのようにしてWindowsパソコンからUSB経由でW65C02テストボード上にロードすることでシステムプログラムを実行することもできます。
そういうことからすればROMは必須アイテムではないとも言えます。
しかし。
やっぱりシステムプログラムやユーザープログラムをROMに書いてスタンドアローンで動かしてみたい。
そういう願望をお持ちの方も多いのでは。
ということで。
今回はROM(27C256)の接続テストです。
最初の最初のとりあえずの接続テストですから今まで82C55を接続していた外部接続用のフラットケーブルコネクタにROMボードを接続してその中身を読み出せるかどうかのテストをとりあえず手っ取り早く行ないます。
ROMボードとしてW65C02テストボードのプリント基板をそのまま使って32pinRAMを置くためのところに28pinのICソケットを実装してそれと外部接続用のフラットケーブルコネクタのみを実装して即席の増設ROM基板を作りました。

W65C02のメモリアクセスはメモリを256バイトずつに分割しそれぞれをページという単位でアクセスします。
そのうちの$0000〜$00FFはゼロページという特別のエリアになっていてそのエリアのみにアクセスできる特別のアクセスモードが用意されています。
また$0100〜$01FFはスタックエリアに割り当てられています。
当然のことながらこのエリアを含む$0000〜$7FFFの32KBはROMに割り当てるわけにはいきません。
ということになると27C256を割り当てることができるのは後半の$8000〜$FFFFになります。
その場合ジャンプテーブル$FFFA〜$FFFFもROMになってしまいますがそこを可変にしたい場合にはRAMエリアへのジャンプアドレスを書いておくことで対処可能です。
とにかくそれは今後の作業です。
今回はROMの中身が読めるかどうかのテストです。
下は即席で作ったROM基板(W65C02テスト基板を流用)の回路図です。

回路は省略しますが上記ROM基板を接続したときはW65C02テストボード上の628128のCSにはA15がつながるようにショートピン部分を加工してあります。
それによってA15=0のときのみ628128にアクセスできます(A15=1のときには628128はアクセスされません)。
上の写真のように2枚の基板を接続して行なった動作テストは一週間ほど前のことでそのときのコマンドプロンプト画面は残っていません。
そのときのログは残っていますのでそれを使って説明をします。
logfile piciolog\0910210738.txt open
*** pic i/o ***
picio-08 connected
write & check FFFC=20,FFFD=FE
loading 65c02bp.bin ...002e(46)bytes loaded,from FF80 to FFAD
>/dm ff
FF00  3C 20 ED 53 C8 F0 CD 01 - 71 CD 88 76 CD 85 7D ED
FF10  5B C8 F0 C9 D1 F1 3E 33 - C3 0F 20 3E 08 C3 0F 20
FF20  3E 09 C3 0F 20 3E 0A C3 - 0F 20 3E 0B C3 0F 20 3E
FF30  0C C3 0F 20 3E 34 C3 0F - 20 3E 3F C3 0F 20 C3 0F
FF40  20 ED B0 7E B7 F2 4D 7F - EB 2B 2B CB FE C1 D1 CD
FF50  D3 7E C9 3E 08 C3 0F 20 - 3E 09 C3 0F 20 3E 0A C3
FF60  0F 20 3E 0B C3 0F 20 3E - 0C C3 0F 20 00 00 50 04
FF70  00 00 00 40 01 00 FF FF - 7F 00 00 CA 5F 6B E9 00
FF80  21 71 7F C3 A9 7E 21 76 - 7F C3 A9 7E 21 76 7F C3
FF90  30 7E 21 7B 7F C3 30 7E - 21 71 7F C3 92 7B 24 43
FFA0  4D 98 21 52 54 98 27 52 - 31 4D 90 15 44 45 4C 45
FFB0  54 45 D4 98 43 50 D4 8C - 4A 50 18 36 4D 56 D4 89
FFC0  53 4C D4 8F 58 4C D4 92 - 52 36 34 90 0C 57 32 35
FFD0  36 90 00 52 32 35 36 90 - 03 42 52 4F 4D D4 9E 43
FFE0  53 D4 83 52 52 42 D4 80 - 52 31 32 38 90 0F 43 4F
FFF0  4E 54 A0 1B 41 53 20 FE - 0F 00 44 41 20 FE 0F 03
end of /dm
>/dm 80
8000  C3 00 08 00 00 00 00 00 - C3 BA FF 00 00 00 00 00
8010  C3 BD FF 00 00 00 00 00 - C3 C0 FF 00 00 00 00 00
8020  C3 C3 FF 00 00 00 00 00 - C3 C6 FF 00 00 00 00 00
8030  C3 C9 FF 00 00 00 00 00 - C3 CC FF 3E FF D3 98 21
8040  EC 83 06 0C AF 77 23 05 - C2 45 00 21 C7 83 22 E2
8050  83 3E FF D3 98 31 D1 83 - CD C0 01 CD 16 02 47 E6
8060  10 CA 84 00 78 E6 0F 06 - 00 87 4F 21 74 00 09 7E
8070  23 66 6F E9 CC 00 F9 01 - 94 00 B8 00 9D 00 C2 00
8080  D5 00 07 01 CD B5 01 3A - EC 83 B0 32 EC 83 CD A1
8090  01 C3 51 00 2A EC 83 22 - EE 83 C3 A1 00 2A EE 83
80A0  23 CD AD 00 22 EE 83 CD - A1 01 C3 51 00 3A EC 83
80B0  32 ED 83 7E 32 EC 83 C9 - 2A EE 83 2B CD AD 00 C3
80C0  A4 00 2A EE 83 3A EC 83 - 77 C3 9D 00 2A EE 83 22
80D0  E0 83 C3 F9 01 06 F7 2A - EC 83 EB 2A EE 83 78 D3
80E0  98 7C CD 7C 02 7D CD 7C - 02 7A CD 7C 02 7B CD 7C
80F0  02 2B 23 7E CD 7C 02 CD - 01 03 C2 F2 00 C3 51 00
end of /dm
>/exit

リモート接続を終了しました
logfile closed at Thu Sep 10 21:08:16 2026

適当なROMを実装してその中身を/DMコマンドで読み出しました。
$8000〜にはROM(27C256)の$0000〜が読み出されます。
適当なROMとしてND80Z3.5のシステムROMを実装しました。
$8000〜にはND80Zモニタプログラムの先頭のジャンプテーブルが読み出されました。
ざっと見たところ正しく読み出されているようです。

念のために$0000〜のRAMエリアがちゃんとアクセス可能になっているかどうかも確認してみました。
logfile piciolog\0910212306.txt open
*** pic i/o ***
picio-08 connected
write & check FFFC=20,FFFD=FE
loading 65c02bp.bin ...002e(46)bytes loaded,from FF80 to FFAD
>/dm ff
FF00  3C 20 ED 53 C8 F0 CD 01 - 71 CD 88 76 CD 85 7D ED
FF10  5B C8 F0 C9 D1 F1 3E 33 - C3 0F 20 3E 08 C3 0F 20
FF20  3E 09 C3 0F 20 3E 0A C3 - 0F 20 3E 0B C3 0F 20 3E
FF30  0C C3 0F 20 3E 34 C3 0F - 20 3E 3F C3 0F 20 C3 0F
FF40  20 ED B0 7E B7 F2 4D 7F - EB 2B 2B CB FE C1 D1 CD
FF50  D3 7E C9 3E 08 C3 0F 20 - 3E 09 C3 0F 20 3E 0A C3
FF60  0F 20 3E 0B C3 0F 20 3E - 0C C3 0F 20 00 00 50 04
FF70  00 00 00 40 01 00 FF FF - 7F 00 00 CA 5F 6B E9 00
FF80  21 71 7F C3 A9 7E 21 76 - 7F C3 A9 7E 21 76 7F C3
FF90  30 7E 21 7B 7F C3 30 7E - 21 71 7F C3 92 7B 24 43
FFA0  4D 98 21 52 54 98 27 52 - 31 4D 90 15 44 45 4C 45
FFB0  54 45 D4 98 43 50 D4 8C - 4A 50 18 36 4D 56 D4 89
FFC0  53 4C D4 8F 58 4C D4 92 - 52 36 34 90 0C 57 32 35
FFD0  36 90 00 52 32 35 36 90 - 03 42 52 4F 4D D4 9E 43
FFE0  53 D4 83 52 52 42 D4 80 - 52 31 32 38 90 0F 43 4F
FFF0  4E 54 A0 1B 41 53 20 FE - 0F 00 44 41 20 FE 0F 03
end of /dm
>/dm 00
0000  6D 0C 84 40 28 54 64 64 - 64 41 42 00 40 45 C5 EE
0010  68 CD 65 CC C0 64 CF 40 - 52 4A 04 44 64 46 4D 41
0020  4D 46 84 26 40 8A 44 4E - 54 44 4E C4 C4 46 15 55
0030  09 07 64 44 04 41 41 44 - 44 44 65 0A 86 41 45 6C
0040  63 42 6C 64 C6 44 66 44 - 6E 66 4C 04 04 45 CD 55
0050  D5 60 AE A4 6E 91 5D 64 - 4C 50 45 B4 64 C4 44 65
0060  05 4C E4 4C C0 40 45 24 - 60 CC 64 42 44 4E 47 64
0070  57 42 0A C4 66 C6 46 47 - 64 8D 47 40 44 45 45 64
0080  6A 02 44 0C C5 0D 64 00 - 4C 06 4E C7 40 66 45 44
0090  C5 64 C0 44 E4 45 44 06 - 8C 45 4C 46 54 04 41 4C
00A0  27 EC 84 C6 00 E4 75 44 - C6 46 2C 44 44 4C 41 84
00B0  CF 44 E8 49 66 40 C0 44 - 44 40 14 CF 54 C4 55 57
00C0  45 C0 84 04 45 06 E5 04 - 4C C0 44 44 D4 C4 44 40
00D0  46 46 C6 52 04 46 44 C5 - 46 60 40 C4 45 4C 55 44
00E0  45 A0 C5 6C E4 6C 44 E5 - E6 44 F5 C4 64 44 4C 45
00F0  FF 49 45 43 7F EF 66 E5 - 4D CC 45 45 55 45 64 64
end of /dm
>/cm 0000
0000 6D-12
0001 0C-34 
0002 84-56 
0003 40-78 
0004 28- 
0003 78- 
0002 56- 
0001 34- 
0000 12- 
/cm end
>/exit

リモート接続を終了しました
logfile closed at Thu Sep 10 21:37:12 2026

/CMコマンドで中身を書き換えてみました。
ちゃんとRAMとしてREAD/WRITEできていることが確認できました。

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

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