【FC】スーパーマリオブラザーズ改造しようぜ!
■ このスレッドは過去ログ倉庫に格納されています
>>158 >>411-415 アドレスが… SMB2J-マッパー4 ワールドセレクト無し $447E AD FC 06 29 10 F0 $448D 8D FB 07 AD 00 60 $4507 A9 00 8D 5F 07 A9 00 8D 5C 07 A9 00 8D 60 07 SMB2J-マッパー4 ワールドセレクト有り $447E 8D FA 07 8D FC 07 $448D 20 00 FB 4C 50 F8 $4507 A9 00 8D 5F 07 A9 00 8D 5C 07 A9 00 8D 60 07 SMB2J-KAISER-マッパー142 $447E 8D FA 07 8D FC 07 $448D 20 00 FB 4C 50 F8 $4507 A9 00 8D 5F 07 A9 00 8D 5C 07 A9 00 8D 60 07 >>417 マッパー40 $047E AD FC 06 29 10 F0 $048D FB 07 AD 9F D2 $0507 A9 00 20 00 E0 A9 00 8D 5C 07 A9 00 8D 60 07 三番目のコードがFDSやマッパー4のものと異なります >>416 比較しやすいようにSM2MAINのプログラム部に16バイトのヘッダを付けて $647E AD FC 06 29 10 F0 $648D 8D FB 07 AD 00 60 $6507 A9 00 8D 5F 07 A9 00 8D 5C 07 A9 00 8D 60 07 エミュレーターで起動してワールドセレクトルーチンを探してみます。 でFDSとマッパー40で同じコードがあるか探したがやはり無いようです >>421 マッパー40のはKAISER(マッパー142)と似ていたので、とりあえず、 (実機アドレス) $E000〜$FFFFに該当する部分をKAISERのものに置き換えたら ワールドセレクトが出来るようになりました。 FDS版のワールドセレクトの実装は容量的に厳しい感じです。 SM2MAINは殆どMAX容量を使っています。 ROM版のワールドセレクトは$E000〜$FFFFの部分に実装されていて、 これはDisk BIOSのエミュレーションとバンク切り替え制御のサブルーチン等が 入っています。FDS版ではこの部分はDisk BIOSが占有しているのでユーザー が書き換えることはできません。 >>422 間違えました。失敗でした。起動するファイルを取り違えていた。 起動しませんでした。しかし容量てきには余裕はある w7nです。まだMario Gaidenを作っています。 誰かがChacky(Super Mario Freedomの作者)の連絡先を知れば教えて下さい。誠にありがとう。 GBAの"ファミコンミニ"からNESのROMを取り出す方法があるみたいだが、 ("ニンテンドークラシックミニ ファミリーコンピュータ"では無い) FDSのROMは取り出せるか調べてみたが、メモリ上に展開されたデータを 取り出してみたが、独自の形式になっていた(QD形式と互換性はあるのか不明。) どうもデーターが少しパッチしてあるようで違うようです。 で早速試しにSM2MAINのデーターに該当する部分を本家のFDSにコピーして 起動してみたが起動せず、エミュレーターによっては未定義命令でエラー。 またDISKBIOSもメモリーに展開されていたのでこれを使ってFDSのソフトを起動 してみたが起動せず、エミュレーターによっては未定義命令でエラー、 しかし未定義命令を無視する設定のあるエミュレーターならNINTENDOの画面と 音が出たが、読み込みが進まないようだ。 誰かQDをFDS変換するツールMGD1CNV持っていないかな? ぽんRev!!さんのファイル置き場(SkyDrive)にあったやつ データー構造解析中 とりあえずファイルの前はFDS形式ではブロックID3とブロックID4の計17バイトあるが、 GBAのものはファイル名の8バイトが省略されて9バイトとなっている。 ブロック01も省略されていて10バイトになっており、 メーカーコード、ゲーム名称、ゲームバージョンで残りの部分が不明、 ブロック02はそのままで2バイト まとめ ブロック01 ボリュームラベルブロック 10バイト (Byte) 位置 機能概要 1 メーカーコード 1 16 メーカーID (メーカーID表を参照) 2 ゲーム名称 4 17 ゲーム名称 (FMC-LNK等) 3 ゲームバージョン 1 ゲームバージョン 4 不明 1 不明 5 不明 1 不明 6 不明 1 不明 7 不明 1 不明 ブロック02 ファイル数ブロック 2バイト (Byte) 位置 機能概要 1 ブロックコード 1 1 ブロック識別コード ($02=ファイル数ブロック) 固定 2 全体ファイル数 1 2 片面に収録されている全ファイルの個数 ブロック03 ファイルヘッダブロック 16バイト (Byte) 位置 機能概要 1 ブロックコード 1 1 ブロック識別コード ($03=ファイルヘッダヘッダブロック) 固定 2 シーケンシャルファイル番号 1 2 先頭から順番に振られた番号(DISK-BIOSでは未使用) 3 ロードナンバー 1 3 ディスクシステム起動時や、ディスクアクセス時にキーになる番号 4 ファイルロード先アドレス 2 ファイルをロードする先のアドレス 5 ファイルサイズ 2 ファイルサイズ 6 データ格納先 1 ファイルロード時のデータ格納先 0=メインメモリ 1,2=VRAM ブロック04 QuickDisk ファイルデータブロック 1バイト〜(可変長) 項番 項目名称 サイズ (Byte) 位置 機能概要 1 ブロックコード 1 1 ブロック識別コード ($04=ファイルデータブロック) 固定 2 ファイル実バイナリデータ 不定 2 ファイルの実データ(可変長 0バイト〜64,000バイト) あとはGBAのROM上では圧縮されているので、圧縮方式が分かれば 中身の置き換えが出来るかも。 ちなみにファミコンミニのROMのソフトはNESヘッダが付いていないようです。 ファミコンミニの第2次スーパーロボット大戦を英語のするパッチ作った人がいるから、 作ることは可能だろう。しかし圧縮かスクランブルかかってるがその情報が全然 見つからない。 nes_classic_zelda_crack-howto_internal_gba-rs.zipか nes_classic_zelda_crack-howto_internal_gba-rs.7zって というドキュメントに詳細なハック方法があるようだが もはや何処にも無い… >>436 ファミコンミニの第2次スーパーロボット大戦を英語化するパッチ作った人がいるから、 作ることは可能だろう。しかし圧縮かスクランブルかかってるがその情報が全然 見つからない。 関連情報 Classic NES Series Anti-Emulation Measures https://mgba.io/2014/12/28/classic-nes/ >>436 たぶんROMはGBA BIOSのファンクションで展開できるLZSS(GBA LZ77)で 圧縮されていると思うが、ヘッダ情報は解析しないと分からないな。 205名無しさん@お腹いっぱい。2018/01/01(月) 09:47:21.51ID:jkJabgVJ 解析の結果とても素人じゃ無理だと分かったので、気合でネット上探しまくって R@M見つけたのでパッチ作りました。32Mbit(4MB)のROMイメージにパッチして 下さい。そのごお好みで8Mbit(1MB)、2Mbit(256KB)にトリミングしてもいいです。 Famicom Mini - Dai 2 Ji Super Robot Taisen (J) (Promo).ips https://www.axfc.net/u/3875791.zip Famicom Mini - Kido Senshi ZGundam Hot Scramble (J) (Promo).zip https://www.axfc.net/u/3875880.zip Famicom Mini - Vol. 01 - Super Mario Bros. (J) (V1.1).zip https://www.axfc.net/u/3876221.zip Famicom Mini - Vol. 02 - Donkey Kong (J).zip https://www.axfc.net/u/3876222.zip Famicom Mini - Vol. 03 - Ice Climber (J).zip https://www.axfc.net/u/3876223.zip Famicom Mini - Vol. 06 - Pac-Man (J).zip https://www.axfc.net/u/3876224.zip Famicom Mini - Vol. 07 - Xevious (J).zip https://www.axfc.net/u/3876225.zip Famicom Mini - Vol. 08 - Mappy (J).zip https://www.axfc.net/u/3876226.zip 夢工場ドキドキパニックのROM版 Doki Doki Panic (FDS Conversion).nes を見つけた。 マッパーは103のようだ オールナイトニッポン版スーパーマリオブラザーズを逆アセンブル中 オールナイトニッポン版スーパーマリオブラザーズをカセット化しようと思ったら、 プログラムを$6000から置けるマッパーを使用して、$E000から一部DISKBIOSのエミュレーション 及びバンク制御等を実装すればいけそうだな。$E000の部分はカセット版スーパーマリオブラザーズ2の データを使用して、バンクもそれにならってデーターを配置し、DISKBIOSを呼び出して いる所をパッチすれば理論上動くはずだ。 MMC3版のSMB2Jは中国の海賊ROMを元に作られました。 MMC3版は無理やりというか$6000がRAMになっているのでそこに プログラム置いている。$8000からはバンク切り替えで配置している。 シンプルにSMB2のファイルを$6000から置けるマッパー(例えばFME7)に入れて テストしてみると、タイトル表示までは出るんだよね。クリア回数でFDSの機能 呼び出すからハングしている感じ。 >>423 FDSはディスクのデーターをRAMの好きなところにロードできるので、 ワールドセレクトのデーターを置くことは出来るだろう。 ROMチェッカーはトレイナー付のROMは読み込んでくれないな。 トレイナー付ROMを作成する場合は先にトレイナー無しのROMに ヘッダをトレイナー有りにしてから、バイナリエディタでNESヘッダの後に 512バイト分00を追加すればいける トレーナーは、もともとゲームを特定のマッパーにハックするために使われた512バイトの コードブロックでした。 トレーナーは廃止され、現在のエミュレーターによってほとんど 無視されます。 トレイナー領域はハック用に追加のプログラムを置くことができます。 たとえばマッパー0のROMでプログラムが32KBを超えて容量が足りない場合 の追加コードに使用されました。トレイナー領域のプログラムは$7000から 512バイト配置されます。トレイナーを要求するROMのトレイナーを取り除く場合は $7000にプログラムを置けるマッパーを使用するなどの方法が考えられます。 トレイナー領域にHello worldと表示するプログラムを置いてみました。 (RESETの割り込みベクタを$7000に設定しました。) エミュレーターがトレイナー領域をサポートするかどうかのチェックにも 使用できます。 http://smbarchives.run.buttobi.net/up/file/444.zip What is a trainer in iNES format? http://forums.nesdev.com/viewtopic.php?t=3657 kyuusaku NESトレーナーは512バイトのコードで、ゲーム開始前に$ 7000にロードされます。 Famicom複写機は、複写機自身のマッパーシステムにマッパー書込みを翻訳するコードを 保持するためにそれらを使用した。 ゲームは元のマッパーに書き込む代わりに、トレーナーの サブルーチンにジャンプするように変更されました。 おそらく、今日私たちがすべてのゲームの ハッキングされていないROMダンプを持つようになった今、エミュレートする必要はありません。 ハッカーが新しいコードのROMに静的スペースを割り当てることができなかったため、古い ハックが使用されることがあります。 http://en.wikipedia.org/wiki/Nintendo_Vs._Series Dwedit トレーナーを使用するカートリッジとしてスーパーマリオブラザーズのハッキング版は ありませんか? Disch いくつかのSMB ROMハックがトレーナーを利用しています。 私はカートリッジには何かが あるとは思っていませんが(トレーナーはカートリッジには存在しないからです)。 私は自分のエミュでトレーナーを完全に無視します(彼らがそこにいるならば、飛ばして ください)。 私はこれに何ら問題はなかった。 トレーナーは、とにかく(PRG-RAMのような) $ 7xxx に実際に存在する可能性がある他のものと競合します。 私が知っている限り、トレーナーは、iNES形式の廃止され、廃止された機能であり、 無視/回避する必要があります。 tepples いくつかのマッパー(例えば、SMB2j海賊マッパーとSunsoft FME-7)は、トレーナーが行く ROMを入れませんか? NROM / CNROM / UNROMから始め、別のPRG ROMチップを追加 し、7400シリーズのロジックを少し入れて$ 6000〜$ 7FFFの読み取りをデコードし、 iNESトレーナーをハードウェアで実装します。 しかし、誰もがそのような複製物を作ったことは ありえないとあなたは正しい。 ヘッダーにバッテリビットが設定されていないか、または.savファイルが見つからない場合、 PRG-RAMの最初の内容としてトレーナーを扱わない限り。 ここ http://smblabo.web.fc2.com/ のマリオマニアをマッパー40のトレイナー無しに変換してみました。 INES Mapper 040 https://wiki.nesdev.com/w/index.php/INES_Mapper_040 こまかい事書くと長くなるがとりあえず動きました。 トレイナーをサポートしないNintendulatorやNestopaで動きました。 マッパー40を使った理由は細かいセットアップが不要の為です。 (CPU$C000はバンク切り替え可能ですが、特に何も指定しない場合は バンク0が読み込まれ、他の場所はバンク固定です) https://i.imgur.com/7FEqt6b.jpg >>454 Dirtyな代替手段としてはマッパー1にしてセーブを有効にして、 (エミュによってはマッパー0のままでもいけるかも知れません) セーブデーターにトレイナーのデーターを置く方法もあります。 トレイナー領域がよく使われるのはFront FarEast社の たとえばGame Doctorといような、ROMをFDSディスクに コピーするツールで使われました。創世機ファミーよりも 強力で大容量ROMに対応(MMC3あたりまで)してました。 その装置の制御用のコードやROMを作動させる為のパッチを ディスクに記録していて、iNES形式でそれを再現する為に、 トレイナー領域が設けられそこにコードを配置したと思われます。 なおこれらのマッパーでもトレイナー領域を使っていないROMダンプも あるようです。 マッパー6(FFE F4xxx) マッパー8(FFE F3xxx) マッパー12(FFE F6xxx) マッパー17(FFE F8xxx) >>460 : Yes. Please patch this to a ROM image of 40,976 bytes. (When patched, the ROM itself is 41,048) ttps://www.dropbox.com/s/37bvuthvokpdnb5/unemari2test409.ips?dl=0 U1 gave me the patch a year ago. How did you still know about this hack? _ / ) | ̄|/ └┐ | | |いいね! |_|―、_ノ 改造スーパーマリオブラザーズをマリオコレクションのスーパーマリオブラザーズに 移植するSMB2SMCってツールがあるけど、 理論上スーパーマリオブラザーズとVS.スーパーマリオブラザーズと スーパーマリオブラザーズ(FDS版)とスーパーマリオブラザーズ(スーパーマリオコレクション 及びSuper Mario All-Stars)の面データーの相互変換は可能だよな? 裏技のように自動的にお金を収集してくれる方法とは グーグル検索⇒『稲本のメツイオウレフフレゼ』 D828Q SMB Utility を弄り倒して全ステージオリジナルにして遊んでたんですけど SMB2のFDSを改造するツールはないんでしょうか? >>470 smb2のアイテムを追加したりしてそれっぽくする事は出来るがsmb2のツールは無いと思う 俺も最近smb2改造したくなって海外の色んなフォーラム探したんだけど無かったんだよね マリオメーカーもいいんだけど、 エミュで改造マリオやってた身としてはFCのシステム面での制約に縛られた中で 如何にグラフィックや配置を良く見せるかと言う工夫が出来るのが魅力だと思う マップも単にカオスで高難易度な傾向の作品も少なくはなかったが、 中には原型をとどめてないくらい高度な改造をなさってた人がとても多かった マリメもバイナリやグラフィックエディタみたいなのを有料でもいいから DLCに組み込んでほしい >>472 わかるわかる。 敵を置きまくると、消えちゃうから、いかにして多く見せるとか こだわるのが楽しかった Uの改造ツールでないかな マリオメーカーやった事無いんだけど ファミコンやスーファミみたいな挙動の爽快感はあるのだろうか? NEWスーパーマリオWiiやって 凄くモッサリしていたので…。 3DSのファミコン(NES)バーチャルコンソールにはTNES形式が採用されている。 ines形式では正しく表現できないギャラクシアン(Galaxian)のROMも正しく表現できる SMBアーカイブが死んでるので念の為のURLのメモ SMBアーカイブ掲示板 ttps://jbbs.shitaraba.net/computer/28712/ 代理うpろだ ttps://ux.getuploader.com/smbarchive/ 👀 Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2) SMBラボもWINIPSしか置いていないけど、任●堂法○部にやられた? ファミコンってPRG-ROMが8Kや16Kの場合はミラーリングしているけど、 プログラムは大抵一番高いアドレスを使用しているね。 反応無いからもう一度いうね ファミコンってPRG-ROMが8Kや16Kの場合はミラーリングしているけど、 プログラムは大抵一番高いアドレスを使用しているね。 反応無いからもう一度いうね ファミコンってPRG-ROMが8Kや16Kの場合はミラーリングしているけど、 プログラムは大抵一番高いアドレスを使用しているね。 最後にもう一度いうね ファミコンってPRG-ROMが8Kや16Kの場合はミラーリングしているけど、 プログラムは大抵一番高いアドレスを使用しているね それでも反応無いからもう一度いうね ファミコンってPRG-ROMが8Kや16Kの場合はミラーリングしているけど、 プログラムは大抵一番高いアドレスを使用しているね。 Romhacking.net - Utilities - [FDS] Super Mario Bros 2 (Japan) Level Editor - jGreatEd https://www.romhacking.net/utilities/1485/ オールナイトニッポン版スーパーマリオブラザーズをSMB2Jのマッパー40に移植できないかと 試した所、一応動いた。しかし4-4までしか遊べない。メインプログラムの改造はほぼうまくいった が、DETA2〜DETA4の部分は手抜きしたから駄目だったかも。 改造コードメモ マリオ便利改造コード集 ttp://k1ilove.yu-nagi.com/mariocod.html >>486 メインプログラムに誤植がありました。ディスクシステムのファイルブロックの読み込みを バンク切り替えで代替する部分を間違えていたのでそりゃあ動かないですね。 修正したところバンク切り替えが機能するようになりました。 とりあえずデバッグプレイ メインプログラムのパッチ(と更にアドレス修正)はしたのだが、 現状ワールド5移行に行こうとすると黒画面で固まってしまうのと、タイトル画面で A+startでワールドAに行けますがソフトリセットで黒画面で固まってしまう。 ここまでやって駄目ならマッパー40の改変FDS BIOS部分が怪しい。 マッパー40はRAMが無いので書き換え必要なデータはFDS RAMではなく メインメモリに割り当てるような処理があったのでこの辺を調査 6502のJMP命令は直接相対と間接絶対しかないのが落とし穴だった。 それっぽい所の改変FDS BIOS部のJMP命令書き換えたけどうまくいかない。 半分匙投げかけた。もしかすると他の部分のミスもあるかも知れない。 本当にスーパーマリオーブラザース2とオールナイトニッポン版スーパーマリオ ブラザーズはFDSの容量限界まで使ってって追加のコードを入れるのが 難しいです。なので海賊版スーパーマリオーブラザース2も奇妙なスパゲッティーな パッチを使っているので解析は一筋縄にはいかない。 とりあえず作成途中のオールナイトニッポン版スーパーマリオブラザーズの 逆アセンブルリストを途中まで作ったがまずはこれを完成させるか。 1022240722100710新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミック 2542240742250725新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミック 4902240702490749新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミック 2808240708280728新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミックの 1819240719180718新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミックの 0330240730030703新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミックの 0735240735070707新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミック 5150240750510751新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミックの 5455240755540754新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミック 0616240716060706新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミック 1836240736180718新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミック 3356240756330733新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミック 4616240716460746新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミック 5836240736580758新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミック >>491 バンク切り替えはうまくいきました。メモリアドレス$C046〜$C047の部分を間違えていました。 いざプレイしてみると8-4クリアでハングしてしまいました。グラフィックRAMの書き換え部分で バグっています。そもそもmapper40はグラフィックRAMが無いのである。どうなるか気になって 試してみた結果残念な結果に。(改変FDS BIOSがグラフィック処理の部分を潰して場合は そこにアクセスしようとすれば不具合が生じるだろう) とりあえずテスト用のIPSを作成しました。 オールナイトニッポン スーパーマリオブラザーズのROM移植版(マッパー40) 未完成テスト版です。 エンディングでフリーズします。 https://www.axfc.net/u/4025396.zip ↑ROM版のスーパーマリオブラザーズのNESファイルにパッチを当てて下さい。 エンディングでバグる現象はFCEUXでは発生しましたが、VirtuaNESでは 発生しませんでした。 具体的にバグの現象、エンディングのBGMが鳴らずに、地上のBGMがなってしまう。 そしてTHANK YOU MARIOで背景が水色になるときに、ザーとノイズが鳴り固まってしまう。 念の為、FDS版オールナイトニッポン スーパーマリオブラザーズをFCEUXで動かしてみましたが、 正常作動でした。 >>507-508 ファイル差し替えました。前のはフリーズ回避する為の試行錯誤でコードが 汚くなっていたので https://www.axfc.net/u/4025452.zip SMB2Jの海賊版の特徴まとめ タイトル画面がハックされているケースが多い。 MARIOやLUIGIの名前がROMEOやRAMBOになっている場合がある。 ●マッパー40 ルイージの特性(ジャンプ力と滑りと画面左上表示)が有効なもの(e.g. Lost Levels)と 無効化されているもの(e.g. Alt Levels)が存在する ●マッパー50 マッパー40の物のコードがベース ●マッパー43 マッパー40の物のコードがベース。 しかし少なくとも2つの異なったマッパーがマッパー43に割り当てられている為、 エミュレーターによって解釈が異なる。 ●マッパー142 Kaiserのやつ。ワールド&ステージセレクト機能が実装されている。 ●マッパー4(MMC3) マッパー142のコードがベースになっている。ワールド&ステージセレクト機能は 無効化されているが、パッチすることにより復元可能。 ちょっと訂正 SMB2Jの海賊版の特徴まとめ タイトル画面がハックされているケースが多い。 MARIOやLUIGIの名前がROMEOやRAMBOになっている場合がある。 ●マッパー40 ルイージの特性(ジャンプ力と滑りと画面左上表示)が有効なもの(画面左上表示が マリオかルイージで変化するもの)と 無効化されているもの(e.g. 画面左上表示がSCORE になっているもの))が存在する ●マッパー50 マッパー40の物のコードがベース ●マッパー43 マッパー40の物のコードがベース。 しかし少なくとも2つの異なったマッパーがマッパー43に割り当てられている為、 エミュレーターによって解釈が異なる。 ●マッパー142 Kaiserのやつ。ワールド&ステージセレクト機能が実装されている。 ●マッパー4(MMC3) マッパー142のコードがベースになっている。ワールド&ステージセレクト機能は 無効化されているが、パッチすることにより復元可能。 ルイージの特性の有効、無効はエミュレーターによって挙動が異なることが分かりました。 FCEUXではルイージを選んでも画面左上はMARIO表示で挙動はマリオのままでした。 ありますが、VirtuaNESでは画面左上はLUIGI表示になり、ルイージの挙動になりました。 謎が深まるばかりです。 FCEUXでタイトル表示が無効化されているROMでルイージ特性になるものもありますが、 タイトル表示を有効化すると、ルイージ特性が無効化するものがありました。 >>512 ●マッパー40のものは十字キーを押しながらスタートボタンを押すことで 開始ワールドが選べるものもあるようです。 ルイージの特性問題とANNSMBのエンディングの問題はYレジスタの値が関与している と思われます。可能性が高いのはディスクアクセス関連のコードは未パッチの部分が 多くあり、改変FDS BIOSも多くのコードが機能する状態で残っています。 そのため存在しないはずのディスクにアクセスした時の値がエミュレータによって異なる 可能性があります。マジコン等を使って実機でどのように作動するか検証する必要があります。 もしVirtuaNESと実機の挙動が同じであれば、VirtuaNESの再現性が高いことになります。 詳しく調べてみるとマッパー40やマッパー50のSMB2JはVirtuaNESでルイージを選んでも、 どうもルイージの滑りとジャンプ力は反映されていないようです。 マッパー142のものをマッパー40に移植しようとしたところ、バンク切り替えの処理の挙動が 謎で断念。方針転換でマッパー4(MMC3)のものをマッパー40に移植を試したところ、 すんなり作動。NESヘッダ以外は弄っていないのに1-4、5-8、9、A-D切り替えがちゃんと 動いていて、ありあんほどの驚きだ。IRQもバンク切り替えも両方対応仕様なのか? マッパー142とマッパー4のやつのワールドセレクト機能はワールド表示部分はCHR-RAMを 直接書き換えているようだ。なのでマッパー40では1-1のままで変化しないが、ボタンを 押した数に応じてワールドセレクトはできるようだ。 >>519 は間違いだった。 マッパー変更でそんなにすんなり動く筈がなかった。ヘッダのマッパー変更がうまくいっていなかった。 ワールドセレクト化でタイトル画面の数字げ変化しなかったのはその部分のパッチが当たって いなかったから。CHR-RAMは多分関係ないです。 >>510 ROMにパッチしてVirtuaNESでやってみた エンディングで崩壊キャラに囲まれた https://light.dotup.org/uploda/light.dotup.org665607.png その後BGM止まって真っ暗になったところでフリーズした リセットすると"未定義命令を実行しました"と表示が出て閉じてしまった Super Mario All Stars NES https://www.romhacking.net/hacks/2422/ これはどうやって2を動かしてるんだろうか? ディスクシステムの起動画面から表示されるから面倒くさいことしてるのかもしれないけど >>521 やっぱりバグってますね。崩壊キャラについては仕様です。マッパー40はCHR-ROMが8KB なので、エンゲィングのグラを正しく表示することができません。 まあNSMCHAR2のデーターにすればエンディングのグラは正常化しますが、 今度は敵キャラのグラがおかしくなります。8-4がSM2仕様でめちゃくちゃ難しいので デバッグが大変です。しかも8-4クリアでフリーズするという絶望感。 ということでMMC3版を製作中です...(完成するまで黙っておこうと思ったが) ٩( 'ω' )و ガンバ!! 私のSM2SAVEの戦闘力は 30年前時点で、20近いです。 ですが もちろん フルパワーでワープなしで 1Wから9Wまで多く戦った結果 少なく刻まれているだけなので ご心配なく… とりあえずオールナイトニッポン スーパーマリオブラザーズのMMC3移植のテスト版が 出来ました。 https://dotup.org/uploda/dotup.org2218195.zip.html CHRバンク切り替え実装、(デバッグ用)ワールドセレクト機能実装。 ただし8-4クリア後にタイトル画面に戻らずにエラーが出るのと、A-Dワールドで敵に 当たるとゲームオーバーになります。 2113040813210821新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミ<SP 0134040834010801新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミ<SP 2730040830270827新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミ<SP 2521040821250825新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミ<SP 4136040836410841新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミ<SP 0457040857040804新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミ<SP 1903040803190819新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミ<SP 3212040812320832新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミ<SP 5249040849520852新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミ<SP 1121040821110811新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミ<SP 2413040813240824新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミ<SP 1616040816160816新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミ<SP 2821040821280828新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミ<SP 5531040831550855新しい豚インフ人にも感染と報告 [87類終了】人間に感染する新型豚インフルエンフル701] (9) 12:インフルエン的流胞に感染する豚のインフルエンフル型インフルエンザインフルエンザ発見 「パンデミックの恐ンザが発見される パンデミ<SP PRG-RAMのないマッパーの海賊版SMB2Jの再現性が一部不完全だったりする場合が多いのは 本体WRAMだけじゃ変数を置ける容量が足りないのかも知れないな。 SMB2JのMMC移植版はいくつかあり再現性は高いが、PRG-RAMが$6000-$8000しかないので、 なんとか本体WRAMとPRG-RAMの空きに無理やり押し込んでいる感じだな。(ややダーティー なコード) オールナイトニッポン スーパーマリオブラザーズの768Wでなく1024Wの可能性。 オールナイトニッポン スーパーマリオブラザーズは9面がありませんが、 ワールド9ならリセットする処理を潰せば、9-1に行けます。 9-1は強制移動の雲のバグ面で途中の土管でストップします。クッパも登場するので ハンマーに当たる場合もあります。9-2,3,4は海のバグ面でプレイ可能です。 空を飛ぶプクプクが出ますが、エンディング用のCHRに変更されているので、 プクプクの場合はステルスで見えません。すべての敵キャラが表示できるように CHRを変更するか、通常のCHRを使用した方がよいでしょう。 ANNSMBのMMC3移植版はとりあえず遊べる程度のものは完成しました。 しかし問題点はルイージでクリアした時のテキストをLUIGIにする機能が 正常に作動しなかったのとワールドセレクト機能も実装されていますが、 ワールドA-Dを選択するとフリーズしてしまうようです。 原因はパッチするコードを間違えている可能性もありますが、 とりあえず手抜きで敵処理関係のコードは面倒なので弄っていないのですが、 これが原因で変数が衝突している可能性があります。 完全版はANNSMB逆アセンブルリストを完成させてからとなりそうです。 とりあえず現状の試作物です。 オールナイトニッポン スーパーマリオブラザーズ(ANNSMB) MMC3移植テスト https://www.axfc.net/u/4025895.zip 標準版とワールドセレクト版が入っています。通常のスーパーマリオブラザーズの NESファイルにパッチを当ててください。 ルイージでクリアしたときのエンディングの文字をLUIGIにする処理とその関連 処理は未実装。ワールドセレクト版でタイトル画面でワールドA-Dを選択して マリオが動き出すとフリーズします 一応こちらのMMC3版のSMB2Jのコードを元にしています。 Super Mario Bros 2 Special by Jordan Bieber (SMB1 Hack).nes これはSMB1 Hackと付いていますが、コードを見てみるとSMB1を改造したものではなく SMB2Jを改造したものです。 あとこれはCHRが改造されていて1バンク(8kB)しかないですが、CHRのバンク切り替え 機能も実装されているようで、エンディング用のCHRを用意して、2バンク(16kB)に すると正常に作動するようです。 ANNSMBは解析途中ですが、見た感じSMB2エンジンを使用しているというよりは、 SMB1とSMB2のハイブリッドな感じです。例えばワープゾーンの土管の処理はSMB1仕様の ようですが、パラレルワールド用の処理が追加されているので若干複雑です。 あとANNSMBには毒キノコや嵐のコードは入っていないようです。 ANNSMBのNSMDATA1のマップデータ直前までの解析は概ね完了しました。 2821190821280828ポンペオ国務長官「反シオニズムは反ユダヤ主義!」 [195740AAS こういうこと言うからユダヤ嫌い 5オニズムに反対しているユダヤ人たちも普通にいるんだけどな 6: (ワッチョ こいhk3G0(1) AAS イスラエルなんて今やただの侵略者だよね AAS 正体表したね 5047190847500850ポンペオ国務長官「反シオニズムは反ユダヤ主義!」 [195740AAS こういうこと言うからユダヤ嫌い 5オニズムに反対しているユダヤ人たちも普通にいるんだけどな 6: (ワッチョ こいhk3G0(1) AAS イスラエルなんて今やただの侵略者だよね AAS 正体表したね 4920190820490849ポンペオ国務長官「反シオニズムは反ユダヤ主義!」 [195740AAS こういうこと言うからユダヤ嫌い 5オニズムに反対しているユダヤ人たちも普通にいるんだけどな 6: (ワッチョ こいhk3G0(1) AAS イスラエルなんて今やただの侵略者だよね AAS 正体表したね 1126190826110811ポンペオ国務長官「反シオニズムは反ユダヤ主義!」 [195740AAS こういうこと言うからユダヤ嫌い 5オニズムに反対しているユダヤ人たちも普通にいるんだけどな 6: (ワッチョ こいhk3G0(1) AAS イスラエルなんて今やただの侵略者だよね AAS 正体表したね 0647190847060806ポンペオ国務長官「反シオニズムは反ユダヤ主義!」 [195740AAS こういうこと言うからユダヤ嫌い 5オニズムに反対しているユダヤ人たちも普通にいるんだけどな 6: (ワッチョ こいhk3G0(1) AAS イスラエルなんて今やただの侵略者だよね AAS 正体表したね 1952190852190819ポンペオ国務長官「反シオニズムは反ユダヤ主義!」 [195740AAS こういうこと言うからユダヤ嫌い 5オニズムに反対しているユダヤ人たちも普通にいるんだけどな 6: (ワッチョ こいhk3G0(1) AAS イスラエルなんて今やただの侵略者だよね AAS 正体表したね 0308190808030803ポンペオ国務長官「反シオニズムは反ユダヤ主義!」 [195740AAS こういうこと言うからユダヤ嫌い 5オニズムに反対しているユダヤ人たちも普通にいるんだけどな 6: (ワッチョ こいhk3G0(1) AAS イスラエルなんて今やただの侵略者だよね AAS 正体表したね 1913190813190819ポンペオ国務長官「反シオニズムは反ユダヤ主義!」 [195740AAS こういうこと言うからユダヤ嫌い 5オニズムに反対しているユダヤ人たちも普通にいるんだけどな 6: (ワッチョ こいhk3G0(1) AAS イスラエルなんて今やただの侵略者だよね AAS 正体表したね 1734190834170817ポンペオ国務長官「反シオニズムは反ユダヤ主義!」 [195740AAS こういうこと言うからユダヤ嫌い 5オニズムに反対しているユダヤ人たちも普通にいるんだけどな 6: (ワッチョ こいhk3G0(1) AAS イスラエルなんて今やただの侵略者だよね AAS 正体表したね 2900190800290829ポンペオ国務長官「反シオニズムは反ユダヤ主義!」 [195740AAS こういうこと言うからユダヤ嫌い 5オニズムに反対しているユダヤ人たちも普通にいるんだけどな 6: (ワッチョ こいhk3G0(1) AAS イスラエルなんて今やただの侵略者だよね AAS 正体表したね 2721190821270827ポンペオ国務長官「反シオニズムは反ユダヤ主義!」 [195740AAS こういうこと言うからユダヤ嫌い 5オニズムに反対しているユダヤ人たちも普通にいるんだけどな 6: (ワッチョ こいhk3G0(1) AAS イスラエルなんて今やただの侵略者だよね AAS 正体表したね 2458190858240824ポンペオ国務長官「反シオニズムは反ユダヤ主義!」 [195740AAS こういうこと言うからユダヤ嫌い 5オニズムに反対しているユダヤ人たちも普通にいるんだけどな 6: (ワッチョ こいhk3G0(1) AAS イスラエルなんて今やただの侵略者だよね AAS 正体表したね スーパーマリオ256Wについて解説するページ ttp://smb.lsi.harisen.jp/index.html オールナイトニッポンスーパーマリオブラザーズ 暫定 敵データ・マップデータ ; 自動歩行 マップデータ C270 : 38 11 0F 26 AD 40 3D C7 ; C278 : FD ; ; 全ブロック共通マップデータ? : 地下・海を抜けた後のポールのあるルーム マップデータ? C279 : 90 31 39 F1 5F 38 6D C1 AF 26 8D ; C283 : 8D C7 ; C285 : FD ;開始エリア C339 : 00 05 0A 0E 13 17 1B 20 ; ;エリア開始ルーム C341 : 25 3B C0 26 60 ;World 1 C346 : 28 29 01 27 62 ;World 2 C34B : 24 35 20 63 ;World 3 C34F : 22 29 41 2C 61 ;World 4 C354 : 2A 31 36 67 ;World 5 C358 : 2E 23 2D 66 ;World 6 C35C : 33 29 03 37 64 ;World 7 C361 : 30 32 21 65 ;World 8 ; ループ戻り位置 C365 : 12 36 0E 0E 0E 32 32 32 0C 54 ; ;敵キャラコマンドアドレスヘッダ C36F : 28 08 24 00 ; ;敵データ開始アドレス ;エリア C373 : 45 C7 ; 1-4 (S1) C375 : 62 C7 ; 2-4 (S1) C377 : 7B C7 ; 3-4 (S1) C379 : 9E C7 ; 4-4 (S1) C37B : 2C C6 ; 7-4 (S2) C37D : 41 C6 ; 8-4 (S2) C37F : D0 C5 ; 6-4 (S2) C381 : 05 C6 ; 5-4 (S2) C383 : C7 C7 ; 3-3 (S1) C385 : 81 C6 ; 8-3 (S2) C387 : E8 C7 ; 4-1 (S1) C389 : 9E C6 ; 6-2 (S2) C38B : F8 C7 ; 3-1 (S1) C38D : 29 C8 ; 1-1 (S1) C38F : 47 C8 ; 1-3 (S1) C391 : 60 C8 ; 2-3 (S1) C393 : 67 C8 ; 2-1 (S1) C395 : 6F C2 ; 土管 C397 : 05 C7 ; 5-1 (S2) C399 : 96 C8 ; 天空ボーナス (S1) C39B : 9C C8 ; 4-3 (S1) C39D : 2F C7 ; 6-3 (S2) C39F : 52 C7 ; 6-1 (S2) C3A1 : C0 C8 ; 天空ワープ (S1) C3A3 : 5B C7 ; 8-1 (S2) C3A5 : 95 C7 ; 5-2 (S2) C3A7 : C0 C7 ; 8-2 (S2) C3A9 : F0 C7 ; 7-1 (S2) C3AB : C1 C8 ; 天空ボーナス (S1) C3AD : C7 C8 ; 3-2 (S1) C3AF : C5 C6 ; 5-3 (S2) C3B1 : E8 C6 ; 7-3 (S2) C3B3 : 6F C2 ; 地下・海の出口 C3B5 : 29 C7 ; 天空ボーナス (S2) C3B7 : 0C C8 ; 夜空ボーナス (S2) C3B9 : EB C8 ; 土管(夜) (S1) C3BB : EC C8 ; 1-2 (S1) C3BD : 19 C9 ; 4-2 (S1) C3BF : 47 C9 ; 地下室 (S1) C3C1 : 12 C8 ; 地下室 (S2) C3C3 : 2B C8 ; 水中ボーナス (S2) C3C5 : 62 C9 ; 2-2 (S1) C3C7 : 6A C8 ; 8-4 (S2) C3C9 : 3C C8 ; 7-2 (S2) C3CB : 6F C2 ;ワープゾーン? ;マップコマンドアドレスヘッダ C3CD : 28 08 24 00 ; ;マップデータ開始アドレス ;エリア C3D1 : 7B C9 ; 1-4 (S1) C3D3 : D2 C9 ; 4-4 (S1) C3D5 : 53 CA ; 2-4 (S1) C3D7 : C2 CA ; 3-4 (S1) C3D9 : 7A C9 ; 7-4 (S2) C3Db : 05 CA ; 8-4 (S2) C3DD : 78 C8 ; 6-4 (S2) C3DF : ED C8 ; 5-4 (S2) C3E1 : 2D CB ; 3-3 (S1) C3E3 : D8 CA ; 8-3 (S2) C3E5 : 8A CB ; 4-1 (S1) C3E7 : 45 CB ; 6-2 (S2) C3E9 : DD CB ; 3-1 (S1) C3EB : 4E CC ; 1-1 (S1) C3ED : B3 CC ; 1-3 (S1) C3EF : 08 CD ; 2-3 (S1) C3F1 : 85 CD ; 2-1 (S1) C3F3 : 70 C2 ; 土管 C3F5 : 8C CC ; 5-1 (S2) C3F7 : E8 CD ; 天空ボーナス (S1) C3F9 : FD CD ; 4-3 (S1) C3FB : E2 CC ; 6-3 (S2) C3FD : 49 CD ; 6-1 (S2) C3FF : 54 CE ; 天空ワープ (S1) C401 : BE CD ; 8-1 (S2) C403 : 53 CE ; 5-2 (S2) C405 : CA CE ; 8-2 (S2) C407 : 47 CF ; 7-1 (S2) C409 : 85 CE ; 天空ボーナス (S1) C40B : B0 CE ; 3-2 (S1) C40D : D6 CB ; 5-3 (S2) C40F : 1F CC ; 7-3 (S2) C411 : 79 C2 ; 地下・海の出口 C413 : CD CC ; 天空ボーナス (S2) C415 : A8 CF ; 夜空ボーナス (S2) C417 : E7 CE ; 土管(夜) (S1) C419 : F0 CE ; 1-2 (S1) C41B : 91 CF ; 4-2 (S1) C41D : 36 D0 ; 地下室 (S1) C41F : D3 CF ; 地下室 (S2) C421 : 2C D0 ; 水中ボーナス (S2) C423 : C3 D0 ; 2-2 (S1) C425 : 36 D1 ; 8-4 (S2) C427 : 6D D0 ; 7-2 (S2) C429 : 85 C2 ;ワープゾーン? 1245210845120812telから流出20GBファームウェコードからbackdoorの処見つかってし913] (10ス) Intel leak: 0GB of soure, intter.com WannaCryはそこる ソースくらいは貼るわ 外ww.newsw 対外情報監視法 ◆アメ国家的盗聴は有名IT・通信企業が協力している[2013日] ク:wpb.shha.co.jp 「マイクロソフグーグルなど、NSAは大手IT企ベッタリ つい最ロソフトが過去3年間、自社サイトのユーザーが交換する情報を 『NSAが監視う、暗号システムを迂回させる措置を取っ ライン上の情報蓄積サービス『スカイドライブ 2550210850250825telから流出20GBファームウェコードからbackdoorの処見つかってし913] (10ス) Intel leak: 0GB of soure, intter.com WannaCryはそこる ソースくらいは貼るわ 外ww.newsw 対外情報監視法 ◆アメ国家的盗聴は有名IT・通信企業が協力している[2013日] ク:wpb.shha.co.jp 「マイクロソフグーグルなど、NSAは大手IT企ベッタリ つい最ロソフトが過去3年間、自社サイトのユーザーが交換する情報を 『NSAが監視う、暗号システムを迂回させる措置を取っ ライン上の情報蓄積サービス『スカイドライブ 3955210855390839telから流出20GBファームウェコードからbackdoorの処見つかってし913] (10ス) Intel leak: 0GB of soure, intter.com WannaCryはそこる ソースくらいは貼るわ 外ww.newsw 対外情報監視法 ◆アメ国家的盗聴は有名IT・通信企業が協力している[2013日] ク:wpb.shha.co.jp 「マイクロソフグーグルなど、NSAは大手IT企ベッタリ つい最ロソフトが過去3年間、自社サイトのユーザーが交換する情報を 『NSAが監視う、暗号システムを迂回させる措置を取っ ライン上の情報蓄積サービス『スカイドライブ 5816210816580858telから流出20GBファームウェコードからbackdoorの処見つかってし913] (10ス) Intel leak: 0GB of soure, intter.com WannaCryはそこる ソースくらいは貼るわ 外ww.newsw 対外情報監視法 ◆アメ国家的盗聴は有名IT・通信企業が協力している[2013日] ク:wpb.shha.co.jp 「マイクロソフグーグルなど、NSAは大手IT企ベッタリ つい最ロソフトが過去3年間、自社サイトのユーザーが交換する情報を 『NSAが監視う、暗号システムを迂回させる措置を取っ ライン上の情報蓄積サービス『スカイドライブ 5232210832520852telから流出20GBファームウェコードからbackdoorの処見つかってし913] (10ス) Intel leak: 0GB of soure, intter.com WannaCryはそこる ソースくらいは貼るわ 外ww.newsw 対外情報監視法 ◆アメ国家的盗聴は有名IT・通信企業が協力している[2013日] ク:wpb.shha.co.jp 「マイクロソフグーグルなど、NSAは大手IT企ベッタリ つい最ロソフトが過去3年間、自社サイトのユーザーが交換する情報を 『NSAが監視う、暗号システムを迂回させる措置を取っ ライン上の情報蓄積サービス『スカイドライブ 0838210838080808telから流出20GBファームウェコードからbackdoorの処見つかってし913] (10ス) Intel leak: 0GB of soure, intter.com WannaCryはそこる ソースくらいは貼るわ 外ww.newsw 対外情報監視法 ◆アメ国家的盗聴は有名IT・通信企業が協力している[2013日] ク:wpb.shha.co.jp 「マイクロソフグーグルなど、NSAは大手IT企ベッタリ つい最ロソフトが過去3年間、自社サイトのユーザーが交換する情報を 『NSAが監視う、暗号システムを迂回させる措置を取っ ライン上の情報蓄積サービス『スカイドライブ 3010210810300830telから流出20GBファームウェコードからbackdoorの処見つかってし913] (10ス) Intel leak: 0GB of soure, intter.com WannaCryはそこる ソースくらいは貼るわ 外ww.newsw 対外情報監視法 ◆アメ国家的盗聴は有名IT・通信企業が協力している[2013日] ク:wpb.shha.co.jp 「マイクロソフグーグルなど、NSAは大手IT企ベッタリ つい最ロソフトが過去3年間、自社サイトのユーザーが交換する情報を 『NSAが監視う、暗号システムを迂回させる措置を取っ ライン上の情報蓄積サービス『スカイドライブ 4815210815480848telから流出20GBファームウェコードからbackdoorの処見つかってし913] (10ス) Intel leak: 0GB of soure, intter.com WannaCryはそこる ソースくらいは貼るわ 外ww.newsw 対外情報監視法 ◆アメ国家的盗聴は有名IT・通信企業が協力している[2013日] ク:wpb.shha.co.jp 「マイクロソフグーグルなど、NSAは大手IT企ベッタリ つい最ロソフトが過去3年間、自社サイトのユーザーが交換する情報を 『NSAが監視う、暗号システムを迂回させる措置を取っ ライン上の情報蓄積サービス『スカイドライブ 4536210836450845telから流出20GBファームウェコードからbackdoorの処見つかってし913] (10ス) Intel leak: 0GB of soure, intter.com WannaCryはそこる ソースくらいは貼るわ 外ww.newsw 対外情報監視法 ◆アメ国家的盗聴は有名IT・通信企業が協力している[2013日] ク:wpb.shha.co.jp 「マイクロソフグーグルなど、NSAは大手IT企ベッタリ つい最ロソフトが過去3年間、自社サイトのユーザーが交換する情報を 『NSAが監視う、暗号システムを迂回させる措置を取っ ライン上の情報蓄積サービス『スカイドライブ NSMDATA1のマップデータの次の領域$D13E-$D2E4が不明なデータだったが エンディング処理の関係かな? ; 6324 : BD FA 62 LDA $62FA,X ; ; 632A : BD FA 62 LDA $62FA,X ; 62FA : 3E D1 ; 62FC : 9E D1 ; 62FE : FE D1 ; 6300 : 5E D2 ; 6302 : 4F D1 ; 6304 : AF D1 ; 6306 : 0F D2 ; ; 6331 : BD 08 63 LDA $6308,X ; 6308 : 0C 07 0E ; ; 6337 : BD 0B 63 LDA $630B,X ; 630B : D0 A0 ; ; 6344 : DD 0E 63 CMP $630E,X ; 630B : E0 30 50 60 ; ;エンディング画面切り替え処理? 6311 : AD 5C 07 LDA $075C ; 6314 : C9 03 CMP #$03 ; 6316 : D0 39 BNE $6351 ; 6318 : AC FB 07 LDY $07FB ; 631B : D0 34 BNE $6351 ; 631D : 84 06 STY $06 ; 631F : AD 5F 07 LDA $075F ; 6322 : 0A ASL A ; 6323 : AA TAX ; 6324 : BD FA 62 LDA $62FA,X ; 6327 : 85 00 STA $00 ; 6329 : E8 INX ; 632A : BD FA 62 LDA $62FA,X ; 632D : 85 01 STA $01 ; 632F : A6 06 LDX $06 ; 6331 : BD 08 63 LDA $6308,X ; 6334 : 8D 06 20 STA $2006 ; 6337 : BD 0B 63 LDA $630B,X ; 633A : 8D 06 20 STA $2006 ; 633D : B1 00 LDA ($00),Y ; 633F : 8D 07 20 STA $2007 ; 6342 : C8 INY ; 6343 : 98 TYA ; 6344 : DD 0E 63 CMP $630E,X ; 6347 : D0 F4 BNE $633D ; 6349 : E6 06 INC $06 ; 634B : A5 06 LDA $06 ; 634D : C9 03 CMP #$03 ; 634F : D0 DE BNE $632F ; 6351 : 4C B9 63 JMP $63B9 ; ; 6382 : B9 54 63 LDA $6354,Y ; ; 6382 : B9 54 63 LDA $6354,Y ; 6354 : 63 63 ; 6356 : 65 63 ; 6358 : 67 63 ; 635A : 69 63 ; ; 637F : BC 5C 63 LDY $635C,X ; 635C : 04 02 00 04 02 00 08 ; ; 6363 : 30 12 ; 6365 : 30 1A ; 6367 : 30 16 ; 6369 : 17 2A ; 636B : 3F DB ; 636C : 18 CLC ; 636D : 04 DB ; 636E : 0F DB ; 636F : 36 ROL $00,X ; ; 6391 : 99 70 63 STA $6370,Y ; 6370: 00 ; 6371 : 00 ; 6372 : 00 ; ; <$0772=01> クッパの橋がおちた後 (パラレルワールドの時の分岐等)A 6373 : AD FB 07 LDA $07FB ; 6376 : D0 26 BNE $639E ; 6378 : AE 5F 07 LDX $075F ; 637B : E0 07 CPX #$07 ; 637D : F0 1F BEQ $639E ; 637F : BC 5C 63 LDY $635C,X ; 6382 : B9 54 63 LDA $6354,Y ; 6385 : 85 00 STA $00 ; 6387 : C8 INY ; 6388 : B9 54 63 LDA $6354,Y ; 638B : 85 01 STA $01 ; 638D : A0 00 LDY #$00 ; 638F : B1 00 LDA ($00),Y ; 6391 : 99 70 63 STA $6370,Y ; 6394 : C8 INY ; 6395 : C0 02 CPY #$02 ; 6397 : D0 F6 BNE $638F ; 6399 : A9 1D LDA #$1D ; 639B : 8D 73 07 STA $0773 ; ; <$0772=01> クッパの橋がおちた後 (パラレルワールドの時の分岐等)B 639E : AE 1B 07 LDX $071B ; 63A1 : E8 INX ; 63A2 : 86 34 STX $34 ; 63A4 : AD FB 07 LDA $07FB ; パラレルワールドか 63A7 : F0 0C BEQ $63B5 ; パラレルワールドでなければジャンプ 63A9 : AD 5F 07 LDA $075F ; 現在のワールド 63AC : C9 03 CMP #$03 ; ワールドDか 63AE : 90 05 BCC $63B5 ; ワールドDに達していなければジャンプ 63B0 : A9 07 LDA #$07 ; ワールド8 63B2 : 8D 5F 07 STA $075F ; ワールド8と同じ扱い 63B5 : A9 08 LDA #$08 ; 斧獲得BGM指定 63B7 : 85 FC STA $FC ; PORT_$2005_V なんとなくマッパー40版がvirtuanesで動いた理由がわかった。 恐らくvirtuanesだと$6000-$6FFFがROMでも書き込みできてしまう為だと 思われます。 あとMMC3のワールドセレクト版で タイトル画面でワールドA-Dにしたときにバグって しまう原因はまだ掴めていません。>>544 のは 敵処理関係のパッチは赤パックンフラワーの処理ですが、ANNSMBには登場しない のでたぶん関係なさそうです。タイトル画面でワールドA-Dを選択すると敵データとマップデーター の開始アドレスの部分が変わってしまって、正常に作動しないのではないかと考えられます。 SMB2ではたまたま動いてしまっているのか、それを回避するコードが入っているがSMB2用の ままではANNSMBで正常作動しないかのいずれかかが考えられます。 hps//youtube.com/watch?v=RPqSnJez-YI 3651290851360836類終了】人間に感染する新型豚インフルエンザ発見 [536779938] (31) 7:豚インフルエンザ ウクライナで60人死亡 [487816701] (9) 8:人の細胞に感染する豚のインフルエンザウイルス見つかる 中国 [402859164] (21) 9:中国の豚から新型インフルエンザが発見される パンデミックの可能性 [878898748] 4906290806490849類終了】人間に感染する新型豚インフルエンザ発見 [536779938] (31) 7:豚インフルエンザ ウクライナで60人死亡 [487816701] (9) 8:人の細胞に感染する豚のインフルエンザウイルス見つかる 中国 [402859164] (21) 9:中国の豚から新型インフルエンザが発見される パンデミックの可能性 [878898748] 1828290828180818類終了】人間に感染する新型豚インフルエンザ発見 [536779938] (31) 7:豚インフルエンザ ウクライナで60人死亡 [487816701] (9) 8:人の細胞に感染する豚のインフルエンザウイルス見つかる 中国 [402859164] (21) 9:中国の豚から新型インフルエンザが発見される パンデミックの可能性 [878898748] 1444290844140814類終了】人間に感染する新型豚インフルエンザ発見 [536779938] (31) 7:豚インフルエンザ ウクライナで60人死亡 [487816701] (9) 8:人の細胞に感染する豚のインフルエンザウイルス見つかる 中国 [402859164] (21) 9:中国の豚から新型インフルエンザが発見される パンデミックの可能性 [878898748] 2205290805220822類終了】人間に感染する新型豚インフルエンザ発見 [536779938] (31) 7:豚インフルエンザ ウクライナで60人死亡 [487816701] (9) 8:人の細胞に感染する豚のインフルエンザウイルス見つかる 中国 [402859164] (21) 9:中国の豚から新型インフルエンザが発見される パンデミックの可能性 [878898748] 2626290826260826類終了】人間に感染する新型豚インフルエンザ発見 [536779938] (31) 7:豚インフルエンザ ウクライナで60人死亡 [487816701] (9) 8:人の細胞に感染する豚のインフルエンザウイルス見つかる 中国 [402859164] (21) 9:中国の豚から新型インフルエンザが発見される パンデミックの可能性 [878898748] 3547290847350835類終了】人間に感染する新型豚インフルエンザ発見 [536779938] (31) 7:豚インフルエンザ ウクライナで60人死亡 [487816701] (9) 8:人の細胞に感染する豚のインフルエンザウイルス見つかる 中国 [402859164] (21) 9:中国の豚から新型インフルエンザが発見される パンデミックの可能性 [878898748] 4614290814460846類終了】人間に感染する新型豚インフルエンザ発見 [536779938] (31) 7:豚インフルエンザ ウクライナで60人死亡 [487816701] (9) 8:人の細胞に感染する豚のインフルエンザウイルス見つかる 中国 [402859164] (21) 9:中国の豚から新型インフルエンザが発見される パンデミックの可能性 [878898748] 5346290846530853類終了】人間に感染する新型豚インフルエンザ発見 [536779938] (31) 7:豚インフルエンザ ウクライナで60人死亡 [487816701] (9) 8:人の細胞に感染する豚のインフルエンザウイルス見つかる 中国 [402859164] (21) 9:中国の豚から新型インフルエンザが発見される パンデミックの可能性 [878898748] 0308300808030803類終了】人間に感染する新型豚インフルエンザ発見 [536779938] (31) 7:豚インフルエンザ ウクライナで60人死亡 [487816701] (9) 8:人の細胞に感染する豚のインフルエンザウイルス見つかる 中国 [402859164] (21) 9:中国の豚から新型インフルエンザが発見される パンデミックの可能性 [878898748] 1029300829100810類終了】人間に感染する新型豚インフルエンザ発見 [536779938] (31) 7:豚インフルエンザ ウクライナで60人死亡 [487816701] (9) 8:人の細胞に感染する豚のインフルエンザウイルス見つかる 中国 [402859164] (21) 9:中国の豚から新型インフルエンザが発見される パンデミックの可能性 [878898748] p://youtube.com/watch?v=8Ch4X1AeEn0 3302040902330933>>○○○ こら、おまえは統一教会の工作員か? 統一教会工作員でないなら以下の文章をこのスレにコピペしてみろ。 コピペできなければおまえは統一教会工作員だ。 文鮮明はウンコでサタン 統一教会はサタニスト団体 ki 教祖は北朝鮮出身の文鮮明氏で現在の妻は韓鶴子女史 ... 韓国系宗教かつ北朝鮮とも仲 ガブリエルさんの好き ttps://www.romhacking.net/community/5869/ 難しすぎず手軽に遊べる難易度がいい ANNSMBのNSMDATA1の解析は一応完成した。 パソコンフリーズしたときにデーターが消えてしまって最悪な予感がしたが、 なんとか救出できた。 >>545 少しだけ修正晩。あいかわらずワールドセレクト版はA〜Dを選択するとうまく機能しません。 https://www.axfc.net/u/4029468.zip いつのまにかようつべで2の1024ワールド解析目指してる人いるね >>601 荒らしの時期と被って大変でしたけどおつかれさまです エンディングのルイージの方は直りましたか? ルイージの機能の事忘れてました。まだ直ってません。NSMDATA3の解析が必要だわ。 ワールドセレクト版のA-Dは何が悪いのかちんぷんかんぷん。 大体は嵐関係の処理でANNSMBには関係ないと思ってパッチしていない部分に起因 しているか、SMB2とANNSMBでフラグ関係で少し違う部分がありますが、ワールドセレクト版は SMB2の未使用部分を使用しているがANNSMBでは衝突してしまうのかなと。 あとはアドレス修正の見落としの可能性もあるが。 とりあえず次ぎはエンディングのルイージの修正に取り組む予定 >>599 NSMDATA1じゃなくてNSMMAINですね。 あとFDSBIOS呼び出し部の未パッチ分も調査しないと エンディングのMARIOとLUIGI表示切り替え、結構いい感じになってきたけど まだバグってる。 エンディングの表示問題は解決しました。原因はアドレスの値を16進数で計算すべきなのに 10進数でやってしまっていた箇所があったw そういえばワープ土管の仕様はSMB1(ANNSMB含む)とSMB2で仕様が違っていたな 通常版はほぼ完璧な作動。ワールドセレクト版のバグが直らないので頭を抱えているとこ ワールドセレクト機能の不具合は$C000付近のパッチを間違えている可能性が浮上 >>613 再検証の結果、たぶん$C000付近は問題なさそうだった。 ワールドセレクト機能の不具合判明しました。 結論から言うと、オールナイトニッポン スーパーマリオブラザーズのプログラム本体の部分に 問題がありそうです。 パラレルワールドフラグが$7FBにあるのですが、(FDSの)スーパーマリオブラザーズ2で この部分の値を$1にしてもタイトル画面でマリオが動き出し画面スクロールしてもフリーズ しないのに対し、(FDSの)オールナイトニッポン スーパーマリオブラザーズではマリオが動き 出し画面スクロールするとフリーズします。 こうゆう仕様のようです。 一応フリーズ箇所のトレースログ f617 A:00 X:00 Y:01 S:BA $61CC:AD 3F 07 LDA $073F = #$32 f617 A:32 X:00 Y:01 S:BA $61CF:8D 05 20 STA $2005 = #$02 f617 A:32 X:00 Y:01 S:BA $61D2:AD 40 07 LDA $0740 = #$00 f617 A:00 X:00 Y:01 S:BA $61D5:8D 05 20 STA $2005 = #$02 f617 A:00 X:00 Y:01 S:BA $61D8:A9 00 LDA #$00 f617 A:00 X:00 Y:01 S:BA $61DA:8D 7B 07 STA $077B = #$00 f617 A:00 X:00 Y:01 S:BA $61DD:4C E4 61 JMP $61E4 f617 A:00 X:00 Y:01 S:BA $61E4:68 PLA f617 A:01 X:00 Y:01 S:BB $61E5:A8 TAY f617 A:01 X:00 Y:01 S:BB $61E6:68 PLA f617 A:00 X:00 Y:01 S:BC $61E7:AA TAX f617 A:00 X:00 Y:01 S:BC $61E8:68 PLA f617 A:02 X:00 Y:01 S:BD $61E9:28 PLP f617 A:02 X:00 Y:01 S:BE $61EA:58 CLI f617 A:02 X:00 Y:01 S:BE $61EB:40 RTI Bad Opcode Breakpoint Hit at $22BD NSMDATA3の逆アセンブルリスト作成していたが、パソコンがフリーズしたときに データー消失してしまったorz と思ったら見つけました。良かった。NSMMAINの逆アセンブルリストもデーター消失の 危機があったが、CHKDSKの作ったファイルの中から見つけ何とかなった。 ワールドセレクト版のエリア選択がバグっていた。うっかり見落としていた。 なんでズレてるかは分かった。地下・水中ステージがある面で最初の土管進入の部分 ということでワールドセレクト版でスタートエリアが不正だったのを修正。 https://www.axfc.net/u/4029714.zip これでほぼバグは潰せたと思う。(フリーズ問題以外は) なんでデバッグで気づかなかったんでしょうね? 1面と8面とA面とD面ばかりやってたからかな。他の面でも、 エリア1と2は正常だったから気づくの遅れた。 ANNSMB ;開始エリア 0000C357: 00 05 09 0E 12 17 1C 20 24 ;エリア開始ルーム 0000C360: 20 29 40 21 60 ;World 1 $0 0000C365: 22 23 24 61 ;World 2 $1 0000C369: 25 29 00 26 62 ;World 3 $2 0000C36E: 27 28 2A 63 ;World 4 $3 0000C371: 2B 29 43 2C 64 ;World 5 $4 0000C376: 2D 29 01 2E 65 ;World 6 $5 0000C37B: 2F 30 31 66 ;World 7 $6 0000C37F: 32 35 36 67 ;World 8 $7 *0000C383: 38 06 68 07 ;World 9 $8 SMB2(J) ;開始エリア C339 : 00 05 0A 0E 13 17 1B 20 ; ;エリア開始ルーム C341 : 25 3B C0 26 60 ;World 1 $0 C346 : 28 29 01 27 62 ;World 2 $1 C34B : 24 35 20 63 ;World 3 $2 C34F : 22 29 41 2C 61 ;World 4 $3 C354 : 2A 31 36 67 ;World 5 $4 C358 : 2E 23 2D 66 ;World 6 $5 C35C : 33 29 03 37 64 ;World 7 $6 C361 : 30 32 21 65 ;World 8 $7 なので FB8B LDA $75F FB8E LDX $7FB FB91 BNE loc_FBAA FB93 CMP #1 FB95 BEQ loc_FB6A FB97 CMP #3 FB99 BEQ loc_FB6A FB9B CMP #6 FB9D BEQ loc_FB6A FB9F CMP #7 FBA1 BEQ loc_FB6A FBA3 CMP #8 FBA5 BEQ loc_FB6A ↓ FB8B LDA $75F FB8E LDX $7FB FB91 BNE loc_FBAA FB93 CMP #2 FB95 BEQ loc_FB6A FB97 CMP #4 FB99 BEQ loc_FB6A FB9B CMP #5 FB9D BEQ loc_FB6A FB9F CMP #7 FBA1 BEQ loc_FB6A FBA3 CMP #8 FBA5 BEQ loc_FB6A のように修正 解析お疲れ様!なんだけどプレイしてみると1-4.2-4と各キノピオが当時のオールナイトのMCに代わってなかったから完全にオールナイトベースじゃなくて既にカセット変換された2ベースにオールナイトにタイトルとか書き換えたパッチだったのね8-4クリアーしても☆マークはタイトルに付かない仕様の >>627 エミュレーターは何を使ってますか?それとも実機? 当方ではfceux 2.2.3とVirtuaNES 0.97でピノキオがMCに置き換わっているのを確認しています。 プログラムはANNSMBをベースにMMC3版SMB2JのパッチをANNSMBに合わせて適用しています。 ☆マークが付かないのは元にしたMMC3版SMB2Jの仕様ですが、☆マークの付く仕様も 作成可能です。 ご参考までにプレイ動画です。 https://www.nicovideo.jp/watch/sm37877451 https://www.nicovideo.jp/watch/sm37864910 ピノキオがMCになっているのが確認できます。 下の動画はエンディングの確認の為にゲームオーバになると城クリアになるようにパッチした ものです。 あと以前作ったマッパー40版はCHR-ROMのバンク切り替えに対応していないので ピノキオのままです。 8-4クリアで☆マークの付く仕様は、セーブ機能付きMMC3版SMB2Jのコードを使うことにより 可能ですが、パッチ箇所が思ったよりも多いのでしばらく時間がかかりそうです。 改造やってるバカは死ね てめえらは生きる価値がねえゴミだ smb2j-glitchedworldsをANNSMBに移植しようとしたがうまくいかなかった。 試行錯誤メモ 625B : A9 60 LDA #$60 ;lda #>(GL_ENTER - 1) * 625D : 48 PHA ;pha 625E : A9 31 LDA #$31 ;lda #<(GL_ENTER - 1) * 6260 : 48 PHA ;pha 6261 : A9 C2 LDA #$C2 ;lda #>(LoadAreaPointer - 1) * 6263 : 48 PHA ;pha 6264 : A9 A3 LDA #$A3 ;lda #<(LoadAreaPointer - 1) * 6266 : 48 PHA ;pha 62D1 : D2 C0 ;.word DiskIDString * 62FD : A0 03 LDY #$03 ;ldy #$03 62FF : 8C 09 C1 STY $C109 ;sty ListPointer+1 * 6302 : A0 00 LDY #$00 ;ldy #$00 6304 : 8C 08 C1 STY $C108 ;sty ListPointer * 6313 : 4C 03 C1 JMP $C103 ;jmp LoadFilesDirect * GL_ENTER 6032 6035 LoadAreaPointer C2A4 C286 DiskIDString "D2C0" "E8C0" ListPointer C108 C11D LoadFilesDirect C103 C119 ANNSMBでエンディングになるステージの設定を弄れば、バグった9面もプレイ可能で、 理屈の上では768Wではなく1024Wも可能だが、NSMDATA3にステージ情報が入っていない ので遊べる面が少ないのと、CHRセットがMC用に変わっているので、プクプクなどの 敵キャラが表示されないので、ステルス攻撃に注意が必要。CHRを弄ればいいけど。 MMC3版SMB2Jが$6000-$7FFFのRAMに依存しない仕様っぽかったのですが、 MMC3版ANNSMBではエンディング処理でこの部分に書き込みしています。 早速RAMに依存しないはすぐに出来るだろうと思ってやってみたのですが、 おもったよりも複雑で失敗。NSMDATA2とNSMDATA4を含む全解析が必要だと確信 NSMMAINだけで大体わかったけど、 "(Indirect), Y"使ってるのか。複雑だな ;$00 = #$636B 6DC4:B1 00 LDA ($00),Y @ $6370 = #$30; 6DC4:B1 00 LDA ($00),Y @ $6371 = #$12; ;$00 = #$6372 6DED:B1 00 LDA ($00),Y @ $6372 = #$00 しかし上記のANNSMB特有の書き換え部分が$6000-$7FFFに収まっていたのは奇跡的だな こういうのってバイナリでできる? マリオ2のfds版でA〜D面行くのを 8回クリアでなくても1回とか 何なら0回でもタイトルでB押しながらスタートで 可能にするっていうの >>638 出来ます。このケースだと8回クリアしているかチェックしていルーチンがあるので そこを8から任意の値にするだけなので、たった1バイトの変更でできます。 マリオ便利改造コード集 http://k1ilove.yu-nagi.com/mariocod.html ↑ここにいろいろある。 ただ実際にパッチを当てようと思ってもFDSファイルの構造を理解していないと 難しい。バイナリエディタの外にFDS Studyとかのツールは必要かも。 あと16進数の計算できる電卓。(Windowsの電卓とか) >>640 のリンクでは、親切にコード列が載っているから、バイナリエディタでサーチすれば すぐに場所は分かるだろう MMC3版でパラレルワールド(A-D)の途中開始地点が落下する理不尽な場所になっていて ミスってると思ったけど、そうゆう仕様のようですね。 開始同時にAボタン押せば突破できるので そもそもSMB2のパラレルワールドも途中開始位置がそんな感じだったかと >>640 これってFDSのROMのバイナリを 直接書き換えるのとは違うの? アドレスサーチしてもそれらしい部分がない >>644 アドレスサーチではなくてバイナリ列をサーチするのです。 アドレスサーチでやりたいなら一応詳しく書くと 次のような例では、 ワールドAに行ける条件となっているワールド8のクリア回数8回の変更 ●マリオ2 FILE No.03 C484番地 08 ...とありますが、 FDSstudyでSMB2のファイルを開くと //////////////////////// Side-A //////////////////////// No LoadNo FileName LoadAdd Size Type 00 00 KYODAKU- 2800 E0 2 (NT) 01 01 SM2CHAR1 0 2000 1 (Chr) 02 10 SM2CHAR2 760 40 1 (Chr) 03 05 SM2MAIN 6000 8000 0 (Prg) 04 20 SM2DATA2 C470 E2F 0 (Prg) 05 30 SM2DATA3 C5D0 CCF 0 (Prg) 06 40 SM2DATA4 C2B4 F4C 0 (Prg) 07 0F SM2SAVE D29F 1 0 (Prg) ------------------------------------------------------- FDS Study ( Ver.0.8f ) まあこんな感じになっているでしょう。 FILE No.03なのでSM2MAINですね。 LoadAddが$6000でサイズが$8000ということは終端は、 $6000+$8000-$1=$DFFFとなります。 FDSのデーターはFile Header BlockとFile Data Blockで構成されており、 File Header Blockは10バイトです。 バイト 1 $03 1 File Number 1 File Indicate Code (ファイル識別コード) 8 File Name 2 File Address 2 File Size 1 Kind of File 次にFile Data Blockが続きます。 1 $04 それ以降がデータとなっています。 簡単にはSM2MAINの部分から14バイト先からデータが入っています。 FDSファイルにはFDSヘッダのあるものとないものがあります。 FDSヘッダは16バイトです。 手元にあるFDSヘッダ付きSMB2のFDSファイルをバイナリエディタで開くと21A0番地から SM2MAINの文字列があります、その14バイト先が21AE番地です。 FDSファイルの$21AE番地が実記では$6000番地にマップされます。 ワールド8のクリア回数8回の変更だと $C484-$6000+$21AE=$8624 ということでFDSファイルの$8624番地ということになります。 すごい説明が下手でスマン。 ちょっとミスったので訂正 アドレスサーチでやりたいなら一応詳しく書くと 次のような例では、 ワールドAに行ける条件となっているワールド8のクリア回数8回の変更 ●マリオ2 FILE No.03 C484番地 08 ...とありますが、 FDSstudyでSMB2のファイルを開くと //////////////////////// Side-A //////////////////////// No LoadNo FileName LoadAdd Size Type 00 00 KYODAKU- 2800 E0 2 (NT) 01 01 SM2CHAR1 0 2000 1 (Chr) 02 10 SM2CHAR2 760 40 1 (Chr) 03 05 SM2MAIN 6000 8000 0 (Prg) 04 20 SM2DATA2 C470 E2F 0 (Prg) 05 30 SM2DATA3 C5D0 CCF 0 (Prg) 06 40 SM2DATA4 C2B4 F4C 0 (Prg) 07 0F SM2SAVE D29F 1 0 (Prg) ------------------------------------------------------- FDS Study ( Ver.0.8f ) まあこんな感じになっているでしょう。 FILE No.03なのでSM2MAINですね。 LoadAddが$6000でサイズが$8000ということは終端は、 $6000+$8000-$1=$DFFFとなります。 FDSのデーターはFile Header BlockとFile Data Blockで構成されており、 File Header Blockは10バイトです。 バイト 1 $03 1 File Number 1 File Indicate Code (ファイル識別コード) 8 File Name 2 File Address 2 File Size 1 Kind of File 次にFile Data Blockが続きます。 1 $04 それ以降がデータとなっています。 簡単にはSM2MAINの部分から14バイト先からデータが入っています。 FDSファイルにはFDSヘッダのあるものとないものがあります。 FDSヘッダは16バイトです。 手元にあるFDSヘッダ付きSMB2のFDSファイルをバイナリエディタで開くと21A0番地から SM2MAINの文字列があります、その14バイト先が21AE番地です。 FDSファイルの$21AE番地が実記では$6000番地にマップされます。 ワールド8のクリア回数8回の変更だと $C484-$6000+$21AE=$8632 ということでFDSファイルの$8632番地ということになります。 $8632に$08の値があれば正解です。FDSヘッダの無い奴だと$8622番地です。 すごい説明が下手でスマン。 更に訂正 アドレスサーチでやりたいなら一応詳しく書くと 次のような例では、 ワールドAに行ける条件となっているワールド8のクリア回数8回の変更 ●マリオ2 FILE No.03 C484番地 08 ...とありますが、 FDSstudyでSMB2のファイルを開くと //////////////////////// Side-A //////////////////////// No LoadNo FileName LoadAdd Size Type 00 00 KYODAKU- 2800 E0 2 (NT) 01 01 SM2CHAR1 0 2000 1 (Chr) 02 10 SM2CHAR2 760 40 1 (Chr) 03 05 SM2MAIN 6000 8000 0 (Prg) 04 20 SM2DATA2 C470 E2F 0 (Prg) 05 30 SM2DATA3 C5D0 CCF 0 (Prg) 06 40 SM2DATA4 C2B4 F4C 0 (Prg) 07 0F SM2SAVE D29F 1 0 (Prg) ------------------------------------------------------- FDS Study ( Ver.0.8f ) まあこんな感じになっているでしょう。 FILE No.03なのでSM2MAINですね。 LoadAddが$6000でサイズが$8000ということは終端は、 $6000+$8000-$1=$DFFFとなります。 FDSのファイル部分はFile Header BlockとFile Data Blockで構成されており、 File Header Blockは10バイトです。 バイト 1 $03 1 File Number 1 File Indicate Code (ファイル識別コード) 8 File Name 2 File Address 2 File Size 1 Kind of File 次にFile Data Blockが続きます。 1 $04 それ以降がゲームデータとなっています。 簡単にはSM2MAINの部分から14バイト先からデータが入っています。 FDSファイルにはFDSヘッダのあるものとないものがあります。 FDSヘッダは16バイトです。 手元にあるFDSヘッダ付きSMB2のFDSファイルをバイナリエディタで開くと21A0番地から SM2MAINの文字列があります、その14バイト先が21AE番地です。 FDSファイルの$21AE番地が実記では$6000番地にマップされます。 ワールド8のクリア回数8回の変更だと $C484-$6000+$21AE=$8632 ということでFDSファイルの$8632番地ということになります。 $8632に$08の値があれば正解です。FDSヘッダの無い奴だと$8622番地です。 すごい説明が下手でスマン。 >>646-648 いや、とても丁寧にありがとう 今日夜の2交代シフトだから 明日の朝にでも試してみるよ >>633 最初の方のコードでNOPで埋められている部分があると思いますが、そこに意味があるの かも知れません。 ANNSMBでNSMDATA3を読み込んだ面(いわゆる9面)はエリアコードを直接指定することでかなり ユニークなステージが登場することがわかりました。9-1ならエリアコードの場所は$C266番地です。 (この部分は$C265から始まるループ戻り位置指定となっております。) 9-1だとミスすると自動歩行雲面に飛ばされてしまうので9-2以降の方がいいかも。 9-2はのエリアコードの場所は$C267番地です。 >>648 とりあえず該当アドレスで08の値があった 00にしてもA面にならなかったので 01にして機能するか試してみる FDSのゲームはエミュレーターがセーブファイルとしてFDSそのままか独自形式で保持している のでそれを削除するか、ファイル名を変更して保存しないと、パッチが適用されていない 状態になるとので注意。 >>627-628 1-7で城クリアの時に出るピノキオ(MC)がA-D面のものになっていますね。 これには気づいていなかった。もしかしてCHR-RAMが必要かな? 調べてみるとやはり、D13E番地からMCのスプライトが入っているようです。 CHR-RAMが必要なのは確定 >>636 とりあえずアドレス指定箇所調べたメモ ;色指定やテキストのアドレス指定 6063 : 01 03 ; <00> 6065 : 1F 6C ; <01> 海のパレット 6067 : 43 6C ; <02> 地上のパレット 6069 : 67 6C ; <03> 地下のパレット 606B : 8B 6C ; <04> 城のパレット 606D : E6 C5 ; <05> タイトルコード 606F : 41 03 ; <06> 6071 : 41 03 ; <07> 6073 : C7 6C ; <08> 斧以降の場合のパレット 6075 : AF 6C ; <09> 緑色を白色に変更する場合のパレット 6077 : B7 6C ; <0A> 緑色を白色、背景を黒に変更する場合のパレット 6079 : BF 6C ; <0B> 雲足場面の場合のパレット 607B : CF 6C ; <0C> [THANK YOU MARIO!] 607D : E3 6C ; <0D> [BUT OUR PRINCESS IS IN] [ANOTHER CASTLE!] 607F : 8D C8 ; <0E> 6081 : 96 C8 ; <0F> 6083 : AA C8 ; <10> [THANK YOU MARIO!] 6085 : C2 C8 ; <11> [PEACE IS PAVED] 6087 : D8 C8 ; <12> [WITH KINGDOM SAVED] 6089 : EE C8 ; <13> [HURRAH TO MARIO] 608B : 02 C9 ; <14> [OUR ONLY HERO] 608D : 13 C9 ; <15> [THIS ENDS YOUR TRIP] 608F : 2A C9 ; <16> [OF A LONG FRIENDSHIP] 6091 : 42 C9 ; <17> [100000 PTS.ADDED] 6093 : 5A C9 ; <18> [FOR EACH PLAYER LEFT.] 6095 : 5F C1 ; <19> ゲーム途中のディスク読み込み時エラー表示? 6097 : 21 C1 ; <1A> 6099 : 83 C9 ; <1B> 609B : CB C4 ; <1C> PLAYER選択キノコ 609D : 6B 63 ; <1D> ? 609F : 73 C9 ; <1E>[YOU'RE A SUPER PLAYER!] [WE HOPE WE'LL] [SEE YOU AGAIN.] [MARIO AND STAFF.] --------- ; BG制御 60ED : AD 73 07 LDA $0773 ; 60F0 : 0A ASL A ; 60F1 : AA TAX ; 60F2 : BD 63 60 LDA $6063,X ; 60F5 : 85 00 STA $00 ; 60F7 : E8 INX ;| 構造体アドレスをストア 60F8 : BD 63 60 LDA $6063,X ; 60FB : 85 01 STA $01 ; 60FD : 20 E8 6D JSR $6DE8 ; sub: 描画コードをレジスタへ 6100 : A0 00 LDY #$00 ; 6102 : AE 73 07 LDX $0773 ; 6105 : E0 06 CPX #$06 ; 6107 : D0 01 BNE $610A ; 6109 : C8 INY ; 610A : BE A1 60 LDX $60A1,Y ; 610D : A9 00 LDA #$00 ; 610F : 9D 00 03 STA $0300,X ; VRAM_BUFFER 6112 : 9D 01 03 STA $0301,X ; VRAM_BUFFER 6115 : 8D 73 07 STA $0773 ; 6118 : AD 79 07 LDA $0779 ; 611B : 8D 01 20 STA $2001 ; PPUコントロールレジスタ2 611E : 58 CLI ; --------- ; 6382 : B9 54 63 LDA $6354,Y ; ; 6382 : B9 54 63 LDA $6354,Y ; 6354 : 63 63 ; 6356 : 65 63 ; 6358 : 67 63 ; 635A : 69 63 ; ; 637F : BC 5C 63 LDY $635C,X ; 635C : 04 02 00 04 02 00 08 ; ;60F2 : BD 63 60 LDA $6063,X ; ;60F8 : BD 63 60 LDA $6063,X ; 6363 : 30 12 ; 6365 : 30 1A ; 6367 : 30 16 ; 6369 : 17 2A ; ;6391 : 99 70 63 STA $6370,Y ; 636B : 3F 18 ; 636D : 04 0F ; 636F : 36 00 ; 6371 : 00 00 ; ; <$0772=01> クッパの橋がおちた後 (パラレルワールドの時の分岐等) 6373 : AD FB 07 LDA $07FB ; 6376 : D0 26 BNE $639E ; 6378 : AE 5F 07 LDX $075F ; 637B : E0 07 CPX #$07 ; 637D : F0 1F BEQ $639E ; 637F : BC 5C 63 LDY $635C,X ; 6382 : B9 54 63 LDA $6354,Y ; 6385 : 85 00 STA $00 ; 6387 : C8 INY ; 6388 : B9 54 63 LDA $6354,Y ; 638B : 85 01 STA $01 ; 638D : A0 00 LDY #$00 ; 638F : B1 00 LDA ($00),Y ; 6391 : 99 70 63 STA $6370,Y ; 6394 : C8 INY ; 6395 : C0 02 CPY #$02 ; 6397 : D0 F6 BNE $638F ; 6399 : A9 1D LDA #$1D ; 639B : 8D 73 07 STA $0773 ; 639E : AE 1B 07 LDX $071B ; 63A1 : E8 INX ; 63A2 : 86 34 STX $34 ; 63A4 : AD FB 07 LDA $07FB ; パラレルワールドか 63A7 : F0 0C BEQ $63B5 ; パラレルワールドでなければジャンプ 63A9 : AD 5F 07 LDA $075F ; 現在のワールド 63AC : C9 03 CMP #$03 ; ワールドDか 63AE : 90 05 BCC $63B5 ; ワールドDに達していなければジャンプ 63B0 : A9 07 LDA #$07 ; ワールド8 63B2 : 8D 5F 07 STA $075F ; ワールド8と同じ扱い 63B5 : A9 08 LDA #$08 ; 斧獲得BGM指定 63B7 : 85 FC STA $FC ; PORT_$2005_V 63B9 : EE 72 07 INC $0772 ; 63BC : 60 RTS ; 63BD : AD 70 07 LDA $0770 ; A=$0770 63C0 : D0 F7 BNE $63B9 ; タイトル描画の必要なしならjump 63C2 : A9 05 LDA #$05 ; 63C4 : 4C 28 66 JMP $6628 ; ---------- ; $0300-$03??の描画コードをレジスタへ出力 6D9D : 8D 06 20 STA $2006 ; VRAM_ADD 6DA0 : C8 INY ; 6DA1 : B1 00 LDA ($00),Y ; JSR1/DAT_L/PT_L 6DA3 : 8D 06 20 STA $2006 ; VRAM_ADD 6DA6 : C8 INY ; 6DA7 : B1 00 LDA ($00),Y ; JSR1/DAT_L/PT_L 6DA9 : 0A ASL A ; 6DAA : 48 PHA ; 6DAB : AD 78 07 LDA $0778 ; 6DAE : 09 04 ORA #$04 ; 6DB0 : B0 02 BCS $6DB4 ; 縦向き描画ならjump 6DB2 : 29 FB AND #$FB ; 6DB4 : 20 F8 6D JSR $6DF8 ; 6DB7 : 68 PLA ; 6DB8 : 0A ASL A ; 6DB9 : 90 03 BCC $6DBE ; 6DBB : 09 02 ORA #$02 ; 6DBD : C8 INY ; 6DBE : 4A LSR A ; 6DBF : 4A LSR A ; 6DC0 : AA TAX ; 6DC1 : B0 01 BCS $6DC4 ; 6DC3 : C8 INY ; 6DC4 : B1 00 LDA ($00),Y ; 6DC6 : 8D 07 20 STA $2007 ; VRAM_DATA 6DC9 : CA DEX ; 6DCA : D0 F5 BNE $6DC1 ; 6DCC : 38 SEC ; 6DCD : 98 TYA ; 6DCE : 65 00 ADC $00 ; 6DD0 : 85 00 STA $00 ; 6DD2 : A9 00 LDA #$00 ; 6DD4 : 65 01 ADC $01 ; 6DD6 : 85 01 STA $01 ; 6DD8 : A9 3F LDA #$3F ; 6DDA : 8D 06 20 STA $2006 ; VRAM_ADD 6DDD : A9 00 LDA #$00 ; 6DDF : 8D 06 20 STA $2006 ; VRAM_ADD 6DE2 : 8D 06 20 STA $2006 ; VRAM_ADD 6DE5 : 8D 06 20 STA $2006 ; VRAM_ADD ; サブルーチンとしての最初の呼び出しはここから 6DE8 : AE 02 20 LDX $2002 ; PPU_STATUS 6DEB : A0 00 LDY #$00 ; 6DED : B1 00 LDA ($00),Y ; 6DEF : D0 AC BNE $6D9D ; 6DF1 : 8D 05 20 STA $2005 ; PPU_BG_SCROLL 6DF4 : 8D 05 20 STA $2005 ; PPU_BG_SCROLL 6DF7 : 60 RTS ; $6000-7FFFをROM化するためには、 適当なところに$636B-6372の8バイトをWRAMの開き領域に転送するプログラムを書く、 $609D-607EにWRAMに転送したアドレスの値を入れる $6392-6392に転送したアドレスの値+$6を入れる >>654 一応ファイル名を変更したり セーブデータの.sdkファイル消したりしたけど Bボタン押しながらスタートでも00でA面に行かない アドレス違ってんでしょうか? ピノキオ(MC)の処理関係 ;ピノキオ(MC)切り替え処理? 6311 : AD 5C 07 LDA $075C ; 6314 : C9 03 CMP #$03 ; 6316 : D0 39 BNE $6351 ; 6318 : AC FB 07 LDY $07FB ; 631B : D0 34 BNE $6351 ; 631D : 84 06 STY $06 ; 631F : AD 5F 07 LDA $075F ; 6322 : 0A ASL A ; 6323 : AA TAX ; 6324 : BD FA 62 LDA $62FA,X ; 6327 : 85 00 STA $00 ; 6329 : E8 INX ; 632A : BD FA 62 LDA $62FA,X ; 632D : 85 01 STA $01 ; 632F : A6 06 LDX $06 ; 6331 : BD 08 63 LDA $6308,X ; 6334 : 8D 06 20 STA $2006 ; VRAM_ADD 6337 : BD 0B 63 LDA $630B,X ; 633A : 8D 06 20 STA $2006 ; VRAM_ADD 633D : B1 00 LDA ($00),Y ; 633F : 8D 07 20 STA $2007 ; VRAM_DATA 6342 : C8 INY ; 6343 : 98 TYA ; 6344 : DD 0E 63 CMP $630E,X ; 6347 : D0 F4 BNE $633D ; 6349 : E6 06 INC $06 ; 634B : A5 06 LDA $06 ; 634D : C9 03 CMP #$03 ; 634F : D0 DE BNE $632F ; 6351 : 4C B9 63 JMP $63B9 ; ---------- ; 画面のモードによる分岐? アドレス指定 7AAD : 5E C0 ; 7AAF : C9 6E ; RAMリセットやハードモード設定など 7AB1 : 11 63 ; ピノキオ(MC)切り替え処理? 7AB3 : 4C 65 ; 画面切り替え総合管理(イントロ作成, 表示) 7AB5 : 48 6F ; BGM指定や0爆弾ストアなど 7AB7 : B9 7A ; 通常のゲームプレイ >>664 飛ばしてしまった ; 6324 : BD FA 62 LDA $62FA,X ; ; 632A : BD FA 62 LDA $62FA,X ; 62FA : 3E D1 ; 62FC : 9E D1 ; 62FE : FE D1 ; 6300 : 5E D2 ; 6302 : 4F D1 ; 6304 : AF D1 ; 6306 : 0F D2 ; ; 6331 : BD 08 63 LDA $6308,X ; 6308 : 0C 07 0E ; ; 6337 : BD 0B 63 LDA $630B,X ; 630B : D0 A0 E0 ; ; 6344 : DD 0E 63 CMP $630E,X ; 630E : 30 50 60 ; >>656 一応CHR-RAMmmmmじゃなくて、CHR-ROMのバンク切り替えでもいけそうだが、 768W(1024W)の城クリアでバグMCが登場する挙動が再現できないのでNG CHR-RAM使うのは凄い面倒いなぁ。 普通には PRG-ROM→CHR-RAM と転送しないといけない。 特殊なマッパー使えば CHR-ROM→PRG-RAM→CHR-RAM バグ挙動の再現を諦めれば、 CHR-ROMのバンク切り替えが一番楽だな。 も可能だが画面が出るまでにラグが出る >>663 正しくパッチすれば、$00にした場合はstart+Aでディスクロードの為に黒画面が出てから A-1からスタートすると思いますが。 >>668 CHR-RAM使うのは凄い面倒いなぁ。 普通には PRG-ROM→CHR-RAM と転送しないといけない。 特殊なマッパー使えば CHR-ROM→PRG-RAM→CHR-RAM も可能だが画面が出るまでにラグが出る バグ挙動の再現を諦めれば、 CHR-ROMのバンク切り替えが一番楽だな。しかし余分に容量食う kaiserのマッパー142のSMB2JはCHR-RAMだが8-4クリア時のドア→ピーチになるのを 上手く再現している。PRG-ROMには32KBのCHRデータが入ってた。 ドア8KB+ピーチ8KB+ドア8KB+ピーチ8KBの構成。 作動の軽快だったからCHR-RAM方式でもスムーズに作動するようだ 海賊版SMB2Jのマッパー40、43、50のものは8-4クリア(エンディング)の挙動に問題がある ようです。エンディングのBGMが流れない、黒画面で固まる。9-1に行けない等。 (VirtuaNESはエンディングのBGMは流れるが他の問題は発生する。これは恐らく VirtuaNESが$6000-7FFFがROMであるべき時でも書き換え出来てしまう為でしょう。) (※また、マッパー43は異なる仕様ものが重複して割り当てられている為にエミュレーターに よって解釈が異なります。) マッパー142のおのは比較的良い移植ですが、ソフトウェアリセットで固まってしまうようです。 MMC3版はマッパー142をベースに作られているでしょう。マッパー142はVRC3をベースにした 拡張版で$6000-7FFFにもROMが割り当てられるようにした物の用です。 海賊版SMB2Jのマッパー40、43、50のものは8-4クリア(エンディング)の挙動に問題がある ようです。エンディングのBGMが流れない、黒画面で固まる。9-1に行けない等。 (VirtuaNESはエンディングのBGMは流れるが他の問題は発生する。これは恐らく VirtuaNESが$6000-7FFFがROMであるべき時でも書き換え出来てしまう為でしょう。) (※また、マッパー43は異なる仕様ものが重複して割り当てられている為にエミュレーターに よって解釈が異なります。) マッパー142のものは比較的良い移植ですが、ソフトウェアリセットで固まってしまうようです。 MMC3版はマッパー142をベースに作られているでしょう。マッパー142はVRC3をベースにした 拡張版で$6000-7FFFにもROMが割り当てられるようにした物のようです。 >>669 ごめん、いけた BボタンじゃなくてAボタン押しながらスタートだったのね 黒い画面だったから一瞬データ壊れたかと思ったけど あれは読み込み中だったのね マッパー43は実際には少なくとも3種類の異なるマッパーが重複して割り当てられているので 非常に厄介です。 TONY-I CHR-ROM IRQ制御$4122 YS-612 CHR-ROM IRQ制御$8122 Mr. Mary 2 CHR-RAM IRQ制御$4122 マッパー43は実際には少なくとも3種類の異なるマッパーが重複して割り当てられているので 非常に厄介です。 TONY-I NESファイル88KB CHR-ROM IRQ制御$4122 YS-612 NESファイル88KB CHR-ROM IRQ制御$8122 Mr. Mary 2 NESファイル80KB CHR-RAM IRQ制御$4122 PRG-ROMからCHR-RAMに転送するルーチンは LDA ($?),Y STA $2007 INY BNE が基本のようです。 ループさせて$2007に8192回書き込みます。 8bitCPUなので256×32回という処理になります。 海賊版SMB2Jの場合、$C000-DFFFにCHRデーターを出現させて転送するようですが、 ×32回の部分はどうやっているかっていうと、アドレス$E000になったらループから抜けるか、 $20回(32回)を超えたらループから抜けるみたいな処理になっているようです。 ファミコンは$2007に読み込みまたは書き込みで自動でインクリメントされる仕様でこれを 使っているようです。 ($2006で初期アドレスを指定します。2バイトなので二回書き込みです。) CHR-ROMからCHR-RAMに転送しようと思うと一旦8K全部PRG-RAMに転送してからCHR-RAMに 転送するようにしないと凄く複雑(かつ遅い)コードになってしまいます。 1バイトづつCHR-ROM→本体WRAM→CHR-RAMやろうと思うと、$2007が読み込みで インクリメントされ、書き込みでインクリメントされる為うまくいきません。 素直にやろうとすると一々$2006でアドレス指定する複雑かつ重いコードとなって しまいます。読み書きでインクリメントされてズレるのを悪用する方法も出来なくはないです が、高速バンク切り替えでバグってしまう可能性はあります。 海賊版SMB2Jの原本はこれだと言われてます。 https://wiki.nesdev.com/w/index.php/NES_2.0_Mapper_368 通称Yung-08 他の派生マッパー(40、43、50)の物は殆どYung-08がベースです。 マッパー142のSMB2Jは比較的良く出来た移植です。 ただしソフトウェアリセットにバグがあるようです。 Yung-08をベースにしているかどうかは分かりません。がYung-08系列じゃない可能性が 高いです。 MMC3移植版はマッパー142をベースにしている可能性が極めて高いです。 Yung-08系列はエンディングのBGMがおかしい、9-1に行けない等の不具合があります。 マッパー142をベースにマッパー50に移植することは理論上可能と覆われます。 マッパー142をベースにマッパー50に移植することは理論上可能と思われます CHR-RAMなMMC3でANNSMBを最小限の変更で再現するには、少なくとも4KBの CHR-RAMが必要のようです。 MMS3版ANNSMBはセーブ機能を搭載する予定なので、セーブ関連のコードを入れた 開き領域にCHR-RAM関連のコードを入れる予定 PPUDATA読み取りバッファー(フェッチ後) VRAMアドレスが0〜 $ 3EFFの範囲にあるとき(つまり、パレットの前)に読み取ると、読み取りは内部読み取りバッファーの内容を返します。 この内部バッファは、PPUDATAを読み取るときにのみ更新されるため、フレーム間で保持されます。 CPUが内部バッファの内容を読み取って取得した後、PPUはすぐに現在のVRAMアドレスのバイトで内部バッファを更新します。 したがって、VRAMアドレスを設定した後、最初にこのレジスタを読み取ってパイプラインを準備し、結果を破棄する必要があります。 $ 3F00〜 $ 3FFFからのパレットデータの読み取りは動作が異なります。 パレットデータはデータバスにすぐに配置されるため、プライミング読み取りは必要ありません。 パレットを読み取ると、内部バッファは更新されますが、そこに配置されるデータは、パレットの「下」に表示されるミラーリングされた名前テーブルデータです。 (PPUメモリマップを確認すると、これがより明確になるはずです。) PPU registers https://wiki.nesdev.com/w/index.php/PPU_registers#The_PPUDATA_read_buffer_.28post-fetch.29 CHR-ROM→PRG-RAM→CHR-RAMに転送する適当に書いたコード A5 FE LDA $00FE 29 E7 AND #$E7 8D 01 20 STA $2001 AE 02 20 LDX $2002 A0 00 LDY #$00 8C 06 20 STY $2006 C 06 20 STY $2006 84 0A STY $000A A9 A0 LDA #$A0 85 0B STA $000B A2 20 LDX #$20 :_A B1 0A LDA ($0A),Y 8D 07 20 STA $2007 C8 INY D0 F8 BNE _A E6 0B INC $000B CA DEX D0 F3 BNE _A A5 FE LDA $00FE 29 E7 AND #$E7 8D 01 20 STA $2001 AE 02 20 LDX $2002 A0 00 LDY #$00 8C 06 20 STY $2006 8C 06 20 STY $2006 84 0A STY $000A A9 60 LDA #$60 85 0B STA $000B A2 20 LDX #$20 AD 07 20 LDA $2007 :_B AD 07 20 LDA $2007 91 0A STA ($0A),Y C8 INY D0 F8 BNE _B E6 0B INC $000B CA DEX D0 F3 BNE _B A5 FE LDA $00FE 29 E7 AND #$E7 8D 01 20 STA $2001 AE 02 20 LDX $2002 A0 00 LDY #$00 8C 06 20 STY $2006 8C 06 20 STY $2006 84 0A STY $000A A9 60 LDA #$60 85 0B STA $000B A2 20 LDX #$20 :_C B1 0A LDA ($0A),Y @ $8000 8D 07 20 STA $2007 C8 INY D0 F8 BNE _C E6 0B INC $000B CA DEX D0 F3 BNE _C 4C 00 80 JMP $8000 一応城クリアでMCのグラがちゃんと替わる仕様のものもとりあえず出来たが... 一旦ソフトウェアリセットしないとグラフィックがバグってしまう不具合がありましたが、 解消できました。原因は改変FDS BIOS部に$2007に書き込みするルーチンが 残っていあした。無意味な上に起動ラグの原因なのでカットしました。 ということでMC正常表示できるようにしました。しかしMMC3でCHR-RAMを使いたいって 事で変態なマッパー195を採用しました。ということで古いエミュレータでは動かない可能性 大です。 FCEUXとVirtuaNES Plusで作動確認。 https://www.axfc.net/u/4030465.zip ただ$6000-7FFF部の書き換え部分はまだ修正していません。がSMB2J(改変BDS BIOS部)の嵐部分 のコードが不要なのでそこにコードを配置することは可能でしょう。 PRG-RAMかつ$6000-7FFF部にコードが置けるマッパーは$6000-7FFFがROMの場合が 多いのでマッパー移植性を考慮するとROMでも作動するようにする必要があります。 >>637 MMC3版のSMB2Jは$6000-$7FFFに書き込むコードは残っているようです。 >>696 テスト版的なものは"すぐに消えるロダ"に上げたりしています。 マッパー142のSMB2Jのソフトウェアリセットがエミュレーターによってはうまくいかないのが 謎だな。同じマッパー142のバブルボブルはソフトウェアリセットは正常なので 問題の箇所をトレースログを追って特定しました。 ($FFFA:8B E1 24 EE C7 E1) $EE9E:58 CLI $EE9F:6C FC DF JMP ($DFFC) = $6000 FCEUXの場合、 $EE9E:58 CLI $EE9F:6C FC DF JMP ($DFFC) = $6000 $E1C7:2C 01 01 BIT $0101 = #$80 ...(略) $E1F6:68 PLA $E1F7:40 RTI $E1C7:2C 01 01 BIT $0101 = #$80 ... ↑無限ループ VirtuaNESの場合、 $EE9E:58 CLI $EE9F:6C FC DF JMP ($DFFC) = $6000 $E1C7:2C 01 01 BIT $0101 = #$80 $6000:A5 FA LDA $00FA = #$00 $E1C7:2C 01 01 BIT $0101 = #$80 ...(略) $E1F6:68 PLA $E1F7:40 RTI $6002:29 F7 AND #$F7 ......(略々) $E1F6:68 PLA $E1F7:40 RTI $604F:8D 01 01 STA $0101 = #$C0 $E1C7:2C 01 01 BIT $0101 = #$C0 $E1CA:30 1E BMI $E1EA $E1EA:50 03 BVC $E1EF $E1EC:6C FE DF JMP ($DFFE) = $61A2 $61A1:40 RTI $61A2:78 SEI $61A3:08 PHP $61A4:48 PHA $61A5:8A TXA $61A6:48 PHA $61A7:98 TYA $61A8:48 PHA ... ↑ とりあえずIRQ割り込みが1命令ごとに発生し、$6000からゆっくりとプログラムが 進むが$604Fまで行くとIRQ割り込みから抜け正常作動。 とりあえず、$EE9EをNOP($EA)で潰してしまえばFCEUXでもソフトウェアリセットが 働くのを確認。VirtuaNESでもソフトウェアリセット時の遅延がなくなります。 >>702 訂正 VirtuaNESの場合、 $EE9E:58 CLI $EE9F:6C FC DF JMP ($DFFC) = $6000 $E1C7:2C 01 01 BIT $0101 = #$80 ...(略) $E1F6:68 PLA $E1F7:40 RTI $6000:A5 FA LDA $00FA = #$00 $E1C7:2C 01 01 BIT $0101 = #$80 ...(略) $E1F6:68 PLA $E1F7:40 RTI $6002:29 F7 AND #$F7 ......(略々) $E1F6:68 PLA $E1F7:40 RTI $604F:8D 01 01 STA $0101 = #$C0 $E1C7:2C 01 01 BIT $0101 = #$C0 $E1CA:30 1E BMI $E1EA $E1EA:50 03 BVC $E1EF $E1EC:6C FE DF JMP ($DFFE) = $61A2 $61A1:40 RTI $61A2:78 SEI $61A3:08 PHP $61A4:48 PHA $61A5:8A TXA $61A6:48 PHA $61A7:98 TYA $61A8:48 PHA ... ↑ とりあえずIRQ割り込みが1命令ごとに発生し、$6000からゆっくりとプログラムが 進むが$604Fまで行くとIRQ割り込みから抜け正常作動。 VirtuaNES以外のエミュレーターだと $EE9F:6C FC DF JMP ($DFFC)の 後にIRQ割り込みで$E1C7:2C 01 01 BIT $0101に行き、$E1F7:40 RTIで $E1C7に行ってしまうからデッドロックしてしまうんやな。 ちょっとNESや6502の仕様を調べてみないと分からんな。 マッパー142のSMB2Jのバンク構成を解析してみた。 prg $6000 0B $8000 0C $A000 0D $C000 00 01 02 03 $E000 last bank(0F) chr 04 05 残りのバンクはミラーのようです 04 05 ↓ ↓ 06 07 00 01 02 03 ↓ ↓ ↓ ↓ 0E 08 09 0A マッパー50は複雑怪奇で解析する気力が出ない。 バンク指定がスクランブルされていて次のようになります。 実際のバンク → 指定する数値 0 (0000) → 0 (0000) 1 (0001) → 6 (0110) 2 (0010) → 1 (0001) 3 (0011) → 7 (0111) 4 (0100) → 8 (1000) 5 (0101) → E (1110) 6 (0110) → 9 (1001) 7 (0111) → F (1111) SMB2Jの$6000-$7FFFを完全にROM化して、本体WRAMで処理しようとすると 空き容量が足りない。ひとつ思いついた方法は1バイト(8bit)単位ではなくて1bit単位で 記録するようにすればなんとかなるかも知れない。しかしコードを書くのが面倒だな まあわざわざ書かなくても大丈夫だと思いますが、IPSファイルはNTSC版のSMBの NESファイルに適用してください >>703 NESファイルではアドレス0x1EEAFを58からEAに置き換えるということです。 逆にROMカセットをFDSに容易に変換するには、 PRG-ROMが16KBかつプログラムが$8000からスタートするようにコードされていること。 しかし、PRG-ROMが16KBのソフトは$C000からスタートの場合が多い。 上記の条件に適合するのは例えばキン肉マン マッスルタッグマッチが該当するようです。 レリクス暗黒要塞をRom化して、オマチクダサイ を無くす事はできないの? >>714 これってディスクロードが非常に多いと言われているゲームだね。 >>627 >>685 結果的にCHR-RAM化が先となってしまいました。このあとセーブ機能の導入にあたって、 問題が発生(後述)することが判明したので結果的に良かったです。 CHR-RAM化する為にCHR-ROMのデータを$6000-$7FFFの領域に書きこんで、 それからCHR-RAMに書き込む方式としました。そのあと$C000-$DFFFに "$6000-$7FFFのデータ"の入ったバンクを出現させて$6000-$7FFFに書き込みます。 ところがセーブ仕様のSMB-2Jは$6000にセーブデータを置く仕様になっており、 $6001-$7FFFに書き込む仕様となっており、CHR-RAM初期化ルーチンと 衝突すると思ったわけです、なのでCHR-RAMのPPU$0000の部分だけ本体WRAMに 一旦転送するようにすれば解決はできます。ところがわざわざこんな処理をしなくても 大丈夫な事がでした。城クリア時のMC(ピノキオ)表示のために必要な CHR-RAMは4KBで十分な事が分かっていたので、上位アドレスから使ったほうが 無難ということで最初からCHR-ROMのデータを$7000-$7FFFに転送する仕様に していたので、セーブに使われる$6000と衝突しないので大丈夫のようです。 もしセーブデータを一旦WRAMに退避させてからCHR-RAMの初期化で$6000を使用する ような仕様とした場合は、電源投入直後にリセットとかリセット連打でセーブデータが 壊れてしまうことは容易に分かるでしょう あとなぜPRG-ROM→CHR-RAMとせずにCHR-ROM→PRG-RAM→CHR-RAMのように 面倒な構成としたのは、主に容量の問題です。ROMチップの容量は一般的に2の累乗です。 CHR-ROM16KB + PRG-ROM64KBなら計72Kですが、CHRのデーターをROMに置こうとすると PRG-ROMが最低でも72KB必要ですがそんな半端なROMチップは一般的に無いので 128KBとなってしまいます。しかし余分に容量を消費するのは美しくない。 容量の異なるROMチップを組み合わせてアドレスを割り当てる方法もありますが、 余計にコストがかかります。ということでこのようになりました。 SMB2JのMMC3版をテストしていたら赤パックンフラワーの所はパッチされているが、 赤パックンが出現しなかった。修正版パッチもあるけど、ちょっと調査してみる。 赤パックンフラワーの処理を正常化しようと思うと結構パッチが必要なようだ。 本家FDS SMB2J ; 赤パックン切り替え(パックンフラワー初期設定) 9398:A9 22 LDA #$22 939A:85 00 STA $0000 = #$02 939C:A9 13 LDA #$13 939E:85 01 STA $0001 = #$03 93A0:AD FB 07 LDA $07FB = #$00 93A3:D0 0D BNE $93B2 93A5:AD 5F 07 LDA $075F = #$04 93A8:C9 03 CMP #$03 93AA:B0 06 BCS $93B2 93AC:C6 00 DEC $0000 = #$02 93AE:A9 21 LDA #$21 93B0:85 01 STA $0001 = #$03 93B2:A5 00 LDA $0000 = #$02 93B4:8D 17 B5 STA $B517 = #$21 93B7:A5 01 LDA $0001 = #$03 93B9:8D FE 9F STA $9FFE = #$21 93BC:A9 01 LDA #$01 93BE:95 58 STA $58,X @ $005F = #$00 93C0:4A LSR 93C1:95 1E STA $1E,X @ $0025 = #$00 93C3:95 A0 STA $A0,X @ $00A7 = #$00 93C5:B5 CF LDA $CF,X @ $00D6 = #$00 93C7:9D 34 04 STA $0434,X @ $043B = #$00 93CA:38 SEC 93CB:E9 18 SBC #$18 93CD:9D 17 04 STA $0417,X @ $041E = #$00 93D0:A9 09 LDA #$09 93D2:4C 10 94 JMP $9410 kaiser版とMMC3版赤パックン処理未対策 9398:A9 22 LDA #$22 939A:85 00 STA $0000 = #$02 939C:A9 13 LDA #$13 939E:85 01 STA $0001 = #$03 93A0:AD FB 07 LDA $07FB = #$00 93A3:D0 0D BNE $93B2 93A5:AD 5F 07 LDA $075F = #$04 93A8:C9 03 CMP #$03 93AA:B0 06 BCS $93B2 93AC:C6 00 DEC $0000 = #$02 93AE:A9 21 LDA #$21 93B0:85 01 STA $0001 = #$03 93B2:A5 00 LDA $0000 = #$02 93B4:EA NOP 93B5:EA NOP 93B6:EA NOP 93B7:A5 01 LDA $0001 = #$03 93B9:EA NOP 93BA:EA NOP 93BB:EA NOP 93BC:A9 01 LDA #$01 93BE:95 58 STA $58,X @ $005F = #$00 93C0:4A LSR 93C1:95 1E STA $1E,X @ $0025 = #$00 93C3:95 A0 STA $A0,X @ $00A7 = #$00 93C5:B5 CF LDA $CF,X @ $00D6 = #$00 93C7:9D 34 04 STA $0434,X @ $043B = #$00 93CA:38 SEC 93CB:E9 18 SBC #$18 93CD:9D 17 04 STA $0417,X @ $041E = #$00 93D0:A9 09 LDA #$09 93D2:4C 10 94 JMP $9410 MMC3版赤パックン処理対策版 9398:A9 21 LDA #$21 939A:85 50 STA $0050 = #$00 939C:85 51 STA $0051 = #$00 939E:AD FB 07 LDA $07FB = #$00 93A1:D0 07 BNE $93AA 93A3:AD 5F 07 LDA $075F = #$04 93A6:C9 03 CMP #$03 93A8:90 06 BCC $93B0 93AA:E6 50 INC $0050 = #$00 93AC:A9 13 LDA #$13 93AE:85 51 STA $0051 = #$00 93B0:A9 01 LDA #$01 93B2:95 58 STA $58,X @ $005F = #$00 93B4:4A LSR 93B5:95 1E STA $1E,X @ $0025 = #$00 93B7:95 A0 STA $A0,X @ $00A7 = #$00 93B9:B5 CF LDA $CF,X @ $00D6 = #$00 93BB:9D 34 04 STA $0434,X @ $043B = #$00 93BE:38 SEC 93BF:E9 18 SBC #$18 93C1:9D 17 04 STA $0417,X @ $041E = #$00 93C4:A9 09 LDA #$09 93C6:4C 10 94 JMP $9410 93C9:B9 0A B5 LDA $B50A,Y @ $B50A = #$01 93CC:C0 0D CPY #$0D 93CE:D0 02 BNE $93D2 93D0:A5 50 LDA $0050 = #$00 93D2:60 RTS 93D3:FF UNDEFINED 93D4:FF UNDEFINED マッパーのレジスタと干渉しないように$EA(NOP)で潰したのでしょうな。当然緑パックンの ままになります。 ただ赤パックン作動をさせる為には>>724 のパッチだけでは駄目で他の部分の修正も必要 のようです セーブ化はそんなに多くの変更を行わなくてもいけそうですが、赤パックン処理関係で 結構エグい変更が必要になる模様。 本家FDS SMB2J ;パックンフラワー動作処理付近 A01F:A5 09 LDA $0009 = #$22 A021:4A LSR A022:90 19 BCC $A03D A024:AD 47 07 LDA $0747 = #$00 A027:D0 14 BNE $A03D A029:B5 CF LDA $CF,X @ $00D6 = #$00 A02B:18 CLC A02C:75 58 ADC $58,X @ $005F = #$00 A02E:95 CF STA $CF,X @ $00D6 = #$00 A030:C5 00 CMP $0000 = #$00 A032:D0 09 BNE $A03D A034:A9 00 LDA #$00 A036:95 A0 STA $A0,X @ $00A7 = #$00 A038:A9 40 LDA #$40 A03A:9D 8A 07 STA $078A,X @ $0791 = #$00 A03D:A9 20 LDA #$20 kaiser版とMMC3版赤パックン処理未対策 A01F:A5 09 LDA $0009 = #$C4 A021:4A LSR A022:90 19 BCC $A03D A024:AD 47 07 LDA $0747 = #$00 A027:D0 14 BNE $A03D A029:B5 CF LDA $CF,X @ $00D4 = #$00 A02B:18 CLC A02C:75 58 ADC $58,X @ $005D = #$00 A02E:95 CF STA $CF,X @ $00D4 = #$00 A030:C5 00 CMP $0000 = #$00 A032:D0 09 BNE $A03D A034:A9 00 LDA #$00 A036:95 A0 STA $A0,X @ $00A5 = #$00 A038:A9 40 LDA #$40 A03A:9D 8A 07 STA $078A,X @ $078F = #$00 A03D:A9 20 LDA #$20 MMC3版赤パックン処理対策版 A01F:C9 21 CMP #$21 A021:90 3C BCC $A05F A023:B5 58 LDA $58,X @ $0058 = #$00 A025:49 FF EOR #$FF A027:18 CLC A028:69 01 ADC #$01 A02A:95 58 STA $58,X @ $0058 = #$00 A02C:F6 A0 INC $A0,X @ $00A0 = #$00 A02E:BD 34 04 LDA $0434,X @ $0434 = #$00 A031:B4 58 LDY $58,X @ $0058 = #$00 A033:10 03 BPL $A038 A035:BD 17 04 LDA $0417,X @ $0417 = #$00 A038:85 00 STA $0000 = #$FF A03A:AD 17 B5 LDA $B517 = #$21 本家FDS SMB2Jとkaiser版とMMC3版赤パックン処理未対策 ; 敵キャラ色指定 B5ED:B9 0A B5 LDA $B50A,Y @ $B50A = #$01 MMC3版赤パックン処理対策版 B5ED:20 C9 93 JSR $93C9 そんなに大げさに変更しなくても良いことが分かりました。 とりあえず懸念事項が解決したのでセーブ機能付きの製作に取り掛かります。 >>733 削除しました。なんか8-4クリアでドアのままでした。 inesヘッダ修正しわすれていて、CHRが8KBのままでしたorz. 今日は眠いので寝ます。 あとルーイジクリアでW9に行くとなぜかマリオになってしまったので要調査です スーパージャンプ台も修正必要かも。本来緑なのに赤のまま スーマリの音をVRC6で鳴らすハックがあるね まだ出来はヒドいけどw でも行動に移すってスゴいなぁと思う 今後のブラッシュアップに勝手に期待してる パックン Pirahna Plant ジャンプ台 Spring スーパージャンプ台を緑色にする為のコードを置く領域が厳しいかも知れない。 (赤)パックンの修正はbeneficii氏によるもののようです。 8-4またはD-4クリア時の修正は誰が行ったのか謎です。 loopy氏の改造版を見ると(緑)スーパージャンプ台の為にコードが大幅に変更された 可能性があります。 >>733 再うpします。 https://www.mediafire.com/file/34p445eaifh2uu8/Super_Mario_Bros_2_J_%2528Lost_Levels%2529__MPR4_turbo4.zip 赤パックンの他に、エンディング処理の問題も見つかったので修正しました。 (改変FDS BIOS部分の無駄なルーチンの削除も含まれています。 あと以前うpしたファイルはNESヘッダのCHRサイズが間違っていましたorz) あと改造のベースとしたMMC3版SMB2Jです。(NESヘッダのCHRサイズは修正済み。) https://www.mediafire.com/file/tu7lkinjvgu4o4k/SMB2J.zip これはkaiser版SMB2Jに近いものです。 ソースのファイルがバイナリエディタで間違って変更したものだったり、NESヘッダが 間違えていたりで、訳の分からない状態となっていたorz. とりあえず、>>742-744 のファイルはその辺を見直したつもり... >>738 パックン Piranha Plant ジャンプ台 Spring ジャンプ台の処理はコードサイズを削減する為か改造はかなり難解な模様。 エンディング処理関係のコード 本家FDS SMB2J SM2DATA3 C759:A9 07 LDA #$07 C75B:20 39 E2 JSR $E239 C75E:D2 C0 UNDEFINED C760:48 C7 UNDEFINED kaiser版とMMC3版エンディング処理未対策 C759:A9 58 LDA #$58 C75B:8D 6F 01 STA $016F = #$00 C75E:4C 6A C7 JMP $C76A C761C7 UNDEFINED MMC3版エンディング処理未対策済 C759:4C 6A C7 JMP $C76A C75C:A9 58 LDA #$58 C75E:8D 6F 01 STA $016F = #$00 C761C7 UNDEFINED 実態は赤パックン処理のコードに少し手を加えただけ 93C9:B9 0A B5 LDA $B50A,Y @ $B50A = #$01 93CC:C0 0D CPY #$0D 93CE:D0 02 BNE $93D2 93D0:A5 50 LDA $0050 = #$00 93D2:4C 20 E0 JMP $E020 E020:C0 1B CPY #$1B E022:B0 06 BCS $E02A E024:C0 18 CPY #$18 E026:90 02 BCC $E02A E028:A5 52 LDA $0052 = #$02 E02A:60 RTS ; ジャンプ台色切り替え B52C:A9 02 LDA #$02 B52E:AC 5F 07 LDY $075F = #$00 B531:C0 01 CPY #$01 B533:F0 08 BEQ $B53D B535:C0 02 CPY #$02 B537:F0 04 BEQ $B53D B539:C0 06 CPY #$06 B53B:D0 01 BNE $B53E B53D:4A LSR B53E:85 52 STA $0052 = #$02 B540:EA NOP B541:EA NOP B542:EA NOP B543:EA NOP B544:EA NOP B545:EA NOP B546:EA NOP ; 敵キャラ描画 B82E:0D 52 00 ORA $0052 = #$02 理由は些細な事なのですが、改造ANNSMBでCHR-RAM初期化コードを最初$E040に置こう としていたのですが、誤って$E030に置いてしまいました。とくに問題は無かったので 放置していたのですが...、そのため$E0C0にコード置ける領域が余ってるのを思い出したので そこに配置しました。メンテナンス性を考えてANNSMBとSMB2Jの追加コードを別アドレスに 配置しています。このためANNSMBではスーパージャンプ台は赤色ですが、緑色に変更する ということも可能になります。 >>751 は次のようになりました。 93C9:B9 0A B5 LDA $B50A,Y @ $B50A = #$01 93CC:C0 0D CPY #$0D 93CE:D0 02 BNE $93D2 93D0:A5 50 LDA $0050 = #$00 93D2:4C C0 E0 JMP $E0C0 E0C0:C0 1B CPY #$1B E0C2:B0 06 BCS $E02A E0C4:C0 18 CPY #$18 E0C6:90 02 BCC $E02A E0C8:A5 52 LDA $0052 = #$02 E0CA:60 RTS ちょっと間違えました。 >>751 は次のようになりました。 93C9:B9 0A B5 LDA $B50A,Y @ $B50A = #$01 93CC:C0 0D CPY #$0D 93CE:D0 02 BNE $93D2 93D0:A5 50 LDA $0050 = #$00 93D2:4C C0 E0 JMP $E0C0 E0C0:C0 1B CPY #$1B E0C2:B0 06 BCS $E0CA E0C4:C0 18 CPY #$18 E0C6:90 02 BCC $E0CA E0C8:A5 52 LDA $0052 = #$02 E0CA:60 RTS ゼロページの未使用領域に割り当てたデーターはこのようになっています。 $50 パックンフラワーの色 $51 パックンフラワーの作動 $52 ジャンプ台の色 セーブ機能付けようとしたところ、8-4クリア回数の星が付かないことが判明。 原因はタイトルコード書き換えて★を付けているようで、結構大幅なコード変更が必要な事が 判明 >>758 タイトルコードの$26が★になると$F1になるみたいです。 ★表示がかなり鬼門だったとは。 タイトルコードだけで312バイトもあります。 ★表示に関係ある部分でもざっと52バイトもあります。 SRAMセーブ機能が付いたSMB2Jは大幅にコードの再配置が行われていますが、 理由はこれでしょう。 こんな空き領域は本体WRAMにはありません。スタック領域に置こうとしても 厳しい。となるとRPG-RAMを使うことになりますが、プログラムの最初の方を $E000-$FFF9に移動させる必要が生じてきます。MMC5でやればこんなに 苦労しない。 改造ANNAMBに★表示を実装しているのですがバグちゃって駄目だった。 ワールドセレクト版でパワレルワールド選択してマリオが動き出すとバグるのと関連しているのかな? >>763 61E8: 40 RTIの次で変なアドレスに行っちゃってるみたいです。 Programming with unofficial opcodes https://wiki.nesdev.com/w/index.php/Programming_with_unofficial_opcodes SKB #i ($80 ii, $82 ii, $89 ii, $C2 ii, $E2 ii; 2 cycles) These unofficial opcodes just read an immediate byte and skip it, like a different address mode of NOP. One of these even works almost the same way on 65C02, HuC6280, and 65C816: BIT #i ($89 ii), whose only difference from the 6502 is that it affects the NVZ flags like the other BIT instructions. Use this SKB if you want your code to be portable to Lynx, TG16, or Super NES. Puzznic uses $89, and Beauty and the Beast uses $80. Also called DOP, NOP (distinguished from the 1-byte encoding by the addressing mode). 【まだ】単品CPU Z80とか6809/6502 (【現役】 http://science4.5ch.net/test/read.cgi/denki/1150952925/ 110 :774ワット発電中さん:2006/10/01(日) 21:01:30 ID:tYTmehRZ BRN:Branch Neverって命令あったよね。 最初NOPと何が違うのかと思ってた。 オペランドに何を入れておいても良いので、データを隠しておいて 解析されにくくするのに使ってた。 117 :774ワット発電中さん:2006/10/04(水) 01:24:38 ID:hcYn7IPe >>110 BRNは、ハンドアセンブルみたいにコード追加でのアドレス再計算が 困難なときに所々にはさんでおいて、コード追加時にBRA等に書き換える、 みたいなことをどこかで読んだ記憶がある。 でも、実際は6809をハンドアセンブルしようなんて言う強者はそうそう いなくて、1byte skipにしか使われていなかったのではないだろうか。 118 :安田某:2006/10/05(木) 23:27:58 ID:/lpvVcZC BRNは手作業でパッチを当てる時に,Bxxをとりあえず分岐しないように 使うんだろう.(オフセットはいじらないですむように) ところでC級トラ擬で6502連載してるな.C-MOS版じゃない,ノーマル(N-MOS)の 6502欲しいんだがどっかで売っているか? ついでに6521も・・・ ひとつ謎が解決しました。手元にあるSRAMセーブ付きのMMC3移植のSMB2Jが出所不明 だったのですがloopy氏のSMB2Jの2007年5月2日バージョンであることが分かりました。 他のハッカーがloopy氏のコードを真似て作ったものと思っていたのですが、loopy氏が 作ったものそのものです。 手元に用意できたloopy氏のものは、 2007年5月2日版と2014年12月11日版と2015年6月19日版があります。 2007年5月2日版は★表示機能はの為のコード再配置が行われている。 緑のジャンプ台は未修正。赤パックンフラワーとエンディングのルイージテキストは 正常表示。 2014年12月11日版は大幅に大改修。赤パックンフラワーと緑のジャンプ台関連の コードも再配置された。しかしエンディングのルイージテキストの修正を忘れています。 2015年6月19日版はルーイジテキストの部分を再配置して修正。 の模様 ipsファイルは同じ>>759 と同じ物で余計に入ってたnesファイル消しただけって事ね 個人的なメモ ANNSMBを$6000-$7FFFがROMでもエンディング正常作動するように改造したい。 あとはPCエンジン版SMBは出来は良いががPALのNESベースでスピードが速いので NTSCのNESのように作動するようになんとかしたい Super Mario Bros. 1 (NES) - Paper Mario Graphics. ?? https://youtu.be/d7Kni_yQiP4 かきかえて かいぞうまりお あのむずい ですね (ら−めす レベル10) 書き換えて 改造マリオ あの…… ムズいですね >>580 ,636,657 $6370〜$6372は 書き込み時のアドレス指定は$6370+Yレジスタ、 読み込み時のアドレス指定は$6B63+Yレジスタ という感じかな? >>694 ,778 試しにマッパー40でやってみたけどうまくいかなかった。 更に解析が必要なのと、すでにパッチ当てまくって訳の分からんやつで試したってのもあるけど。 Super Mario Bros. Special - 35th Anniversary Edition (2021) / Complete Playthrough / SMB ROM Hack https://youtu.be/WtcMCccN0zQ >>780 これは、スーパーマリオスペシャルものでは、決定版といえるハック 自分が持ってるのロムはゲームは1のままで絵が3風になってたやつだったw これはコースも違うのか 元はハドソンソフトの移植版みたいだけど あとGB版のスパマリランドDX+ドクマリDXも探して入れといたw カラー化してたんでな >>783 これはゲームとしての難易度もヤベェやつだ 頭がそこらのブロックに引っかかりまくるw チビマリオ状態でスーパーマリオと同じ判定サイズ(左右端は判定がない)だからクリアは保証されてる。 ノーワープで全エリア踏破はできた。 何でもなかった場所がハマりトラップとなり別ルートを余儀なくされるなど新たなゲーム性も提供している。 スーパーマリオ状態を維持するにはしゃがみジャンプやしゃがみ滑り込みを当然のように使うことになる。 数多のマリオハックと互換性があるためそれらも新たに楽しめるね。 前にマリオ2のバイナリ改造で A〜D面行きのクリア回数いじれるってのあったけど これオールナイトニッポンスーパーマリオブラザーズでもできるかな? SMB2Jで$6000-$8000をROMで構成する場合、FDSのコードをそのまま持ってきた場合、 ルイージ(LUIGI)がうまく機能しない。しかし$6000-$8000をバンク切り替えを使えば うまくいくのではないか... >>290 エンディングのテキストも同様にバンク切り替えで行けそうやな... >>290 $6000-$8000をROMでかつバンク切り替えしない場合だと MARIO、LUIGIの表示部分は比較的修正し易いと思うが、 ジャンプ力と滑りの部分が面倒臭い。FDSの場合はマリオ・ルイージの動きの部分ルーチンの そばに係数のテーブルがあるけど、ルイージの場合はその係数を書き換えている。 エレガントじゃない実装としてはマリオ用とルイージ用のルーチンを2つ用意して、 例えばルイージの時は$E000〜に飛ばしてやるという方法も考えられるがあまりエレガントじゃないな... 欧州(PAL)版スーパーマリオブラザーズは一部のバグ修正と一部の敵の動きの簡略化が行われえて いるらしいが、これはバグ修正の為に一部の敵の動きの簡略化して空き容量を確保したのかな? あとVS.スーパーマリオブラザーズは明らかにステージデータと音楽データが増加しているけど、 PRG-ROMは32KBで通常のスーパーマリオブラザーズと同じ。ということは何らかのコードの簡略化または最適化が 行われているのかな?まあCHR-ROMは16KBで通常のスーパーマリオブラザーズ倍あるから こっちにコード置く方法も考えられるが。この辺の詳細があまり詳しく解析した情報があまりないので謎 >>393 ROM覗いてみるとCHR-ROMの最初の8Kが通常のタイルで、後ろの8Kがタイルじゃないもので、 試しに後ろの8Kを除去したらタイトルがバグって、ステージもバグったので、後ろの8Kに コードが入っているのは確定 >>774 なんか出来そうな気がしたのでやってみたら、2時間でパッチが完成した。 IPSファイル https://www.a%78fc.net/u/4066523.zip このパッチは64KBのPCエンジン版Super Mario Bros.用です。 NTSC版をPCエンジンに移植した人は既にいるようだが、肝心のパッチとかがぐぐっても出てこないんだよな Super Mario Bros Image Conversion NTSC Version NINTENDO NES TO PC ENGINE CONVERTION HACK TAYLOR EVE https://www.youtube.com/watch?v=aScgDA8wTaI SUPER MARIO BROS NES TO PC ENGINE CONVERSION WIP THANKS TO Taylor's Everything Channel https://www.youtube.com/watch?v=ZZcwsvwmeyM >>786 何でもない夜の事 二度とは戻れない夜~ >>796 の別のエミュレータで動かした版 PCエンジン版スーパーマリオブラザーズが正しい速度で動作するようにしてみた(その2) https://www.nicovideo.jp/watch/sm42365989 >>793 欧州(PAL)版スーパーマリオブラザーズは甲羅で無限1UPできないらしいぞ。 >>662 この部分はフリーズとはあまり関係ないようだ。 アドレス$6370-$6371は城クリア時のMC(ピノキオ)のパレット。 $6371は常に0。0以外にするとグラフィックの書き換えがバグる。 >>680 マッパー142の奴も8-4やD-4クリア時にBGMがバグったりフリーズするぞ。(但し$6000-$7FFFが 常に書き込み可能なエミュレーターの場合は上手く動作してしまいます。) SMB2(J)とANN-SMBは $6000-$7FFFがROMの場合、 エンディング時に音楽がおかしくなって、大抵フリーズします。とうのが結論。 次の箇所にサウンドサブルーチンのアドレスを指定している箇所ががあります。 SMB2(J) 611C: 20 A0 D2 ;JSR $D2E5 ANN-SMB 611F : 20 E5 D2 ;JSR $D2E5 エンディング時は直接そこのアドレスを書き換える箇所があります。 サウンドエンジンはプログラムメインループに組み込まれていますから、 不正な値やアドレスが入ってしまうとフリーズするのは無理もありません。 ミスった SMB2(J)とANN-SMBは $6000-$7FFFがROMの場合、 エンディング時に音楽がおかしくなって、大抵フリーズします。とうのが結論。 次の箇所にサウンドルーチン(サウンドエンジン)のアドレスを指定している箇所ががあります。 SMB2(J) 611C: 20 A0 D2 ;JSR $D2A0 ANN-SMB 611F : 20 E5 D2 ;JSR $D2E5 エンディング時は直接そこのアドレスを書き換える箇所があります。 サウンドルーチン(サウンドエンジン)はプログラムメインループに組み込まれていますから、 不正な値やアドレスが入ってしまうとフリーズするのは無理もありません。 書き換えてる部分は(SM2DATA3またはNSMDATA3) SMB2(J) C623: A9 CC ;LDA #$CC C625: 8D 1E 61 ;STA $611E C628: A9 5F ;LDA ##$5F C62A: 8D 1D 61 ;STA $611D C76A: A9 D2 ;LDA #$D2 C76C: 8D 1E 61 ;STA $611E C76F: A9 A0 ;LDA #$A0 C771: 8D 1D 61 ;STA $611D ANN-SMB C600: A9 CC ;LDA #$CC C602: 8D 21 61 ;STA $6121 C605: A9 B1 ;LDA #$B1 C607: 8D 20 61 ;STA $6120 C760: A9 D2 ;LDA #$D2 C762: 8D 21 61 ;STA $6121 C765: A9 E5 ;LDA #$E5 C767: 8D 20 61 ;STA $6120 パッチ案としてはサウンドサブルーチンサウンドサブルーチンのアドレスを指定箇所を $E000〜の開き領域に飛ばして、本体内蔵RAMに一つ変数つくって分岐させるって考えられるが、 命令サイクルが変わって動作や音楽にどのような影響があるかは未知数。 ANN-SMBは城クリア時のMC(ピノキオ)のカラーパレットもパッチしないと... >>809 これ結構うまくいかないぞ。 サブルーチン入れ子、フラグ破壊、レジスタ破壊、スタック破壊。メインループだから超高難易度。 もとのFDS Convertionに採用されていないのはこのためか... 一から書き直すつもりで作らないと無理っぽい。匙投げました。 >>706 訂正 chr 04 05 06 07 詳細はRAM $07f7に連動 04 (ワールド1〜4; 0) 05 (ワールド5〜8; 1) 06 (エンディング、ワールド9; 2) 07 (ワールドA〜D; 3) CHRを8KB全部書き換えているようです。 >>396 バグ発見してしまったorz 早速修正版です。 ANNSMB_MPR195_v09c https://www.a%78fc.net/u/4067016.zip 変更点 v0.9→v0.9a ワールドセレクト版じゃない方に盆ミスが判明。それを修正。一応動いていたが... v0.9a→v0.9c ワールドセレクト版で8-4をクリアするとタイトル画面に戻ったときに画面が点滅して操作不能になる。 どうもパッチした箇所が不適切なようでした。ワールドセレクト版じゃないほうにも同じコードが入っていましたが、こちらは タイトル画面に戻っていたので、見落としていた。(但し状況によっては同様のバグが発生する可能性有り。) の修正。 理論上はマッパー142でも動くと思っていたので作業を行っていた所、バグを発見したというヲチ。 いろいろ試してみるものですね... https://i.imgur.com/vEJ1m3C.jpg >>816 マッパー142版ANNSMBはMMC3またはマッパー195版のコードを殆どコピペしただけですんなり動きました。 それならばと、再現性の高いMMC版SMB2Jをマッパー142でもすんあり動くんじゃねと、上記の手順でやって みた所、う動かない... コピペで手抜きではいけないのかも。 こちらは、嵐のコード、赤いパックンフラワー、ワールド9用コードがあるので、 こちらは手抜きコピペではなく、慎重にマッパー142版SMB2Jにパッチを当てる必要があるかも。 >>816 マッパー142版ANNSMBは$6000-$7FFFはROMになっていますがエンディングでフリーズしない 事を確認。但しエンディングの音楽はバグっています。エンディングの音楽がちゃんと鳴るように $6000-$7FFFをバンク切り替えするバージョンも作って見ましたが、こちらは完璧な動作です。 >>819 SMB2Jが動かなかったのは手抜きし過ぎたのが駄目だった。ANNSMBの方は丁寧にパッチしてあったわ。 仕切りなおしで、SMB2J Keiser(マッパー142)版に赤パックンと緑ジャンプ台のコードを移植したら 問題なく動作しました。 嵌まった箇所としては ● Keiser(マッパー142)版とMMC3版はタイトル画面でスタートボタンを押したときと、ゲームオーバーに なった時の処理がそれぞれ異なるパッチが当てられていた。しかも$E000-FFFFにパッチコードを 置いているが同じアドレスを使っていてややこしい。(keiser版は残機が減らないモードがついている?) 要調査。 ● 赤パックンと緑ジャンプ台も空き容量の関係で$E000-FFFFにパッチコードを置いていますが、 赤パックンと緑ジャンプ台のパッチコードが全然違う場所に配置されていた。そのためにメンテナンス性が 悪化していた。どうしてこんなことに... 備考 E0C0: C0 1B CPY #$1B E0C2: B0 06 BCS $E0CA E0C4: C0 18 CPY #$18 E0C6: 90 02 BCC $E0CA E0C8: A5 52 LDA $52 = #$02 E0CA: 60 RTS FBD0: B5 1E LDA $1E,X @ $0025 = #$00 FBD2: 4C 00 A0 JMP $A000 関連するコードだから隣接して配置すべき。 >>819 メモ程度に FDS 701B: CE 5A 07 DEC $075A 702B: AD 5F 07 LDA $075F 7FF9: F0 11 BEQ $800C Kaiser(マッパー142)版 701B: 20 00 FC JSR $FC00 702B: 4C A0 F8 JMP $F8A0 7FF9: 4C 00 FC JMP $FC00 MMC3版 701B: 20 00 FC JSR $FC00 702B: 4C A0 F8 JMP $F8A0 7FF9: F0 11 BEQ $800C FDS 701B: CE 5A 07 DEC $075A 7020: A9 00 LDA #$00 7022: 8D 72 07 STA $0772 7025: A9 03 LDA #$03 7027: 8D 70 07 STA $0770 702A: 60 RTS 702B: AD 5F 07 LDA $075F Kaiser(マッパー142)版 701B: 20 00 FC JSR $FC00 701E: 10 0B BPL $702B 7020: A9 00 LDA #$00 7022: 8D 72 07 STA $0772 = #$04 7025: A9 03 LDA #$03 7027: 8D 70 07 STA $0770 = #$00 702A: 60 RTS 702B: 4C A0 F8 JMP $F8A0 MMC3版 701B: 20 00 FC JSR $FC00 701E: 10 0B BPL $702B 7020: A9 00 LDA #$00 7022: 8D 72 07 STA $0772 = #$04 7025: A9 03 LDA #$03 7027: 8D 70 07 STA $0770 = #$00 702A: 60 RTS 702B: 4C A0 F8 JMP $F8A0 続き Kaiser(マッパー142)版とMMC3版 共通 F8A0: AD FB 07 LDA $07FB = #$00 F8A3: C9 00 CMP #$00 F8A5: D0 06 BNE $F8AD F8A7: AD 5F 07 LDA $075F = #$00 F8AA: 4C 2E 70 JMP $702E F8AD: AD 5F 07 LDA $075F = #$00 F8B0: 0A ASL F8B1: AA TAX F8B2: AD 5C 07 LDA $075C = #$00 F8B5: 29 02 AND #$02 F8B7: F0 01 BEQ $F8BA F8B9: E8 INX F8BA: BC C0 F8 LDY $F8C0,X @ $F8CD = #$EF F8BD: 4C 3B 70 JMP $703B Kaiser(マッパー142)版 FC00: AD E7 01 LDA $01E7 = #$FF FC03: C9 5A CMP #$5A FC05: F0 03 BEQ $FC0A FC07: CE 5A 07 DEC $075A = #$02 FC0A: 60 RTS MMC3版 FC00: F0 0B BEQ $FC0D FC02: AD 04 07 LDA $0704 = #$00 FC05: F0 03 BEQ $FC0A FC07: 4C 00 80 JMP $8000 FC0A: 4C 88 80 JMP $8088 FC0D: 4C 0C 80 JMP $800C >>822 コード長いから最小限だけ貼ろうとしたら余分に貼ってしまった。 ついでなので メモ程度に FDS 7FF7: A5 1D LDA $1D 7FF9: F0 11 BEQ $800C 7FFB: AD 04 07 LDA $0704 7FFE: F0 F4 BEQ $7FF4 Kaiser(マッパー142)版 7FF7: A5 1D LDA $1D = #$00 7FF9: F0 11 BEQ $800C 7FFB: AD 04 07 LDA $0704 = #$00 7FFE: F0 F4 BEQ $7FF4 MMC3版 7FF7: A5 1D LDA $1D = #$00 7FF9: 4C 00 FC JMP $FC00 7FFC: EA NOP 7FFD: EA NOP 7FFE: F0 F4 BEQ $7FF4 >>822-825 アドレス$FC00-FC0F及び $701B、$702B、$7FF9のパッチすれば、相互変換できます。(MMC3版のコードをマッパー142に 導入して動作確認。) MMC3版のコードの方が洗練されている気がするが、Kaiserの方が$FE00-FFFFのアドレスパッチが 多少なく済むかな... でなんでこのようなパッチが当てられているかというと、ルイージのジャンプ力と滑りの為に導入されていると 思われる。 >>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は残りのバンクに昇順に配置という感じか 女装深夜徘徊してくるわ、いつものとこ(ダークウェブ)で配信するから良かったら見にきてくれ! >>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 仕様上、変な配置になっているようだ Celeste Mario's Zap & Dash! - Hack of Super Mario Bros. [NES] https://youtu.be/dTT8Af6t4os >>832 これは凄いな マッパー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のバンクが変更可能です。 マッパー40版の作成は凍結していたが、海外でこんなスレ見つけた。 Super Mario Bros 2j NES Restoration https://www.romhacking.net/forum/index.php?topic=31652.0 理論上、マッパー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セーブ付きのやつで、途中開始ページ対処したのあるけど、 コード変更されすぎていて変更部追えない... 海外のスレッド徹底的に調べてみる?古いサイトとか見つけにくかったりするからな... Anna's Fantasy Crusade - Hack of Super Mario Bros. [NES] https://youtu.be/GjEIdtzC0NY >>826 >MMC3版のコードをマッパー142に導入して動作確認 逆も試してみました。全く問題ないようです >>860 途中開始ページは英語でどう表現するのか? 逆汗のコメントでは HalfwayPageNybblesとかHalfwayPageのようだ >>852 途中開始ページ問題修正版。 kaiser版コードを使用することにしました。 https://www.%61x%66c.net/%75/ 4067697 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ってやつが結構おもしろかった 3136626974e381a7e4bc9ae8a9b1e38197e381abe69da5e3819fe38288 Astral World - Hack of Super Mario Bros. [NES] https://youtu.be/1nIkDdCiS-8 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる