Peanut-GB는 이 게임보이 에뮬레이터를 기반으로 하는 단일 파일 헤더 게임보이 에뮬레이터 라이브러리입니다. 목표는 C99 컴파일러가 있는 모든 플랫폼에 사용할 수 있는 고속의 휴대용 DMG(Game Boy) 에뮬레이터 라이브러리를 만드는 것입니다.
이 에뮬레이터는 매우 빠릅니다 . Raspberry Pi Pico에서 최고 속도로 실행될 수 있을 만큼 말이죠! Peanut-GB 벤치마크는 BENCHMARK.md를 확인하세요.
현재는 오리지널 게임보이(DMG)만 지원되지만, 게임보이 컬러를 지원하기 위한 예비 작업이 완료되었습니다(#50 참조).
이 에뮬레이터는 진행 중인 작업이며 정확하지 않을 수 있습니다(Blargg의 CPU 명령 및 명령 타이밍 테스트를 통과하더라도). 따라서 일부 게임은 제대로 실행되지 않거나 전혀 실행되지 않을 수 있습니다. 정확성이 중요한 경우 대체 에뮬레이터를 찾으십시오.
대표적인 예제 구현은 땅콩_sdl.c에 제공되어 있으며 SDL2를 사용하여 화면을 그리고 입력을 받습니다. cmake
실행하거나 ./examples/sdl2/ 폴더에서 make
실행하여 컴파일하세요.
ROM 파일을 끌어다 놓을 수 있는 놓기 영역 창을 생성하는 peanut-sdl
실행합니다. 또는 peanut-sdl game.gb
사용하여 터미널에서 실행하면 게임에 대한 저장 파일 game.sav
가 없으면 자동으로 생성됩니다. 또는 peanut-sdl game.gb save.sav
실행하여 저장 파일을 지정하세요.
참고: 여기에 표시된 애니메이션 GIF는 50fps로 제한되어 있지만 에뮬레이션은 기본 ~60fps에서 실행되었습니다. 이는 인기 있는 GIF 디코더가 최대 FPS를 50으로 제한하기 때문입니다.
행동 | 건반 | 조이패드 |
---|---|---|
에이 | 지 | 에이 |
비 | 엑스 | 비 |
시작 | 반품 | 시작 |
선택하다 | 역행 키이 | 뒤쪽에 |
D 패드 | 화살표 키 | DPAD |
A를 반복하세요 | 에이 | |
B 반복 | 에스 | |
정상 속도 | 1 | |
터보 x2 (홀드) | 공간 | |
터보 X2 (토글) | 2 | |
터보 X3 (토글) | 3 | |
터보 X4 (토글) | 4 | |
다시 놓기 | 아르 자형 | |
팔레트 변경 | 피 | |
팔레트 재설정 | 쉬프트 + p | |
전체 화면 | F11 / f | |
프레임스킵(토글) | 영형 | |
인터레이스(토글) | 나 | |
BMP 덤프(토글) | 비 |
프레임스킵 및 인터레이스 모드는 모두 기본적으로 꺼져 있습니다. Frameskip은 60FPS와 30FPS 사이를 전환합니다.
'b'를 누르면 각 프레임이 현재 폴더에 24비트 비트맵 파일로 덤프됩니다. 자세한 내용은 /screencaps/README.md를 참조하세요.
특별한 순서 없이 전체 목록이 아닌 다음 프로젝트에서는 Peanut-GB를 사용합니다.
함수 프로토타입에 대한 문서는 땅콩_gb.h 하단에서 찾을 수 있습니다.
프런트엔드 구현에서는 라이브러리에 다양한 기능을 제공해야 합니다. 이러한 기능은 gb_init를 호출할 때 설정됩니다.
추가 기능을 위해 다음과 같은 선택적 기능을 정의할 수 있습니다.
이 기능은 LCD 드로잉에 필요합니다. gb_init_lcd를 사용하여 이 기능을 설정하고 땅콩_gb.h를 포함하기 전에 ENABLE_LCD를 1로 정의하여 Peanut-GB 내에서 LCD 기능을 활성화합니다. ENABLE_LCD는 이전에 정의되지 않은 경우 기본적으로 1로 설정됩니다. gb_init_lcd가 호출되지 않거나 lcd_draw_line이 NULL로 설정되면 LCD 그리기가 비활성화됩니다.
lcd_draw_line으로 전송된 픽셀 데이터는 음영 및 레이어 데이터와 함께 제공됩니다. 처음 두 개의 최하위 비트는 음영 데이터(검은색, 어두운 색, 밝은 색, 흰색)입니다. 비트 4와 5는 레이어 데이터(OBJ0, OBJ1, BG)로, Game Boy Color가 기존 Game Boy 게임에 추가하는 것과 같은 방식으로 게임에 더 많은 색상을 추가하는 데 사용할 수 있습니다.
이러한 기능은 오디오 에뮬레이션 및 출력에 필요합니다. Peanut-GB에는 오디오 에뮬레이션이 포함되어 있지 않으므로 외부 라이브러리를 사용해야 합니다. 땅콩_gb.h를 포함하기 전에 ENABLE_SOUND를 1로 정의하여 이러한 기능을 정의하고 오디오 출력을 활성화해야 합니다.
이러한 기능은 직렬 통신에 필요합니다. gb_init_serial을 사용하여 이러한 기능을 설정하십시오. 이러한 기능이 설정되지 않으면 에뮬레이션은 링크 케이블이 연결되지 않은 것처럼 작동합니다.
해당 기능은 Peanut-GB에서 제공합니다.
이 기능은 콘솔의 전원을 껐다가 켜는 것처럼 플레이 중인 게임을 재설정합니다. gb_reset은 CPU 레지스터를 초기화하기 위해 gb_init에 의해 호출됩니다.
이 함수는 플레이 중인 게임의 저장 크기를 반환합니다. 이 함수는 게임에서 저장 데이터를 사용하지 않는 경우 0을 반환합니다.
이 기능은 전체 프레임이 LCD에 렌더링될 때까지 CPU를 실행합니다.
이 함수는 게임 타이틀의 해시를 계산합니다. 이 해시는 게임보이 게임에 색상을 추가하기 위해 게임보이 색상과 동일한 방식으로 계산됩니다.
이 함수는 게임 이름을 반환합니다.
실시간 시계(RTC)의 시간을 설정합니다. 일부 게임에서는 이 RTC 데이터를 사용합니다.
더 이상 사용되지 않음: 사용하지 마세요. RTC는 내부적으로 체크됩니다.
재설정 시 bootrom 이미지를 실행합니다. 이러한 변경 사항을 적용하려면 gb_set_bootrom을 호출한 후 재설정을 수행해야 합니다. 이는 gb_init가 gb_reset을 호출하지만 gb_set_bootrom은 gb_init 다음에 호출해야 하기 때문입니다. 부트롬은 DMG 또는 MGB 부트롬이어야 합니다.
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다.