프로젝트 소개
PocketHLE는 Pocket PC 2002/2003 및 Windows Mobile 5/6 게임을 위한 실험적인 고수준 에뮬레이터(HLE)로, .CAB 아카이브에 패키징된 네이티브 ARM Windows CE 실행 파일을 대상으로 합니다. 완전한 Windows CE 기기를 에뮬레이션하는 대신, 원본 게임 실행 파일을 로드하고 ARM 코드를 CPU 백엔드를 통해 실행하며, 게임이 기대하는 Windows CE API에 대한 클린룸 호스트 측 구현을 제공합니다. touchHLE와 EKA2L1에서 영감을 받았으며, j2me-loader의 영향을 받은 런처/라이브러리 워크플로를 갖추고 있습니다.
README에 설명된 기능은 다음과 같습니다: .CAB 아카이브 가져오기 및 압축 해제; _setup.xml 또는 바이너리 MSCE 설치 헤더에서 긴 파일 이름과 설치 경로 복원; 의도된 게임 실행 파일 선택; 네이티브 ARM 및 MIPS PE 이미지 로드 및 임포트 검사; Unicorn Engine 백엔드로 ARM 코드 실행; HLE thunk를 통한 임포트된 Windows CE DLL 호출 가로채기; coredll.dll 및 aygshell.dll에 대한 서수-이름 해석; 핵심 윈도잉, GDI, GAPI, 레지스트리, 파일시스템, 타이밍, 입력 및 오디오 경로 에뮬레이션; 데스크톱 프런트엔드 및 Android SurfaceView/OpenGL 프런트엔드에서 소프트웨어 프레임버퍼 렌더링; 데스크톱 및 Android에서 게임별 설정이 있는 공유 게임 라이브러리; GitHub Actions를 통한 Linux/Windows/Android 빌드.
이 프로젝트는 현재 재현 가능한 증명이 캡처된 PCM 오디오와 함께 WVGA에서 Asphalt 4, 그리고 OpenGL ES 레이어를 통한 Call of Duty 2의 타이틀 화면 부팅을 포함한다고 밝히고 있습니다. 다른 타이틀(Zuma Deluxe, Bejeweled, Asphalt 2 3D, Crazy Taxi, Diamond Twister, Splinter Cell Conviction)은 proof/ 아래에 호환성 작업이나 프로브가 있지만, README는 이를 완전히 검증된 것으로 설명하지 말라고 경고합니다. PocketHLE가 완전한 Windows CE 에뮬레이터가 아님을 명시적으로 언급합니다: 일부 게임은 CRT 초기화, 동적 임포트, 워커 스레드 설정 또는 구현되지 않은 API 중에 중단되며, 성공적인 부팅이나 첫 프레임이 게임이 처음부터 끝까지 플레이 가능하다는 것을 의미하지는 않습니다.
아키텍처 구성 요소: pocket-cli (CLI/캡처), pocket-desktop (egui 런처), pocket-android (Kotlin + JNI), pocket-core (에뮬레이터/VFS), pocket-cab (CAB 설치 프로그램), pocket-pe (ARM/MIPS PE), pocket-library (게임 데이터베이스), pocket-kernel (프로세스/GDI/HLE 디스패치), pocket-cpu (스텁/Unicorn), pocket-winceapi (coredll/gx/hss). 시작 흐름: CAB 추출 및 레지스트리 재구성, PE 파싱, HLE thunk로의 IAT 패칭을 통한 이미지 매핑, 게스트 코드 실행, Rust 핸들러로의 API 디스패치, 호스트 입력 전달과 함께 프레임버퍼 표시.
사용법: 릴리스 아카이브를 다운로드하고, 합법적으로 획득한 .CAB를 가져오고, 데스크톱 또는 Android 런처에서 게임을 선택합니다. CLI 예시로는 inspect-cab, --cpu unicorn으로 실행, --dump-frames-to 및 --max-frames, 그리고 pe-info가 있습니다. .exe 및 .zip 입력도 지원되며, --cpu stub은 추적 전용/로더 테스트용입니다. 빌드 지침은 Linux (Rust 1.85+, 네이티브 GTK/X11/Wayland 의존성, cargo build/test, unicorn 기능 빌드), Windows (MSVC 툴체인 + CMake), Android (Android Studio Iguana+, NDK r26+, cargo-ndk, Gradle)를 다룹니다. 라이브러리 레이아웃은 library.json, config.json 및 game.json, source.cab, 추출된 파일이 있는 게임별 디렉터리를 사용합니다. 기본 위치는 ~/.local/share/PocketHLE/library 또는 플랫폼에 상응하는 위치입니다.
로드맵 항목에는 CRT 및 레거시 ARM 시작 경로 완성, 동적 임포트 및 스레드/런타임 호환성 확장, 리소스/GDI/대화상자 커버리지 개선, 더 넓은 게임패드/키보드/터치 매핑, 오디오 믹싱, 더 많은 재현 가능한 호환성 캡처, 데스크톱/Android UX 및 진단이 포함됩니다. README에는 저작권이 있는 Microsoft 시스템 DLL, 펌웨어 또는 게임 자산이 배포되지 않으며, API 레이어는 클린룸 재구현이라는 법적 고지가 포함되어 있습니다. 사용자는 자신의 게임 사본에 대한 책임이 있습니다. 라이선스는 Apache-2.0 OR MIT의 이중 라이선스입니다. 기여, 호환성 보고서 및 추적은 프로젝트의 Discord를 통해 환영합니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.