nanoboy (Emulator)

    • Release
    • Open Source

    Es gibt 34 Antworten in diesem Thema. Der letzte Beitrag () ist von Flerovium.

      nanoboy (Emulator)

      Heyho :)

      Ich stelle euch heute ein Programmierprojekt vor, an dem seit einigen Monaten gearbeite. Es handelt sich um einen Gameboy Color Emulator, der vollkommen in C# geschrieben wurde. Der Emulator ist in noch nicht fertig, spielt aber schon viele Spiele richtig ab. Die CPU Emulation basiert auf einem effizienten Delegate-System :)
      nanoboy ist Freie Software und steht unter der GPLv3.

      Funktionsumfang
      * Video
      * Audio (alles bis auf Noise-Channel, kleinere Lags))
      * Joypad
      * MBC1 und MBC3 (das sind die Speichercontroller innerhalb der Cartridge)
      ~ More to come!

      Systemanforderungen
      Für flüssiges Abspielen empfehle ich mindestens einen Dual-Core Prozessor. (nicht mehr aktuell)

      Verwendeter Fremdcode / Libraries
      - OpenTK (opentk.com/) Lizenz: The Open Toolkit library license
      - NAudio (naudio.codeplex.com/) Lizenz: MPL

      Medien



      YouTube: youtube.com/watch?v=gpUwcjcdFx4

      Link (github)
      github.com/nanoemu/nanoboy

      Download
      Im Anhang, oder alternativ:
      - Version 0.9: mega.nz/#!blQQ3YCb!tDPeoJ3OZx_…ijacKavH-ilT-pgRNRYFjrmQ4

      Für die aktuellste Version bitte immer von GitHub herunterladen und kompilieren.

      ~Feedback erwünscht

      MfG Flerovium

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Flerovium“ ()

      Ich habe leider keine Ahnung davon, woher ich die Spiele bekomme, jedoch sieht das ziemlich cool aus. Auch der Code scheint so, als ob du Ahnung davon hättest ;) . In manchen Situationen würd ich dir aber zur Benutzung von Dictionaries raten (z.B. ​Dictionary<int, delegate> oder ​Dictionary<string, delegate> wären manchmal warscheinlich deutlich praktischer, der eigentliche Code würde deutlich übersichtlicher).
      Auf jeden Fall weiter so :thumbsup:
      MfG Stefan
      Hey erstmal super Arbeit :thumbsup:
      Hab grade schon en Pull Request geschickt, für die Zukunft versuch alle Streams zu disposen, oder die using Direktive zu benutzten. Stream benutzten unmanaged Ressourcen, die der GC nicht bereinigen kann.
      Mir ist noch was beim Durchlesen deines Codes aufgefallen:

      C#-Quellcode

      1. Form1.CheckForIllegalCrossThreadCalls = false; //Form1.cs Zeile 45

      Das musste unbedingt ändern, schau dir mal die Befehle Invoke, BeginInvoke und Konsorten an, dann brauchste das net. Alles andere ist leider unsauber. Ähnliches gilt auch für die folgenden Konstrukte (ebenfalls in der Form1.cs):

      C#-Quellcode

      1. try
      2. {
      3. //code
      4. } catch {
      5. }

      Auch deine Debugger-Methode in der Form1.cs ist nicht allzu toll gelöst. Starte den Thread doch nur dann, wenn du ihn brauchst, auch das Schlafenlegen des Threads macht das nicht besser.
      Ich hoffe, dass du das verbessern kannst, allzu schwer sollte es ja net sein (wenn du Hilfe brauchst, kannste auch gerne mal nachfragen).

      MfG Stefan
      Ein Lob an dich, der Code sieht auf den ersten Blick top aus. Auch wenn es vielleicht nicht so sinnvoll ist den ganzen Opcode hardcoden zu müssen :D . Das ist immer schön wenn Leute ihre Projekte als Opensource hochladen, dann weiß der Tester direkt woran er ist und der TE bekommt die gezieltesten Tipps.

      nafets3646 schrieb:

      Mir ist noch was beim Durchlesen deines Codes aufgefallen:

      C#-Quellcode

      1. Form1.CheckForIllegalCrossThreadCalls = false; //Form1.cs Zeile 45

      Das musste unbedingt ändern, schau dir mal die Befehle Invoke, BeginInvoke und Konsorten an, dann brauchste das net. Alles andere ist leider unsauber. Ähnliches gilt auch für die folgenden Konstrukte (ebenfalls in der Form1.cs):

      C#-Quellcode

      1. try
      2. {
      3. //code
      4. } catch {
      5. }


      Die Zeilen könnte ich eigentlich 'eh rausschmeißen, weil sie nicht mehr benötigt wird *gg*

      Auch deine Debugger-Methode in der Form1.cs ist nicht allzu toll gelöst. Starte den Thread doch nur dann, wenn du ihn brauchst, auch das Schlafenlegen des Threads macht das nicht besser.
      Ich hoffe, dass du das verbessern kannst, allzu schwer sollte es ja net sein (wenn du Hilfe brauchst, kannste auch gerne mal nachfragen).

      Haha darüber bin auch schon gestolpert ^^ War aber bis jetzt aber zu faul, um es zu fixxen.

      MfG Stefan


      Vielen Dank für dein Feedback!

      Ein Lob an dich, der Code sieht auf den ersten Blick top aus. Auch wenn es vielleicht nicht so sinnvoll ist den ganzen Opcode hardcoden zu müssen . Das ist immer schön wenn Leute ihre Projekte als Opensource hochladen, dann weiß der Tester direkt woran er ist und der TE bekommt die gezieltesten Tipps.

      Vielen Dank! Ja, ich gebe mir viel Mühe "guten" Code zu schreiben. Gibt aber paar Stellen, wo ich selber weiß, dass ich nochmal rübergucken muss, aber nie zu komme ^^

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Flerovium“ ()

      Wenn ich das richtig gesehen habe, benutzt du einfach die pictureBox1.Image Eigenschaft, um das Bild anzuzeigen. Bevor du auf DirectX umsteigst, könntest du etwas viel weniger aufwändiges ausprobieren: Statt der Picturebox das Zeichnen zu überlassen kannst du auch selbst mittels BitBlitting zeichnen: codeproject.com/Articles/6710/…o-Copy-and-Paste-Graphics
      Damit habe ich auf weit größerer Auflösung als bei deinem Gameboy sogar über 1000 fps erreicht (siehe Code hier Zeile 149 ist das Relevante), sollte also genügen.

      edit: hätte ich Ahnung von github, könnte ich das sogar selber machen. Ist eine Überlegung wert...

      Skybird schrieb:

      Das sind ja Ubisoftmethoden hier !

      Ich kann mit dem aktuellen Build von GitHub keine ROMs laden, siehe GitHub: github.com/hackiosa/geekboy/issues/5

      Btw, der try-catch-Block um die Emulator-Aufrufe in der Form1.cs machts einem beim Debuggen unnötig schwer.

      Lg, Solaris

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Solaris“ ()

      Vom ersten "gucken" here sieht das Ding ganz gut aus, und Respekt dafür ich würde mich ansowas nichtmal herantrauen ;) Allerdings würde ich auch mal gerne wissen woher ich Spiele dafür bekomme, da ich es gerne mal testen würde :)
      Software being "Done" is like lawn being "Mowed". (Jim Benson)
      Bei mir gibt es ein anderes Problem, ich habe mir eine ROM-geladen und wollte Sie ausführen, dann kam das Nintendo-Logo plötzlich stoppte aber alles abpruppt und es kam nur ein Piepen (Nintendo-Logo war noch zu sehen).
      Software being "Done" is like lawn being "Mowed". (Jim Benson)