Routine pour transformer un GBA en mode GBC par logiciel!
Le code source peut être trouvé ici:
https://github.com/antoniond/gba-switch-to-gbc
Une vidéo qui démontre le code est ici:
https://www.youtube.com/watch?v=pciqqpokbgi
J'ai dissasé le BIOS GBA et j'ai cherché l'instruction qui vérifie le bits DISPCNT 15 (à l'adresse 0x00001958 ). Si un chariot GBC est détecté (impossible dans le matériel réel), un sous-programme est appelé. La majeure partie est juste un décollage d'écran, mais il y a des informations sur la configuration des registres nécessaires pour passer en mode GBC.
Il peut même modifier d'autres registres pour modifier l'écran GBC! Il peut appliquer une transformation affine ou appliquer un effet mossaïque ... il y a certaines choses à tester dans le code.
Notez que le mode "Stretch Screen" que vous activez en appuyant sur L semble contourner tous les registres de transformation, mais des effets comme Mosaic et Greenswap sont toujours appliqués en mode extensible.
Notez que, dès qu'une cartouche GBC est insérée dans le GBA, Ewram ne peut pas être utilisé. Cela signifie que la fonction qui passe en mode GBC (et toute fonction utilisée pour attendre avant la commutation) doit être placée dans iWram, ainsi que toute variable utilisée par les fonctions.
Il devrait fonctionner dans GBA, GBA SP, GB Micro, mais pas dans DS. Si je me souviens bien, l'ARM7 est différent dans NDS. Le mode GBA dans DS n'est qu'un mode de compatibilité, mais dans GBA, GBA SP et GB Micro, le SOC comprend également le CPU GBC.
Les résultats sont:
Il semble que le GB Micro en mode GBC ne puisse rien lire dans le panier. Je dois faire plus de tests, mais j'ai essayé une cartouche qui fonctionne à 3,3 V et le micro GB ne charge pas des ordures dans le logo Nintendo comme le vrai GBC ou le MGB.
Pour le construire, vous avez besoin de Devkitpro.
Mon site Web: www.skylyrac.net/
Grâce à:
Dwedit, pour la ROM originale qui a essayé de saisir le mode GBC:
https://www.dwedit.org/dwedit_board/viewtopic.php?id=339
Extreux, pour découvrir que le code doit être dans iWram pour fonctionner réellement.
Pris d'ici: https://problemkaputt.de/gbatek.htm#auxgbagamepakbus
8 bits-Gamepak-Switch (GBA, GBA SP uniquement) (pas DS)
Un petit interrupteur est situé à l'intérieur de la fente de cartouche, l'interrupteur est poussé vers le bas lorsqu'une cartouche 8 bits est insérée, elle est libérée lorsqu'une cartouche GBA est insérée (ou si aucune cartouche n'est insérée).
Le commutateur contrôle mécaniquement si le VDD3 ou le VDD5 sont sortis à VDD35; c'est-à-dire En mode GBA, l'alimentation / signaux d'alimentation 3V sont utilisées pour la fente de cartouche et le port de liaison, tandis que en mode 8 bits, 5V sont utilisés.
Le commutateur fait également glisser In35 à 3V lorsqu'un chariot à 8 bits est inséré, l'état actuel de IN35 peut être déterminé en mode GBA via le port 4000204H (WaitCNT), si le commutateur est poussé, alors le mode CGB peut être activé via le port 4000000h (Dispcnt.3), ce bit peut être défini uniquement par OPCodes dans la région des BIO (EG. Via CPUSET SWI).
En mode 8 bits, le bus de cartouche fonctionne un peu comme pour GBA SRAM, cependant, le signal 8 bits / cs est attendu à la broche 5, tandis que GBA SRAM / CS2 à la broche 30 est interprété comme le signal / réinitialisation par la puce MBC 8 bits (le cas échéant). En pratique, cela semble entraîner la réception de 00h en tant que données lors de la tentative de cartouches 8 bits de l'intérieur du mode GBA.