Routine zum Umschalten eines GBA in den GBC -Modus nach Software!
Der Quellcode finden Sie hier:
https://github.com/antoniond/gba-sschitch-to-gbc
Ein Video, das demonstriert, dass der Code hier ist:
https://www.youtube.com/watch?v=pciqqpokbgi
Ich habe das GBA -BIOS abgebaut und nach der Anweisung gesucht, die DISPCNT Bit 15 überprüft (unter der Adresse 0x00001958 ). Wenn ein GBC -Wagen erkannt wird (in echter Hardware unmöglich), wird ein Unterroutine aufgerufen. Das meiste davon ist nur ein Bildschirm verblasst, aber es gibt einige Informationen über die Register -Konfiguration, die zum Wechsel in den GBC -Modus erforderlich ist.
Es kann sogar einige andere Register ändern, um den GBC -Bildschirm zu ändern! Es kann eine affine Transformation anwenden oder einen mosaischen Effekt anwenden ... Es gibt einige Dinge im Code zu testen.
Beachten Sie, dass der "Stretch Screen" -Modus, den Sie durch Drücken von L ermöglichen, alle Transformationsregister zu umgehen scheint, aber Effekte wie Mosaik und Greenswap werden im Strecke immer noch angewendet.
Beachten Sie, dass EWRAM nicht verwendet werden kann, sobald eine GBC -Patrone in die GBA eingefügt wird. Dies bedeutet, dass die Funktion, die in den GBC -Modus umschaltet (und jede Funktion, die zum Warten vor dem Umschalten verwendet wird), in IWRAM sowie in jeder Variablen, die von den Funktionen verwendet wird, platziert werden muss.
Es sollte in GBA, GBA SP, GB Micro funktionieren, jedoch nicht in DS. Wenn ich mich richtig erinnere, ist die ARM7 in NDs unterschiedlich. Der GBA -Modus in DS ist nur ein Kompatibilitätsmodus, aber in GBA, GBA SP und GB Micro enthält der SOC auch die GBC -CPU.
Die Ergebnisse sind:
Es scheint, dass das GB -Mikro im GBC -Modus nichts aus dem Wagen lesen kann. Ich muss mehr Tests durchführen, aber ich habe eine Patrone ausprobiert, die bei 3,3 V verläuft und das GB -Mikro nicht wie das echte GBC oder MGB Müll in das Nintendo -Logo lädt.
Um es zu bauen, brauchen Sie Devkitpro.
Meine Website: www.skylyrac.net/
Dank:
Dwedit, für das ursprüngliche ROM, das versucht hat, den GBC -Modus einzugeben:
https://www.dwedit.org/dwedit_board/viewtopic.php?id=339
Extrems, um festzustellen, dass der Code in IWRAM sein muss, um tatsächlich zu arbeiten.
Von hier aus genommen: https://problemkaputt.de/gbatek.htm#auxgbagamepakbus
8bit-Gamepak-Schalter (nur GBA, GBA SP) (nicht DS)
Ein kleiner Schalter befindet sich innerhalb des Patronenschlitzes. Der Schalter wird nach unten gedrückt, wenn eine 8 -Bit -Patrone eingefügt wird. Er wird freigegeben, wenn eine GBA -Patrone eingefügt wird (oder wenn keine Patrone eingefügt wird).
Der Schalter steuert mechanisch, ob VDD3 oder VDD5 bei VDD35 ausgegeben werden. dh. Im GBA -Modus werden 3V -Stromversorgung/-signale für den Patronenschlitz und den Link -Port verwendet, während im 8 -Bit -Modus 5V verwendet wird.
Der Schalter zieht zusätzlich in 35 bis 3 V, wenn ein 8 -Bit -Wagen eingefügt wird. Der aktuelle Status von In35 kann im GBA -Modus über Port 4000204H (WaitCNT) bestimmt werden. Wenn der Schalter gedrückt wird, kann der CGB -Modus über Port 4000000H aktiviert werden (dispcnt.3). Diese Bit kann nur durch Opcodes in der Region BISOS (EGS.
Im 8 -Bit -Modus funktioniert der Patronenbus ähnlich wie für GBA SRAM, das 8 -Bit /C -Signal wird jedoch an Pin 5 erwartet, während GBA SRAM /CS2 am Pin 30 vom 8 -Bit -MBC -Chip (falls vorhanden) als /Reset -Signal interpretiert wird. In der Praxis scheint dies dazu zu führen, dass 00H als Daten empfangen wird, wenn versucht wird, 8-Bit-Patronen aus dem GBA-Modus auszulesen.