Java C64-Emulator schreiben

CPU

Lieutenant
Dabei seit
Jan. 2006
Beiträge
704
Hallo,

ich überlege gerade, ob ich einen C64-Emulator in Java schreiben soll. Obwohl es das zwar schon gibt, hätte ich vielleicht doch Interesse daran.

Doch ich habe mich noch nie damit beschäftigt: wie muss ich denn bei der Entwicklung eines Emulators vorgehen? Was mache ich da überhaupt? Gibt es im Inet noch Hilfe?

Gruß,
CPU
 

asdfman

Commander
Dabei seit
März 2008
Beiträge
2.315
Ich habe mal einen gameboyemulator angefangen, der fast die komplette CPU implementiert hat bis mich die
Lust an dem Projekt weiter zu machen verlassen hat. Aber ich denke, das kann als gutes Beispiel dienen, wie
ein Emulator grundsätzlich funktioniert:

http://developer.berlios.de/projects/gb4gp2x/

Du brauchst die Spezifikation der Hardware. Da gab es einmal einen guten Vortrag bei einem C3 über die
Hardware des C64. Werd den mal raussuchen.

€: Da hab ich ihn schon!

http://chaosradio.ccc.de/25c3_m4v_2874.html
 

NullPointer

Lt. Commander
Dabei seit
Okt. 2009
Beiträge
1.570
Den C64 im besonderen kenne ich auch nicht, aber vom Prinzip her besteht so ein Emulator (genau wie die Maschine, die er emuliert, Überraschung ;)) aus Datenspeicher, einem Interpreter für Maschinenbefehle und I/O-Schnittstellen. Die Speicher können z. B. CPU-Register, ein Stack und/oder ein flacher Heap (letzterer sehr einfach durch einen Byte-Array nachbildbar, ein Stack ist auch nicht viel schwerer). Der Interpreter muß die Maschinenbefehle aus dem Befehlssatz der CPU ausführen können und jeweils mit dem Speicher und den I/O-Schnittstellen interagieren. Letztere sind dafür verantwortlich, die Peripherie des emulierten Gerätes (Tastatur, Monitor, Laufwerke etc.) darzustellen - das ist hier vielleicht die größte Herausforderung.

Was du auf jeden Fall brauchst, ist die Spezifikation, die asdfman dir schon verlinkt hat. Damit sollten die Teile 1 und 2 (Speicher und Interpreter) schon recht einfach werden. Auch über die Ansteuerung von Tastatur, Bildschirm und Floppy des C64 sollte da was drinstehen. Dann mußt du dir nur noch entsprechende Gegenstücke für das reale System einfallen lassen - bei der Tastatur wohl recht "straightforward", für den Monitor könntest du z. B. ein grafisches Java-Fenster benutzen usw. :)
 

ljnk

Lt. Junior Grade
Dabei seit
Mai 2008
Beiträge
345
Solltest du wirklich an sowas arbeiten und das ganze als projekt aufziehen, dann pack das ganze doch mal nach github - eventuell könnte ich mich für so ein projekt erwärmen :)
 

asdfman

Commander
Dabei seit
März 2008
Beiträge
2.315
Und warum? Ich glaube, jede Programmiersprache ist dazu gleich gut geeignet und es ist nur eine Sache der
persönlichen Vorliebe, was man am Ende dafür nimmt.
 

ljnk

Lt. Junior Grade
Dabei seit
Mai 2008
Beiträge
345
gibt tatsächlich keinen grund, das ganze nicht in java zu implementieren - im gegenteil, so kommt man recht schnell zum ziel. aber um sowas einschätzen zu können, braucht man doch etwas an erfahrung.
 

CPU

Lieutenant
Ersteller dieses Themas
Dabei seit
Jan. 2006
Beiträge
704
Ich denke, dass einfach eine menge Leute (ich will hier keinem etwas unterstellen!!!) - die Java nicht besonders mögen - immer wieder als Ausrede nutzen "Java ist doch keine richtige Programmiersprache ... plattformunabhängig ... da kann ja die performance ja nichts sein". Hab ich selbst schon erlebt ... Aber ich mag JAVA :D Einfach eine schöne, saubere Programmiersprache.

