소프트웨어로 GBA를 GBC 모드로 전환하는 일상!
소스 코드는 여기에서 찾을 수 있습니다.
https://github.com/antoniond/gba-switch-t-gbc
코드를 보여주는 비디오는 다음과 같습니다.
https://www.youtube.com/watch?v=pciqqpokbgi
나는 GBA BIOS를 분리하고 DISPCNT 비트 15 (주소 0x00001958 )를 확인하는 지침을 찾았습니다. GBC 카트가 감지되면 (실제 하드웨어에서 불가능) 서브 루틴이 호출됩니다. 그것의 대부분은 단지 화면 페이드에 불과하지만 GBC 모드로 전환하는 데 필요한 레지스터 구성에 대한 정보가 있습니다.
GBC 화면을 변경하기 위해 다른 레지스터를 수정할 수도 있습니다! 아핀 변환을 적용하거나 이끼 사이 효과를 적용 할 수 있습니다 ... 코드에 테스트해야 할 사항이 있습니다.
L을 누르면 사용하는 "스트레치 스크린"모드는 모든 변환 레지스터를 우회하는 것처럼 보이지만 Mosaic 및 Greenswap과 같은 효과는 여전히 스트레치 모드에 적용됩니다.
GBA 카트리지가 GBA에 삽입 되 자마자 EWRAM을 사용할 수 없습니다. 이는 GBC 모드로 전환하는 기능 (및 스위치 전에 대기하는 데 사용되는 기능)이 IWRRAM에 배치 해야하는 기능과 함수에 의해 사용되는 변수를 의미합니다.
GBA, GBA SP, GB Micro에서는 작동하지만 DS에서는 작동하지 않습니다. 내가 올바르게 기억한다면 ARM7은 NDS에서 다릅니다. DS의 GBA 모드는 호환성 모드이지만 GBA, GBA SP 및 GB Micro에서 SOC에는 GBC CPU도 포함됩니다.
결과는 다음과 같습니다.
GBC 모드의 GB 마이크로는 카트에서 아무것도 읽을 수없는 것 같습니다. 더 많은 테스트를해야하지만 3.3V에서 실행되는 카트리지를 시도했으며 GB 마이크로는 실제 GBC 또는 MGB와 같은 Nintendo 로고에 쓰레기를로드하지 않습니다.
그것을 만들려면 devkitpro가 필요합니다.
내 웹 사이트 : www.skylyrac.net/
감사합니다 :
GBC 모드에 들어가려고 시도한 원래 ROM의 경우 Dwedit :
https://www.dwedit.org/dwedit_board/viewtopic.php?id=339
코드가 실제로 작동하려면 코드가 iwram에 있어야한다는 것을 발견하기 위해 Extrems.
여기에서 가져온 : https://problemkaputt.de/gbatek.htm#auxgbagamepakbus
8bit-gamepak-switch (GBA, GBA SP 만 해당) (DS 아님)
작은 스위치는 카트리지 슬롯 내부에 위치하고 8 비트 카트리지가 삽입 될 때 스위치가 아래로 밀려 나면 GBA 카트리지가 삽입 될 때 (또는 카트리지가 삽입되지 않은 경우) 방출됩니다.
스위치는 VDD3 또는 VDD5가 VDD35에서 출력인지 기계적으로 제어합니다. 즉. GBA 모드에서는 3V 전원 공급 장치/신호가 카트리지 슬롯 및 링크 포트에 사용되며 8 비트 모드에서는 5V가 사용됩니다.
스위치는 8 비트 카트가 삽입 될 때 35에서 3V로 추가로 드래그하고, 현재 IN35의 상태는 포트 4000204H (WaitCNT)를 통해 GBA 모드에서 결정될 수 있고, 스위치가 푸시되면 CGB 모드를 포트 4000000H (Dispcnt.3)를 통해 활성화 할 수 있습니다 (이 비트는 BIOS 영역에서만 Opcodes를 통해서만 설정할 수 있습니다.
8 비트 모드에서 카트리지 버스는 GBA SRAM과 매우 유사하지만 핀 5에서는 8 비트 /CS 신호가 예상되는 반면, 핀 30의 GBA SRAM /CS2는 8 비트 MBC 칩 (있는 경우)에 의해 /재설정 신호로 해석됩니다. 실제로, 이로 인해 GBA 모드 내부에서 8 비트 카트리지를 읽으려고 할 때 00H가 데이터로 수신되는 것으로 보입니다.