DISK

DISK DRIVE へのアクセス方法での問題は下記です。

DRAM アクセス

CPU area $6000-$dfff は DRAM ですが、kazzo からはまともなアクセスができませんでした。6502 simlulated read/write waveform でも同様でした。

PPU area 0x0000-0x1fff は SRAM なので読み書きできます。

ドライブアクセス

$4025, $4026, $4032 あたりを BIOS をまねて下記のように制御してみました。C の write timing でドライブのモーターが停まります。ヘッドが最内周に移動するタイミングでとまっているので $4032.1 が正しくとれているはずです。

A init
B motor_on
C read_start_mark
D IRQ_ENABLE
E read_end_mark
      | A |  B   | C | D | |    E    |
D.0bit|LLL|HHHHHH|HHH|HHH| |HHHHHHLLL|
T.1bit|HHH|HHHLLL|LLL|LLL| |LLLLLLLLL|
R.2bit|HHH|HHHHHH|HHH|HHH| |HHHHHHHHH|
B.4bit|LLL|LLLLLL|LLL|LLL| |LLLHHHLLL|
1.5bit|HHH|HHHHHH|HHH|HHH| |HHHHHHHHH|
S.6bit|LLL|LLLLLL|HHH|HHH| |HHHHHHLLL|
I.7bit|LLL|LLLLLL|LLL|HHH| |HHHHHHLLL|
Note  |   |      |   |   | | 1  2    |
*1. readdata, end of head == 0
*2. readdata, block end mark exist == 0
停まった直後に無理矢理書き直すと、モーターが再始動し DRQ が発生するのですが、USB の通信がきれてしまいます。きれる理由は割り込みの制御が悪いのか、電源の問題なのかは調査手段がないので詰まっています。

詳細は firmware の disk_process.c をご覧下さい。

MMC5 W-RAM, EXRAM

RAM adapter の DRAM 同様アクセスできません。

その他 battery backup RAM

battery backup RAM は実際のカートリッジには制御レジスタがあるのですが、エミュレータでは実装されてない(アクセスし放題)とか RAM の容量が適当な場合が多く、実際のカートリッジにフィードバックできません。

Namco, Taito 専用カートリッジだとソフト個別にばらばらというのもざらで、マッパ番号が役に立たないなどエミュレータと本物の違いがよくわかるところです。

さらに前述の問題もありますので、RAM のアクセスに関しては Copy NES を利用するのが最善解ではないかと思っています。