Nun zum Emulator (ich benötige etwas psychologische Betreuung für Informatiker):

Also, ich finde, dass so ein Emulator-Projekt für mich schon etwas besonderes ist. Nach Netzwerkprogrammierung, Spieleprogrammierung kenne ich mich nun ziemlich gut in Java aus und sowas ist halt mal etwas anderes.

Dennoch weiß ich nicht, ob ich eine "CPU" schreiben kann, die die Befehle der ROM ausführen kann ... mit einem Arbeitsspeicher ... in diese Richtung habe ich noch nie gearbeitet. Denn das ist ja schon im "Bereich von Assembler" und so. Mit Bits und Bytes rum spielen.

Es fehlt mir einfach sowas wie die Grundlagen. Ich weiß, was ich tun muss (Datenspeicher, einem Interpreter für Maschinenbefehle und I/O-Schnittstellen implementieren). Aber irgendwie kann ich nicht anfangen ...

Daher glaube ich, dass ich da lieber die Finger von lasse ... andererseits wäre ja der Lerneffekt hoch, wenn ich mich da durcharbeite ...

Was meint Ihr?

Gruß,
CPU
 

refri89

Cadet 4th Year
Dabei seit
Mai 2010
Beiträge
95
..."Ich denke, dass einfach eine menge Leute (ich will hier keinem etwas unterstellen!!!) - die Java nicht besonders mögen - immer wieder als Ausrede nutzen "Java ist doch keine richtige Programmiersprache ... plattformunabhängig ... da kann ja die performance ja nichts sein". Hab ich selbst schon erlebt ... Aber ich mag JAVA Einfach eine schöne, saubere Programmiersprache"...

Ich hätts nicht besser ausdrücken können, empfehle jedem heutzutage alles wenns nur geht in Java programmieren schreibe seit zehn Jahren Großprojekte in Java und nur in Java.
Jetzt sage ich es nochmal: ...glaub Java ist dafür weniger geeignet...

vielleicht geht jetzt ein paar Leuten ein Lichtlein auf, wie und was ich damit meine, aber ich denke mal jeder versteht unter einem Emulator was anderes. Darunter verstehe ich z.B. was wie die VirtualBox wo man z.B. die Original Windows CD einlegt und es wird installiert dann geht es los...


Was ich mir durchaus vorstellen kann, ist daß man unter Java ein Programm schreibt, das aussieht wie der berühmte C64 BlueScreen und einen Recompiler enthält der als Eingabe 6510 Code oder C64 Basic liest und übersetzt bzw. in der Ausführung den C64 so gut wie möglich nachahmt. Das ist aber meines Wissens kein Emulator (EMU = wie bei VirtualBox beschrieben) ?
 
Zuletzt bearbeitet:

asdfman

Commander
Dabei seit
März 2008
Beiträge
2.315
Du weißt offensichtlich nicht, wovon du redest. Unter einem Emulator versteht nicht jeder etwas anderes,
sondern es ist eigentlich relativ klar, was ein Emulator ist.
 

ljnk

Lt. Junior Grade
Dabei seit
Mai 2008
Beiträge
345
refri, schau dir doch einfach mal die passenden wiki artikel an zum thema emulator/vm oder bestehende emulatoren für verschiedene consolen (oben verlinkt, auch in java).

bei interesse an hardwarenaher programmierung mit managed sprachen kannst du dir ja auch mal singularity als src ziehen, da sieht man was möglich ist (und vor allem wie einfach).
 
Zuletzt bearbeitet:

refri89

Cadet 4th Year
Dabei seit
Mai 2010
Beiträge
95
...es ist relativ klar was ein Emulator ist...
SO ISSES !

