Manservant – Rivivere un gioco in Assembly

Un gioco scritto nel 1988 in Assembly 8086, quando ero ancora studente e le risorse a disposizione erano ben lontane da quelle di oggi. A distanza di quasi quarant’anni ho ritrovato i sorgenti e ho deciso di riportarlo in vita, cercando di ricostruire come funzionava e con quali strumenti lo avevo realizzato.

Nel lontano 1988 avevo scritto un gioco in Assembly 8086 di cui conservo ancora oggi i sorgenti. In questo articolo descriverò come compilarlo ed eseguirlo su Windows e proverò anche a ricostruire, per quanto possibile, come era fatto e come funzionava.

Manservant

Nel gioco si deve muovere un domestico con il compito di pulire il pavimento di una casa, facendo però attenzione a diversi oggetti e personaggi che si muovono nell’ambiente: un elicotterino telecomandato, una scopa, un bambino che corre avanti e indietro con una macchinina e persino una sveglia impazzita.

La casa presenta inoltre alcuni pericoli da evitare, come un fulmine che bisogna saltare per non prendere la scossa. Ci sono anche degli scivoli e una porta che permette di attraversare la casa teletrasportandosi da una parte all’altra. L’ambiente è ovviamente arredato con quadri, divani e mobili.

Sul pavimento sono inoltre sparse le lettere che compongono la parola “MANSERVANT”: raccoglierle tutte permette di ottenere un bonus.

Parte del gioco venne sviluppata addirittura in treno, durante il tragitto che mi portava all’istituto tecnico. Ricordo, ad esempio, di aver riscritto su foglio proprio durante quei viaggi la gestione della tastiera, ottenendo un miglioramento non trascurabile delle prestazioni del gioco.

Anche la grafica era stata realizzata interamente da me, pixel dopo pixel, utilizzando un editor che avevo scritto in Assembly. L’editor permetteva di posizionare i pixel colorati e mostrava il relativo valore esadecimale da inserire direttamente nel sorgente del gioco.

Durante lo sviluppo avevo trovato il sistema per fare in modo che il personaggio e gli altri sprite, passando davanti a oggetti come quadri e mobili, non mostrassero il classico rettangolo che li delimitava.

Una sorta di fusione dei pixel con lo sfondo permetteva di integrare lo sprite nello scenario, rendendo il passaggio davanti agli oggetti molto più naturale, dove il problema principale risiedeva nel dover ripristinare lo sfondo sottostante prima di muovere lo sprite nella posizione successiva.

La piantina del livello veniva invece descritta utilizzando caratteri alfanumerici, una soluzione che permetteva di aggiungere rapidamente nuove schermate. Alla fine, però, il gioco rimase limitato a una sola schermata, principalmente a causa delle limitazioni dell’editor di testo che utilizzavo all’epoca e che non mi consentiva di scrivere sorgenti più grandi di un segmento, cioè 64 KB.

Ad esempio, il “Quadro1” identificato dalla lettera k nella piantina rappresenta uno sprite di 20×20 pixel con i 4 colori della scheda grafica CGA risalente al 1981 (nero, bianco, ciano e magenta). Pertanto ogni pixel viene codificato con 2 bit, quindi ogni byte contiene 4 pixel. I 5 byte di ogni riga rappresentano quindi 20 pixel. Per visualizzare correttamente lo sprite bisogna poi sapere quale modalità video 8086 viene utilizzata, perché il modo di trasformare i dati in pixel sullo schermo dipende dalla modalità grafica.

Lo sprite grafico che ne risulta è il seguente:

Ripensandoci oggi, avrei potuto risolvere almeno in parte questo limite salvando le schermate in un file su disco e realizzando un editor apposito per permettere a chiunque di costruire i propri livelli, un po’ come avviene oggi con strumenti come Super Mario Maker.

È curioso riprendere in mano, dopo quasi quarant’anni, un programma scritto quando ero ancora studente e ritrovare al suo interno non solo il gioco, ma anche tutte le soluzioni che avevo escogitato per superare i limiti hardware e software dell’epoca.

Di seguito è disponibile il file ZIP con i sorgenti e l’eseguibile pronto per essere avviato tramite DOSBox:

Download Manservant

Per compilare il sorgente, trovate qui sotto una guida dettagliata sui software necessari e le procedure da seguire per creare l’eseguibile.

Come compilare ed eseguire MANSERVANT

Per compilare ed eseguire il gioco su Windows è necessario utilizzare un ambiente DOS. Io ho utilizzato DOSBox-X, un emulatore DOS disponibile per Windows.

1. Installare DOSBox-X

Scaricare e installare DOSBox-X dal sito ufficiale:

https://dosbox-x.com

2. Scaricare MASM 6.11

Per compilare il sorgente è necessario il Microsoft Macro Assembler (MASM) 6.11.

È possibile scaricarlo da:

https://sourceforge.net/projects/masm611/files/MASM611/masm611.rar/download

Estrarre il contenuto dell’archivio in una cartella del disco, ad esempio:

C:\MASM611

3. Installare MASM

Avviare DOSBox-X e montare la cartella appena creata come disco C::

mount c c:\masm611

Entrare quindi nel disco C::

C:

e nella cartella DISK1:

CD DISK1

Avviare quindi il programma di installazione:

SETUP.EXE

È possibile accettare le impostazioni proposte di default e scegliere la cartella in cui installare MASM.

Al termine dell’installazione avremo a disposizione tutti gli strumenti necessari per compilare il nostro programma Assembly.

4. Compilare il sorgente

Copiamo il file MANSERV.ASM nella cartella BIN dell’installazione di MASM.

Da DOSBox-X entriamo quindi nella cartella BIN ed eseguiamo:

MASM MANSERV.ASM

Il comando compilerà il sorgente e genererà il file:

MANSERV.OBJ

5. Creare l’eseguibile

Spostiamo MANSERV.OBJ nella cartella BINR, dove è presente LINK.EXE.

Da DOSBox-X eseguiamo:

LINK MANSERV.OBJ

Accettiamo le opzioni proposte di default. Al termine verrà generato:

MANSERV.EXE

6. Avviare il gioco

Sempre da DOSBox-X possiamo finalmente eseguire il gioco:

MANSERV.EXE

Per modificare la velocità dell’emulazione è possibile utilizzare:

  • CTRL+F11 → rallenta l’emulazione
  • CTRL+F12 → aumenta la velocità dell’emulazione
  • ALT+ENTER → fullscreen

A questo punto non resta che giocare a MANSERVANT, quasi quarant’anni dopo la sua realizzazione.