home *** CD-ROM | disk | FTP | other *** search
/ TopWare Tools / TOOLS.iso / tools / top1290 / cpcemu_g.doc < prev    next >
Encoding:
Text File  |  1993-09-07  |  39.6 KB  |  1,148 lines

  1.  ****************************************************************************
  2.  *                                                                          *
  3.  *      Dokumentation zu CPCEMU (v0.8) - dem CPC-Emulator für den PC        *
  4.  *                                                                          *
  5.  ****************************************************************************
  6.  
  7. Dies ist die deutsche Dokumentation zu CPCEMU , für die englische siehe
  8. im File CPCEMU_E.DOC nach.
  9.  
  10.  
  11. Wenn Du Fragen oder Anregungen hast, schreibe an
  12.  
  13.     Marco Vieth
  14.     Auf dem Ükern 4
  15.     33165 Lichtenau
  16.  
  17.     Oder per E-Mail :
  18.     ali@uni-paderborn.de
  19.  
  20.  
  21.  
  22. 1. WICHTIG :
  23. ============
  24.  
  25.     CPCEMU ist Copyright 1993 von Marco Vieth, Auf dem Ükern 4,
  26.     33165 Lichtenau, Germany.
  27.     Telefon: 05292/1366
  28.     Internet-Adresse:
  29.     ali@uni-paderborn.de
  30.  
  31.     Dieses Dokument und die darin aufgeführten Files dürfen frei
  32.     kopiert werden, ohne Gebühren, vorausgesetzt, der Copyright-
  33.     Vermerk bleibt erhalten.
  34.     Alle Software und Dokumentation wird "wie sie ist" zur Verfügung
  35.     gestellt, ohne irgendwelche Gewähr.
  36.  
  37.     Obwohl dieses Programm Freeware ist, bin ich einer finanziellen
  38.     oder ideellen Unterstützung natürlich nicht abgeneigt.
  39.  
  40.  
  41.  
  42. 2. EINFÜHRUNG :
  43. ===============
  44.  
  45. 2.1  Warum einen Emulator ?
  46. ---------------------------
  47.  
  48.     Es wurde und wird noch viel geredet über Geschwindigkeits-
  49.     steigerungen älterer Computer, z.B. durch Einbau einer schnelleren
  50.     CPU, aber meistens sind dem enge Grenzen gesetzt (Timing, ...).
  51.     Warum also nicht ein wesentlich leistungsfähigeres System als
  52.     Plattform nehmen und darauf den älteren Computer emulieren ?
  53.     So wird mit Verbesserung des neuen Systems auch das ältere
  54.     verbessert, nicht nur hinsichtlich der Geschwindigkeit, auch
  55.     hinsichtlich der Ergonomie (z.B. Monitor mit mindestens 70 Hz,
  56.     komfortablere Tastatur) und sonstiger Vorzüge (z.B. Festplatte).
  57.  
  58.     Außerdem ist es recht schade, seine selbstgeschriebenen
  59.     Programme auf dem neuen System nicht mehr verwenden zu
  60.     können. Vor ein paar Jahren hätte ich einen EPROM-Simulator
  61.     gebrauchen können, mit dem man EPROM-Code im RAM testen kann.
  62.     Mit diesem Emulator kein Problem.
  63.     Wenigstens ist es doch faszinierend, bekannte Programme
  64.     auf einem völlig anderen System laufen zu sehen.
  65.  
  66.     Das alles (und noch viel mehr) ist mit einem Emulator wie
  67.     CPCEMU möglich.
  68.  
  69.  
  70. 2.2  Was ist ein CPC ?
  71. ----------------------
  72.  
  73.     Kurz:
  74.     Der AMSTRAD-CPC (Colour Personal Computer) ist ein 8-Bit Computer
  75.     mit Z80A-CPU, 3" Diskettenlaufwerk, den Betriebssystemen AMSDOS
  76.     (manchmal übersetzt mit Advanced MSDOS, ist aber eher nur
  77.     Amstrad DOS), CP/M 2.2 und CP/M Plus. Ein leistungsfähiges
  78.     BASIC ist eingebaut, mit dem fast alle Hardwareeigenschaften
  79.     ausgenutzt werden können.
  80.     Weitere Informationen im Anhang "Informationen zum CPC" (A1.6).
  81.  
  82.  
  83.  
  84. 2.3  Was ist CPCEMU ?
  85. ---------------------
  86.  
  87.     CPCEMU ist der erste wirklich ernst zu nehmende Emulator der
  88.     CPC-Computer.
  89.     Auf einem 386/33 ist die Emulation fast so schnell wie das
  90.     Original, vorausgesetzt, Du benutzt nur wenig Banking.
  91.  
  92.     CPCEMU wurde in C und Assembler geschrieben, dabei wurden
  93.     Borland C 3.1 (mit 386er-Optimierung) und TASM benutzt.
  94.  
  95.  
  96.  
  97. 3.  VORAUSSETZUNGEN FÜR CPCEMU :
  98. ================================
  99.  
  100. 3.1  Hard- und Softwarevoraussetzungen :
  101. ----------------------------------------
  102.  
  103.     - PC (mindestens 386er, nach oben wie immer keine Grenzen)
  104.     - VGA-Grafik
  105.  
  106.     - MSDOS (bestimmt auch DRDOS)  oder
  107.     - OS/2 2.x Dos-Box
  108.  
  109.  
  110. 3.2  Files im CPCEMU - Paket :
  111. ------------------------------
  112.  
  113.     CPCEMU.CFG    Konfigurationsdatei (6.4)
  114.     CPCEMU_E.DOC    englische Dokumentation
  115.     CPCEMU_G.DOC    dieses File
  116.     CPCEMU.EXE    das ausführbare Programm (4.1)
  117.  
  118.     CPCPD1.DSK    Beispieldiskette mit PD-Programmen (6.2)
  119.  
  120.     CPCREAD.C    Quellcode zu CPCREAD.EXE
  121.     CPCREAD.EXE    Programm zum Lesen von CPC-Disketten (6.2)
  122.  
  123.     CPMDISKS.DEF    Datei mit CPC-Formaten für 22DISK (4.2.1)
  124.  
  125.     INSTALL.BAT    Installationsprogramm (4.1)
  126.  
  127.     PARALLEL.PAS    Transferprogramm für eine parallele
  128.             Schnittstelle (4.2.2)
  129.  
  130.     README_E.DOC    englisches LIESMICH
  131.     README_G.DOC    deutsches LIESMICH
  132.  
  133.     ROMGET.ASC    CPC-Basic-Programm zum Speichern der ROMs (4.2.1)
  134.  
  135.     Z80CPC.ROM    das "Not-ROM" (4.3)
  136.     Z80DISK.ROM    das Programm "Copymate" (unbenutzt)
  137.     (Diese beiden ROMs durch die original-ROMs ersetzen.)
  138.  
  139.  
  140.  
  141. 4. INSTALLATION :
  142. =================
  143.  
  144.  
  145. 4.1  Installation von CPCEMU :
  146. ------------------------------
  147.  
  148.     Wahrscheinlich hast Du es schon gemacht:
  149.     Einfach das Archiv CPCEMUxx.xxx in ein Verzeichnis auf der
  150.     Festplatte kopieren und entpacken.
  151.     Danach INSTALL.BAT benutzen, wodurch die drei Unterverzeichnisse
  152.     ROM, TAPE, DISC mit den benötigten Dateien angelegt werden,
  153.     in denen CPCEMU nach ROM-Abbildern, "Kassetten"-Files und
  154.     Disketten-Abbildern sucht.
  155.     Nun kannst Du CPCEMU.EXE aufrufen, aber warte mal ...
  156.  
  157.  
  158. 4.2  Woher ein ROM bekommen ?
  159. -----------------------------
  160.  
  161.     Problem :
  162.     ---------
  163.     Die originalen CPC-ROMs sind NICHT dabei !
  164.     Leider hat mir AMSTRAD keine Erlaubnis dafür gegeben.
  165.     Siehe Anhang "Brief von AMSTRAD" (A1.7).
  166.     Du mußt Dir also die ROMs von irgendwoher besorgen. Im folgenden
  167.     einige Möglichkeiten:
  168.  
  169.     4.2.1  Du hast einen CPC mit 5.25" oder 3.5" (Zweit-)Laufwerk :
  170.     ---------------------------------------------------------------
  171.     Mit dem Hilfsprogramm 22DISK von SYDEX kannst Du auf dem PC
  172.     Fremdformate lesen und beschreiben, eine Spezifikation der
  173.     CPC-Formate habe ich beigelegt.
  174.     Kopiere also einfach ROMGET.ASC  (ein Programm zum Abspeichern
  175.     der CPC-ROMs) auf eine CPC-Diskette, renne zum CPC und starte es.
  176.     Die ROMs OS, BASIC, AMSDOS werden automatisch abgespeichert (falls
  177.     vorhanden). Zurück am PC, kopiere sie in das Verzeichnis .\ROM .
  178.     Falls Du weitere ROMs besitzt, kannst Du diese durch leichte
  179.     Modifikation von ROMGET.ASC auch kopieren. Außerdem ist es Dir so
  180.     möglich, Deinen gesamten CPC-Datenbestand auf den PC zu
  181.     "retten".
  182.  
  183.     4.2.2  Mit paralleler Schnittstelle :
  184.     -------------------------------------
  185.     Nachdem Du ein einfaches Centronics-Kabel gebastelt und
  186.     Deinen CPC und PC zusammengeschoben hast, kannst Du das Transfer-
  187.     programm von Gilles Molinari benutzen.
  188.     In der Datei PARALLEL.PAS kannst Du dir beiden Pascal-
  189.     quellcodes 'getfile.pas' und 'sendfile.pas' finden.
  190.  
  191.  
  192.     4.2.3.  Mit serieller Schnittstelle :
  193.     -------------------------------------
  194.     Ist wahrscheinlich mindestens genauso einfach, ich habe aber
  195.     keine Erfahrung damit.
  196.  
  197.  
  198.     4.2.4. Nichts dergleichen :
  199.     ---------------------------
  200.     Tja, was kannst Du da tun, um doch noch in den Genuß eines CPC
  201.     zu kommen ?
  202.     - Tippe das ROM einfach ab (vielleicht aus einem ROM-Listing).
  203.       Das Buch ROM-Listing CPC 464/664/6128 vom Markt & Technik
  204.       Verlag ist da sehr empfehlenswert, enthält aber nur das
  205.       CPC 464-ROM.
  206.     - Schreibe selbst ein kleines Betriebssystem (das bleibt wohl
  207.       den Spezialisten vorbehalten, ich würde mich aber freuen,
  208.       eine Kopie davon zu bekommen).
  209.     - Setze eine Annonce in ein Computermagazin mit dem Inhalt
  210.         "Wer kopiert mir das CPC-ROM ?"
  211.       (In einem bestimmten Magazin steht jetzt schon jemand
  212.       zum 2.Mal drin. Obwohl noch einige CPC-Besitzer das Magazin
  213.       lesen, hatte er anscheinend noch keinen Erfolg. Warum wohl
  214.       nicht ?)
  215.     - Frage AMSTRAD nach dem ROM
  216.       (Vielleicht hast Du ja mehr Glück ...)
  217.  
  218.     Eigentlich kann ich dies nicht so recht    empfehlen.
  219.     Sei einfach erfinderisch ...
  220.           ... und begnüge Dich solange mit dem "Not-ROM".
  221.  
  222.  
  223.  
  224. 4.3  Das "Not - ROM" :
  225. ----------------------
  226.  
  227.     Für Menschen in der Not (d.h. ohne CPC-ROM) habe ich ein
  228.     sogenanntes "Not-ROM" beigelegt.
  229.     Es befindet sich im Verzeichnis .\ROM und wird automatisch
  230.     benutzt, falls dort das Original-ROM nicht unter demselbem
  231.     Namen installiert wurde.
  232.     Es enthält nur ein Programm, was völlig ohne das originale
  233.     ROM auskommt (bis auf den Zeichensatz), ist aber natürlich
  234.     kein befriedigender Ersatz.
  235.  
  236.  
  237.  
  238. 5.  DER SOFTWARE - CPC :
  239. ========================
  240.  
  241.  
  242. 5.1  Das erste Mal :
  243. --------------------
  244.  
  245.     Herzlichen Glückwunsch , Du hast die größte Hürde vor dem
  246.     sinnvollen Einsatz des Emulators bewältigt.
  247.     (Du hast also die CPC-ROMs in das ROM-Verzeichnis kopiert.)
  248.  
  249.     Einfach CPCEMU.EXE starten, die Konfiguration wird geladen,
  250.     der Speicher wird initialisiert und -- bitte anschnallen --
  251.     der Software-CPC startet ...
  252.     (Um in die Realität zurückzukehren, siehe auch Anhang
  253.      "Kommandozeilenparameter" (A1.1).)
  254.  
  255.     Es erscheint der CPC-Eröffnungsbildschirm und Du kannst alles
  256.     machen, was Du vom CPC her kennst.
  257.     Mit F10 hält die Emulation an (im Debug-Menü), und Du kannst
  258.     sie mit 'r' fortsetzen oder mit 'q' abbrechen.
  259.     Siehe Anhang "Das Debug-Menü" (A1.2).
  260.     Einige Besonderheiten beim Betrieb des emulierten CPCs sind
  261.     jedoch zu beachten.
  262.  
  263.  
  264.  
  265. 6.  BESONDERHEITEN :
  266. ====================
  267.  
  268.  
  269. 6.1  Die Tastatur :
  270. -------------------
  271.  
  272.     Vielleicht hast Du schon gemerkt, daß manche Tasten ein anderes
  273.     Zeichen auf dem Bildschirm hervorrufen, als ihre Beschriftung
  274.     vermuten läßt.
  275.     Das liegt daran, daß das CPC-Keyboard-Layout physikalisch auf
  276.     das des PCs übertragen wurde, um alle Tastenkombinationen zu
  277.     ermöglichen. Eventuell mußt Du ein bischen herumprobieren,
  278.     nach dem Motto "Wer suchet, der findet ..."
  279.     Es sind wirklich alle Tasten vom CPC irgendwo vorhanden (sogar
  280.     noch eine mehr , die "Geheimtaste" ).
  281.  
  282.     6.1.1  Besondere Tasten :
  283.     -------------------------
  284.     - ALT, ALTgr : COPY
  285.  
  286.     - F1 - F12 : Sonderfunktionen, im einzelnen:
  287.       F1 :         Hilfe (es erscheint wahrscheinlich dieser Text)
  288.       F2 :         wechselt zwischen CPC-Bildschirm (Standard-Sicht)
  289.              und Meldungs-Bildschirm (der mit dem roten Rahmen).
  290.              Auf dem Meldungs-Bildschirm werden einige Meldungen
  291.              angezeigt (logisch), u.a. auch der Kassetten-Katalog.
  292.       F3 :       Einlegen einer Diskette. Jeweils ein File aus dem
  293.              DISC_PATH wird angezeigt, und Du kannst durch
  294.              'A' <Ret> oder 'B' <Ret> die Diskette in das
  295.              gewünschte Laufwerk legen. (Nicht sehr kompfortabel.)
  296.              Bitte nicht benutzen, falls Diskette gerade benutzt
  297.                      wird.
  298.       F4 - F7 :  reserviert für zukünftige Verwendung
  299.       F8 :       Hard-Reset (wie Reset-Taster am CPC)
  300.              (Benutze diese Taste, falls CTRL/SHIFT/ESC nicht
  301.                mehr funktioniert.)
  302.       F9 :       reserviert für zukünftige Verwendung
  303.       F10 :      Debug-Menü (siehe Anhang "Das Debug-Menü" (A1.2) )
  304.       F11 - F12: reserviert für zukünftige Verwendung
  305.  
  306.     - Du wirst Dich sicher fragen, wo dann die vom CPC her bekannten
  307.       Funktionstasten sind. Versuche mal das Keypad (Zehnerblock) :
  308.       Bei 'Num-Lock an' sind über das Keypad die Funktionstasten des CPC
  309.       zu erreichen, andernfalls der Joystick.
  310.  
  311.     - Der Joystick:
  312.       Anstatt des Keypads kann auch ein analoger PC-Joystick benutzt
  313.       werden. Dazu muß in der Konfigurationsdatei 'USE_JOYSTICK = YES'
  314.       eingetragen worden sein, dann kann auch der Joystick benutzt
  315.       werden, falls einer vorhanden ist. Der "Keypad-Joystick" kann
  316.       immer benutzt werden.
  317.       (Leider ist meine derzeitige Joystickabfrage zu langsam, so
  318.       funktionieren im Moment nur die Feuerknöpfe.)
  319.  
  320.     - Die PAUSE-Taste funktioniert auch (hält den PC an, bis sie
  321.       erneut gedrückt wird).
  322.  
  323.  
  324. 6.2  Das Diskettenlaufwerk :
  325. ----------------------------
  326.  
  327.     Diskettenzugriffe per FDC (Floppy Disc Controller) werden auf
  328.     die in der Konfigurationsdatei (s.u.) angegebene Datei
  329.     umgeleitet (DISC_PATH + DRV_A bzw. DRV_B). Mit dem Programm
  330.     CPCREAD kannst Du Dir selber solche Files aus CPC-Disketten
  331.     erstellen.
  332.     Die Datei CPCPD1.DSK enthält einige PD-Programme.
  333.     Siehe Anhang "Aufbau von Disketten-Images" (A1,4).
  334.  
  335.  
  336. 6.3  Das Kassettenlaufwerk :
  337. ----------------------------
  338.  
  339.     Nach dem Befehl |TAPE, oder wenn Du kein AMSDOS-ROM besitzt,
  340.     wird die "Kassette" angesprochen. Kassettenzugriffe werden
  341.     dabei in Dateizugriffe auf die einzelnen Dateien im Ver-
  342.     zeichnis TAPE_PATH umgeleitet.
  343.     Der CATalog wird übrigens auf dem Message-Screen angezeigt
  344.     (benutze F2, um die Sicht zu ändern).
  345.     Nicht ASCII-Files besitzen übrigens einen vorangestellten
  346.     AMSDOS-Header.
  347.     Siehe Anhang "Aufbau des AMSDOS-Headers" (A1.5).
  348.     Realisiert wird diese Umleitung mittels einen "ROM-Bypass".
  349.     Siehe Anhang "Funktion des ROM-Bypass" (A1.3).
  350.     Im Moment brauchst Du nur zu wissen, das dieser Bypass für
  351.     Kassettenbetrieb eingeschaltet sein muß (durch den Eintrag
  352.     'TAPE_BYPASS = YES' in der Konfigurationsdatei) ...
  353.  
  354.  
  355.  
  356. 6.4  Die Konfigurationsdatei :
  357. ------------------------------
  358.  
  359.     Jetzt endlich wird die mysteriöse Konfigurationsdatei erläutert.
  360.     Aber eigentlich ist sie gar nicht so mysteriös.
  361.  
  362.     Allgemeines :
  363.     Die Konfigurationsdatei CPCEMU.CFG sollte immer in demselben
  364.     Verzeichnis wie CPCEMU.EXE stehen.
  365.     Kommentare werden durch ein Semikolon ';' eingeleitet, der Rest
  366.     der Zeile wird dann ignoriert.
  367.     Blanks, Tabs, Newlines, ';' dienen als Trennsymbole und können
  368.     beliebig zwischen Bezeichnern und Werten eingesetzt werden.
  369.     Die meisten Definitionen besitzen die syntaktische Form
  370.     <Bezeichner> {T} '=' {T} <Wert> {T}
  371.     Dabei ist {T} eine Folge von mindestens einem Trennsymbol.
  372.     Beispiel:
  373.     'ROM_PATH = .\ROM'
  374.     Unzulässig wäre also 'ROM_PATH=.\ROM', da die Trennsymbole
  375.     fehlen.
  376.     Willst Du einige Bezeichner nicht (um-)definieren, schreibe ein
  377.     Kommentarzeichen ';' davor, 'ROM_PATH = <nichts>' ist unzulässig.
  378.  
  379.     Folgende Konstrukte werden gleich zusätzlich verwendet:
  380.     <Zahl> kann dezimal oder hexadezimal (0x) angegeben werden.
  381.     <Pfad-Name> darf bis zu 60 Zeichen,
  382.     <Dateiname> bis zu 20 Zeichen lang sein.
  383.  
  384.  
  385.     Gültige Bezeichner:
  386.     In Klammern angegebene Werte werden als Standardwerte angenommen,
  387.     falls der betreffende Bezeichner nicht neu definiert wird.
  388.  
  389.     SHOW_CONFIG = {YES,NO}        (YES)
  390.       Um die Konfigurationsübersicht beim Starten der Emulation
  391.       zu unterdrücken. Falls Fehler während der Konfiguration
  392.       aufgetreten sind, wird sie immer angezeigt.
  393.  
  394.     ROM_PATH = <Pfadname>        (.\ROM)
  395.       Setzt den Pfad, wo sich die ROM-Abbilder befinden.
  396.       (Siehe Bezeichner ROM_BLOCKS)
  397.  
  398.     TAPE_PATH = <Pfadname>        (.\TAPE)
  399.       Setzt den Pfad, wo sich die "Kassetten"-Dateien befinden.
  400.       (Wird auch im Debug-Menü bei load, save benutzt; siehe
  401.        Anhang "Das Debug-Menü" (A1.2).)
  402.  
  403.     DISC_PATH = <Pfadname>        (.\DISC)
  404.       Setzt den Pfad, wo sich die Disketten-Abbilder befinden.
  405.       (Siehe Bezeichner DRV_A, DRV_B)
  406.  
  407.     DRV_A = <Dateiname>        (DISC1.DSK)
  408.       Die Diskette, die gerade im Laufwerk A liegt (ein Disketten -
  409.       Image - File im Verzeichnis DISC_PATH).
  410.  
  411.     DRV_B = <Dateiname>        ()
  412.       Wie DRV_A, nur für Laufwerk B.
  413.  
  414.     PRINTER = <Dateiname>        (PRINTER.PRN)
  415.       Die Datei im TAPE_PATH, in die Druckausgaben umgeleitet werden.
  416.       Bei jedem Start des Emulators wird sie neu erzeugt.
  417.  
  418.     TAPE_BYPASS = {YES,NO}        (YES)
  419.       Erlaubt (oder verbietet) den ROM-Bypass der Tape-Vektoren,
  420.       falls ein bekanntes ROM vom CPC 464/664/6128 gefunden wurde.
  421.       Der Bypass ist nötig, wenn Du Kassetten-Files benutzen
  422.       möchtest.
  423.       Vergleiche auch "Das Kassettenlaufwerk" (6.3) und den Anhang
  424.       "Funktion des ROM - Bypass" (A1.3).
  425.  
  426.     DISC_BYPASS = {YES,NO}        (NO)
  427.       Erlaubt (oder verbietet) den AMSDOS-ROM-Bypass, bei dem die
  428.       kassetten-kompatiblen Befehle nicht von AMSDOS gepatched
  429.       werden. (Es werden also weiterhin die Tape-Vektoren verwendet.)
  430.       Das ist nötig, wenn ein Programm zwischendurch das AMSDOS-
  431.       ROM initialisiert, aber ohne |TAPE-Befehl von Kassette
  432.       weiterladen soll.
  433.       (Realisiert durch 'poke &CCF2,&18 : poke &CCF3,&05' im
  434.       AMSDOS-ROM.)
  435.       Die Sektorbefehle bleiben unbeeinflußt, sie gehen immer
  436.       auf Diskette.
  437.  
  438.     DISC_SPEEDUP = {YES,NO}        (YES)
  439.       Erlaubt (oder verbietet) die AMSDOS-ROM-Modifikation, bei
  440.       der die Motor-Wartezeiten minimiert werden, um einen
  441.       schnelleren Disk-Zugriff zu ermöglichen.
  442.       (Die Sachen werden ja von Dos gesteuert, somit brauchen wir
  443.       die Warteschleifen nicht.)
  444.       (Folgende Speicherstellen im AMSDOS-ROM werden verändert :
  445.         poke &C5D4,&01    :'Zeit für Motor - Hochlauf
  446.         poke &C5D8,&01    :'Zeit bei Track formatieren
  447.         poke &C5D9,&01    :'kürzer warten
  448.         poke &C5DA,&01    :'kürzer warten
  449.         poke &C602,&01    :'nur 1 Versuch bei Fehler
  450.         poke &C784,&01    :'schnelles Track suchen
  451.         poke &C7E2,&01    :'schnelles Track suchen    )
  452.  
  453.     USE_JOYSTICK = {YES,NO}        (YES)
  454.       Erlaubt (oder verbietet) die Benutzung eines PC-Joysticks,
  455.       falls vorhanden.
  456.       Der "Keypad-Joystick" kann immer benutzt werden.
  457.  
  458.     VSYNC_CT = <Zahl>        (1)
  459.       Setzt Anzahl der Abfragen des Port B, bis das vsync-Signal
  460.       wechselt. In Wirklichkeit ist dieses Bit nur beim vertikalen
  461.       Strahlenrücklauf des Bildschirms gesetzt.
  462.       Mögliche Werte sind 1 bis 255.
  463.  
  464.     GENINT = <Zahl>            (300)
  465.       Setzt die Frequenz, mit der Interrupts generiert
  466.       werden (in Hz). Auf dem CPC immer mit 300 Hz.
  467.       Auf langsamen Computern kann der Wert auf etwa 100 verringert
  468.       werden (SCR_UPD_CT dann evtl. auf 2).
  469.       Mögliche Werte: 18 Hz bis ca. 600 Hz.
  470.  
  471.     SCR_UPD_CT = <Zahl>        (6)
  472.       Setzt den Screen-Update-Counter. Nach jeweils <Zahl> Interrupts
  473.       wird ein Screen-Update durchgeführt, falls nötig. Werden
  474.       Interrupts mit 300 Hz generiert und <Zahl> = 6 angegeben,
  475.       läuft die Bildschirm-Auffrischung also mit 50 Hz.
  476.       (Zulässige Werte 1-255).
  477.  
  478.     PORT_B = <Zahl>            (0x3F)
  479.       Setzt den Eingangswert am Port B der PIO. Damit kann z.B. die
  480.       Benutzung des Druckers untersagt oder ein anderer Firmenname
  481.       gewählt werden. Im Moment ist "Amstrad" (0x3F) eingestellt.
  482.       Für "Schneider" setze einfach 0x3B ein.
  483.  
  484.       Bedeutung der Bits:
  485.         b7 = 0    (TTL-Signale von Kassette; unbenutzt)
  486.         b6 = 0    (0= Drucker bereit, 1 = busy)
  487.         b5 = 1    (EXP-Signal)
  488.         b4 = 1      (1 = vsync mit 50 Hz oder  0 = mit 60 Hz; unben.)
  489.         b3,b2,b1 = 111
  490.           Firmenname :
  491.           Isp (000), Triumph(001), Saisho(010), Solavox(011),
  492.           Awa(100), Schneider(101), Orion(110), Amstrad(111)
  493.         b0 = 1      (vsync wechselt zwischen 0 und 1 im Emulator,
  494.              Dauer je nach VSYNC_CT)
  495.  
  496.  
  497.     ROM_BLOCKS = <Anzahl> {T}    (0)
  498.     <ROM-Nummer> {T} <Dateiname> {T} <Offset> {T}
  499.             (diese Zeile <Anzahl>-mal wiederholen !)
  500.  
  501.       Beschreibt, welche ROMs geladen werden sollen :
  502.       - <Anzahl> ist Anzahl der im folgenden zu ladenden ROMs.
  503.         Jedes ROM besitzt dabei eine Größe von 0x4000 Bytes.
  504.         (Anzahl von 0 bis ca. 8, begrenzt durch den Speicher.)
  505.  
  506.       - <ROM-Nummer> ist die Nummer die das ROM bekommen soll,
  507.         d.h., mit der es durch 'OUT &DF00,num' selektiert wird.
  508.         0         = Vordergrund-ROM (z.B. BASIC)
  509.         1 - 251     = Hintergrund-ROMs. Auf einem CPC 664/6128 werden
  510.               die ROMs 1-15 bei einem Reset automatisch
  511.               initialisiert (bei einem CPC 464 nur 1-7).
  512.         255     = Lower-ROM (z.B. OS, hat nur im Emulator diese
  513.               Nummer.)
  514.       - <filename> ist die Datei, in der sich das Rom-Abbild im
  515.         Verzeichnis ROM_PATH befindet.
  516.       - <Offset> ist eine Anzahl von Bytes, die in der Datei vor
  517.         dem gewünschten ROM stehen. Ein AMSDOS-Header wird dabei
  518.         automatisch überlesen, bleibt also unberücksichtigt.
  519.         Mit Angabe dieses Offsets ist es möglich, mehrere ROMs
  520.         in einem File zu haben. Bei den Einträgen
  521.         255    Z80CPC.ROM    0x0000
  522.         0    Z80CPC.ROM    0x4000
  523.         befinden sich also Lower-Rom und Vordergrund-Rom direkt
  524.         nacheinander in demselben File.
  525.  
  526.  
  527.  
  528. 6.5  Kompatiblität des Emulators (oder: Was unterstützt wird) :
  529. ---------------------------------------------------------------
  530.  
  531.     6.5.1  Die Z80 - CPU :
  532.     ----------------------
  533.  
  534.     Alle Z80-Befehle, auch sogenannte illegale Befehle.
  535.     Es gibt eine langsame Z80-Emulation in C und eine schnelle
  536.     Emulation in Assembler von Jürgen Weber.
  537.     Durch die "Co-CPU"-Technik, bei der jeder Befehl von den
  538.     beiden Emulationsarten gleichzeitig ausgeführt wird und danach
  539.     die Register verglichen werden, wurden zahlreiche Fehler
  540.     gefunden. Natürlich wurde dies nur während der Programm-
  541.     entwicklung benutzt.
  542.  
  543.  
  544.     6.5.2  Das Gate-Array :
  545.     -----------------------
  546.  
  547.     - alle 32 Farben des CPC (27 verschiedene)
  548.     - alle 3 Bildschirmmodi (x, y, Farben) :
  549.         mode 0 = 160x200x16
  550.         mode 1 = 320x200x4
  551.         mode 2 = 640x200x2
  552.     - ROM-Banking (16KB OS, 16KB BASIC, 16KB AMSDOS, und sonstige
  553.       Zusatzroms)
  554.  
  555.  
  556.     6.5.3  Das PAL (Programmable Logic Array) :
  557.     -------------------------------------------
  558.  
  559.     - Ram-Banking (8*16KB = 128KB)
  560.       Banking kann sehr langsam werden, da Speicherblocke vertauscht
  561.       werden müssen.
  562.       Vielleicht könnte EMS-Memory helfen ...
  563.  
  564.  
  565.     6.5.4  Der CRTC 6845 (Cathode Ray Tube Controller) :
  566.     ----------------------------------------------------
  567.  
  568.     - Bildschirmstart, -offset für Hardware-Scrolling
  569.     - verschiedene Bildschirmgrößen von 0x0 bis 80x25 mittels
  570.       CRTC-Register 1 und 6
  571.  
  572.  
  573.     6.5.5  Die PIO 8255 (Programmable Input-Output) :
  574.     -------------------------------------------------
  575.  
  576.     - Keyboard (über den PSG)
  577.     - vsync-Emulation
  578.  
  579.  
  580.     6.5.6  Der PSG (Programmable Sound Generator) :
  581.     -----------------------------------------------
  582.  
  583.     (noch kein Sound)
  584.  
  585.  
  586.     6.5.7  Der FDC (Floppy Disc Controller) :
  587.     -----------------------------------------
  588.  
  589.     - alle notwendigen FDC-Kommandos, um die Laufwerke A und B zu
  590.       steuern (dazu gehören Sektor lesen/schreiben, Track suchen,
  591.       Sektor-ID lesen, ... ; Track formatieren wird unterdrückt. )
  592.     - sehr flexible Disketten-Formate (bis zu 18 Sektoren pro Track).
  593.       Erzeuge sie mit CPCREAD.
  594.  
  595.  
  596.     6.5.8  Die Kassette :
  597.     ---------------------
  598.  
  599.     - Besonders schnell durch ROM-BYPASS.
  600.       Zugriff auf einzelne Files im TAPE_PATH.
  601.       (Siehe Konfigurationsdatei.)
  602.  
  603.  
  604.     6.5.9  Die Centronics :
  605.     -----------------------
  606.  
  607.     - Druckerausgabe auch mit 8-Bit-Druckerpatch, wird auf die
  608.       Datei PRINTER im TAPE_PATH umgeleitet.
  609.       (Siehe Konfigurationsdatei.)
  610.  
  611.  
  612.  
  613. 6.6 Inkompatiblitäten (oder: Was nicht unterstützt wird) :
  614. ----------------------------------------------------------
  615.  
  616.     - Overscan (höchstens für ein paar dämliche Demos)
  617.       (Wird nie eingabaut werden, da zu langsam)
  618.     - verschiedene Modi gleichzeitig auf dem Bildschirm (flimmert)
  619.     - Sound (noch kein einziger Ton)
  620.     - PC-Joystick (nur Feuerknöpfe)
  621.     - OS/2 Dos-Box: Flackern bei Farben setzen ( da kein hsync
  622.       verfügbar.)
  623.     - Programm Copymate: Laden/Speichern unmöglich, da es einen Trick
  624.       benutzt, um die Sektoranzahl festzustellen)
  625.  
  626.     - Bitte melde alle aufgetretenen Fehler !
  627.  
  628.  
  629.  
  630.  
  631. A1.  Anhang :
  632. =============
  633.  
  634.  
  635. A1.1  Kommandozeilenparameter :
  636. -------------------------------
  637.  
  638.     Du kannst CPCEMU auf verschiedene Arten aufrufen, indem
  639.     Du Optionen angibst, die durch '-' oder '/' eingeleitet
  640.     werden, z.B.   'CPCEMU /s'
  641.  
  642.     Folgende Optionen sind zulässig:
  643.     CPCEMU /f    : startet CPCEMU im Fast-Modus (Standard)
  644.     CPCEMU /s    : startet CPCEMU im Slow-Modus
  645.     CPCEMU /d    : startet CPCEMU im Debug-Modus
  646.               (Siehe Anhang "Das Debug-Menü" (A1.2).)
  647.     CPCEMU /h       : zeigt einen Hilfsbildschirm
  648.  
  649.     Die Option '/d' wird auch automatisch verwendet, wenn
  650.     eine unbekannte Option angegeben wurde.
  651.  
  652.  
  653.  
  654.  
  655. A1.2  Das Debug - Menü :
  656. ------------------------
  657.  
  658.     Von sowas hätte ich damals auf dem CPC nur geträumt !
  659.     Es wird der komplette CPU-Zustand des Z80 angezeigt und
  660.     kann modifiziert werden, der Speicher kann "gedumped",
  661.     disassembliert oder modifiziert werden, Speicherauszüge
  662.     (Programme) können geladen oder gespeichert werden.
  663.     Und das Interessanteste:
  664.     Du kannst die Code-Ausführung im Single-Step-Mode verfolgen !
  665.     (Ähnlich wie bei einem richtigen Debugger).
  666.  
  667.     A1.2.1  Aufbau des Debug-Menüs :
  668.     --------------------------------
  669.  
  670. R)un T)race S)tep  A)ssem D)ump I)nput  L)oad saV)e  M)ode  F)ast Q)uit
  671. AF=0000 BC=0000 DE=0000 HL=0000 IX=0000 IY=0000 SP=0000 PC=0000 IR=0000
  672. AF'=0000 BC'=0000 DE'=0000 HL'=0000 IFF1=0 IFF2=0 IMD=0  NZ NC PO P
  673. 0000 : 01 89 7F       LD BC,&7F89
  674. -f->
  675.  
  676.     In der ersten Zeile werden die verfügbaren Kommandos angezeigt
  677.     (benutze die Großbuchstaben). In den beiden nächsten Zeilen
  678.     stehen die aktuellen Inhalte der Register. Darunter steht der
  679.     disasemblierte aktuelle Befehl an Position PC.
  680.     In der letzten Zeile wartet ein Prompt auf Deine Eingabe.
  681.     ('f' zeigt an, daß Du gerade die fast-CPU benutzt.)
  682.  
  683.  
  684.     A1.2.2  Vorbemerkungen :
  685.     ------------------------
  686.     In eckige Klammern eingeschlossene Parameter sind optional [opt.].
  687.     Zahlenangaben alle hexadezimal, z.B. <Adresse> = 0000 bis ffff.
  688.     "<ret>" zeigt an, daß Du in einem speziellen Modus bist und
  689.     <Return> drücken sollst, um fortzufahren. <String><Return>
  690.     verläßt diesen Modus (d.h. z.B. b<Return>).
  691.     Kommandos bestehen aus einem Buchstaben, meistens gefolgt von
  692.     einer optionalen Adresse. Zwischen Kommando-Buchstabe und
  693.     dieser Adresse muß dann ein Leerzeichen oder Tab stehen.
  694.     Ohne Angabe einer Adresse wird als Default-Wert PC (Programmzähler)
  695.     angenommen.
  696.  
  697.  
  698.     A1.2.3  Übersicht über die Kommandos :
  699.     --------------------------------------
  700.  
  701.     R)un :
  702.     r [<Adresse>] : startet die Emulation ab PC oder der optional
  703.       angegebenen Adresse.
  704.       Beispiele:
  705.       -f-> r    startet die Emulation ab PC
  706.       -f-> r 100    setzt PC auf 0x100 und startet die Emulation
  707.  
  708.     T)race (Trace into) :
  709.     t [<Adresse>] : führt wirklich nur den aktuellen Befehl aus,
  710.       mit <Return> den nächsten, usw. <string><Return> beendet den
  711.       Trace-Modus.
  712.       Alle Einzelschrittbefehle werden von der Slow-CPU ausgeführt
  713.       (selbst wenn "-f->" angezeigt wird), da in der Fast-CPU kein
  714.       Zähler mehr existiert.
  715.  
  716.     S)tep (Step over) :
  717.     s [<Adresse>] : führt den aktuellen Befehl aus, eigentlich
  718.       alle Befehle, bis PC auf dem direkt nachfolgenden Befehl
  719.       steht, was z.B. bei einem 'Ret' recht lange dauern kann.
  720.       In diesem Fall hilft (wie immer) F10.
  721.       Alle Einzelschrittbefehle werden von der Slow-CPU ausgeführt
  722.       (selbst wenn "-f->" angezeigt wird), da in der Fast-CPU kein
  723.       Zähler mehr existiert.
  724.  
  725.     A)ssemble (eigentlich Disassemble) :
  726.     a [<Adresse>] : disassembliert die nächsten 16 Befehle, mit
  727.       <Return> die nächsten, usw. <string><Return> beendet den
  728.       Disassemble-Modus.
  729.  
  730.     D)ump :
  731.     d [<Adresse>] : zeigt einen Hex-Ascii-Speicherauszug der nächsten
  732.       256 Bytes ab PC oder Adresse an, <Return> die nächste Seite, usw.
  733.       <string><Return> beendet den Dump-Modus.
  734.  
  735.     I)nput (Speicherstellen modifizieren) :
  736.     i [<Adresse>] : zeigt die Speicherstelle mit aktuellem Inhalt an,
  737.       der durch <Return> bestätigt oder durch <hexzahl><return>
  738.       verändert werden kann. Verlassen wird der Input-Modus mit
  739.       einer ungültigen Zahl, z.B. -1<Return>.
  740.  
  741.     L)oad (Laden eines Speicherbereichs) :
  742.     l [<Adresse>]  : fragt nach dem Dateinamen <name> und läd dann
  743.       die Datei <name> aus dem Verzeichnis TAPE_PATH nach <Adresse>
  744.       Ein AMSDOS-Header wird erkannt.
  745.       Siehe Anhang "Aufbau des AMSDOS-Headers".
  746.       Beispiele:
  747.       -f-> l<Return> demo<Return>     :
  748.         läd Datei 'demo' an den aktuellen PC
  749.       -f-> l a000<Return> myprog<Return>     :
  750.         läd Datei 'myprog' nach 0xA000
  751.  
  752.     saV)e (Speichern eines Speicherbereichs) :
  753.     v [<Adresse>]  : fragt nach dem Dateinamen <name> und der Länge
  754.       des Speicherblocks. Dieser wird dann ab <Adresse> (oder eben PC)
  755.       abgespeichert, und zwar im Verzeichnis TAPE_PATH als Binärdatei,
  756.       d.h. mit AMSDOS-Header.
  757.       Siehe Anhang "Aufbau des AMSDOS-Headers".
  758.       Beispiel:
  759.       -f-> v<Return> demo<Return> 4000<Return>    :
  760.         speichert "demo" ab PC mit der Länge 0x4000.
  761.  
  762.     M)ode (Setzen des Anzeigemodus) :
  763.     m : Schaltet Registeranzeige, Befehlsdisassemblierung des
  764.       aktuallen Befehls an/aus.
  765.  
  766.     F)ast (Z80-Emulationsart wählen) :
  767.     f : Wechselt zwischen der schnellen Z80-Emulation (entwickelt in
  768.       Assembler von Jürgen Weber, Standardeinstellung) und der
  769.       langsamen (in C geschriebenen).
  770.       Das Prompt-Symbol wechselt dann zwischen "-f->" für schnell
  771.       (fast) und "-s->" für langsam (slow).
  772.       Alle r, s, t-Kommandos beziehen sich dann auf die gewählte
  773.      Z80-Emulationsart.
  774.  
  775.     Q)uit (Beenden des Programms) :
  776.     q : beendet den Emulator.
  777.  
  778.  
  779.     A1.2.4  Registermanipulationen :
  780.     --------------------------------
  781.  
  782.     Neben den Buchstabenkommandos gibt es auch Befehle zum Setzen
  783.     der Register mit der Syntax:      '<Register>=<Hex-Wert>'
  784.     Beispiele:
  785.     - af=345    : setzt Register AF auf 0x0345
  786.     - pc=a000    : setzt Programmzähler auf 0xA000
  787.  
  788.     Hier wird '=' als Trennsymbol verwendet, somit sind keine
  789.     zusätzlichen Blanks erforderlichg (dadurch ist auch
  790.      '<Register>   <Hex-Wert>' möglich).
  791.     Alle Register, die angezeigt werden, lassen sich verändern, also
  792.     AF, BC, DE, HL, IX, IY, SP, PC, IR, AF', BC', DE', HL',
  793.     zusätzlich IFF1, IFF2 und IMD.
  794.  
  795.  
  796.  
  797. A1.3  Funktion des ROM - Bypass :
  798. ---------------------------------
  799.  
  800.     Es wurden Spezialbefehle eingeführt, die eine bestimmte
  801.     Funktion des Emulators aufrufen. Diese Befehle werden direkt
  802.     in das ROM eingetragen, so daß das Patchen der RAM-Vektoren
  803.     auch weiterhin möglich ist.
  804.     Als Befehle wurden eingeführt:
  805.     ED FC xx  USER &BCxx    (nur gültig für einige Ram-Vektoren)
  806.     Entspricht einem Call-Befehl zu einer internen Funktion,
  807.     wobei für xx folgende Werte gültig sind:
  808.     65    :    CAS INIT (BC65)
  809.     77    :    CAS IN OPEN (BC77)
  810.     7A    :    CAS IN CLOSE
  811.     7D    :    CAS IN ABANDON
  812.     80    :    CAS IN CHAR
  813.     83    :    CAS IN DIRECT
  814.     86    :    CAS RETURN
  815.     89    :    CAS TEST EOF
  816.     8C    :    CAS OUT OPEN
  817.     8F    :    CAS OUT CLOSE
  818.     92    :    CAS OUT ABANDON
  819.     95    :    CAS OUT CHAR
  820.     98    :    CAS OUT DIRECT
  821.     9B    :    CAS CATALOG
  822.  
  823.     Zusätzlich gibt es noch den User-Break-Befehl
  824.     ED FC FC  USER &BCFC , der die Emulation sofort anhält.
  825.  
  826.  
  827.  
  828. A1.4  Aufbau von Disketten - Images :
  829. -------------------------------------
  830.  
  831.     Disketten-Image-Files bestehen aus einem 0x100-Byte langen
  832.     Disketten-Informationsblock und für jeden Track aus einem
  833.     0x100-Byte langen Track-Informationsblock, an den sich die
  834.     Daten des Tracks (zu jedem Sektor) anschließen.
  835.  
  836.     A1.4.1  Der Disketten - Informationsblock :
  837.     -------------------------------------------
  838.     Byte (hex) :    Bedeutung:
  839.     00 - 21        MV - CPCEMU Disk-File\r\nDisk-Info\r\n
  840.             (als Kennung)
  841.     22 - 2F         unbenutzt (0)
  842.     30        Anzahl Tracks (40, 42, vielleicht 80)
  843.     31        Anzahl Heads (1, 2 noch nicht unterstützt)
  844.     32 - 33        Trackgröße (einschließlich 0x100-Bytes Track-Info)
  845.             Bei 9 Sektoren * 0x200 Bytes + 0x100 Byte Trk.Info
  846.             also 0x1300.
  847.     34 - FF        unbenutzt (0)
  848.  
  849.     A1.4.2  Der Track - Informationsblock (für jeden Track) :
  850.     ---------------------------------------------------------
  851.     Byte (hex) :    Bedeutung:
  852.     00 - 0C        Track-Info\r\n
  853.     0D - 0F        unbenutzt (0)
  854.     10        Track-Nummer (0 bis Trackanzahl-1)
  855.     11        Head-Nummer (0) (später vielleicht auch 1)
  856.     12 - 13        unbenutzt (0)
  857.     Format-Track-Parameter:
  858.     14        BPS (Bytes pro Sektor) (2 für 0x200 Bytes)
  859.     15        SPT (Sektoren pro Track) (9, max. 18 möglich)
  860.     16        GAP#3 Format (Lücke beim Formatieren: 0x4E)
  861.     17        Filling-Byte (Füllbyte beim Formatieren: 0xE5)
  862.     Sektor-Information (jeweils für jeden Sektoren):
  863.     18+i        Tracknummer    \
  864.     19+i        Headnummer     | Sektor-ID-Informationen
  865.     1A+i        Sektornummer     |
  866.     1B+i        BPS              /
  867.     1C+i        Status 1 Fehlercode (0)
  868.     1D+i        Status 2 Fehlercode (0)
  869.     1E+i , 1F+i    unbenutzt (0)
  870.  
  871.     Anmerkungen:
  872.     In der Reihenfolge der Sektor-ID's müssen nach der Track-Info
  873.     die Sektordaten kommen. Es dürfen keine Tracks, Sektoren
  874.     ausgelassen werden.
  875.     CPCREAD dient zum Kopieren von CPC-Disketten in dieses Format.
  876.  
  877.  
  878.  
  879. A1.5  Aufbau des AMSDOS - Headers :
  880. -----------------------------------
  881.  
  882.     Byte (hex:)     Bedeutung:
  883.     00        User (0 , mögliche Werte 0-15)
  884.     01 - 0F        Filename+Extension (evtl. mit Nullen aufgefüllt)
  885.     10        Blocknummer (0)
  886.     11        Letzter-Block-Flag (0)
  887.     12        File-Typ (0=Basic, 1=geschütztes Basic, 2=Binär,...)
  888.     13 - 14        Blocklänge (0)
  889.     15 - 16         Ladeadresse (0-FFFF)
  890.     17        Erster-Block-Flag (0)
  891.     18 - 19         Logische Länge (0-FFFF)
  892.     1A - 1B         Einsprungadresse (0-FFFF)
  893.     1C - 3F        Frei für den Benutzer (0)
  894.     40 - 42        wirkliche Filelänge (1-FFFFFF)
  895.     43 - 44        Prüfsumme über Bytes 00-42
  896.     45 - 7F        unbenutzt (zufällige Werte aus dem Sektorpuffer)
  897.  
  898.     Anmerkung:
  899.     Der Header wird jeder nicht-ASCII-Datei vorangestellt.
  900.     Er wird anhand der Prüfsumme erkannt.
  901.     Bytes 00 - 3F stammen aus der Kassettenzeit, in der Files
  902.     in Blöcke aufgeteilt wurden.
  903.     Unbedingt notwendig sind die Bytes 12, 15-16, 1A-1B, 40-42, 43-44 .
  904.  
  905.  
  906.  
  907. A1.6  Informationen zum CPC :
  908. -----------------------------
  909.  
  910.     Da gäbe es so viel zu sagen, es ließen sich mehrere Bücher
  911.     schreiben. Vielleicht in einer späteren Dokumentation ...
  912.  
  913.  
  914.  
  915. A1.7  Brief von AMSTRAD :
  916. -------------------------
  917.  
  918.     Folgenden (gekürzten) Brief habe ich an AMSTRAD geschrieben
  919.     (übersetzt ins Deutsche) :
  920.  
  921.  
  922.  
  923.     Sehr geehrte ...
  924.     Ich möchte Ihnen ein außergewögnliches Programm vorstellen !
  925.  
  926.     Einen CPC-Emulator für den PC.
  927.  
  928.     Sie mögen sagen, "CPC, den Heimcomputer, den wir vor Jahren
  929.     entwickelt haben, das ist vorbei !"
  930.     Aber es gibt immer noch Leute, die ihn benutzen, mögliche
  931.     Käufer von Amstrad-PC's. Ein Emulator ist ein weiterer Grund,
  932.     sich einen PC anzuschaffen, man kann weiterhin die alten
  933.     gut bekannten Programme während einer Übergandsphase nutzen.
  934.  
  935.     Auch für jemanden, der schon einen PC hat, ist es faszinierend.
  936.     Ich war total überrascht, als ich den CPC-Eröffnungsbildschirm
  937.     das erste Mal auf einem völlig anderen Computer sah. Das
  938.     trieb mich an, die Emulation zu verbessern (zuerst war sie
  939.     nur schwarz-weiß ...), so würde ich sie heute als
  940.     "Software-CPC" bezeichnen. Natürlich kann sie noch verbessert
  941.     werden. Einige Details zum Emulator liegen als Anlage bei.
  942.  
  943.     Leider kann ich den Emulator ohne Unterstützung nicht
  944.     weiterprogrammieren (ich bin nur ein Student). Alle
  945.     Programme, die ich je geschrieben habe, sind Public
  946.     Domain, genauso wie die aktuelle Version von CPCEMU.
  947.  
  948.     Wenn Sie interessiert sind, kann ich Ihnen den Emulator
  949.     zum Testen schicken.
  950.  
  951.     Falls nicht (ich denke nicht), möchte ich wissen, unter
  952.     welchen gesetzlichen Bedingungen ich das Original Amstrad-
  953.     CPC-ROM in einem Shareware-Paket beilegen darf.
  954.     (Einige Leute fragten mich danach.)
  955.     .
  956.  
  957.     Es gab folgende Antwort :
  958.  
  959.     .
  960.  
  961.     Sehr geehrter ...
  962.  
  963.     Danke für Ihren Brief, der den CPC betraf.
  964.  
  965.     Bitte nehmen Sie den Rat an, daß das CPC ROM von einem
  966.     Copyright geschützt ist, und wir Ihnen zu unserem Bedauern
  967.     in diesem Fall keine Hilfe anbieten können.
  968.  
  969.     Wir bedauern, Ihnen in diesem Fall nicht behilflich sein
  970.     zu können und Unstimmigkeiten hervorgerufen zu haben.
  971.  
  972.     .
  973.  
  974.     Somit darf ich ein ROM nicht beilegen. Ich frage mich nur,
  975.     wer dann das Copyright hat.
  976.  
  977.  
  978.  
  979.  
  980. A1.8  Geschichte der Programmentwicklung (history) :
  981. ----------------------------------------------------
  982.  
  983.     A1.8.1  Z80EMU (nur ein Z80 mit kaum CPC) :
  984.     -------------------------------------------
  985.     - v1.0 (1991)
  986.       erste Version in Pascal (nur eine Z80-Emulation)
  987.     - v1.2 (12.8.1992 - 16.8.1992)
  988.       erste Version in C (mit TPTC umgewandelt)
  989.       Z80-Probleme: P-Flag bei ADD HL..., DAA, ldir; Z-Flag bei BIT...
  990.       Z,S-Flags bei Rotate; ROMs möglich
  991.     - v1.3 (18.8.1992)
  992.       Port-Adressierung im Lo-Byte war falsch.
  993.       Neues Speichermanagement (128 KB RAM, 32 KB ROM)
  994.     - v2.0 (18.8.1992 - 22.8.1992)
  995.       Implementierung der Co-CPU-Technik, um Fehler zu finden
  996.       (mit seperatem Speicher für die CO-CPU).
  997.       Z80-Probleme: H-Flag gesetzt nach AND... ; CPI... setzt N-Flag
  998.       Bildschirmfarben Farben Blau und Gelb (vorher schwarzweiß)
  999.     - v2.1 (25.8.1992 - 27.8.1992)
  1000.       Alle Pens, Farben des CPCs in allen Modi; nur auf den
  1001.       sichtbaren Bildschirm wird geschrieben.
  1002.       Co-Z80-Error: Alle (ix+zz) mit negativer Distanz waren
  1003.       falsch ! Vergessen, signed char zu nehmen.
  1004.     - v2.2 (30.8.1992 - 3.9.1992)
  1005.       Neue Keyboard-Routine, Palettenänderung ohne Flackern (hsync).
  1006.       Einführung eines "Not-Rom" mit Copymate.
  1007.     - v2.3 (15.9.1992 - 19.9.1992)
  1008.       FDC-Emulation zum Laden von Sektoren.
  1009.       Co-Z80-Error: LD XH... war LD H...
  1010.     - v2.3b (19.9.1992)
  1011.       Screen-Update nur auf Blöcken 0..3 (nicht 4..7) ;
  1012.       Port FCxx gleich wie FBxx (für CP/M Plus). Da wußte ich
  1013.       noch nicht, daß OUTI... das B-Register pre-dekrementiert.
  1014.     - v2.4 test (25.10.1992)
  1015.       Nur R-Register-Emulation, falls gewünscht (per define);
  1016.       Screen-Update jetzt jeden n.Interrupt und nicht für jedes
  1017.       Byte einzeln, was in den Speicher geschrieben wird.
  1018.       (Noch sehr langsam, da in C).
  1019.       Neue Speicherverwaltung mit Blöcken nur ab Segmentstart.
  1020.     - v2.5 test (31.10.1992)
  1021.       Geänderte Speicherzuweisung. Endlich Hardware-Scrolling
  1022.       und verschiedene Bildschirmgrößen möglich.
  1023.     - v2.6 test (5.11.1992)
  1024.       Neue Keyboard-Routine von Arnt Gulbrandsen, endlich alle Tasten
  1025.       erreichbar; Screen-Update in Assembler
  1026.     - v2.7 test
  1027.       Versucht, die schnelle Emulation von Jürgen Weber einzubinden,
  1028.       klappt noch nicht.
  1029.     - v2.8
  1030.       Verbesserter Screen-Update: Nur Bereiche, die sich verändert
  1031.       haben, werden auf den Bildschirm gebracht.
  1032.     - v2.9
  1033.       Timer-Handler mit 300 Interrupts. Fast-Emulation läuft, wenn
  1034.       kein ROM (Banking) benötigt wird.
  1035.  
  1036.     A1.8.2  CPCEMU (endlich ein CPC) :
  1037.     ----------------------------------
  1038.     - v0.2 (23.12.1992), Nachfolger von Z80EMU v2.9
  1039.       Nach nahezu 4 Stunden mit dem Turbo-Debugger endlich den
  1040.       Grund gefunden, warum sich die fast-Emulation aufhängte:
  1041.       ES anstatt DS gepushed.
  1042.     - v0.3 (28.12.1992 - 29.12.1992)
  1043.       N-Flag bei INI,OUTI setzen. CPI im fast-Z80 setzte falsche
  1044.       Flags. RL(HL) benutzte Read-segment(DS) anstatt Write-
  1045.       Segment(ES). LD A,R produziert jetzt Zufallszahlen;
  1046.       Alle Kassettenroutinen bis auf CAS IN CHAR.
  1047.     - v0.4 (1.1.1993)
  1048.       IN A,(n): A nach b8..b15 (anstatt B); RAM-Konfiguration 0xc3:
  1049.       0,3,2,7 (für CP/M Plus).
  1050.       KC-Compact (ein CPC-Kompatibler aus der ehem.DDR) benutzt Port
  1051.       EE00 - EE3D, nur wofür ?
  1052.     - v0.5 (28.1.1993 - 8.2.1993)
  1053.       INIR,... R-Register-Erhöhung abhängig von B, nicht von BC.
  1054.       Endlich CAS IN CHAR (falscher Patch beim CPC 6128 eingetragen).
  1055.     - v0.6 (23.3.1993 - 24.5.1993)
  1056.       Ein Amerikaner hat Jürgen darauf aufmerksam gemacht, daß die
  1057.       OUTI-Befehle das B-Register pre-dekrementieren !
  1058.       C-Teile jetzt auch im 386er-Code (mit Borland C++ v3.1)
  1059.       Disk-Image-Files jetzt mit Endung .DSK.
  1060.       CPCREAD.PAS korrigiert (vergessen, head mit 0 zu initialisieren)
  1061.       und in CPCREAD.C umgewandelt.
  1062.       Pio-8255-Port-Adressierung flexiblisiert (kann auch lesen,
  1063.       wenn Port auf Ausgabe geschaltet ist, ...)
  1064.     - v0.7 (26.7.1993 - 29.8.1993) (inoffiziell)
  1065.       Source völlig überarbeitet, modularisiert.
  1066.       Konfigurationsfile eingeführt, jetzt mehrere ROMs möglich.
  1067.       Änderung des Firmennamens von Schneider auf Amstrad.
  1068.       (Kann jetzt jeder selber einstellen.)
  1069.           Fehler im RAM-Banking beseitigt.
  1070.       Neue Dokumentation in Deutsch
  1071.     - v0.8 (30.8.1993 - )
  1072.       Slow-Emulation: Parity-Befehle durch Tabelle nicht nur für
  1073.       die Parität beschleunigt.
  1074.       Z80: ED xx mit illegalem xx wird ignoriert.
  1075.       Neue Dokumentation jetzt auch in Englisch.
  1076.  
  1077.  
  1078.  
  1079. A1.9  Danksagungen :
  1080. --------------------
  1081.  
  1082.     - Besonderen Dank an Jürgen Weber, der mir nicht nur sehr viele
  1083.       Tips gegeben und Verbesserungsvorschläge gemacht hat, sondern
  1084.       vor allem die schnelle Z80-Emulation aus seinem CP/M-Emulator
  1085.       ZSIM beigesteuert hat.
  1086.  
  1087.             Jürgen G. Weber
  1088.             Wiesentalstraße 1
  1089.             74523 Schwäbisch Hall
  1090.             Federal Republic of Germany
  1091.  
  1092.             email: weberj@dia.informatik.uni-stuttgart.de
  1093.  
  1094.  
  1095.     - Dank auch an Arnt Gulbrandsen, aus dessen JPP-Source ich die
  1096.       Ideen für den Keyboard-Handler und die Joystickabfrage bekam.
  1097.       JPP ist übrigens ein sehr guter Spectrum-Emulator.
  1098.  
  1099.     - Dank an Gilles Molinari für sein Transferprogramm.
  1100.  
  1101.     - Dank an AMSTRAD für die Beantwortung meines Briefes
  1102.       (war mein erster englischer Geschäftsbrief).
  1103.  
  1104.     - Und Dank an die vielen Benutzer, die mir Verbesserungsvor -
  1105.       schläge geschrieben haben oder sonstige Ideen hatten.
  1106.  
  1107.  
  1108.  
  1109.  
  1110. A1.10  Geschützte Warenzeichen :
  1111. --------------------------------
  1112.  
  1113.     CP/M, CP/M 2.2 und DRDOS sind von Digital Research.
  1114.     MS-DOS ist von Microsoft.
  1115.     IBM PC, PC-XT, PC-AT and OS/2  sind von International
  1116.     Business Machines.
  1117.  
  1118.     CPC, AMSDOS ist von Amstrad,
  1119.     BORLAND C, TASM (Turbo Assembler) sind von Borland,
  1120.     22DISK ist von SYDEX
  1121.     ...
  1122.  
  1123.  
  1124.  
  1125. A1.11  Adresse von AMSTRAD :
  1126. ----------------------------
  1127.  
  1128.     Amstrad plc, Brentwood House,
  1129.     169 Kings Road, Brentwood,
  1130.     Essex CM14 4EF
  1131.  
  1132.  
  1133.  
  1134. A1.12  Der Autor :
  1135. ------------------
  1136.  
  1137.     Marco Vieth (22),
  1138.     Student an der Universität Paderborn
  1139.     7.Semester (WS 93/94)
  1140.  
  1141.  
  1142.  
  1143.     Viel Spaß !
  1144.  
  1145.  
  1146.     ----------------------
  1147.  
  1148.