上に戻る
3.起動時の初期化設定
概要
 よくわからないですが、MMC5の機能を使うと、ファミコンとは思えない画像表示が出来るようです。
 具体的には、横方向のラスターのようなものとか?よくわかりません。
 それらを使うことはないですが、全てOFFにする必要はあります。
具体的に……
 どうレジスタを叩いたかを書いていってみます。
 これらの初期化はバンク40に書いて、リセット直後に呼び出します。

 プログラムサイズの指定?
lda #$03
sta $5100
 なんか、別の値だと、プログラムバンクを、もっと大きな切り方に出来るようです。
 大きな切り方にすると、扱いは悪くなりますが、より多くのプログラムを保持できるのではないかと思います。
 とりあえず、ロックマン4では2000毎に切るので、3を書いておきます。


 キャラクタサイズ指定?
lda #$00
sta $5101
 VRAMを使っているために、関係ないかもしれない。とりあえず0を書いておいた。


 SRAM設定
lda #$02
sta $5102
lda #$01
sta $5103
 それぞれ、上記の値を書いておかないと、SRAM領域にプロテクトがかかって書き込みが出来ないようだ。
 こういった機能はMMC3にもあり、たぶん、電源投入時や落とすときに、変な値がSRAM領域に書き込まれないようにするための処置だと思う。
 ロックマン4ではSRAMは使わないのだが……まぁ、拡張で使えるように、上の値を書いておいた。


 グラフィックモード?
lda #$00
sta $5104
 わからないので0を書いておいた。
 たぶん、うまく使うとファミコンとは思えない処理が出来るのでは?


 ネームテーブルモード
lda #(((1)<<6)|((1)<<4)|((0)<<2)|((0)))
sta $5105
 4枚のネームテーブルに、どのアドレスをマップするか。
 2ビットずつで、左上、右上、左下、右下に、0〜3の値をセットできるらしい。
 水平ミラーであれば、
lda #(((1)<<6)|((0)<<4)|((1)<<2)|((0)))
sta $5105
 垂直ミラーであれば
lda #(((1)<<6)|((1)<<4)|((0)<<2)|((0)))
sta $5105
 を書き込むことになる。
 ロックマン4では、MMC3の機能を使って、水平ミラー・垂直ミラーをちょくちょく切り替えるため、この処理は随時必要になる。
(幸いにも、切り替えのためのコードは、元と同じ5バイトで済むので、移殖には困らない)


 フィル?
lda #$00
sta $5106
sta $5107
 わからないので0。これも、グラフィック面での処理を高める機能でしょうか?


 SRAMのバンク?
lda #$00
sta $5106
sta $5107
 NESヘッダにはないのですが、SRAMのサイズは、カートリッジごとの物理的な構造により表されるものらしい。
 そんなわけで、エミュ側は、ROMのCRCを用いて、SRAMのサイズを個別に認識して動作しているようだ。
(NESヘッダの拡張として、SRAMサイズを指定するものもある?)
 まぁ、何が言いたいかと申しますと、わからないので0を書いておく……と。


 split?
lda #$00
sta $5200
sta $5201
sta $5202
 これも、なにかグラフィック面での処理を高める機能だと思われる。
 わからないので0で^^


 IRQ
lda #$00
sta $5203
sta $5204
 滅茶苦茶大事。ラスターするときに叩く必要が出てくる。
 $5203でラインを決め、$5204で実行を決める。
 $5204に80を書き込むと、IRQが有効になるようだ。
 一方で、$5204をロードすると無効にすることが出来るらしい。
 ここではとりあえず0を書いておく(結局それか……)


 演算レジスタ?
lda #$00
sta $5205
sta $5206
 良くわからないが、書き込んでからロードすると、掛け算の結果がわかるらしい。
 MMC3には(たぶん)ない機能なので、使わない。
 とりあえず、ここにも0を書いておく。


 なんか、結局0を書いたのばかりですがw
 ここまでで、まともに実行できるようになります。
 スクロール時や、ラスターは酷いことになりますが。
(78)2008年9月21日 プレさ兵衛
inserted by FC2 system