← Torna al progetto

Emulatore CHIP-8

Setup and architecture C Step 1 di 15

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.c e src/chip8.h e 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 libreria SDL2.

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:

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:

  • all

    deve compilare i sorgenti in src/ e produrre il programma ./chip8 nella radice del progetto.

  • clean

    elimina 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.

Congratulazioni, hai completato il progetto Emulatore CHIP-8

Tutti i 15 step sono superati.