Rutin untuk mengganti GBA ke mode GBC dengan perangkat lunak!
Kode sumber dapat ditemukan di sini:
https://github.com/antoniond/gba-switch-to-gbc
Video yang menunjukkan kodenya ada di sini:
https://www.youtube.com/watch?v=pciqqpokbgi
Saya membubarkan BIOS GBA dan mencari instruksi yang DISPCNT bit 15 (di alamat 0x00001958 ). Jika gerobak GBC terdeteksi (tidak mungkin dalam perangkat keras nyata), subrutin dipanggil. Sebagian besar hanya layar memudar, tetapi ada beberapa informasi tentang konfigurasi register yang diperlukan untuk beralih ke mode GBC.
Bahkan dapat memodifikasi beberapa register lain untuk mengubah layar GBC! Ini dapat menerapkan transformasi affine, atau menerapkan efek mossaic ... ada beberapa hal untuk diuji dalam kode.
Perhatikan bahwa mode "layar peregangan" yang Anda aktifkan dengan menekan L tampaknya memotong semua register transformasi, tetapi efek seperti mosaic dan greenswap masih diterapkan dalam mode peregangan.
Perhatikan bahwa, segera setelah kartrid GBC dimasukkan ke dalam GBA, EWRAM tidak dapat digunakan. Ini berarti fungsi yang beralih ke mode GBC (dan fungsi apa pun yang digunakan untuk menunggu sebelum beralih) perlu ditempatkan di IWRAM, serta variabel apa pun yang digunakan oleh fungsi.
Ini harus bekerja di GBA, GBA SP, GB Micro, tetapi tidak di DS. Jika saya ingat dengan benar, ARM7 berbeda di NDS. Mode GBA di DS hanyalah mode kompatibilitas, tetapi dalam GBA, GBA SP dan GB Micro SOC termasuk CPU GBC juga.
Hasilnya adalah:
Tampaknya GB Micro dalam mode GBC tidak dapat membaca apa pun dari keranjang. Saya harus melakukan lebih banyak tes, tetapi saya sudah mencoba kartrid yang berjalan di 3.3V dan GB Micro tidak memuat sampah di logo Nintendo seperti GBC atau MGB yang asli.
Untuk membangunnya, Anda membutuhkan Devkitpro.
Situs web saya: www.skylyrac.net/
Berkat:
Dwedit, untuk ROM asli yang mencoba memasuki mode GBC:
https://www.dwedit.org/dwedit_board/viewtopic.php?id=339
Ekstrem, untuk menemukan bahwa kode harus ada di IWRAM untuk benar -benar bekerja.
Diambil dari sini: https://problemkaputt.de/gbatek.htm#auxgbagamepakbus
8bit-gamepak-switch (GBA, GBA SP saja) (bukan DS)
Sakelar kecil terletak di dalam slot kartrid, sakelar didorong ke bawah ketika kartrid 8bit dimasukkan, dilepaskan ketika kartrid GBA dimasukkan (atau jika tidak ada kartrid yang dimasukkan).
Sakelar secara mekanis mengontrol apakah VDD3 atau VDD5 adalah output di VDD35; yaitu. Dalam Mode GBA, catu daya/sinyal daya digunakan untuk slot kartrid dan port link, sedangkan dalam mode 8bit 5V digunakan.
Sakelar juga menyeret IN35 ke 3V ketika gerobak 8bit dimasukkan, keadaan saat ini dari IN35 dapat ditentukan dalam mode GBA melalui port 4000204H (tunggu), jika sakelar didorong, maka mode CGB dapat diaktifkan melalui port 4000000h (dispcnt.3), bit ini dapat ditetapkan hanya oleh Opcodes.
Dalam mode 8bit, bus cartridge berfungsi sangat mirip untuk GBA SRAM, namun, sinyal 8bit /CS diharapkan pada pin 5, sedangkan GBA SRAM /CS2 pada pin 30 ditafsirkan sebagai sinyal /reset dengan chip MBC 8bit (jika ada). Dalam praktiknya, ini tampaknya mengakibatkan 00h diterima sebagai data ketika mencoba membacakan kartrid 8bit dari dalam mode GBA.