À propos du projet
PocketHLE est un émulateur de haut niveau (HLE) expérimental pour les jeux Pocket PC 2002/2003 et Windows Mobile 5/6, ciblant les exécutables natifs ARM Windows CE empaquetés dans des archives .CAB. Plutôt que d'émuler un appareil Windows CE complet, il charge l'exécutable du jeu original, exécute son code ARM via un backend CPU et fournit des implémentations hôtes clean-room des API Windows CE attendues par le jeu. Il s'inspire de touchHLE et EKA2L1, avec un flux de travail lanceur/bibliothèque influencé par j2me-loader.
Les capacités décrites dans le README incluent : l'import et la décompression d'archives .CAB ; la restauration des noms de fichiers longs et des chemins d'installation depuis _setup.xml ou l'en-tête d'installation binaire MSCE ; la sélection de l'exécutable de jeu prévu ; le chargement d'images PE natives ARM et MIPS et l'inspection des imports ; l'exécution de code ARM avec le backend Unicorn Engine ; l'interception des appels aux DLL Windows CE importées via des thunks HLE ; la résolution ordinal-vers-nom pour coredll.dll et aygshell.dll ; l'émulation des chemins essentiels de fenêtrage, GDI, GAPI, registre, système de fichiers, timing, entrée et audio ; le rendu des framebuffers logiciels dans le frontend desktop et le frontend Android SurfaceView/OpenGL ; une bibliothèque de jeux partagée avec des paramètres par jeu sur desktop et Android ; et des builds Linux/Windows/Android via GitHub Actions.
Le projet indique que sa preuve reproductible actuelle couvre Asphalt 4 en WVGA avec audio PCM capturé et le démarrage de l'écran-titre de Call of Duty 2 via la couche OpenGL ES ; d'autres titres (Zuma Deluxe, Bejeweled, Asphalt 2 3D, Crazy Taxi, Diamond Twister, Splinter Cell Conviction) ont des travaux de compatibilité ou des sondes sous proof/, mais le README met en garde contre le fait de les décrire comme entièrement vérifiés. Il note explicitement que PocketHLE n'est pas un émulateur Windows CE complet : certains jeux s'arrêtent pendant l'initialisation CRT, les imports dynamiques, la configuration des threads de travail ou des API non implémentées, et un démarrage réussi ou une première image ne signifie pas qu'un jeu est jouable de bout en bout.
Composants de l'architecture : pocket-cli (CLI/captures), pocket-desktop (lanceur egui), pocket-android (Kotlin + JNI), pocket-core (émulateur/VFS), pocket-cab (installateur CAB), pocket-pe (PE ARM/MIPS), pocket-library (base de données de jeux), pocket-kernel (processus/GDI/répartition HLE), pocket-cpu (stub/Unicorn), pocket-winceapi (coredll/gx/hss). Flux de démarrage : extraction CAB et reconstruction du registre, analyse PE, mappage d'image avec patch IAT vers les thunks HLE, exécution du code invité, répartition des API vers les gestionnaires Rust, et affichage du framebuffer avec transfert des entrées hôtes.
Utilisation : téléchargez une archive de version, importez un .CAB obtenu légalement, et choisissez le jeu dans le lanceur desktop ou Android. Les exemples CLI incluent inspect-cab, run avec --cpu unicorn, --dump-frames-to et --max-frames, plus pe-info ; les entrées .exe et .zip sont prises en charge, et --cpu stub est destiné aux tests de trace uniquement/chargeur. Les instructions de build couvrent Linux (Rust 1.85+, dépendances natives GTK/X11/Wayland, cargo build/test, builds avec la fonctionnalité unicorn), Windows (chaîne d'outils MSVC + CMake) et Android (Android Studio Iguana+, NDK r26+, cargo-ndk, Gradle). La disposition de la bibliothèque utilise library.json, config.json et des répertoires par jeu avec game.json, source.cab et fichiers extraits ; l'emplacement par défaut est ~/.local/share/PocketHLE/library ou l'équivalent de la plateforme.
Les éléments de la feuille de route incluent l'achèvement des chemins de démarrage CRT et ARM hérités, l'extension de la compatibilité des imports dynamiques et des threads/runtime, l'amélioration de la couverture des ressources/GDI/dialogues, une cartographie plus large des manettes/claviers/tactile, le mixage audio, davantage de captures de compatibilité reproductibles, et l'UX et les diagnostics desktop/Android. Le README inclut une mention légale indiquant qu'aucune DLL système Microsoft, firmware ou ressource de jeu sous copyright n'est distribuée, et que la couche API est une réimplémentation clean-room ; les utilisateurs sont responsables de leurs propres copies de jeux. La licence est double Apache-2.0 OR MIT. Les contributions, rapports de compatibilité et traces sont bienvenus via le Discord du projet.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.