>>706 >>813
keiser(マッパー版SMB2J)のバンク配置の詳細
バンク
0($00000) PRG $6000 #0
1($02000) PRG $6000 #1
2($04000) PRG $6000 #2
3($06000) PRG $6000 #3
4($08000) CHR #0
5($0A000) CHR #1
6($0C000) CHR #2
7($0E000) CHR #3
8($10000) 未使用(PRG $6000 #1の未パッチデータ?)
9($12000) 未使用(PRG $6000 #2の未パッチデータ?)
A($14000) 未使用(PRG $6000 #3の未パッチデータ?)
B($16000) PRG $6000
C($18000) PRG $8000
D($1A000) PRG $A000
E($1C000) 未使用(PRG $6000 #0の未パッチデータ?)
F($1E000) PRG $E000
バンク切り替えにはメモリー$7F7を使っている。
CHRには$7F7を#$4とORした値。(CHR-RAMに転送)
PRG $6000には$7F7をそのまま指定するようになっている。この処理はセットで行われます。
CHRは無駄に使用しているように見えるがシンプルなバンク切り替えコードの為にこのようになっているようです。
PRGの他の部分はAND $FFFFした値がCPUアドレスと一致するように配置されています。
意外と合理的な配置でした。 >>827
ミスってたorz
>>706 >>813
keiser(マッパー版SMB2J)のバンク配置の詳細
バンク
0($00000) PRG $C000 #0
1($02000) PRG $C000 #1
2($04000) PRG $C000 #2
3($06000) PRG $C000 #3
4($08000) CHR #0
5($0A000) CHR #1
6($0C000) CHR #2
7($0E000) CHR #3
8($10000) 未使用(PRG $C000 #1の未パッチデータ?)
9($12000) 未使用(PRG $C000 #2の未パッチデータ?)
A($14000) 未使用(PRG $C000 #3の未パッチデータ?)
B($16000) PRG $6000
C($18000) PRG $8000
D($1A000) PRG $A000
E($1C000) 未使用(PRG $C000 #0の未パッチデータ?)
F($1E000) PRG $E000
バンク切り替えにはメモリー$7F7を使っている。
CHRには$7F7を#$4とORした値。(CHR-RAMに転送)
PRG $C000には$7F7をそのまま指定するようになっている。この処理はセットで行われます。
CHRは無駄に使用しているように見えるがシンプルなバンク切り替えコードの為にこのようになっているようです。
PRGの他の部分はAND $FFFFした値がCPUアドレスと一致するように配置されています。
意外と合理的な配置でした。 そういばMMC3(マッパー4)版では、
PRGバンク
0($0000) PRG $6000(PRG-RAM)
1($2000) PRG $8000
2($4000) PRG $C000 #0
3($6000) PRG $C000 #1
4($8000) PRG $C000 #2
5($A000) PRG $C000 #3
6($C000) PRG $A000
7($E000) PRG $E000
CHRバンク
0($0000) CHR #0
1($2000) CHR #1
という構成だった希ガス。
PRG-RAM($6000)に転送するバンクは先頭。
バンク切り替えを行う$C000はメモリ$7F7を#$2とORした値。
最終バンクはやはり$E000。
$8000と$A000は残りのバンクに昇順に配置という感じか
0830名無しさん@お腹いっぱい。2023/07/07(金) 00:10:03.07ID:lIZo6ub+
女装深夜徘徊してくるわ、いつものとこ(ダークウェブ)で配信するから良かったら見にきてくれ!
>>829
MMC3だと$C000-DFFFをバンク切り替えできるモードにした場合、
$8000-9FFFは最後から2番目のバンクに固定されるので、
PRGバンク
0($0000) PRG $6000(PRG-RAM)
1($2000) PRG $A000
2($4000) PRG $C000 #0
3($6000) PRG $C000 #1
4($8000) PRG $C000 #2
5($A000) PRG $C000 #3
6($C000) PRG $8000
7($E000) PRG $E000
CHRバンク
0($0000) CHR #0
1($2000) CHR #1
仕様上、変な配置になっているようだ マッパー142(kaiser)のIRQ Acknowledgeについて、
レジスタ$C000-$CFFFにbit0=1の値を書き込んでから、レジスタ$D000-$DFFFに何か書き込むとIRQ Acknowledgeするらしいが(VRC3ほぼ互換)、そうではなく、
レジスタ$E000-$EFFFにbit0=1かつbit4=1の値を書き込んでから、レジスタ$F000-$FFFFにbit4=1の値を書き込んむとIRQ Acknowledgeする可能性あり...
>>814 >>819
パッチです。(ANNSMBとSMB2J)
見落とされていたFDS BIOS部?のコードベースの共通化しました。 試しにマッパー142版を作ってみました。LUIGIの表示がMARIOになってしまいますが、
そこはまだ直していません。(SMB2JとANNSMB)
エンディングの音楽はちゃんと鳴ると思います。(手抜きバンク切り替え)
動作検証用として
斧 /u/4067211.zip
>>792
>MARIO、LUIGIの表示部分は比較的修正し易いと思うが
そんなこと無かったわ。
確かにスコアの上の所をLUIGI表示にするのは比較的簡単だが、エンディングの所のLUIGI表示は
糞面倒臭い。
FDSだとTHANK YOU MARIOの文字列のMARIOを直接LUIGIに書き換えてる。
MMC3版ではその領域はROMなので書き換えられないので、空き領域にLUIGI用の文字列"群"を
用意して、THANK YOU MARIO処理のポインタを書き換えている。(その領域は$6000-$7FFFでRAM)
つまりメインプログラム書き換えるか、バンク切り替えしかないな。
だから海賊版でLUIGI処理に手を加えてものが無い。 MARIO・LUIGI表示に関連する部分は
●スコア上部
●通常城クリア
●エンディング
とある。
通常城クリアとエンディングは
ポインタ(構造体)からポインタ(構造体)を読むような処理で複雑です。
ポインタ(構造体)を本体RAMに入れてしまうって方法も考えられますが、
これも容量食う上に面倒臭い上にダーティになります。
バンク切り替えでなんとかする場合は、トータルで考えてMMC3版をベースに$6000-$7FFFを
通常MARIO、通常LUIGI、エンディング音楽MARIO、エンディング音楽LUIGIと4バンク用意するのが
シンプルとなります。
>>841
もう少し整理してみると、
斧取得後のスクリプトへのポインタ(構造体)とスクリプトがある。
その"どちらか"を書き換えれば、メインプログラムへの変更は最小限に抑えられる。
ポインタ(構造体)は60バイト、スクリプトはLUIGIに対応させる必要のあるのは
6078: 3D 6C :<0C> [THANK YOU MARIO!] →6C3D 20バイト
6080: 93 C8 :<10> [THANK YOU MARIO!] →C8D7 24バイト
6086: D7 C8 :<13> [HURRAH TO MARIO] →C8D7 20バイト
の計64バイト
本体RAMはスタック領域の未使用部分を使用に連続で64バイト確保できる場所がある。
(嵐用で使っている部分を考慮しても64バイト確保可能たぶん)
スクリプトを置く場合でも工夫すれば24バイトで済む。ただしプログラム難易度は上がるでしょう。 >その"どちらか"を書き換えれば
その"どちらか"を本体RAMに移動させれば
>>840
スコア上部も意外と厄介だったorz。スクリプトが39バイトもある... マッパー195のANNSMBは4KBのCHR-RAMを使っているが、2KBに削減は可能。
しかしベースのMMC3版SMB2Jが$8000.D7=0の設定で作られている。
$8000.D7=1の設定にするにはCHRバンクを設定している所を弄らないといけないが、コードサイズが
増えるんだよね...
Sunsoft FME-7( + CHR-RAM)に移植は面白いかなと考えていた所、
Namco 163が結構イイ感じだと思った、これはマッパー195のCHR-ROM + CHR-RAMが再現できます。
CHR-RAMを2KBに削減した場合は
マッパー194(MMC3ベース)
マッパー252(VRC4ベース)
マッパー253(VRC4ベース)
で利用可能です。
あとFDSのIRQを再現するにはスキャンラインIRQよりもサイクルIRQの方が再現性が高くなります。
またSMB2JまたはANNSMBの場合はスキャンラインIRQよりも12bit固定タイミング サイクルIRQの
方が再現性が高くなります。
MMC5A + CHR-RAMが優れているのは言うまでもありません。
あとメモとして
マッパー40はサブマッパー1を使用した場合アウターバンクレジスタでCHR-ROMのバンクが変更可能です。
0852名無しさん@お腹いっぱい。2023/07/14(金) 14:55:44.78ID:eX739ED9
理論上、マッパー142(kaiser)のやつをマッパー40に移植することは可能。
利点は
ちゃんとルイージのジャンプ力と滑りになる。(但し表示はLUIGIにならない)
エンディングでフリーズしない。9-1に行ける。(但し音楽は変)
という感じでやや微妙な感じで作成熱意が...
マッパー40はIRQの勉強にはいいでしょう。
マッパー142のIRQは謎が多すぎる。
ANNSMBまだバグあるな。パワレルワールド行ってから、ゲームオーバーになってRetryを選択して
1-1からスタートして遊んでみたところ1-3の中間地点で乙る事が判明orz
>>856
ベースにしたMMC3版SMB2Jも同様にパラレールワールドクリア後にRetryして、2-1を遊んだら、
中間地点で乙りました。
つまりパラレルワールド用の途中開始ページ(中間地点)指定の値がそのままになってしまっている。 >>822-826
この処理部でkaiser版とMMC3版の違いの肝要なところは、
FDS版では
[SM2MAIN]
; 7038: BC FD 6F LDY $6FFD,X ; 途中開始ページ(2バイトで1ワールド分)
6FFD: 66 60 World 1
6E00: 88 60 World 2
6E02: 66 70 World 3
6E04: 77 60 World 4
6E06: D6 00 World 5
6E08: 77 80 World 6
6E0A: 70 B0 World 7
6E0C: 00 00 World 8
6E0E: 00 00 World 9
; 死亡処理(リトライ 途中開始ページ)
702B: AD 5F 07 LDA $075F ; A=ワールド
702E: 0A ASL A ; A=A*2
702F: AA TAX ; X=A
7030: AD 5C 07 LDA $075C ; A=エリア
7033: 29 02 AND #$02 ; A=A AND 00000010
7035: F0 01 BEQ $7038 ; 3,4以外のエリアならjump
7037: E8 INX ; X++
7038: BC FD 6F LDY $6FFD,X ; Y=途中開始ページ
[SM2DATA4]
; 途中開始ページ
C3CE: 76 50
C3D0: 65 50
C3D2: 75 B0
C3D4: 00 00
; BFEE: 20 D6 C3 JSR $C3D6
C3D6: A0 07 LDY #$07
C3D8: B9 CE C3 LDA $C3CE,Y
C3DB: 99 FD 6F STA $6FFD,Y
C3DE: 88 DEY
C3DF: 10 F7 BPL $C3D8
C3E1: 60 RTS
となっており、 つまりFDS版ではパラレルワールドの時は$6FFDの値を$C3CEの値に書き変える処理があります。
kaiser版では$6000-$7FFFがROMで書き変えられないので、まだコードじっくり見ていないので推測だが、
パラレルワールドの時は$6FFDでは無く$C3CEの値参照するようにコードが変更されていると思われる。
MMC3版は$6000-$7FFFがRAMなので再びFDSと同様の処理を行うように変更されました。
しかしそこに落とし穴がありました。パラレルワールドでゲームオーバー時にRetryでタイトル画面に
戻った時、アドレス$6FFD(途中開始ページ)の初期化が行われていない為に問題が発生するようです。
FDS版はSM2DATA2、SM2DATA4(、SM2DATA3)が読み込まれた状態でRetryするとSM2MAINを
再ロードする為問題ありません。
MMC3版の途中開始ページ問題の対処法はいくつか考えられるが、
一つはkaiser版コードを使用する。
もう一つはRetry時に$6FFD(途中開始ページ)を初期化するコードを導入する。
MMC3版SMB2Jは改良派生版がいくつかあるので要調査。
個人的にはkaiser版コードで問題ないと思う。
>>819
>keiser版は残機が減らないモードがついている?
おそらく、途中開始ページの処理の関係でそうなっているのかも。
確かに特定の値を入れると残機が減らないけど >>860
>MMC3版SMB2Jは改良派生版がいくつかあるので要調査
SRAMセーブ付きのやつで、途中開始ページ対処したのあるけど、
コード変更されすぎていて変更部追えない...
海外のスレッド徹底的に調べてみる?古いサイトとか見つけにくかったりするからな... 0864名無しさん@お腹いっぱい。2023/07/24(月) 18:12:08.01ID:StEAzIXD
>>826
>MMC3版のコードをマッパー142に導入して動作確認
逆も試してみました。全く問題ないようです >>860
途中開始ページは英語でどう表現するのか?
逆汗のコメントでは
HalfwayPageNybblesとかHalfwayPageのようだ 0866名無しさん@お腹いっぱい。2023/07/24(月) 19:39:56.22ID:StEAzIXD
0867名無しさん@お腹いっぱい。2023/07/24(月) 19:45:03.05ID:StEAzIXD
Super Mario Adventures - Hack of Tiny Toon Adventures [NES]
おすすめ。
なんかTiny Toon Adventures [NES]の動きがマリオ3とそっくりじゃね(意味深)
と話題になり、それで作られたハックロム
>>866
これで考えられるカセット化で発生するバグは全て潰せた気がします。(
画面上部は実機や精度の高いエミュでは少し境界がブレるかも知れませんがMMC3 IRQの仕様です...)
検証してくれる人大募集。
あとはFDS版にもともとあるバグはそのままです。(特にANNSMBのワールドセレクト版の方は
タイトル画面でワールドA-Dにしてマリオが動き出すとクラッシュします。)
あとは通常プレイではあり得ないが、マリオかルイージの変数は$0か$1ですが、FDS版では$2以上にすると
バグった名前と変な色のキャラになりますが、その挙動までは再現されません。
それを再現するにはMMC5(A)が必要。) >>868
>画面上部は実機や精度の高いエミュでは少し境界がブレるかも知れませんがMMC3 IRQの仕様です...)
まあMMC3でもSRAM版とかは適切に表示できるようなので、修正は可能でしょう >>809 >>811-812
サウンド部分は適切な処置を行えば、割合ゲームの他の部分への影響を与えずに弄ることができます。
で追加のコードやデーターの為にサウンドエンジンを別バンクに移動させることもしばしば行われます。
エンディングの音楽の部分は$6000-$7FFFをバンク切り替えさせる方法が手っ取り速いですが、
他の事にも$6000-$7FFFのバンク切り替えも使う場合に厄介であるうえにシンプルさを損ないます。
そこで、$6000-$7FFFのバンク切り替えを使わずかつ元のサウンドエンジンに手を加えずに対処する方法、
@本体電源ON時に本体RAMにサウンドエンジン用2バイトのポインタを初期化、
Aサウンドエンジンに飛ぶJSR命令の飛び先を適当なROMの空き領域に指定、
Bそこにインダイレクトジャンプ命令[JMP (IM16)]で本体RAMにサウンドエンジン用2バイトのポインタを指定
これでいける筈... これでルーイージテキスト表示のみに$6000-$7FFFのバンク切り替えができるぞと思ったところ、
インダイレクトジャンプ命令[JMP (IM16)]を二段活用すれば同様にけるのではないかと思った。
クール&ダーティーな方法ですねぇ
■夏のつべら第6弾
『視聴者が創りしUNKマリオ2 完全攻略放送』
▽マリオメーカー2/創作ステージ
「SUPER MARIO 2 UNK WORLD」
1-1『デコボコへいげん』~8-4『最終決戦』
36時間放送(12:00~)
ttps://www.youtube.com/live/RxQf-J8qGKw
1以降の配信
↓
ttp://youtube.com/@junchannel
3改造のrainbow realmsってやつが結構おもしろかった
08763136626974e381a7e4bc9ae8a9b1e38197e381abe69da5e3819fe382882023/09/13(水) 14:27:15.89ID:m5BlIg7i
3136626974e381a7e4bc9ae8a9b1e38197e381abe69da5e3819fe38288