commodore 64 · pal e ntsc · reu 1 mb · v1.0.1
Mappy
Il port per Commodore 64 del gioco da sala Namco del 1983: sedici case, i trampolini, le porte a microonde, i gatti e Goro, con la casa che scorre fluida a 60 immagini al secondo. Qui sotto un video e un articolo raccontano perché serve una REU, come il gioco è stato ridotto per entrare e quali problemi sono stati risolti.

la schermata del titolo, catturata in VICE
Il video
Circa cinque minuti, con grafici e spezzoni di gioco catturati fotogramma per fotogramma. Video in inglese: English version.
Due macchine molto diverse
La scheda arcade di Mappy ha due processori Motorola 6809 a 1,5 MHz, uno per il gioco e uno per il suono. Programma e grafica occupano 52 KB di memoria a sola lettura; lo schermo è verticale, 224 × 288 punti, e il chip sonoro ha otto voci.
Il Commodore 64 ha un solo processore, un 6510 a circa 1 MHz, e 64 KB di memoria in tutto: lì devono stare il programma, i dati, la grafica e anche lo schermo. Ha 16 colori, 8 sprite e il chip SID con tre voci.
64 KB non bastano
Per far scorrere la casa senza scatti servono due schermi grafici: mentre uno si vede, l'altro si prepara, e quando è pronto si scambiano. Solo così si arriva a 60 immagini al secondo senza mai mostrare un disegno a metà. I due schermi, con i loro colori e gli sprite, occupano circa 22 KB. Il programma che resta sempre in memoria ne occupa circa 30, il sistema e i registri dei chip altri 4.
Restano pochi kilobyte. Fuori restano le sedici case, le musiche, le schermate del titolo e dei record, il round bonus e l'immagine completa della casa usata per lo scorrimento: più di 200 KB.
La REU: un magazzino e un copiatore
La REU (RAM Expansion Unit) è una cartuccia di memoria aggiuntiva prodotta da Commodore. Mappy la usa in due modi.
Come magazzino. Contiene circa 250 KB di dati e di pezzi di programma, distribuiti su sedici banchi da 64 KB: per questo serve una REU da 1 MB, anche se non viene riempita tutta. Nel dischetto questi dati viaggiano compressi: circa 165 KB che diventano meno di 30.
Come copiatore. La REU ha un circuito che sposta la memoria da solo, un byte per ciclo di clock: circa dieci volte più in fretta del processore. La casa è disegnata per intero nella REU, e quando lo schermo scorre le righe nuove arrivano già pronte, invece di essere ridisegnate pezzo per pezzo.
Anche il programma è diviso in pezzi. Titolo e classifica, round bonus, preparazione dei livelli, nemici e porte della casa usano a turno la stessa zona di memoria, e arrivano dalla REU in una frazione di secondo quando servono.
Ridurre per far entrare
- Lo schermo. L'arcade è verticale, il C64 è largo e basso: ogni piano della casa è passato da 32 a 24 punti di altezza, e la casa scorre in orizzontale come nell'originale.
- I colori. Il C64 ha 16 colori fissi e, nella modalità usata per la casa, solo quattro per ogni blocchetto di 4 × 8 punti. Molti oggetti, dalla radio alla cassaforte, sono stati ridisegnati a mano dentro questi limiti.
- La musica. Scritta per otto voci, è stata riarrangiata per le tre del SID.
Perché gli sprite lampeggiano
Gli sprite sono i personaggi in movimento, e il chip video del C64 ne gestisce otto. Disegna lo schermo riga per riga, dall'alto in basso, e su ogni riga può mostrare al massimo otto sprite. In Mappy due servono al protagonista, che è fatto di due sprite sovrapposti; ne restano sei per tutti gli altri.
Per avere più personaggi sullo schermo il programma riusa gli stessi sprite: appena il raggio ha finito di disegnare un personaggio in alto, il suo sprite viene spostato più in basso, pronto per il successivo. Così otto sprite bastano per una casa piena di gatti, purché non stiano tutti alla stessa altezza.
Di solito, quindi, non lampeggia niente. Solo se su una stessa fascia di righe ci sono più personaggi che sprite liberi, non si possono mostrare tutti nella stessa immagine: allora il programma li alterna, un'immagine mostra alcuni personaggi e quella dopo gli altri, e quelli in più lampeggiano. Capita di rado e per pochi istanti, soprattutto nel round bonus quando molti palloncini stanno alla stessa altezza; appena si spostano, il lampeggio sparisce. È un limite dell'hardware, comune a tanti giochi per Commodore 64.
L'aiuto dell'intelligenza artificiale
La prima posa del protagonista è stata creata a mano, sovrapponendo e ricalcando la grafica originale, per avere una versione che rendesse bene nel gioco. All'inizio era fatta di tre sprite sovrapposti; poi è scesa a due, il corpo grigio in alta risoluzione davanti e i colori dietro, perché uno sprite in più serviva agli altri personaggi.
Le pose intermedie, decine, le ha generate l'intelligenza artificiale, seguendo quel modello: le camminate, i salti, i rimbalzi nelle due direzioni, e anche le pose dei gatti e di Goro, su uno sprite solo e con gli occhi sistemati perché restassero leggibili con i pixel larghi del multicolore. Farle tutte a mano sarebbe stato troppo gravoso.
Anche le schermate dell'arcade sono state catturate con l'emulatore MAME, usato da riga di comando, che permette di salvarle in automatico mentre il gioco gira. Poi l'intelligenza artificiale le ha confrontate con quelle catturate in VICE, l'emulatore del Commodore, per trovare le differenze tra l'originale e il port.
Con MAME sono stati catturati anche dei long play, cioè partite complete, e l'autoplay dell'arcade. Studiandoli, l'intelligenza artificiale è stata importante per mappare il comportamento dei nemici: come si muovono i gatti e Goro, quando cambiano piano, come usano i trampolini e le porte.
Diciassettemila cicli
A 60 immagini al secondo il processore ha circa 17.000 cicli per ogni immagine. Il motore del gioco, che segue le regole dell'arcade, ne usa circa la metà; il resto va allo scorrimento, alla gestione degli sprite, agli interrupt e alla musica. Nei livelli avanzati, con nove gatti in campo, a volte il conto non torna e un'immagine resta ferma per un istante. Sui C64 europei, PAL, che mostrano 50 immagini al secondo, ogni immagine ha un po' più di tempo.
Fedele all'originale
Per essere sicuri che il gioco si comporti come l'arcade, il motore è stato confrontato con più di mille registrazioni dell'originale, fatte nell'emulatore MAME: posizioni e mosse di Mappy e dei gatti devono coincidere passo per passo. E ogni errore segnalato dai collaudatori è stato cercato fotogramma per fotogramma nell'emulatore VICE, guardando le immagini che lo schermo mostra davvero: così sono venuti fuori anche difetti che durano un solo sessantesimo di secondo.
Cosa serve per giocare
- un Commodore 64 o 64C, PAL o NTSC: il gioco riconosce la macchina da solo
- una REU da 1 MB, vera o emulata, per esempio in VICE
- il dischetto (.d64) oppure la cartuccia (.crt)
- un joystick in porta 2, oppure W A S D e la barra spaziatrice
Il download sarà disponibile tra qualche giorno, su questa pagina.
Grazie ad AlexNinja71 per i collaudi.
Port amatoriale gratuito e non ufficiale. MAPPY™ & © Bandai Namco Entertainment Inc. Nessuna affiliazione con Bandai Namco. La musica del video è originale, creata per il video.