Rotina para alternar um GBA no modo GBC por software!
O código -fonte pode ser encontrado aqui:
https://github.com/antoniond/gba-switch-to-gbc
Um vídeo que demonstra o código está aqui:
https://www.youtube.com/watch?v=pciqqpokbgi
Desativei o GBA BIOS e procurei a instrução que verifica o Bit DISPCNT 15 (no endereço 0x00001958 ). Se um carrinho GBC for detectado (impossível em hardware real), uma sub -rotina for chamada. A maior parte é apenas um desbotamento de tela, mas há algumas informações sobre a configuração dos registros necessários para alternar para o modo GBC.
Ele pode até modificar outros registros para alterar a tela GBC! Ele pode aplicar uma transformação afim ou aplicar o efeito MOSSAIC ... Há algumas coisas para testar no código.
Observe que o modo de "tela de estiramento" que você habilita pressionando L parece ignorar todos os registros de transformação, mas efeitos como Mosaic e Greenswap ainda são aplicados no modo de alongamento.
Observe que, assim que um cartucho GBC é inserido no GBA, o EWRAM não pode ser usado. Isso significa que a função que muda para o modo GBC (e qualquer função usada para esperar antes da troca) precisa ser colocada no IWRAM, bem como qualquer variável usada pelas funções.
Deve funcionar no GBA, GBA SP, GB Micro, mas não em DS. Se bem me lembro, o ARM7 é diferente no NDS. O modo GBA no DS é apenas um modo de compatibilidade, mas no GBA, GBA SP e GB Micro o SOC inclui a CPU GBC também.
Os resultados são:
Parece que o micro GB no modo GBC não pode ler nada do carrinho. Eu tenho que fazer mais testes, mas experimentei um cartucho que funciona com 3,3V e o GB Micro não carrega lixo no logotipo da Nintendo como o GBC ou MGB real.
Para construí -lo, você precisa de DevkitPro.
Meu site: www.syylyrac.net/
Obrigado a:
Dwedit, para a ROM original que tentou entrar no modo GBC:
https://www.dwedit.org/dwedit_board/viewtopic.php?id=339
Os extremos, para descobrir que o código precisa estar em iwram para realmente funcionar.
Tomado daqui: https://problemkaputt.de/gbatek.htm#auxgbagamepakbus
8bit-gamepak-switch (apenas GBA, GBA SP) (não DS)
Um pequeno interruptor está localizado dentro do slot do cartucho, o interruptor é pressionado quando um cartucho de 8 bits é inserido, ele é liberado quando um cartucho GBA é inserido (ou se nenhum cartucho for inserido).
O interruptor controla mecanicamente se o VDD3 ou o VDD5 são emitidos em VDD35; ou seja. No modo GBA 3V, a fonte de alimentação/sinais são usados para o slot do cartucho e a porta do link, enquanto no modo de 8 bits 5V são usados.
O interruptor também arrasta in35 a 3V quando um carrinho de 8 bits é inserido, o estado atual do IN35 pode ser determinado no modo GBA via porta 4000204h (espera), se o interruptor for pressionado, o modo CGB pode ser ativado através da porta 40000H (DispCnt.3).
No modo de 8 bits, o barramento de cartucho funciona como para GBA SRAM, no entanto, o sinal de 8 bits /CS é esperado no pino 5, enquanto o GBA SRAM /CS2 no pino 30 é interpretado como sinal de redefinição pelo chip de 8 bits MBC (se houver). Na prática, isso parece resultar em 00H ser recebido como dados ao tentar ler os cartuchos de 8 bits de dentro do modo GBA.