Работа для переключения GBA в режим GBC по программному обеспечению!
Исходный код можно найти здесь:
https://github.com/antoniond/gba-switch-to-gbc
Видео, которое демонстрирует код здесь:
https://www.youtube.com/watch?v=PCIQQPOKBGI
Я раздал BIOS GBA и искал инструкцию, которая DISPCNT бит 15 (по адресу 0x00001958 ). Если обнаруживается тележка GBC (невозможно в реальном оборудовании), вызывается подпрограмма. Большая часть этого - просто затухание экрана, но есть некоторая информация о конфигурации регистров, необходимой для переключения в режим GBC.
Это может даже изменить некоторые другие регистры, чтобы изменить экран GBC! Это может применять аффинную преобразование или применить моховой эффект ... в коде есть некоторые вещи, которые нужно проверить.
Обратите внимание, что режим «экранирования экрана», который вы включаете, нажав L, кажется, обходит все регистры преобразования, но такие эффекты, как Mosaic и Greenswap, все еще применяются в режиме растяжения.
Обратите внимание, что, как только в GBA вставлен картридж GBC, EWRAM не может быть использован. Это означает, что функция, которая переключается на режим GBC (и любая функция, которая используется для ожидания перед переключением), должна быть размещена в IWRAM, а также любую переменную, используемую функциями.
Это должно работать в GBA, GBA SP, GB Micro, но не в DS. Если я правильно помню, ARM7 отличается от NDS. Режим GBA в DS - это всего лишь режим совместимости, но в GBA, GBA SP и GB Micro SOC также включает в себя процессор GBC.
Результаты:
Кажется, что GB Micro в режиме GBC ничего не может прочитать из корзины. Я должен сделать больше тестов, но я попробовал картридж, который работает при 3,3 В, и GB Micro не загружает мусор в логотип Nintendo, как настоящий GBC или MGB.
Чтобы построить его, вам нужно Devkitpro.
Мой сайт: www.skylyrac.net/
Благодаря:
Dwedit, для оригинального ПЗУ, который пытался войти в режим GBC:
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 источник питания/сигналы используются для слота картриджа и порта звена, в то время как в режиме 5B 5V используются.
Переключатель дополнительно перетаскивается в 35 до 3V. Когда вставлена 8 -битная корзина, текущее состояние IN35 может быть определена в режиме GBA через порт 4000204H (waitCNT), если переключатель нажимается, то режим CGB может быть активирован через порт 4000000H (dispcnt.3), этот бит может быть установлен только по opcodes в области BIOS (EG. По сравнению CPPUTET.
В режиме 8 -бит шина картриджа работает так же, как для GBA SRAM, однако 8 -битный /CS -сигнал ожидается на выводе 5, в то время как GBA SRAM /CS2 при контакте 30 интерпретируется как сигнал /сброс 8 -битным чипом MBC (если есть). На практике это, по-видимому, приводит к получению 00H в качестве данных при попытке прочитать 8-битные картриджи изнутри режима GBA.