BlitzBoy - Ein Gameboy Emulator in BlitzBasic

Übersicht Sonstiges Projekte

Neue Antwort erstellen

Jean

Betreff: BlitzBoy - Ein Gameboy Emulator in BlitzBasic

BeitragDo, Jan 05, 2012 18:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Zusammen

Ich möchte euch mein aktuelles Projekt vorstellen, an welchem ich nun schon seit einiger Zeit am arbeiten bin. Es handelt sich dabei um einen Gameboy Emulator welchen ich ich in Blitz Basic geschrieben habe. Der Emulator ist schon ziemlich weit fortgeschritten und es lassen sich viele Spiele ohne Probleme spielen. Das Projekt trägt den Namen BlitzBoy. Surprised

Der Emulator funktioniert folgendermassen:
Insgesamt kann der Gameboy 32 kByte Speicher direkt adressieren. In den unteren 16 kByte befinden sich die ROM Daten, also eigentlich exakt der Inhalt von den .gb Dateien, welche den Bytecode des Spieles beinhalten. In den oberen 16 kByte des Speichers befindet sich der eigentliche Arbeitsspeicher und auch der Grafikspeicher.
Nun liest die CPU, welche etwa einem Intel 8080 Prozessor entspricht, einen Befehl aus dem ROM, interpretiert diesen und liest den nächsten Befehl aus, usw.
Daneben arbeitet die GPU, welche in einem bestimmen Intervall aus dem Grafikspeicher ein Bild zeichnet.
Wer genaueres darüber wissen will, dem empfehle ich folgende Dokumente:
Pandocs
CPU Doku

Auf die CPU Befehle habe ich am meisten Wert gelegt. Diese werden sehr genau interpretiert. Selbst der DAA Befehl (für Dezimalangleichungen) und die Flags bei 16 Bit Arithmetik werden korrekt umgesetzt. Jedoch gibt es trotzdem noch einige Roms, welche nicht korrekt funktionieren. Schuld daran ist meistens der Timer, die GPU oder der Memory Bank Controller.

Der Source: (Blitz+ 1.47)
https://www.blitzforum.de/upload/file.php?id=12254

Hier findet ihr freie Roms:
http://pdroms.de/files/gameboy/

Sollte jemand einen gefundenen Fehler beheben, so wäre ich froh darüber, wenn man mich informieren würde. Ansonsten dürft ihr natürlich mit dem Source machen was ihr wollt. Da ich nicht immer sehr kommentarfreudig war, könnt ihr euch auch bei Unklarheiten an mich wenden. Wink
mfg

Achtung
Ich habe bewusst darauf verzichtet, lizenziertes Material in meinem Emulator sowie auch in diesem Post zu verwenden. Im Internet gibt es viele Roms von lizenzierten Spielen zu finden, jedoch ist deren Verwendung
nicht legal. Desweiteren steht das BlitzForum in keiner Verbindung zu meinem Projekt.
  • Zuletzt bearbeitet von Jean am Mi, Feb 06, 2013 12:29, insgesamt 14-mal bearbeitet

ozzi789

BeitragDo, Jan 05, 2012 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow!
Danke für den Code , werd ich gerne anschauen / testen Smile

Grüsse
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

Seven

BeitragDo, Jan 05, 2012 20:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr schön.

Ich wollte schon seit längerem wissen, wie es zu einem Emulator kommt
und jetzt kommt sowas.

Genial Very Happy

Edit: Die Exe selbst startet. Vom Code aus lässt sich aber nicht starten.
" Function Waitevent not found "

Jean

BeitragDo, Jan 05, 2012 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
@Seven: Kann es sein, dass du BlitzBasic und nicht BlitzPlus verwendest? Ich hätte vielleicht mehr betonen sollen, dass ich BlitzPlus verwendete.
 

Seven

BeitragDo, Jan 05, 2012 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ahso, mein Fehler, steht ja auch dort da:)

Ich achtete nur auf die Überschrift. Trotzdem ein gutes Projekt Smile

Hubsi

BeitragDo, Jan 05, 2012 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Meinen allerhöchsten Respekt, funktioniert einwandfrei Very Happy Wie lange hast Du daran getüftelt?
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

hazumu-kun

