@DATABASE "Frodo"
@AUTHOR "Christian Bauer"
@(C) "1994-1995 Christian Bauer"

@NODE MAIN "Frodo Bedienungsanleitung"

                                   @{b}Frodo@{ub}
                                Version 1.5
                              @{" Was ist neu? " LINK WhatsNew}

                         Ein Commodore 64 Emulator
                        für Commodore-Amiga Rechner

                   © Copyright 1994-1995 Christian Bauer
                           Freely distributable


 @{" Überblick        " LINK Overview}  Wieso noch ein C64-Emulator?
 @{" Installation     " LINK Installation}  Wie installiere ich Frodo?

 @{" Starten/Beenden  " LINK StartQuit}  There and back again....
 @{" Einstellungen    " LINK Settings}  Die leidige Konfiguration
 @{" Tastaturbelegung " LINK Keyboard}  Wo ist an der Tastatur "oben"?
 @{" Dateizugriff     " LINK Files}  Ein C64 mit Festplatte
 @{" Drucker          " LINK Printer}  Benutzung von C64-Druckern

 @{" Die SID-Karte    " LINK SIDCard}  Für die, die den echten Sound haben wollen
 @{" Das IEC-Kabel    " LINK IECCable}  Wie kommt die 1541 an den Amiga?

 @{" Demoprogramme    " LINK DemoPrograms}  Die beiliegenden Beispielprogramme
 @{" Technische Infos " LINK TechnicalInfo}  Was die Welt im Innersten zusammenhält...
 @{" Geschwindigkeit  " LINK Speed}  Warum ist er so langsam?
 @{" Der Quelltext    " LINK TheSource}  Use the source, Luke.

 @{" Rechtliches      " LINK LegalMush}  Copyright usw.
 @{" Bugreports       " LINK BugReports}  Hoppla, da läuft was nicht!
 @{" Danksagungen     " LINK Thanks}  Vielen Dank für die Blumen
 @{" Der Autor        " LINK EmulationWizard}  Adresse des Programmierers
 @{" History          " LINK History}  Entwicklungsgeschichte des Programms
 @{" Die Zukunft      " LINK Future}  Pläne für die nächsten Versionen

@ENDNODE


@NODE WhatsNew "Was ist neu?"

Die wichtigste Änderung zu Version 1.4:
 · Ein schlimmer Fehler in der Joystickabfrage wurde korrigiert, der
   u.U. den ganzen Emulator lahmlegen konnte
 · Frodo unterstützt nun die "Merlin"-Grafikkarte

Genaueres steht in der @{"Entwicklungsgeschichte" LINK History}.

@ENDNODE


@NODE Overview "Überblick"

  "Those days, the Third Age of Middle-earth,
   are now long past, and the shape of all lands
   has been changed."

@{b}Frodo@{ub} 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-/CyBERgraphics-Grafikkarten, die "Picasso" und
die "Merlin" 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
 · Weder Amiga-Drucker noch RS232 verwendbar
 · Keine Unterstützung von .d64-Dateien
 · Kein eingebauter Maschinensprachemonitor/Debugger
 · Keine Emulation einer REU (RAM-Erweiterung)

Aber bald kommt ja die nächste Version raus... :-)

@ENDNODE


@NODE 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" LINK 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
  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 "duck@pembvax1.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.

@ENDNODE


@NODE StartQuit "Starten und Beenden"

