Einsteigertutorial 2: Einführung in die Screenmodes
| Einführung in die Screenmodes (V1) | ||||||||||
| Inhaltsverzeichnis: | ||||||||||
| | ||||||||||
| Nach dem Ihr im ersten Teil des Tutorials schon mal Vorneweg möchte ich noch bemerken, das viele Anregungen und Sourcen, href="http://emuholic.emulous.com/%7Edovoto/" target="_blank">http://emuholic.emulous.com/~dovoto/ | ||||||||||
| Wer noch nie mit dem Microsoft Visual Studio gearbeitet Im ersten Teil wurde die Installation des Compilers schon ausführlich href="http://emuholic.emulous.com/~dovoto/GBA_AW_r2-6.zip">http://emuholic.emulous.com/~dovoto/GBA_AW_r2-6.zip Einfach die Datei herunterladen und in das Template Verzeichnis des Achtung bei der Wahl des Projektverzeichnisses. Es dürfen keine Leerzeichen Nach der Installation und dem anlegen des Projektes habt Ihr sämtliche | ||||||||||
| Dieser Mode ist wohl am einfachsten zu verstehen. #include "gba.h" int main(void) Wem die Funktion der einzelnen Befehle noch nicht klar ist, der sei In diesem Modus besteht jedes Pixel aus 16Bit. Das heißt wir müssen #define RGB(r,g,b) ((r)+((g)<<5)+((b)<<10)) Die einzelnen Farbanteile können Hier Werte zwischen 0 und 31 annehmen. VideoBuffer[963] = RGB(0 ,0 ,31); Nun solltet Ihr in der Lage sein verschiedene Farben auf den Bildschirm #include "gba.h" #define RGB(r,g,b) ((r)+((g)<<5)+((b)<<10)) unsigned short int * videobuffer = int main(void) Dieses Programm zeichnet drei verschiedene Balken auf dem Bildschirm. Was genau macht also das Programm. Das Macro RGB habe ich oben ja schon unsigned short int * videobuffer = (unsigned short int sagt dem GBA an welcher Adresse sich der Videospeicher befindet. Eine Adresse Mit dem Ausdruck i%240 bestimme ich den sog. Modulo zu 240. Ich teile den Wert i durch 240 und lasse Was bringt mir der Modulo an dieser Stelle? Erinnert Ihr euch, das ich auf Soviel zum Zeichnen in Mode 3. Obwohl er der einfachste | ||||||||||
| Der Mode 4 ist nicht viel komplizierter Man kann sich die Palette wie einen Malkasten mit 256 verschiedenen Im Gegensatz zum Mode 3 hat man aber nun nicht mehr 32*32*32 = 32768 Ganz einfach. Dieser Modus ist viel schneller als der Mode 3 und belegt So, nun genug von den Vorteilen. Wir wollen mal versuchen ein kleines Wir wollen nun ein Bild mit einer Palette auf dem GBA darstellen. Da In diesem Programm könnt Ihr ein Bild der Größe 240*160 Pixel mit 256 #include Standardmäßig erzeugt AGBGFXCon zwei Arrays namens Palette und Map #include "gba.h" u8* videobuffer = (u8*)0x6000000; void WAIT(int x) {for(int i=0;i int main(void) for(i=0;i<256;i++) for(i=0;i<38400;i++) while((*KEYS) & KEY_A); while(1) for(i=0;i<256;i++) Dieses Programm sollte folgendes auf dem Bildschirm darstellen: Sobald man jedoch die Taste A auf dem GBA drückt, sollte das ganze Bild wie Wie genau funktioniert dieses Programm? Als erstes fällt auf, das ein neuer #include “PGLight.h“ In diesem Header befinden sich die beiden vom GBAGFXCon angelegten Arrays u8* videobuffer = (u8*)0x6000000; Neben der schon bekannten Adresse für den Bildspeicher ist nun noch eine Adresse Der Variabelentyp des Bildspeichers ist nun nicht mehr u16 ( unsigned int Mit: SetMode(MODE_4 | BG2_ENABLE); Sagen wir den Gameboy, dass wir im Mode 4 arbeiten wollen. Anschließend werden alle Einträge der Palette in den Palettenspeicher eingetragen for(i=0;i<256;i++) for(i=0;i<38400;i++) Die folgende Zeile: while((*KEYS) & KEY_A); sagt dem GBA, daß er warten soll bis die Taste A gedrückt wird. Eine genaue while(1) j++; if(j==256) WAIT(3000); Diese Schleife führt ein sogenanntes Palette-Looping durch. Dabei wird dem Wie Ihr seht ist auch der Mode 4 noch recht einfach zu handhaben. | ||||||||||
| Kommen wir nun zum letzten der einfachen #define ErstesBild (u16*) 0x6000000 Wie Ihr seht steht der Videospeicher hier nicht mehr an einer festen Adresse. Des weiteren kommen zwei neue Funktionen vor. Beide Funktionen stammen void WechsleBild(void) überprüft, welches Bild gerade angezeigt wird und wechselt dann das anzuzeigenden Die zweite Funktion: void WarteAufAustastluecke(void) while(ScanlineCounter < 160); wartet, bis ein Bild fertiggezeichnet wird. Der Begriff Austastlücke ist hierbei Das Hauptprogramm sieht wieder recht einfach aus: int main(void) int Endpixel = 20480; SetMode(MODE_5 | BG2_ENABLE); videobuffer = ErstesBild; for(i=0;i videobuffer = ZweitesBild; for(i=0;i while(1) Hier zeichnen wir erst ein komplett rotes Bild in den Bildspeicher des ersten Das Programm startet danach eine Endlosschleife, die nichts anderes macht, | ||||||||||
| Mit den nun geschilderten Funktionen der unterschiedlichen Zur Darstellung empfehle Ich den Mode 4. Die Bilder laden zwar fast | ||||||||||
| Wer sich jetzt vielleicht schon fragt, So das war's erst mal. Ich hoffe ihr habt grob verstanden, worauf es | ||||||||||
| Hier giebts noch die ganzen Programme zum download. Ich (Hurik =) Ich mach hier die Fummel arbeit!) hab sie mal geordnet ob sie mit oder ohne Microsoft Visual C++ gemacht worden sind.
Achso noch was wichtiges! LuckyGeorg benutzt in seinem Tutorial (Das habt ihr grad gelesen!) hier andere Header Dateien als ich in meinem. Das ist sehr unpraktisch und könnte Anfänger verwirren. Tut es warscheinlich auch =) ! Sorry. Deswegen: Im nächsten Tut führen wir einheitliche Headers ein. Damit wir euch net verwirren also ladet sie euch runter. Aber was ihr hier gelernt habt bleibt so. lso es ändert sich nix. | ||||||||||
| (c) |




Nintendo 3DS
NDS
PSP
iPhone / iPod
Game Boy Advance
N-Gage
PortableGaming (Forum)



Newsfeed