BeitragDo, Jan 05, 2012 23:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow ich bin beeindruckt.
Als ich im Subforum then Threadtitel las musste ich erstmal laut lachen und dachte es ginge um irgendeinen Noob der nach Sachen fragt die Blitz einfach nicht packen kann (so rein performancetechnisch). Da hab ich wohl dich und Blitzbasic deutlich unterschätzt, Hut ab!
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Noobody

BeitragFr, Jan 06, 2012 0:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr coole Sache!
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

Tornado11

BeitragFr, Jan 06, 2012 0:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Schöne Sache! Hast du MBC support (1,2.. etc)? Soweit ich das sehe unterstütz du bisher nur 32kb roms?
Ich selber habe auch einen GB Emulator gebastelt (in Java), der schafft jedoch nur den Startibildschirm und eine verbuggte Intro sequenz von Asteroids anzuzeigen...
Hast du zum debuggen andere Emulatoren "zu rate" gezogen? Ich habe dazumal darauf verzichtet, doch ich sehe keinen anderen Weg die Bugs (im z80) effizient zu beseitigen.


Für alle die auch mal in die Welt der Emulator programmierung einsteigen wollen, denen empfehle ich mit einem Chip-8 Emulator zu beginnen.

Jean

BeitragFr, Jan 06, 2012 11:56
Antworten mit Zitat
Benutzer-Profile anzeigen
@Hubsi
Insgesamt habe ich ca 3 Monate daran gearbeitet. Nicht sehr intensiv, trotzdem bin ich immer wieder dran geblieben.

@Tornado11
Momentan unterstützt der Emulator nur MBC1 und natürlich 32 kByte Roms. Da aber die meisten Spiele > 32 kByte den MBC1 verwenden, habe ich es dabei belassen.
Als ich den Emulator programmierte, wollte ich zuerst auch alles komplett selber schreiben. Dies gelang mir dann auch mehr oder weniger, jedoch musste ich feststellen, dass z.B. der DAA Befehl nie genau dokumentiert wurde. So musste ich dort auf einen Open Source Emulator zurückgreifen.

Starwar

BeitragFr, Jan 06, 2012 12:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow, Respekt, respekt. Mehr gibts nicht zu sagen.

Vertex

BeitragFr, Jan 06, 2012 16:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe den Emulator zwar noch nicht getestet, aber ich finde es sehr interessant, auf welche Weise Du die Hardwarefunktionen implementiert hast. Die ganzen CPU-Befehle umzusetzen ist sicher auch nicht trivial, aber das Zusammenspiel mit der GPU, den Timern, dem Keypad etc. finde ich elegant von Dir gelöst. Respekt!
vertex.dreamfall.at | GitHub

klin

BeitragMo, Jan 16, 2012 0:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow das sowas überhaupt in BlitzBasic möglich ist. Ich finde es wirklich toll, dass du uns den Src teilst. Nun habe ich endlich eine Vorstellung, wie Emulatoren gemacht werden.
Wirklich eine tolle Arbeit Very Happy
Ob man es auch auf einen GBA Emulator aufrüsten kann? Wink

Wenn man mal so überlegt, wie "schwer" so ein GB Emulator ist... wie ist es dann bei XBox oder Playstation 1?

Klin

Tornado11

BeitragDi, Jan 31, 2012 1:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Diese "aufrüsten" funktioniert wohl nicht so einfach, da der gba nicht auf der ursprünglichen technik des gb basiert (theoretisch ein verbesserter SNES, jedoch ohne dessen "ungereimheiten"). (Es würde auf das neuschreiben des ganzen Codes herauslaufen)

Schwierigskeitsmässig sieht das etwa so aus (ungefähre Einteilung):
ganz einfach: chip-8
einfach: gb
moderat: NES
mässig komplex: Genesis, GBA, nintendo 64 HLE( high level emulation siehe UltraHLE)
komplex: SNES, ps1 ,nintendo 64 ohne hle
sehr komplex: saturn, ps2

quelle: http://www.emutalk.net/forums/...f7d3e81224

klin

BeitragMi, Feb 06, 2013 11:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich wollte mal nachfragen, ob jemand noch den SourceCode zufällig irgendwo hat?

Danke,
Klin

Jean

BeitragMi, Feb 06, 2013 12:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe den neuen DL-Link oben eingefügt.

Gruss

Neue Antwort erstellen


Übersicht Sonstiges Projekte

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group