Emulatore CHIP-8
Project setup
Iniziamo stabilendo uno scheletro applicativo utile. Nel nostro caso andiamo a dividere la macchina CHIP-8 che vogliamo emulare dal layer di piattaforma, che sarà invece utilizzato per l'aspetto grafico, dell'input e del suono.
-
la macchina CHIP-8
sarà definita in due file
src/chip8.cesrc/chip8.he sarà puro C senza librerie o dipendenze esterne alla classica libc. -
la piattaforma
sarà definita nel file
src/main.c. È l'unico file che dipenderà dalla libreriaSDL2.
Nello specifico quindi troviamo la seguente struttura
Makefile // per compilare
programs/ // le ROM da eseguire
src/main.c // il livello di piattaforma, con il main()
src/chip8.h // contiene i prototipi
src/chip8.c // implementazione CHIP-8 emulator
Nella repository git scaricata sono presenti due ROM del CHIP-8 che possiamo utilizzare per iniziare a testare il nostro simulatore man mano che procediamo con i vari steps. Queste sono:
-
Disegna il logo IBM e si ferma.
-
Space Invaders, che alla fine del progetto sarà giocabile.
Un primo main
Per iniziare scriviamo un main che controlla controlla di aver
ricevuto il percorso di una ROM come primo argomento e lo
stampa. Nello specifico, se il programma viene lanciato senza
argomenti, stampa un messaggio d'uso e termina con codice 1; se
invece riceve il percorso di una ROM, lo stampa e termina con codice
0.
$ ./chip8
Usage: ./chip8 <ROM CHIP-8>
$ echo $?
1
Makefile
L'obiettivo del Makefile sarà produrre il binario finale. Nello specifico il make deve supportare i seguenti target:
-
alldeve compilare i sorgenti in
src/e produrre il programma./chip8nella radice del progetto. -
cleanelimina il binario prodotto dalla compilazione.
Durante la compilazione è necessario utilizzare le seguenti flag di compilazione
-Wall -Wextra -Werror -std=c99
L'eseguibile non va versionato: mettiamolo nel .gitignore.
Risultato
Alla fine del primo step dobbiamo ottenere la seguente situazione
$ make
gcc -Wall -Wextra -pedantic -std=c99 -ggdb src/main.c -o chip8
$ ./chip8
Usage: ./chip8 <ROM CHIP-8>
$ echo $?
1
$ ./chip8 programs/test-ibm-logo.ch8
[INFO] - Selected ROM: 'programs/test-ibm-logo.ch8'
$ echo $?
0
Inizia il progetto per avere un repository e poter consegnare gli step. Quello che leggi qui sopra è la versione per C: il linguaggio si sceglie iniziando il progetto.