Nach einem Doppelklick auf das Icon erscheint zunächst das Fenster,
in dem die @{"Einstellungen" LINK 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.

@ENDNODE


@NODE 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" LINK 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).

Das Symbol "Sprite-Kollisionen" bestimmt, ob Kollisionen zwischen Sprites
untereinander und zwischen Sprites und Grafik erkannt werden sollen. Mit
abgeschalteten Kollisionen wird man in manchen Spielen unverwundbar
(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),
"Merlin" (für die Merlin-Grafikkarte) 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" LINK 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" LINK 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" LINK 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).

@ENDNODE


@NODE 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 (deutsche
Tastatur):

Option "Amerik. Tastatur" aus:

<- 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 : ; =      <Joy> +
   ^ Y X C V B N M , . /

Option "Amerik. Tastatur" an:

<- 1 2 3 4 5 6 7 8 9 0 + - £     [ ] ^ =
    Q W E R T Y U I O P @ *            -
    A S D F G H J K L : ; =      <Joy> +
   ^ Z X C V B N M , . /

Zusätzlich werden noch folgende Tasten verwendet:

 Esc    - RUN/STOP
 <-     - INS/DEL
 Del    - CLR/HOME
 Help   - RESTORE
 Return - RETURN
 Enter  - RETURN
 Amiga  - C=
 Alt    - 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.

Die Zehnertastatur emuliert einen Joystick in Port 2 (mit "Joysticks
vertauschen" einen in Port 1):

   7    8    9
        ^
        |
   4    5    6
  <-- Feuer -->
        |
        v
   1    2    3

   0
 Feuer

@ENDNODE


@NODE 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" LINK 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.

@ENDNODE


@NODE Printer "Drucker"

Frodo kann zwar keine Amiga-Drucker verwenden, aber man kann mit dem
@{"IEC-Kabel" LINK 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" LINK Settings} aktiviert sein.

@ENDNODE


@NODE 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".

@ENDNODE


@NODE 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
                      |_||_||_|
              1|\\ 2    |  |  |
    5  PB3 ----| O-----*--+--+------- ATN    3
               |/         |  |
                          |  |
              3|\\ 4       |  |
    6  PB4 ----| O--*-----*--+------- CLK    4
               |/   |        |
                    |        |
              5|\\ 6 |        |
    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.]

@ENDNODE


@NODE 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"<name>",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

@ENDNODE


@NODE 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.

@ENDNODE


@NODE 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.

@ENDNODE


@NODE 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.

@ENDNODE


@NODE LegalMush "Rechtliches"

Das Programm "Frodo", diese Anleitung und der Quelltext dürfen frei
weitergegeben werden, solange sie unverändert bleiben (archivieren und
packen ist 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.

@ENDNODE


@NODE 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" LINK 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. Eine elbische Version wäre besonders willkommen. :-)

@ENDNODE


@NODE 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 <frank@phoenix.owl.de>, mit dessen PhxAss Frodo
   entwickelt wurde
 · Jaba Development, deren GadToolsBox die Oberfläche von Frodo
   entwickelt hat
 · Peter McGavin <peterm@maths.grace.cri.nz>, von dem die Chunky->Planar-
   Konvertierung stammt
 · Andreas Boose <a.boose@ldb.han.de> und Marko Mäkelä
   <marko.makela@hut.fi>, die mich mit wertvollen Informationen zum VIC
   und zum C64 allgemein versorgt haben
 · Markus Winklbauer <sysop@ng-box.wwbnet.de> für die Docs zur
   Picasso-Karte
 · Lord Prayer für die Docs zur Merlin-Karte
 · Teemu Suikki <Teemu.Suikki@lut.fi> für die Idee mit dem Überspringen
   von Bildern
 · Pawel Soltysinski <polonus@felix.univ.szczecin.pl> und Pawel Hernik
   <spi-ph@srv1.tu.kielce.pl> für die polnischen Catalog-Dateien
 · Giovanni Gentile <gentile@dsi.unimi.it> für die italienischen
   Catalog-Dateien
 · Marcus Comstedt <marcus@amicus.rydnet.lysator.liu.se> für die
   schwedischen Catalog-Dateien
 · Jarkko Lindblad <lindblad@cc.helsinki.fi> für die finnischen
   Catalog-Dateien
 · Claus Østergaard <dos@dator.dk> für die dänischen Catalog-Dateien
 · Kjell Irgens <kjelli@stud.cd.uit.no> für die norwegischen Catalog-
   Dateien
 · J.R.R.Tolkien für die Anregung zur Namensgebung des Emulators
 · Allen, die mir Vorschläge und Anmerkungen geschickt haben

@ENDNODE


@NODE EmulationWizard "Der Autor"

Meine Adresse lautet:

  Christian Bauer
  Langenaustr. 65
  56070 Koblenz
  Germany

EMail:
  bauec002@goofy.zdv.uni-mainz.de  (Zuverlässiger, aber seltener gepollt)
  cbauer@mzdmza.zdv.uni-mainz.de
  cebix@ng-box.wwbnet.de           (Wird täglich gepollt, hat aber die
                                    langsamere Verbindung)

Für Fragen, Kritik, Anregungen und @{"Bugreports" LINK BugReports} bin ich jederzeit
offen. EMail wird bevorzugt.

Frodo ist @{b}kein@{ub} Shareware-Programm, aber über eine kleine
Aufmerksamkeit freue ich mich natürlich. :-)

@ENDNODE


@NODE 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

V1.3a	04.Mär.1995
  - Fehler beim Aufruf des Einstellungsfensters mit F9 bei der
    Picasso korrigiert

V1.4	05.Mai.1995
  - Pause6510 und Resume6510 benutzen jetzt Signale
  - Tastaturabfrage verbessert, die Option "Amerik. Tastatur" legt
    nun "=" und "^" auf die numerische Tastatur
  - Sprite-Routinen komplett neu geschrieben, Sprite-Grafik-Prioritäten
    und -Kollisionen werden jetzt berücksichtigt
  - Branches über $ffff/$0000 hinweg funktionieren
  - Joystick-Emulation mit der Zehnertastatur
  - Polnische und italienische Catalog-Dateien

V1.4a	12.Mai.1995
  - Fehler in der Joystickabfrage korrigiert
  - Dänische, finnische und schwedische Catalog-Dateien

V1.5	06.Jun.1995
  - Unterstützung der Merlin-Grafikkarte
  - Norwegische Catalog-Dateien

@ENDNODE


@NODE 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.

@ENDNODE
