News

Altered Beast AGA

Un porting su Amiga 1200 che si preannuncia straordinario!

Di Marco Finelli 5 dicembre 2025Tempo di lettura: 4 min.

Direttamente dal forum EAB (English Amiga Board), ecco un annuncio che renderà felici gli estimatori della software house nipponica Sega, già in fibrillazione per il porting di Sonic annunciato qualche giorno fa.

Questa volta è il turno di un classico che veniva venduto in bundle col Sega Mega Drive per spingere le vendite della console: Altered Beast! L’obbiettivo dell’autore è quello di regalarci una conversione perfetta dell’arcade, ricordandoci che in principio era previsto per gli Amiga ECS e che solo in seguito è stato deciso di virare al chipset AGA che dovrebbe garantire tutte le risorse per riuscire nell’intento. Versione ECS che non verrà comunque lasciata nel dimenticatoio, ma che verrà ripresa non appena sarà pronta la versione AGA. Ma ora lasciamo spazio alle parole prese direttamente dal forum dell’italianissimo Black.Jack per quello che potrebbe essere un must-have per i nostri vecchi Amiga!

Altered Beast per Amiga 1200: il mio porting bare-metal “arcade perfect”

Oggi è una tappa importante per un progetto personale su cui sto lavorando da circa quattro mesi, e credo sia finalmente arrivato il momento di condividerlo con la community.

Sto realizzando un porting bare-metal, il più arcade-perfect possibile, di Altered Beast per Amiga 1200 (AGA), scritto interamente in Assembly (vasm) senza utilizzare alcuna libreria di sistema. Tutti ricordiamo il port originale del 1989. Pur generando nostalgia, non rende assolutamente giustizia alle reali potenzialità dell’Amiga. Il mio obiettivo è immedesimarmi in un ragazzino degli anni ’90 che comprava un A1200 e immaginava il “gioco in bundle” che avrebbe davvero meritato. Un po’ come quando guardavo il lancio del Mega Drive, accompagnato da una delle migliori conversioni di Altered Beast dell’epoca.

Altered Beast
Altered Beast originale su Amiga ECS

L’inizio del progetto

Ho iniziato questa avventura la scorsa estate, tra agosto e settembre, smanettando con vasm e consultando guide qua e là. Per puro divertimento ho iniziato a visualizzare a schermo un centurione in formato BOB. Senza neanche accorgermene stavo già lavorando al progetto, inizialmente su un sistema ECS, con l’obiettivo di raggiungere una fedeltà arcade pixel-perfect.

Dopo questo risultato inaspettato, ho iniziato a sperimentare anche con il “fratello maggiore” e sono rimasto colpito dalla resa PAL60. Così ho migrato rapidamente verso l’Amiga 1200, mantenendo come target una A1200 stock da 2MB di Chip RAM, sempre in bare-metal Assembly. Studiando a fondo l’hardware, ho scoperto i vantaggi della modalità FMODE, che garantisce maggiore throughput del Blitter. Questo mi ha permesso di raggiungere 128 colori a schermo.

Dettagli Tecnici (per gli appassionati di hardware)

L’engine gira attualmente a 50 fps su una macchina stock, nonostante il carico notevole.

128 colori, 7 bitplane

Modalità PAL60 (“Fake NTSC”) attiva

Double buffering completo con scrolling orizzontale

Grafica 1:1 con la versione Arcade (background leggermente meno colorati)

Background enormi compressi con Shrinkler

Uso intensivo di FMODE per massimizzare la banda del Blitter

Asset costruiti con estrema cura per rientrare nei 2MB di Chip RAM

Spazio su disco: ~564 KB (sta comodamente su un floppy DD con circa il 35% di spazio libero)

Ram utilizzata in runtime: ~1.55 MB

Ottimizzazione: oltre 390 KB di asset grafici (animazioni left-facing e sprite del Player 2) vengono generati in runtime, risparmiando spazio su disco e mantenendo i caricamenti rapidi.

Per risparmiare spazio su disco e banda in memoria, non carica tutto da floppy.

Carica solo le animazioni “verso destra”.

Le animazioni “verso sinistra” vengono generate in runtime tramite una LUT CPU (sezione BSS_LEFTY).

Il centurione blu non è presente su disco.

Viene generato clonando i dati del Player 1 con rimappatura della palette (sezione BSS_P2).

Il codice è strutturato per essere Fast RAM friendly: se rilevata, il Core del gioco (BSS_FASTABLE) viene spostato automaticamente in Fast RAM, lasciando grafica e audio in Chip RAM. Funziona comunque alla perfezione anche su A1200 completamente stock.

GameCode(acrx2): 25.054 bytes

LutTables(adrw2): 384 bytes

DATA(adrw2): 7.374 bytes

GRAPHICS(adrw8): 339.676 bytes

SoundData(adrw2): 96.772 bytes

BSS_FASTABLE(aurw2): 2.548 bytes

BSS(aurw8): 652.312 bytes

CompressedData(adrw2): 108.640 bytes

BSS_LEFTY(aurw1): 138.496 bytes

BSS_P2(aurw1): 253.792 bytes

Sto utilizzando l’eccellente ptplayer di phx.Effetti sonori e colonne sonore sono estratti direttamente dalla versione Arcade.

Stato attuale del progetto

È ancora un WIP. Al momento utilizzo il classico startup code di Fabio Ciucci per i test, ma prevedo di implementare un trackloader personalizzato (seguendo gli esempi di phx). Il gameplay loop è già solido, il sistema di collisioni funziona e… la Bestia si sta risvegliando!

E per quanto riguarda A500 / ECS?

Anche se ora mi sto concentrando sull’AGA per ottenere una fedeltà arcade totale (128 colori e sprite enormi), non ho dimenticato l’A500. Visto che l’engine è scritto da zero in Assembly bare-metal, dopo aver completato la versione AGA realizzerò una versione “demake” per OCS/ECS (32 colori), spremendo al massimo anche questo chipset.

Crediti e ringraziamenti

Questo progetto non sarebbe stato possibile senza il fantastico supporto della community.

a/b e phx (Frank Wille): due leggende assolute. Senza la vostra guida sarei ancora bloccato a capire perché i miei BOB lasciavano delle scie. Grazie per la pazienza e le mail.

JMD e FEROX: supporto fondamentale per moduli e conversione/estrazione degli SFX. Sono orgoglioso di dire che sono entrambi italiani come me.