Ultima modifica da un moderatore:
Ciao a tutti, ho trovato una guida su internet su come creare homebrew per nds e adesso la posto...
Crediti:Aurelio
Prima di poter programmare abbiamo bisogno dell' ambiente di sviluppo. Per prima cosa scarichiamo il devkitPro updater aggiornato all' ultima versione (da Browse devkitPro Files on SourceForge.net ) e installiamo tutto.Il programma vi chiederà quali pacchetti installare, a noi devkitPPC(gamecube e wii) e devkitPSP(psp) non ci serviranno ma, in caso vi venga da programmarci sopra in futuro, installateli senza problemi.Una volta che avrete scelto i pacchetti da scaricare, andate sempre avanti e aspettate che il programma termini di scaricare ed installare i pacchetti. A processo terminato potrete iniziare a programmare
Per compilare i vostri codici create un file chiamato build.bat, da inserire nella cartella del progetto, con all'interno questo codice:
A questo punto vi basterà fare doppio click su questo file e si avvierà la compilazione. A fine compilazione, se non si presenteranno errori, avrete il vostro bel .nds da inserire direttamente nella vostra card.
adesso impareremo a creare il famosissimo, quanto inutile, hello world.
Per prima cosa copiamo la cartella arm9 situata in C:/devkitPro/examples/nds/templates/ e copiamola dove vogliamo dandole il nome del nostro programma. Importante, tutti i progetti dovranno trovarsi in directory che non contengono spazi, per esempio: C:/Documents and settings/aurelio/desktop non va bene, invece C:/devkitPro/progetti va bene. Per mantenere un ordine vi consiglio di crearvi una cartella chiamata progetti e collocarci dentro tutti i vostri progetti.
Bene, detto questo, entrate nella cartella da voi copiata e troveremo una cartella chiamata source, un file chiamato Makefile, e altri due file che sono template.prj e template.pnproj. La prima cartella contiene un file chiamato main.c in cui noi inseriremo il nostro codice, il Makefile contiene tutti i parametri di compilazione(per ora non preoccupiamoci di questo), mentre gli altri sono file di progetto per il Programmer' s notepad. Apriamo il file template.pnproj e, probabilmente, windows vi chiederà di selezionare con che programma aprire il file, quindi noi selezioniamo il Programmer' s notepad che si trova in C:/devkitPro/Programmers notepad/ sotto il nome di pn.exe.
Una volta aperto il file ci ritroveremo di fronte a vari riquadri: a sinistra ci sarà un riquadro con i file di progetto e al centro un riquadro in cui appariranno i file di codice una volta aperti. Dal riquadro a sinistra selezioniamo il menù source e poi apriamo il file main.c. Adesso cancellate tutto il codice presente nel file e sostituitelo col seguente codice seguente.
.
Per impostare la posizione del cursore dobbiamo usare il comando
che va inserito in una stringa da stampare col printf anticipata da \x1b, esempio:
che stamperà "X=5, Y=12" nella posizione dello schermo corrispondente. Attenzione, le posizioni non sono rispettive ai pixel dello schermo, ma sono in relazione ad una tabella di 32 colonne e 24 righe con blocchi di 8*8 pixel. La posizione X=0, Y=0 corrisponde all'angolo in alto a sinistra, mentre la posizione x=31,Y=23 corrisponde all'angolo in basso a destra.
Fatta questa premessa, passiamo ad un codice d'esempio:
Bene, passiamo ora alla stampa su più schermi. Per stampare anche sullo schermo inferiore dovremmo aggiungere
Ultima cosa, quando necessiterete di cancellare tutto il testo da uno schermo(precedentemente selezionato con consoleSelect) vi basterà scrivere
In questa mini-lezione Aurelio vi insegnerà come gestire l'input dal pad e dal touch screen. Ogni frame possiamo ricevere tre informazioni dal pad e dal tocco del touch screen: down, held e up che ci dicono, in ordine, il momento in cui un tasto viene premuto, quando un tasto è tenuto premuto e quando un tasto viene rilasciato.
Gestire gli input è molto facile, all'inizio del ciclo while principale dobbiamo scrivere:
in modo da abilitare la lettura dei dati e leggerli.
Per controllare la pressione di un tasto basterà usare un semplice controllo if in questo modo
Al posto di "tasto" dobbiamo scrivere il nome della variabile contenente il valore del tasto. Le variabili disponibili sono le seguenti:
Ognuno corrisponde al corrispettivo tasto, KEY_TOUCH corrisponde alla pressione dello stilo sul touch screen, KEY_LID, invece, corrisponde alla chiusura della scocca del DS.
Passiamo ora al touch screen.
Anche questa è una cosa molto semplice, basterà dichiarare una variabile di tipo:
Per leggere i valori dal touchscreen richiameremo la funzione:
all'inizio del ciclo while(1).
La coordinata X la leggeremo semplicemente tramite la variabile:
La coordinata Y invece:
Codice di esempio:
Ultima cosa(aggiunta da me):
Per favore non copiate come pappagalli questi codici, capiteli e poi copiateli, aiutano molto...
Spero la guida sia utile, commentate.
Crediti:Aurelio
Prima di poter programmare abbiamo bisogno dell' ambiente di sviluppo. Per prima cosa scarichiamo il devkitPro updater aggiornato all' ultima versione (da Browse devkitPro Files on SourceForge.net ) e installiamo tutto.Il programma vi chiederà quali pacchetti installare, a noi devkitPPC(gamecube e wii) e devkitPSP(psp) non ci serviranno ma, in caso vi venga da programmarci sopra in futuro, installateli senza problemi.Una volta che avrete scelto i pacchetti da scaricare, andate sempre avanti e aspettate che il programma termini di scaricare ed installare i pacchetti. A processo terminato potrete iniziare a programmare
Per compilare i vostri codici create un file chiamato build.bat, da inserire nella cartella del progetto, con all'interno questo codice:
Codice:
make clean
make
pause
adesso impareremo a creare il famosissimo, quanto inutile, hello world.
Per prima cosa copiamo la cartella arm9 situata in C:/devkitPro/examples/nds/templates/ e copiamola dove vogliamo dandole il nome del nostro programma. Importante, tutti i progetti dovranno trovarsi in directory che non contengono spazi, per esempio: C:/Documents and settings/aurelio/desktop non va bene, invece C:/devkitPro/progetti va bene. Per mantenere un ordine vi consiglio di crearvi una cartella chiamata progetti e collocarci dentro tutti i vostri progetti.
Bene, detto questo, entrate nella cartella da voi copiata e troveremo una cartella chiamata source, un file chiamato Makefile, e altri due file che sono template.prj e template.pnproj. La prima cartella contiene un file chiamato main.c in cui noi inseriremo il nostro codice, il Makefile contiene tutti i parametri di compilazione(per ora non preoccupiamoci di questo), mentre gli altri sono file di progetto per il Programmer' s notepad. Apriamo il file template.pnproj e, probabilmente, windows vi chiederà di selezionare con che programma aprire il file, quindi noi selezioniamo il Programmer' s notepad che si trova in C:/devkitPro/Programmers notepad/ sotto il nome di pn.exe.
Una volta aperto il file ci ritroveremo di fronte a vari riquadri: a sinistra ci sarà un riquadro con i file di progetto e al centro un riquadro in cui appariranno i file di codice una volta aperti. Dal riquadro a sinistra selezioniamo il menù source e poi apriamo il file main.c. Adesso cancellate tutto il codice presente nel file e sostituitelo col seguente codice seguente.
Codice:
#include <nds.h> //Include la libnds, importante, da inserire sempre
#include <stdio.h> //Include le funzioni standard di input/output
int main() //Blocco principale di codice, qui inizia il programma
{ //Inizio main
videoSetMode(MODE_0_2D); //Imposta il video alla modalità 0 in 2D, ma su questo ci fermeremo dopo
vramSetBankA(VRAM_A_MAIN_BG); //Setta la VRAM_A per lo schermo superiore
PrintConsole topScreen = *consoleInit(0, 3,BgType_Text4bpp, BgSize_T_256x256, 31, 0, true, true); //Imposta la stampa sullo schermo superiore
consoleSelect(&topScreen); //Seleziona lo schermo superiore per la stampa
printf("Hello World!\n"); //Stampa Hello World! e va a capo(\n)
while(1) //Loop infinito
{ //Inizio while
swiWaitForVBlank(); //Aspetta l'aggiornamento dello schermo (1/60 di secondo)
} //Fine while
return 0; // Ferma il programma
} //Fine main
Per impostare la posizione del cursore dobbiamo usare il comando
Codice:
[y;xH
Codice:
printf("\x1b[12;5HX=5, Y=12");
Fatta questa premessa, passiamo ad un codice d'esempio:
Codice:
int main() //Blocco principale di codice, qui inizia il programma
{ //Inizio main
videoSetMode(MODE_0_2D); //Imposta il video alla modalità 0 in 2D, ma su questo ci fermeremo dopo
vramSetBankA(VRAM_A_MAIN_BG); //Setta la VRAM_A per lo schermo superiore
PrintConsole topScreen = *consoleInit(0, 3,BgType_Text4bpp, BgSize_T_256x256, 31, 0, true, true); //Imposta la stampa sullo schermo superiore
consoleSelect(&topScreen); //Seleziona lo schermo superiore per la stampa
printf("\x1b[12;5HX=5,Y=12\n"); //Stampa X=5,Y=12 alla posizione X=5,Y=12 e va a capo(\n)
while(1) //Loop infinito
{ //Inizio while
swiWaitForVBlank(); //Aspetta l'aggiornamento dello schermo (1/60 di secondo)
} //Fine while
return 0; // Ferma il programma
} //Fine main
Codice:
videoSetModeSub(MODE_0_2D);
Codice:
consoleClear();
Gestire gli input è molto facile, all'inizio del ciclo while principale dobbiamo scrivere:
Codice:
scanKeys();
int down = keysDown();
int held = keysHeld();
int up = keysHeld();
Per controllare la pressione di un tasto basterà usare un semplice controllo if in questo modo
Codice:
if(down & tasto){
//controlla se il tasto viene premuto in questo frame
}
if(held & help){
//controlla se il tasto è premuto, indipendentemente da quando è stato premuto
}
if(up & tasto){
//controlla se il tasto viene rilasciato in questo frame
}
Codice:
KEY_A
KEY_B
KEY_SELECT
KEY_START
KEY_RIGHT
KEY_LEFT
KEY_UP
KEY_DOWN
KEY_R
KEY_L
KEY_X
KEY_Y
KEY_TOUCH
KEY_LID
Passiamo ora al touch screen.
Anche questa è una cosa molto semplice, basterà dichiarare una variabile di tipo:
Codice:
touchPosition[CODE]
in questo modo:
[CODE]touchPosition touch;
Codice:
touchRead(&touch);
La coordinata X la leggeremo semplicemente tramite la variabile:
Codice:
touch.px
Codice:
touch.py
Codice:
#include <nds.h> //Include la libnds, importante, da inserire sempre
#include <stdio.h> //Include le funzioni standard di input/output
int main() //Blocco principale di codice, qui inizia il programma
{ //Inizio main
videoSetMode(MODE_0_2D); //Imposta il video alla modalità 0 in 2D, ma su questo ci fermeremo dopo
vramSetBankA(VRAM_A_MAIN_BG); //Setta la VRAM_A per lo schermo superiore
PrintConsole topScreen = *consoleInit(0, 3,BgType_Text4bpp, BgSize_T_256x256, 31, 0, true, true); //Imposta la stampa sullo schermo superiore
consoleSelect(&topScreen); //Seleziona lo schermo superiore per la stampa
printf("Hello World!\n"); //Stampa Hello World! e va a capo(\n)
touchPosition touch;
while(1) //Loop infinito
{ //Inizio while
scanKeys();
int down = keysDown();
int held = keysHeld();
int up = keysHeld();
touchRead(&touch);
printf("\x1b[1;0HX=%03d\tY=%03d", touch.px, touch.py); // Stampa le coordinate del touch screen
swiWaitForVBlank(); //Aspetta l'aggiornamento dello schermo (1/60 di secondo)
} //Fine while
return 0; // Ferma il programma
} //Fine main
Per favore non copiate come pappagalli questi codici, capiteli e poi copiateli, aiutano molto...
Spero la guida sia utile, commentate.