--- Introducerea folosita la momentul scrieri articolului August 03 2008 ---
Salut! Ma gandeam ca pe masura ce ajung sa stapanesc cate un capitol nou din programarea pentru console precum Nintendo DS sa scriu cate un tutorial, care sa rezume ce am invatat! Cu acestea fiind zise, putem sa ne apucam de treaba!
Cateva detalii legate de soft:Compilator: DevkitARM, pentru procesoarele ARM 7 si ARM9, cele 2 procesoare folosite de Nintendo DS!
Librarii Folosite: PAlib(si libnds)
Ide: Programmers Notepad 2.0 DevKit Edition!
Emulator: No$GBA(NoCash Game Boy Advance)
Puteti sa sariti urmatorul capitol dar sugerez sa il cititi ca sa stiti pentru ce tip de "platforma" lucrati
Despre Nintendo DS:In primul rand Nintendo DS(uneori numit si DS sau NDS) este o consola portabila lansata in 2004! Se poate distinge foarte usor de celelalte console portabile datorita caracteristicilor sale evidente: Cele 2 LCD-uri, unu dintr-e ele luand rolul unui Touch Screen si cele 2 sloturi pentru Diskete(DS si GBA)! As vrea totusi sa dau cateva detalii despre "componentele ascunse" ale sale! Vorbesc despre Microfon, Adaptorul Wireless Integrat( IEEE 802.11 standardizat WI-FI), cele 2 procesoare ARM(9 si 7)! De asemenea dispune de o memorie RAM de 4 Mega si un spatiu de stocare de 256 kb flash memory!
- Cele 2 procesoare au denumirea de Main Core si Sub Core insa doar primul are capacitati de Randare 3D, insa detin 2 enginuri 2D, unu pentru fiecare ecran!
- Hardware-ul suporta Lighting, anti-aliasing, bump-mapping, alpha blending, cel-shading si z-buffering insa este capabil sa redea doar 6144 de vertex-uri sau 2084 de face-uri pe frame!
Sper ca ati inteles acuma pentru ce platforma vom lucra!
Main Tutorial:Disclaimer: Desi v-oi incerca sa acopar cateva lucruri esentiale despre C, acest tutorial nu v-a fi un tutorial C complet! Voi vorbi doar despre strictul necesar pentru NDS Dev! Haideti sa incepem!
Dupa cum stiti este o traditie sa incepi primul tau program intr-un limbaj nou cu Hello World!
Cod sursă:
#include
int main(void)
{
PA_Init();
PA_InitVBL();
PA_InitText(1,2);
PA_OutputSimpleText(1,0,0,"Hello World !");
while(1)
{
PA_WaitForVBL();
}
return 0;
}
Output:
Sa luam fiecare bucatica de cod in parte:
Cod sursă:
#include
int main(void)
Folosim
pentru a include libraria pe care vrem sa o folosim, in cazul nostru
PA9.h!Cod sursă:
int main(void)
{
//code
}
este "corpul" programului nostru!
Cod sursă:
PA_Init();
PA_InitVBL();
PA_InitText(1,2);
PA_OutputSimpleText(1,0,0,"Hello World !");
Folosim
PA_Init() si
PA_InitVBL() pentru a initializa Enginul!
PA_InitText(1,2) este folosit pentru a semnala utilizarea comenzilor de text pe ecranul unul, folosnd background-ul cu numarul 2! Nu va faceti griji daca nu intelegeti, voi vorbi despre acest lucru putin mai in fata!
PA_OutputSimpleText(1,0,0,"Hello World !") afiseaza text-ul pe ecranul unu la coordonata X = 0 si Y = 0!
Cod sursă:
while(1)
{
PA_WaitForVBL();
}
Creeam un LOOP Infinit!
Acum ca ati vazut cum arata un codul sursa al unui program in C as vrea sa va vorbesc despre lucrurile esentiale ale acestui limbaj, lucruri pe care le vom folosi in continuare! Asa ca urmatoarea etapa consta in teorie pe paine!
Incepem cu: Variabilele!
##
Variabile:##
[offtopic]
Daca sunteti nou veniti in mediul C, ca si mine dealtfel, si inainte ati folosit un limbaj basic-Like variabilele ar putea sa va incurce putin deoarece in C ele trebuiesc declarate!
[/offtopic]
Presupun ca stiti deja ce sunt variabilele asa ca nu voi acoperi acest aspect! O sa vorbesc despre cum le putem declara!
Cod sursă:
int X;
Exemplu standard de declarare a unei variabile! Astfel X este o variabila de tip integer! De asemenea putem sa declaram si variabile de tip signed sau unsigned in felu urmator:
Cod sursă:
s16 PozitieX = 5;
s16 PozitieY = 0;
s16 PozitieZ = 27;
unde s =
Signed, 16 = numarul de biti! Cu cat numarul de biti este mai mare cu atat numarul folosit este mai mare! Dupa cum stiti procesoarele de DS sunt procesoare pe 32 de biti! Astfel o variabila unsigned pe 32 biti alterneaza intre 0 si 4 294 967 295 iar una signed intre -2 147 483 648 si 2 147 483 647. De asemenea putem sa folosim u in loc de s! Uitati un exemplu de utilizare:
Cod sursă:
#include
s16 PozitieX = 5;
s16 PozitieY = 0;
int main(void)
{
PA_Init();
PA_InitVBL();
PA_InitText(1,2);
PA_OutputSimpleText(1,PozitieX ,PozitieY ,"Hello World !");
while(1)
{
}
return 0;
}
l
Astfel pe ecranul de sus al consolei noastre va aparea textul
Hello World in pozitia X = 5 si Y = 0!
Variabilele mai pot fi declarate si astfel:
Cod sursă:
s32 x, y, z, marimex, marimey;
Cam asa sta treaba cu variabilele! Sa trecem mai departe si sa vorbim despre: structuri!
##
Structuri:##
Structurile sunt esentiale in orice proiect! Ajuta la organizarea proiectului si il face mai usor de urmarit!
Exemplu de structura:
Cod sursă:
typedef struct
{
s32 x, y, z, marimex, marimey;
}details;
Astfel noi am declarat o structura numita Details! Acum ca stim sa le declaram... ce ar fi sa invatam cum sa le folosim! Simplu! Intai declaram o variabila care foloseste acea structura! Sa zicem ca vrem sa creem o variabila Cub!
Cod sursă:
details cube;
cube.x = 10;
cube.y = 15;
cube.z = 0;
cube.marimex = 200;
cube.marimey = 140;
Astfel am creeat o noua variabile, cube, care al carui type este details! Pare greu? Mie mi se pare ca nu.
Ok acestea au fost structurile! In continuare vom vorbi despre instructiuni de control
##Instructiuni de Control:##
-
Instructiunea IF:Daca ar fi sa analizam logic, instructiunea IF ar fi de genu:
Cod sursă:
Daca Se indeplineste Conditia
Realizeaza Actiunea
Daca Nu
Ia alte masuri
In C lucrurile ar sta cam asa:
Cod sursă:
if( Conditie )
code;
else
code2;
Conditia poate fi adevarata sau falsa, astfel 1 = True(Adevarat) iar 0 = False(Fals)! Daca. virgula, Conditia ia valoarea 1 atunci se executa blocul 1(code) daca nu atunci se executa blocul 2(code2)! Cam asa sta treaba cu IF-ul! Greu? Neh...
-
Instructiunea Switch:Ganditi-va la switch ca la fratele mai mare a lu' nenea IF! Spune fratele mai mare deoarece switch ne permite mai mult de 2 alternative!
Exemplu de utilizare:
Cod sursă:
switch(expresie)
{
case constanta1:
PrimaInstructiune;
break;
case constanta2
aDouaInstruciune2;
break;
......
default:
InstructiuneDefault;
}
Sper ca v-am lamurit si cum sta treaba cu
Switch-ul... Ce mai avem de povestit? Hm... Agh da, sa vorbim si despre LOOP-uri!
-
LOOPIn Basic loop-urile erau foarte clare, si in general se foloseau segmentele
Do -
Loop,
For -
Next etc!
Exemplu de utilizari a loop-urilor in basic:
Cod sursă:
a = 100
do
a = a + 1
Print "Valoarea lui A: "+str$(a)
loop
Codul adauga lui a valoarea 1 de fiecare data pe
loop si afisa pe ecran acest lucru! De asemenea un exemplu
For -
Next in Basic ar fi urmatorul
Cod sursă:
b = 0
For a = 1 to 2000
b = b + 1
Print "Valoarea lui b este: "+str$(b)
next a
Astfel
loop-ul se repeta pana cand a lua valoarea 2000!
- While(Loop)
Exemplu de
loop in C folosind
While:
Cod sursă:
While(2>1)
{
code;
}
Astfel
loop-ul se va tot "invartii" pana cand 2 va fi mai mic sau egal cu unu, sau mai bine zis, va rula la infinit!!
- For(Loop)
Instructiunea
For poate fi privita ca o derivatie a instriuctiunii While insa contine 3 Conditii! In termeni logici ar putea fi privita asa:
Cod sursă:
Pentru A egal cu 0, A fiind mai mic sau egal decat 100, se adauga valoarea 1 la valoarea lui A
In C am traduce asa:
Cod sursă:
for(A=0;A 1)
{
break;
}
Cam acestia ar fi operatorii Logici!
##
Matrici:##
Acum ca am vazut cum sta treaba cu operatorii logici, ce ar fi sa vorbim si despre
matrici? Ce sunt
matricile?
Imaginativa niste Dulapioare pline de cutii in care pot fi depozitate date...! Dupa modul de declararea ele sunt asemanatoare cu variabilele doar ca au in plus un numar intre "[ ]"!
Exemplu de declarare:
Cod sursă:
s32 Matrice[1000];
Si totusi, la ce le folosim? Le folosim ca sa ne usureze munca... Ia ganditi-va ca am avea o lista de 100 de variabile... O.o va dati seama cat am avea de scris? Sa luam un exemplu:
Cod sursă:
s32 valoare[100]
s32 a;
for(a = 0; a < 100;a++)
{
valoare[a] = 1
}
In loc sa scriem 100 de randuri pentru 100 de variabile si sa le dam valoarea 1 am scris 6 randuri de cod! Iar ca sa le citim este lafel de simplu...
Cod sursă:
s32 variabila = 0;
variabila = valoare[2];
Ce am facut aici? Am creeat o variabila si i-am atribuit valoarea pe care o ocupa un numar de pe pozitia a 3-ea! Da pozitia a 3-ea deoarece in C totu incepe de la 0, astfel 0 are prima pozitie, 1 o are pe a doua, si 2 pe a trea! Si lista continua!
Oricum va sfatuiesc sa urmariti
urmatorul tutorial despre matrici, deoarece acopera mai bine acest aspect!
##
Functii de Text:##
Acum ca am lamurit si treburile importante sa ne intoarcem la tutorialul nostru!
La inceputul tutorialului v-am prezentat un cod care afiseaza Hello World pe ecran! Tot acolo am vorbit si despre functia
PA_OutputSimpleText care va permite sa afisati un text pe ecran la anumite coordonate! Insa Libraria PAlib cuprinde mai multe functii text pe care as vrea sa le postez! Acestea sunt:
Cod sursă:
- PA_OutputSimpleText()
- PA_BoxText()
- PA_OutputText()
Functia
PA_OutputSimpleText are urmatorii parametrii:
- numarul ecranului pe care afisam textul
- pozitia X
- pozitia Y
- Textul care trebuie afisat
pecand Functia
PA_BoxText este alcatuita astfel:
- numarul ecranului pe care afisam textul
- coltul din stanga sus al cutiei de pe fundal
- coltul din stanga jos al cutiei de pe fundal
- coltul din dreapta sus al cutiei de pe fundal
- coltul din dreapta jos al cutiei de pe fundal
- Textul care trebuie afisat
- limita de caractere care vor fi afisate!
iar Functia
PA_OutputText este organizata astfel:
- numarul ecranului pe care afisam textul
- pozitia X
- pozitia Y
- Textul care trebuie afisat
- argumente!
De asemenea trebuie tinut minte ca, pentru a folosi functile de text este necesar ca dupa initializarea librariei sa initializam Textul! Acest lucru se poate face astfel:
Cod sursă:
PA_Init();
PA_InitVBL();
PA_InitText(1,2);
Dupa cum am mai spus
PA_Init() si
PA_InitVBL() sunt folosite pentru a initializa libraria
PA_InitText(1,2) initializeaza folosirea textului pe ecranul 1 folosind backgroundul 2!
Parametri PA_InitText()
- Ecranul pe care afisam(1 pentru ecranul de sus, 0 pentru ecranul de jos)
- Background-ul folosit(0, 1, 2 sau 3)
Nota Personala Am tot in zis in cateva randuri despre Background-uri insa nu am spus si ce sunt ele! Imi cer scuze pentru asta si promit ca o sa dezbat acest lucru intr-un tutorial viitor!
Daca Simple Text afiseaza pe ecran un string, Advance text permite sa afisam continutul unei variabile sau un sir de caractere! Uitati un exemplu pentru afisarea pe ecran a unei variabile de tip float:
Cod sursă:
float numar=7.349;
PA_OutputText(1,0,0,"Valoarea variabilei numar este: %f ",numar);
Acelasi lucru este valabil si pentru celelalte variabile! De retinut faptul ca folosim
%f pentru
Float,
%d pentru
integer si
%s pentru
string!
Hey super! Am invatat sa folosim C si PAlib ca sa afisam text pe ecranul consolei noastre favorite! Haideti sa il si coloram! Pentru acest lucru putem sa folosim una din functiile de mai jos:
-
PA_SetTextCol-
PA_SetTextTileCol-
%c_Sa le luam pe fiecare in parte:
PA_SetTextCol Parametrii
- ecranul unde vrem sa folosim acea culoare
- valoare rosu
- valoare verde
- valoare albastru
Atentie! PA_SetTextCol da aceeasi culoare la tot textul, fie ca a fost scris inainte sa folosim functia, sau dupa ea!
Cum setam culorile? Fiecare parametru de culoare are o valoare de la 0 la 31 aceasta constand in faptul ca 0 = intensitate minima, si 31 culoarea la intensitatea maxima! Combinand cele 3 culori putem obtine altele! Exemplu:
Cod sursă:
Albastru: RGB: 0,0,31
Rosu: RGB: 31,0,0
Verde: RGB: 0,31,0
Alb: RGB: 31,31,31
Negru: RGB: 0,0,0
PA_SetTextTileCol Parametrii
- ecranul unde vrem sa coloram tile-ul
- culoarea pentru noul text (valori de la 0 - 9 )
Cifrele pentru culori sunt urmatoarele:
Cod sursă:
0 = alb
1 = rosu
2 = verde
3 = albastru
4 = mov
5 = albastru deschis
6 = galben
7 = gri deschis
8 = gri inchis
9 = negru
Cum putem sa folosim aceasta functiie? Urmariti exemplu' de mai jos
Cod sursă:
PA_SetTextTileCol(1, 4);
PA_OutputSimpleText(1,2,4,"Text Colorat");
Ultima dar nu cea din urma functie este
%c_ unde _ tine locul unei Culori! Folosind-o impreuna cu Advance Text putem sa coloram diferit fiecare text pe care il scriem! Cifra culorilor este aceeasi ca la
PA_SetTextTileColExemplu de utilizare:
Cod sursă:
PA_OutputText(0, 0, 0, "%c3Text Albastru %c1 Text Rosu %c5E%c2T%c6C");
Cam asta este tot! Nu cred ca pare atat de greu nu? Sincer mie mi se pare mult mai interesant sa prezint o aplicatie scrisa de mine pe ecranul unei console, decat pe cel al unui pc!
-------------------------------End of Article---------------------------------------
Este un tutorial mai vechi, scris de mine pentru un forum de programare si "securitate"

. Stiu ca nu se compara cu alta tutoriale deja existente, si ca libraria este foarte simpla de folosit, dar poate este vreun incepator pe acolo care are nevoie de o mica indrumare. Eu cel putin m-am distrat copios lucrand la aplicati pentru DS-ul meu.
Edit: Vai ce de greseli de ortografie si punctuatie pe mine

. Edit, edit edit!