ES IST DOCH ein Unterschied ob ich z.B. AUTOCAD unter Linux compiliere und dann dort laufen lasse oder die Windows AutoCAD Original Installations CD nehme und damit in einem Emulator das ganze unter Linux laufen lasse oder etwa nicht...? Oder kapiere ich das nicht weil ich meinen SICP heute noch nicht gelesen habe oder andere Internetseiten wo alles so einfach ist.

Bitte um Stellungnahme zu dem gschilderten AutoCAD Beispiel...
 
Zuletzt bearbeitet:

asdfman

Commander
Dabei seit
März 2008
Beiträge
2.315
Ein Emulator implementiert eine Computerarchitektur in Software auf einer anderen Architektur.
Mit Windows oder Linux oder AutoCAD oder was du da wirres redest hat das nichts zu tun.

€: Auch dein VirtualBox was du oben genannt hast ist kein Emulator. Es lässt x86 Software
virtualisiert auf x86 laufen.
 
Zuletzt bearbeitet:

refri89

Cadet 4th Year
Dabei seit
Mai 2010
Beiträge
95
Da ja Java eine Java Virtual Machine dem auszuführenden Java Programm zugrundelegt ist also ein C64 Java Emulator ein vitualisierter Emulator...oder eine emulierte virtuelle Maschine. Man kann also in Java unter Linux einen z.B. Windows XP Emulator schreiben, bei dem ich dann die Original AutoCAD CD einlege und das läuft dann...?
 

asdfman

Commander
Dabei seit
März 2008
Beiträge
2.315
Hä?

€: Nein, du kannst keinen Windows XP Emulator schreiben. Denn Windows ist Software. Ein Emulator implementiert Hardware.
Der Rest deines Geschreibsels da erschließt sich mir aber überhaupt nicht.
 
Zuletzt bearbeitet:

ljnk

Lt. Junior Grade
Dabei seit
Mai 2008
Beiträge
345
ein c64 emulator emuliert den vom c64 angebotenen befehlssatz - emulatoren sind nur eine eingeschobene abstraktionsschicht zwischen systemen, ähnlich dem adapter pattern (ggfs auch facade).

Man kann also in Java unter Linux einen z.B. Windows XP Emulator schreiben, bei dem ich dann die Original AutoCAD CD einlege und das läuft dann...?
klar, je nach implementierung ist es dann aber eine portierung oder ein emulator, wobei sich ersteres anbietet (wine)

Auch dein VirtualBox was du oben genannt hast ist kein Emulator. Es lässt x86 Software
virtualisiert auf x86 laufen.
falsch - die VM emuliert bestimmte hardware (siehe systemsteuerung) auf beliebiger hardware. jede vm stellt eine komplette architektur bereit und emuliert alle nötigen einzelteile wie cpu/hdd/gpu. hier würde ich mich eher auf das englische als das deutsche wiki verlassen..
"Virtual machines can also perform the role of an emulator, allowing software applications and operating systems written for another computer processor architecture to be run."
 
Zuletzt bearbeitet:

asdfman

Commander
Dabei seit
März 2008
Beiträge
2.315
jede vm stellt eine komplette architektur bereit und emuliert alle nötigen einzelteile wie cpu/hdd/gpu
Nicht wahr, zumindest, was die CPU betrifft. Die wird von VirtualBox nicht emuliert, sondern der Code wird
direkt auf der Host-CPU ausgeführt. Code, der nicht im Userspace ausgeführt werden kann, wird rekompiliert.
Die Hardware wird also nicht in Software nachgebildet, was ein Emulator macht.

Man sehe sich hier vielleicht als besseres Beispiel Bochs an, das tatsächlich ein Emulator ist. Mit Bochs kann
man beispielsweise Windows für x86 Systeme auf ARM oder ganz anderen Architekturen booten. Eben weil
es nicht nur Virtualisierung der Hardware durchführt, sondern sie komplett nachbildet.

In deinem Zitat steht "can also perform...". Können sie, ja. Aber VirtualBox macht es nicht.
 
Zuletzt bearbeitet:
Top