# GBA Emulator machen - wie geht das?



## thomas.g (19. Jun 2005)

Hi,

ich habe jetzt das Grundgerüst meines MediaPlayers fertig gestellt.
Nun möchte ich ein Feature einbauen, welches erlaubt, GBA Roms abzuspielen, doch ich habe keine Ahnung wie ich da am besten beginnen sollte.

Klar möchte ich das selbst programmieren aber am besten wäre natürlich ein Tutorial oder zumindest eine kleine Anleitung dazu von Vorteil .....

Ich würde mich sehr über Antworten die mir helfen freuen!

PS: Sobald der MediaPlayer fertig ist, stelle ich ihn zum Download bereit! (Linux, und Windows kompatibel)

thx


----------



## KISS (19. Jun 2005)

nur um ganz sicher zu sein, du willst game boy advance spiele mit java emulieren?


----------



## thomas.g (19. Jun 2005)

ja, war mal so ne idee für ein Feature, doch ich bin mir nicht sicher ob das so geht, wäre aber toll wenn!


----------



## KISS (19. Jun 2005)

naja, du musst die intern verwendete api nachbilden, wahrscheinlich auch teile der gpu. natuerlich musst du die roms auch dekodieren
am besten du schaust mal in die foren existierender projekte
zb hier


----------



## 0xdeadbeef (21. Jun 2005)

KISS hat gesagt.:
			
		

> naja, du musst die intern verwendete api nachbilden, wahrscheinlich auch teile der gpu. natuerlich musst du die roms auch dekodieren
> am besten du schaust mal in die foren existierender projekte
> zb hier



Mit API und Teilen der GPU wird es nicht getan sein. Was meinst Du mit "Roms dekodieren" ??? Sind die GBA-Roms verschlüsselt? Ich kann mir bei der vebauten Hardware kaum vorstellen, daß sie "ernsthaft" verschlüsselt sind. Außerdem sind die im Internet kursierenden ROM-Images mit Sicherheit nicht mehr verschlüsselt.

Wie auch immer: zunächst mal muß man die CPU komplett emulieren - vermutlich gibt es da zwar schon frei verfügbare Lösungen, aber nicht unbedingt in Java. Ich bezweifle ehrlich gesagt auch, daß Grafik und Sound beim GBA über eine klar definierte Software-Schnittstelle programmiert werden. Ich fürchte, da wird noch direkt im Grafikspeicher und in entsprechende Register der GPU reingeklotzt. Also heißt es auch die gesamte GPU, den Soundprozessor und alle andere Hardware zu emulieren. Dazu kommt u.U. noch das Adreßmapping der Module. War zumindest beim originalen GB ein Graus.

Wenn man WIRKLICH Pech hat, dann müssen Teile der Emulation oder auch alles taktgenau sein. Z.B. beim C64 haben die Programmierer in der Endphase die Hardware so ausgereizt, daß einige Spiele nur dann richtig laufen, wenn sich die emulierte CPU usw. nicht nur "black box"-mäßig so verhält wie die originale, sondern in jedem Taktzyklus das korrekte Verhalten synchron zur restlichen emulierten Hardware zeigt.
Bei älteren Modul-Videokonsolen (Sega Genesis usw.) haben die Softwarehersteller z.B. Kopierschutzverfahren eingebaut, die etwa auf den Zugriffszeiten des Roms basieren. Beim Zugriff aus einem Kopiermodul (RAM) war der Zugriff schneller und die Software lief nicht.
Weiß nicht, wie das beim GBA ist, aber beim SNES haben die Hersteller in die Module später auch noch andere Hardware verbaut. Angefangen mit batteriegepuffertem RAM bis zu 3D-Prozessoren (SuperFX). Muß man dann auch irgendwie nachbilden.

Dazu kommt noch, daß es üblicherweise keine offiziellen Unterlagen gibt, die die exakte Funktionsweise der Hardware beschreiben - insbesondere Nintendo gibt sowas keinesfalls raus. Und die verbauten Chips sind oft Spezialanfertigungen, die in dieser Form nicht auf dem freien Markt erhältlich sind - also bekommt man auch vom Hersteller keine Dokumentation. Frag nicht, was es für ein Spaß ist, die exakte Funktionsweise einer GPU o.ä. per reverse engineering herauszubekommen. 
Überhaupt würde ich behaupten, daß Emulatorentwicklung - speziell bei Spielekonsolen und Heimcomputern zumindest am Anfang zu 80% reverse engineering ist.


----------



## thomas.g (21. Jun 2005)

naja, möglich is es mit Java.
Guckst du hier: http://java-emu.emuunlim.com/projects.html

Doch leider habe ich keinen blasen schimmer davon, wie die das gemacht haben .... :cry:


----------



## 0xdeadbeef (21. Jun 2005)

Ich habe nicht behauptet, daß es unmöglich ist. Es gibt einen Haufen Emulatoren, die in Java geschrieben sind. Allerdings sind das meist Portierungen von Emus in C.
Ich wollte nur verdeutlichen, daß das nichts ist, was man sich in eins, zwei Wochen aus dem Ärmel leiert.


----------

