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

LE PROTEZIONI NELLE CONSOLES - NES/SNES MINI

Discussione in 'SNES / NES / Famicom' iniziata da student, 5 Ott 2017.

  1. student

    student Staff Livello 40 Staff

    Iscritto:
    30 Ago 2015
    Messaggi:
    3.937
    Like ricevuti:
    3.939
    [​IMG]

    NES e SNES Mini (o "Classic") sono state ideate dal Nintendo N.E.R.D Team (Nintendo European Reasearch & Development) e sono console rilasciate sia per soddisfare il desiderio di retrogame dei fan più datati sia per fornire un sistema plug&play all-in-one per chi non vuole sbattersi troppo con emulatori e configurazioni hardware e software.

    Il Nes Mini è uscito il 10 Novembre 2016 in Giappone ed Australia ed il giorno dopo in Europa ed USA mentre il SNES Mini il 29 Settembre 2017 in Europa ed USA, il 30 Settembre in Australia ed il 5 Ottobre nel suo paese di origine (Giappone).

    Il 31 Dicembre 2016 il NES Mini aveva già venduto 1.5 milioni di unità letteralmente prosciugando tutte le scorte mondiali ! Questo fatto, a detta di Nintendo "non previsto", ha favorito il fenomeno del "parassitaggio" e cioè di individui che triplicarono il prezzo della console boxata grazie alla irreperibilità della stessa negli scaffali dei negozi. Con il SNES mini questa evenienza dovrebbe essere scongiurata visto che la casa di Kyoto ha dichiarato di aver prodotto un maggior numero di unità sostenendo inoltre di voler rimettere in commercio anche il NES Mini agli inizi del 2018.

    [​IMG]

    Questi dispositivi hanno avuto un ottimo successo grazie anche alla loro accattivante interfaccia grafica:
    [​IMG]
    che permette senza alcuno sforzo di selezionare il gioco, avviarlo, creare un punto di ripristino, settare impostazioni di aspetto e scanline per riassaporare in modo emulato il vecchio effetto TV a tubo catodico e, nella versione SNES Mini, anche di riavvolgere il gameplay fino al punto desiderato !

    Curiosità:

    • [​IMG]
      Dato il successo dell'interfaccia grafica del NES Mini c'è chi ha provato a ricostruirla come "skin" per il frontend di emulazione per PC chiamato ATTRACT-MODE.

    • [​IMG]
      Inoltre qualcuno è riuscito a far funzionare l'emulatore direttamente sul raspberry.
      A quanto pare è bastato sostituire la libreria libGLESv2.so con quella libMali.so, impostare l'uscita HDMI a 720 e pochi altri "tweaks" per riuscire nell'opera ! Qui le istruzioni !


    Le 2 macchine sono dotate di hardware sostanzialmente identico (salvo piccole variazioni) e software molto simile (cambia praticamente l'emulatore interno che nel caso del NES Mini prende il nome di kachikachi mentre nel SNES Mini si chiama canoe-shvc).

    Le 2 console hanno un case molto simile all'originale (lo slot per le cartucce è finto!) con alcune modifiche dettate prevalentemente dai connettori in ingresso/uscita:
    [​IMG]

    Come pacchetto bundle di vendita il NES Mini costa un po'meno ed ha un solo controller con cavi corti dei quali molti utenti si sono lamentati; il SNES Mini, un pochino più costoso, ha invece in dotazione 2 controller con cavi di collegamento degli stessi più lunghi rispetto alla precedente.


    TITOLI INCLUSI


    • Il NES Mini contiene 30 giochi inclusi tra i migliori best seller Nintendo:
      [​IMG]

    • Il SNES Mini prevede 21 giochi inclusi tra cui il mai rilasciato (se non sottoforma di prototipo non completo) Star Fox 2 che qui ritroviamo per la prima volta in forma definitiva:
      [​IMG]


    SPECIFICHE TECNICHE

    Le specifiche delle 2 "Mini" di casa Nintendo sono le seguenti:
    - SoC: Allwinner R16 (dovrebbe corrispondere al vecchio A33) che comprende al suo interno una CPU 4x Cortex A7 ed una GPU Mali400MP2 GPU
    - RAM: SKHynix (256MB DDR3)
    - Flash: Spansion 512MB SLC NAND flash, TSOP48
    - PMU: AXP223

    Il chip all-in-one Allwinner R16, uscito a metà 2016, è cosi composto:
    [​IMG]
    In sostanza la CPU ha 4 cores con una architettura ARMv7-A con ARM core Cortex-A7, sviluppato nel 2011 (i cortex più recenti analoghi per impiego a 32bit sono A12, A17 ed A32):
    [​IMG]
    La GPU è una Mali400 MP2 che, dato l'apparente repackage del Allwinner A33 ora chiamato R16, "dovrebbe" essere a 350MHz.

    Dunque, come potenza di elaborazione, è migliore di un Raspberry Pi2 ma dovrebbe essere inferiore ad un Raspberry Pi3 (è ovvio che manca di tutte le periferiche del Pi3).



    PROTEZIONI


    PROCESSO DI BOOT

    All'acensione la console esegue il codice contenuto nel processore AllWinner all'interno di quella che viene chiamata BootROM (o BROM), che dovrebbe essere di 32KB. La prima parte della BootROM è fisicamente occupata dal codice della FEL mode (modalità di ripristino - vedi oltre) mentre la seconda è rappresentata da eGON.BRM. La prima cosa eseguita all'accensione è proprio eGON.BRM: se all'avvio eGON.BRM trova un boot0 valido in NAND lo esegue altrimenti entra automaticamente in FEL mode [tutto questo codice è fornito dal AllWinner, non dovrebbe essere codice creato da Nintendo].


    DATI IN NAND

    La NAND contiene al suo interno una partizione criptata chiamata "NAND-B" (circa 19MB nel NES Mini e circa 64MB nel SNES Mini); si tratta in realtà di una partizione offuscata (scrambled) poichè i dati sono mascherati da un algoritmo che utilizza una tavola con valori predefiniti utilizzando i quali si riottengono i bytes in chiaro.

    Plutoo, noto reverser della scena Nintendo, ha compreso come decriptare tale partizione criptata che, tra le altre, cose contiene anche le ROMs.

    Visto che queste piccole consoles sono piccoli computer con processore ARM utilizzanti Linux come sistema operativo (pagina wiki sul linux del NES Mini), i dati in NAND sono strutturati linux-like come spiegato molto chiaramente qui da ClusterM e come potete vedere nell'immagine sottostante:
    [​IMG]


    REGION CHECK

    Anche in questi gingilli i programmatori hanno provveduto ad inserire un controllo su un numero seriale (sembra della CPU Mali) il quale, se non corrispondente a quello previsto (regione), non fa avviare la console; questo accorgimento sembra essere stato integrato per evitare che clonassero il sistema hardware+software.



    SUPERARE LE PROTEZIONI

    UART E FEL MODE

    Le consoles dispongono di una porta seriale di tipo UART i cui "pins" sono situati in posizione differente come potete vedere dall'immagine sottostante:
    [​IMG]

    Attraverso tale porta è possibile comunicare con la periferica. Studiando i dati i reversers hanno scoperto una modalità chiamata "FEL" che è contenuta all'interno della BootROM di tutti i chips AllWinner allo scopo di flasharli via USB per la prima volta o di recuperare un flash andato male; tale modalità (che viene anche chiamata "recovery o "uboot") può venire "triggerata" in vari differenti modi; quelli utilizzati per l'hardware delle nostre "Mini" sono sostanzialmente 3:

    1 - Tenere premuto il tasto reset ed accendere la console (il più semplice);
    2 - inviare il carattere "2" via UART all'accensione;
    3 - dopo aver avviato U-Boot (all'avvio inviare "s" via UART), inviare il comando "fastboot".

    Tramite questa modalità FEL si può sempre riflashare il kernel quindi, anche se il flash non va a buon fine, non si può brikkare la console !

    COME BRIKKARE LA CONSOLE
    [​IMG]
    L'unico modo per brikkare è andare a trafficare con i files della modalità U-Boot e cioè con il boot0 memorizzato in NAND ma se non siete devs è poco probabile che mai andrete a toccare certe cose.


    PATCHARE IL KERNEL

    Una volta avuto accesso al sistema e dumpato il kernel si è provveduto ad applicare delle patches al kernel stesso che:
    1 - permettessero allo script "init" di Hakchi di prendere il controllo del sistema al boot;
    2 - migliorassero il supporto di controllers non originali (inclusi gli hacks per il softreset con la combinazione di tasti Down + Select);
    3 - rimuovessero il region/hardware lock compilato all'interno del kernel.

    In ultimo sono riusciti ad abilitare in modo opzionale il supporto alle periferiche USB esterne !

    BREVE CRONOSTORIA DELL'HACKING

    Il russo MadMonkey fu il primo a scoprire i vantaggi della FEL mode ottenendo l'accesso alla console e dumpandone la NAND; fu anche il primo a sviluppare il tool per patchare il kernel chiamato hakchi a quanto pare modificando e ricompilando il kernel originale dai suoi sorgenti resi in parte disponibili da Nintendo.

    Nel frattempo 2 reversers giapponesi, Bakueikozo e NV(*´ω`*), esplorarono il sistema descrivendo ognuno le proprie scoperte su twitter e nei rispettivi blog (honeylab e koubou) tra le quali abbiamo l'avvio di DOOM sul NES Mini.

    Più o meno nello stesso periodo il coder ClusterM (russo anche lui), sulla base del lavoro di MadMonkey:
    [​IMG]
    creò il fantastico Hakchi2, programma per Windows con il quale è possibile patchare il kernel delle consoles ed aggiungere altre ROMs a piacimento:
    [​IMG]

    Tra le altre cose di hakchi (ad esempio anche una connessione FTP e/o Telnet con la console) il programma, dalla versione 2.14 in poi, fornisce anche "clovershell", un tool integrato che permette lo scambio di dati via USB senza più utilizzare la scomoda (necessita di saldature) e lenta (seriale) interfaccia UART.
    All'inizio venne utilizzato l'emulatore interno originale Nintendo ma questo aveva vari problemi con i mappers più particolari di conseguenza gli sviluppatori, molto attivi su gbatemp, riuscirono a portare la version ARM di RetroArch anche sulle "Mini" (alcune discussioni si sono poi spostate sul sito reddit dove scambiare links a materiale coperto da copyright non è cosi censurato come su gbatemp).

    TEST SULL'EMULAZIONE
    Per quanto riguarda i test sulla velocità di emulazione utilizzando i vari cores di RetroArch possiamo rifarci a questo thread che riguarda RetroPie (sistema di emulazione che gira su RaspBerry basato su libretro-retroarch): riassumendo i giochi N64, PSX, Dreamcast e PSP potrebbero avere problemi di velocità forse mai risolvibili a causa dell'hardware limitato.


    IL FORMATO DELLE ROMs


    • Le ROMs del NES Mini, una volta decriptata la partizione, sono identiche al formato .nes che potete trovare in rete. L'emulatore interno del NES Mini supporta solamente i seguenti mappers:
      • 0 (NROM) - very simple games like Ice Climber, Pac-Man, etc.
      • 1 (MMC1) - many good games, this is the second most popular mapper.
      • 2 (UxROM - UNROM/UOROM) - games like Castlevania, Contra, Duck Tales, etc.
      • 3 (CNROM) - mostly simple games but with heavy graphics like Adventure Island, Friday The 13th, etc.
      • 4 (MMC3) - most popular mapper, used by a huge bunch of great games.
      • 5 (MMC5) - very complex and the most powerful mapper on NES, used only by Castlevania 3 and a few Japanese games. Is there at least one default game using it? I’m surprised that NES Mini can emulate it.
      • 7 (AxROM - ANROM/AMROM/etc.) - simple mapper used by games like Battletoads.
      • 9 (MMC2) - used only by Punch Out!!
      • 10 (MMC4) - used by a few Japanese games.
      • 86 - some Japanese games.
      • 87 - some Japanese games.
      • 184 - some... games
      • Famicom Disk System images - Japanese ROMs with .fds extension, like original Super Mario Bros. 2, Doki Doki Panic, Japanese version of Metroid, etc.

      Per le altre specifiche informazioni vi rimando qui.


    • Le ROMs SNES utilizzano un formato particolare simile a quello dei titoli VC SNES WiiU (quindi oltre la ROM ci sono anche altri dati di cui tenere conto; il formato prevede infatti l'integrazione in un unico file di:
      - ROM della cartuccia
      - samples PCM
      - patches per il gioco (alcune per modificare ad esempio il flickering per l'epilessia o la rafica per renderla "legale" in alcuni paesi come la rimozione dei simboli della croce rossa).

      In sostanza per avere il formato .sfrom dei giochi presenti nel SNES Min, ad una ROM trovata in rete (con estensione .smc, frutto di un dump da una cartuccia originale) vanno aggiunti un header (48 bytes prima della ROM contenuta nel file) ed un footer (48 bytes alla fine del file che contiene la ROM); eccoli spiegati nello spoiler:

      HEADER

      0x00000: 00 01 00 00 60 00 XY 00 30 00 00 00 30 00 XY 00
      0x00010: 30 00 XY 00 30 00 XY 00 60 00 XY 00 00 00 00 00
      0x00020: 4B 00 XY 00 57 55 50 2D 4A 41 41 45 00 00 00 00


      FOOTER

      0xXY0030: 3C 00 00 08 00 00 00 00 00 00 00 00 00 11 10 02
      0xXY0040: 91 14 00 00 00 00 00 00 00 00 00 01 00 00 00 01
      0xXY0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

      Tutti i valori si leggono in "little endian" e cioè a coppie di 2 da destra verso sinistra: es. se abbiamo 00 00 08 il valore corretto sarà 08 00 00.

      60 00 XY = Dimensione totale del file (header+ROM+footer)
      30 = Se si imposta a 00 si ha un black screen
      30 00 XY = Inizio (offset) del footer
      4B 00 XY = Pointer ad una specifica posizione del footer (che di solito contiene il valore 01)
      3C = Velocità emulazione (3C = 60 Hz)
      00 00 08 = Dimensione totale della ROM in hex
      - la più grande ROM SNES è di 600000h bytes (= 6.291.456 bytes)
      - la più piccola ROM SNES è di 40000h bytes (= 262.144 bytes)
      XY = valore della dimensione della ROM (04 - 08 - 10 - 20 - 40 - 60)
      11 10 = preset ID: sembrano valori correlati all'emulazione dei chip speciali contenuti nelle cartucce
      91 = Volume
      14 = Type ROM (14 = LowROM - 15 = HiROM - il tipo di ROM ve lo dice questo programma a cui dovete darla in pasto)
      00 = sembra FORSE essere anche esso correlato allo speciale chip contenuto nelle cartucce (se 0C = il gioco utilizza il Super FX GSU-1, come Star Fox - se 00 non utilizza nessun chip)




    CONCLUSIONI

    Il N.E.R.D Team non ha studiato significativi sistemi di protezione per questi dispositivi ed infatti queste consoles sono state piuttosto facili da "softmoddare" ma già prima della possibilità di poterle modificare sono state sia amate dal grande pubblico (per la bellezza estetica molto simile agli originali e per la loro facilità di utilizzo) ma allo stesso tempo odiate soprattutto dagli hard-core-retrogamers che vedono in questi prodotti un mero atto commerciale privo di "amore" da parte di Nintendo; la critica inoltre va al prezzo che viene spesso confrontato con quello di un raspberry ma facendo 2 conti della serva:
    - un kit raspberry Pi2 o Pi3 comprensivo di alimentatore e case plastico SENZA software costa circa 50-70euro;
    - un NES Mini con 1 controller 59.90€ (il secondo controller costa 9.90€);
    - un SNES Mini con 2 controller costa 79.90€ (entrambe le console hanno in dotazione cavo USB+cavo HDMI).
    PRO: zero tempo da perdere per la configurazione nelle "Mini"
    CONTRO: l'hardware delle "Mini" è sicuramente meno esteso come dotazione se paragonato a ciò che offre il raspbyerry e la memoria NAND è limitata a soli 512MB.

    in sostanza non si può dire che sia un hardware stratosferico ma fa bene quel che fa ad un costo anche abbastanza contenuto se pensate al prezzo che dovreste pagare per un singolo titolo in formato Virtual Console (NES circa 4.99€, SNES circa 7.99€).

    Se questi limiti per voi non sono sufficienti a definire "inutile" il prodotto e se vi piace la possibilità di poter estendere il loro parco titoli grazie alla fattibile modifica allora le "piccoline" di Nintendo valgono a mio personale avviso l'acquisto !
     
    #1
    Ultima modifica: 31 Mag 2018
  2. iostream

    iostream Phoenix Wright

    Iscritto:
    13 Ago 2016
    Messaggi:
    4.895
    Like ricevuti:
    1.617
    Non me l'aspettavo proprio, per quelle due protezioni che queste console hanno! Comunque bell'articolo, come sempre
     
    #2
    A student piace questo elemento.
  3. AlessioM88

    AlessioM88 Livello 17

    Iscritto:
    17 Gen 2016
    Messaggi:
    747
    Like ricevuti:
    99
    Complimenti student :smiley: Grazie al tuo articolo molto dettagliato ho capito finalmente cosa sono header e footer :P Adesso rimane solo una guida semplice e pratica per risolvere il problema delle roms. Qualcuno ha già provato ad inserirne molte dello snes? Mi piacerebbe sapere quante ce ne potranno entrare :smile:
     
    #3
  4. iostream

    iostream Phoenix Wright

    Iscritto:
    13 Ago 2016
    Messaggi:
    4.895
    Like ricevuti:
    1.617
    Header = inizio di un file, di solito contenente le informazioni del file stesso. Usato anche per individuare il tipo di file
    Footer = fine del file. Contenente anche lei le impostazioni.

    La guida per le rom la vorrei fare io, magari creando un piccolo tool per windows
     
    #4
  5. student

    student Staff Livello 40 Staff

    Iscritto:
    30 Ago 2015
    Messaggi:
    3.937
    Like ricevuti:
    3.939
    Il tool per windows è già pronto, è sempre quello per il NES Mini (hakchi2), bisogna solo aspettare qualche altro giorno perchè venga rilasciato.

    Se nel frattempo vi volete divertire ho fatto questo pacchetto (https://www.reboot.ms/forum/attachments/py36-rar.6169/):

    1 - scompattatelo in una cartella a piacere
    2 - copiate la vostra rom .sfc nella cartella dove c'e'anche il file go.bat e RINOMINATELA in game.sfc
    3 - eseguite il file go.bat, in pochi secondi creerà il file game.sfrom da utilizzare nel SNES Mini.

    Se non sapete cosa fare del file .sfrom... non vi serve nemmeno questo tool in allegato :wink:
     
    #5
    Ultima modifica: 7 Ott 2017
    A Coolguy e iostream piace questo messaggio.
  6. AlessioM88

    AlessioM88 Livello 17

    Iscritto:
    17 Gen 2016
    Messaggi:
    747
    Like ricevuti:
    99
    student io ho installato hakchi 2.18 ma lo sviluppatore dice di non usarlo perché non è pensato per snes ma per nes e potrebbe dar problemi... inoltre se lo avvio mi da i giochi nes (e le copertine verticali) c'è qualcosa che puzza...
     
    #6
  7. iostream

    iostream Phoenix Wright

    Iscritto:
    13 Ago 2016
    Messaggi:
    4.895
    Like ricevuti:
    1.617
    In che senso? Dice solo che potrebbe essere che il kernel di SNES mini possa essere in qualche modo diverso da quello di NES Mini, credo. In ogni caso per fare tutto in sicurezza fai prima un dump del kernel e poi fai tutte le prove
     
    #7
  8. AlessioM88

    AlessioM88 Livello 17

    Iscritto:
    17 Gen 2016
    Messaggi:
    747
    Like ricevuti:
    99
    Ancora non ho tentato nulla... nemmeno collegato snes mini al pc ma ho già un problema, ti prego verifica nel tuo se hai lo stesso problema mio! In pratica ogni volta che avvio Yoshi's Island parto con 3 vite (no savestate) e se ne guadagno altre ma resetto, mi salva tutti i progressi fatti prima del reset eccetto le vite che ripartono da 3! COme mai??? Anche se salvo con 1 o 2 vite, riparto con 3! Puoi verificare, gentilmente, se ti da lo stesso problema? L'importante è che non usi il savestate ma il salvataggio principale della cartuccia, grazie mille!
    PS: ho anche formattato tutto lo snes mini, per sicurezza, ma non cambia il problema e temo di avere uno snes mini difettoso :pensive:
     
    #8
  9. iostream

    iostream Phoenix Wright

    Iscritto:
    13 Ago 2016
    Messaggi:
    4.895
    Like ricevuti:
    1.617
    A me funziona tutto regolarmente, forse è un problema della rom.…
     
    #9
  10. AlessioM88

    AlessioM88 Livello 17

    Iscritto:
    17 Gen 2016
    Messaggi:
    747
    Like ricevuti:
    99
    Ma la rom è quella di partenza :O Mica l'ho messa io...
    Puoi verificare quanto ho scritto? Per piacere, appena puoi aprire lo snes mini, se puoi fare una foto delle vite che hai (di partenza) ancora meglio, grazie!

    Nel frattempo provo avviando la vecchia rom su emulatore...

    upload_2017-10-6_20-50-7.png

    Questa di sopra è la schermata dell'emulatore Snes9x con la rom (E) V.1.1 del gioco...
    Ho 6 vite come potete vedere, adesso chiudo e riapro...

    upload_2017-10-6_20-52-53.png

    Ragazzi! Mi avete fatto prendere un colpo! Ha ragione student dicendo che le vite non si salvano! Ma qualcuno nel forum ha detto che era un problema solo mio! Ma stando all'emulatore PC, nemmeno qui me le salva, visto? (ho appena resettato e riaperto la rom...)
     
    #10
  11. iostream

    iostream Phoenix Wright

    Iscritto:
    13 Ago 2016
    Messaggi:
    4.895
    Like ricevuti:
    1.617
    Ahhh! Io ho scaricato una rom modificata apposta per i salvataggi! Sinceramente non ho mai provato la rom per snes mini, ho sempre usato quella per 3ds (ovvero che emulavo su 3ds con snes9x)
     
    #11
  12. AlessioM88

    AlessioM88 Livello 17

    Iscritto:
    17 Gen 2016
    Messaggi:
    747
    Like ricevuti:
    99
    Ma tu hai già modificato lo snes mini? Potresti provare la rom originale? In ogni caso ecco perché mi ricordavo che le vite venissero salvate, ti faccio vedere il mio vecchio save di Super Mario Advance 3 - Yoshi's Island per Visual Boy Advance!
    upload_2017-10-6_21-1-3.png

    Quindi era proprio un problema dello Snes in sé (anche se ricordavo che nel Super Nintendo me le salvava, ma forse ricordavo male!). Su GBA, come vedete, le salva eccome :P
    Non avevo nemmeno usato il bug delle 999 vite :smiley: E' che ci giocai un sacco! Infatti ottenni 6 stelle di valutazione e 100 % in tutti i livelli :P
     

    File Allegati:

    #12
  13. iostream

    iostream Phoenix Wright

    Iscritto:
    13 Ago 2016
    Messaggi:
    4.895
    Like ricevuti:
    1.617
    Sì (con il retroarch e l'haxchi del NES mini), anche se ho il dump del kernel per evitare brick.
     
    #13
  14. AlessioM88

    AlessioM88 Livello 17

    Iscritto:
    17 Gen 2016
    Messaggi:
    747
    Like ricevuti:
    99
    Morale della favola, mi avete fatto resettare lo snes mini inutilmente (avevo "platinato" i primi 3 mondi uff!). In realtà è stato un altro utente di questo forum, che siccome si scocciava evidentemente di provare, mi disse che era solo un problema mio e a lui le salvava...
    student e iostream, se non vi costa nulla, potreste provare anche voi con la rom originale snes mini per vedere se ad ogni riavvio parte con 3 vite, giusto come prova del 9 :smiley: Grazie mille!
     
    #14
  15. iostream

    iostream Phoenix Wright

    Iscritto:
    13 Ago 2016
    Messaggi:
    4.895
    Like ricevuti:
    1.617
    Aspetta che provo.……
     
    #15
    A AlessioM88 piace questo elemento.
Sto caricando...

Condividi questa Pagina