Interview mit Markus Hohmann, dem Entwickler von JavaCPC*
Mittlerweile dürfte für jede 8-Bit-Plattform der 1970er- bis 1990er-Jahre eine Software-Emulation verfügbar sein. Ein Trend, der sich angesichts der immer schnelleren Emulationshardware in den letzten Jahren deutlich zeigt, ist die Online-Emulation im Browser. Emulatoren nutzten dazu neben JavaScript und HTML zumeist JAVA, mit dem sich als Programmiersprache plattformunabhängige Applets schreiben lassen. Stefan Höltgen sprach mit Markus Hohmann, der über die letzten Jahre hinweg für Amstrad-Computer den Emulator JavaCPC entwickelt hat, welcher unter verschiedenen Betriebssystemen und im Webbrowser läuft. Eine Besonderheit an dem Projekt ist, dass der Autor die JAVA-Programmierung quasi durch die Erstellung seines Emulators erlernt hat.
Stefan Höltgen: Wie und wann bist du zum CPC gekommen?
Markus Hohmann: Weihnachten 1985 habe ich den Schneider CPC 464 bekommen. Da habe ich mich ein wenig mit BASIC in die Materie eingearbeitet und kleinere Programme geschrieben. Zu meinem 14. Geburtstag im April 1986 habe ich dann die DDI-1-Floppy bekommen. Danach ging die Zeit des »Swappens« los, indem man mit Freunden Spiele getauscht hat. Da es allerdings nicht so viele CPC-User in meiner Nähe gab, wurde dies auf dem Postweg abgewickelt. Das hielt so etwa bis in die Mitte der 1990er-Jahre an. Zwischen 1993 und 2004 habe ich das Hobby aus den Augen verloren. Danach habe ich meinen original 464 wiedergefunden, leider aber ohne jegliche Peripherie und Datenträger. So habe ich mir eine kleine Sammlung über eBay zusammengestellt.
SH: Wann hast du mit dem Programmieren des Emulators angefangen und welchen Anlass hattest du dazu?
MH: Das war 2004, das Jahr, in dem ich das Java-Applet »JEMU« (jemu.winape.net) im Internet gefunden habe. Bis 2006 hatte ich allerdings von Java mal so gar keinen Schimmer und habe es nur hin und wieder mal angeschaut. Danach habe ich mir dann überlegt, mich selbst in Java reinzufuchsen, und habe an den Sourcen gespielt. Das Resultat waren ein paar kleinere Verbesserungen an JEMU, wobei ich die anderen 8-Bit-Systeme entfernt habe, und mich nur der CPC-Emulation gewidmet habe. Der Anreiz für das Ganze ist ganz klar die Tatsache, dass der CPC damals mein allererster Computer war.
SH: Und ab wann ist JavaCPC dann eine eigenständige Applikation geworden?
MH: 2010 hatte ich dann die Idee, diverse Tools und Anwendungen direkt in den Emulator zu integrieren, und damit man alles bequem finden kann, habe ich dem Emulator seinen eigenen »Desktop« verpasst. Dieser lässt sich natürlich auch deaktivieren, so dass der Emulator wie andere Emulatoren auch agiert. Diesen Emulator entwickle ich derzeit immer noch weiter, habe mich aber seit 2012 zunächst mal mit einem Ableger befasst, welcher die CPC-Plus-Emulation beinhaltet. Sollte diese Emulation eines Tages ausgereift sein, möchte ich die Plus-Emulation natürlich auch in den JavaCPC aufnehmen. Derzeit eignet sich die Plus-Emulation allerdings nur für den Einsatz in einer Webseite, wo man einige Spiele darauf spielen kann.
SH: Was sind für dich die besten und/oder wichtigsten Features des Emulators?
MH: Für mich wichtig ist, dass oft benutzte Programme und Features mit im Emulator integriert sind. So muss ich zum Beispiel nicht erst eine andere Anwendung starten, wenn ich Dateien von/auf DSK-Image kopieren möchte, sondern kann dies direkt über den integrierten Desktop machen. Nicht unwichtig ist auch der inzwischen recht umfangreiche Debugger, mit dem man sogar BASIC-Programme debuggen und tracen kann. Auch zu erwähnen ist der von mir selbst programmierte Z80-Assembler, welcher vom Aufbau her zwar recht simpel ist, womit man aber schon eine Menge an Programmen schreiben kann. Da ich selber eigentlich gar keine Ahnung von Assembler habe, bin ich darauf schon ein wenig stolz. Desweiteren be ndet sich eine Paint-Applikation im Emulator, womit man direkt in den laufenden CPC pixeln kann, Fotos umwandeln kann und vieles mehr. Alles in allem nde ich, dass die Sammlung der Anwendungen zumindest auf Windows basierten Rechnern das Entwickeln von CPC-Software und Bearbeiten von vorhandenen Medien schon stark vereinfacht. Hier halte ich mich an das Prinzip: Man kann es verwenden, muss man aber nicht. Wer etwas nicht braucht, braucht es auch nicht zu benutzen.
SH: Worin unterscheidet sich JavaCPC von anderen CPC-Emulationen?
MH: JavaCPC unterscheidet sich in sofern von anderen Emulatoren, als ich wirklich versuche, so detailliert wie möglich die alte Peripherie zu emulieren. Dazu gehören folgende Features: DK’Tronics- beziehungsweise Amstrad-SSA-1-Sprachsynthese, die Multiface-II-Emulation, (welche allerdings manchmal noch zickt), die Digiblaster- und Amdrum-Emulation, das sind simple D/A-Wandler, welche an der Originalhardware über den Drucker- beziehungsweise Expansionsport betrieben wurden, und 8-Bit-Samples abspielen können. Eine einfache Textdrucker-Emulation, worauf sich textbasierte Medien »Drucken« lassen können. Zur Verfügung steht auch eine sehr komplexe AY-Emulation mit einer Auswahl an verschiedenen Lautstärke-Kurven. Diese sind so gut wie möglich dem original AY-Chip nachempfunden. Der Emulator bietet eine relativ gute Emulation des CRTC und GateArray-Chips, was das Abspielen auch recht komplexer, hardwarebasierter Demos ermöglicht. Dann gibt es natürlich auch eine Tape-Emulation, welche so wirklichkeitsnah wie möglich das Abspielen und auch das Aufnehmen von Daten-»Kassetten« in Form von WAV-Dateien ermöglicht. (Diese WAV-Dateien lassen sich dann auch auf Windows-Systemen direkt wieder in das CDT-Format umwandeln.) Und – passend zum Heftthema – jede »bewegliche« Peripherie stellt sogar die Geräuschkulisse dar: Die Floppy klackert und bewegt sich, man hört den Kassettenmotor und ähnliches.
SH: Welche besonderen Schwierigkeiten bietet die CPC-Plattform bei der Emulation?
MH: Im Prinzip ist der CPC sogar recht simpel aufgebaut. Wer sich also mit Elektronikkomponenten sehr gut auskennt, sollte auch keine Schwierigkeiten haben, diese zu emulieren. Da ist allerdings bei mir das Problem, dass ich von solchen Dingen eigentlich gar keine Ahnung habe. Ich werkele nach der Methode »Versuch und Irrtum« herum, und nde so Verbesserungen beziehungsweise neue Features heraus. Dabei ist dann die Emulation vielleicht nicht 100 Prozent genauso, wie das originale Vorbild, aber sie funktioniert. Die Funktion ist für mich besonders wichtig, und nicht der »kosmetische Aspekt«. Der Digiblaster beispielsweise sendet in meiner Emulation die Audiosignale an den emulierten AY-Chip und dieser wiederum sendet seine Signale an die Audioausgabe. Im Original sieht das anders aus: Beim Digiblaster werden die Lautsprecher an die Erweiterung angeschlossen, und bekommen die Audiosignale direkt. In meiner Emulation kann ich aber auf einen zweiten Audioplayer komplett verzichten. Genauso ist es auch bei den Audiosignalen aus der Tape-Emulation: Die werden auch direkt in den AY-Ausgang gespeist. Die CRTC-Emulation steckt voller »schmutziger« Routinen, welche so garantiert nicht im original Chip zu nden waren. Das ist mir aber egal. Wichtig ist halt, dass das Bildergebnis passt.
SH: Welche Hardwarebestandteile sind besonders knifflig zu emulieren und wie hilfst du dir da mit deinen mangelnden Hardwarekenntnissen weiter?
MH: Besonders schwierig ist für mich derzeit, die CPC-Plus-Emulation zu verwirklichen. Ich habe dabei sehr guten Kontakt zu Kevin Thacker (dem Arnold-Entwickler), welcher mir hier und da schon mal Tipps gibt. Auch die ASIC-Emulation ist nahezu eins zu eins aus Arnold übernommen. Natürlich habe ich von da leider auch die Bugs, welche in Arnold enthalten sind, übernommen. Auch Richard Wilson (Entwickler von WinApe, JEMU) steht mir oft mit Rat & Tat zur Seite. Da ist allerdings wiederum das Problem, dass WinApe in Delphi und x86-Assembler programmiert wurde, wovon ich mal gar keine Ahnung habe. Also bin ich geduldig, werkele hier und da ein wenig herum, und oftmals passt das dann grade so, dass ich es übernehmen kann. Natürlich zieht das ein Problem mit sich: Repariert man ein Feature, kann man davon ausgehen, dass zwei neue Probleme entstehen.
SH: Soweit ich weiß, sind nicht alle Unterlagen der CPC-Hardware bekannt. Das spezielle Gate-Array gehört dazu. Wie emuliert man ein »unbekanntes Hardwareteil«? Was muss man überhaupt von der zu emulierenden Plattform wissen, um einen Emulator zu programmieren?
MH: Wie schon oben angesprochen, verstehe ich von der eigentlichen Hardware selbst nur wenig. Ich probiere herum, leite Routinen um, manipuliere sie, und wenn das Ergebnis besser ist, als das Ergebnis zuvor, dann übernehme ich es. Glücklicherweise gibt es Webseiten mit Ressourcen, wo auch Chips wie das GateArray recht umfangreich beschrieben sind. Es fällt mir allerdings sehr schwer, mich in die meist englisch- oder französischsprachigen technischen Dokumentationen einzulesen. Da komme ich dann wieder an den Punkt »Trial and Error«.
SH: Wieso hast du deinen Emulator unter Java entwickelt? Die Sprache hat zwar besondere Vorteile (etwa relative Plattformunabhängigkeit), gilt aber nicht gerade als die am leichtesten beherrschbare …
MH: Es gibt sicherlich vorteilhaftere Programmiersprachen als Java, aber ich habe damals den JEMU im Internet gefunden und damit angefangen, an den Sourcen herum zu spielen. Gelernt habe ich Java nie systematisch und auch noch nie ein Buch darüber gelesen. Alles, was man in JavaCPC sehen kann, habe ich mir von der Pike auf selbst beigebracht. Im Laufe der Jahre haben sich dann halt auch meine Programmierkenntnisse verbessert. Hier und da bemühe ich dann mal Google, um die ein- oder andere Routine zu nden – das ist dann aber auch schon alles. Der Emulator wird kontinuierlich weiterentwickelt. Derzeit implementierst du die CPC-Clones und die Spielkonsole. Zunächst mal: Clones entwickle ich nicht wirklich. Vom KC-Compact biete ich lediglich die Möglichkeit, die ROMs davon einzubinden. Der KC-Compact unterscheidet sich in seiner Hardware aber noch weitaus stärker vom CPC; das emuliere ich aber nicht. Die CPC-Plus-Emulation ist leider momentan etwas ausgepowert, weil mir einfach die realen Kenntnisse fehlen. Deswegen komme ich da momentan nicht weiter, sondern warte mal wieder auf einen Geistesblitz (oder ein Wunder).
SH: Neben dem herunterladbaren Java-Applet bist du sehr aktiv, eine online lau ähige Implementierung mitsamt (Spiel-)Software für den CPC zu entwickeln. Außerdem betreibst du ein Forum. Wie reagieren die CPC-Szener auf deine Arbeit? Bekommst du Feedback, Bug-Reports, Verbesserungsvorschläge?
MH: Also auf java.cpc-live.com ist das Feedback sehr hoch, und auch die Besucherzahlen sprechen für sich. Seit dem 8. November 2011 waren schon 58.660 Besucher auf der Seite, die in einer CPC-Rangliste von 29 Webseiten auf Platz 3 steht. Das Forum ist etwas seltener besucht, was mich aber auch nicht weiter stört. Es ist da, und wer Fragen hat, oder etwas dazu beitragen möchte, kann dies dort gerne machen. Die CPC-Szene ist eigentlich recht gut am »Werkeln«, wenn man über die Landesgrenzen hinaus schaut. Da ist auch die gegenseitige Mitarbeit recht gut, und macht Spaß. Innerhalb Deutschlands ist das leider nicht ganz so. Mittlerweile habe ich mich aus dieser Szene auch recht weit zurückgezogen, da mir das Ganze nun doch nicht so wichtig ist, als dass ich mir jeden Tag Gedanken darüber machen möchte.
SH: Was ist künftig geplant?
MH: Geplant ist, dass sämtliche CPC-Typen (464, 664, 6128, 464+, 6128+, GX4000, CSD) eines Tages in dem »JavaCPC Desktop« integriert werden. Wer mal drauf geachtet hat: »JavaCPC Desktop«, »connected« sogar das »Device«-ASIC, welches allerdings ohne Funktion ist, und nur grob implementiert ist. Weiter geplant ist natürlich die Aufnahme von zusätzlichen Spielen und Demos auf java.cpc-live.com, wo man die Inhalte direkt im Browser ansehen kann. Auch würde ich meine Webseite cpc-live.com gerne noch weiter ausbauen, aber mir fehlt dazu die Motivation. Ich stelle mir dort eigentlich ein großes CPC-Archiv vor, mit Spielen, Anwendungen und vielem mehr, aber für mich alleine ist dieses Projekt dann doch zu umfangreich und das Feedback zu gering. Sollte sich tatsächlich mal ein mehrköp ges, motiviertes Team nden, lässt sich da bestimmt etwas erreichen. Jeder ist also herzlich dazu eingeladen, sich dabei zu beteiligen.
Link zu JavaCPC: http://cpc.devilmarkus.de/news.php
* Zuerst erschienen in: Retro #28 (Sommer 2013), S. 66-68.