ソフトウェアによってGBAをGBCモードに切り替えるためのルーチン!
ソースコードはここにあります:
https://github.com/antoniond/gba-switch-to-gbc
コードを示すビデオはこちらです。
https://www.youtube.com/watch?v=pciqpokbgi
私はGBA BIOSを解体し、 DISPCNTビット15をチェックする指示を探しました(アドレス0x00001958 )。 GBCカートが検出された場合(実際のハードウェアでは不可能)、サブルーチンが呼び出されます。そのほとんどは単なる画面がフェードインしていますが、GBCモードに切り替えるために必要なレジスタ構成に関する情報がいくつかあります。
他のいくつかのレジスタを変更してGBC画面を変更することもできます!アフィン変換を適用したり、モッケの効果を適用したりすることができます...コードでテストするものがいくつかあります。
Lを押すことで有効にする「ストレッチスクリーン」モードは、すべての変換レジスタをバイパスするように見えるが、MosaicやGreenswapなどの効果はまだストレッチモードで適用されていることに注意してください。
GBCカートリッジがGBAに挿入されるとすぐに、EWRAMを使用できないことに注意してください。これは、GBCモードに切り替える関数(およびスイッチングの前に待機するために使用される関数)をiWRAMに配置する必要があることと、関数で使用される変数を意味します。
GBA、GBA SP、GB Microで動作するはずですが、DSでは機能しません。私が正しく覚えていれば、ARM7はNDSで異なります。 DSのGBAモードは単なる互換性モードですが、GBA、GBA SPおよびGB Microでは、SOCにはGBC CPUも含まれます。
結果は次のとおりです。
GBCモードのGBマイクロは、カートから何も読み取れないようです。もっとテストする必要がありますが、3.3Vで動作するカートリッジを試してみましたが、GBマイクロは実際のGBCやMGBのように任天堂のロゴにゴミをロードしません。
それを構築するには、devkitproが必要です。
私のウェブサイト:www.skylyrac.net/
ありがとう:
DWEDIT、GBCモードに入ろうとした元のROMの場合:
https://www.dwedit.org/dwedit_board/viewtopic.php?id=339
極端な、コードが実際に機能するためにiWRAMにある必要があることを発見するため。
ここから撮影:https://problemkaputt.de/gbatek.htm#auxgbagamepakbus
8bit-gamepak-switch(gba、gba spのみ)(dsではない)
カートリッジスロットの内側に小さなスイッチがあり、8ビットカートリッジが挿入されるとスイッチが押し下げられ、GBAカートリッジが挿入されると解放されます(またはカートリッジが挿入されていない場合)。
スイッチは、VDD3またはVDD5がVDD35で出力されているかどうかを機械的に制御します。すなわち。 GBAモードでは、3V電源/信号がカートリッジスロットとリンクポートに使用され、8ビットモード5Vが使用されます。
スイッチは、8ビットカートが挿入されるとさらに35にドラッグします。IN35の電流状態は、ポート4000204H(waitcnt)を介してGBAモードで決定できます。スイッチがプッシュされると、CGBモードはポート4000000H(discnt.3)を介してアクティブ化できます。
8ビットモードでは、カートリッジバスはGBA SRAMと同じように機能しますが、ピン5では8ビット /CS信号が予想されますが、ピン30のGBA SRAM /CS2は8ビットMBCチップによって /リセット信号として解釈されます(ある場合)。実際には、これはGBAモードの内部から8ビットカートリッジを読み取ろうとすると、00Hがデータとして受信されるようになるようです。