1. A breve aggiorneremo la piattaforma di Reboot per risolvere alcuni problemi con i plug-in, quindi chiediamo ancora un po' di pazienza, Lo staff di Reboot

SBLOCCHIAMO IL NUOVO GAME&WATCH ! (Mario o Zelda)

Discussione in 'Altre piattaforme' iniziata da student, 14 Giu 2022.

  1. student

    student Staff Livello 47 Staff

    Iscritto:
    30 Ago 2015
    Messaggi:
    5.261
    Like ricevuti:
    5.428
    [​IMG]

    E'oramai diventato relativamente facile modificare questi gingillini di casa Nintendo ma il primo passo per ogni modifica è ovviamente fare un backup del sistema per eventuali recuperi futuri.

    In questo articolo vedremo come utilizzare un Raspberry Pi Zero 2W per raggiungere lo scopo ! Si possono utilizzare anche altri modelli di Raspberry perchè sia il pinout che il sistema operativo utilizzato sono gli stessi.

    La procedura permetterà un backup delle memorie interna ed esterna sbloccando quella interna da 128Kb della CPU STM32 per fare in modo che tutta questa procedura debba essere fatta solo 1 volta :smile:

    In pratica alla fine dei giochi avrete una console sbloccata ma identica a quella che avevate all'inizio prima dello sblocco :sweatsmile:…. a che scopo dunque fare tutto cio'? Perchè da qui si potrà poi partire per installare una memoria flash più capiente (fino a 64MB se siete bravi con il saldatore o fino a 16MB se siete meno bravi :kissingheart:), installare RetroGo (con la piccola flash di default non c'è abbastanza spazio) ed effettuare un dual boot del sistema originale VS quello di RetroGo ma queste cose le vedremo eventualmente un'altra volta !



    REQUISITI

    - 1 Game&Watch a piacere (attualmente esistono Mario e Zelda)
    - 1 Raspberry (in questa guida è stato utilizzato un economico Pi Zero 2W)
    - Il sistema operativo ufficiale del Raspberry; in questa guida si è utilizzata la versione 2022-04-04-raspios-bullseye-armhf che potete trovare qui (scegliere la versione "with desktop" ma senza il software aggiuntivo poichè inutile allo scopo)
    - Saldatore (nella console vanno saldati solamente 2 fili)
    - Un sistema per portare fuori questi 2 fili verso il Raspberry (in questa guida si è optato per una breakout board USB Type-C - la board deve avere ALMENO 4 pin: G - D+ - D- V ma vanno benissimo anche quelle con tutti i pin):
    [​IMG]
    Questa soluzione risulterà esageratamente comoda perchè poi verrà utilizzata la stessa porta USB per tutti i collegamenti e modifiche future senza dovere più aprire il dispositivo !
    ATTENZIONE: il collegamento sarà attraverso la porta USB ma la comunicazione NON sarà tramite protocollo USB, la porta verrà infatti utilizzata solo come tramite per comodità.



    SALDIAMO I PIN

    Dalla scheda madre della console dobbiamo isolare i PINs chiamati SWDIO e SWCLK; di seguito il pinout del PCB di Mario:
    [​IMG]

    Qui invece il pinout di Zelda:
    [​IMG]

    Questi 2 PINs devono essere rispettivamente portati sui PINs A6 [SWCLK] ed A7 [SWDIO] posti nel retro del connettore femmina USB Type-C della console come mostrato nell'immagine sottostante:
    [​IMG]

    Con questo risultato finale:
    [​IMG]
    Fate MOLTA attenzione in quanto i PINs sono MOLTO vicini tra loro ed è un attimo creare un corto ! Queste 2 saldature rappresentano la parte più ostica di tutta la procedura.

    Ora saldiamo i rispettivi 4 fili sulla breakout board (il verso di connessione del connettore USB maschio è quello mostrato in foto):
    [​IMG]

    e portiamoli ai PIN del Raspberry; l'alimentazione per il Game&Watch verrà fornita direttamente dai pin 2 (5V) e 6 (GND) del Raspberry tramite la porta USB, mentre i PIN18 e PIN22 rispettivamente al SWDIO (D-) e SWCLK (D+):
    [​IMG]

    Con un risultato finale tipo questo (se non avete un connettore a pettine sui PINs del Raspberry potete saldare direttamente i fili sulle piazzole):
    [​IMG]

    Ora è tutto pronto per "operare" !



    CONFIGURIAMO IL RASPBERRY

    1 - Scaricare e flashare (con software tipo WIn32DiskImager) su microSD il sistema operativo del Raspberry;
    2 - Inserire la microSD appena flashata nel Raspberry, collegare il cavo di alimentazione ed il cavo HDMI ad un monitor;
    3 - A questo punto a schermo apparirà la configurazione iniziale del sistema - l'unica cosa OBBLIGATORIA è la seguente: utilizzare come nome di sistema/nome utente il nome " pi " (scritto piccolo, senza spazi ai lati e senza virgolette) altrimenti gli script che si andranno ad usare non funzioneranno poichè sono preconfigurati per partire da una cartella utente che si chiama appunto " pi ";
    4 - impostare un collegamento di rete WiFi e saremo pronti (se avete un connettore LAN potete utilizzare quello anzichè il WiFi).



    CONFIGURIAMO L'AMBIENTE DI LAVORO

    Con la seguente serie di comandi e scripts verrà scaricato tutto il software necessario ad effettuare la modifica alla console; potete inviarli sia da remoto via SSH che direttamente dal Raspberry da shell.

    1 - Aprire la shell (SENZA INVIARE COMANDI INIZIALI DI ROOT tipo sudo su altrimenti gli script non funzioneranno correttamente) e VERIFICARE di essere in /home/pi:

    2 - Eseguire
    Codice:
    git clone https://github.com/facelesstech/game-and-watch
    per scaricare lo script autoconfigurante

    3 - Inviare questi comandi per lanciare lo script:
    Codice:
    cd game-and-watch
    sudo apt-get update
    chmod +x gw-rpi-install-script.sh
    . gw-rpi-install-script.sh
    
    4 - A questo punto dobbiamo verificare quale versione del compilatore arm è stata installata:
    Codice:
    cd ~/opt
    ls ~/.local/xPacks/@xpack-dev-tools/arm-none-eabi-gcc/
    
    e segniamoci la versione che andremo ad utilizzare nel passaggio numero 5.

    5 - Adesso inviamo i seguenti comandi SOSTITUENDO alle xx.x.x-x.x.x dei primi 2 comandi il numero di versione che abbiamo ottenuto al punto 4 (la versione di OPENOCD invece sembra essere sempre quella ma se qualcosa non dovesse andare controllate anche quella):
    Codice:
    export GCC_PATH=/home/pi/opt/xpack-arm-none-eabi-gcc-xx.x.x-x.x.x/bin/
    export PATH=$PATH:"/home/pi/.local/xPacks/@xpack-dev-tools/arm-none-eabi-gcc/xx.x.x-x.x.x/.content/bin/"
    export OPENOCD="/home/pi/.local/xPacks/@xpack-dev-tools/openocd/0.11.0-4.1/.content/bin/openocd"
    cd game-and-watch-backup
    ./1_sanity_check.sh rpi zelda
    
    oppure se avete il game&watch di mario, l'ultimo comando sarà:
    Codice:
    ./1_sanity_check.sh rpi mario
    
    Se tutto è andato a buon fine significa che l'ambiente di lavoro è stato installato correttamente !
    Se ricevete errori significa che un percorso al compilatore o ad OPENOCD non è stato impostato correttamente, controllate accuratamente i nomi delle cartelle e delle versioni !!



    BACKUPPIAMO E SBLOCCHIAMO !

    1 - Assicurarsi che la batteria del Game&Watch sia scollegata dal suo PCB poichè ad un certo punto della procedura andrà tolta l'alimentazione e se la batteria è connessa potrebbe diventare scomodo toglierla con i vari fili collegati)

    2 - Inviare il comando:
    Codice:
    ./2_backup_flash.sh rpi zelda
    oppure se avete il game&watch di mario:
    Codice:
    ./2_backup_flash.sh rpi mario
    
    E SEGUIRE LE ISTRUZIONI A SCHERMO per effettuare un backup della memoria flash (che sarà di 1MB per Mario o di 4MB per Zelda). Questa fase di backup puo'durare alcuni minuti ed a schermo non ci saranno barre di scorrimento o simili, ci sarà solo un messaggio a fine procedura quindi.. PAZIENZA !
    Se il comando desse un errore (ma il comando ./1_sanity_check.sh rpi zelda dato nel paragrafo precedente non ne dava) allora il problema è sicuramente nella connessione dei PINs, provate ad invertire sul Raspberry il PIN 18 con il PIN 22 senza stare a ricontrollare tutto e riprovate.

    3 - Inviare il comando:
    Codice:
    ./3_backup_internal_flash.sh rpi zelda
    oppure se avete il game&watch di mario:
    Codice:
    ./3_backup_internal_flash.sh rpi mario
    E SEGUIRE LE ISTRUZIONI A SCHERMO per backuppare la memoria interna di 128Kb (questo cancellerà la memoria esterna che verrà poi ripristinata nel passaggio numero 5) ! In questa fase, QUANDO RICHIESTO A SCHERMO, andrà tolta l'alimentazione; QUANDO RICHIESTO rialimentare la console TENENDO PREMUTO IL TASTO POWER (lo schermo deve diventare blu) e MANTENENDOLO PREMUTO dare invio per proseguire (è tutto scritto a schermo).

    4 - Inviare il comando:
    Codice:
    ./4_unlock_device.sh rpi zelda
    oppure se avete il game&watch di mario:
    Codice:
    ./4_unlock_device.sh rpi mario
    E SEGUIRE LE ISTRUZIONI A SCHERMO per sbloccare la flash interna da 128Kb della CPU STM32 del dispositivo ! In questo modo la modalità di protezione RDP1 della CPU (lettura memoria + debug) verrà sostituita con la modalità RDP0 (che permette anche l'accesso alla flash interna senza doverla cancellare).

    5 - Inviare il comando:
    Codice:
    ./5_restore.sh rpi zelda
    oppure se avete il game&watch di mario:
    Codice:
    ./5_restore.sh rpi mario
    per ripristinare il dump fatto precedentemente.

    FINITO !

    Ora la console è sbloccata e pronta per installare RetroGo ed un eventuale dual boot con il sistema originale !



    NOTE

    Se dovrete riavviare o spegnere il raspberry, ad ogni ripartenza dovrete reimpostare i percorsi con questi 3 comandi:
    Codice:
    export GCC_PATH=/home/pi/opt/xpack-arm-none-eabi-gcc-xx.x.x-x.x.x/bin/
    export PATH=$PATH:"/home/pi/.local/xPacks/@xpack-dev-tools/arm-none-eabi-gcc/xx.x.x-x.x.x/.content/bin/"
    export OPENOCD="/home/pi/.local/xPacks/@xpack-dev-tools/openocd/0.11.0-4.1/.content/bin/openocd"
    
     
    #1
    Ultima modifica: 19 Giu 2022 alle 00:37
    A gelderm, vampiro, malvagio e 1 altro utente piace questo messaggio.
  2. IlVampirelloXY

    IlVampirelloXY Livello 18

    Iscritto:
    3 Feb 2016
    Messaggi:
    813
    Like ricevuti:
    400
    Vista i pin connessi direi che è un interfaccia JTAG
    Ci si può connettere con un prodotto
    Come questo
    ARCELI ST-Link / V2 (Versione CN) Microcontroller ST MCU STM8 STM32 JTAG SWD Swim Emulatore Programmatore di debugger in-Circuit https://amzn.eu/d/cMEY46M
    Non ricordo i tools per il dump ma mi pare che si trovano sul sito st
    Appena posso provo a vedere i passaggi per una versione alternativa della mod

    La triste considerazione Nintendo non mette il code protection al Micro …..‍
     
    #2
    A vampiro e student piace questo messaggio.
  3. student

    student Staff Livello 47 Staff

    Iscritto:
    30 Ago 2015
    Messaggi:
    5.261
    Like ricevuti:
    5.428
    Tutto giusto! Le prime mod erano fatte con quei programmers infatti.

    Per le protezioni l'hanno messa (RDP1) MA attraverso un exploit che utilizza, cancellandola, la flash esterna sono riusciti a dumparlo dalla ram dove l'exploit ne forza il caricamento, e poi la memoria interna della CPU STM32 viene impostata con RDP0 (senza protezioni) ! Con la protezione RDP2 (la massima) probabilmente sarebbe stato un problema sistemarli in fabbrica o in assistenza.
     
    #3
    Ultima modifica: 19 Giu 2022 alle 00:27
Sto caricando...

Condividi questa Pagina