"Frodo" "Christian Bauer" (C) "1994-1995 Christian Bauer" "Frodo Bedienungsanleitung" bFrodoub Version 1.3 " Was ist neu? WhatsNew Ein Commodore 64 Emulator für Commodore-Amiga Rechner © Copyright 1994-1995 Christian Bauer Freely distributable " Überblick Overview Wieso noch ein C64-Emulator? " Installation Installation Wie installiere ich Frodo? " Starten/Beenden StartQuit There and back again.... " Einstellungen Settings Die leidige Konfiguration " Tastaturbelegung Keyboard Wo ist an der Tastatur "oben"? " Dateizugriff Files Ein C64 mit Festplatte " Drucker Printer Benutzung von C64-Druckern " Die SID-Karte SIDCard Für die, die den echten Sound haben wollen " Das IEC-Kabel IECCable Wie kommt die 1541 an den Amiga? " Demoprogramme DemoPrograms Die beiliegenden Beispielprogramme " Technische Infos TechnicalInfo Was die Welt im Innersten zusammenhält... " Geschwindigkeit Speed Warum ist er so langsam? " Der Quelltext TheSource Use the source, Luke. " Rechtliches LegalMush Copyright usw. " Bugreports BugReports Hoppla, da läuft was nicht! " Danksagungen Thanks Vielen Dank für die Blumen " Der Autor EmulationWizard Adresse des Programmierers " History History Entwicklungsgeschichte des Programms " Die Zukunft Future Pläne für die nächsten Versionen WhatsNew "Was ist neu?" Die wichtigsten Änderungen zur Version 1.0: Frodo benutzt nun die "6581sid.library" zur Sound-Emulation über die Amiga-Hardware Es gibt einen neuen, sehr schnellen monochromen Amiga-Bildschirmtyp und einen normalen für CyBERgraphics Die Amiga-Grafik-Modi benutzen Double Buffering Die Sprite-Kollisionen lassen sich abschalten, was je nach Programm einen deutlichen Geschwindigkeitszuwachs bringt Es besteht die Möglichkeit, z.B. nur jedes zweite Bild der C64- Grafik berechnen zu lassen, was ebenfalls einiges an Geschwindigkeit bringt Frodo ist nun mehrsprachig Die Floppy-Emulation beherrscht Jokerzeichen (*,?) Genaueres steht in der "Entwicklungsgeschichte History. Hinweis: Die Joystickabfrage hat sich geändert. Die Joysticks werden jetzt nur noch einmal pro Bilddurchlauf abgefragt, statt wie bisher jede Rasterzeile. Ich denke nicht, daß das mit irgendwelchen Spielen Probleme bereitet (wer kann schon so schnell einen Joystick bewegen?), aber sollte das doch der Fall sein, teilt es mir bitte mit. Jedenfalls habe ich "Spindizzy" ausprobiert und selbst schwierige Stellen mit der neuen Emulation geschafft, also sollte es in Ordnung sein. Overview "Überblick" "Those days, the Third Age of Middle-earth, are now long past, and the shape of all lands has been changed." bFrodoub ist ein multitaskingfähiger C64-Emulator für den Commodore Amiga und der erste C64-Emulator der Welt, der kein "64" im Namen hat. :-) (Nein, er hat absolut nichts mit frodo.hiof.no zu tun, das ist purer Zufall.) Frodo wurde speziell dazu entwickelt, die Grafik von Spielen und Demos besser wiederzugeben als die existierenden Emulatoren für den Amiga. Daher benötigt Frodo wesentlich mehr Rechenleistung als andere Emulatoren. Selbst mit einem 25MHz-68040 und einer Grafikkarte ist zur Zeit nur etwas mehr als die halbe Geschwindigkeit eines original-C64 möglich. Dafür zeigt er noch Rastertricks korrekt an, bei dem einem beim "A64" vor lauter Flimmern die Augen tränen. Benötigt wird ein Amiga mit mindestens OS2.1, einem 68020-Prozessor und 1MB Hauptspeicher. Frodo kann sowohl die eingebaute Amiga-Grafik verwenden, als auch EGS-Grafikkarten und die "Picasso" direkt ansprechen, was die Geschwindigkeit der Grafik erheblich beschleunigt. Die empfohlene Konfiguration ist daher ein A4000/040 mit einer Zorro-III- Grafikkarte. Das Programm läuft zwar prinzipiell auf einem A1200, aber die wahre Freude stellt sich damit nicht ein. Es gibt jedoch einen speziellen Monochrom-Modus, der zwar keine Farbe hat, aber dafür eine ganze Ecke schneller läuft als die volle Emulation. Das Programm ist keine hundertprozentige Emulation (gibt es sowas?), die wichtigsten noch fehlenden Dinge sind: Nur zeilenweise Rastereffekte möglich Keine Sprite-Grafik-Prioritäten Keine Sprite-Hintergrund-Kollisionen Weder Amiga-Drucker noch RS232 verwendbar Aber bald kommt ja die nächste Version raus... :-) Installation "Installation" Das Archiv enthält die folgenden Dateien: README - Kurzbeschreibung Frodo - Hauptprogramm Frodo.info - Das Icon dazu Frodo.guide - Diese Anleitung Frodo.guide.info - Das Icon dazu Frodo_E.guide - Die englische Version der Anleitung Frodo_E.guide.info - Das Icon dazu Frodo Prefs - Datei mit den Einstellungen Frodo Prefs.info - Das Icon dazu FrodoSIDCard.lha - Archiv mit Informationen zur "SID-Karte SIDCard Basic ROM.info - Icon für das Basic-ROM Kernal ROM.info - Icon für das Kernal-ROM Char ROM.info - Icon für das Character-ROM Catalogs/#? - Sprachdateien (z.Z. nur Deutsch) 64prgs/#? - Einige Demoprogramme src/#? - Quelltext Zur Installation reicht es, das Archiv irgendwo auf die Festplatte zu entpacken. Die Dateien in "Catalogs" brauchen nicht nach LOCALE: kopiert zu werden, sie können da bleiben, wo sie sind. Frodo braucht keine Assigns oder ähnlichen Firlefanz, aber zum Betrieb werden Kopien der original-C64-ROMs benötigt. Diese liegen aus rechtlichen Gründen nicht bei, sondern müssen anderswo besorgt werden. Frodo benötigt drei ROM-Dateien namens "Basic ROM", "Kernal ROM" und "Char ROM", die im selben Verzeichnis wie Frodo liegen müssen. Wer für den "A64 V2.0" die ROMs schon hat (nicht die *.data-Dateien, das sind nicht die richtigen ROMs), kann diese nach einer Umbenennung direkt verwenden, ansonsten können sie von einem echten C64 mit dem folgenden Programm ausgelesen und gespeichert werden: 10 OPEN 1,8,2,"BASIC ROM,S,W" 20 FOR X=40960 TO 49151:PRINT#1,CHR$(PEEK(X));:NEXT 30 CLOSE 1 40 OPEN 1,8,2,"KERNAL ROM,S,W" 50 FOR X=57344 TO 65535:PRINT#1,CHR$(PEEK(X));:NEXT 60 CLOSE 1 70 POKE 56334,0:POKE 1,51 80 FOR X=16384 TO 20479:POKE X,PEEK(X+36864):NEXT 90 POKE 1,55:POKE 56334,1 100 OPEN 1,8,2,"CHAR ROM,S,W" 110 FOR X=16384 TO 20479:PRINT#1,CHR$(PEEK(X));:NEXT 120 CLOSE 1 Leider bietet Frodo z.Z. keine Möglichkeit, die so gespeicherten ROMs auf den Amiga zu bekommen, aber man kann sie mit einem Nullmodemkabel übertragen oder eines der 1541-zu-Amiga Transfer-Programme benutzen. (Mit Frodo kann man zwar auch C64-Laufwerke benutzen, aber um Frodo zu starten braucht man ja die ROMs bereits %-). Es gibt auch noch die Möglichkeit, sich die ROMs per EMail schicken zu lassen. Dazu schreibt man an "duckpembvax1.pembroke.edu" eine Mail mit dem Betreff "MAILSERV" und dem Inhalt "send roms.zip". Man erhält ein uuencodetes .zip-Archiv mit verschiedenen Commodore-ROMs. Die für Frodo benötigten sind im Verzeichnis "64": "basic", "kernal.3" und "charset". Einfach umbenennen und ins Verzeichnis von Frodo kopieren. Zur Soundemulation benutzt Frodo die "6581sid.library" von A64 V3.0, die ebenfalls nicht beiliegt. Die Demo-Version von A64, die über das Aminet erhältlich ist, enthält jedoch diese Library. StartQuit "Starten und Beenden" Nach einem Doppelklick auf das Icon erscheint zunächst das Fenster, in dem die "Einstellungen Settings für den Emulator vorgenommen werden. Der eigentliche Emulator wird durch einen Klick auf "OK" gestartet. Dann sollte zunächst ein schwarzer Bildschirm und nach einem kurzen Moment die C64-Einschaltmeldung kommen. Mit einem Klick der rechten Maustaste wird der Emulator jederzeit wieder beendet. Settings "Einstellungen" Das Einstellungsfenster erscheint direkt nach dem Start von Frodo, oder, wenn man bei laufender Emulation auf F9 drückt. Mit "Zyklen pro Zeile (CPU)" und "Zyklen pro Bad Line (CPU)" regelt man das Verhältnis von Grafikgeschwindigkeit zu Prozessorgeschwindigkeit. Je höher diese Werte, desto schneller die emulierte CPU, aber desto langsamer der Grafikaufbau. Zeigt ein Programm Grafikfehler oder flimmernde Zeilen, sollte man versuchen, beide Werte leicht abzuändern. Unter "Zyklen pro Zeile (CIA)" regelt man die Geschwindigkeit der CIA-Timer. Wenn man hier einen höheren Wert eingibt, wird die Frequenz des Cursor-Blinkens und der Tastenwiederholung größer. Einige Programme laufen mit dem vorgegebenen Wert nicht korrekt (z.B. "Ballblazer", bei dem man hier "65" eintragen muß). Die Einstellungen für die drei "Zyklen", die dem original-PAL-C64 am nächsten kommen, sind (63,23,63). Mit "Jedes (n)te Bild" kann man angeben, ob Frodo bei der Darstellung der C64-Grafik Bilder überspringen soll. Die normale Einstellung ist "1", d.h. jedes Bild (jeder simulierte Strahldurchlauf) wird neu berechnet. Ändert man die Einstellung z.B. auf "2", so wird nur noch jedes zweite Bild berechnet, was die Emulation natürlich erheblich beschleunigt, obwohl einige Rastereffekte damit ungenau dargestellt werden. Die Einstellung für einen A4000/040 ohne Grafikkarte, bei der überwiegend die original-C64-Geschwindigkeit erreicht wird, ist "5". "Joystick an Port 1/2" bezieht sich auf die Amiga-Ports. Normalerweise wird man Port 1 ausgeschaltet lassen, wenn man dort die Maus angeschlossen hat. Mit "Joysticks vertauschen" kann man die Zuordnung der Amiga-Ports zu den C64-Ports wechseln, ohne den Joystick umstecken zu müssen. Wenn z.B. ein C64-Spiel den Joystick an Port 1 erwartet, kann man ihn am Amiga-Port 2 eingesteckt lassen und braucht nur "Joysticks vertauschen" zu aktivieren. Mit "SID-Karte benutzen" stellt man ein, ob die Soundemulation über die "SID-Karte SIDCard oder über die "6581sid.library" (also über die Amiga-Soundkanäle) laufen soll. Wer keine SID-Karte hat, sollte diese Einstellung abschalten, da sonst illegale Speicherzugriffe erfolgen. Die Anordnung der Tasten Y und Z entspricht normalerweise dem deutschen System. Mit "Amerik. Tastatur" kann man sie auf den amerikanischen Standard anpassen (Y und Z vertauschen). Programme, die viele Sprites verwenden, aber keine Sprite-Kollisionen auswerten, lassen sich deutlich beschleunigen, wenn man das Symbol "Sprite-Kollisionen" deaktiviert. Außerdem kann man diese Einstellung als "Trainer" verwenden, um in manchen Spielen unverwundbar zu sein (leider werden die Gegner dadurch meistens auch unverwundbar :-/. Mit der Einstellung "Schneller Reset" gibt man an, ob der Speichertest beim C64-Reset übersprungen werden soll. Auf dem Amiga ist der Speichertest nicht notwendig und der Reset-Vorgang (F10) wird viel schneller, wenn man ihn abschaltet. Die Einstellung "Bildschirm-Typ" bestimmt die Art, wie die Grafik angesteuert wird. Zur Auswahl stehen "Amiga" (für die eingebaute Amiga-Grafik), "EGS" (für EGS-Grafikkarten), "Picasso" (für die Picasso-Grafikkarte), "CyBERgraphics" (für CyBERgraphics-Karten) und "Amiga Mono", ein besonders schneller Monochrom-Modus ohne Sprite- Kollisionen (nützlich z.B. für "Elite"). Unter "Bildschirmmodus" muß dann eine entsprechende Auflösung ausgewählt werden. Die Darstellung über Grafikkarten ist schneller als über die Amiga-Grafik (ausgenommen der Monochrom-Modus), aber CyBERgraphics ist etwas langsamer als EGS und Picasso. Diese Einstellungen können nur beim Start von Frodo geändert werden. Unter "Laufwerk 8" bis "Laufwerk 11" gibt man die Pfade von Verzeichnissen an (relativ zum Verzeichnis, in dem sich Frodo befindet), die für die Simulation der Diskettenlaufwerke 8, 9, 10 und 11 benutzt werden (siehe "Dateizugriff Files). Mit einem Klick auf das Symbol direkt neben den Eingabefeldern öffnet sich ein Requester, über den man das Verzeichnis bequemer auswählen kann. Die vier Ankreuzfelder unter "IEC" bestimmen, ob und welche Gerätenummern über das "IEC-Kabel IECCable als reale C64-Geräte angesteuert werden sollen. Hat man z.B. eine echte 1541 mit Gerätenummer 8 angeschlossen, muß man das "IEC"-Symbol für Laufwerk 8 aktivieren, damit die echte 1541 verwendet wird. Ist das Feld "IEC für andere Geräte verwenden" aktiv, spricht Frodo Geräte mit den Nummern 4-7 und 12-15 ebenfalls über das IEC-Kabel an. Hat man z.B. einen "C64-Drucker Printer mit der Nummer 4 an den Amiga angeschlossen, sollte man dieses Feld anklicken, damit der Drucker benutzt werden kann. Ist das Symbol nicht aktiviert, geben alle Geräte außer 8-11 einen "Device not present error". Mit "'/' -> '\\' in Dateinamen" bestimmt man, ob das '/' in C64- Dateinamen durch ein '\\' ersetzt werden soll und umgekehrt. Das '/'- Zeichen wird auf dem Amiga benutzt, um Unterverzeichnisse anzusprechen, aber da der C64 keine Unterverzeichnisse hat, ist es ein gültiger Teil eines C64-Dateinamens. Das ist aber problematisch, wenn ein Programm eine Datei mit einem '/' im Namen erzeugen will, da das AmigaDOS den Teil davor als Verzeichnisname interpretieren und - da es kein solches Verzeichnis findet - einen Fehler zurückgeben und das Öffnen der Datei fehlschlagen würde. Jetzt braucht man nur dieses Symbol zu aktivieren und alle '/' werden transparent in '\\' konvertiert, also steht in Directories immer noch das '/'. Wenn man dieses Symbol ausschaltet, kann man natürlich das '/' benutzen, um vom C64 aus Dateien in Amiga- Unterverzeichnissen anzusprechen. Durch einen Klick auf "Sichern" werden die Einstellungen auf Platte gespeichert und stehen danach auch beim nächsten Start des Emulators zur Verfügung. "OK" startet den Emulator (bzw. kehrt dorthin zurück) und "Abbrechen" verwirft die Einstellungen und beendet Frodo (bzw. kehrt ohne Änderung in den Emulator zurück). Keyboard "Tastaturbelegung" Die Anordnung der Tasten entspricht im Wesentlichen der des C64, die Anordnung von Y und Z läßt sich aber einstellen, um sie der deutschen Tastatur anzupassen. Die einzelnen Reihen der Tastatur sind wie folgt belegt: <- 1 2 3 4 5 6 7 8 9 0 + - £ Q W E R T Z U I O P * A S D F G H J K L : ; = ^ Y X C V B N M , . / Zusätzlich werden noch folgende Tasten verwendet: ESC - RUN/STOP <- - INS/DEL Del - CLR/HOME Help - RESTORE Amiga - C= F1-F8 - F1-F8 F9 - Ruft das Einstellungsfenster auf F10 - Löst einen Reset aus Die beliebte Tastenkombination RUN/STOP-RESTORE entspricht dann also ESC-Help auf der Amiga-Tastatur. Allerdings muß man auf der Help-Taste nicht so rumprügeln wie auf der RESTORE-Taste beim C64. :-) Die Cursor-(Pfeil-)Tasten können wie beim Amiga verwendet werden, d.h. "Cursor hoch" entspricht der C64-Tastenkombination "Shift- Cursor-runter". Dasselbe gilt für die Funktionstasten F2, F4, F6 und F8. Files "Dateizugriff" Frodo kann sowohl 1541-Laufwerke mit den Geräteadressen 8, 9, 10 und 11 in Amiga-Verzeichnissen simulieren als auch echte C64-Laufwerke über ein "Adapterkabel IECCable ansprechen. Man kann so seine C64-Programme auf der Amiga-Festplatte ablegen und sie vom Emulator aus ganz normal mit LOAD und SAVE laden und speichern. Die Pfade zu den Verzeichnissen der simulierten Laufwerke werden im Einstellungsfenster unter "Laufwerk 8" bis "Laufwerk 11" angegeben. Man kann auch von Frodo aus das Inhaltsverzeichnis mit LOAD"$",8 laden. Dabei werden alle Dateien, die als "ausführbar" markiert sind, als "PRG", alle restlichen Dateien als "SEQ" angezeigt. Der Dateityp "DIR" bezeichnet ein Amiga-Unterverzeichnis. Um hineinzugelangen muß man die Einstellungen aufrufen und den Pfad des Laufwerks entsprechend ändern, da das C64-Betriebssystem nichts von Unterverzeichnissen weiß. Es ist allerdings möglich, mit "/" in einem C64-Dateinamen Dateien aus Unterverzeichnissen anzusprechen (z.B. LOAD"GAMES/ELITE",8), solange nicht die '/'-Übersetzung in den Einstellungen angeschaltet ist. Beim Öffnen von Dateien werden die Dateitypen "PRG" und "SEQ" und die Zugriffsmodi "R", "W" und "A" unterstützt. Jokerzeichen (*,?) können ebenfalls verwendet werden, man muß aber beachten, daß es auf dem Amiga keine festgelegte Reihenfolge der Dateien in einem Verzeichnis gibt und das Ergebnis von LOAD"*",8 eher zufällig ist. Dateien werden immer überschrieben, auch wenn man sie nicht mit ":" öffnet. Floppy- Befehle, relative Dateien und Direktzugriff sind nicht implementiert, man kann jedoch den Fehlerkanal auslesen. Zum Anschluß von echten C64-Laufwerken benötigt man ein spezielles Kabel, mit dem die Geräte an den Amiga angeschlossen werden. In den Einstellungen muß man dann bei der entsprechenden Laufwerksnummer das Feld "IEC" aktivieren, damit Frodo weiß, daß diese Nummer zu einem Gerät am IEC-Kabel gehört. Die so angeschlossenen Laufwerke können wie vom C64 aus verwendet werden. Speedloader funktionieren allerdings nicht. Printer "Drucker" Frodo kann zwar keine Amiga-Drucker verwenden, aber man kann mit dem "IEC-Kabel IECCable einen C64-IEC-Drucker anschließen, der wie beim C64 üblich angesprochen wird. Dazu muß allerdings das Symbol "IEC für andere Geräte verwenden" im "Einstellungsfenster Settings aktiviert sein. SIDCard "Die SID-Karte" Frodo verfügt zwar über eine Soundemulation über die Amiga-Hardware (mit Hilfe der "6581sid.library"), aber für das wahre Sound-Erlebnis kann er auch einen echten C64-Soundchip (SID) auf einer Steckkarte im Amiga ansprechen. Diese Karte (bislang ein Einzelstück) blendet den SID im Bereich ab $a00001 in den Amiga-Adreßraum ein (ungerade Adressen). Der Schaltplan und zusätzliche Informationen finden sich im Archiv "FrodoSIDCard.lha". IECCable "Das IEC-Kabel" "This is Ohm of Borg. Resistance is voltage divided by electric current." :-) Die beste Möglichkeit, seine alte C64-Software auf den Amiga zu übertragen, ist der Anschluß eines echten C64-Laufwerks. Dazu ist ein spezielles Kabel mit einer kleinen Schaltung erforderlich, das zusammen mit der Software in Frodo den Amiga um den sog. "IEC"-Bus bereichert, der beim C64 zum Anschluß von Diskettenlaufwerken und Druckern benutzt wurde. Wer für den A64 bereits so ein Kabel hat, kann dies evtl. direkt mit Frodo weiterverwenden (ungetestet). Das Kabel, daß im Amiga-Magazin 8/88 S.36 beschrieben wurde, kann nicht mit Frodo benutzt werden, da es invertierte Ausgangsleitungen hat. Der Bau eines IEC-Kabels ist recht einfach, es verbindet den parallelen Port des Amiga mit dem runden, sechspoligen Anschluß an den C64-Geräten: Parallelport IEC-Anschluß Amiga 1541 DSUB, 25pol. DIN, 6pol. Pin Name Name Pin 14 +5V ------------*--*--+ | | | 7406 |¯||¯||¯| (74LS05) | || || | je 1k |_||_||_| |\\ | | | 5 PB3 ----| O-----*--+--+------- ATN 3 |/ | | | | |\\ | | 6 PB4 ----| O--*-----*--+------- CLK 4 |/ | | | | |\\ | | 7 PB5 ----| O--+-*------*------- DATA 5 |/ | | | | 8 PB6 ---------+ | | 9 PB7 -----------+ 25 GND -------------------------- GND 2 Der 7406 (ein 74LS05 tuts auch) muß natürlich noch mit +5V und GND verbunden werden. Dem Fachmann wird auffallen, daß dies die selbe Schaltung ist, die sich auch im echten C64 befindet. [Wichtiger Hinweis: Wer vorhat, das Kabel nachzubauen und anzuschließen, sollte bedenken, daß er es auf eigene Gefahr macht. Ich werde keine Verantwortung übernehmen, wenn jemand damit seinen Computer in ein Tischfeuerwerk verwandelt.] DemoPrograms "Demoprogramme" Das Verzeichnis "64prgs" enthält einige kleine Beispielprogramme, die die Fähigkeiten (und die Schwächen) von Frodo zeigen. Sie müssen alle von Frodo mit LOAD"",8 geladen und mit SYS49152 gestartet werden. Dazu ist in den Einstellungen unter "Laufwerk 8" '64prgs' einzutragen, damit Frodo die Programme auch findet. Wer Lust hat, kann diese Programme ja mal mit anderen Emulatoren oder einem echten C64 ausprobieren. Eine kurze Beschreibung der einzelnen Programme: 3fff : Öffnet den oberen und unteren Rahmen und stellt dort schwingende Buchstaben dar (man sollte die "Zyklen pro Zeile (CPU)" auf 60 stellen) colorbars: Flimmernde Farben dycp : Scrolling mit variabler Y-Zeichenposition fld : Demonstriert den FLD-Effekt (Flexible Line Distance) stretch : Ein Effekt, den Frodo (noch) nicht richtig darstellen kann: variabel expandierte Sprites tech-tech: Horizontales Scrolling über große Distanzen, Steuerung über Joystick an Port 2 text26 : Stellt (fast) 26 Textzeilen dar monitor : Ein einfacher Maschinensprachemonitor TechnicalInfo "Technische Infos" "Wissen?" wiederholte Gandalf. "Ich weiß vieles, was nur die Weisen wissen, Frodo." Im Gegensatz zum A64, der sich eher an der Amiga-Hardware orientiert, versucht Frodo, C64-Hardwareeigenschaften genau nachzubilden. Nun ist die Hardware des C64 (insb. der Grafikchip "VIC") recht simpel entworfen, was dazu führt, daß eine Menge interner Abläufe nach außen dringen, woraus zahlreiche "undokumentierte Eigenschaften" resultieren, mit denen sich zum Teil Effekte realisieren lassen, von denen die Entwickler nie zu träumen wagten. Frodo benutzt eine zeilenweise Emulation, d.h. die Abläufe im VIC und im Prozessor (6510) werden jeweils für eine Rasterzeile des C64- Bildschirms emuliert. In der Praxis sieht das so aus, daß Frodo abwechselnd VIC und 6510 jeweils ca. 63 simulierte Zyklen (entspricht einer Rasterzeile) laufen läßt. D.h. es wird erst 63 Zyklen lang der Prozessor emuliert, dann auf den VIC umgeschaltet, der eine Pixelzeile auf den Bildschirm malt, dann wieder 63 Zyklen Prozessor usw. Mit der Ausnahme des Monochrom-Modus wird die Grafik intern immer als Chunky-Darstellung berechnet. Der Amiga- Modus benutzt eine Chunky->Planar-Konvertierung, um die Chunky-Pixel auf dem Bildschirm darzustellen. Obwohl dies eine starke Vereinfachung der Abläufe im echten C64 darstellt, lassen sich damit zahlreiche grafische Effekte, die beim C64 möglich sind, bereits hervorragend emulieren, z.B. FLD, FLI, DYCP, Hyperscreen uvm. Aber die Methode hat einen großen Nachteil: Änderungen, die der Prozessor an den Registern des VIC vornimmt, werden erst in der nächsten Rasterzeile aktiv. So kann man z.B. beim Frodo die Rahmenfarbe nicht mitten in einer Zeile ändern, der Farbwechsel erfolgt erst zu Beginn der nächsten Zeile. Damit können aufwendige Effekte, bei denen es auf die genaue Position einer Registeränderung ankommt, nicht emuliert werden. So kann man z.B. bei Frodo den oberen und unteren Rahmen problemlos öffnen, den linken und rechten aber prinzipiell nicht (aus diesem Grund es auch in der Emulation nicht vorgesehen). Die nächste Stufe nach der zeilenweisen VIC-Emulation wäre, VIC und 6510 in einzelne Zyklen aufzulösen. Die Abläufe im VIC und im 6510 zu jedem Zyklus sind recht genau bekannt, daher gibt es kein theoretisches Problem bei der Umsetzung. Das einzige wirkliche Problem ist die Geschwindigkeit. Es müßte nach jedem Zyklus zwischen VIC und 6510 gewechselt werden, statt nach 63 Zyklen wie Frodo dies im Augenblick macht. Dies bedeutet den Abschied von der registerbasierten 6510-Emulation, da der Aufwand viel zu groß wäre, bei jedem Wechsel den kompletten Registersatz zu sichern und wiederherzustellen. Das bisherige Opcode-Dispatch-Modell müßte durch eine Art "Zyklusfort- setzungszeiger" ersetzt werden, der auf die Unterroutine des nächsten Zyklus des aktuellen Opcodes zeigt (oder sollte man die Opcode-Dispatch- Table auf 8 Einträge für die einzelnen Zyklen eines Befehls aufblähen?). Grob geschätzt dürfte die Geschwindigkeit um den Faktor 3-4 abnehmen, vor dem Erscheinen schnellerer Rechner ist daher nicht mit zyklenweiser Emulation zu rechnen. Allerdings könnte man damit Effekte wie AFLI und die VC- und Spritezähler-Verwirrungen des VIC peinlich genau nachbilden. Speed "Geschwindigkeit" Gut, die Emulation ist ziemlich langsam, aber warum ist das so? Dazu einige kleine Berechnungen: Der Overscan-Bildschirmbereich des C64 hat die Ausmaße 411×284, davon werden 368×272 von Frodo dargestellt, macht also 100096 Pixel. Im Chunky-Modus benötigt jedes Pixel ein Byte, bei einer Bildwiederhol- frequenz von 50Hz müßten also 5MB/s in den Bildschirmspeicher geschaufelt werden. Die Bandbreite des Zorro-III-Bus auf einem A4000/040 beträgt 6,6MB/s... Bedenkt man außerdem, daß der Emulator die Grafikdaten ja noch irgendwoher lesen muß und außerdem "nebenbei" noch Prozessor und I/O zu emulieren hat, wird man feststellen, daß der Geschwindigkeit der Emulation prinzipielle Grenzen gesetzt sind. Durch Verwendung der Amiga-Bitplane-Grafik könnte man zwar die Datenmenge halbieren, aber der Gewinn wird durch den niedrigeren Chip-RAM-Durchsatz (4,5MB/s) und den höheren Rechenaufwand weitestgehend absorbiert. Was ist also zu tun? Die naheliegendste Idee wäre, die Chunky->Planar- Konvertierung herauszunehmen und den VIC mit optimierten Routinen direkt in die Amiga-Bitplanes schreiben zu lassen. Der Monochrom-Modus ist ein erster Schritt in diese Richtung, aber bei voller Farb-Emulation waren die Resultate enttäuschend, selbst bei paralleler Verwendung des Blitters. Sie waren immerhin nicht so enttäuschend, daß ich diese Idee vollkommen aufgegeben hätte. Die Routinen für den Chunky-Modus sehen zwar auf den ersten Blick nicht besonders effizient aus, aber es ist mir noch nicht gelungen, sie wesentlich schneller zu machen. Ich habe versucht, die Pixel-Farb- Konvertierungen durch Tabellenzugriffe zu ersetzen, aber das wurde noch langsamer. Wenn also die Grafik nicht schneller gemacht werden kann, dann vielleicht die Prozessor-Emulation? Auch daran habe ich gedacht und das Modell mit der Opcode-Sprungtabelle versuchsweise durch ein Modell mit jeweils 256 Byte großen Opcode-Routinen, in die mit dem Opcode als Index direkt eingesprungen wird, ersetzt. Aber obwohl dieses Modell das Laden des zweiten Instruktions-Bytes ohne zusätzlichen Aufwand erlaubt, war es langsamer als die augenblickliche Emulation, die anscheinend den Cache effizienter nutzt. CPU-Transkription ist wegen der intensiven Benutzung von selbst-modifizierendem Code auf dem C64 nicht möglich. Genauigkeit ist meiner Meinung nach wichtiger als Geschwindigkeit, daher steht das Entfernen von Features aus der Emulation außer Frage. TheSource "Der Quelltext" "Bitte Quelldatei angeben. FEHLER: Datei quillt nicht!" :-) Wem die Nummern nichts sagen: Eine kleine Beschreibung der Funktionen der einzelnen Module: 1541.asm - Dateiverwaltung 6510.asm - Der Prozessor 6526.asm - Die CIAs (Ein-/Ausgabe, Tastatur, Timer) 6569.asm - Der VIC (Grafik) 6569mono.i - Die Routinen für Monochrom-Grafik 6581.asm - Der SID (Sound) c2p4.asm - Chunky->Planar-Konvertierung ExpTable.bin - Wird von 6569mono.i eingebunden FrodoPrefs.#? - GadToolsBox-Oberfläche des Einstellungsfensters Frodo_rev.#? - Versionsinformationen Main.asm - Das Hauptmodul Strings.#? - Für die Lokalisation, von CatComp erzeugt Boopsi.o - Eine Objektdatei der GadToolsBox, die dazugelinkt werden muß Die Aufrufe zum Assemblieren und Linken lauten: PhxAss Main.asm INCPATH Include: OPT ! PhxAss 6510.asm INCPATH Include: OPT ! PhxAss 6569.asm INCPATH Include: OPT ! PhxAss 6526.asm INCPATH Include: OPT ! PhxAss 6581.asm INCPATH Include: OPT ! PhxAss 1541.asm INCPATH Include: OPT ! PhxAss FrodoPrefs.s INCPATH Include: OPT ! PhxAss c2p4.asm INCPATH Include: OPT ! PhxLnk Lib:RXstartup.obj Main.o 6510.o 6569.o c2p4.o 6526.o 6581.o 1541.o FrodoPrefs.o Strings.o Boopsi.o Lib:small.lib TO Frodo Zum Assemblieren muß PhxAss V4.0 (oder eine neuere Version) verwendet werden. LegalMush "Rechtliches" Das Programm "Frodo", diese Anleitung und der Quelltext dürfen frei weitergegeben werden, solange sie unverändert bleiben (archivieren und packen sind erlaubt) und alle Dateien zusammen bleiben. Mit der Weitergabe von Frodo darf kein Gewinn erzielt werden, insbesondere darf der Verkaufspreis einer Diskette, die Frodo enthält, DM 10,- (bzw. den entsprechenden Betrag in anderen Währungen) nicht übersteigen. Frodo darf nach Belieben über Mailboxen und Netzwerke und als Teil von Shareware/Freeware-CDs verteilt werden. Wer das Programm benutzt, erklärt sich damit einverstanden, jegliches Risiko, das die Benutzung mit sich bringt, selbst zu tragen. Der Autor haftet in keinem Fall für Schäden, die direkt oder indirekt durch den Gebrauch oder Mißbrauch dieser Anleitung und/oder des Programms entstanden sind. Die Rechte am Quellcode verbleiben beim Autor. Er darf nicht - auch nicht auszugsweise - ohne schriftliche Genehmigung des Autors für kommerzielle Programme verwendet werden. Die Benutzung für nicht- kommerzielle Zwecke ist gestattet, solange meine Copyright-Notiz im Programm bleibt. Es ist nicht gestattet, den Quelltext dazu zu benutzen, eine veränderte Version von "Frodo" in Umlauf zu bringen. Die Oberfläche des Programms wurde mit GadToolsBox © Copyright 1991-1993 Jaba Development erstellt. Teile des Programms sind © Copyright 1992-1993 Jaba Development. BugReports "Bugreports" Wenn ihr einen Fehler oder eine Unzulänglichkeit in Frodo findet, oder eine Idee habt, wie man manches noch besser machen könnte, dann teilt mir das bitte mit, damit ich Frodo in Zukunft noch besser machen kann. Meine Adresse findet ihr "hier EmulationWizard. Ich glaube nicht, daß sich die Geschwindigkeit unter Beibehaltung des Konzepts noch wesentlich erhöhen läßt, lasse mich aber gern eines besseren belehren. Außerdem suche ich noch Übersetzungen des Frodo.catalog in andere Sprachen, insb. Finnisch und Schwedisch. Eine elbische Version wäre natürlich auch willkommen. :-) Thanks "Danksagungen" Folgenden Personen möchte ich meinen besonderen Dank aussprechen, da sie einen nicht unwesentlichen Beitrag zur Entwicklung von Frodo geleistet haben: Frank Wille , mit dessen PhxAss Frodo entwickelt wurde Jaba Development, deren GadToolsBox die Oberfläche von Frodo entwickelt hat Peter McGavin , von dem die Chunky->Planar- Konvertierung stammt Andreas Boose und Marko Mäkelä , die mich mit wertvollen Informationen zum VIC und zum C64 allgemein versorgt haben Markus Winklbauer für die Docs zur Picasso-Karte Teemu Suikki für die Idee mit dem Überspringen von Bildern J.R.R.Tolkien für die Anregung zur Namensgebung des Emulators Alle, die mir Vorschläge und Anmerkungen geschickt haben EmulationWizard "Der Autor" Meine Adresse lautet: Christian Bauer Langenaustr. 65 56070 Koblenz Germany EMail: cbauermzdmza.zdv.uni-mainz.de (Zuverlässiger, aber seltener gepollt) cebixng-box.wwb.sub.de (Wird täglich gepollt, hat aber die langsamere Verbindung) Für Fragen, Kritik, Anregungen und "Bugreports BugReports bin ich jederzeit offen. EMail wird bevorzugt. Frodo ist bkeinub Shareware-Programm, aber über eine kleine Aufmerksamkeit freue ich mich natürlich. :-) History "History" Der Emulator war ursprünglich ein Abspielprogramm für C64-Musikstücke (daher auch die SID-Karte), bis ich den A64 V3.0 gesehen habe und davon so entäuscht war, daß ich anfing, einen "richtigen" C64-Emulator zu schreiben (das war so um Weihnachten 1994). V0.4 05.Jan.1995 - Erste veröffentlichte Version V0.5 10.Jan.1995 - Wenn man Frodo auf einem 68000-Rechner gestartet hat, kam zwar der entsprechende Requester, aber danach gab es einen Absturz. Soviel zum Thema "ungetestete Fehlerabfragen". :-) - Enforcer-Hits beim ersten Einstellen der Speicherkonfiguration beseitigt - Sprite-Zyklen werden nun richtig berechnet - Schaltete man ein Sprite in der Mitte der Darstellung aus, wurde es sofort abgeschaltet. Nun wird das Sprite korrekt zu Ende gezeichnet. - Grafik bei EGS/Picasso durch Zeilenpuffer erhöht (20% schneller), andere kleine Optimierungen in der Grafik - VIC-Interrupt-Flag wird nun bei jedem Schreibzugriff auf $d019 gelöscht (ein Hack für die RMW-Befehle, die zwei Schreibzugriffe durchführen) - Die CIA-Timer B können jetzt Unterläufe von Timer A zählen (für Ballblazer :-) - PLP und RTI löschen das Break-Flag - Komplett neue 1541-Emulation, 4 Laufwerke - Zyklenzähler der CPU wesentlich effizienter gestaltet (wieder 25% schneller) V1.0 25.Jan.1995 - PHP setzt jetzt das Break-Flag auf dem Stack - HandleRESET setzte irrtümlich das I-Flag (trau keiner Dokumentation, auch wenn sie vom Hersteller stammt...) - Ein RESET setzt die VIC-Bank auf 0 - Alle illegalen Opcodes implementiert - Neuer Algorithmus für den VC des VIC, der sich näher am echten VIC orientiert - Die VBlank-Routinen springen jetzt zu Periodic6569 zurück, denn sonst gibt es eine nicht existierende (-1)te Zeile - TOD-Clocks implementiert - ECM+BMM, ECM+MCM und ECM+BMM+MCM stellen jetzt korrekt einen schwarzen Bildschirm dar - Zugriff auf SID-Karte ist nun abschaltbar - Einige Fehler in der 1541-Emulation korrigiert - Die Benutzung von IEC-Geräten über ein Adapterkabel ist möglich - Die Auswahl der Verzeichnisse für die 1541-Emulationen kann jetzt über einen Verzeichnis-Requester erfolgen - Das Abschalten des Bildschirms mittels Bit 4 in $D011 funktioniert - Einstellung für "Zeilenfrequenz" entfernt - Interrupt-Handhabung komplett umgestellt - Verschiedene interne Optimierungen - Die CBM80-Kennung wird beim Reset nur noch überschrieben, wenn sie vorhanden war - Frodo läuft nun auch auf Nicht-AGA-Rechnern - Sprite-Sprite-Kollisionen eingebaut - Vertauschung von Y und Z ist nun einstellbar V1.1 war eine interne Testversion mit Bitplane-Grafik (in V1.2 zunächst wieder entfernt) V1.2 09.Feb.1995 - Geschwindigkeit der Grafik ist nun im Durchschnitt höher, insb. in den Multicolor- und Bitmap-Modi - Neuer, sehr schneller Monochrom-Modus - Sprite-Routinen sind effizienter. Sind alle Sprites ausgeschaltet, wird keine Rechenzeit mehr vergeudet. - Sound-Emulation über 6581sid.library, wenn die SID-Karte abgeschaltet ist - Minimale Auflösung ist nun 384×272 - Sprite-Kollisionen sind nun abschaltbar - Die 1541-Emulation kommt nun mit sequentiellen Dateien und Zugriffsmodi zurecht und ignoriert Laufwerksnummern und den '' - Frodo ist nun mehrsprachig durch die "locale.library" - Es können jetzt Overscan-Auflösungen benutzt werden - Die Auswahl von Modi wie "PAL:Lowres" ist nun unter OS2.x möglich - Option zur Übersetzung von '/' in Dateinamen in '\\' und umgekehrt - Die Joysticks werden jetzt nur noch in der VIC-VBlank-Routine abgefragt - Die Amiga-Grafikroutinen benutzen jetzt auch Double Buffering - Einstellung, um den Speichertest der Reset-Routine abzukürzen V1.3 22.Feb.1995 - Fehler in Close1541 korrigiert (Absturz beim Beenden) - CyBERgraphics-Unterstützung - Die 1541-Emulation beherrscht nun Jokerzeichen - Option zum Überspringen von Bildern eingebaut Future "Die Zukunft" Für die nächsten Versionen sind u.a. folgende Dinge geplant: Schnellere Grafik mit den Amiga-Chips (die Theorie ist fertig, aber der Code muß noch kräftig optimiert werden, um mit der z.Z. verwendeten Methode mithalten zu können) Ein eingebauter Maschinensprachemonitor, der auf Tastendruck erscheint Die Möglichkeit, den Zustand der Emulation zu speichern und wiederherzustellen (Speicher- und Register-Snapshot) Direkte Verwendung von .d64-Dateien (ist das dringend?) Sound-Emulation mit Hilfe von "PlaySID" Benutzung von Amiga-Druckern und Modems (eher unwahrscheinlich, da Frodo nicht geschrieben wurde, um PrintShop darauf laufen zu lassen :-) Zyklus-basierte Emulation. Ich habe schon einige Ideen dazu und die Geschwindigkeit wird hoffentlich nicht so drastisch abnehmen, wie ich zunächst verutete. Das würde natürlich umschaltbar sein oder es würde zwei Versionen des Emulators geben.