Modding du Game & Watch Zelda

Modding du Game & Watch Zelda

Sources

Basé sur les trois tutos et suivants et la doc des différents projets :

Préparation du Raspberry Pi

  • Installer Raspberry Pi OS sur une carte SD
  • Démarrer le Pi avec la carte SD, le laisser faire sa config et redémarrer
  • Faire la configuration de base, se connecter au Wi-Fi, faire les mises à jour
  • Infos de login : rpi / rpi

Sauvegarde du contenu de la mémoire flash

Installation du script et des pré-requis

  • Installer les dépendances suivantes :

    sudo apt install git python3 binutils-arm-none-eabi libhidapi-hidraw0 libftdi1 libftdi1-2 openocd
    
  • Cloner le repo game-and-watch-backup (sous-modules inclus) :

    git clone --recurse-submodules 
    
  • Lancer le sanity check pour vérifier que les pré-requis sont là :

    cd game-and-watch-backup
    ./1_sanity_check.sh rpi zelda
    

Connexion du Game & Watch

  • Débrancher la batterie. Mettre une petite spatule isolée en dessous des deux fils et lever doucement pour que le connecteur se soulève.

  • Eteindre le Pi et raccorder les fils suivants du Pi vers le Game and Watch (voir le schéma des broches du Pi) :

    • GPIO25 <> SWCLK (5e en partant de la flèche)
    • GPIO24 <> SWDIO (2e en partant de la flèche)
    • GND <> GND (3e en partant de la flèche)
  • Checker plusieurs fois (une erreur peut cramer la flash) et redémarrer le Pi.

Backup de la mémoire flash

Basé sur https://github.com/ghidraninja/game-and-watch-backup

Au moindre problème, lire le readme présent dans le même répertoire que les scripts, il contient toutes les informations pour débricker

  • Brancher le G&W en USB-C, le démarrer et le mettre sur l'écran TIME

  • Backupper la flash SPI (n'efface rien, dure plusieurs minutes)

    cd game-and-watch-backup
    ./2_backup_flash.sh rpi zelda
    
  • Backupper la mémoire flash interne ( /!\ efface la mémoire SPI, le G&W ne fonctionnera plus avant le 5e script /!)

    ./3_backup_internal_flash.sh rpi zelda
    
  • Déverouiller le G&W (supprime la protection en écriture, et efface la mémoire flash de la puce STM32)

    ./4_unlock_device.sh rpi zelda
    
  • Restaurer le firmware d'origine

    ./5_restore.sh rpi zelda
    
  • Le Game & Watch est maintenant déverouillé, et le firmware d'origine a été réinstallé.

  • Sauvegarder les backups des mémoires flash en lieu sûr

Installation de retro go

Basé sur https://github.com/kbeckmann/game-and-watch-retro-go

  • Installer le toolchain arm-gcc-none-eabi en version 10 ou plus (elle n'est pas dispo dans le repo Raspberry Pi OS)

    wget https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases/download/v12.3.1-1.2/xpack-arm-none-eabi-gcc-12.3.1-1.2-linux-arm.tar.gz
    mkdir -p ~/opt/
    cd ~/opt/
    tar xvf ~/xpack-arm-none-eabi-gcc-12.3.1-1.2-linux-arm.tar.gz
    export PATH=$PATH:/home/rpi/opt/xpack-arm-none-eabi-gcc-12.3.1-1.2/bin/
    
  • Cloner le repo game-and-watch-retro-go (sous-modules inclus)

cd ~
git clone --recurse-submodules https://github.com/kbeckmann/game-and-watch-retro-go
  • Installer les dépendances (optionnel pour un usage basique)

    cd game-and-watch-retro-go
    python3 -m pip install -r requirements.txt
    
  • Poser les roms dans ~/game-and-watch-retro-go/roms/gb et ~/game-and-watch-retro-go/roms/nes, et éventuellement des fichiers .jpg ou .png avec les mêmes noms que les roms (elles seront réduites à 128x96 pixels)

  • Compiler :

    export ADAPTER=rpi
    make -j5 GNW_TARGET=zelda
    
  • Rebrancher le Game & Watch au Pi si ce n'est pas déjà fait, le brancher au secteur, et appuyer sur le bouton Power

  • Flasher

    make flash -j5 GNW_TARGET=zelda
    

A creuser

  • Les flags de compilation de retro-go (par exemple : COVERFLOW=1 JPG_QUALITY=90 COMPRESS=lzma)

    • Custom firmware : Permettrait de dual booter entre le firmware d'origine et l'émulateur

Troubleshooting

  • Pour revenir au firmware d'usine (mais quand même unlocké), utiliser le script ./5_restore.sh rpi zelda de la section Backup de la mémoire flash

More from beemo
All posts