Lezione 02: Organizzazione sorgente e compilazione
Come organizzare i files del vostro progetto
Prima di addentrarci nella prima compilazione di un piccolo sorgente è bene ricordare come il codice deve essere organizzato nel folder di un progetto. Le regole sono poche:
- i file sorgente (C, S, ASM, S80): nella cartella root di progetto o nella sotto-cartella SRC
- gli include file (H, INC): nella cartella root di progetto o nella sotto-cartella INC
- i file risorsa primari (C, S, RC, RES): nella cartella root di progetto o nella sotto-cartella RES
- tutti i restanti file (TFC, TFD, PCM, RAW, WAV, BIN, BMP, PNG): possono essere piazzati dove volete, anche in sottocartelle, basta fare attenzione ad individuare il path corretto ad ognuno di loro all'interno di file di progetto
Vediamo un esempio pratico.
Nel mio folder MEGADRIVE creo prima una sotto-cartella PROGETTI e poi, nella cartella PROGETTI, creo una sotto-cartella denominata HELLO_WORLD per ospitare il nostro progetto di esempio.
Avrò quindi un'alberatura come nella foto a destra.
Prendiamo ora un semplice sorgente di esempio
Non esiste corso di scrittura di codice che non tocchi l'esempio per antonomasia, l'Hello World!
Ricordando che questo non è un corso di C, ecco il codice che ci serve per questo primo test ed alcuni commenti relativi alle funzioni nuove introdotte dalla libreria genesis.h.
Come potete vedere, il codice include la libreria genesis.h che si occupa di esporre tutte le funzioni che vi consentono di interagire con l'hardware specifico del Mega Drive.
Scrive con la funzione VDP_drawText un messaggio a partire dalla posizione X=9, Y=12 e poi entra in un loop infinito all'interno del quale c'è una costante attesa del refresh dello schermo.
Chiaramente nelle prossime lezioni introdurremo in dettaglio sia i comandi sia il contesto (ovvero le specifiche del VDP, del chip audio, etc...). Per ora l'importante è che sia chiaro l'obiettivo del codice.
Digitate questo codice in Crimson Editor (oppure scaricatelo l'esempio da questo LINK) e salvate il codice da voi digitato (oppure quello scaricato) all'interno della cartella HELLO_WORLD nella root. Chiamate il file main.c.
Vi dovreste quindi trovare con una situazione come segue:
Siamo ora pronti per eseguire la prima compilazione di un sorgente.
Compilazione del sorgente
Aprite il prompt di comando ed entrate nella cartella del vostro progetto (in questo caso HELLO_WORLD all'interno della cartella PROGETTI).
Dalla Command Shell digitate:
%GDK_WIN%\bin\make -f %GDK_WIN%\makefile.gen
e premete invio.
A questo punto dovrebbe partire la compilazione e dopo pochi secondi dovreste aver ottenuto un output simile a questo:
Quando la compilazione è terminata, potrete vedere che nel vostro folder di progetto (HELLO_WORLD) ci sono state alcune modifiche alle sotto-cartelle ed alcuni files sono stati creati.
E' stata difatti aggiunta la sotto-cartella out con due ulteriori sotto-cartelle, e la sotto-cartella boot alla sottocartella src.
Sul fronte dei files, uno è quello che per ora ci interessa ed è contenuto nella sottocartella out, ed è il rom.bin.
Avete finalmente prodotto la vostra prima rom per Mega Drive a partire da un sorgente.
Per essere sicuri che sia andato tutto per il verso giusto non resta che lanciare un emulatore e caricare la ROM all'interno dello stesso per verificare che si comporta come previsto, ovvero scrive la frase di benvenuto nello schermo e poi rimane nel loop infinito.
Ecco quanto dovrebbe comparire nell'emulatore appena lanciate la rom.bin appena ottenuta.
Siamo quindi arrivati a fine lezione ed ora abbiamo un piccolo ambiente di sviluppo nel quale sappiamo compilare e testare una ROM.
Nella prossima lezione vedremo prima di spiegare alcuni task di cui si è fatto carico l'SGDK anche su di un codice cosi contenuto, proseguiremo con una piccola sintesi delle capacità del VDP e proseguire con far evolvere il nostro esempio fino a diventare un piccolo clone di Breakout.