C 64
Grafik-Erweiterung

Auf zu neuen Grafikdimensionen mit Giga-CAD

Dreidimensionale Grafiken und Filme waren bisher nur mit professionellen CAD-Programmen zu realisieren. Was den Großrechnern vorbehalten war, ist nun auch auf Ihrem C 64 möglich: »Giga-CAD« bricht dieses Monopol der »Großen« und macht automatisiertes und computergestütztes Zeichnen und Konstruieren zum Kinderspiel.

Computergrafik: Schriftzug »GIGA-CAD« als schattierte 3D-Blockbuchstaben, umgeben von Kugeln, Sternkörpern, Ringen und Zylindern

Es hat sicher jeder schon einmal mit etwas neidischem, aber doch begeistertem Blick jene Computer-Grafiken betrachtet, die von so verblüffender Räumlichkeit und Faszination sind, daß C 64-Besitzer nur davon träumen konnten! Lassen Sie sich nun von Giga-CAD in die Dimensionen der 3D-Grafik entführen und gestalten Sie selbst Ihre absolut plastischen Bilder! Ihre Tätigkeit wird damit vom klassischen Reißbrett an den Bildschirm verlagert. Bemerkenswert ist, daß die Konstruktion von Objekten mit sehr geringem Aufwand möglich ist. Es wäre sicherlich ein Alptraum, müßte man die Koordinaten dreidimensionaler Gebilde über die Tastatur eingeben. Deshalb bieten wir Ihnen mit Giga-CAD ein Eingabesystem, mit dessen Hilfe räumliche Körper auf die denkbar einfachste Art bildschirmorientiert konstruiert werden. Hierbei steht dem Anwender eine komfortable Benutzeroberfläche zur Verfügung. Gesteuert wird mit dem Joystick. Die Eingabe erfolgt in der Sprache des Anwenders unter einfacher und leichtverständlicher Benutzerführung. Dieses Konzept öffnet die Tür zu vielen schöpferischen Möglichkeiten während des Entwurfs- und Zeichenprozesses, da es nicht auf reine Grafikbefehle begrenzt ist. So ist das Erstellen von Körpern nicht mehr bittere Vorarbeit zur Berechnung schattierter Grafiken, sondern reines Vergnügen.

Darüber hinaus eröffnen wir Ihnen noch die Möglichkeit, Grafiken mit einer Auflösung von 640*400 beziehungsweise 1000*640 (!) Punkten zu berechnen und auf Ihrem Drucker auszugeben. Hierzu ist dem Programmpaket eine Hardcopy-Routine beigefügt, die es ermöglicht, auf allen grafikfähigen 8-Nadel-Druckern (nach einfacher Anpassung) sämtliche Grafiken, auch in doppelter Dichte, zu erzeugen. Alles in allem handelt es sich hierbei um ein Software-Paket, dessen Konzept aufgrund der Entwicklungsdauer von 6 Monaten als ausgereift bezeichnet werden kann.

Nach dem Laden (Listing 1) befinden Sie sich in einem Menü. Mit dem Joystick (Port 2) können Sie das kreuzförmige Sprite über den Bildschirm bewegen. Am besten befassen wir uns zuerst mit der Eingabeeinheit. Dazu muß der Cursor auf den Begriff »Erstellen« in der Kopfzeile gesetzt und der Feuerknopf gedrückt werden. Hat man sich nun nach entsprechender Aufforderung Gewißheit darüber verschafft, daß sich die Systemdiskette im Laufwerk befindet, drückt man einfach eine Taste und der entsprechende Programmteil (Listing 3) wird von Diskette nachgeladen. Sollten Sie einmal irrtümlich auf »Erstellen« gegangen sein, können Sie Ihre Wahl mit <←> wieder rückgängig machen.

In der Eingabeeinheit ist der Bildschirm in vier Bereiche aufgeteilt (Bild 1). In den drei unbelegten Grafikfenstern werden erstellte Körper in allen drei Projektionen dargestellt. Das Viertel links unten beinhaltet neun 3D-Koordinatensysteme. Mit Hilfe dieser Symbole kann man Gebilde transformieren, also geometrisch am Bildschirm verändern. Das heißt, man kann Objekte um alle drei Achsen drehen und in alle drei Richtungen verschieben, dehnen, stauchen und spiegeln. Am oberen Bildschirmrand befindet sich eine Kopfzeile, die eine Übersicht aller verfügbaren Hauptfunktionen liefert: »Fläche«, »Rotation«, »Form«, »Makro«, »Zeichen«, »Löschen« und »Exit«. Auf diese Punkte wird im folgenden eingegangen.

1. »Fläche«

Bildschirmfoto: Drahtgittermodell einer Brücke in drei Projektionsansichten, links unten die neun Koordinatenkreuz-Symbole
Bild 1. Eine Brücke entsteht. Deutlich erkennt man die drei möglichen Projektionsebenen, die während der Konstruktion zu sehen sind.

Dieser Menüpunkt dient der Eingabe von einzelnen Flächen, die man zu einem Gesamtgebilde zusammenfügen kann. Aufrufen kann man diese und alle anderen Funktionen, indem man mit dem Cursor-Sprite auf den entsprechenden Begriff in der Kopfzeile fährt und den Feuerknopf drückt. Das wäre hier das Wort »Fläche« in der oberen linken Bildschirmecke. Auf diesem Wege gelangt man auf eine weitere Bildschirmseite (Bild 2). Die Mitte des Bildschirms, die später der Drehachse entspricht, ist mit einem kleinen Kreuz markiert. Um maßstabgetreu konstruieren zu können, ist ein Punktraster mit 10 Pixel Abstand über die Grafik gelegt. Zuerst einmal bewegt man den Cursor auf den ersten Eckpunkt der gewünschten Fläche. Mit dem Feuerknopf wird dieser Punkt fixiert. Alle weiteren Eckpunkte der geplanten Fläche werden ebenso mit dem Cursor markiert und anschließend mit <Feuer> in den Datensatz der behandelten Fläche übernommen. Die Eingabe der Konturen einer Fläche wird mit der »Gummiband«-Methode vorgenommen. Dabei bleibt der Cursor bis zum Ende der Eingabe mit dem Anfangspunkt und dem zuletzt fixierten Eckpunkt durch eine blinkende Linie verbunden. Diese Linie kann man nun, gleich einem Gummiband, ganz nach Wunsch über den ganzen Bildschirm »dehnen« und so die Gestalt der Fläche völlig beliebig entwerfen. So ist gewährleistet, daß es sich bei der Fläche immer um einen geschlossenen Polygonzug handelt. Bei der Konstruktion von Flächen empfiehlt es sich darauf zu achten, daß sich keine Linien überschneiden und so eine weitere Fläche »einschließen«. Die eingeschlossene Fläche würde nämlich später beim Schattieren ausgespart. Freilich kann man durch das bewußte Einsetzen dieser Eigenschaft durchaus brauchbare Effekte erzielen.

Bildschirmfoto: Punktraster mit gestricheltem Umriß einer Fläche und einem gestrichelten Hilfskreis, Menüpunkt »Fläche« invertiert
Bild 2. Hilfskreise erleichtern die Gestaltung zweidimensionaler Flächen

Mit der Taste <←> kann man die Eingabe der Fläche abschließen. Aber zunächst stehen dem Anwender noch folgende leistungsstarke Befehle zur Auswahl:

<CLR> – löscht die gesamte Bildschirmseite zur Neueingabe.
<←> – verläßt den »Flächen«-Modus wieder, wenn bisher weniger als drei Eckpunkte fixiert wurden.
<L> – löscht den zuletzt definierten Eckpunkt.
<C> – fügt jederzeit gestrichelte Hilfskreise in die Grafik ein, um Rundungen besser zeichnen zu können (Bild 2). Mit je einem Feuerknopfdruck werden der Mittelpunkt und ein Punkt der Kreislinie festgelegt. Bei erneutem Drücken der Taste <C> wird der Kreis wieder gelöscht.

So weit, so gut. Hat man nun die Eingabe der Fläche mit <←> abgeschlossen, gelangt man wieder in die 3D-Ansicht. Um die räumliche Lage und Position der Fläche zu veranschaulichen, blinkt nun der gezeichnete Linienzug in allen drei Ansichten und wartet darauf, von Ihnen weiterbearbeitet zu werden (Bild 3). In dem Grafikfenster rechts oben sieht man die Fläche von vorn, darunter von oben, und in dem Viertelbildschirm links oben von der Seite. Mit Hilfe der neun Symbole kann man die Fläche nun in die gewünschte Lage bringen. Man wählt dazu eines der grafischen Symbole mit dem Joystick aus und drückt den Feuerknopf. In Bild 4 wird die Lage der drei Projektionen bezüglich der Achsenkreuze veranschaulicht. Demnach steht die in der Abbildung mit »X« gekennzeichnete Achse senkrecht in dem Viertel »1«. Die Anordnung der weiteren Achsen ist analog aus der Grafik ersichtlich. Das mit dem Cursor angewählte Symbol wird schwarz hinterlegt und die Achsen werden gegebenenfalls eingezeichnet. Der Grad der Verformung wird jetzt per Joystick festgelegt:

Bildschirmfoto: die Fläche aus Bild 2 in drei Projektionsansichten, ein Koordinatenkreuz-Symbol invertiert
Bild 3. Die erstellte Fläche (Bild 2) läßt sich leicht in die dreidimensionale Ansicht einbinden
Bildschirmfoto: die drei Projektionsfenster mit den Ziffern 1, 2, 3 und Plus-/Minuszeichen an den Rändern, links unten die neun Koordinatenkreuz-Symbole
Zeichnung: Achsenkreuz mit den Achsen x, y und z, Plus- und Minuszeichen an den Achsen, die Bereiche sind mit 1, 2 und 3 bezeichnet
Bild 4. Geometrische Veranschaulichung der drei Projektionsebenen
1. Drehung (die drei Symbole in der ersten Reihe):
– Joystick nach oben: Drehung um 15 Grad in Pfeilrichtung
– Joystick nach rechts: Drehung um 1,5 Grad in Pfeilrichtung
– Joystick nach unten: Drehung um 15 Grad entgegen Pfeilrichtung
– Joystick nach links: Drehung um 1,5 Grad entgegen Pfeilrichtung
2. Verschiebung (die drei Symbole in der mittleren Reihe):
– Joystick nach oben: Verschieben um 20 Einheiten in Pfeilrichtung
– Joystick nach rechts: Verschieben um 2 Einheiten in Pfeilrichtung
– Joystick nach unten: Verschieben um 20 Einheiten entgegen Pfeilrichtung
– Joystick nach links: Verschieben um 2 Einheiten entgegen Pfeilrichtung
3. Dehnung/Stauchung (die Symbole in der untersten Reihe):
– Joystick nach oben: Dehnung um den Faktor 1,2
– Joystick nach rechts: Dehnung um den Faktor 1,02
– Joystick nach unten: Stauchung um den Faktor 1,2
– Joystick nach links: Stauchung um den Faktor 1,02

Die Symbole können auch über die Tasten <1> bis <9> angewählt werden. Sie entsprechen der Anordnung der Koordinaten-Kreuze folgendermaßen:

1   2   3
4   5   6
7   8   9

Drückt man nun eine dieser Tasten, so kann man eine Zahl eingeben, die den Drehwinkel, Verschiebungssummanden, beziehungsweise -faktor festlegt. Beachten Sie bitte, daß sich der Bereich der Koordinaten zwischen -3276,8 und 3276,7 bewegt und so vollkommen übertriebene Vergrößerungen zu einem Absturz führen können. Aber bei einigermaßen sinnvoller Handhabung stößt man nie auf diese Grenzen, da auf dem Bildschirm nur der Bereich von -160 bis 160 darstellbar ist. Aus Geschwindigkeitsgründen wurde hier auf eine Abfrage verzichtet. Generell kann jedoch der Körper über den Bildschirmrand hinausstehen. Überstehende Linien werden dabei automatisch abgetrennt, bleiben jedoch mit ihren Koordinaten weiterhin unverändert im Speicher erhalten. Bei dem Verschiebungssummanden sei darauf hingewiesen, daß diesem genau dieselbe Einheit zugrunde liegt wie dem Punktraster bei der 2D-Eingabe. Einer Verschiebung um den Summanden 10 entspricht also der Abstand von zwei Rasterpunkten. Auf den Viertel-Bildschirmen aber wird die Fläche dann nur noch um fünf Bildpunkte verschoben. An dieser Stelle sei ferner erwähnt, daß man die Fläche durch Eingabe des Faktors -1 spiegeln kann, was manchmal ganz nützlich ist. Am besten probieren Sie alle Umformungen selbst durch, dann bekommen Sie am schnellsten ein Gefühl dafür, wie der bearbeitete Körper reagiert. Auch hier kann man wieder auf einige Sonderbefehle zurückgreifen:

<+> – verdoppelt die aktuelle Fläche und ermöglicht die Positionierung des Duplikats.
<*> – verbindet durch Zwischenflächen das Duplikat mit der ursprünglichen Fläche (Bild 5). Damit haben Sie auch schon eine der leistungsstärksten und nützlichsten Funktionen kennengelernt, die von enormer Vielseitigkeit ist.
<L> – löscht die blinkende Fläche und führt zu einem endgültigen Rücksprung ins Eingabehauptmenü.
<←> – fixiert die Fläche in ihrer momentanen Lage und verläßt schließlich den »Flächen«-Modus.
<0> – faßt die Tasten <7> bis <9> zu einer Funktion zusammen und dehnt, beziehungsweise staucht somit die ganze Fläche in alle drei Richtungen um einen einzugebenden Faktor.
Bildschirmfoto: ein Doppel-T-Profil in drei Projektionsansichten, ein Koordinatenkreuz-Symbol invertiert
Bild 5. Zur Veranschaulichung der Funktion »Flächen verbinden« hier die drei Projektionsansichten einer Fläche
Bildschirmfoto: zwei verbundene Doppel-T-Profile als Drahtgitterkörper in drei Projektionsansichten
Bild 5a. Wird nun die Fläche mit < + > dupliziert, verschoben und die < * > -Taste gedrückt, entsteht der fertige Körper

Bei all diesen Befehlen ist es wichtig zu wissen, daß sie nur verfügbar sind, wenn keines der Symbole invertiert ist. Wollen Sie nun beispielsweise unmittelbar nach einer mit dem Joystick durchgeführten Drehung um die Achse zwei den Modus verlassen, müssen Sie zuerst mit <Feuer> die Umformungen vorläufig abschließen. Sollten Sie die Absicht haben, mit dieser Funktion einen Körper aus mehreren Einzelflächen zusammenzusetzen, möchten wir Ihnen einen kleinen Tip zur Arbeitserleichterung geben. Versuchen Sie nicht, Ihre Flächen kompliziert im Raum zu verdrehen. Ein Gebäude zum Beispiel läßt sich viel leichter konstruieren, wenn Sie als Grundriß eine gerade an Stelle einer gekippten Fläche verwenden. So behalten Sie in der Draufsicht immer den Überblick (Bild 1). Erst wenn das Gebilde fertig ist, sollte man es in die gewünschte Lage (mit »Form«) drehen. Durch erneutes Anwählen von »Fläche« kann man diesen Modus ebenso wie mit dem <←> verlassen.

2. »Rotation«

Diese Funktion dient der Erzeugung von Rotationskörpern. Dabei ist nur ein Linienzug einzugeben, der bei Rotation den Rotationskörper beschreibt. Das hört sich zunächst vielleicht komplizierter an als es ist. Auch hier verfügt der Anwender über einen gerasterten Bildschirm, an dessen Unterkante sich zusätzlich eine Skala befindet (Bild 6). Diese Skala entspricht der Rotationsachse. Bei der Eingabe des Linienzugs, der hier jedoch nicht geschlossen sein muß, verfährt man analog zum »Flächen«-Modus. Sie werden auch hier durch entsprechend ähnliche Funktionen unterstützt, die mit den Tasten <CLR/HOME>, <←>, <L> und <C> aufgerufen werden. Ist die Eingabe abgeschlossen, drückt man einfach die <←>-Taste. Jetzt folgt die Abfrage des Computers, mit wievielen Facetten (pro Polygonabschnitt) der Körper erstellt werden soll. Damit diese Größe etwas anschaulicher wird, wollen wir uns zunächst mit einem einfachen und bildhaften Beispiel befassen.

Bildschirmfoto: Punktraster mit einer gezeichneten Mantellinie über einer Skala am unteren Rand, Menüpunkt »Rotation« invertiert
Bild 6. Durch Rotation der zweidimensionalen Mantellinie entsteht das Glas, das in Bild 7 zu sehen ist

Beispiel:

Möchten Sie eine Pyramide mit fünfeckigem Grundriß konstruieren, so ist nur das Zeichnen einer schrägen Linie erforderlich, deren Eckpunkt die Achse berühren muß. Geben Sie jetzt auf die Frage »Anzahl der Facetten ?« einfach <5> ein. Sind die restlichen Eingaben entsprechend abgeschlossen, blinkt kurz darauf eine fünfeckige Pyramide auf dem Bildschirm. Als nächstes fragt der Computer Sie nach dem Rotationswinkel. Sagt Ihnen die Vorgabe von 360 Grad zu, drücken Sie einfach die RETURN-Taste. Wollen Sie jedoch zum Beispiel eine Halbkugel erstellen, so geben Sie statt 360 Grad nur 180 Grad ein. Die nächste abgefragte Größe ist anfangs noch nicht von Interesse und wird erst bei der Schattierung wichtig. Daher verzichten wir an dieser Stelle auf nähere Erläuterungen. Vorerst gibt man am besten, wie vom Computer vorgeschlagen, <0> ein.

Abschließend kann man noch den Makro-Namen eingeben, unter dem der Teil-Körper intern vom Computer verwaltet wird. Das hat den Vorteil, daß ein Rotationskörper immer wieder aufgerufen und eingefügt werden kann.

Wenige Sekunden später blinkt der berechnete Rotationskörper in der 3D-Ansicht (Bild 7) und kann genauso wie eine einzelne Flächen weiterbearbeitet werden, wobei man vollkommen analog verfährt. Ebenso kann man mit <+> Gebilde duplizieren, mit <L> löschen und mit <0> den Gesamtkörper verzerren. Die Funktion <*> entfällt zwar hier, aber dafür gibt es in diesem Modus eine andere Besonderheit. Drückt man die Taste <F1>, so kann man mehrere Umformungen zusammenfassen. Diese Funktion wird mit einem dunkelblauen Rahmen bestätigt. Führt man jetzt Drehungen, Verschiebungen und Dehnungen durch, so bleibt die Lage des Objekts unverändert, intern jedoch berechnet der Computer die neuen Koordinaten, zeichnet aber den Körper nicht erneut auf den Bildschirm. Drückt man wiederum <F1>, so werden die Umformungen »sichtbar« und der Rahmen nimmt wieder seine ursprünglich hellblaue Farbe an. Rechnet der Computer, verschwindet der doppelte Rand um die Symbole, der die Bereitschaft zur weiteren Eingabe anzeigt. Hat man schließlich den Körper in die gewünschte Position und Lage gebracht, wird der Modus durch <←> oder durch Aufrufen von »Rotation« in der Kopfzeile verlassen. Damit ist die Eingabe von Rotationskörpern beendet.

3. »Form«

Bildschirmfoto: ein Kelchglas als Drahtgittermodell in drei Projektionsansichten, unten rechts die Draufsicht als Netz konzentrischer Kreise
Bild 7. Bereits verformter Rotationskörper

Dieser Menüpunkt eröffnet Ihnen die Möglichkeit, mit dem gesamten auf dem Bildschirm befindlichen (also nicht nur mit dem gerade blinkenden) Körper Translationen durchzuführen. Das geschieht vollkommen analog mit den Symbolen und den Tasten <1> bis <9> und <0>. Auch hier kann man wieder mit <F1> Umformungen zusammenfassen, was zum Teil bei komplexen Körpern einen erheblichen Geschwindigkeitsgewinn mit sich bringt.

4. »Makro«

Ein einmal konstruiertes geometrisches Gebilde, das im Rahmen der 421 möglichen Flächen aus beliebig vielen Einzelflächen zusammengesetzt sein darf, kann mit einem Namen versehen werden. Ein solches Gebilde wird »Makro« genannt. Unter Angabe des Namens kann man ein Makro beliebig oft erneut auf den Bildschirm holen. Somit kann der Anwender seinen immer wiederkehrenden Anforderungen entsprechend eine Makro-Bibliothek anlegen. Hat man sich zum Beispiel auf Innenarchitekur »spezialisiert«, wäre es sinnvoll, einen Stuhl nur einmal einzugeben und ihn dann weiterhin immer wieder zur Verfügung zu haben. Vom Benutzer einmal definierte Bibliotheken bleiben im System und stehen wirklich problemlos zum wiederholten Aufruf bereit. Die enorm universellen Makro-Operationen, die in diesem Programm verfügbar sind, können sich durchaus neben denen professioneller CAD-Programme sehen lassen. Sie werden alle von einem Menü angesteuert, das nach dem Anwählen von »Makro« erscheint.

A. – Makro laden: Makros, die bereits erstellt und auf Diskette abgelegt wurden, lassen sich mit dieser Option unter Angabe des Filenamens laden und in das Gesamtgebilde einfügen. Existiert bereits ein gleichnamiges Makro im Speicher, so fordert der Computer Sie zur Eingabe eines neuen Namens auf.

B. – Makro speichern: Nach Aufrufen dieses Menüpunktes können Sie Makros, die Sie erstellt haben und die sich im Speicher befinden, auf Diskette speichern, um sie zu einem späteren Zeitpunkt neu zu laden und wieder zu verwenden. Zum Speichern muß der Name, unter dem das Makro verwaltet wird, und der Filename, unter dem es auf Diskette abgelegt werden soll, eingegeben werden.

C. – Diskettenkommando senden: Hier kann der Anwender Diskettenoperationen durchführen. Soll beispielsweise das Makro »Stuhl« auf Diskette gelöscht werden, so muß man »S:MA.STUHL <RETURN>« eingeben. Hier sei zum leichteren Verständnis bemerkt, daß Makros auf Diskette mit einem »MA.« vor dem Namen gekennzeichnet sind, der jedoch weder beim Laden noch beim Speichern einzugeben ist.

D. – Makros auf Diskette: Nach Betätigung der Taste <D> gibt der Computer die Namen aller Makros aus, die sich auf der eingelegten Diskette befinden.

E. – Makros im Speicher: Die Namen aller im Speicher befindlichen Makros werden, vorausgesetzt es existieren welche, auf dem Bildschirm gelistet.

F. – Makro erstellen: Arbeiten Sie gerade an einem Objekt und Sie gelangen zu der Erkenntnis, daß Sie ein noch nicht erstelltes Makro benötigen, so rufen Sie einfach diesen Menüpunkt auf. Nach Eingabe eines entsprechenden Namens ist der Bildschirm zur Konstruktion des Makros gelöscht, ohne daß jedoch Ihr bereits geschaffenes Kunstwerk verlorengeht. Der Begriff »Makro« ist invertiert und der Anwender kann mit den Funktionen »Fläche«, »Rotation«, »Form«, »Zeichnen«, »Makro laden« und »Makro einfügen« das gewünschte Objekt »zusammenbasteln«.

G. – Makro einfügen: Sind Sie im »Makro erstellen«-Modus, können Sie das eben erstellte Makro wieder in ihren Gesamtkörper integrieren, indem Sie auf die Frage »Makro-Name ?« den Namen des neuen Makros eingeben. Während das bisher Erstellte auf dem Bildschirm erscheint, blinkt das neue Makro und kann genauso wie ein Rotationskörper, unter Verwendung derselben Zusatzfunktionen wie <+>, <L>, <F1> und <←> eingefügt werden.

Man kann aber auch jederzeit Makros, die bereits im Speicher existieren unter Angabe ihres Namens aufrufen und erneut verwenden. Hier muß jedoch für das Duplikat ein neuer Name eingegeben werden, damit die Makros weiterhin unterscheidbar sind.

H. – Alles Erstellte als Makro: Wollen Sie in Zukunft das gesamte im Speicher befindliche Gebilde als Makro behandeln, müssen Sie diesen Menüpunkt wählen und einen Namen für dieses Makro eingeben. Daraufhin wird der ganze Speicherinhalt unwiderruflich zu einem Makro verschmolzen.

Auch das Makromenü kann mit <←> wieder verlassen werden.

5. »Zeichnen« – dreidimensional

Dieser Menüpunkt eröffnet dem Benutzer die Möglichkeit, direkt in der 3D-Ansicht zu zeichnen und zu konstruieren! Auch hier wird die maßstabgetreue Arbeit durch ein Punktraster erleichtert (Bild 8). Jetzt blinkt auf allen 3 Grafik-Fenstern ein Cursor in Form eines Kreuzes. Man kann mit »Joystick vor und zurück« den Cursor auf dem Viertel rechts oben hinauf und hinunter bewegen. Auf den anderen Bildschirmteilen bewegt sich der Cursor entsprechend, jedoch nur eindimensional. Die fehlende Dimension erhält man, wenn man zusätzlich den Feuerknopf drückt. Somit kann man das Fadenkreuz auch in der »Tiefe« vor und zurück bewegen. Ansonsten wird bei »Zeichnen« vollkommen analog zu »Fläche« verfahren. Der hauptsächliche Unterschied liegt darin, daß hier die Fläche nicht mehr in der 3D-Ansicht in das Objekt integriert werden muß, da sie automatisch am richtigen Platz ist. Der für Sie wichtigste Unterschied dürfte der sein, daß die Eckpunkte hier mit <↑> fixiert werden, da der Feuerknopf anderweitig belegt ist! Zur Auswahl stehen wieder folgende Befehle:

Bildschirmfoto: Punktraster in allen drei Fenstern mit einer gestrichelten Fläche und Fadenkreuz-Cursor, Menüpunkt »Zeichnen« invertiert
Bild 8. Synchronisiertes Zeichnen in allen drei Projektionsebenen
<CLR> – löscht die soeben bearbeitete Fläche und stellt die Ausgangsposition wieder her.
<L> – löscht den zuletzt fixierten Punkt mit den dazugehörigen Linien.
<+> – fixiert die gesamte Fläche endgültig und ermöglicht die Eingabe einer weiteren Fläche in der 3D-Ansicht.
<C> – dient dem Einfügen von gestrichelten Hilfskreisen.
<←> – fixiert die Fläche, wenn sie mehr als zwei Eckpunkte hat, und verläßt den »Zeichnen«-Modus.
<↑> – fixiert einen Eckpunkt an der momentanen Cursorposition.
<F> – führt zu einem Sprung aus dem »Zeichnen«-Modus in den »Fläche«-Modus. Die Fläche ist nun wieder aus der 3D-Ansicht herausgelöst und blinkt, um neu positioniert und eingefügt zu werden.

Diese Funktion ist von großem Nutzen, wenn Sie Flächen eingeben wollen, deren Lage oder Form sehr kompliziert ist. Die Taste <←> führt wieder zum Rücksprung ins Eingabehauptmenü.

6. »Löschen« – problemlose Korrektur

Eines der wichtigsten Leistungsmerkmale bei CAD-Programmen ist die Fähigkeit, Fehleingaben zu korrigieren und einzelne Bestandteile eines Objektes sowie deren Lage erneut zu ändern. Denn früher oder später will jeder Anwender nachträglich noch etwas verändern oder verbessern und Eingaben rückgängig machen. Leider bleibt so etwas bei vielen Programmen nur ein Wunschtraum. Das so mühsam Konstruierte muß neu eingegeben werden. Anders dagegen liegen die Dinge bei »Giga-CAD«: Dem Anwender wird ein umfangreicher Katalog von allen nur erdenklichen Manipulationen geboten.

Man braucht dazu einfach nur den Menüpunkt »Löschen« in der Kopfzeile mit dem Cursor anzuwählen und erhält durch ein übersichtliches Menü eine Auswahl der Grund-Optionen.

A. – Flächen durchblättern: Der Grafikbildschirm mit den drei Projektionen wird wieder eingeschaltet und eine der Flächen beginnt zu blinken. Mit den Tasten <+> und <-> kann man zyklisch vor- und zurückblättern, das heißt, nach der letzten Fläche kommt wieder die erste. Drückt man nun zum Beispiel < + >, fängt die entsprechend der Reihenfolge nächste Fläche an zu blinken. Die »nächste« Fläche ist also immer die Fläche, die nach der momentanen Fläche konstruiert wurde. Sind Sie schließlich bei der gewünschten Fläche angelangt, die es zu ändern gilt, können Sie mit den jeweiligen Tasten folgende Funktionen aufrufen:

<L> – löscht die blinkende Fläche im Speicher und zeichnet das Gebilde anschließend erneut ohne die gelöschte Fläche. Nun blinkt die nächste Fläche zur weiteren Bearbeitung.
<V> – ändert die Verbindungsvorschrift einer Fläche. Es sind dafür nur die Zahlen <0> bis <2> zugelassen, doch darauf wird noch ausführlich eingegangen.
<←> – verläßt den »Löschen«-Modus.
<↑> – führt zu einem Sprung in den »Flächen«-Modus, so daß die Fläche neu positioniert werden kann.

Auch hier kann man mit der Taste <F1> Befehle zusammenfassen, was die Arbeitszeit erheblich verkürzt. Der Nachteil liegt jedoch darin, daß dann gelöschte Flächen weiterhin auf dem Bildschirm bleiben. Aber beim Durchblättern werden diese Flächen natürlich übergangen, da sie ja intern nicht mehr existieren. Drückt man nochmals <F1>, so wird das Gebilde ohne die gelöschten Flächen wieder auf den Bildschirm gezeichnet.

B. – Makros durchblättern: Um ein ganzes Makro zu eliminieren, benötigt man diesen Menüpunkt. Die Makros können auch hier mit <+> und <-> durchgeblättert werden, ebenso wie in der gerade beschriebenen Routine für Flächen. Die Taste <F1> hat hier keine Funktion. Alle anderen Funktionen sind identisch zu »Flächen durchblättern«. Deshalb wird hier auf eine nähere Beschreibung verzichtet.

C. – Bekanntes Makro löschen: Wollen Sie nun ein Makro löschen, dessen genauen Namen Sie kennen, sollten Sie diese Funktion aufrufen und den Namen des Makros eingeben. Daraufhin beginnt das Makro wieder zu blinken und man kann es, wenn man sich wirklich sicher ist, mit <L> löschen. Liegen Sie um wenige Makros daneben, besteht weiterhin die Möglichkeit, das richtige Objekt mit <+> und <-> auszuwählen. Zur weiteren Bearbeitung stehen wiederum dieselben Befehle wie im letzten Menüpunkt zur Verfügung.

D. – Alles löschen: Bestätigt der Anwender nach Aufruf dieser Option die Frage »Sind Sie sicher ?« mit <J>, so wird das gesamte im Speicher befindliche Gebilde endgültig gelöscht. Es gibt keine Möglichkeit mehr, das alte Objekt zu rekonstruieren, es sei denn, man hat es bereits gespeichert. Der Bildschirm steht währenddessen zur Neueingabe bereit.

E. – Verbindungsvorschrift: Die aktuelle Verbindungsvorschrift wird in alle Flächen kodiert, die man konstruiert. Um diese laufende Verbindungsvorschrift zu ändern, wählt man diesen Menüpunkt und kann dieser Größe einen neuen Wert (0 bis 2) zuordnen. Die Verbindungsvorschrift, die bei Rotationskörpern eingegeben wird, hat auf diesen Wert ebensowenig Einfluß wie das Ändern einer Verbindungsvorschrift beim Durchblättern von Makros und Flächen. Will man nun beispielsweise zukünftig alle einzeln erstellten Flächen mit der Verbindungsvorschrift <2> konstruieren, so kann man in diesem Menü die Taste <E> drücken und daraufhin eine <2> eingeben. Dann werden alle weiteren einzeln erstellten Flächen mit der Verbindungsvorschrift <2> vom System übernommen.

Mit der <←>-Taste gelangt der Benutzer wieder in das Grafikhauptmenü.

7. »Exit«

Schließlich gilt es in diesem Programmteil noch die letzte und kürzeste Funktion anzusprechen. Mit »Exit« gelangt man in ein übergeordnetes Menü, mit dessen Hilfe man Körper weiterbearbeiten kann. Dazu müssen Sie jedoch erst die Systemdiskette einlegen und dies dem Computer mit einem Tastendruck bestätigen. Selbstverständlich kann man noch vor dem Ladevorgang mit der Taste <←> in das Menü zurückkehren. Sollte sich statt der Systemdiskette eine andere Diskette im Laufwerk befinden oder ein Diskettenfehler auftreten, wird der Ladevorgang abgebrochen und das Eingabemenü erscheint wieder.

Die vierte Dimension – Filme erzeugen

Soeben haben wir den Programmteil kennengelernt, der ausschließlich der Generierung von Körpern dient. Nun werden wir uns den vielen Funktionen der Bearbeitungseinheit zuwenden. Neben der Möglichkeit, die erstellten Gebilde in mehreren Größen darzustellen, schufen wir zusätzlich noch eine Option, um bewegte Grafiken, sprich Filme, zu erzeugen. Somit dringt man in die geheimnisumwitterte vierte Dimension vor und hat hier wieder eine ganze Reihe von Manipulationsmöglichkeiten, um Körper in zeitlicher Abhängigkeit zu verformen und so einen kaum noch zu überbietenden plastischen Effekt zu erzielen. Auf diese Weise wird es Ihnen erstmals möglich, bewegte »Hidden-Line«-Grafiken wie von Geisterhand auf den Bildschirm zu zaubern, ohne auch nur eine Minute Ihrer Zeit dafür zu opfern, wenn Sie einmal das Gebilde geschaffen haben. Auch in diesem Programmteil ist durch zahlreiche Systemkommandos eine der wesentlichsten Eigenschaften von »Giga-CAD« verwirklicht. Es wird ebenso wie in der Eingabeeinheit ein Optimum an Benutzerfreundlichkeit erreicht. Dieser Programmteil (Listing 2) steht dem Anwender sofort nach dem Laden zur Verfügung.

Zuerst einmal fällt der Unterschied zum Eingabesystem in der grafischen Darstellung auf: Das Gebilde wird nicht mehr in allen drei Projektionen dargestellt (Bild 9). Man sieht nun die Konstruktion in der Vorderansicht (Bild 10). Der Bildschirm ist nicht mehr in vier Grafikfenster aufgeteilt, sondern das Gebilde wird doppelt so groß dargestellt und zwar so, daß es den ganzen Bildschirm zur Darstellung beansprucht. Der Aufruf sämtlicher Kommandos erfolgt in gewohnter Weise über die Kopfzeile, die jedoch nun andere Befehle beinhaltet. Zu lesen sind die Funktionen »Erstellen«, »Form«, »Disk«, »Zoom«, »Darstellen«, »Zusätze«, »Modi«.

Bildschirmfoto: Drahtgittermodell eines Hauses in drei Projektionsansichten mit den Koordinatenkreuz-Symbolen
Bild 9. Ein Haus nach der Konstruktion in der Eingabeeinheit
Bildschirmfoto: Vorderansicht des Hauses als Drahtgitter auf dem ganzen Bildschirm, Kopfzeile »Erstellen Form Disk Zoom Darstellen Zusätze Modi«
Bild 10. Zur Weiterverarbeitung wird die Vorderansicht auf dem ganzen Bildschirm dargestellt

1. »Erstellen«

Mit dieser Funktion können Sie, wie bereits angesprochen, in die Eingabeeinheit gelangen. Diese wird vom Computer von Diskette nachgeladen.

2. »Form«

Diese Funktion entspricht exakt jedem Detail der gleichnamigen Funktion in der Eingabeeinheit. Hier wird aber das Grafikfenster mit den Symbolen erst nach Aufruf dieses Menüpunktes in die Grafik eingeblendet (Bild 11).

Bildschirmfoto: das Haus als Drahtgitter in Schrägansicht, links unten eingeblendet die neun Koordinatenkreuz-Symbole, Menüpunkt »Form« invertiert
Bild 11. Bei der Verformung in der Bearbeitungseinheit werden die Grafiksymbole in den Bildschirm eingeblendet

3. »Disk«

Hinter diesem Begriff in der Kopfzeile verbirgt sich ein weiteres Menü, das dem Benutzer erlaubt, sämtliche Diskettenoperationen durchzuführen. Zur Auswahl stehen folgende Optionen:

A. Objekt laden: Mit diesem Menüpunkt ist es möglich, auf Diskette gespeicherte Körper zu laden. Dazu braucht man nur den Dateinamen (natürlich ohne »OB.«) einzugeben. Beachten Sie dabei jedoch stets, daß davon das momentan im Speicher befindliche Gebilde überschrieben wird und somit nicht mehr zur Verfügung steht. Deshalb sollten Sie Ihr Objekt zuerst speichern.

B. Objekt speichern: Diese Funktion speichert die gesamte Konstruktion, die sich im System befindet, zusammen mit allen Makros auf Diskette ab. So kann sie jederzeit mit dem zuvor erläuterten Kommando geladen werden.

C. Diskettenkommando senden: Auch bei diesem Menüpunkt besteht kein Unterschied zu dem Befehl mit dem gleichen Namen im Makromenü.

D. Directory anzeigen: Drückt man die Taste <D>, so wird der Disketteninhalt auf dem Bildschirm ausgegeben. Durch Tastendruck gelangt man wieder in das Diskettenmenü.

E. Grafik laden: Grafiken, die auf Diskette mit einem »PI.« vor dem Namen versehen sind, können, freilich ohne »PI.«, zum Betrachten geladen werden. Man gelangt daraufhin in einen besonderen Modus, der durch einen hellgrauen Rahmen gekennzeichnet wird. Folgende Tasten sind jetzt mit den jeweiligen Funktionen belegt:

<1> – schaltet um auf Bildschirm 1.
<2> – schaltet Bildschirm 2 ein, auf dem sich die geladene Grafik befindet.
<M> – wechselt zwischen Multicolor- und hochauflösender Darstellung.
<F1>, <F7> – verändern die Strich- beziehungsweise Hintergrundfarbe, wobei der Durchgang zyklisch ist.
<F2>, <F8> – schalten noch einmal die jeweils vorhergehende Farbe für den Körper und Hintergrund ein.
<F3>, <F5> beziehungsweise <F4>, <F6> dienen der Veränderung der zweiten und dritten Multicolorfarbe. Dabei »blättern« die »geSHIFTeten« Funktionstasten wieder rückwärts.
<R> – umrandet die Grafik mit einem dünnen Rahmen.
<S> – ermöglicht es, die Grafik zu speichern. Hierzu ist nur die Angabe des Filenamens erforderlich.
<←> – führt zu einem Rücksprung aus diesem Modus, woraufhin der Rahmen wieder hellblau wird.

F. Grafik speichern: Nach Aufruf dieses Menüpunktes kann man Grafiken speichern. Dazu muß man die Nummer des Grafikbildschirms und den Filenamen eingeben.

4. »Zoom«

Weil die Auflösung des C 64 nicht überragend ist, ist es oft sehr von Nutzen, wenn der Benutzer Details aus der Nähe betrachten kann. Diesen Wunsch erfüllen Ihnen folgende Befehle:

A. – Zoomen des Objekts: Diese Funktion ermöglicht es, einen beliebigen Ausschnitt der Grafik zu selektieren und zu vergrößern. Dabei geht man folgendermaßen vor:

Fahren Sie einfach mit dem Cursor auf die linke obere Ecke des erwünschten Ausschnittes und fixieren Sie diese mit dem Feuerknopf. Bewegt man nun den Cursor an eine andere Stelle, zieht dieser einen blinkenden Rahmen hinter sich her. Somit kann der Anwender ein Fenster in der Grafik definieren, das dann vergrößert wird. An dieser Stelle ist anzumerken, daß der Rahmen sich nicht deformieren läßt. Das Verhältnis der Seitenkanten bleibt immer gleich. Führt man den Cursor ein Stück nach unten, bewegt er sich automatisch etwas nach rechts und umgekehrt. Damit ist gewährleistet, daß das Gebilde nie seine Form verliert und »zerquetscht« wird.

Um nun die Eingabe des Ausschnittes zu beenden, bewegt man den Cursor auf den rechten unteren Eckpunkt des Ausschnittes und drückt wiederum den Feuerknopf. Hat man nun auf diese Weise den Ausschnitt ausgewählt, wird das Rahmenblinken beendet. Nach einer kurzen Wartezeit erscheint der nunmehr vergrößerte Ausschnitt auf dem Bildschirm. Das »Zoomen« läßt sich fast beliebig oft wiederholen.

Haben Sie erst den ersten Eckpunkt des Rahmens fixiert und möchten Sie diesen anders positionieren, brauchen Sie nur <L> zu drücken. Mit der Taste <←> kann man den »Zoom«-Modus verlassen.

B. – Originalgröße: Ist man nun des Vergrößerns überdrüssig geworden, kann man mit diesem Menüpunkt die Ausgangsgröße wieder herstellen. Der Körper wird dann in seiner ursprünglichen Größe auf dem Bildschirm dargestellt.

C. – Optimaler Ausschnitt: Das Gebilde wird automatisch auf dem Bildschirm optimal dargestellt, so daß es den Bildschirm ganz ausfüllt. Diese Optimierung wird vom Computer berechnet und der jeweilige Ausschnitt in der Grafik mit einem Rahmen markiert (Bild 12). Kurz darauf erscheint die vom Computer errechnete neue Grafik auf dem Bildschirm (Bild 13). Auch hier kann man wieder per Hand »Zoomen« und die Originalgröße mit der zuvor besprochenen Option wiederherstellen.

Bildschirmfoto: Drahtgittermodell eines Raumgleiters, von einem rechteckigen Rahmen umgeben, Menüpunkt »Zoom« invertiert
Bild 12. Man kann es dem Computer überlassen, einen optimalen Ausschnitt zu selektieren
Bildschirmfoto: das Drahtgittermodell des Raumgleiters bildschirmfüllend vergrößert
Bild 13. Der vom Computer berechnete Ausschnitt belegt den ganzen Bildschirm

D. – Betrachten der Grafik: Mit dieser Funktion kann man Grafiken optional sowohl auf dem ersten als auch auf dem zweiten Bildschirm betrachten. Hier befindet man sich wiederum in dem bereits bei »Grafik laden« angesprochenen Modus.

E. – Zentrieren: Dieser Befehl verschiebt das räumliche Gebilde stets so, daß es sich genau in der Mitte des Bildschirms befindet. Dabei nimmt es automatisch seine Originalgröße wieder an und Ausschnittsvergrößerungen werden dabei rückgängig gemacht. Es ist unbedingt zu empfehlen, vor dem Erstellen von Filmen das Objekt zu zentrieren, da man sonst Gefahr läuft, daß sich das Gebilde aus dem Bildschirm dreht und zeitweise nicht mehr sichtbar ist.

Mit der <←>-Taste kehrt man zurück in das Hauptmenü.

5. »Darstellen«

Dieser Menüpunkt dient der computergestützten Berechnung von Grafiken, wobei die Kopfzeile ausgeblendet bleibt. Damit ist es Ihnen möglich, Gebrauchsgrafiken für Ihren spezifischen Bedarf und Ihren persönlichen Anforderungen entsprechend zu erstellen. Hat man den Hidden-Line-Modus eingeschaltet, während man diesen Menüpunkt aufruft, wird eine eigens für »Giga-CAD« entwickelte Routine (Listing 4) von Diskette nachgeladen. Dies geht in der gewohnten Art und Weise vor sich. Währenddessen ist die Rahmenfarbe hellgrau. Lassen Sie sich nicht davon irritieren, wenn während der Berechnung von Hidden-Line-Grafiken das Floppylaufwerk zu arbeiten beginnt, denn der Computer speichert einige Systemdaten auf Diskette. Aus diesem Grund sollten Sie Ihre Diskette im Laufwerk lassen. Nur durch Zwischenspeichern der aktuellen Daten hat der Computer genügend Speicherplatz zur Verfügung, um alle Operationen zu optimieren und so die größtmögliche Geschwindigkeit zu erreichen. Alle vom Computer gesteuerten Diskettenoperationen sind mit einer umfassenden Diskettenfehlerbehandlung gesichert. Gehen Ihnen die Systemdaten verloren, so steht auch das Objekt nicht mehr zur Verfügung. Alle weiteren Berechnungen müssen daher vom Computer abgebrochen werden und das Programm kehrt ins nächste Menü zurück. Ist jetzt eine solche Grafik fertig, wird erneut die Bearbeitungseinheit geladen. Auch diesmal befindet sich der Benutzer wieder in dem bereits angesprochenen Modus, in dem er zwischen beiden Bildschirmen mit <1> und <2> umschalten, mit <M> Multicolor ein- und ausschalten und mit <S> Grafiken speichern kann. Die Funktionstasten dienen wieder der Manipulation der Bildschirmfarben.

Bei Darstellungen ohne Hidden-Line stehen die Dinge ähnlich. Lediglich werden diesmal keine Werte auf Diskette gespeichert und auch kein weiterer Programmteil von Diskette geladen.

6. »Zusätze«-Sonderfunktionen

Was man kaum für möglich hält, ist mit diesem Programmpunkt realisierbar:

Die durch die Grafikauflösung des C 64 gesetzten Grenzen werden gesprengt und Bilder mit einer Auflösung von sage und schreibe 1000*640 Punkten möglich. Auch die Fähigkeit, Filme mit 24 Bildern pro Sekunde zu berechnen, läßt aufhorchen. Sie brauchen sich nur für einen der folgenden Menüpunkte entscheiden, und schon steht Ihren Wundergrafiken (von der Berechnungszeit abgesehen) nichts mehr im Wege.

A. 4-fache Auflösung: Es werden Bilder in der gewählten Darstellungsart berechnet und mit einer Auflösung von 640*400 Punkten berechnet. Dabei geht der Computer intern folgendermaßen vor: Zuerst muß der Name der Grafik angegeben werden, der dann dem Filenamen auf der Diskette entspricht. Nun darf die Diskette während des Rechenprozesses nicht mehr gewechselt werden. Daraufhin werden je zwei Bilder gleichzeitig berechnet. Diese enthalten, seitlich aneinandergefügt und vergrößert, die obere Hälfte der Grafik. Zwischen beiden Grafiken wird ständig hin- und hergeschaltet, um den Zeichenvorgang für den Anwender kontrollierbarer und überschaubarer zu gestalten. Sind beide Grafiken fertig, speichert der Computer sie selbständig und versieht sie mit einem »HV.« vor und der Nummer der Grafik hinter dem eingegebenen Namen. Anschließend wird die untere Hälfte gezeichnet und ebenso gespeichert. Daraufhin wird die Grafik in der Standardgröße dargestellt und man befindet sich wieder im Hauptmenü. Sind schattierte Grafiken oder Grafiken im Hidden-Line-Modus erwünscht, wird vorher vom Computer der entsprechende Programmteil nachgeladen. Wie man nun diese Grafik zu Papier bringt, wird ausführlich in der Anleitung zur Hardcopy-Routine geschildert.

B. – 10fache Auflösung: Hier wird ebenso vorgegangen wie im obigen Fall. Der Computer muß jedoch hier fünf »Streifen« mit je zwei Bildern nebeneinander berechnen. Dabei wird die Grafik hochkant dargestellt, also um 90 Grad gedreht. Außerdem wird dem Namen das Kürzel »HZ.« vorangestellt. Zum Ausdruck benötigt man wiederum die beigefügte Hardcopy-Routine.

C. – Film erstellen: Mit diesem Menüpunkt lassen sich die bereits angesprochenen Filme erstellen. Damit ist für Sie praktisch keinerlei zeitlicher Aufwand verbunden. Sie brauchen nur ein paar Parameter zu definieren und können alles weitere Ihrem Computer überlassen. In der Folge werden nun alle verfügbaren Optionen aufgeführt.

a. – Drehung des Körpers an/ aus: Mit diesem Menüpunkt läßt sich eine Drehung um eine der drei Achsen vorgeben. Dabei ist anzugeben, ob um die X-, Y-, oder Z-Achse gedreht werden soll. Drücken Sie erneut <A>, wird Ihre Eingabe wieder aufgehoben.

b. – Drehung um den Körper an/aus: Auch um den Körper kann man sich drehen. Mit anderen Worten dreht sich hier die Lichtquelle mit dem Körper, wohingegen bei a.) die Lichtquelle feststeht. Die ersten zwei Punkte dieses Untermenüs heben sich gegenseitig auf. Das heißt, drückt man <B>, wird automatisch die »Drehung des Körpers« ausgeschaltet. Auch hier muß man die entsprechende Achse angeben.

c. – Drehung der Lichtquelle an/aus: Hiermit kann man die Lichtquelle optional um die X-, Y- oder Z-Achse zum Rotieren bringen. Diese Funktion macht keinen Unterschied zwischen Drehung »um den« und »des« Körper(s). Mit der Funktion werden Tages-Simulationen möglich.

d. – Verschieben des Fluchtpunktes: Oftmals lassen sich besonders wirkungsvolle Effekte durch eine Verschiebung des Fluchtpunktes erreichen. Hierzu müssen drei Summanden vorgegeben werden, die der Verschiebung in X-, Y- und Z-Richtung entsprechen. Viele Objekte wirken auch plastischer, wenn man die Perspektive variiert.

e. – Verschieben der Schnittebene: Diese Funktion erlaubt Ihnen, einen Blick ins Innere Ihres Objektes zu wagen. Der Vorteil gegenüber einem Schnitt in einer normalen Grafik ist erheblich! In der bewegten Grafik kann man einen Körper langsam aufschneiden. Dadurch entsteht ein realistischer und plastischer Eindruck. Hierzu müssen Sie nur einen Verschiebungssummanden angeben. In vielen Fällen ist es aber auch ratsam, eine fixierte Schnittebene, die während des Films nicht verschoben wird, durch das Objekt zu legen.

f. – Kippen der Z-Achse: Mit dieser Funktion hat es eine besondere Bewandtnis. Bei Drehungen um die Z-Achse bei »a.« und »b.« ist zu empfehlen, die Drehachse etwas nach vorn zu neigen. Dazu sollte der Körper in horizontaler Lage belassen werden. Neigt man nämlich den Körper einfach nach vorn und läßt ihn um die Z-Achse rotieren, sieht man ihn zwangsläufig zeitweise von unten. Probieren Sie's doch einfach einmal aus: Kippen Sie die Achse mit dieser Funktion um -30 Grad nach vorn und lassen Sie dann den Film berechnen!

g. – Verändern der Größe: Die Größe ist ein weiterer Parameter, den der Anwender variieren kann. Dazu braucht man lediglich den Vergrößerungsfaktor anzugeben.

h. – Berechnung: Haben Sie nun alle gewünschten Manipulationen vorgenommen, können Sie mit diesem Menüpunkt die Berechnung starten. An dieser Stelle sei darauf hingewiesen, daß sich beliebig viele Manipulationen zusammenfassen lassen. Lediglich a.) und b.) sind nicht gleichzeitig möglich. Dieser Menüpunkt muß noch mit der Taste <J> bestätigt werden. Nun kann die Arbeit des Computers auch fast schon beginnen. Doch zuerst ist noch der Name des Films einzugeben. Bevor Sie jedoch die RETURN-Taste drücken, sollten Sie die Diskette einlegen, auf die der Film gespeichert werden soll. Achten Sie dabei bitte darauf, daß auf dieser Diskette ausreichend Platz ist. Ein einzelner Film benötigt 192 Blocks, ein Film in einem der Doppelmodi 384 Blocks. Außerdem muß noch etwas Platz für die Systemdaten vorhanden sein. Ferner ist zu beachten, daß die Diskette während der Berechnungszeit im Laufwerk und das Laufwerk angeschaltet bleiben muß. Handelt es sich nicht um einen Draht-Modell-Film, wird noch vor Eingabe des Filenamens ein weiterer Programmteil von der Systemdiskette geladen. Alle zum Film gehörigen Files (24) sind mit einem »FI.« vor und mit der Nummer hinter dem Filenamen gekennzeichnet. Eine Säule am rechten Bildschirmrand zeigt an, wieviel von dem Film bereits fertig ist. Beim letzten Filmbild ist die Säule schließlich vollständig mit einem dunklen Balken aufgefüllt. Betrachten kann man den Film später mit der separaten »Movie«-Routine.

i. – Neue Parameter: Mit dieser Funktion lassen sich alle Parameter wieder löschen, um anschließend neue Bedingungen für den Film vorzugeben.

Mit der <←>-Taste kann man in das »Zusätze«-Menü zurückkehren.

D. – Film ergänzen: Mit dieser Funktion können Sie einzelne Filmbilder erstellen. Zunächst muß hier bei dem Filenamen die Nummer des Filmbildes mit eingegeben werden. Dieser Menüpunkt wird in keinster Weise von den Parametern für komplette Filme beeinflußt. Somit lassen sich beliebige Bilder zu einem Film zusammenhängen. So wird es zum Beispiel möglich, gegenläufige Bewegungen oder das Platzen eines Körpers in Form einer bewegten Grafik darzustellen. Von Nutzen ist diese Funktion obendrein, wenn durch einen Diskettenfehler ein einzelnes Filmbild verlorengeht.

E. – Rahmen zeichnen an/aus: Wurde dieser Menüpunkt aktiviert, so umrandet der Computer alle Grafiken in den Spezialgrößen mit einem dünnen Rahmen, bevor diese auf Diskette gespeichert werden.

Wie gewohnt, können Sie auch dieses Menü mit der <←>-Taste verlassen.

7. »Modi«

Nun sind eigentlich schon die wesentlichen Optionen angesprochen worden, um aktiv in die Gestaltung der Grafik eingreifen zu können. Aber damit sind die Möglichkeiten, die das Programm in sich birgt, noch lange nicht erschöpft. »Giga-CAD« bietet Ihnen noch weitere Extras, die die ganze Sache noch weiter abrunden. Dieser Menüpunkt bietet dem Benutzer einen umfangreichen Katalog von Manipulationsmöglichkeiten bei der grafischen Darstellung von Körpern.

A. – Fluchtpunktdarstellung an/aus: Gebilde wirken mit Fluchtpunktdarstellung einfach räumlicher. Dieser Menüpunkt ermöglicht eine perspektivische Darstellung. Dabei werden Tiefe und Entfernung eines Objektes dadurch simuliert, daß sonst parallele Linien in einem Punkt zusammenlaufen (Bild 14, 15). Der Fluchtpunkt ist obendrein noch frei definierbar. Einzugeben sind daher die Koordinaten des Fluchtpunktes. Die wichtigste Rolle spielt dabei die Y-Koordinate. Sie gibt nämlich die Entfernung des Fluchtpunktes an. Hier ist es ratsam, ein wenig herumzuexperimentieren. So finden Sie schnell heraus, welcher Fluchtpunkt für Ihr Objekt am günstigsten ist, da er von der Größe abhängt.

B. – Zeichnen der Schnittlinien an/aus: Wenn sich zwei oder mehrere Flächen schneiden, entsteht eine Schnittkante. Diese Option bewirkt nun, daß die Schnittkanten mit Linien gekennzeichnet werden. Das Programm ist so konzipiert, daß dieser Faktor nur bei reinen Hidden-Line-Grafiken, also nicht bei schattierten, eine Rolle spielt. Der Unterschied zwischen »Zeichnen der Schnittlinien an« und »-aus« wird in den Bildern 16 und 17 veranschaulicht.

Bildschirmfoto: Drahtgittermodell einer Zimmereinrichtung (Tisch, Stühle, Schrank) in Parallelprojektion
Bild 14. Ohne Fluchtpunkt fällt es schwer, die räumliche Lage des Objektes zu erfassen
Bildschirmfoto: dieselbe Zimmereinrichtung als Drahtgitter in perspektivischer Darstellung mit Fluchtpunkt
Bild 15. Erst bei eingeschaltetem Fluchtpunkt läßt sich die Anordnung der räumlichen Objekte erkennen
Computergrafik: Gittergebilde aus sich kreuzenden, längs schraffierten Zylindern als Linienzeichnung ohne Schnittlinien
Bild 16. Damit der Begriff »Schnittlinie« klar wird, zeigt dieses Bild eine Grafik ohne Schnittlinien
Computergrafik: dasselbe Zylindergebilde, die Durchdringungen der Zylinder sind mit dicken schwarzen Schnittlinien markiert
Bild 17. Die gleiche Grafik, aber diesmal mit Schnittlinien

C. – Hidden-Line-Modus an/aus: Die bearbeitete Grafik wurde bisher aus Geschwindigkeitsgründen als sogenanntes »Draht-Modell« dargestellt. Somit geraten auch Linien, die in Wirklichkeit nicht sichtbar wären (da sie durch andere Flächen verdeckt würden) auf den Bildschirm. Schaltet man nun den Hidden-Line-Modus ein, werden diese Linien verdeckt und damit aus der Grafik ausgeblendet. Dabei ist jedoch die Berechnungszeit wesentlich höher.

D. – Schattierungs-Modus an/aus: Auch schattierte Grafiken sind mit »Giga-CAD« möglich. Dabei holt das Programm 64 beziehungsweise in Multicolor 192 verschiedene Grauabstufungen durch unterschiedliche Rastermuster aus der Trickkiste. Dabei wird der Körper so schattiert, als würde er von der Sonne angestrahlt. Der Rechenaufwand ist der gleiche wie bei Hidden-Line-Grafiken. Jedoch werden hier die sonst weißen Flächen mit dem jeweiligen Muster aufgefüllt. Hier kommt nun endlich die so oft angesprochene Verbindungsvorschrift zum Tragen. Veranschaulicht wird dies in Bild 18. Der erste der dargestellten Kelche wurde mit der Verbindungsvorschrift »0«, der zweite mit »1« und der dritte mit »2« konstruiert. Bei einer Kugel wäre beispielsweise die Verbindungsvorschrift »2« anzuraten. Bei Gebäuden sollten Sie aber besser Verbindungsvorschrift »0« wählen. Rotationskörper, wie der abgebildete Kelch, sind oftmals mit »1« sehr wirkungsvoll.

Computergrafik: drei schattierte Kelchgläser nebeneinander, mit unterschiedlich fein gerasterten Grautönen
Bild 18. Hier ist der Unterschied zwischen den Verbindungsvorschriften 0, 1 und 2 zu sehen

E. – Lichtquellen-Koordinaten: Die Lage der Lichtquelle, die den Körper bei der Schattierung »anstrahlt«, ist frei definierbar. Auch hier lassen sich wieder die Koordinaten wie beim Fluchtpunkt eingeben.

F. – Multicolor-Modus an/aus: Grafiken können ebenso in Multicolor dargestellt werden, wobei die Anzahl der verschiedenen Schattierungsstufen sogar auf 192 ansteigt.

G. – Doppelmodus HiRes und Multi an/aus: Zwei Grafiken werden gleichzeitig auf je einem Grafikbildschirm in Multicolor und HiRes erstellt. Während der Berechnung bleibt der HiRes-Bildschirm eingeschaltet. Sämtliche Doppelmodi werden bei Grafiken mit 4- beziehungsweise 10facher Auflösung ignoriert.

H. – Hidden-Line und Schattierung an/aus: Mit diesem Menüpunkt ist es möglich, Grafiken gleichzeitig in Hidden-Line- und im Schattierungsmodus auf je einem der beiden Grafikbildschirme darzustellen. Dabei wird ständig zwischen beiden hin- und hergeschaltet (Bild 19, 20).

I. – Schnittebene an/aus: Wollen Sie wissen, »was die Dinge im Inneren zusammenhält«, schneiden Sie doch einfach den Körper mit dieser Funktion auf. Übrigens ist eine Verschiebung der Schnittebene bei Filmen nur wirksam, wenn sie mit diesem Menüpunkt zuvor eingeschaltet wird. Dabei gibt der hier eingegebene Wert den Startwert der Verschiebung an. Die Schnittebene ist immer parallel zur Projektionsebene (Bildschirm), aber dafür in der Tiefe variabel. Wollen Sie nun Ihr Objekt sehr weit vorn durchschneiden, müssen Sie den Wert negativ, hinter der Hälfte positiv wählen. Mit einem Trick läßt sich ganz einfach eine sinnvolle Tiefe der Schnittebene ermitteln. Gehen Sie einfach in der Eingabeeinheit in den »Zeichnen«-Modus. Hier können Sie direkt am Punktraster im Bildschirmfenster mit der Draufsicht den Abstand abzählen, wobei man von der Mitte (Kreuz) ausgehen muß. Der Abstand zwischen zwei Rasterpunkten entspricht 10 Einheiten.

Computergrafik: ein Konzertflügel mit aufgestelltem Deckel als Strichzeichnung
Bild 19. Ein Flügel in »Hidden-Line«-Darstellung
Computergrafik: derselbe Konzertflügel schattiert, Flächen in schwarzen und gerasterten Grautönen
Bild 20. Der Flügel (Bild 19) wird gleichzeitig auf dem zweiten Bildschirm schattiert gezeichnet

Mit der <←>-Taste kann die Eingabe der Darstellungsmodi abgeschlossen werden. Wirksam werden jedoch die Parameter erst, wenn man »Darstellen« aufruft. Die perspektivische Darstellung wird bei »Form« und »Zoom« auch schon aktiviert. Einige dieser Befehle sind so untereinander verknüpft, daß keine unsinnigen Kombinationen entstehen. Schaltet man beispielsweise den Schattierungs-Modus an, wird gleichzeitig Hidden-Line-Modus aktiviert.

Als die Bilder laufen lernten

Jetzt haben wir alle Befehle und Funktionen kennengelernt, die zum Erstellen und Bearbeiten zur Verfügung stehen. Manche Dinge muten vielleicht zunächst komplizierter an, als sie eigentlich sind. Der gekonnte Umgang damit erfordert selbstverständlich etwas Übung und Erfahrung, die Sie sich jedoch sehr schnell automatisch aneignen werden. Dann finden Sie auch den Schlüssel zu den unbegrenzten Möglichkeiten, die das Programm bietet. Viele Dinge, die sehr kompliziert und daher schwer vorzustellen sind, kann man mit »Giga-CAD« veranschaulichen. Zum Beispiel können Chemie-Freaks ihre Molekülmodelle räumlich erstellen und anschließend als Film rotieren lassen. All diejenigen, die technische Zeichnungen anfertigen wollen, kommen hier selbstverständlich auch auf ihre Kosten (Bild 21, 22). Selbst der Hobby-Bastler kann mit diesem Software-Paket seine Projekte vorher grafisch konstruieren (Bild 23). Wer seinen Dachboden ausbauen möchte, kann überprüfen, ob ein zusätzlicher Tisch nicht doch ganz passend wäre oder ob eine Kommode nicht besser wirkt. Wer es genau wissen will, kann ja noch zusätzlich seine Gebilde aufschneiden. Auch der Einsatz für die Schule wäre denkbar. Werbegrafiken sind ganz einfach und effektvoll zu realisieren. Wer also noch ein Emblem für sein Geschäft sucht, sollte dabei nicht auf »Giga-CAD« verzichten. Damit sind nur einige wenige der denkbaren Bereiche angesprochen. Folglich sind Ihrem Einfallsreichtum keine Grenzen gesetzt (Bild 24, 25). Sollten Sie sich in irgendeinem Programmteil »verheddert« haben, gelangen Sie im allgemeinen mit der Taste <←> wieder ohne Datenverlust aus der Misere. Manchmal ergeben sich Wartezeiten, besonders bei komplizierten Körpern. Man sollte sich dabei nicht zu der Annahme verleiten lassen, der Computer sei abgestürzt. Ferner möchten wir noch darauf hinweisen, daß die Zahl der Flächen auf 421 und die Zahl der Eckpunkte auf 1322 begrenzt sind. Das heißt im Klartext, daß der Computer beim Überschreiten dieser Zahlen alle weiteren Flächen ignoriert. Das tritt jedoch praktisch nur ein, wenn man bei Rotationskörpern völlig übertriebene Werte bei »Anzahl der Facetten« eingibt.

Computergrafik: Drahtgittermodell einer Bohrinsel mit Plattform, Stützbeinen, Turm und Kran als Strichzeichnung
Bild 21. Auch komplizierte Objekte wie diese Bohrinsel lassen sich mit »Giga-CAD« verwirklichen
Computergrafik: Drahtgittermodell einer gewundenen Schraubenfläche als Strichzeichnung
Bild 22. Schrauben können sehr leicht mit der Funktion »Flächen verbinden« realisiert werden
Computergrafik: schattiertes Haus mit Grundstück, Garage und rundem Beet aus der Vogelperspektive
Bild 23. Eine fertig schattierte Grafik mit einer Auflösung von 1000*640 Punkten.
Computergrafik: schattiertes Space Shuttle mit Außentank und zwei Feststoffraketen in Schrägansicht von unten
Bild 24. Werden Grafiken mit einer Auflösung von 1000*640 Punkten gedruckt, entspricht die tatsächliche Größe DIN-A3-Format
Computergrafik: schattiertes Modell der Tower Bridge mit zwei Türmen und Hängekonstruktion
Bild 25. Selbst komplizierte Grafiken wie die »Tower Bridge« sind für »Giga-CAD« kein Problem

Es ist vollkommen abwegig, auf einem Computer mit 64 KByte RAM wie dem C 64 und einem 8-Bit-Prozessor wie dem 6510, der noch dazu nur auf 1 Megahertz getaktet ist, schattierte Hidden-Line-Filme in Echtzeit zu berechnen. So wählten wir die einzig sinnvolle Lösung. Hintereinander werden 24 einzelne Filmbilder berechnet, die sofort auf Diskette gespeichert werden (Bild 26). Das geschieht im bisher beschriebenen Hauptprogramm. Bevor man einen solchen Film betrachten kann, ist es notwendig, einen RESET auszulösen oder den Computer einfach auszuschalten. Danach müssen Sie das entsprechende Programm (Listing 5) mit »LOAD "CAD.MOVIE",8« von der Systemdiskette laden. Ein kompletter Film benötigt 48 KByte und kann somit nicht während der Berechnung im Speicher bleiben. Ist nun ein Film fertig berechnet und komplett auf Diskette gespeichert, läßt sich der Film mit Hilfe dieser speziellen Routine betrachten. Sie lädt die gesamte Filmsequenz und kopiert sehr rasch ein Viertelbild nach dem anderen in die Grafik, wodurch eine nahezu fließende Bewegung entsteht. Nach dem Start des Programms wird der Maschinenspracheteil nachgeladen. Anschließend erscheint ein Menü mit einigen wichtigen Grundoperationen auf dem Bildschirm.

Computergrafik: 24 Einzelbilder eines schattierten Torus in sechs Feldern a bis f, der sich dreht und dabei schrittweise aufgeschnitten wird
Bild 26. Eine komplette Film-Sequenz. Während sich dieser Torus dreht, wird er gleichzeitig aufgeschnitten

A. – Film laden: Diese Routine dient dem Laden von Filmen. Sie brauchen dazu nur den Namen des Films angeben, also ohne »FI.« und der Nummer nach dem Namen. Zur Kontrolle gibt der Computer immer an, welches der 24 Filmbilder er gerade lädt.

B. – Einzelnes Bild laden: Diese Funktion ermöglicht es dem Anwender, ein beliebiges Filmbild an irgendeine Stelle in den Speicher zu laden. Es ist natürlich notwendig, daß der Name mit der nachgestellten Nummer eingegeben wird, da sonst nicht klar wäre, welches Bild aus dem Film geladen werden soll. Außerdem fragt der Computer noch, an welche Position (1 bis 24) im Film das Bild geladen werden soll.

C. – Diskettenkommando senden: Diese Funktion entspricht der bereits bekannten gleichen Namens.

D. – Directory anzeigen: Auch dieser Menüpunkt wurde bereits besprochen.

E. – Ablauf: zyklisch/vor- und rückwärts. Der Benutzer hat in Bezug auf die Sequenz des Films zwei Möglichkeiten: »zyklisch« oder »vor/rückwärts«. Bei Filmen, die reine Umdrehungen darstellen, ist ein zyklischer Ablauf ratsam. Bei allen Filmen, bei denen das (fiktive) 25. Bild nicht kongruent zum ersten ist, empfiehlt es sich, die andere Sequenz zu wählen. Das ist zum Beispiel bei der Verschiebung der Schnittebene der Fall. In vielen Fällen sind sogar beide Variationen ganz wirkungsvoll. Aus diesem Grund empfiehlt es sich fast immer, beide Möglichkeiten durchzutesten.

F. – Modus: HiRes/Multicolor: Mit dieser Funktion kann man zwischen HiRes- und Multicolordarstellung umschalten.

G. – Farben ändern: Mit diesem Menüpunkt schufen wir die Möglichkeit, die Farben ganz Ihrem Geschmack entsprechend auszuwählen. Als Tip sei an dieser Stelle bemerkt, daß im Multicolormodus die Farben 6,14,0,15,15 (in dieser Reihenfolge eingeben) zu empfehlen sind.

H. – Film ansehen: Bei diesem Menüpunkt handelt es sich um das Kernstück der ganzen Routine. Hiermit läßt sich der geladene Film betrachten. Während des Ablaufs bieten wir Ihnen noch einige Gestaltungsmöglichkeiten. Die Geschwindigkeit der Rotation wird per Joystick gesteuert. Drückt man den Joystick nach links, so verlangsamt sich der Ablauf des Films. Schneller wird er, wenn man mit dem Joystick in die andere Richtung lenkt. Die Geschwindigkeit kann maximal 24 Bilder pro Sekunde betragen.

Leistungsstarke Hardcopy-Routine

Irgendwann stellt sich jedem Druckerbesitzer die Frage, wie er die berechneten Grafiken zu Papier bringen kann. Für eine einfache Hardcopy hat sicher jeder eine geeignete Routine, aber wie um alles in der Welt bringt man seinen Drucker dazu, Grafiken mit einer Auflösung von 1000*640 Punkten auszugeben? Die Panik des verzweifelten Anwenders wird sich legen, wenn er erst einmal die Hardcopy-Routine »CAD.HARDCOPY« (Listing 6) geladen und gestartet hat. Endlich steht einmal eine Routine zur Verfügung, die mehr kann als nur den Inhalt eines einzelnen Grafikbildschirms in nur einer Größe auf nur einem Drucker auszudrucken. Das Programm ist so konzipiert, daß es alle Drucker unterstützt, die folgende Fähigkeiten haben:

— Der Drucker kann mit 8-Nadel-Grafik vertikal untereinander drucken.

— Die Ausgabe der Grafik kann im Bit-Image-Mode erfolgen.

Aber für alle Besitzer von anderen Druckern besteht kein Grund, den Kopf hängen zu lassen! Sämtliche Grafiken werden auf Diskette im gängigen Format gespeichert und lassen sich mit Programmen wie »Hi-Eddi« ausdrucken. Diejenigen, die einen MPS 801 oder MPS 802 besitzen, müssen statt Listing 6 und 21 Listing 7 und 22 beziehungsweise Listing 8 und 23 eingeben. Wer eine höhere Auflösung als 320*200 Punkte wünscht, kommt hier auf seine Kosten. Die »Giga-CAD Hardcopy« -Routine hat es in sich! Sie brauchen das Programm nur einmal an Ihren Drucker anpassen, und schon werden die jeweiligen Daten immer mitgeladen. Mit dem Modus »doppelte Dichte« hat es eine besondere Bewandtnis: Der Druckkopf druckt jeweils acht Zeilen in doppelter Dichte, wobei jede zweite Zeile ausgelassen wird. Anschließend bringt er die jeweils ausgelassenen Zeilen zu Papier, wobei der Ausdruck um einen halben Punkt nach unten versetzt erfolgt. Doch am besten befassen wir uns zunächst mit den einzelnen Menüpunkten.

A. – Grafik laden: Selbstverständlich kann man auch Grafiken in der Standardgröße ausdrucken. Dazu ist es notwendig, die Grafik zu laden. Auch hier ist das »PI.« vor dem Namen nicht mit einzugeben, wenn der Computer Sie nach dem Filenamen fragt. Wollen Sie andere Bilder, die nicht mit »Giga-CAD« erstellt wurden, ausdrucken, so ist der Filename auf Diskette so zu ändern, daß dem Namen ein »PI.« vorangestellt wird. Das geschieht üblicherweise mit dem »Diskettenkommando senden«, Menüpunkt »G«: »R:PI.NAME=NAME«.

B. – Hardcopy einfach: Die Grafik, die zuletzt geladen wurde, wird nach Aufruf dieses Menüpunktes auf dem Drucker ausgegeben (Bild 27). Sollte dabei nicht das gewünschte Ergebnis erzielt werden, sollten Sie sich erst Klarheit darüber verschaffen, ob die Anpassung auch wirklich korrekt war.

C. – Hardcopy vierfach: Die Grafiken werden nacheinander von Diskette geladen und untereinander ausgedruckt (Bild 28). Es versteht sich von selbst, daß man hier den Filenamen eingeben und die entsprechende Diskette in das Laufwerk schieben muß.

Computergrafik: schattierte Eckbank mit Tisch, zwei Stühlen und Wandregal in grober Rasterung
Bild 27. Eine Eckbank in einfacher Größe (Auflösung 320*200 Punkte)
Computergrafik: dieselbe Eckbank in feinerer Rasterung, breites Querformat
Bild 28. Die Eckbank (Bild 27) in vierfacher Größe (Auflösung 640*400 Punkte)

D. – Hardcopy 10fach: Dieser Programmpunkt entspricht im wesentlichen dem eben genannten. Die Grafik wird jedoch um 90 Grad gedreht und in 10facher Größe ausgedruckt (fünf Streifen untereinander mit je zwei Bildern parallel) (Bild 29).

Computergrafik: dieselbe Eckbank in hoher Auflösung mit feinen Grauabstufungen
Bild 29. Die Eckbank (Bild 27) in 10facher Größe (Auflösung 1000*640 Punkte)

E. – Einfache Dichte/Doppelte Dichte: Praktisch alle gängigen Hardcopy-Routinen drucken die Grafiken in einfacher Dichte aus. Aber bei den meisten Druckern bekommt man Schwierigkeiten mit dem rechten Blattrand beim Ausdruck von Grafiken mit vier- beziehungsweise 10facher Auflösung. Diese Schwachstelle haben wir umgangen, indem wir die Möglichkeit schufen, Grafiken in doppelter Dichte auszudrucken. Auch einzelne Grafiken können in doppelter Dichte ausgedruckt werden. Dabei wäre natürlich zu beachten, daß das nur mit entsprechenden Druckern möglich ist.

F. – Druckeranpassung: Dieser Menüpunkt muß nur einmal aufgerufen werden, und zwar dann, wenn Sie Ihren Drucker anpassen wollen. Die ermittelten Daten werden auf Diskette gespeichert, um immer nach dem Laden des Programms zur Verfügung zu stehen. Zur Anpassung wäre sonst nichts weiter zu sagen, da der Computer Sie durch detaillierte Fragen bei der Eingabe unterstützt. Als Sequenz sind immer die ASCII-Codes der Steuerzeichen einzugeben. Zuerst muß dem Computer die Zahl der Steuerzeichen übermittelt werden. Wollen Sie also »ESC E« senden, muß folgendermaßen vorgegangen werden: Die Anzahl der Codes beträgt zwei, die Steuerzeichen haben die ASCII-Werte »27« und »69«. Es versteht sich natürlich von selbst, das jeweilige Druckerhandbuch eingehend zu studieren. Durch die Möglichkeit, die Sekundäradresse anzugeben, unter der der Befehl gesendet werden soll, verträgt sich das Programm auch mit einigen Exoten unter den Druckern. Im Normalfall sollte man hier die Sekundäradresse für Linearkanal wählen. Ist das Ergebnis immer noch nicht befriedigend, sollte versucht werden, das Interface durch den eventuell vorhandenen DIPschalter auf Durchgang zu schalten. Die durch Listing 10 erzeugten Druckerdaten beziehen sich auf Epson und Kompatible. Bei Epsondruckern mit Data-Becker- oder Wiesemann-Interface müssen Sie als Sekundäradresse <1> eingeben. Das Görlitz-Interface verlangt statt dessen die Sekundäradresse <4>. Besitzen Sie einen SG-10, so ist der »Zeilenabstand auf n/144 Inch« einzustellen. Das entspricht der Sequenz: 27,51,1 beziehungsweise bei Epson-Druckern 27,51,1.5

G. – Diskettenkommando senden: Dieser Menüpunkt bedarf wohl inzwischen keiner näheren Erklärung mehr.

H. – Directory anzeigen: Entspricht der bereits bekannten Directory-Routine.

I. – Druckerkommando senden: Ein weiteres Extra, das zur hohen Flexibilität beiträgt, ist die Möglichkeit, beliebige Druckersequenzen zu senden. Damit kann man beispielsweise den Druckertabulator weiter nach rechts setzen, um eine einzelne Grafik zu zentrieren. Die Eingabe der Sequenz erfolgt in gewohnter Art und Weise.

J. – Druckerparameter prüfen: Bei dieser Funktion wird die aktuelle Druckereinstellung auf dem Bildschirm ausgegeben.

Die Hardcopy-Routine wurde bewußt separat programmiert, um auch den Ausdruck anderer Grafiken zu ermöglichen, ohne das ganze Hauptprogramm von »Giga-CAD« laden zu müssen.

Eingabehinweise

Die Maschinenteile müssen mit dem MSE eingegeben werden. Mit dem Listing 11 hat es jedoch eine besondere Bewandtnis. Es handelt sich nämlich hierbei um die Grafikdaten der Kopfzeilen und der Grafiksymbole. Diese wurden speziell kodiert, so daß das MSE-Listing etwa um die Hälfte kürzer wurde. Deshalb müssen die Daten nach dem Abtippen wieder dekodiert werden. Für Sie bedeutet das im Klartext, daß Sie zuerst Listing 11 in gewohnter Weise mit dem MSE eingeben müssen. Anschließend laden Sie das eingegebene Programm »HRG.CAD.SRC« und starten es. Auf Diskette wird daraufhin das File »HRG.CAD.OBJ« erzeugt, in dem die Grafikdaten in der erforderlichen Form vorliegen. Die beiden Cursor-Sprites werden durch ein kurzes Basic-Programm (Listing 9) direkt auf Diskette erzeugt. Es ist von enormer Wichtigkeit, darauf zu achten, daß die REM-Zeilen und die Space-Zeichen zwischen den Befehlen nicht mit eingegeben werden! Andernfalls reicht der Speicherplatz nicht aus. Auch hier sollten die Basic-Listings wieder üblicherweise mit dem Checksummer abgetippt werden. Es empfiehlt sich, für das Programm eine eigene Diskette zu verwenden, um alle Systemfiles auf einer Diskette abzulegen. Sollten Sie einen geeigneten Compiler haben, wie den Austrocomp, wäre es ratsam, die Listings 2, 3 und 4 zu compilieren. Selbstverständlich ist das Programm auch so uneingeschränkt lauffähig, aber einige Dinge werden durch das Compilieren noch abgerundeter und flüssiger. An dieser Stelle sei erwähnt, daß natürlich alle langsamen Funktionen durch Programmierung in Assembler ein Optimum an Geschwindigkeit erlangen. Lediglich einfache Eingaben und die Menüsteuerungen sind in Basic programmiert. Das File mit den Druckerdaten wird von Listing 10 auf Diskette erzeugt. Die Source-Listings (Listing 24 bis 26) müssen nicht abgetippt werden. Sie dienen lediglich der Verdeutlichung einiger Algorithmen. Es wurden gezielt diese Source-Listing-Auszüge gewählt, da gerade diese Routine für den Leser von Interesse sein dürften. Da wäre zum Beispiel die Directoryroutine (Listing 24). Wer hätte nicht schon einmal ein derartiges Unterprogramm in seinem Basic-Programm benötigt. Oft jedoch wird dann die Routine nur in Basic programmiert. Das artet jedoch zwangsläufig in eine nervenaufreibende Warterei aus. Diese Probleme fallen natürlich bei der sehr schnellen und zudem kurzen Assemblerroutine ganz weg!

Nun zur Hardcopy-Routine: Die meisten Routinen arbeiten nur mit einem bestimmten Drucker problemlos zusammen. Deshalb ist die Hardcopy-Routine von »Giga-CAD« sehr universell angelegt. Sollte Ihr Drucker dennoch streiken, ermöglicht Ihnen eventuell das Source-Listing (Listing 25), die Routine für Ihren Drucker umzuschreiben. In dem Source-Listing der Movie-Routine (Listing 26) wird das Geheimnis bewegter Grafiken gelüftet. Sämtliche Source-Listings sind ausführlich und übersichtlich dokumentiert, so daß eigentlich jeder Schritt nachvollziehbar ist. Somit können die Routinen auch für eigene Zwecke abgeändert werden.

Erläuterung der Assembler-Routinen

Um das ganze Programm für Sie durchsichtiger zu gestalten, haben wir in Tabelle 1 die verwendeten Assemblerroutinen mit ihrer Syntax abgedruckt. Somit geben wir Ihnen Gelegenheit, eventuelle Änderungen anzubringen. Ferner lassen sich die Maschinenspracheteile auch in eigene Programme als Basic-Erweiterung einbauen. Aufhorchen läßt zunächst einmal die Tatsache, daß man über zwei Grafikbildschirme verfügt und wahlweise auf einem der beiden oder auf beiden gleichzeitig zeichnen kann. Außerdem kann man eine der beiden Grafiken anzeigen, mit mehreren Verknüpfungsarten Grafiken ineinander kopieren und im Rasterinterrupt mit variabler Geschwindigkeit zwischen beiden umschalten. Selbstverständlich sind auch Routinen enthalten, die die Darstellung dreidimensionaler Gebilde unterstützen. Daraus ergibt sich zwangsläufig, daß Routinen wie zum Beispiel zum Zeichnen von Kreisen und Ellipsen wegen des fehlenden Speicherplatzes nicht integriert sind. Auch sind solche Routinen bei einem CAD-Programm überflüssig. Aber wer Lust hat, kann sich ja entsprechende Befehle dazuprogrammieren. Aber enorm praktisch ist dafür zum Beispiel der »Screenline«! Endlich ist Schluß mit dem »?ILLEGAL QUANTITY ERROR« beim Zeichnen von Linien. Der »Screenline«-Befehl schneidet automatisch überstehende Linien ab und stellt den verbleibenden Rest auf dem Bildschirm dar. Wie Sie anhand der Speicherbelegungstabelle (Tabelle 2) erkennen, wird der gesamte Speicher des C 64 von »Giga-CAD« beansprucht. Bei der Planung und Entwicklung des Programms wurde ein besonderes Augenmerk auf die optimale Ausnutzung des zur Verfügung stehenden Speicherplatzes gelegt. Auch die Basic-Programme wurden mehrfach in Bezug auf Länge und Geschwindigkeit optimiert. Da der Speicher jedoch zu klein ist, um bei einer vernünftigen Punkt- und Flächenanzahl das gesamte Programm zu fassen, mußte auf die Overlay-Technik zurückgegriffen werden. Im Klartext heißt das, daß einzelne Programmteile nachgeladen werden und sich teilweise überlappen. An dieser Stelle sei auf einen weiteren Vorteil der Maschinenspracheroutinen hingewiesen. Da man Teile von HiRes (1 bis 8) (Listing 12 bis 19) laden kann, lassen sich so die benötigten Befehle auswählen. Zu erwähnen ist lediglich die Einschränkung, daß die Teile in aufsteigender Reihenfolge geladen werden müssen, da Routinen mit höheren Nummern teilweise auf Routinen mit niedrigeren Nummern zurückgreifen. Außerdem muß man vor dem Aufruf anderer Befehle den »Create«-Befehl (SYS 37021) ausführen. Der Aufruf der Befehle erfolgt stets mit »SYS Adresse...«. Sieht ein Befehl eine Parameterübergabe vor, so müssen diese durch Kommata von der SYS-Adresse getrennt werden. Die Parameter können sowohl Variable und Formeln als auch Zahlen sein. Der Verzicht auf einen Aufruf als Basic-Befehl hat zum einen den Vorteil, daß der Speicherplatz, den die Befehlstabelle benötigen würde, eingespart wird. Zum anderen läßt sich dadurch der Aufruf schneller durchführen, da nicht in einer Tabelle gesucht werden muß. Außerdem kann man so das Programm besser compilieren. Der Zeichen-Modus, in der Tabelle durch die Variable »ZM« ersetzt, kann im allgemeinen die Werte 0 bis 2 annehmen. <0> löscht, <1> setzt und <2> invertiert Punkte. Eine weitere öfters verwendete Variable ist »BS«, die den Bildschirm angibt. Bei allen Zeichenbefehlen ist für die Variable ein Wert zwischen 1 und 3 anzugeben. Bei <1> wird nur auf dem ersten, bei <2> ausschließlich auf dem zweiten Bildschirm gearbeitet. Gibt man als Bildschirmnummer <3> an, so wird auf beiden Bildschirmen gleichzeitig gezeichnet. Anders liegen die Dinge bei den Befehlen »HIRES«, »SHOW«, »COPY«, »UNFLASH«, »PIC LOAD« und »PIC SAVE«. Hier kann man jeweils nur wahlweise Bildschirm »1« oder »2« behandeln. Bei »SHOW« läßt sich zusätzlich für »BS« noch »0« verwenden, wodurch der Textbildschirm wieder eingeschaltet wird.

Liste der Einsprungadressen der Maschinenroutinen
HiRes 1 Adr. Parameter Funktion Listing 12
HiRes 50181 ,pf,hf,bs Löscht Bit-Map bs und initialisiert Farbspeicher mit Punktfarbe pf (0-15) und Hintergrundfarbe hf (0-15)
Copy 50292 ,bs,ve Kopiert die jeweils andere Bit-Map in die Bit-Map bs unter Verwendung der Verknüpfung ve :
ve = 0 : direktes Kopieren ohne Verknüpfung
ve = 1 : OR-Verknüpfung
ve = 2 : EXOR-Verknüpfung
Plot 50447 ,x,y,zm,bs Setzt einen Punkt mit den Koordinaten x, y in der Grafik bs.
Show 50707 ,bs Schaltet den Bildschirm bs ein.
Block 50859 ,x1,y1,x2,y2,zm,bs Zeichnet ein ausgefülltes Rechteck auf dem Bildschirm bs. Die Koordinaten x1, y1 geben dabei den Eckpunkt links oben, x2 und y2 den Eckpunkt rechts unten an.
Line 51049 ,x1,y1,x2,y2,zm,bs Zieht eine Linie von x1,y1 nach x2,y2
Joy 1 51627 :j=PEEK(859) Ermittelt Stellung des Joysticks (Port 2) und übergibt diese in der Speicherstelle 859 (siehe Erläuterungen).
Flash 51480 ,v Schaltet (Rasterinterrupt-gesteuert) zwischen beiden Bit-Maps hin und her. Dabei gilt für die Geschwindigkeit v:
1 → 128 → 255 → 0
sehr schnell langsam extrem langsam
Unflash 51507 ,bs Beendet das Rasterinterrupt-Blinken und schaltet auf Bit-Map bs um (bs darf hier nicht 0 sein !)
Rec 51800 ,x1,y1,x2,y2,zm,bs Zeichnet ein Rechteck mit den angegebenen Eckpunkten
Cross 52008 ,zm,bs Zeichnet ein Kreuz und unterteilt so die Grafik in gleichgroße Viertel.
2D-Punkte 52103 ,zm,bs Legt ein Punktraster mit 10 Pixel Abstand über die Bit-Map bs.
3D-Punkte 52176 ,zm,bs Füllt den gesamten Bildschirm bs bis auf die Kopfzeile und die Menü-Symbole mit einem Punktraster von 5 Pixel Punktabstand.
Text 1 52466 ,bs Kopiert die CREATE-Kopfzeile in die Bit-Map bs.
Text 2 52490 ,bs Kopiert die MAIN -Kopfzeile in die Bit-Map bs.
3D-Menü 52517 ,bs Kopiert das Window mit den Grafik-Symbolen in die Bit-Map bs.
X-Achsen 52664 ,zm,bs Zeichnet die 3 Projektionen der X-Achse in die Windows der 3D-Ansicht.
Y-Achsen 52835 ,zm,bs Zeichnet die 3 Projektionen der Y-Achse in die Windows der 3D-Ansicht.
Z-Achsen 53045 ,zm,bs Zeichnet die 3 Projektionen der Z-Achse in die Windows der 3D-Ansicht.
HiRes 2 Adr. Parameter Funktion Listing 13
Name 36878 ,bs Kopiert den Programmnamen »GIGA-CAD SYSTEM« mittels OR-Verknüpfung in die Bit-Map bs.
Create 37021 – Erzeugt diverse Floating-Point-Variablen und legt diese im Speicher ab.
3D-Line 38378 ,x1,y1,z1,x2,y2,z2,zm,bs Zeichnet alle 3 Projektionen einer dreidimensionalen Linie von Punkt x1, y1, z1 zum Punkt x2, y2, z2 in den entsprechenden Vierteln der 3D-Ansicht. Über den Bildschirm hinausragende Linien werden per Strahlensatz abgeschnitten, das heißt, die Linien behalten ihren ursprünglichen Winkel bei.
Joy 2 39247 ,x,y,f:x=PEEK(2024)+256*PEEK(2025) y=PEEK(2026):a=PEEK(631)) Bewegt Cursor-Sprite, siehe Erläuterungen.
Koord.-Code 39718 ,x1,y1,z1,q Kodiert die 3D-Koordinaten x1,y1,z1 in das 3D-Koordinatenarray mit Index q (siehe Erläuterungen).
Koord.-Decode 40052 ,q:x1=USR(1):y1=USR(2):z1=USR(3) Dekodiert 3D-Koordinaten (siehe Erläuterungen).
Fläche-Code 40206 ,q,i,mn,vb Kodiert die Flächenpointer ins Flächenarray (siehe Erläuterungen).
Fläche-Decode 40344 ,i:q=USR(1):mn=USR(2):vb=USR(3) Liest die Flächenpointer aus (siehe Erläuterungen).
HiRes 3 Adr. Parameter Funktion Listing 14
Scale 22659 ,zm,bs Kopiert den Rotations-Maßstab in die Grafik bs.
Screenline 21764 ,x1,y1,x2,y2,zm,bs Erfüllt die gleiche Aufgabe wie der »Line«-Befehl, schneidet jedoch überstehende Linien mit Hilfe des Strahlensatzes ab (beliebiger Bereich der Koordinaten!).
Circle 21836 ,bs:On/Off-Flag liegt bei 40783 Zeichnet einen Hilfskreis (siehe Erläuterungen).
Umformung 22873 ,mo,zn,dg,d,ei,j,w Transferiert das Objekt (siehe Erläuterungen).
3D-Darstell. 25123 ,zn,dg,zm,bs Stellt Objekt in der 3D-Ansicht dar (siehe Erläuterungen).
3D-Cursor 25652 ,px,py,pz,zm,bs Zeichnet alle 3 Projektionen des Cursor-Kreuzes
Allclear 25919 – Löscht 3D-Koordinaten- und Flächen-Pointer-Array.
Pic Load OPEN2,8,2,"NAME,p,r":SYS26101,bs:CLOSE2 Lädt die Grafik "NAME" von Diskette in die Bit-Map bs.
Pic Save OPEN2,8,2,"NAME,p,w":SYS26068,bs:CLOSE2 Speichert Bit-Map bs unter "NAME" auf Diskette.
Directory OPEN2,8,0,"$0":SYS26134:CLOSE2 Gibt das Directory der eingelegten Diskette ohne Programmverlust auf dem Bildschirm aus.
HiRes 4 Adr. Parameter Funktion Listing 15
Multi 21839 ,c1,c2,c3,bs:poke53281,c4 Initialisiert den Farbspeicher mit den Multicolor-Farben c1,c2,c3 und der Hintergrundfarbe c4 und schaltet anschließend auf Multicolor-Darstellung der Bit-Map bs um.
Plot Multi 22114 ,x,y,zm,bs »Plot«-Befehl für Multicolor, zm gibt die Farbe an:
zm = 0 : Hintergrundfarbe (entspricht löschen)
zm = 1 : Multicolor-Farbe c1
zm = 2 : Multicolor-Farbe c2
zm = 3 : Multicolor-Farbe c3
Viertel Save OPEN2,8,2,"name,p,w":SYS22299:CLOSE2 Speichert den Viertelbildschirm links oben in Bit-Map 2 unter "NAME" auf Diskette.
Objekt Load 22541 ,d,v Lädt Objekt von Diskette (siehe Erläuterungen).
Objekt Save 22520 ,d,v Speichert Objekt (siehe Erläuterungen).
HiRes 5 Adr. Parameter Funktion Listing 16
Line-Test 25257 ,x1,y1,x2,y2,yw:ax=PEEK(862)+256*PEEK(863):ex=PEEK(864)+256*PEEK(865) Diese Routine ist nur für HiRes 7 von Nutzen und läßt sich vom Basic aus nicht einsetzen.
HiRes 6 Adr. Parameter Funktion Listing 17
Fl-Darstell. 20480 ,d,fl,ri,a1,a2,a3,h,gr,f1,f2,fk,bs Stellt das Objekt dar (siehe Erläuterungen).
HiRes 7 Adr. Parameter Funktion Listing 18
Schattieren 14857 ,sl,wq,mc,wm,b,se,ke,d,gr,ec,ed,bs Schattiert nach entsprechenden Vorbereitungen das im Speicher befindliche Objekt.
HiRes 8 Adr. Parameter Funktion Listing 19
Macro-Load 21006 ,mn,d,v:d=PEEK(2028)+256*PEEK(2029) v=PEEK(2026)+256*PEEK(2027) Lädt ein Makro von Diskette.
Macro-Save 21301 ,n1,d Speichert das Makro n1 auf Diskette.
Movie Adr. Parameter Funktion Listing 20
Movie 50284 ,f,m,c1,c2,c3 Läßt den im Speicher befindlichen Film ablaufen. Die Geschwindigkeit wird mit Joystick Port 2 links/rechts gesteuert, mit Feuerknopf wird der Film abgebrochen.
Bedeutung der Parameter:
f = 0 : zyklischer Ablauf
f = 1 : Ablauf vorwärts/rückwärts
m = 0 : HiRes-Modus
m = 1 : Multicolor-Modus
c1–c3 : Farben des Films
Viertel-Load 50187 ,ad Lädt ein Filmbild (Viertelbildschirm) ab der Adresse ad.
Directory OPEN2,8,0,"$0":SYS50772:CLOSE2 Directory-Funktion analog zu »Directory« in HiRes 3.
Hardcopy Adr. Parameter Funktion Listing 21
Hardcopy 50475 ,320*z,m,a,g Gibt die Grafikzeile z auf grafikfähigem 8-Nadel-Drucker aus. Einzelheiten sowie genaue Bedeutung der Parameter siehe Erläuterungen.
HiRes 50192 ,pf,hf,bs Analog zu »HiRes« in HiRes 1 mit dem Unterschied, daß die Bit-Map bs nicht gelöscht wird.
Pic Load OPEN2,8,2,"NAME,p,r":SYS50442,BS:CLOSE2 Analog zu »Pic Load« in HiRes 3.
Show 50299 ,bs Analog zu »Show« in HiRes 1.
Directory OPEN2,8,0,"$0":SYS50901:CLOSE2 Directory-Funktion analog zu »Directory« in HiRes 3.
Tabelle 1. Alle möglichen SYS-Befehle im Überblick
Speicherbelegung in den einzelnen Programmteilen
Cad.Main
$033c – $03fb Kassettenpuffer (temporärer Speicher für Maschinenprogramme).
$0800 – $4fff Basic-Speicher (Cad.Main)
$5000 – $53ca HiRes 6
$5500 – $6665 HiRes 3
$554c – $584a HiRes 4 (Overlay)
$67d0 – $6cff Flächenpointer – Array (0 bis 421)
$6d00 – $8bff 3D-Koordinaten – Array (0 bis 1321)
$8c00 – $8ff7 Farbspeicher für Bit-Map 1
$8ff8 – $8fff Sprite-Pointer 1
$9000 – $9e5f HiRes 2
$9e87 – $9fff Floating-Point-Variablen für Maschinenprogramme
$a000 – $bf40 Bit-Map 1
$bf80 – $bfbf Sprite-Cursor 1
$c000 – $c3f7 Farbspeicher für Bit-Map 2
$c3f8 – $c3ff Sprite-Pointer 2
$c400 – $cfcc HiRes 1
$d000 – $db59 Grafikdaten
$e000 – $ff40 Bit-Map 2
$ff80 – $ffbf Sprite-Cursor 2
Cad.Create
$033c – $03fb Kassettenpuffer (temporärer Speicher für Maschinenprogramme).
$0800 – $51ff Basic-Speicher (Cad.Create)
$5200 – $544d HiRes 8
$5500 – $6665 HiRes 3
$67d0 – $6cff Flächenpointer – Array (0 bis 421)
$6d00 – $8bff 3D-Koordinaten – Array (0 bis 1321)
$8c00 – $8ff7 Farbspeicher für Bit-Map 1
$8ff8 – $8fff Sprite-Pointer 1
$9000 – $9e5f HiRes 2
$9e87 – $9fff Floating-Point-Variablen für Maschinenprogramme
$a000 – $bf40 Bit-Map 1
$bf80 – $bfbf Sprite-Cursor 1
$c000 – $c3f7 Farbspeicher für Bit-Map 2
$c3f8 – $c3ff Sprite-Pointer 2
$c400 – $cfcc HiRes 1
$d000 – $db59 Grafikdaten
$e000 – $ff40 Bit-Map 2
$ff80 – $ffbf Sprite-Cursor 2
Cad.Paint
$033c – $03fb Kassettenpuffer (temporärer Speicher für Maschinenprogramme).
$0800 – $37ff Basic-Speicher (Cad.Paint)
$3800 – $48bb HiRes 7
$4940 – $49d6 Floating-Point-Variablen für Schattierung
$49dc – $4d27 Maxima/Minima-Array, gibt die Extrempunkte der einzelnen Flächen an.
$4d28 – $4e59 Hilfsarray für Schattierung
$4e5a – $4fff Array: Cosinus (*192) des Winkels zwischen Normalenvektor einer Fläche und Lichtquellenvektor, bei Schattierung benötigt
$5000 – $54ff Tiefen-Array, gibt die Tiefe des vordersten an dieser Stelle geplotteten Punktes an
$5500 – $6665 HiRes 3
$554c – $584a HiRes 4 (Overlay)
$62a6 – $64d4 HiRes 5 (Overlay)
$67d0 – $6cff Flächenpointer – Array (0 bis 421)
$6d00 – $8bff 3D-Koordinaten – Array (0 bis 1321)
$8c00 – $8ff7 Farbspeicher für Bit-Map 1
$8ff8 – $8fff Sprite-Pointer 1
$9000 – $9e5f HiRes 2
$9e87 – $9fff Floating-Point-Variablen für Maschinenprogramme
$a000 – $bf40 Bit-Map 1
$bf80 – $bfbf Sprite-Cursor 1
$c000 – $c3f7 Farbspeicher für Bit-Map 2
$c3f8 – $c3ff Sprite-Pointer 2
$c400 – $cfcc HiRes 1
$d000 – $db59 Grafikdaten
$e000 – $ff40 Bit-Map 2
$ff80 – $ffbf Sprite-Cursor 2
Cad.Movie
$033c – $03fb Kassettenpuffer (temporärer Speicher für Maschinenprogramme).
$0800 – $17ff Basic-Speicher (Cad.Movie)
$1800 – $bfff Bilder 1 bis 21
$c000 – $c3f7 Farbspeicher für Bit-Map
$c400 – $c6a3 Movie.Cad.Obj
$c800 – $dfff Bilder 22 bis 24
$e000 – $ff40 Bit-Map
Cad.Hardcopy
$033c – $03fb Kassettenpuffer (temporärer Speicher für Maschinenprogramme).
$0800 – $8bff Basic–Speicher (Cad.Hardcopy)
$8c00 – $8ff7 Farbspeicher für Bit-Map 1
$a000 – $bf40 Bit-Map 1
$c000 – $c3f7 Farbspeicher für Bit-Map 2
$c400 – $c724 Hardcopy.Cad.Obj
$e000 – $ff40 Bit-Map 2
Tabelle 2. Speicherbelegung von »Giga-CAD«

1. »Joy 1«: Diese Routine ist für die Abfrage des Joysticks in Port 2 gedacht. Im Programm findet sie zum Beispiel bei der Eingabe des Verformungsgrades per Joystick ihre Anwendung. Nach Aufruf dieses Befehls erfolgt sofort wieder ein Rücksprung ins Basic. Die ermittelte Joystick-Stellung wurde in Speicherstelle 859 abgelegt. Bei »Giga-CAD« wird mit »J=PEEK(859)« der Variablen J der entsprechende Wert zugeordnet. Man erhält für J zunächst einmal die Werte »0« bis »8«. Bei »0« wurde der Joystick überhaupt nicht bewegt. Die Joystick-Stellungen sind, oben beginnend, von 1 bis 8 im Uhrzeigersinn durchnumeriert. Drückt man den Feuerknopf, so liefert die Abfrage den Wert »128«. Wenn man nun bei gedrücktem Feuerknopf den Joystick bewegt, addiert sich zu den Werten 1 bis 8 jeweils 128. Mit anderen Worten ist bei gedrücktem Feuerknopf Bit 7 gesetzt.

2. »Joy 2«: Dieser Befehl unterscheidet sich völlig von dem eben erklärten. Ruft man diese Routine auf, so erscheint das Cursorsprite auf dem Bildschirm. Mit Hilfe des Joysticks kann man den Cursor nun über den ganzen Bildschirm bewegen. Dabei nimmt die Geschwindigkeit bei Bewegungen in einer Richtung bis zu einem bestimmten Wert linear zu. So läßt sich der Cursor sehr schnell über größere Distanzen bewegen, aber dennoch präzise positionieren. Erst wenn man den Feuerknopf oder irgendeine Taste drückt, wird die Routine verlassen. Die aktuelle X- und Y-Koordinate des Sprites kann mit

X=PEEK(2024)+256*PEEK(2025) und

Y=PEEK(2026) lokalisiert werden. Möchte man wissen, welche Taste gedrückt wurde, läßt sich deren ASCII-Code durch Auslesen der Speicherstelle 631 »A=PEEK(631)« ermitteln.

3. »Fläche-Code«: Ab $67d0 ist ein besonderes Array zur Verwaltung der Flächen abgelegt. Mit Hilfe des »Fläche-Code«-Befehls kann man nun Einträge in dieses Array vornehmen. Doch zunächst erhalten Sie noch detaillierte Informationen über dieses Array. Der in der Tabelle mit »i« bezeichnete Index gibt die Nummer der Fläche an. Diese Nummer ist somit identisch mit der Position der Fläche im Array. Die eigentlichen Koordinaten der Eckpunkte einer Fläche sind hintereinander in einem weiteren Array abgelegt. Um einen problemlosen Zugriff auf die Daten einer beliebigen Fläche zu haben, muß natürlich im Flächen-Array jede Fläche mit einer Startadresse der Koordinaten versehen sein. Diese Adresse gibt also an, ab der wievielten Stelle im Eckpunkte-Array die eigentlichen Daten der Fläche beginnen. Um auch noch Eckpunkte mit der Nummer 1321 adressieren zu können, muß dafür eine 16-Bit-Zahl verwendet werden. In Tabelle 1 steht für die Startadresse im Eckpunkte-Array die Variable »Q«. Um auch einzelne Makros unterscheiden zu können, ist es außerdem notwendig, die Nummer des Makros (»MN«) in der Fläche zu kodieren. Dafür sind pro Fläche 6 Bit reserviert, so daß maximal 64 Makros verwaltet werden können. Da jede Fläche ihre eigene Verbindungsvorschrift (»VB«) haben kann, sind dafür nochmals 2 Bit freigehalten, um die Werte 0 bis 2 kodieren zu können. Befassen wir uns zunächst zum leichteren Verständnis mit einem kleinen Beispiel. Kodiert werden soll die 21. Fläche mit 4 Eckpunkten, Makronummer 5 und Verbindungsvorschrift 1, deren Koordinaten im entsprechenden Array ab Position 340 beginnen. Dazu müssen Sie folgende Befehle eingeben:

SYS 40206,340,20,5,1:SYS 40206,344,21,0,0

Der zweite SYS-Aufruf legt den Anfang der nächsten Fläche fest und begrenzt so die Eckpunktdaten der kodierten Fläche, in diesem Fall auf die Position 343. Folgt keine Fläche mehr, so ist Verbindungsvorschrift und Nummer des Makros an der Endmarke ohne Bedeutung. Wie nun die Daten der Eckpunkte in ihrem Array abgelegt werden, wird an späterer Stelle erklärt.

4. »Fläche-Decode«: Bei dieser Funktion handelt es sich um das Gegenstück von »Fläche-Code«. Hiermit wird es möglich, kodierte Werte wieder auszulesen. Bei dem SYS-Aufruf muß dann die Nummer der Fläche angegeben werden. Die Startposition der Fläche im Eckpunkte-Array (»Q«), die Makro-Nummer (»MN«) und die Verbindungsvorschrift (»VB«) werden folgendermaßen ermittelt:

Q=USR(1):MN=USR(2):VB=USR(3)

5. »Koord.-Code«: Nun wollen wir dem nächsten Problem zu Leibe rücken: der Organisation der Eckpunktkoordinaten im Speicher. Es stellt sich ja zwangsläufig die Frage, möglichst viele Daten in einem möglichst kleinen Speicherbereich unterzubringen. Und dabei ist zusätzlich die Genauigkeit der Daten ein begrenzender Faktor, der bei mathematisch orientierten Programmen wie »Giga-CAD« eine erhebliche Rolle spielt. Durch numerische Versuche wurde schließlich als Maximalanforderung eine Genauigkeit ermittelt, die eine Präzision von einer Stelle hinter dem Komma fordert. Würde man eine geringere Genauigkeit wählen, etwa nur Integerzahlen ohne Nachkommastellen, so hat man zwar einen größeren Koordinatenbereich, jedoch beginnen die bearbeiteten Objekte nach einigen Umformungen auseinanderzufallen, da sich die Rechenungenauigkeiten immer weiter aufsummieren. So suchten wir also einen Kompromiß zwischen Koordinatenbereich und Genauigkeit, woraus sich dann folgender Kodierungs-Algorithmus ergab:

B=(A*10)+32768

»A« ist hier die zu kodierende Fließkommakoordinate und »B« die kodierte 16-Bit-Zahl. Dieser Algorithmus beschränkt die Koordinaten auf einen Bereich von -3276.8 bis +3276.7. Werte außerhalb dieses Bereiches würden dazu führen, daß die 16-Bit-Zahl »B« entweder negativ oder größer als 65535 wird. Die X-, Y- und Z-Koordinaten sind in einem Stapel abgelegt, der von 0 bis 1321 durchnumeriert ist und immer alle 3 Koordinatenkomponenten zusammen adresssiert. Um das hier angewandte Verfahren zu durchleuchten, wollen wir noch einmal auf unser kleines Beispiel von eben zurückkommen. Hat man nun Anfang und Ende der Fläche mit Hilfe des »Flächen-Code« festgelegt, kann man sich nun ans Werk machen, die Koordinaten in den Speicher zu kodieren. Bei dem »Koordinaten-Code«-Befehl muß man dann selbstverständlich die Position innerhalb des Eckpunkte-Arrays und die 3 Koordinaten angeben. Die Position des ersten Eckpunktes (»Q«) unserer Beispielfläche ist 340. Wollen wir einen Punkt mit den Koordinaten x1=12.4, y1=-30.0 und z1=5.6 im Array ablegen, ist die Befehlsfolge SYS 39718,240,12.4,-30.0,5.6 notwendig. Mit den weiteren Punkten der Fläche verfährt man analog und erhöht nur die Positionsangabe »Q« bei jedem Punkt, bis man bei 243 angelangt ist. So schwierig das vielleicht klingen mag, ist es doch der beste Weg, um möglichst große Datenmengen schnell und einfach verwalten zu können.

6. »Koord.-Decode«: Diese Routine hat die Funktion, Eckpunktkoordinaten wieder zu dekodieren. Der Computer benötigt dazu wieder die Position des entsprechenden Eckpunktes »Q«. Die Koordinatenkomponenten x1, y1, und z1 kann man dann wieder bei unserem Beispiel mit SYS 40052, 340: X1= USR(1): Y1= USR(2): Z1=USR(3) auslesen. Diese Routine funktioniert prinzipiell genauso wie die Routine zur Kodierung:

A=(B-32768)/10

Mit dieser Methode gelingt es also, alle 3 Koordinatenkomponenten eines Punktes (X,Y,Z) in 6 Byte unterzubringen. Würde man sie als Floating-Point-Variable ablegen, so würden dadurch 15 Byte belegt !

7. »Circle«: Mit dieser Routine kann man die bereits in der Anleitung angesprochenen Hilfskreise einfügen. Nach dem SYS-Aufruf kann man mit dem Cursor den Mittelpunkt und anschließend einen Punkt auf der Kreislinie fixieren. Erst wenn der gestrichelte Kreis eingezeichnet ist, wird die Routine mit einem Rücksprung ins Basic verlassen. Bei erneutem Aufruf wird der Kreis wieder invertiert und damit im Normalfall gelöscht. Möchten Sie zusätzlich einen weiteren Hilfskreis mit dieser Routine einzeichnen, ist vorher ein POKE40783,0 notwendig. Dieser POKE-Befehl findet auch in der Eingabeeinheit Anwendung, denn nach dem Löschen des Bildschirms darf nicht erneut der Kreis invertiert werden, sondern die Positionierung eines neuen Kreises muß ermöglicht werden.

8. »Umform«: Bei dieser Routine handelt es sich um eine der kompliziertesten und wichtigsten Routinen, so daß wir näher darauf eingehen möchten. Mit der Funktion läßt sich ein Objekt oder Teile davon drehen, dehnen, zerren und spiegeln. Es kann immer nur eine Operation auf einmal durchgeführt werden, was aber nicht unbedingt einen Nachteil darstellt, da dies durch das Konzept der Eingabe prädestiniert ist. Außerdem trägt dieses Verfahren erheblich zur Übersicht bei. Beginnen wir mit dem Parameter »MO«. Dieser Parameter gibt die Art der Verformung an. Anders als bei der Eingabe in »Giga-CAD« entspricht hier »MO« der Anordnung der Grafiksymbole so:

7   9   8
4   6   5
1   3   2

Die nächste Variable von umfassender Bedeutung ist »ZN«. Sie ermöglicht es, wahlweise das ganze Gebilde oder nur bestimmte Teile umzuformen:

ZN = 0 :  das gesamte Objekt
ZN = 1 :  nur die Fläche der Nummer »DG«
ZN = 2 :  alles außer der Fläche »DG«
ZN = 3 :  nur das Makro der Nummer »DG«
ZN = 4 :  alles bis auf das Makro »DG«

Die Variable »D« gibt die Position der letzten Fläche +1 an, ist also immer die letzte Stelle im Flächen-Array, an die ein Wert geschrieben wurde. Ob die Eingabe per Joystick oder über Tastatur erfolgt ist, wird der Routine durch das Flag »EI« übergeben. Soll eine Transformation mit dem Wert »W« durchgeführt werden, ist »EI« auf »1« zu setzen, andernfalls auf »0«. Bei Eingabe über Joystick gibt »J« die Joystick-Stellung an. Um die ganze Sache zu veranschaulichen, betrachten wir wieder ein kleines Beispiel: das Makro Nummer 5 soll um die Y-Achse gedreht werden. Die Eingabe erfolgte per Joystick, wobei die Stellung »1« ermittelt wurde. Es wurden 343 Flächen eingegeben. Dieser Fall erfordert den Befehl: SYS 22873,7,3,5,344,0,1,0

Der Wert von »W« ist hier bedeutungslos. Betrachtet man den obigen Fall unter der Voraussetztung, daß über Tastatur der Winkel 90 Grad eingegeben wurde, lautet der Befehl: SYS 22873,7,3,5,344,1,0,90

Hier spielt »J« keine Rolle.

9. »3D-Darstell.«: Diese Routine stellt ein Objekt oder einen Teil dessen auf Bildschirm »BS« im Zeichenmodus »ZM« dar. Die Variablen »ZN« und »DG« haben die gleiche Bedeutung wie bei »Umform«.

10. »Objekt Load«: Mit Hilfe dieser Funktion kann man ein Objekt von Diskette laden. Wichtig sind dafür zunächst einmal die Variablen »V« und »D«. Die Variable »V« gibt die letzte Position im Koordinaten-Array an, in die Daten abgelegt wurden. Um ein Objekt zu laden, müssen Sie erst den Floppy-Kanal mit:

OPEN2,8,2, "Name,S,R" öffnen. Ist das erledigt, muß der Befehl

SYS 22541,D,V eingegeben werden. Anschließend brauchen Sie nur noch ein

CLOSE2:SYS40206,V+1,D,0,0 eingeben und schon befindet sich das Objekt im Speicher. Am Bildschirm freilich wird es erst sichtbar, wenn man eine der beiden Darstellungsroutinen aufruft.

11. »Objekt Save«: Um ein Objekt zu speichern, muß man folgende Befehle eingeben:

OPEN2,8,2, "Name,S,W":SYS22520,D,V:CLOSE2

12. »Line-Test«: Dieser Befehl ist für die Schattierungsroutine von großer Wichtigkeit. Ausgegangen wird von folgender Problemstellung: Zu testen ist, ob eine vorgegebene Linie von einer bestimmten anderen, diesmal horizontalen Linie geschnitten wird. Ist dies der Fall, so ist von Interesse, zwischen welchen X-Bildschirmkoordinaten der Schnitt verläuft. Die einfachste und schnellste Methode ist sicherlich, einfach im Speicher das Zeichnen einer Linie mit einem schnellen Line-Algorithmus zu simulieren. Daraufhin braucht sich der Computer nur gegebenenfalls den ersten Wert mit dieser Y-Koordinate und den letzten Wert der fiktiven Linie merken. Und genau das erledigt diese Routine. Die Variablen X1, Y1 und X2, Y2 definieren die Linie. »YW« ist der Y-Wert der horizontalen Schnittlinie. Anfang (»AX«) und Ende (»EX«) des Schnittes werden folgendermaßen ausgelesen:

AX= PEEK (862) +256 * PEEK (863) :EX= PEEK (864) +256 * PEEK (865)

13. »Fl-Darstellung«: Mit dieser Routine kann das ganze Objekt als Drahtmodell, optional auch mit Fluchtpunkt dargestellt werden. Das Flag »FL« (»0« oder »1«) gibt an, ob der Fluchtpunkt-Modus ein- oder ausgeschaltet ist. Die Variablen A1, A2 und A3 geben dann gegebenenfalls die Koordinaten des Fluchtpunktes an. Das Flag »RI« muß bei Darstellung in 10facher Größe auf 1 gesetzt sein, da es die Grafik um 90 Grad kippt. »GR« gibt die Größe an. Bei 4- und 10facher Auflösung muß »GR« »2« sein. Die einzelnen Streifen werden dann erzeugt, indem man den Wert von »FK« immer um »200« erhöht. Bei 4facher Auflösung wird dabei bei »0« gestartet, bei 10-facher Auflösung bei »-300«. Bei allen anderen Größen muß »FK« »0« sein. Steht einem der Sinn nach Viertelbildern, ist für »GR« der Wert »0.5« einzusetzen. Bei Darstellung in normaler Größe muß jedoch »GR« »1« sein und »FK« und »RI« müssen auf »0« gesetzt werden. Die Variablen »H«, »F1« und »F2« sind beim »Zoomen« von Bedeutung. »H« gibt den Vergrößerungsfaktor an und »F1« und »F2« jeweils die beiden Verschiebungssummanden in X- und Y-Richtung. »BS« ist die Nummer des Bildschirms.

14. »Hardcopy«: Bei der Programmierung der Hardcopy-Routine war uns oberstes Prinzip, diesen Programmteil so zu gestalten, daß er möglichst viele Drucker unterstützt. Aus diesem Grund wurde der Programmteil einfach so konzipiert, daß mit der Sekundäradresse 4 einfach 320 oder 640 Spalten einer Grafikzeile gesendet werden. Auf den Ausdruck dieser Spalten kann so jeder seine Drucker entsprechend vorbereiten. Im Regelfall sollte man dazu zuerst den erforderlichen Zeilenabstand einstellen. Ist das erledigt, muß nur noch die Anzahl der zu druckenden Spalten eingegeben werden. Die Variable »Z« gibt die auszugebende Zeile an. Folglich ist für »Z« immer ein Wert zwischen »0« und »24« zu wählen. Das nächste Flag gibt an, ob jede Zeile (»0«) oder nur jede zweite Zeile (»1«) ausgegeben werden soll. Wie bereits erwähnt, wird bei doppelter Dichte jeweils jede zweite Zeile und anschließend die ausgelassenen Zeilen um einen halben Punkt nach unten versetzt ausgedruckt. Ob jetzt bei der ersten Zeile beginnend jede zweite Zeile (»0«) oder die ausgelassenen Zeilen (»1«) ausgegeben werden sollen, wird durch das Flag »A« festgelegt. Das schließlich letzte Flag »G« gibt die Größe an. Hat »G« den Wert »1«, so werden beide Grafikbildschirme nebeneinander, also mit insgesamt 640 Spalten, ausgedruckt. Diese Informationen sind in erster Linie für diejenigen interessant, die mit dem Programm »CAD.HARDCOPY« keine befriedigenden Ergebnisse erzielen konnten. Vielleicht gelingt es Ihnen mit diesen Hinweisen, sich eine eigene Routine zusammenzubasteln, um Ihre Werke zu Papier zu bringen.

Ausgetüftelte Schattierungsroutine

Für viele Leser dürfte wohl besonders das Konzept der Schattierungsroutine von Interesse sein. Denn schließlich handelt es sich hier um den Kernteil des Programms. Dafür, daß die Tiefe jedes einzelnen Punktes in Bezug auf das Gesamtgebilde berechnet und überprüft werden muß, ist die Schattierungsroutine extrem schnell.

Alle Gebilde werden, wie bereits oft erwähnt, als eine Ansammlung einzelner Flächen vom Computer verwaltet. Häufig definieren ähnliche 3D-Grafik-Programme nur die Kanten der Gebilde, was beim Ausblenden von verdeckten Linien Schwierigkeiten bereitet. Die in »Giga-CAD« angewandte Methode unterscheidet sich von vielen anderen gleicher Art, denn die Zahl der Eckpunkte ist nicht auf drei beschränkt. Selbstverständlich kann man bei jenen Routinen eine Fläche mit mehr als drei Eckpunkten aus mehreren Dreiecken zusammenflicken. Damit wird die ganze Behandlung und Eingabe komplizierter und oft auch langsamer. Prinzipiell arbeiten fast alle Schattierungs- und Hidden-Line-Routinen nach dem gleichen Schema. Zuerst werden die Winkel zwischen allen Flächen und dem Vektor, der die Lichtquelle beschreibt, berechnet und in einem Array abgelegt. Im nächsten Schritt werden die Flächen in der Reihe ihrer Sichtbarkeit geordnet und in dieser Reihenfolge auf den Bildschirm gebracht. Durch die Reihenfolge der Sichtbarkeit treten die ersten Probleme auf. Welches Kriterium soll man denn nehmen? Bei genauerer Betrachtung stellt man bald fest, daß solche Sichtbarkeitsentscheidungen, die für das menschliche Auge ganz selbstverständlich sind, den Computer vor kaum lösbare Aufgaben stellen. Freilich sind findige Köpfe schon auf die verschiedensten Möglichkeiten gestoßen, aber fast alle müssen bei besonders komplizierten Objekten passen. Ein besonders beliebtes und einfaches Sortierkriterium ist die Länge des »Normalenvektors«, was aber leider nicht immer zufriedenstellende Ergebnisse liefert. Die nächste Schwierigkeit dieses Verfahrens liegt darin, daß einzelne Flächen nicht immer einfach nacheinander auf den Bildschirm gezeichnet werden dürfen. Man stelle sich doch nur einmal zwei Flächen vor, die sich gegenseitig überlappen, und schon funktioniert das herkömmliche Verfahren nicht mehr.

Der nächste, für uns schon ganz brauchbare Trick ist eigentlich ganz naheliegend. Man sortiert die Flächen gar nicht erst und zeichnet sie einfach in beliebiger Reihenfolge auf den Bildschirm. Dabei berechnet man von jedem gezeichneten Punkt die Tiefe und legt diesen Wert im Speicher ab. Die Tiefe jedes weiteren Punktes, der an derselben Stelle gesetzt werden soll, wird mit dem abgelegten Wert verglichen und nur dann gezeichnet, wenn er davor liegt. Doch wer denkt, das Problem wäre damit schon gelöst, der hat sich zu früh gefreut. Denn wenn man für die Tiefe jedes Bildpunktes nur ein Byte reserviert, würde der Speicherplatz des C 64 nicht ausreichen. Somit können wir auch diese Idee wieder verwerfen.

Dennoch sind wir des Rätsels Lösung schon näher. Man braucht das Bild nur einfach zeilenweise aufzubauen, und schon ist pro Grafikspalte nur noch ein Tiefenwert erforderlich. Im folgenden Flußdiagramm wird die Schattierungsroutine sehr ausführlich erklärt, um sie auch Besitzern anderer Computer zugänglich zu machen. Der eine oder andere kann daraus sicherlich Anregungen zur Lösung eigener Hidden-Line-Probleme schöpfen.

Die Hauptroutine ist in Assembler geschrieben, aber zuerst müssen noch ein paar Vorbereitungen getroffen werden.

Wie bereits angesprochen, muß zuerst der Winkel zwischen Normalenvektor der Fläche und Lichtquellenvektor berechnet werden. Hierbei muß man natürlich den kleinen Sprung vom Punkt zum Ortsvektor machen, was aber in der Mathematik nur Definitionssache ist. Zunächst einmal soll geklärt werden, wie man die Winkel zweier Vektoren berechnet. Hierzu wählt man folgende Formel, die sich aus der Definition des Skalarprodukts ergibt.

u⃗ und v⃗ seien die Vektoren, φ der Winkel zwischen u⃗ und v⃗:

u⃗ ∘ v⃗ = |u⃗||v⃗|*cosφ

\[=> \cos\varphi = \frac{\vec{u} \circ \vec{v}}{|\vec{u}|*|\vec{v}|}\]

Das Skalarprodukt »∘« ist im IR3 folgendermaßen definiert:

\[\vec{u} \circ \vec{v} = \begin{pmatrix} u1 \\ u2 \\ u3 \end{pmatrix} \circ \begin{pmatrix} v1 \\ v2 \\ v3 \end{pmatrix} = u1*v1+u2*v2+u3*v3\]

In unserem Fall interessiert nicht der Winkel zwischen zwei Vektoren, sondern zwischen der Ebene und dem Vektor. Nun nimmt man den Normalenvektor zu Hilfe, der auf der Ebene senkrecht steht und somit mit dieser einen Winkel von 90 Grad bildet. Der Winkel zwischen Normal- und Lichtquellenvektor ist also 90 Grad minus dem gesuchten Winkel. Befassen wir uns mit der Berechnung des Normalenvektors. Dazu benötigt man drei linear unabhängige Vektoren, die durch drei Eckpunkte der gegebenen Fläche festgelegt werden.

E: X⃗ = A⃗ + k*u⃗ + l*v⃗

g: X⃗ = B⃗ + r*w⃗

Man verschiebt nun die Ebene (durch Subtraktion des Vektors A⃗) in den Ursprung und erhält eine Ebene, die durch die Vektoren u⃗ und v⃗ aufgespannt wird. Der Normalenvektor läßt sich als Vektorprodukt von u⃗ und v⃗ berechnen.

\[\vec{u} \times \vec{v} = \begin{pmatrix} u1 \\ u2 \\ u3 \end{pmatrix} \times \begin{pmatrix} v1 \\ v2 \\ v3 \end{pmatrix} = \begin{pmatrix} \det\begin{pmatrix} u2 & v2 \\ u3 & v3 \end{pmatrix} \\ -\det\begin{pmatrix} u1 & v1 \\ u3 & v3 \end{pmatrix} \\ \det\begin{pmatrix} u1 & v1 \\ u2 & v2 \end{pmatrix} \end{pmatrix}\]

Die jeweilige Koordinate berechnet sich aus der Determinanten der Restkoordinaten. Der zweiten Determinante wird ein Minus-Zeichen vorangestellt. Den so berechneten Vektor braucht man nun nur noch in die bereits hergeleitete Formel einzusetzen:

\[\cos\varphi = \frac{(\vec{u} \times \vec{v}) \circ \vec{w}}{|(\vec{u} \times \vec{v})|*|\vec{w}|}\]

Schließlich bleibt nur noch zu klären, wie man den Betrag eines Vektors ermittelt. Dazu verwenden wir folgende Formel:

\[|\vec{u}| = \left|\begin{pmatrix} u1 \\ u2 \\ u3 \end{pmatrix}\right| = \sqrt{u1^2 + u2^2 + u3^2}\]

In der Schattierungsroutine wird der Cosinus dieses Winkels auf einen Wert zwischen 0 und 192 umgerechnet und als 1-Byte-Zahl im Speicher abgelegt. Der ganze Prozeß wird mit allen Flächen wiederholt.

Um möglichst kurze Leerlaufzeiten zu erzielen, werden anschließend die absoluten Extrema des Objektes und die relativen Extrema jeder Fläche berechnet. Damit erfolgen Berechnungen nur im relevanten Bereich. Auch diese Werte werden wieder in einem Array abgelegt. Ferner rechnet der Computer die 3D-Koordinaten der Eckpunkte in Bildschirmkoordinaten um und kodiert sie in dieser Form in den Speicher. Nun kann endlich mit der Schattierung begonnen werden. Zu übergeben sind folgende Variablen:

EC: Minimum (Zeile, ab der schattiert wird)
ED: Maximum (Zeile, bis zu der schattiert wird)
SL: Flag für Schnittlinien an/aus
WQ: Flag für Schattierung an/aus
MC: Flag für Multi-Color-Modus an/aus
WM: Flag für Doppelmodus HiRes Multi-Color an/aus
B: Flag für Doppelmodus Schattierung und Hidden-Line an/aus
SE: Flag für Schnittebene an/aus
KE: Tiefe der Schnittebene
DF: Anzahl der Flächen
GR: Größe der Darstellung (0,5/1/ oder 2)
RI: Flag für Kippen des Objektes in Querformat
BS: Bildschirm (1 oder 2)

Alles weitere erklärt sich aus dem Flußdiagramm, da es besonders ausführlich und übersichtlich gestaltet wurde.

Nun wollen wir noch zu guter Letzt die einzelnen Komponenten der eigentlichen Schattierungsroutine unter die Lupe nehmen. Dadurch soll das Flußdiagramm noch weiter veranschaulicht werden.

Da ja das Bild zeilenweise aufgebaut wird, startet die Routine mit einer Schleife (Flußdiagramm 1) vom Minimum ED und behandelt so jede Grafikspalte, in der gezeichnet werden muß. Jeder gesetzte Punkt ist auf seine räumliche Tiefe hin zu überprüfen. Daher muß zwangsläufig zuerst das Array mit den Werten für jede Grafikspalte auf einen Extremwert (-8000) gesetzt werden. Dadurch ist gewährleistet, daß der erste Punkt in einer bestimmten Grafikspalte nicht übergangen und die Tiefe an der entsprechenden Stelle gespeichert wird. In einer weiteren Schleife werden jeweils alle Flächen des Gebildes bei jeder Grafikspalte erneut durchlaufen. Das mag vielleicht sehr umständlich anmuten, ist aber weitaus schneller als alle anderen untersuchten Möglichkeiten. Nun wird durch Vergleiche der Grafikzeile »LA« mit den im Array abgelegten Extrema einer Fläche geprüft, ob die Zeile innerhalb dieser Grenzen liegt. Wird also die Fläche nicht von dieser Grafikzeile geschnitten, wird sie übergangen und mit der nächsten Fläche begonnen. Damit lassen sich die Leerlaufzeiten auf ein Minimum reduzieren. Die nächste Schleife ermittelt von allen Randlinien der aktuellen Fläche Anfangs- und Endkoordinaten. Diese Koordinaten werden am Punkt »1« einem Unterprogramm (Flußdiagramm 2) übergeben. Dieses hat die Aufgabe, die Schnittpunkte der Fläche mit der Zeile »LA« zu ermitteln. Beim »Line-Test« geschieht das mit Hilfe eines schnellen Integer-Line-Algorithmus, der sich Anfang und Ende des Schnittes merkt. Die Methode ist wesentlich schneller als eine aufwendige Floatingpoint-Berechnung der Schnittpunkte. In einem weiteren Unterprogramm (Flußdiagramm 3) werden die Fälle berücksichtigt, bei denen der Schnittpunkt außerhalb des Bildschirms liegt. Ob diese Schnittpunkte eingezeichnet werden müssen, entscheidet die Verbindungsvorschrift. Um die Sichtbarkeit der gezeichneten Punkte zu untersuchen, wird mit Hilfe des Strahlensatzes die Tiefe der Schnittpunkte über die Eckpunkte der Linie berechnet. Nun werden gegebenenfalls die Schnittpunkte eingezeichnet. Dazu wird in ein weiteres Unterprogramm verzweigt. Da einige Eckpunkte beim Line-Test zu doppelten Schnittpunkten führen, werden die überflüssigen Werte wieder herausgefiltert.

Flußdiagramm der Schattierungsroutine: Hauptschleife von »Schattierungsroutine« über die Flächen- und Eckpunktschleifen bis »Ende«
Flußdiagramm 1. Hauptschleife. Hier werden die Flächen jeder Grafikzeile überprüft.
Flußdiagramm »LINE-TEST«: Berechnung des Schnittpunkts einer Linie mit der Grafikzeile LA, von Anschluß 1 zu den Anschlüssen 2, 3, 6, 8, 9 und 10
Flußdiagramm 2. Hier wird der Schnittpunkt einer Randlinie mit einer Bildschirmzeile berechnet.
Flußdiagramm: von Anschluß 8 über PC = INT (YA):PD = INT (YB) und die Vergleiche mit LA zu den Anschlüssen 10 und 9
Flußdiagramm 3. Eventuelle Schnittpunkte außerhalb des Bildschirms müssen ermittelt werden.

Wurde der »Line-Test« mit allen Randlinien durchgeführt und ist die Anzahl der Schnittpunkte ausreichend, so verzweigt das Programm über die Verbindungsstelle »11« zu einer weiteren Routine (Flußdiagramm 4). Hier werden zuerst die Schnittpunkte der Größe nach geordnet und dann mit jeweils der ersten und zweiten, der dritten und vierten Linie im Schattierungsraster verbunden. Deshalb müssen in einer geeigneten Schleife (Flußdiagramm 5) wieder die Tiefen sämtlicher Punkte dieser Linie berechnet werden. Liegt ein Punkt vor einem bereits in dieser Grafikspalte gezeichneten Punkt, wird in die Routine verzweigt, die nun endlich diesen Punkt setzen soll. Paradoxerweise ist diese Routine (Flußdiagramm 6) komplizierter als alle anderen Unterprogramme. Das kommt daher, daß alle Spezial- und Sonderfälle wie Schnittebene, Doppelmodi und schattierte oder einfache Hidden-Line-Darstellung berücksichtigt werden müssen. Gegebenenfalls wird dann der zuvor berechnete Winkel der Fläche aus dem Array geholt und damit das Schattierungsraster berechnet. Die gleiche Routine wird auch benutzt, um alle Randlinien einer Fläche einzuzeichnen. Die ganze Prozedur wird pro Zeile mit jeder Fläche wiederholt. Ist der Computer schließlich mit der letzten Grafikzeile fertig, hat man eine Grafik, deren unsichtbare Linien und Flächen wirklich vollkommen realitätsnah ausgeblendet sind.

Flußdiagramm: von Anschluß 4 über MINIMUM MI = 8000 und die Z1/Z2-Schleifen zu den Anschlüssen 12, 13 und 5
Flußdiagramm 4. Die Schnittpunkte werden sortiert und durch Linien im Schattierungsraster verbunden.
Flußdiagramm: von Anschluß 6 über Steigung und Tiefe des Punktes in Spalte S zu den Anschlüssen 7 und 13
Flußdiagramm 5. Die Routine verbindet die Schnittpunkte miteinander
Flußdiagramm: von Anschluß 11 über die Tiefenprüfung T(SR), Bit-Nummer BI/BO und den Flächenwinkel FA bis zur Abfrage GR = 2 Flußdiagramm (Fortsetzung): von BS = INT (SR/320) + 1 über SYS PL, SR, LA, ZM, BS und SYS 22114 bis SYS 50447 und Anschluß 12
Flußdiagramm 6. Unter Beachtung der Schattierungsparameter wird ein Punkt gesetzt.

Mit den Hintergrundinformationen, die wir Ihnen hier mit auf den Weg gegeben haben, wünschen wir Ihnen viel Erfolg bei der Verwirklichung Ihrer eigenen 3D-Grafik-Ideen.

(S. Vilsmeier/S. Lippstreu/ah)
|
5 rem  **********************************
10 rem *                                *
15 rem *   giga - cad    graphic-system *
20 rem *                                *
25 rem * ------------------------------ *
30 rem *            'loader'            *
35 rem * ------------------------------ *
40 rem *       written in 1986 by       *
45 rem *        stefan vilsmeier &      *
50 rem *        stefan lippstreu        *
55 rem **********************************
60 :
65 :
70 a=peek(836)+1:poke836,a:ifa=1goto120
75 ifa=1thenload"hrg.cad.obj",8,1
80 ifa=2thensys49152:gosub145:load"hires1.cad.obj",8,1
85 ifa=3thensys50181,11,15,1:load"hires2.cad.obj",8,1
90 ifa=4thenload"hires3.cad.obj",8,1
95 ifa=5thensys25919:load"crsr1",8,1
100 ifa=6thenload"crsr2",8,1
105 poke836,0
110 poke646,peek(53281):print"{home}load"chr$(34)"cad.main"chr$(34)",8"
115 print"{down}{down}{down}{down}run:":poke631,19:poke632,13:poke633,13:poke198,3:new
120 poke53280,15:poke53281,15:poke646,11:poke53263,0:printchr$(14)chr$(8)
125 poke55,0:poke56,85:clr:a=1
130 print"{clr}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}        {CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}"
135 print"        Giga-CAD V1.0 loading..."
140 print"        {CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}":goto75
145 b=49153:forx=b+900tob+926:pokex,0:next:pokeb+902,1
150 pokeb+919,255:return
  5 REM  ********************************** 
 10 REM *                                * 
 15 REM *   GIGA - CAD    GRAPHIC-SYSTEM * 
 20 REM *                                * 
 25 REM * ------------------------------ * 
 30 REM *            'LOADER'            * 
 35 REM * ------------------------------ * 
 40 REM *       WRITTEN IN 1986 BY       * 
 45 REM *        STEFAN VILSMEIER &      * 
 50 REM *        STEFAN LIPPSTREU        * 
 55 REM ********************************** 
 60 : 
 65 : 
 70 A=PEEK (836)+1:POKE 836,A:IF A=1GOTO 120 
 75 IF A=1 THENLOAD "HRG.CAD.OBJ",8,1 
 80 IF A=2 THENSYS 49152:GOSUB 145:LOAD "HIRES1.CAD.OBJ",8,1 
 85 IF A=3 THENSYS 50181,11,15,1:LOAD "HIRES2.CAD.OBJ",8,1 
 90 IF A=4 THENLOAD "HIRES3.CAD.OBJ",8,1 
 95 IF A=5 THENSYS 25919:LOAD "CRSR1",8,1 
 100 IF A=6 THENLOAD "CRSR2",8,1 
 105 POKE 836,0 
 110 POKE 646,PEEK (53281):PRINT"{HOME}LOAD"CHR$ (34)"CAD.MAIN"CHR$ (34)",8" 
 115 PRINT"{4DOWN}RUN:":POKE 631,19:POKE 632,13:POKE 633,13:POKE 198,3:NEW 
 120 POKE 53280,15:POKE 53281,15:POKE 646,11:POKE 53263,0:PRINTCHR$ (14)CHR$ (8) 
 125 POKE 55,0:POKE 56,85:CLR :A=1 
 130 PRINT"{CLR,11DOWN,8SPACE}YYYYYYYYYYYYYYYYYYYYYYYY" 
 135 PRINT"{8SPACE}GIGA-CAD V1.0 LOADING..." 
 140 PRINT"{8SPACE}PPPPPPPPPPPPPPPPPPPPPPPP":GOTO 75 
 145 B=49153:FOR X=B+900 TOB+926:POKE X,0:NEXT :POKE B+902,1 
 150 POKE B+919,255:RETURN 
Listing 1. Lader zu »Giga-CAD«
|
5 rem  **********************************
10 rem *   giga-cad     graphic-system  *
15 rem *         'cad.main'             *
20 rem * by s. vilsmeier & s. lippstreu *
25 rem **********************************
30 :
35 :
40 a=peek(836)+1:poke836,a:ifa=1thenpoke55,0:poke56,80:clr:a=1
45 ifa=1thenload"hires4.cad.obj",8,1
50 ifa=2thenload"hires6.cad.obj",8,1
55 sys50707,1:poke53280,14:dimb$(63):ifd=0thengosub3060:poke808,237
60 close1:open1,8,15,"u9":close1:sys37021
65 :
70 :
75 rem **********************************
80 rem *   variablen / sys-adresssen    *
85 rem **********************************
90 :
95 n=50181:co=50292:e=50707:g=50859:li=51049:jo=51627:h2=1
100 re=51800:t2=52490:mu=52517:cp=36878:j2=39247:d1=40052:c2=40206
105 l4=21764:um=22873:ml=21839
110 fr=51480:uf=51507:f(1)=11:f(2)=12:f(3)=0:f(4)=15
115 ifpeek(53263)=1andl=1thenb=1:ri=0:gosub2475:sysco,2,0:poke53263,0:goto125
120 syse,1:sysn,11,15,2:ri=0:l=1:ifd<>1thenb=2:gosub2875
125 sysg,160,190,319,199,0,2:syst2,2:ifd=1thensys25919:v=0:k=0
130 syscp,2:sysre,0,0,319,199,1,2:sysco,1,0
135 poke192,0:close1:open1,8,15,"xr+":print#1,"u9":close1:goto525
140 :
145 :
150 rem *********************************
155 rem *   manipulationen bei filmen   *
160 rem *********************************
165 :
170 ifa=1anddr<>0thendr=0:goto420
175 ifa=3anddl<>0thendl=0:goto420
180 ifa=2anddu<>0thendu=0:goto420
185 input"{clr}{down}{down}{rght}{rght}{rght}Drehung um X,Y, oder Z-Achse";a$:c=asc(a$)-87
190 ifa=1thendr=c:du=0:goto410
195 ifa=3thendl=c:goto410
200 ifa=2thendu=c:dr=0:goto410
205 print"{clr}{down}{down}{rght}{rght}{rght}Summanden des Fluchtpunktes  5,15,5";
210 input"{home}{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";kx,ky,kz:goto410
215 print"{clr}{down}{down}{rght}{rght}{rght}Verschiebungsfaktor     5.5"
220 input"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";kf::kf=-kf:goto410
225 print"{clr}{down}{down}{rght}{rght}{rght}Neigung der Z-Achse    -30"
230 input"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";zv::goto410
235 print"{clr}{down}{down}{rght}{rght}{rght}Vergroesserungsfaktor   3"
240 input"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";vf:vf=vf*100:goto410
245 gosub1015:ifa$<>"j"goto410
250 a=49153:pokea+940,dr:pokea+941,dl:w=kx:i=942:gosub2815
255 w=ky:gosub2815:w=kz:gosub2815
260 w=vf:gosub2815
265 w=kf:gosub2815:l=.5:pokea+952,du:goto2400
270 dr=0:dl=0:kx=0:ky=0:kz=0:vf=0:kf=0:goto420
275 :
280 :
285 rem *********************************
290 rem *   menue:  zusaetze            *
295 rem *********************************
300 :
305 gosub615:print" {rvon}              Zusaetze                {CTRL-O}"
310 gosub620
315 print"{home}{down}{down}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}A. 4-fache Aufloesung"
320 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}B. 10-fache Aufloesung"
325 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}C. Film erstellen"
330 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}D. Film ergaenzen"
335 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}E. Rahmen zeichen an ";:ifrn=0thenprint"{left}{left}{left}aus"
340 gosub1020
345 gosub635:ifa$="_"thensyse,1:goto525
350 ifa<1ora>5goto345
355 onagoto360,370,410,480,490
360 gosub1015:ifa$<>"j"goto305
365 l=2:ri=0:wm=0:bs=0:mc=0:goto2395
370 gosub1015:ifa$<>"j"goto305
375 l=2:ri=1:wm=0:bs=0:mc=0:goto2395
380 :
385 :
390 rem *********************************
395 rem *     menue:  film              *
400 rem *********************************
405 :
410 gosub615:print" {rvon}           Film erstellen             {CTRL-O}"
415 gosub620
420 print"{home}{down}{down}{down}{down}{rght}{rght}{rght}{rght}A. Drehung des Koerpers an ";:ifdr=0thenprint"{left}{left}{left}aus";
425 print:print"{down}{rght}{rght}{rght}{rght}B. Drehung um den Koerper an ";:ifdu=0thenprint"{left}{left}{left}aus";
430 print:print"{down}{rght}{rght}{rght}{rght}C. Drehung der Lichtquelle an ";:ifdl=0thenprint"{left}{left}{left}aus";
435 print:print"{down}{rght}{rght}{rght}{rght}D. Verschieben des Fluchtpunktes"
440 print"{down}{rght}{rght}{rght}{rght}E. Verschieben der Schnittebene"
445 print"{down}{rght}{rght}{rght}{rght}F. Kippen der Z-Achse"
450 print"{down}{rght}{rght}{rght}{rght}G. Aendern der Groesse"
455 print"{down}{rght}{rght}{rght}{rght}H. Berechnung"
460 print"{down}{rght}{rght}{rght}{rght}I. Neue Parameter"
465 gosub635:ifa$="_"goto305
470 ifa<1ora>9goto345
475 onagoto170,170,170,205,215,225,235,245,270
480 gosub1015:ifa$<>"j"goto305
485 l=3:ri=0:wm=0:goto2395
490 rn=1-rn:goto315
495 :
500 :
505 rem *********************************
510 rem *  joystick-abfrage hauptmenue  *
515 rem *********************************
520 :
525 o=160:p=10:poke53280,14:ds=0:fi=0
530 gosub1030:ifpeek(631)<>0goto530
535 ifp>9goto530
540 ifo<57goto2970
545 ifo>97ando<126goto1760
550 ifo>288goto1105
555 ifo>126ando<165goto1360
560 ifd=1goto530
565 ifo>57ando<97goto2230
570 ifo>165ando<233goto2395
575 ifo>234ando<287goto305
580 :
585 :
590 rem *********************************
595 rem *     diverse unterprogramme    *
600 rem *********************************
605 :
610 goto530
615 print"{clr}{gry1} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}":return
620 fori=1to22:print" {CBM-G}                                    {CBM-M}":next
625 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{$a0}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{home}":return
630 syse,0:printchr$(14)chr$(8)"{home}{gry1}";:return
635 geta$:ifa$=""goto635
640 a=asc(a$)-64:return
645 sysl4,0,0,0,199,1,1:sysl4,319,0,319,199,1,2:iffi=1thensysl4,0,0,319,0,1,3
650 return
655 :
660 :
665 rem *********************************
670 rem *        disk - status          *
675 rem *********************************
680 :
685 close1
690 open1,8,15:input#1,f,f$,t,s:iff=0thenreturn
695 gosub1020:print:print"{down}{down}{rght}{rght}{rght}{rvon}Diskettenfehler :"
700 print"{down}{down}{rght}{rght}"f","f$","t","s:ifds=0andfithenreturn
705 close2:print#1,"u9":close1:ifds=0thengosub635:return
710 print"{down}{down}{rght}{rght}{rght}Noch ein Versuch  (j/n) ?"
715 gosub635:ifa$="n"thenf=99:print"{clr}":return
720 ifa$="j"thenf=1:print"{clr}":return
725 goto715
730 :
735 :
740 rem *********************************
745 rem *    rahmen-blinken bei 'zoom'  *
750 rem *********************************
755 :
760 sysl4,r,q,o-1,q,2,1:sysl4,o,q,o,p-1,2,1
765 sysl4,o,p,r+1,p,2,1:sysl4,r,p,r,q+1,2,1:pm=1-pm:return
770 w=w+1:ifj1<>jthenw=1
775 ifw>20thenw=20
780 j1=j:p=p+w*(j=1)-w/m*(j=3)-w*(j=5)+w/m*(j=7)
785 o=o+w*m*(j=1)-w*(j=3)-w*m*(j=5)+w*(j=7):return
790 :
795 :
800 rem *********************************
805 rem *      angewaehltes symbol      *
810 rem *********************************
815 :
820 ifo<50thenr=3:rx=49:q1=1:goto835
825 ifo<100thenr=50:rx=99:q1=3:goto835
830 r=100:rx=156:q1=2
835 ifp<135thenq=102:ry=134:q2=2:goto850
840 ifp<165thenq=135:ry=164:q2=1:goto850
845 q=165:ry=196:q2=0
850 c=q2*3+q1:return
855 sysg,r,q,rx,ry,2,b:return
860 :
865 :
870 rem *********************************
875 rem *    verformung per joystick    *
880 rem *********************************
885 :
890 ifbq=1andei=0thenbq=0:b=2:gosub855
895 sysjo:j=peek(859)
900 ifj=0goto895
905 ifj=128goto920
910 ifint(j/2)=j/2goto895
915 j=int(j/2)+1:return
920 b=2:gosub855:c=0:bq=1:return
925 :
930 :
935 rem *********************************
940 rem *   verformung ueber tastatur   *
945 rem *********************************
950 :
955 ifa<49ora>57thenc=0:return
960 a=a-48:xa=int((9-a)/3)*3:xb=a-int((a-1)/3)*3
965 xb=3+(xb<2)*2+(xb>2)*1:c=xa+xb:ei=1:gosub630:geta$
970 ifc>6theninput"{clr}{down}{down}{rght}{rght}{rght}Drehwinkel   90{left}{left}{left}{left}";w:return
975 ifc>3theninput"{clr}{down}{down}{rght}{rght}{rght}Verschiebungssummand   50{left}{left}{left}{left}";w:return
980 input"{clr}{down}{down}{rght}{rght}{rght}Verzerrrungsfaktor   1.5{left}{left}{left}{left}{left}";w:return
985 :
990 :
995 rem  ********************************
1000 rem *   diverse unterprogramme ii. *
1005 rem ********************************
1010 :
1015 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rvon} Sind Sie sicher ? {rvof}":gosub635:return
1020 ifpeek(53272)<>23thengosub630
1025 return
1030 sysj2,o,p,0:o=peek(2024)+256*peek(2025):p=peek(2026):return
1035 close1
1040 open2,8,2,n1$+left$(n$,10)+str$(fi*2+(b-2))+",p,w":gosub690:iff=0goto1055
1045 iff=99thenclose2:gosub3115:return
1050 close1:close2:open1,8,15,"s:"+n1$+left$(n$,10)+str$(fi*2+(b-2)):goto1035
1055 sys26068,b:close2:gosub3115:return
1060 ei=1:gosub630:geta$:input"{clr}{down}{down}{rght}{rght}{rght}Verzerrungsfaktor   1.5{left}{left}{left}{left}{left}";w
1065 sysre,2,101,157,197,0,1:sysum,1,0,1,d,1,0,w:sysum,2,0,1,d,1,0,w:return
1070 syse,0:goto2970:rem 'darstellen'
1075 :
1080 :
1085 rem ********************************
1090 rem *   darstellungs - 'modi'      *
1095 rem ********************************
1100 :
1105 yu=0:gosub615:print" {rvon}         Darstellungs - Modi          {CTRL-O}"
1110 gosub620
1115 print"{home}{down}{down}{down}{down}{rght}{rght}{rght}A. Fluchtpunktdarstellung an ";:iffl=0thenprint"{left}{left}{left}aus";
1120 print:print"{down}{rght}{rght}{rght}B. Zeichnen der Schnittlinien an ";
1125 ifsl=0thenprint"{left}{left}{left}aus";
1130 print:print"{down}{rght}{rght}{rght}C. Hidden-Line Modus an ";:ifhd=0thenprint"{left}{left}{left}aus";
1135 print:print"{down}{rght}{rght}{rght}D. Schattierungs-Modus an ";:ifwq=0thenprint"{left}{left}{left}aus";
1140 print:print"{down}{rght}{rght}{rght}E. Lichtquellen-Koordinaten"
1145 print"{down}{rght}{rght}{rght}F. Multicolour-Modus an ";:ifmc=0thenprint"{left}{left}{left}aus";
1150 print:print"{down}{rght}{rght}{rght}G. Doppelmodus Hires & Multi an ";
1155 ifwm=0thenprint"{left}{left}{left}aus";
1160 print:print"{down}{rght}{rght}{rght}H. Hidden-L. & Schattierung an ";:ifbs=0thenprint"{left}{left}{left}aus";
1165 print:print"{down}{rght}{rght}{rght}I. Schnittebene an ";:ifse=0thenprint"{left}{left}{left}aus";
1170 gosub1020
1175 gosub635:ifa$="_"thensyse,1:goto525
1180 ifa<1ora>9goto1175
1185 onagoto1195,1190,1215,1220,1225,1245,1250,1265,1255
1190 sl=1-sl:goto1115
1195 fl=1-fl:iffl=0goto1280
1200 print"{clr}{down}{down}{rght}{rght}{rght}Fluchtpunkt-Koordinaten:"
1205 print"{down}{rght}{rght}{rght}X,Y,Z   "str$(a1)","str$(a2)","str$(a3):yu=1
1210 input"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";a1,a2,a3:goto1280
1215 hd=1-hd:goto1305
1220 wq=1-wq:goto1310
1225 print"{clr}{down}{down}{rght}{rght}{rght}Koordinaten der Lichtquelle:"
1230 print"{down}{rght}{rght}{rght}X,Y,Z   "wx"{left},"wy"{left},"wz
1235 input"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";wx,wy,wz:ifwx=0andwy=0andwz=0goto1235
1240 goto1105
1245 mc=1-mc:goto1280
1250 wm=1-wm:goto1290
1255 se=1-se:ifsegoto1270
1260 goto1280
1265 bs=1-bs:goto1295
1270 yu=1:print"{clr}{down}{down}{rght}{rght}{rght}Tiefe der Schnittebene:"
1275 print"{down}{rght}{rght}{rght}Y   "str$(-ke):input"{up}{rght}{rght}{rght}{rght}{rght}";ke:ke=-ke:goto1280
1280 :
1285 ifmcthenwm=0:bs=0
1290 ifwmthenmc=0:bs=0
1295 ifbsthenmc=0:wm=0
1300 ifseormcorwmorbsthenwq=1:hd=1
1305 ifhd=0thenwq=0
1310 ifwq=0thenmc=0:wm=0:se=0:bs=0
1315 ifwqthenhd=1
1320 ifyugoto1105
1325 goto1115
1330 :
1335 :
1340 rem ********************************
1345 rem *    menue 'zoom'              *
1350 rem ********************************
1355 :
1360 sysg,127,0,165,9,2,1
1365 gosub615:print" {rvon}            Zoom - Menue              {CTRL-O}"
1370 gosub620
1375 print"{home}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}A. Zoomen des Objekts"
1380 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}B. Orginalgroesse"
1385 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}C. Optimaler Ausschnitt"
1390 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}D. Betrachten der Grafik"
1395 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}E. Zentrieren":gosub1020
1400 gosub635:ifa$="_"thensyse,1:sysg,127,0,165,9,2,1:goto525
1405 if(a<1ora>5)or(a<>4andd=1)goto1400
1410 onagoto1445,1550,1585,1640,1675
1415 :
1420 :
1425 rem ********************************
1430 rem *   'zoomen des objekts'       *
1435 rem ********************************
1440 :
1445 syse,1:o=160:p=100:m=8/5:pm=0
1450 gosub1030
1455 if(peek(631))=95goto1545
1460 sysjo:ifpeek(859)=128goto1460
1465 r=o:q=p
1470 gosub760:sysjo:j=peek(859):geta$:ifa$<>""goto1525
1475 ifj=0orj>128thenw=0:goto1470
1480 ifpmthengosub760
1485 ifj=128goto1505
1490 ifint(j/2)=j/2goto1470
1495 ifo<rtheno=r:p=q:w=0
1500 gosub770:goto1470
1505 ifr=ogoto1545
1510 h=320/(abs(r-o))*h:f1=r/h2+f1:f2=q/h2+f2:h2=h:ifpm=0thengosub760
1515 sysn,11,15,2:b=2:gosub2875:sysre,0,0,319,199,1,2
1520 sysg,160,190,318,198,0,2:syscp,2:syst2,2:sysco,1,0:goto525
1525 ifpmthengosub760
1530 ifa$="_"goto1545
1535 ifa$="l"goto1445
1540 goto1470
1545 sysg,127,0,165,9,2,1:goto525
1550 syse,1:f1=0:f2=0:h=1:h2=1:goto1515:rem 'orginalgroesse'
1555 :
1560 :
1565 rem ********************************
1570 rem *   'optimaler ausschnitt'     *
1575 rem ********************************
1580 :
1585 pm=0:ifh<>1thenpm=1
1590 syse,1:o=-8000:p=o:r=-o:q=-o:f1=0:f2=0:h=1:h2=1
1595 i=0:fora=1tov:sysd1,a:y1=usr(1):u=usr(2):z1=usr(3):gosub2910
1600 ifu>otheno=u
1605 ifz1>pthenp=z1
1610 ifu<rthenr=u
1615 ifz1<qthenq=z1
1620 nexta:r=r-1:q=q-1:o=o+1:p=p+1:m=8/5
1625 b1=abs(o-r):b2=abs(p-q)
1630 ifb1<b2*mthenfa=b2*m:o=o+abs(fa-b1)/2:r=r-abs(fa-b1)/2:goto1510
1635 ifb1>b2/mthenfa=b1/m:p=p+abs(fa-b2)/2:q=q-abs(fa-b2)/2:goto1510
1640 sysg,127,0,165,9,2,1:syse,2:b=2:goto2130:rem 'betrachten der grafik'
1645 :
1650 :
1655 rem ********************************
1660 rem *    'zentrieren'              *
1665 rem ********************************
1670 :
1675 syse,1:o=-8000:p=o:r=-o:q=r:qz=r:pz=p:f1=0:f2=0:h=1:h2=1
1680 i=0:fora=1tov:sysd1,a:u=usr(1):y1=usr(2):z1=usr(3)
1685 ifu>otheno=u
1690 ify1>pthenp=y1
1695 ifz1>pzthenpz=z1
1700 ifu<rthenr=u
1705 ify1<qthenq=y1
1710 ifz1<qzthenqz=z1
1715 nexta:fx=(r+o)/2:fy=(q+p)/2:fz=(qz+pz)/2
1720 sysum,4,0,0,d,1,0,fx:sysum,5,0,0,d,1,0,-fy:sysum,6,0,0,d,1,0,fz
1725 sysn,11,15,2:syse,1:goto115
1730 :
1735 :
1740 rem ********************************
1745 rem *       disk - menue           *
1750 rem ********************************
1755 :
1760 gosub615:print" {rvon}             Disk - Menue             {CTRL-O}"
1765 gosub620
1770 print"{home}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}A. Objekt laden"
1775 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}B. Objekt speichern"
1780 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}C. Diskettenkommando senden"
1785 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}D. Directory anzeigen"
1790 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}E. Grafik laden"
1795 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}F. Grafik speichern"
1800 gosub1020
1805 gosub635:ifa$="_"thensyse,1:goto525
1810 ifa<1ora>6goto1805
1815 onagoto1850,1925,2060,2000,2110,2165
1820 :
1825 :
1830 rem ********************************
1835 rem *      'objekt laden'          *
1840 rem ********************************
1845 :
1850 gosub615:gosub625:print" {rvon}             Objekt laden             {rvof}"
1855 input"{down}{down}{down}{rght}{rght}{rght}Objekt - Name    ";n$:ifn$="_"orn$=""goto1760
1860 open2,8,2,"ob."+n$+",s,r":gosub685:iff<>0goto1760
1865 h=1:l=1:f1=0:f2=0:fk=0:h2=1:v=0:d=1:k=0:sys25919
1870 input#2,d:input#2,v:input#2,k
1875 sys22541,d,v
1880 fori=1tok:input#2,b$(i):next
1885 sysc2,v+1,d,0,0
1890 close2:gosub685:gosub3115:syse,1:sysn,11,15,2:goto115
1895 :
1900 :
1905 rem ********************************
1910 rem *      'objekt speichern'      *
1915 rem ********************************
1920 :
1925 ifd=1goto1805
1930 gosub615:gosub625::print" {rvon}           Objekt speichern           {rvof}"
1935 input"{down}{down}{down}{rght}{rght}{rght}Objekt - Name    ";n$:ifn$="_"orn$=""goto1760
1940 open2,8,2,"ob."+n$+",s,w":gosub685:iff<>0goto1760
1945 print#2,d:print#2,v:print#2,k
1950 sys22520,d,v
1955 fori=1tok:print#2,b$(i):next
1960 close2:gosub685:gosub3115
1965 goto1760
1970 :
1975 :
1980 rem ********************************
1985 rem *   'directory anzeigen'       *
1990 rem ********************************
1995 :
2000 print"{clr}";:gosub615:print" {rvon}          Directory anzeigen          {rvof}"
2005 print:open2,8,0,"$0":sys26134:close2
2010 :close2
2015 close1:open1,8,15:input#1,f,f$,t,s:iff=0goto2025
2020 print"{home}{down}":gosub695:goto1760
2025 print#1,"u9":close1:gosub635:goto1760
2030 :
2035 :
2040 rem ********************************
2045 rem *  'diskettenkommando senden'  *
2050 rem ********************************
2055 :
2060 gosub615:gosub625:print" {rvon}      Diskettenkommando senden        {rvof}"
2065 poke631,34:poke198,1:n$="":input"{down}{down}{rght}{rght}{rght}Kommando ";n$:ifn$="_"goto1760
2070 close1:open1,8,15,n$:input#1,f,f$,t,s:print"{down}{down}{rght}{rght}{rght}{rvon} Diskettenstatus: "
2075 gosub700:goto1760
2080 :
2085 :
2090 rem ********************************
2095 rem *   'grafik laden'             *
2100 rem ********************************
2105 :
2110 gosub615:gosub625:print" {rvon}             Grafik laden             {rvof}"
2115 input"{down}{down}{down}{rght}{rght}{rght}Grafik - Name    ";n$:ifn$="_"orn$=""goto1760
2120 print"{clr}":open2,8,2,"pi."+n$+",p,r":gosub685:iff<>0goto1760
2125 sysn,11,15,2:syse,2:sys26101,2:close2:print#1,"u9":close1:b=2
2130 gosub2475:syse,1:goto525
2135 :
2140 :
2145 rem ********************************
2150 rem *    'grafik speichern'        *
2155 rem ********************************
2160 :
2165 gosub615:gosub625:print" {rvon}           Grafik speichern           {rvof}"
2170 cr=a:input"{down}{down}{down}{rght}{rght}{rght}Grafik - Name    ";n$:ifn$="_"orn$=""goto2190
2175 ifcr=6theninput"{down}{down}{rght}{rght}{rght}Grafik - Bildschirm # ";b
2180 open2,8,2,"pi."+n$+",p,w"
2185 sys26068,b:close2:gosub685:close1:open1,8,15:print#1,"u9":close1
2190 ifcr=6thensyse,1:goto525
2195 return
2200 :
2205 :
2210 rem ********************************
2215 rem *      'form'                  *
2220 rem ********************************
2225 :
2230 sysco,2,0:sysg,58,0,96,9,2,2:sysg,0,100,158,104,0,2:bq=1
2235 sysmu,2:sysre,0,99,159,199,1,2:sysre,2,101,157,197,1,2:syse,2:b=2
2240 o=160:p=100:jl=0
2245 gosub1030
2250 ifpeek(631)<>0thena=peek(631):goto2325
2255 ifo>57ando<97andp<9thena=95:goto2325
2260 ifo>159orp<100goto2245
2265 gosub820:ifc=0goto2245
2270 gosub890:ifc=0goto2245
2275 sysre,2,101,157,197,0,2:sysum,c,0,0,d,ei,j,w
2280 ifjl>0thenjl=jl+1:sysre,2,101,157,197,1,2:ifei=0goto2270
2285 ifjl>0thenei=0:bq=1:c=0:goto2245
2290 b=1:dh=hd:hd=0:sysn,11,15,1:gosub2875:hd=dh
2295 sysre,0,0,319,199,1,1:syst2,1:sysg,160,190,318,198,0,1:syscp,1
2300 syse,1:sysco,2,0:sysg,0,100,158,104,0,2:sysg,58,0,96,9,2,2
2305 sysmu,2:sysre,0,99,159,199,1,2:sysre,2,101,157,197,1,2
2310 ifjlthenjl=1:syse,2:poke53280,14:goto2325
2315 ifeithenei=0:bq=1:c=0:syse,2:goto2245
2320 b=2:gosub855:bq=0:syse,2:goto2270
2325 ifa=95andjl>1thenpoke53280,14:goto2290
2330 ifa=95thensyse,1:goto525
2335 ifa=133andjl=0thenjl=1:poke53280,6:goto2245
2340 ifa=133andjl=1thenjl=0:poke53280,14:goto2245
2345 ifa=133andjl>1thenpoke53280,14:goto2290
2350 ifa=48thengosub1060:c=3:syse,2:goto2275
2355 gosub955:ifc=0orw=0thensyse,2:ei=0:w=0:c=0:bq=1:goto2245
2360 syse,2:goto2275
2365 :
2370 :
2375 rem ********************************
2380 rem *      'darstellen'            *
2385 rem ********************************
2390 :
2395 sysn,11,15,2:syse,2:poke53280,15
2400 ifhdthenprint"{clr}";:syse,0:goto2975
2405 ifl<>1thengosub630:input"{clr}{down}{down}{down}{down}{rght}{rght}{rght}File - Name ";n$
2410 ifl<>1thends=1:syse,1:print"{clr}":open1,8,15,"xr-":print#1,"u9":poke192,192
2415 ifl=.5goto2565
2420 ifl=2andri=1goto2700
2425 ifl=2goto2725
2430 ifl=3goto2750
2435 b=2:gosub2875
2440 gosub2475:sysco,1,0:syse,1:goto125
2445 :
2450 :
2455 rem ********************************
2460 rem *      grafik betrachten       *
2465 rem ********************************
2470 :
2475 xa=1:poke53280,15
2480 gosub635:a=a+64:ifa>48anda<51thenb=a-48:syse,b
2485 ifa<133ora>140goto2500
2490 a=a-132:i=a-int(a/5)*4:w=-(a<5)+(a>4):f(i)=f(i)+w:iff(i)<0thenf(i)=15
2495 iff(i)>15thenf(i)=0
2500 ifa=83thena=0:gosub630:gosub2165
2505 ifa=82thensysre,0,0,319,199,1,3
2510 ifa=95thensysml,11,15,0,1:sysml,11,15,0,2:poke53281,15:syse,b:return
2515 ifa=77thenxa=1-xa
2520 sysml,f(1),f(2),f(3),b:poke53280,f(4):poke53281,f(4)
2525 ifxathensysml,f(1),f(4),0,b:syse,b
2530 goto2480
2535 :
2540 :
2545 rem ********************************
2550 rem * darstellung in allen groessen*
2555 rem ********************************
2560 :
2565 sysn,11,15,2:syse,2:poke53280,15
2570 close1:open1,8,15,"s:cad.main.datas":print#1,"xr-":print#1,"u9":poke192,192
2575 close1:open2,8,2,"cad.main.datas,s,w":gosub685:iff=0goto2590
2580 iff=99thenclose2:gosub3115:syse,1:goto135
2585 close2:close1:goto2570
2590 sys22520,d,v:close2:gosub3115:f3=f1:f4=f2:dv=du:vx=a1:vy=a2:vz=a3
2595 h2=h:forfi=1to24:b=2:syse,2:h3=(vf-100)/100/24*fi+1:ifdu=0thendu=dr
2600 sysre,310,0,319,194,1,2:sys50859,311,1,318,fi*8+1,1,2
2605 ifdu=1thensysum,8,0,1,d,1,0,15*fi
2610 ifdu=2thensysum,7,0,1,d,1,0,15*fi
2615 ifdu=3thensysum,9,0,1,d,1,0,15*fi
2620 a1=a1+kx:a2=a2+ky:a3=a3+kz:du=dv:ifzvthensysum,8,0,1,d,1,0,zv
2625 ifvf<>0thenh=h2*h3:f2=f4-(100/h3-100)/h2:f1=f3-(160/h3-160)/h2
2630 gosub2875:syse,0:ifrnthensysre,0,0,159,95,1,2
2635 open2,8,2,"fi."+n$+str$(fi)+",p,w":gosub685:iff=0goto2650
2640 iff=99thenclose2:gosub3115:goto2655
2645 close2:close1:open1,8,15,"s:fi."+n$+str$(fi):goto2635
2650 sys22299:close2
2655 ds=0:close1:open2,8,2,"cad.main.datas,s,r":gosub690:iff=0goto2685
2660 print"{down}{down}{down} Diskette mit Systemdaten einlegen !"
2665 print"{down}{down} Noch einen Versuch (j/n) ?"
2670 gosub635:ifa$="j"thenclose2:print"{clr}":goto2655
2675 ifa$="n"thenclose2:sys25919:df=1:vi=0:mn=0:sysn,11,15,2:syse,1:goto125
2680 goto2670
2685 sys22541,d,v:close2:gosub3115:ds=1
2690 sysn,11,15,2:next:f1=f3:f2=f4
2695 h=h2:a1=vx:a2=vy:a3=vz:syse,1:l=1:poke192,0:poke53280,14:goto135
2700 print"{clr}":forfi=1to5:sysn,11,15,1:sysn,11,15,2:syse,1:sysfr,0:b=1
2705 fk=fi*200-200:gosub2875:sysuf,1:syse,0:ifrnthengosub645
2710 ifrnandfi=5thensysl4,0,199,319,199,1,3
2715 n1$="hz.":b=1:gosub1035:b=2:gosub1035
2720 gosub3115:nextfi:fk=0:l=1:ri=0:goto120
2725 forfi=1to2:b=1:sysn,11,15,1:sysn,11,15,2:syse,1:sysfr,0
2730 fk=(fi-1)*200:gosub2875:sysuf,1:syse,0:ifrnthengosub645
2735 ifrnandfi=2thensysl4,0,199,319,199,1,3
2740 n1$="hv.":b=1:gosub1035:b=2:gosub1035
2745 gosub3115:nextfi:fk=0:l=1:ri=0:goto120
2750 sysn,11,15,2:syse,2:l=.5:gosub2875:l=1:ifrnthensysre,0,0,159,95,1,2
2755 open2,8,2,"fi."+n$+",p,w":gosub685:iff=0goto2770
2760 iff=99goto2775
2765 close2:close1:open1,8,15,"s:fi."+n$:close1:goto2755
2770 sys22299
2775 close2:gosub3115:syse,1:l=1:goto135
2780 :
2785 :
2790 rem ********************************
2795 rem *     parameter-uebergabe      *
2800 rem ********************************
2805 :
2810 w2=int(w/256):w1=w-256*w2:pokea+i,w1:pokea+i+1,w2:i=i+2:return
2815 ifabs(w)>3276.7thenw=3276.7*sgn(w)
2820 w=w*10+32768:gosub2810:return
2825 poke53280,15:gosub630:print"{clr}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}        Systemdiskette einlegen !"
2830 gosub635:ifa$="_"thenreturn
2835 open2,8,2,n$+",p,r":close2:gosub685:iffthena$="_":return
2840 print#1,"u9":close1:return
2845 forx=1tok:fory=1to13:w=peek(a+y):ifw=254theny=13:goto2855
2850 b$(x)=b$(x)+chr$(w)
2855 nexty:a=a+14:nextx:a=49153:return
2860 forx=1tok:fory=1tolen(b$(x)):pokea+y,asc(mid$(b$(x),y,1)):nexty
2865 pokea+y,254:a=a+14:nextx:a=49153:return
2870 w1=a+i:w=((peek(w1)+256*peek(w1+1))-32768)/10:i=i+2:return
2875 sys20480,d,fl,ri,a1,a2,a3,h,l,f1,f2,fk,b:return:rem darstellen
2880 :
2885 :
2890 rem ********************************
2895 rem *        extrema               *
2900 rem ********************************
2905 :
2910 iffl=0then2930
2915 ify1-a2=0thent=0:goto2925
2920 t=y1/(y1-a2)
2925 u=u-t*(u-a1):z1=z1-t*(z1-a3)
2930 ifri=1thenx4=u:u=-z1*1.5:z1=x4*1.5
2935 u=((u+160)-f1)*h*l:z1=((z1+100)-f2)*h*l-fk*h:return
2940 :
2945 :
2950 rem ********************************
2955 rem *    parameter codieren        *
2960 rem ********************************
2965 :
2970 n$="cad.create":goto2980
2975 n$="cad.paint"
2980 gosub2825:ifa$="_"thensyse,1:poke53280,14:goto525
2985 a=49153:w=fl+2*wq+4*mc+8*ri+16*se+32*wm+64*bs+128*hd:pokea+912,w
2990 i=900:w=k:gosub2810:w=d:gosub2810:w=v:gosub2810
2995 w=a1:gosub2815:w=a2:gosub2815:w=a3:gosub2815:i=i+1:w=wx:gosub2815
3000 w=wy:gosub2815:w=wz:gosub2815:i=i+2:w=f1:gosub2815:w=f2:gosub2815
3005 w=ke:gosub2815:pokea+919,l*2:pokea+954,sl:i=898:w=zv:gosub2815
3010 pokea+920,rn:w$=str$(h):pokea+927,len(w$)
3015 forw=1tolen(w$):pokea+927+w,asc(mid$(w$,w,1)):nextw:ifkthengosub2860
3020 poke836,0:print"{gry3}{clr}load"chr$(34)n$chr$(34)",8"
3025 print"{down}{down}{down}{down}run:":poke631,19:poke632,13:poke633,13:poke198,3:new
3030 :
3035 :
3040 rem ********************************
3045 rem *    parameter decodieren      *
3050 rem ********************************
3055 :
3060 a=49153:k=peek(a+900):d=peek(a+902)+256*peek(a+903)
3065 v=peek(a+904)+256*peek(a+905)
3070 ifpeek(a+919)=255thenwy=500:wz=-200:a1=50:a2=300:a3=30:l=1:h=1:goto3110
3075 i=906:gosub2870:a1=w:gosub2870:a2=w
3080 gosub2870:a3=w:i=i+1:gosub2870:wx=w:gosub2870:wy=w:gosub2870:wz=w
3085 i=i+2:gosub2870:f1=w:gosub2870:f2=w:gosub2870:ke=w:l=peek(a+919)/2
3090 w=peek(a+912):rn=peek(a+920)
3095 fl=wand1:wq=(wand2)/2:mc=(wand4)/4:ri=(wand8)/8:se=(wand16)/16
3100 wm=(wand32)/32:bs=(wand64)/64:hd=(wand128)/128:sl=peek(a+954)
3105 n$="":forx=1topeek(a+927):n$=n$+chr$(peek(a+927+x)):nextx:h=val(n$)
3110 gosub2845:return
3115 close1:open1,8,15,"u9":close1:return
  5 REM  ********************************** 
 10 REM *   GIGA-CAD     GRAPHIC-SYSTEM  * 
 15 REM *         'CAD.MAIN'             * 
 20 REM * BY S. VILSMEIER & S. LIPPSTREU * 
 25 REM ********************************** 
 30 : 
 35 : 
 40 A=PEEK (836)+1:POKE 836,A:IF A=1 THENPOKE 55,0:POKE 56,80:CLR :A=1 
 45 IF A=1 THENLOAD "HIRES4.CAD.OBJ",8,1 
 50 IF A=2 THENLOAD "HIRES6.CAD.OBJ",8,1 
 55 SYS 50707,1:POKE 53280,14:DIM B$(63):IF D=0 THENGOSUB 3060:POKE 808,237 
 60 CLOSE 1:OPEN 1,8,15,"U9":CLOSE 1:SYS 37021 
 65 : 
 70 : 
 75 REM ********************************** 
 80 REM *   VARIABLEN / SYS-ADRESSSEN    * 
 85 REM ********************************** 
 90 : 
 95 N=50181:CO=50292:E=50707:G=50859:LI=51049:JO=51627:H2=1 
 100 RE=51800:T2=52490:MU=52517:CP=36878:J2=39247:D1=40052:C2=40206 
 105 L4=21764:UM=22873:ML=21839 
 110 FR=51480:UF=51507:F(1)=11:F(2)=12:F(3)=0:F(4)=15 
 115 IF PEEK (53263)=1AND L=1 THENB=1:RI=0:GOSUB 2475:SYS CO,2,0:POKE 53263,0:GOTO 125 
 120 SYS E,1:SYS N,11,15,2:RI=0:L=1:IF D<>1 THENB=2:GOSUB 2875 
 125 SYS G,160,190,319,199,0,2:SYS T2,2:IF D=1 THENSYS 25919:V=0:K=0 
 130 SYS CP,2:SYS RE,0,0,319,199,1,2:SYS CO,1,0 
 135 POKE 192,0:CLOSE 1:OPEN 1,8,15,"XR+":PRINT#1,"U9":CLOSE 1:GOTO 525 
 140 : 
 145 : 
 150 REM ********************************* 
 155 REM *   MANIPULATIONEN BEI FILMEN   * 
 160 REM ********************************* 
 165 : 
 170 IF A=1AND DR<>0 THENDR=0:GOTO 420 
 175 IF A=3AND DL<>0 THENDL=0:GOTO 420 
 180 IF A=2AND DU<>0 THENDU=0:GOTO 420 
 185 INPUT"{CLR,2DOWN,3RIGHT}DREHUNG UM X,Y, ODER Z-ACHSE";A$:C=ASC (A$)-87 
 190 IF A=1 THENDR=C:DU=0:GOTO 410 
 195 IF A=3 THENDL=C:GOTO 410 
 200 IF A=2 THENDU=C:DR=0:GOTO 410 
 205 PRINT"{CLR,2DOWN,3RIGHT}SUMMANDEN DES FLUCHTPUNKTES{2SPACE}5,15,5"; 
 210 INPUT"{HOME,2DOWN,30RIGHT}";KX,KY,KZ:GOTO 410 
 215 PRINT"{CLR,2DOWN,3RIGHT}VERSCHIEBUNGSFAKTOR{5SPACE}5.5" 
 220 INPUT"{UP,24RIGHT}";KF::KF=-KF:GOTO 410 
 225 PRINT"{CLR,2DOWN,3RIGHT}NEIGUNG DER Z-ACHSE{4SPACE}-30" 
 230 INPUT"{UP,24RIGHT}";ZV::GOTO 410 
 235 PRINT"{CLR,2DOWN,3RIGHT}VERGROESSERUNGSFAKTOR{3SPACE}3" 
 240 INPUT"{UP,25RIGHT}";VF:VF=VF*100:GOTO 410 
 245 GOSUB 1015:IF A$<>"J"GOTO 410 
 250 A=49153:POKE A+940,DR:POKE A+941,DL:W=KX:I=942:GOSUB 2815 
 255 W=KY:GOSUB 2815:W=KZ:GOSUB 2815 
 260 W=VF:GOSUB 2815 
 265 W=KF:GOSUB 2815:L=.5:POKE A+952,DU:GOTO 2400 
 270 DR=0:DL=0:KX=0:KY=0:KZ=0:VF=0:KF=0:GOTO 420 
 275 : 
 280 : 
 285 REM ********************************* 
 290 REM *   MENUE:  ZUSAETZE            * 
 295 REM ********************************* 
 300 : 
 305 GOSUB 615:PRINT"{SPACE,RVSON,14SPACE}ZUSAETZE{16SPACE,CTRL-O}" 
 310 GOSUB 620 
 315 PRINT"{HOME,7DOWN,8RIGHT}A. 4-FACHE AUFLOESUNG" 
 320 PRINT"{DOWN,8RIGHT}B. 10-FACHE AUFLOESUNG" 
 325 PRINT"{DOWN,8RIGHT}C. FILM ERSTELLEN" 
 330 PRINT"{DOWN,8RIGHT}D. FILM ERGAENZEN" 
 335 PRINT"{DOWN,8RIGHT}E. RAHMEN ZEICHEN AN ";:IF RN=0 THENPRINT"{3LEFT}AUS" 
 340 GOSUB 1020 
 345 GOSUB 635:IF A$="←" THENSYS E,1:GOTO 525 
 350 IF A<1OR A>5GOTO 345 
 355 ON AGOTO 360,370,410,480,490 
 360 GOSUB 1015:IF A$<>"J"GOTO 305 
 365 L=2:RI=0:WM=0:BS=0:MC=0:GOTO 2395 
 370 GOSUB 1015:IF A$<>"J"GOTO 305 
 375 L=2:RI=1:WM=0:BS=0:MC=0:GOTO 2395 
 380 : 
 385 : 
 390 REM ********************************* 
 395 REM *     MENUE:  FILM              * 
 400 REM ********************************* 
 405 : 
 410 GOSUB 615:PRINT"{SPACE,RVSON,11SPACE}FILM ERSTELLEN{13SPACE,CTRL-O}" 
 415 GOSUB 620 
 420 PRINT"{HOME,4DOWN,4RIGHT}A. DREHUNG DES KOERPERS AN ";:IF DR=0 THENPRINT"{3LEFT}AUS"; 
 425 PRINT:PRINT"{DOWN,4RIGHT}B. DREHUNG UM DEN KOERPER AN ";:IF DU=0 THENPRINT"{3LEFT}AUS"; 
 430 PRINT:PRINT"{DOWN,4RIGHT}C. DREHUNG DER LICHTQUELLE AN ";:IF DL=0 THENPRINT"{3LEFT}AUS"; 
 435 PRINT:PRINT"{DOWN,4RIGHT}D. VERSCHIEBEN DES FLUCHTPUNKTES" 
 440 PRINT"{DOWN,4RIGHT}E. VERSCHIEBEN DER SCHNITTEBENE" 
 445 PRINT"{DOWN,4RIGHT}F. KIPPEN DER Z-ACHSE" 
 450 PRINT"{DOWN,4RIGHT}G. AENDERN DER GROESSE" 
 455 PRINT"{DOWN,4RIGHT}H. BERECHNUNG" 
 460 PRINT"{DOWN,4RIGHT}I. NEUE PARAMETER" 
 465 GOSUB 635:IF A$="←"GOTO 305 
 470 IF A<1OR A>9GOTO 345 
 475 ON AGOTO 170,170,170,205,215,225,235,245,270 
 480 GOSUB 1015:IF A$<>"J"GOTO 305 
 485 L=3:RI=0:WM=0:GOTO 2395 
 490 RN=1-RN:GOTO 315 
 495 : 
 500 : 
 505 REM ********************************* 
 510 REM *  JOYSTICK-ABFRAGE HAUPTMENUE  * 
 515 REM ********************************* 
 520 : 
 525 O=160:P=10:POKE 53280,14:DS=0:FI=0 
 530 GOSUB 1030:IF PEEK (631)<>0GOTO 530 
 535 IF P>9GOTO 530 
 540 IF O<57GOTO 2970 
 545 IF O>97AND O<126GOTO 1760 
 550 IF O>288GOTO 1105 
 555 IF O>126AND O<165GOTO 1360 
 560 IF D=1GOTO 530 
 565 IF O>57AND O<97GOTO 2230 
 570 IF O>165AND O<233GOTO 2395 
 575 IF O>234AND O<287GOTO 305 
 580 : 
 585 : 
 590 REM ********************************* 
 595 REM *     DIVERSE UNTERPROGRAMME    * 
 600 REM ********************************* 
 605 : 
 610 GOTO 530 
 615 PRINT"{CLR,GREY1,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@":RETURN 
 620 FOR I=1 TO22:PRINT" G{36SPACE}M":NEXT 
 625 PRINT"{HOME,24DOWN,SHIFT-SPACE}YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY{HOME}":RETURN 
 630 SYS E,0:PRINTCHR$ (14)CHR$ (8)"{HOME,GREY1}";:RETURN 
 635 GET A$:IF A$=""GOTO 635 
 640 A=ASC (A$)-64:RETURN 
 645 SYS L4,0,0,0,199,1,1:SYS L4,319,0,319,199,1,2:IF FI=1 THENSYS L4,0,0,319,0,1,3 
 650 RETURN 
 655 : 
 660 : 
 665 REM ********************************* 
 670 REM *        DISK - STATUS          * 
 675 REM ********************************* 
 680 : 
 685 CLOSE 1 
 690 OPEN 1,8,15:INPUT#1,F,F$,T,S:IF F=0 THENRETURN 
 695 GOSUB 1020:PRINT:PRINT"{2DOWN,3RIGHT,RVSON}DISKETTENFEHLER :" 
 700 PRINT"{2DOWN,2RIGHT}"F","F$","T","S:IF DS=0AND FI THENRETURN 
 705 CLOSE 2:PRINT#1,"U9":CLOSE 1:IF DS=0 THENGOSUB 635:RETURN 
 710 PRINT"{2DOWN,3RIGHT}NOCH EIN VERSUCH{2SPACE}(J/N) ?" 
 715 GOSUB 635:IF A$="N" THENF=99:PRINT"{CLR}":RETURN 
 720 IF A$="J" THENF=1:PRINT"{CLR}":RETURN 
 725 GOTO 715 
 730 : 
 735 : 
 740 REM ********************************* 
 745 REM *    RAHMEN-BLINKEN BEI 'ZOOM'  * 
 750 REM ********************************* 
 755 : 
 760 SYS L4,R,Q,O-1,Q,2,1:SYS L4,O,Q,O,P-1,2,1 
 765 SYS L4,O,P,R+1,P,2,1:SYS L4,R,P,R,Q+1,2,1:PM=1-PM:RETURN 
 770 W=W+1:IF J1<>J THENW=1 
 775 IF W>20 THENW=20 
 780 J1=J:P=P+W*(J=1)-W/M*(J=3)-W*(J=5)+W/M*(J=7) 
 785 O=O+W*M*(J=1)-W*(J=3)-W*M*(J=5)+W*(J=7):RETURN 
 790 : 
 795 : 
 800 REM ********************************* 
 805 REM *      ANGEWAEHLTES SYMBOL      * 
 810 REM ********************************* 
 815 : 
 820 IF O<50 THENR=3:RX=49:Q1=1:GOTO 835 
 825 IF O<100 THENR=50:RX=99:Q1=3:GOTO 835 
 830 R=100:RX=156:Q1=2 
 835 IF P<135 THENQ=102:RY=134:Q2=2:GOTO 850 
 840 IF P<165 THENQ=135:RY=164:Q2=1:GOTO 850 
 845 Q=165:RY=196:Q2=0 
 850 C=Q2*3+Q1:RETURN 
 855 SYS G,R,Q,RX,RY,2,B:RETURN 
 860 : 
 865 : 
 870 REM ********************************* 
 875 REM *    VERFORMUNG PER JOYSTICK    * 
 880 REM ********************************* 
 885 : 
 890 IF BQ=1AND EI=0 THENBQ=0:B=2:GOSUB 855 
 895 SYS JO:J=PEEK (859) 
 900 IF J=0GOTO 895 
 905 IF J=128GOTO 920 
 910 IF INT (J/2)=J/2GOTO 895 
 915 J=INT (J/2)+1:RETURN 
 920 B=2:GOSUB 855:C=0:BQ=1:RETURN 
 925 : 
 930 : 
 935 REM ********************************* 
 940 REM *   VERFORMUNG UEBER TASTATUR   * 
 945 REM ********************************* 
 950 : 
 955 IF A<49OR A>57 THENC=0:RETURN 
 960 A=A-48:XA=INT ((9-A)/3)*3:XB=A-INT ((A-1)/3)*3 
 965 XB=3+(XB<2)*2+(XB>2)*1:C=XA+XB:EI=1:GOSUB 630:GET A$ 
 970 IF C>6 THENINPUT"{CLR,2DOWN,3RIGHT}DREHWINKEL{3SPACE}90{4LEFT}";W:RETURN 
 975 IF C>3 THENINPUT"{CLR,2DOWN,3RIGHT}VERSCHIEBUNGSSUMMAND{3SPACE}50{4LEFT}";W:RETURN 
 980 INPUT"{CLR,2DOWN,3RIGHT}VERZERRRUNGSFAKTOR{3SPACE}1.5{5LEFT}";W:RETURN 
 985 : 
 990 : 
 995 REM  ******************************** 
 1000 REM *   DIVERSE UNTERPROGRAMME II. * 
 1005 REM ******************************** 
 1010 : 
 1015 PRINT"{HOME,22DOWN,4RIGHT,RVSON,SPACE}SIND SIE SICHER ?{SPACE,RVOFF}":GOSUB 635:RETURN 
 1020 IF PEEK (53272)<>23 THENGOSUB 630 
 1025 RETURN 
 1030 SYS J2,O,P,0:O=PEEK (2024)+256*PEEK (2025):P=PEEK (2026):RETURN 
 1035 CLOSE 1 
 1040 OPEN 2,8,2,N1$+LEFT$ (N$,10)+STR$ (FI*2+(B-2))+",P,W":GOSUB 690:IF F=0GOTO 1055 
 1045 IF F=99 THENCLOSE 2:GOSUB 3115:RETURN 
 1050 CLOSE 1:CLOSE 2:OPEN 1,8,15,"S:"+N1$+LEFT$ (N$,10)+STR$ (FI*2+(B-2)):GOTO 1035 
 1055 SYS 26068,B:CLOSE 2:GOSUB 3115:RETURN 
 1060 EI=1:GOSUB 630:GET A$:INPUT"{CLR,2DOWN,3RIGHT}VERZERRUNGSFAKTOR{3SPACE}1.5{5LEFT}";W 
 1065 SYS RE,2,101,157,197,0,1:SYS UM,1,0,1,D,1,0,W:SYS UM,2,0,1,D,1,0,W:RETURN 
 1070 SYS E,0:GOTO 2970:REM 'DARSTELLEN' 
 1075 : 
 1080 : 
 1085 REM ******************************** 
 1090 REM *   DARSTELLUNGS - 'MODI'      * 
 1095 REM ******************************** 
 1100 : 
 1105 YU=0:GOSUB 615:PRINT"{SPACE,RVSON,9SPACE}DARSTELLUNGS - MODI{10SPACE,CTRL-O}" 
 1110 GOSUB 620 
 1115 PRINT"{HOME,4DOWN,3RIGHT}A. FLUCHTPUNKTDARSTELLUNG AN ";:IF FL=0 THENPRINT"{3LEFT}AUS"; 
 1120 PRINT:PRINT"{DOWN,3RIGHT}B. ZEICHNEN DER SCHNITTLINIEN AN "; 
 1125 IF SL=0 THENPRINT"{3LEFT}AUS"; 
 1130 PRINT:PRINT"{DOWN,3RIGHT}C. HIDDEN-LINE MODUS AN ";:IF HD=0 THENPRINT"{3LEFT}AUS"; 
 1135 PRINT:PRINT"{DOWN,3RIGHT}D. SCHATTIERUNGS-MODUS AN ";:IF WQ=0 THENPRINT"{3LEFT}AUS"; 
 1140 PRINT:PRINT"{DOWN,3RIGHT}E. LICHTQUELLEN-KOORDINATEN" 
 1145 PRINT"{DOWN,3RIGHT}F. MULTICOLOUR-MODUS AN ";:IF MC=0 THENPRINT"{3LEFT}AUS"; 
 1150 PRINT:PRINT"{DOWN,3RIGHT}G. DOPPELMODUS HIRES & MULTI AN "; 
 1155 IF WM=0 THENPRINT"{3LEFT}AUS"; 
 1160 PRINT:PRINT"{DOWN,3RIGHT}H. HIDDEN-L. & SCHATTIERUNG AN ";:IF BS=0 THENPRINT"{3LEFT}AUS"; 
 1165 PRINT:PRINT"{DOWN,3RIGHT}I. SCHNITTEBENE AN ";:IF SE=0 THENPRINT"{3LEFT}AUS"; 
 1170 GOSUB 1020 
 1175 GOSUB 635:IF A$="←" THENSYS E,1:GOTO 525 
 1180 IF A<1OR A>9GOTO 1175 
 1185 ON AGOTO 1195,1190,1215,1220,1225,1245,1250,1265,1255 
 1190 SL=1-SL:GOTO 1115 
 1195 FL=1-FL:IF FL=0GOTO 1280 
 1200 PRINT"{CLR,2DOWN,3RIGHT}FLUCHTPUNKT-KOORDINATEN:" 
 1205 PRINT"{DOWN,3RIGHT}X,Y,Z{3SPACE}"STR$ (A1)","STR$ (A2)","STR$ (A3):YU=1 
 1210 INPUT"{UP,9RIGHT}";A1,A2,A3:GOTO 1280 
 1215 HD=1-HD:GOTO 1305 
 1220 WQ=1-WQ:GOTO 1310 
 1225 PRINT"{CLR,2DOWN,3RIGHT}KOORDINATEN DER LICHTQUELLE:" 
 1230 PRINT"{DOWN,3RIGHT}X,Y,Z{3SPACE}"WX"{LEFT},"WY"{LEFT},"WZ 
 1235 INPUT"{UP,9RIGHT}";WX,WY,WZ:IF WX=0AND WY=0AND WZ=0GOTO 1235 
 1240 GOTO 1105 
 1245 MC=1-MC:GOTO 1280 
 1250 WM=1-WM:GOTO 1290 
 1255 SE=1-SE:IF SEGOTO 1270 
 1260 GOTO 1280 
 1265 BS=1-BS:GOTO 1295 
 1270 YU=1:PRINT"{CLR,2DOWN,3RIGHT}TIEFE DER SCHNITTEBENE:" 
 1275 PRINT"{DOWN,3RIGHT}Y{3SPACE}"STR$ (-KE):INPUT"{UP,5RIGHT}";KE:KE=-KE:GOTO 1280 
 1280 : 
 1285 IF MC THENWM=0:BS=0 
 1290 IF WM THENMC=0:BS=0 
 1295 IF BS THENMC=0:WM=0 
 1300 IF SEOR MCOR WMOR BS THENWQ=1:HD=1 
 1305 IF HD=0 THENWQ=0 
 1310 IF WQ=0 THENMC=0:WM=0:SE=0:BS=0 
 1315 IF WQ THENHD=1 
 1320 IF YUGOTO 1105 
 1325 GOTO 1115 
 1330 : 
 1335 : 
 1340 REM ******************************** 
 1345 REM *    MENUE 'ZOOM'              * 
 1350 REM ******************************** 
 1355 : 
 1360 SYS G,127,0,165,9,2,1 
 1365 GOSUB 615:PRINT"{SPACE,RVSON,12SPACE}ZOOM - MENUE{14SPACE,CTRL-O}" 
 1370 GOSUB 620 
 1375 PRINT"{HOME,5DOWN,7RIGHT}A. ZOOMEN DES OBJEKTS" 
 1380 PRINT"{DOWN,7RIGHT}B. ORGINALGROESSE" 
 1385 PRINT"{DOWN,7RIGHT}C. OPTIMALER AUSSCHNITT" 
 1390 PRINT"{DOWN,7RIGHT}D. BETRACHTEN DER GRAFIK" 
 1395 PRINT"{DOWN,7RIGHT}E. ZENTRIEREN":GOSUB 1020 
 1400 GOSUB 635:IF A$="←" THENSYS E,1:SYS G,127,0,165,9,2,1:GOTO 525 
 1405 IF (A<1OR A>5)OR (A<>4AND D=1)GOTO 1400 
 1410 ON AGOTO 1445,1550,1585,1640,1675 
 1415 : 
 1420 : 
 1425 REM ******************************** 
 1430 REM *   'ZOOMEN DES OBJEKTS'       * 
 1435 REM ******************************** 
 1440 : 
 1445 SYS E,1:O=160:P=100:M=8/5:PM=0 
 1450 GOSUB 1030 
 1455 IF (PEEK (631))=95GOTO 1545 
 1460 SYS JO:IF PEEK (859)=128GOTO 1460 
 1465 R=O:Q=P 
 1470 GOSUB 760:SYS JO:J=PEEK (859):GET A$:IF A$<>""GOTO 1525 
 1475 IF J=0OR J>128 THENW=0:GOTO 1470 
 1480 IF PM THENGOSUB 760 
 1485 IF J=128GOTO 1505 
 1490 IF INT (J/2)=J/2GOTO 1470 
 1495 IF O<R THENO=R:P=Q:W=0 
 1500 GOSUB 770:GOTO 1470 
 1505 IF R=OGOTO 1545 
 1510 H=320/(ABS (R-O))*H:F1=R/H2+F1:F2=Q/H2+F2:H2=H:IF PM=0 THENGOSUB 760 
 1515 SYS N,11,15,2:B=2:GOSUB 2875:SYS RE,0,0,319,199,1,2 
 1520 SYS G,160,190,318,198,0,2:SYS CP,2:SYS T2,2:SYS CO,1,0:GOTO 525 
 1525 IF PM THENGOSUB 760 
 1530 IF A$="←"GOTO 1545 
 1535 IF A$="L"GOTO 1445 
 1540 GOTO 1470 
 1545 SYS G,127,0,165,9,2,1:GOTO 525 
 1550 SYS E,1:F1=0:F2=0:H=1:H2=1:GOTO 1515:REM 'ORGINALGROESSE' 
 1555 : 
 1560 : 
 1565 REM ******************************** 
 1570 REM *   'OPTIMALER AUSSCHNITT'     * 
 1575 REM ******************************** 
 1580 : 
 1585 PM=0:IF H<>1 THENPM=1 
 1590 SYS E,1:O=-8000:P=O:R=-O:Q=-O:F1=0:F2=0:H=1:H2=1 
 1595 I=0:FOR A=1 TOV:SYS D1,A:Y1=USR (1):U=USR (2):Z1=USR (3):GOSUB 2910 
 1600 IF U>O THENO=U 
 1605 IF Z1>P THENP=Z1 
 1610 IF U<R THENR=U 
 1615 IF Z1<Q THENQ=Z1 
 1620 NEXT A:R=R-1:Q=Q-1:O=O+1:P=P+1:M=8/5 
 1625 B1=ABS (O-R):B2=ABS (P-Q) 
 1630 IF B1<B2*M THENFA=B2*M:O=O+ABS (FA-B1)/2:R=R-ABS (FA-B1)/2:GOTO 1510 
 1635 IF B1>B2/M THENFA=B1/M:P=P+ABS (FA-B2)/2:Q=Q-ABS (FA-B2)/2:GOTO 1510 
 1640 SYS G,127,0,165,9,2,1:SYS E,2:B=2:GOTO 2130:REM 'BETRACHTEN DER GRAFIK' 
 1645 : 
 1650 : 
 1655 REM ******************************** 
 1660 REM *    'ZENTRIEREN'              * 
 1665 REM ******************************** 
 1670 : 
 1675 SYS E,1:O=-8000:P=O:R=-O:Q=R:QZ=R:PZ=P:F1=0:F2=0:H=1:H2=1 
 1680 I=0:FOR A=1 TOV:SYS D1,A:U=USR (1):Y1=USR (2):Z1=USR (3) 
 1685 IF U>O THENO=U 
 1690 IF Y1>P THENP=Y1 
 1695 IF Z1>PZ THENPZ=Z1 
 1700 IF U<R THENR=U 
 1705 IF Y1<Q THENQ=Y1 
 1710 IF Z1<QZ THENQZ=Z1 
 1715 NEXT A:FX=(R+O)/2:FY=(Q+P)/2:FZ=(QZ+PZ)/2 
 1720 SYS UM,4,0,0,D,1,0,FX:SYS UM,5,0,0,D,1,0,-FY:SYS UM,6,0,0,D,1,0,FZ 
 1725 SYS N,11,15,2:SYS E,1:GOTO 115 
 1730 : 
 1735 : 
 1740 REM ******************************** 
 1745 REM *       DISK - MENUE           * 
 1750 REM ******************************** 
 1755 : 
 1760 GOSUB 615:PRINT"{SPACE,RVSON,13SPACE}DISK - MENUE{13SPACE,CTRL-O}" 
 1765 GOSUB 620 
 1770 PRINT"{HOME,5DOWN,6RIGHT}A. OBJEKT LADEN" 
 1775 PRINT"{DOWN,6RIGHT}B. OBJEKT SPEICHERN" 
 1780 PRINT"{DOWN,6RIGHT}C. DISKETTENKOMMANDO SENDEN" 
 1785 PRINT"{DOWN,6RIGHT}D. DIRECTORY ANZEIGEN" 
 1790 PRINT"{DOWN,6RIGHT}E. GRAFIK LADEN" 
 1795 PRINT"{DOWN,6RIGHT}F. GRAFIK SPEICHERN" 
 1800 GOSUB 1020 
 1805 GOSUB 635:IF A$="←" THENSYS E,1:GOTO 525 
 1810 IF A<1OR A>6GOTO 1805 
 1815 ON AGOTO 1850,1925,2060,2000,2110,2165 
 1820 : 
 1825 : 
 1830 REM ******************************** 
 1835 REM *      'OBJEKT LADEN'          * 
 1840 REM ******************************** 
 1845 : 
 1850 GOSUB 615:GOSUB 625:PRINT"{SPACE,RVSON,13SPACE}OBJEKT LADEN{13SPACE,RVOFF}" 
 1855 INPUT"{3DOWN,3RIGHT}OBJEKT - NAME{4SPACE}";N$:IF N$="←"OR N$=""GOTO 1760 
 1860 OPEN 2,8,2,"OB."+N$+",S,R":GOSUB 685:IF F<>0GOTO 1760 
 1865 H=1:L=1:F1=0:F2=0:FK=0:H2=1:V=0:D=1:K=0:SYS 25919 
 1870 INPUT#2,D:INPUT#2,V:INPUT#2,K 
 1875 SYS 22541,D,V 
 1880 FOR I=1 TOK:INPUT#2,B$(I):NEXT 
 1885 SYS C2,V+1,D,0,0 
 1890 CLOSE 2:GOSUB 685:GOSUB 3115:SYS E,1:SYS N,11,15,2:GOTO 115 
 1895 : 
 1900 : 
 1905 REM ******************************** 
 1910 REM *      'OBJEKT SPEICHERN'      * 
 1915 REM ******************************** 
 1920 : 
 1925 IF D=1GOTO 1805 
 1930 GOSUB 615:GOSUB 625::PRINT"{SPACE,RVSON,11SPACE}OBJEKT SPEICHERN{11SPACE,RVOFF}" 
 1935 INPUT"{3DOWN,3RIGHT}OBJEKT - NAME{4SPACE}";N$:IF N$="←"OR N$=""GOTO 1760 
 1940 OPEN 2,8,2,"OB."+N$+",S,W":GOSUB 685:IF F<>0GOTO 1760 
 1945 PRINT#2,D:PRINT#2,V:PRINT#2,K 
 1950 SYS 22520,D,V 
 1955 FOR I=1 TOK:PRINT#2,B$(I):NEXT 
 1960 CLOSE 2:GOSUB 685:GOSUB 3115 
 1965 GOTO 1760 
 1970 : 
 1975 : 
 1980 REM ******************************** 
 1985 REM *   'DIRECTORY ANZEIGEN'       * 
 1990 REM ******************************** 
 1995 : 
 2000 PRINT"{CLR}";:GOSUB 615:PRINT"{SPACE,RVSON,10SPACE}DIRECTORY ANZEIGEN{10SPACE,RVOFF}" 
 2005 PRINT:OPEN 2,8,0,"$0":SYS 26134:CLOSE 2 
 2010 :CLOSE 2 
 2015 CLOSE 1:OPEN 1,8,15:INPUT#1,F,F$,T,S:IF F=0GOTO 2025 
 2020 PRINT"{HOME,DOWN}":GOSUB 695:GOTO 1760 
 2025 PRINT#1,"U9":CLOSE 1:GOSUB 635:GOTO 1760 
 2030 : 
 2035 : 
 2040 REM ******************************** 
 2045 REM *  'DISKETTENKOMMANDO SENDEN'  * 
 2050 REM ******************************** 
 2055 : 
 2060 GOSUB 615:GOSUB 625:PRINT"{SPACE,RVSON,6SPACE}DISKETTENKOMMANDO SENDEN{8SPACE,RVOFF}" 
 2065 POKE 631,34:POKE 198,1:N$="":INPUT"{2DOWN,3RIGHT}KOMMANDO ";N$:IF N$="←"GOTO 1760 
 2070 CLOSE 1:OPEN 1,8,15,N$:INPUT#1,F,F$,T,S:PRINT"{2DOWN,3RIGHT,RVSON,SPACE}DISKETTENSTATUS: " 
 2075 GOSUB 700:GOTO 1760 
 2080 : 
 2085 : 
 2090 REM ******************************** 
 2095 REM *   'GRAFIK LADEN'             * 
 2100 REM ******************************** 
 2105 : 
 2110 GOSUB 615:GOSUB 625:PRINT"{SPACE,RVSON,13SPACE}GRAFIK LADEN{13SPACE,RVOFF}" 
 2115 INPUT"{3DOWN,3RIGHT}GRAFIK - NAME{4SPACE}";N$:IF N$="←"OR N$=""GOTO 1760 
 2120 PRINT"{CLR}":OPEN 2,8,2,"PI."+N$+",P,R":GOSUB 685:IF F<>0GOTO 1760 
 2125 SYS N,11,15,2:SYS E,2:SYS 26101,2:CLOSE 2:PRINT#1,"U9":CLOSE 1:B=2 
 2130 GOSUB 2475:SYS E,1:GOTO 525 
 2135 : 
 2140 : 
 2145 REM ******************************** 
 2150 REM *    'GRAFIK SPEICHERN'        * 
 2155 REM ******************************** 
 2160 : 
 2165 GOSUB 615:GOSUB 625:PRINT"{SPACE,RVSON,11SPACE}GRAFIK SPEICHERN{11SPACE,RVOFF}" 
 2170 CR=A:INPUT"{3DOWN,3RIGHT}GRAFIK - NAME{4SPACE}";N$:IF N$="←"OR N$=""GOTO 2190 
 2175 IF CR=6 THENINPUT"{2DOWN,3RIGHT}GRAFIK - BILDSCHIRM # ";B 
 2180 OPEN 2,8,2,"PI."+N$+",P,W" 
 2185 SYS 26068,B:CLOSE 2:GOSUB 685:CLOSE 1:OPEN 1,8,15:PRINT#1,"U9":CLOSE 1 
 2190 IF CR=6 THENSYS E,1:GOTO 525 
 2195 RETURN 
 2200 : 
 2205 : 
 2210 REM ******************************** 
 2215 REM *      'FORM'                  * 
 2220 REM ******************************** 
 2225 : 
 2230 SYS CO,2,0:SYS G,58,0,96,9,2,2:SYS G,0,100,158,104,0,2:BQ=1 
 2235 SYS MU,2:SYS RE,0,99,159,199,1,2:SYS RE,2,101,157,197,1,2:SYS E,2:B=2 
 2240 O=160:P=100:JL=0 
 2245 GOSUB 1030 
 2250 IF PEEK (631)<>0 THENA=PEEK (631):GOTO 2325 
 2255 IF O>57AND O<97AND P<9 THENA=95:GOTO 2325 
 2260 IF O>159OR P<100GOTO 2245 
 2265 GOSUB 820:IF C=0GOTO 2245 
 2270 GOSUB 890:IF C=0GOTO 2245 
 2275 SYS RE,2,101,157,197,0,2:SYS UM,C,0,0,D,EI,J,W 
 2280 IF JL>0 THENJL=JL+1:SYS RE,2,101,157,197,1,2:IF EI=0GOTO 2270 
 2285 IF JL>0 THENEI=0:BQ=1:C=0:GOTO 2245 
 2290 B=1:DH=HD:HD=0:SYS N,11,15,1:GOSUB 2875:HD=DH 
 2295 SYS RE,0,0,319,199,1,1:SYS T2,1:SYS G,160,190,318,198,0,1:SYS CP,1 
 2300 SYS E,1:SYS CO,2,0:SYS G,0,100,158,104,0,2:SYS G,58,0,96,9,2,2 
 2305 SYS MU,2:SYS RE,0,99,159,199,1,2:SYS RE,2,101,157,197,1,2 
 2310 IF JL THENJL=1:SYS E,2:POKE 53280,14:GOTO 2325 
 2315 IF EI THENEI=0:BQ=1:C=0:SYS E,2:GOTO 2245 
 2320 B=2:GOSUB 855:BQ=0:SYS E,2:GOTO 2270 
 2325 IF A=95AND JL>1 THENPOKE 53280,14:GOTO 2290 
 2330 IF A=95 THENSYS E,1:GOTO 525 
 2335 IF A=133AND JL=0 THENJL=1:POKE 53280,6:GOTO 2245 
 2340 IF A=133AND JL=1 THENJL=0:POKE 53280,14:GOTO 2245 
 2345 IF A=133AND JL>1 THENPOKE 53280,14:GOTO 2290 
 2350 IF A=48 THENGOSUB 1060:C=3:SYS E,2:GOTO 2275 
 2355 GOSUB 955:IF C=0OR W=0 THENSYS E,2:EI=0:W=0:C=0:BQ=1:GOTO 2245 
 2360 SYS E,2:GOTO 2275 
 2365 : 
 2370 : 
 2375 REM ******************************** 
 2380 REM *      'DARSTELLEN'            * 
 2385 REM ******************************** 
 2390 : 
 2395 SYS N,11,15,2:SYS E,2:POKE 53280,15 
 2400 IF HD THENPRINT"{CLR}";:SYS E,0:GOTO 2975 
 2405 IF L<>1 THENGOSUB 630:INPUT"{CLR,4DOWN,3RIGHT}FILE - NAME ";N$ 
 2410 IF L<>1 THENDS=1:SYS E,1:PRINT"{CLR}":OPEN 1,8,15,"XR-":PRINT#1,"U9":POKE 192,192 
 2415 IF L=.5GOTO 2565 
 2420 IF L=2AND RI=1GOTO 2700 
 2425 IF L=2GOTO 2725 
 2430 IF L=3GOTO 2750 
 2435 B=2:GOSUB 2875 
 2440 GOSUB 2475:SYS CO,1,0:SYS E,1:GOTO 125 
 2445 : 
 2450 : 
 2455 REM ******************************** 
 2460 REM *      GRAFIK BETRACHTEN       * 
 2465 REM ******************************** 
 2470 : 
 2475 XA=1:POKE 53280,15 
 2480 GOSUB 635:A=A+64:IF A>48AND A<51 THENB=A-48:SYS E,B 
 2485 IF A<133OR A>140GOTO 2500 
 2490 A=A-132:I=A-INT (A/5)*4:W=-(A<5)+(A>4):F(I)=F(I)+W:IF F(I)<0 THENF(I)=15 
 2495 IF F(I)>15 THENF(I)=0 
 2500 IF A=83 THENA=0:GOSUB 630:GOSUB 2165 
 2505 IF A=82 THENSYS RE,0,0,319,199,1,3 
 2510 IF A=95 THENSYS ML,11,15,0,1:SYS ML,11,15,0,2:POKE 53281,15:SYS E,B:RETURN 
 2515 IF A=77 THENXA=1-XA 
 2520 SYS ML,F(1),F(2),F(3),B:POKE 53280,F(4):POKE 53281,F(4) 
 2525 IF XA THENSYS ML,F(1),F(4),0,B:SYS E,B 
 2530 GOTO 2480 
 2535 : 
 2540 : 
 2545 REM ******************************** 
 2550 REM * DARSTELLUNG IN ALLEN GROESSEN* 
 2555 REM ******************************** 
 2560 : 
 2565 SYS N,11,15,2:SYS E,2:POKE 53280,15 
 2570 CLOSE 1:OPEN 1,8,15,"S:CAD.MAIN.DATAS":PRINT#1,"XR-":PRINT#1,"U9":POKE 192,192 
 2575 CLOSE 1:OPEN 2,8,2,"CAD.MAIN.DATAS,S,W":GOSUB 685:IF F=0GOTO 2590 
 2580 IF F=99 THENCLOSE 2:GOSUB 3115:SYS E,1:GOTO 135 
 2585 CLOSE 2:CLOSE 1:GOTO 2570 
 2590 SYS 22520,D,V:CLOSE 2:GOSUB 3115:F3=F1:F4=F2:DV=DU:VX=A1:VY=A2:VZ=A3 
 2595 H2=H:FOR FI=1 TO24:B=2:SYS E,2:H3=(VF-100)/100/24*FI+1:IF DU=0 THENDU=DR 
 2600 SYS RE,310,0,319,194,1,2:SYS 50859,311,1,318,FI*8+1,1,2 
 2605 IF DU=1 THENSYS UM,8,0,1,D,1,0,15*FI 
 2610 IF DU=2 THENSYS UM,7,0,1,D,1,0,15*FI 
 2615 IF DU=3 THENSYS UM,9,0,1,D,1,0,15*FI 
 2620 A1=A1+KX:A2=A2+KY:A3=A3+KZ:DU=DV:IF ZV THENSYS UM,8,0,1,D,1,0,ZV 
 2625 IF VF<>0 THENH=H2*H3:F2=F4-(100/H3-100)/H2:F1=F3-(160/H3-160)/H2 
 2630 GOSUB 2875:SYS E,0:IF RN THENSYS RE,0,0,159,95,1,2 
 2635 OPEN 2,8,2,"FI."+N$+STR$ (FI)+",P,W":GOSUB 685:IF F=0GOTO 2650 
 2640 IF F=99 THENCLOSE 2:GOSUB 3115:GOTO 2655 
 2645 CLOSE 2:CLOSE 1:OPEN 1,8,15,"S:FI."+N$+STR$ (FI):GOTO 2635 
 2650 SYS 22299:CLOSE 2 
 2655 DS=0:CLOSE 1:OPEN 2,8,2,"CAD.MAIN.DATAS,S,R":GOSUB 690:IF F=0GOTO 2685 
 2660 PRINT"{3DOWN,SPACE}DISKETTE MIT SYSTEMDATEN EINLEGEN !" 
 2665 PRINT"{2DOWN,SPACE}NOCH EINEN VERSUCH (J/N) ?" 
 2670 GOSUB 635:IF A$="J" THENCLOSE 2:PRINT"{CLR}":GOTO 2655 
 2675 IF A$="N" THENCLOSE 2:SYS 25919:DF=1:VI=0:MN=0:SYS N,11,15,2:SYS E,1:GOTO 125 
 2680 GOTO 2670 
 2685 SYS 22541,D,V:CLOSE 2:GOSUB 3115:DS=1 
 2690 SYS N,11,15,2:NEXT :F1=F3:F2=F4 
 2695 H=H2:A1=VX:A2=VY:A3=VZ:SYS E,1:L=1:POKE 192,0:POKE 53280,14:GOTO 135 
 2700 PRINT"{CLR}":FOR FI=1 TO5:SYS N,11,15,1:SYS N,11,15,2:SYS E,1:SYS FR,0:B=1 
 2705 FK=FI*200-200:GOSUB 2875:SYS UF,1:SYS E,0:IF RN THENGOSUB 645 
 2710 IF RNAND FI=5 THENSYS L4,0,199,319,199,1,3 
 2715 N1$="HZ.":B=1:GOSUB 1035:B=2:GOSUB 1035 
 2720 GOSUB 3115:NEXT FI:FK=0:L=1:RI=0:GOTO 120 
 2725 FOR FI=1 TO2:B=1:SYS N,11,15,1:SYS N,11,15,2:SYS E,1:SYS FR,0 
 2730 FK=(FI-1)*200:GOSUB 2875:SYS UF,1:SYS E,0:IF RN THENGOSUB 645 
 2735 IF RNAND FI=2 THENSYS L4,0,199,319,199,1,3 
 2740 N1$="HV.":B=1:GOSUB 1035:B=2:GOSUB 1035 
 2745 GOSUB 3115:NEXT FI:FK=0:L=1:RI=0:GOTO 120 
 2750 SYS N,11,15,2:SYS E,2:L=.5:GOSUB 2875:L=1:IF RN THENSYS RE,0,0,159,95,1,2 
 2755 OPEN 2,8,2,"FI."+N$+",P,W":GOSUB 685:IF F=0GOTO 2770 
 2760 IF F=99GOTO 2775 
 2765 CLOSE 2:CLOSE 1:OPEN 1,8,15,"S:FI."+N$:CLOSE 1:GOTO 2755 
 2770 SYS 22299 
 2775 CLOSE 2:GOSUB 3115:SYS E,1:L=1:GOTO 135 
 2780 : 
 2785 : 
 2790 REM ******************************** 
 2795 REM *     PARAMETER-UEBERGABE      * 
 2800 REM ******************************** 
 2805 : 
 2810 W2=INT (W/256):W1=W-256*W2:POKE A+I,W1:POKE A+I+1,W2:I=I+2:RETURN 
 2815 IF ABS (W)>3276.7 THENW=3276.7*SGN (W) 
 2820 W=W*10+32768:GOSUB 2810:RETURN 
 2825 POKE 53280,15:GOSUB 630:PRINT"{CLR,12DOWN,8SPACE}SYSTEMDISKETTE EINLEGEN !" 
 2830 GOSUB 635:IF A$="←" THENRETURN 
 2835 OPEN 2,8,2,N$+",P,R":CLOSE 2:GOSUB 685:IF F THENA$="←":RETURN 
 2840 PRINT#1,"U9":CLOSE 1:RETURN 
 2845 FOR X=1 TOK:FOR Y=1 TO13:W=PEEK (A+Y):IF W=254 THENY=13:GOTO 2855 
 2850 B$(X)=B$(X)+CHR$ (W) 
 2855 NEXT Y:A=A+14:NEXT X:A=49153:RETURN 
 2860 FOR X=1 TOK:FOR Y=1 TOLEN (B$(X)):POKE A+Y,ASC (MID$ (B$(X),Y,1)):NEXT Y 
 2865 POKE A+Y,254:A=A+14:NEXT X:A=49153:RETURN 
 2870 W1=A+I:W=((PEEK (W1)+256*PEEK (W1+1))-32768)/10:I=I+2:RETURN 
 2875 SYS 20480,D,FL,RI,A1,A2,A3,H,L,F1,F2,FK,B:RETURN :REM DARSTELLEN 
 2880 : 
 2885 : 
 2890 REM ******************************** 
 2895 REM *        EXTREMA               * 
 2900 REM ******************************** 
 2905 : 
 2910 IF FL=0 THEN2930 
 2915 IF Y1-A2=0 THENT=0:GOTO 2925 
 2920 T=Y1/(Y1-A2) 
 2925 U=U-T*(U-A1):Z1=Z1-T*(Z1-A3) 
 2930 IF RI=1 THENX4=U:U=-Z1*1.5:Z1=X4*1.5 
 2935 U=((U+160)-F1)*H*L:Z1=((Z1+100)-F2)*H*L-FK*H:RETURN 
 2940 : 
 2945 : 
 2950 REM ******************************** 
 2955 REM *    PARAMETER CODIEREN        * 
 2960 REM ******************************** 
 2965 : 
 2970 N$="CAD.CREATE":GOTO 2980 
 2975 N$="CAD.PAINT" 
 2980 GOSUB 2825:IF A$="←" THENSYS E,1:POKE 53280,14:GOTO 525 
 2985 A=49153:W=FL+2*WQ+4*MC+8*RI+16*SE+32*WM+64*BS+128*HD:POKE A+912,W 
 2990 I=900:W=K:GOSUB 2810:W=D:GOSUB 2810:W=V:GOSUB 2810 
 2995 W=A1:GOSUB 2815:W=A2:GOSUB 2815:W=A3:GOSUB 2815:I=I+1:W=WX:GOSUB 2815 
 3000 W=WY:GOSUB 2815:W=WZ:GOSUB 2815:I=I+2:W=F1:GOSUB 2815:W=F2:GOSUB 2815 
 3005 W=KE:GOSUB 2815:POKE A+919,L*2:POKE A+954,SL:I=898:W=ZV:GOSUB 2815 
 3010 POKE A+920,RN:W$=STR$ (H):POKE A+927,LEN (W$) 
 3015 FOR W=1 TOLEN (W$):POKE A+927+W,ASC (MID$ (W$,W,1)):NEXT W:IF K THENGOSUB 2860 
 3020 POKE 836,0:PRINT"{GREY3,CLR}LOAD"CHR$ (34)N$CHR$ (34)",8" 
 3025 PRINT"{4DOWN}RUN:":POKE 631,19:POKE 632,13:POKE 633,13:POKE 198,3:NEW 
 3030 : 
 3035 : 
 3040 REM ******************************** 
 3045 REM *    PARAMETER DECODIEREN      * 
 3050 REM ******************************** 
 3055 : 
 3060 A=49153:K=PEEK (A+900):D=PEEK (A+902)+256*PEEK (A+903) 
 3065 V=PEEK (A+904)+256*PEEK (A+905) 
 3070 IF PEEK (A+919)=255 THENWY=500:WZ=-200:A1=50:A2=300:A3=30:L=1:H=1:GOTO 3110 
 3075 I=906:GOSUB 2870:A1=W:GOSUB 2870:A2=W 
 3080 GOSUB 2870:A3=W:I=I+1:GOSUB 2870:WX=W:GOSUB 2870:WY=W:GOSUB 2870:WZ=W 
 3085 I=I+2:GOSUB 2870:F1=W:GOSUB 2870:F2=W:GOSUB 2870:KE=W:L=PEEK (A+919)/2 
 3090 W=PEEK (A+912):RN=PEEK (A+920) 
 3095 FL=WAND 1:WQ=(WAND 2)/2:MC=(WAND 4)/4:RI=(WAND 8)/8:SE=(WAND 16)/16 
 3100 WM=(WAND 32)/32:BS=(WAND 64)/64:HD=(WAND 128)/128:SL=PEEK (A+954) 
 3105 N$="":FOR X=1 TOPEEK (A+927):N$=N$+CHR$ (PEEK (A+927+X)):NEXT X:H=VAL (N$) 
 3110 GOSUB 2845:RETURN 
 3115 CLOSE 1:OPEN 1,8,15,"U9":CLOSE 1:RETURN 
Listing 2. Bearbeitungseinheit
|
1 rem  **********************************
2 rem *    giga-cad  graphic-system    *
3 rem *          'cad.create'          *
4 rem * by s. vilsmeier & s. lippstreu *
5 rem **********************************
6 :
7 :
8 a=peek(836)+1:poke836,a:ifa=1thenpoke55,0:poke56,82:clr:a=1
9 ifa=1thenload"hires3.cad.obj",8,1
10 ifa=2thenload"hires8.cad.obj",8,1
11 open1,8,15:gosub688
12 sys50707,1:poke53280,14:dimp(30,2),b$(63)
13 ifd=0thengosub907
14 :
15 :
16 rem **********************************
17 rem *    variablen/ sys-aressen      *
18 rem **********************************
19 :
20 h=50181:co=50292:pl=50447:e=50707:g=50859:li=51049:jo=51627:rf=53280
21 fl=51480:l=51507:r=51800:kr=52008:d4=52103:d3=52176:t1=52466:t2=52490
22 mu=52517:cp=36878:l3=38378:j2=39247:c1=39718:d1=40052:c2=40206
23 d2=40344:l4=21764:ci=21836:um=22873:c3=25652:da=25123
24 sysh,11,15,2:goto108
25 :
26 :
27 rem *********************************
28 rem *    grafik loeschen/ menue     *
29 rem *********************************
30 :
31 print"{clr}{gry1}";:sysh,11,15,b:syst1,b
32 bs=b:gosub68:syskr,1,b:sysmu,b:ifp=1thengosub61
33 return
34 j=j-128:qx=o:o=pz:gosub122:pz=o:o=qx:return:rem joyst. umwandlung -tiefe
35 :
36 :
37 rem *********************************
38 rem *     diverse unterprogramme    *
39 rem *********************************
40 :
41 print"{clr}{gry1} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}":return
42 fori=1to22:print" {CBM-H}                                    {CBM-N}":next
43 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down} {CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{home}":return
44 n$="":input"{down}{down}{down}{down}{rght}{rght}{rght}Makro - Name     ";n$
45 iflen(n$)>13thenprint"{up}{up}{up}{up}";:goto44
46 gosub79:return
47 geta$:ifa$=""goto47
48 return
49 n1=0:fori=1tok:ifn$=b$(i)thenn1=i:i=k
50 next:return
51 print"{down}{down}{down}  Dieses Makro ist nicht im Speicher !":gosub47:return
52 n$="":print"{rght}{rght}{rght}{down}{down}Unter welchem Namen soll das Makro"
53 input"{down}{rght}{rght}{rght}eingefuegt werden                  {left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}";n$
54 gosub79:return
55 printchr$(14)chr$(8):poke198,0:return
56 bs=1
57 sysg,240,0,293,9,2,bs:return
58 bs=2:goto57
59 bs=1
60 sysg,139,0,180,9,2,bs:return
61 bs=2:goto60
62 sysg,0,0,42,9,2,1:return
63 sysg,99,0,137,9,2,1:return
64 sysg,43,0,98,9,2,1:return
65 sysh,11,15,2:return
66 bs=2:goto68
67 bs=1
68 sysr,0,0,319,199,1,bs:syscp,bs:return
69 zm=1:goto71
70 zm=0
71 sysr,2,101,157,197,zm,3:return
72 sysj2,z,o,0
73 z=peek(2024)+256*peek(2025):o=peek(2026):a=peek(631):return
74 xa=usr(1):sa=usr(2):vb=usr(3):return
75 ei=peek(877):c=peek(881):ifeithenei=0:c=0:wq=1
76 return
77 sysjo:j=peek(859):geta$:return
78 x2=x1:y2=y1:z2=z1:return
79 n1=0:ifn$="_"orn$=""thenn1=1
80 return
81 ifpeek(53272)<>23thensyse,0:gosub55
82 a=0:geta$:ifa$<>""thena=asc(a$)
83 return
84 input"{down}{down}{rght}{rght}{rght}Verbindungsvorschrift ";vb:ifvb<0orvb>2thenprint"{up}{up}{up}{up}";:goto84
85 syse,1:return
86 :
87 :
88 rem *********************************
89 rem *   flaechen & makros durchbl.  *
90 rem *********************************
91 :
92 syse,1
93 iff<1thenf=n1
94 iff=n1+1thenf=1
95 sysl,1:gosub65:sysda,mo,f,1,2
96 sysco,2,2:sysfl,4
97 gosub47
98 a=asc(a$):ifa=43thenf=f+1:goto93
99 ifa=86thengosub887:return
100 ifa=45thenf=f-1:goto93
101 return
102 :
103 :
104 rem *********************************
105 rem *      1. darstellung           *
106 rem *********************************
107 :
108 b=2:gosub31:ifd=1thensys25919
109 ifpthensysda,5,k,1,b:goto111
110 zn=0:sysda,zn,dg,1,b
111 sysco,1,0
112 :
113 :
114 rem *********************************
115 rem *  joystick-abfrage hauptmenue  *
116 rem *********************************
117 :
118 z=159:o=12:poke40783,0
119 gosub72
120 ifpeek(631)=0then127
121 goto119
122 w=w+1:ifw>20thenw=20
123 ifj1<>jthenw=1
124 ifme=2thenw=w*2
125 o=o-((j>3andj<7)-(j<3orj>7))*w:z=z-((j>1andj<5)-(j>5))*w:ifme=2thenw=w/2
126 n=0:j1=j:return
127 ifo>9goto119
128 ifz<42goto182
129 ifz>182andz<239goto344
130 ifz>99andz<137andd<>1goto420
131 ifz>43andz<98goto455
132 ifz>137andz<182goto555
133 ifz>239andz<293andp=0goto784
134 ifz>292andp=0thenprint"{clr}":syse,0:goto898
135 goto119
136 :
137 :
138 rem *********************************
139 rem *        linien-blinken         *
140 rem *********************************
141 :
142 ifn=0thenreturn
143 sysl4,pa,pb,z,o,2,b
144 ifu=1orme=3thenn=1-n:return
145 sysl4,z,o,pc,pd,2,b:n=1-n:return
146 :
147 :
148 rem *********************************
149 rem *   tastaturabfrage (blinken)   *
150 rem *********************************
151 :
152 a=asc(a$)
153 n=1-n:gosub142:n=1-n:ifme=3goto159
154 ifa=147thengosub65:poke40783,0:b=2:goto183
155 ifa=76thengosub142:gosub170:ifu=0goto189
156 ifa=95goto213
157 ifa=67thensysci,b:n=1
158 goto198
159 ifa=147thensyse,2:poke40783,0:goto456
160 ifa=76thengosub142:gosub173:ifu=0goto459
161 ifa=95goto483
162 ifa=67thensysci,b:n=1
163 goto468
164 :
165 :
166 rem *********************************
167 rem *        linie loeschen         *
168 rem *********************************
169 :
170 gosub142:u=u-1:ifu=0thenreturn
171 sysl4,p(u-1,1)+160,p(u-1,2)+100,pc,pd,2,b
172 pc=p(u-1,1)+160:pd=p(u-1,2)+100:z=pc:o=pd:return
173 u=u-1:ifu=0thenreturn
174 sysl4,p(u-1,0)+160,180-p(u-1,1),pa,pb,2,2
175 z=pa:o=pb:pa=p(u-1,0)+160:pb=180-p(u-1,1):return
176 :
177 :
178 rem *********************************
179 rem *      flaeche: 2d-eingabe      *
180 rem *********************************
181 :
182 gosub65:me=1:b=3:c=0
183 gosub66:syst1,2:sysd4,1,2
184 u=0:sysg,0,0,42,9,2,b
185 ifpthengosub61
186 m=0:b=2
187 sysli,160,97,160,103,1,2
188 sysli,157,100,163,100,1,2:syse,2
189 z=160:o=100
190 gosub72
191 ifa<>0goto193
192 goto197
193 ifa=67thensysci,b
194 ifa=95goto213
195 goto190
196 rem ***** 1. eckpunkt ************
197 n=0:u=1:p(0,1)=z-160:p(0,0)=0:p(0,2)=o-100:pa=z:pb=o:pc=z:pd=o
198 gosub143:gosub77:ifa$<>""goto152
199 ifj=0thenw=0:goto198
200 gosub142:ifj=128then202
201 gosub122:goto198
202 ifpc=zandpd=ogoto198
203 ifu>29goto198
204 sysl4,pc,pd,z,o,2,2
205 u=u+1:pc=z:pd=o:p(u-1,1)=pc-160:p(u-1,0)=0:p(u-1,2)=pd-100
206 goto198
207 :
208 :
209 rem ********************************
210 rem *     flaeche: einfuegen (3d)   *
211 rem ********************************
212 :
213 vf=0:ifu>1thengosub321:dg=d-1
214 c=0:me=1:sysl,1:m=0:z=160:o=100
215 gosub65:ifu<2thenme=0:gosub62:goto118
216 sysda,1,dg,1,2
217 sysco,2,2:sysfl,4
218 ifc=0thengosub69
219 ifc<>0then223
220 b=2:gosub72:ifa<>0goto227
221 ifz<42ando<9thena=95:goto227
222 wq=1
223 gosub749:ifc=0then220
224 gosub762:ifc=0then220
225 sysum,c,1,dg,d,ei,j,w:gosub75
226 sysl,1:m=0:goto215
227 gosub769:syse,1:ifsvgoto225
228 ifa=95goto325
229 ifa=48thenc=10:gosub772:df=dg:c=1:gosub548:goto225
230 ifa=43thenvf=dg:goto240
231 ifa=76thengosub254:goto325
232 ifa=42andvf<>0goto304
233 goto220
234 :
235 :
236 rem ********************************
237 rem *     flaeche duplizieren      *
238 rem ********************************
239 :
240 sysl,1:sysco,1,1:s=0
241 sysd2,dg:gosub74:ifs<>2thenze=1:gosub915:iffthensyse,1:goto247
242 sysd2,dg+1:xb=usr(1):ifs=2thensa=k
243 sysc2,v+1,d,sa,vb:d=d+1:sysc2,v+(xb-xa)+1,d,sa,vb
244 fori=xatoxb-1:v=v+1
245 sysd1,i:sysc1,usr(1),usr(2),usr(3),v
246 next:ifs=2thenreturn
247 dg=d-1:goto214
248 :
249 :
250 rem ********************************
251 rem *    flaeche loeschen          *
252 rem ********************************
253 :
254 sysl,1
255 sysd2,dg:ya=usr(1):sysd2,dg+1:xb=usr(1):su=xb-ya
256 fori=dg+1tod+1
257 sysd2,i:gosub74:ifxa<suthenxa=su
258 sysc2,xa-su,i-1,sa,vb:next:d=d-1
259 fori=xbtov+su
260 sysd1,i:sysc1,usr(1),usr(2),usr(3),i-su:next:v=v-su
261 return
262 :
263 :
264 rem ********************************
265 rem *    makro loeschen            *
266 rem ********************************
267 :
268 x2=1:y2=0:sysl,1:b$(dg)=""
269 fori=1tod-1
270 sysd2,i:gosub74:ifsa=dggoto280
271 ifsa>dgthensa=sa-1
272 sysd2,i+1:z1=usr(2):xb=usr(1)
273 sysc2,y2+1,x2,sa,vb:sysc2,y2+(xb-xa)+1,x2+1,z1,vb
274 x2=x2+1
275 forq=xatoxb-1
276 sysd1,q:x1=usr(1):y1=usr(2):z1=usr(3)
277 ifx1=-3276.8thenx1=0:y1=0:z1=0
278 y2=y2+1:sysc1,x1,y1,z1,y2
279 next
280 next
281 fori=x2+1tod:sysc2,0,i,0,0:next
282 v=y2:d=x2
283 fori=dgtomm+1:b$(i)=b$(i+1):next:return
284 :
285 :
286 rem ********************************
287 rem *    makro duplizieren         *
288 rem ********************************
289 :
290 gosub890:sysl,1:sysco,1,1
291 dr=d:dh=dg
292 gosub918:gosub915:iffthenk=k-1:return
293 forx2=1todr-1
294 sysd2,x2:sa=usr(2)
295 ifsa=dhthendg=x2:gosub241
296 next
297 return
298 :
299 :
300 rem ********************************
301 rem *    flaechen verbinden        *
302 rem ********************************
303 :
304 sysl,1:sysd2,vf:xa=usr(1):vb=usr(3):sysd2,vf+1:xb=usr(1):sysd2,dg:ya=usr(1)
305 ze=4*(xb-xa):gosub915:iffgoto314
306 fori=xatoxb:ifi=xbthenx1=x3:y1=y3:z1=z3:pa=x4:pb=y4:pc=z4:goto310
307 sysd1,i:x1=usr(1):y1=usr(2):z1=usr(3):sysd1,ya+(i-xa)
308 pa=usr(1):pb=usr(2):pc=usr(3)
309 ifi=xathenx3=x1:y3=y1:z3=z1:x4=pa:y4=pb:z4=pc:goto313
310 sysc2,v+1,d,mm,vb:d=d+1:sysc2,v+5,d,mm,vb
311 v=v+1:sysc1,x1,y1,z1,v:v=v+1:sysc1,x2,y2,z2,v
312 v=v+1:sysc1,pd,pe,pf,v:v=v+1:sysc1,pa,pb,pc,v:sysda,1,d-1,1,1
313 gosub78:pd=pa:pe=pb:pf=pc:next
314 gosub65:sysda,1,dg,1,2:sysco,2,2:sysfl,4:goto220
315 :
316 :
317 rem ********************************
318 rem * flaeche in speicher codieren *
319 rem ********************************
320 :
321 ifp=0thenmm=0
322 ze=1:gosub915:iffthenreturn
323 sysc2,v+1,d,mm,vn:sysc2,v+u+1,d+1,mm,vn:d=d+1:forq=1tou
324 sysc1,p(q-1,0),p(q-1,1),p(q-1,2),q+v:next:v=v+u:return
325 gosub70:sysl,1:ifa<>76thensysco,1,1
326 me=1:ifa=43thena=0:goto215
327 me=0:gosub62:m=0:goto118
328 :
329 :
330 rem ********************************
331 rem *     symbole invertieren      *
332 rem ********************************
333 :
334 ifc<>0andei<>1thensysg,pa,pb,pc,pd,2,b
335 ifc=7thensys52664,2,b
336 ifc=8thensys52835,2,b
337 ifc=9thensys53045,2,b
338 return
339 :
340 rem ********************************
341 rem *    3d-zeichnen               *
342 rem ********************************
343 :
344 sysco,2,0:sysd3,2,2:m=1:n=0
345 sysg,182,0,239,9,2,2:me=2:syse,2
346 z=0:o=0:pz=0:n=0:b=2:u=0
347 sysli,78,55,82,55,2,2:sysli,80,53,80,57,2,2
348 sysli,238,55,242,55,2,2:sysli,240,53,240,57,2,2
349 sysli,238,145,242,145,2,2:sysli,240,143,240,147,2,2
350 ifm=0thenreturn
351 sysc3,pz,z,o,2,b:n=1-n
352 gosub77:ifa$<>""goto357
353 ifj=0orj=128thenw=0:goto351
354 ifnthensysc3,pz,z,o,2,b:n=0
355 ifj>128thengosub34:goto351
356 gosub122:goto351
357 a=asc(a$):ifnthensysc3,pz,z,o,2,b:n=0
358 ifa=94goto362
359 ifa=95thengoto413
360 ifa=67thensysci,b:n=1
361 goto351
362 u=1:p(0,1)=z:p(0,0)=pz:p(0,2)=o:pa=z:pb=o:pc=z:pd=o:pe=pz:pf=pz
363 gosub378:gosub77
364 ifa$<>""goto386
365 ifj=0orj=128thenw=0:goto363
366 gosub377:ifj>128andu<29thengosub34:goto363
367 gosub122:goto363
368 gosub377:sysl3,pf,pc,pd,pz,z,o,1,b
369 u=u+1:pc=z:pd=o:pf=pz:p(u-1,1)=pc:p(u-1,0)=pf:p(u-1,2)=pd
370 goto363
371 :
372 :
373 rem ********************************
374 rem *     3d-linien-blinken        *
375 rem ********************************
376 :
377 ifn=0thenreturn
378 sysl3,pe,pa,pb,pz,z,o,2,b:ifu=1thenn=1-n:return
379 sysl3,pf,pc,pd,pz,z,o,2,b:n=1-n:return
380 :
381 :
382 rem ********************************
383 rem *  3d-zeichnen: tastenabfrage  *
384 rem ********************************
385 :
386 a=asc(a$):ifa=87ora=94goto390
387 ifa<>147anda<>95anda<>76anda<>43anda<>70anda<>67goto363
388 ifa<>147goto390
389 poke40783,0:sysco,2,0:sysd3,2,2:goto345
390 ifa=95goto396
391 ifa=76goto405
392 ifa=43thenm=0:gosub347:m=1:goto397
393 n=1-n:gosub377:n=1-n:ifa=67thensysci,b:goto363
394 ifa=94goto368
395 gosub62:goto213
396 ifu<2goto413
397 me=2:gosub321:syse,2
398 m=0:forq=0tou-1:ifq=uthenx1=x3:y1=y3:z1=z3:goto400
399 x1=p(q,0):y1=p(q,1):z1=p(q,2):ifm=0thenm=1:x3=x1:y3=y1:z3=z1:goto401
400 sysl3,x1,y1,z1,x2,y2,z2,1,3
401 gosub78:next
402 sysl3,pe,pa,pb,pf,pc,pd,1,3
403 ifa=43thenn=1:u=0:b=2:goto346
404 n=0:syse,1:me=0:goto118
405 gosub377:ifu=<1thenz=0:o=0:pz=0:u=0:goto344
406 sysco,2,0:u=u-2:sysg,182,0,239,9,2,2:sysd3,2,2
407 m=0:forq=0tou
408 x1=p(q,0):y1=p(q,1):z1=p(q,2):ifm=0thengosub347:m=1:goto410
409 sysl3,x1,y1,z1,x2,y2,z2,1,2
410 gosub78:next
411 pc=p(u,1):pd=p(u,2):pf=p(u,0):z=pc:o=pd:pz=pf:u=u+1
412 goto363
413 ifu<2thenme=0:syse,1:n=0:goto118
414 :
415 :
416 rem ********************************
417 rem *     form                     *
418 rem ********************************
419 :
420 gosub63:gosub69:sysco,2,0:me=0
421 z=160:o=100:fo=1:jl=0:c=0
422 syse,1:b=1
423 zn=0:ifpthendg=mm:zn=5
424 gosub72
425 ifa<>0goto435
426 ifz>99andz<137ando<9thena=95:goto435
427 wq=1
428 gosub749:ifc=0goto424
429 gosub762:ifc=0goto424
430 gosub70:sysum,c,zn,dg,d,ei,j,w:gosub75
431 ifjl=0thengosub442:gosub334:syse,1:sysco,2,0
432 ifjl>0thenjl=jl+1
433 gosub69:ifc=0goto424
434 goto428
435 gosub769:sysl,1:syse,1:ifsvgoto430
436 gosub446:ifjl>1anda=133thenpokerf,14:gosub442:syse,1:sysco,2,0:jl=0
437 ifa=95andjl>1thenpokerf,14:gosub442:syse,1:sysco,2,0:jl=0
438 ifa=95thengosub63:gosub70:me=0:fo=0:goto118
439 ifa=48thenc=10:gosub772:df=dg:c=zn:gosub548:goto430
440 goto424
441 rem *** neue gesamtdarstellung **
442 syse,2:b=1:gosub31
443 gosub67:gosub63
444 ifp=1thengosub59
445 sysda,zn,dg,1,b:gosub75:gosub69:return
446 ifa=133andjl=0thenjl=1:pokerf,6:return
447 ifa=133andjl=1thenjl=0:pokerf,14
448 return
449 :
450 :
451 rem ********************************
452 rem *     rotation: 2d-eingabe     *
453 rem ********************************
454 :
455 u=0:gosub64:me=3
456 gosub65:syst1,2:gosub66:sysg,43,0,98,9,2,2
457 sysd4,2,2:sys22659,1,2:syse,2
458 ifpthengosub61
459 z=160:o=170:b=2
460 sysj2,z,o,1:gosub73
461 ifa<>0goto463
462 goto467
463 ifa=95thensyse,1:gosub64:me=0:goto118
464 ifa=67thensysci,b
465 ifa=147thensyse,2:poke40783,0:goto456
466 goto460
467 n=0:u=1:p(0,0)=z-160:p(0,1)=180-o:pa=z:pb=o
468 gosub143:gosub77:ifa$<>""goto152
469 ifj=0thenw=0:goto468
470 gosub142:ifj=128andu<29thengosub473:goto468
471 gosub122:ifo>180theno=180
472 goto468
473 ifpa=zandpb=othenreturn
474 ifu>48thenreturn
475 sysli,z,o,pa,pb,2,2
476 pa=z:pb=o:p(u,0)=z-160:p(u,1)=180-o:u=u+1:return
477 :
478 :
479 rem ********************************
480 rem *    rotation: einfuegen (3d)  *
481 rem ********************************
482 :
483 syse,0:gosub55:k=k+1
484 gosub41:gosub43:print"{home}{down} {rvon}      Rotationskoerper erstellen      {rvof} "
485 fc=0:input"{down}{rght}{rght}Anzahl der Facetten   ";fc
486 iffc<3thenprint"{up}{up}";:goto485
487 input"{down}{rght}{rght}Rotationswinkel         360{left}{left}{left}{left}{left}";rw
488 ifabs(rw)>360thenprint"{up}{up}";:goto487
489 input"{down}{rght}{rght}Verbindungsvorschrift   0{left}{left}{left}";vb
490 ifvb<0orvb>3thenprint"{up}{up}";:goto489
491 ifp<>0goto498
492 ifs=2thensyse,0:gosub55:print"{clr}{down}";
493 n$="":input"{down}{rght}{rght}Makro - Name          ";n$
494 if(n$="_"orn$="")ands=2thenprint"{up}{up}";:goto493
495 gosub79:ifn1thenk=k-1:a=95:goto463
496 gosub49:ifn1thenprint"{up}{up}";:goto493
497 b$(k)=n$
498 syse,1:w=rw*~/180:ifs=2thens=0:goto515
499 ze=4*(u-1)*fc:gosub915:iffthenb$(k)="":goto484
500 gosub890:z=0:fori=0tow-.000001stepw/fc:w=w/fc:w1=sin(i):w2=cos(i):pc=sin(i+w)
501 pd=cos(i+w):forq=0tou-2
502 sysc2,v+1,d,k,vb:sysc2,v+5,d+1,k,vb:d=d+1:v=v+1
503 sysc1,w1*p(q,1),w2*p(q,1),p(q,0),v:v=v+1
504 sysc1,pc*p(q,1),pd*p(q,1),p(q,0),v:v=v+1
505 sysc1,pc*p(q+1,1),pd*p(q+1,1),p(q+1,0),v:v=v+1
506 sysc1,w1*p(q+1,1),w2*p(q+1,1),p(q+1,0),v
507 next:w=w*fc
508 next:dg=k
509 :
510 :
511 rem ********************************
512 rem *      makros einfuegen        *
513 rem ********************************
514 :
515 z=159:o=100:jl=0:c=0
516 ifjl=0thengosub539
517 ifjl>0thenjl=jl+1:sysfl,4:gosub69
518 ifc<>0goto524
519 gosub72
520 ifa<>0goto528
521 ifz>43andz<98ando<9andas=0thena=95:goto528
522 ifz>137andz<182ando<9andasthena=95:goto528
523 wq=1
524 gosub749:ifc=0goto519
525 gosub762:ifc=0goto519
526 sysl,1
527 gosub70:sysum,c,3,dg,d,ei,j,w:gosub75:goto516
528 if(a=95ora=43)andjl>1thenpokerf,14:sysl,1:gosub539:jl=0
529 ifa=76andjl>0thenpokerf,14:jl=0
530 ifa=95thensysl,1:sysco,1,1:goto543
531 gosub446:ifa=133andjl>1thenpokerf,14:jl=0:sysl,1:gosub539
532 ifa=76thengosub268:me=1:k=k-1:goto543
533 ifa=43thenk=k+1:s=2:gosub290:syse,1:iffthena=95:goto528
534 ifa=43thendg=k:goto492
535 ifa=48thenc=10:gosub772:df=k:c=3:gosub548:goto527
536 gosub769:syse,1:ifsvgoto526
537 goto519
538 rem *** neu darstellen **********
539 gosub65:b=2
540 sysda,3,dg,1,b
541 sysco,2,2:gosub69:fo=2
542 sysfl,4:return
543 gosub70:fo=0:c=0:ei=0:ifas=0thengosub64
544 ifpandasthenas=0:return
545 ifas<>0thenas=0:gosub59
546 me=0:goto118
547 rem *** '0' bei umformungen *****
548 gosub70:sysum,1,c,df,d,1,0,w:sysum,2,c,df,d,1,0,w:ei=1:c=3:syse,1:return
549 :
550 :
551 rem ********************************
552 rem *     makro - hauptmenue       *
553 rem ********************************
554 :
555 gosub41
556 print" {rvon}           MAKRO -Hauptmenue          {rvof}"
557 gosub42
558 print"{home}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}A.Makro laden"
559 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}B.Makro speichern"
560 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}C.Diskettenkommando senden"
561 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}D.Makros auf Diskette"
562 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}E.Makros im Speicher"
563 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}F.Makro erstellen"
564 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}G.Makro einfuegen"
565 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}H.Alles Erstellte als Makro"
566 gosub81:if(a<65ora>72)anda<>95goto566
567 ifa=95thensyse,1:open1,8,15,"u9":close1:goto118
568 ona-64goto664,644,695,706,625,575,588,614
569 :
570 :
571 rem ********************************
572 rem *     makro erstellen          *
573 rem ********************************
574 :
575 ifp=1goto566
576 gosub41:gosub43
577 print" {rvon}           Makro erstellen            {rvof} "
578 gosub890:gosub44:ifn1goto555
579 gosub49:ifn1thenprint"{up}{up}{up}{up}{up}";:goto578
580 b$(k+1)=n$
581 p=1:k=k+1:mm=k:syse,1:zw=d:goto108
582 :
583 :
584 rem ********************************
585 rem *     makro einfuegen          *
586 rem ********************************
587 :
588 ifk=0goto566
589 gosub41:gosub43:print" {rvon}           Makro einfuegen            {rvof}{home}"
590 gosub44:ifn1goto555
591 ifn$<>b$(mm)goto598
592 ifd=zwthenas=1:p=0:sysda,0,v,1,1:syse,1:k=k-1:goto543
593 fori=1tod:sysd2,i:sa=usr(2):ifsa>mmthensysc2,usr(1),i,mm,usr(3)
594 next
595 zn=4:dg=mm:sysh,11,15,1:syst1,1:gosub67:sysmu,1:syskr,1,1
596 as=1:gosub59:sysda,zn,dg,1,1
597 syse,1:p=0:k=mm:mm=0:dg=k:goto515
598 gosub49:ifn1goto600
599 gosub51:goto555
600 dg=n1:i=1:k=k+1:ifp=1then605
601 gosub52:ifn1thenk=k-1:goto555
602 gosub49:ifn1thenprint"{up}{up}{up}{up}{up}";:goto601
603 b$(k)=n$:i=1
604 gosub918:gosub915:iffthenk=k-1:goto555
605 s=2:gosub291:as=1:zn=4:dg=k:gosub65:b=1:ifpgoto607
606 gosub59:gosub515:as=0:gosub59:goto118
607 gosub515:as=0:goto118
608 :
609 :
610 rem ********************************
611 rem *  alles erstellte als makro   *
612 rem ********************************
613 :
614 ifd=1orpgoto566
615 gosub41:gosub43:print" {rvon}      Alles Erstellte als Makro       {rvof} "
616 gosub44:ifn1goto555
617 b$(1)=n$:fori=1tod:sysd2,i:q=usr(1):vb=usr(3):sysc2,q,i,1,vb:next
618 k=1:syse,1:goto118
619 :
620 :
621 rem ********************************
622 rem *     makros im speicher       *
623 rem ********************************
624 :
625 za=0:a=1:e1=19:mr=k:ifp=1thenmr=mm
626 ifmr=0goto566
627 gosub41
628 print" {rvon}          Makros im Speicher          {rvof} ";:ife1>mrthene1=mr
629 gosub42:n1$=str$(1322-v):n1$=right$("0000"+right$(n1$,len(n1$)-1),4)
630 print"{home}{down}{down}":fori=zato18:print"{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}                   ":next
631 print"{home}{down}{down}":forx=atoe1
632 print"{rght}{rght}{rght}          ";left$(b$(x)+"..............",14):next
633 ife1=mrthenprint"{rght}{rght}{rght}     "n1$" Eckpunkte frei"
634 gosub47
635 ife1=mrgoto555
636 a=e1+1:e1=a+18:ife1>mrthene1=mr:ifa>mrthena=mr-1
637 goto630
638 :
639 :
640 rem ********************************
641 rem *     makro speichern          *
642 rem ********************************
643 :
644 ifk=0goto566
645 gosub41
646 print" {rvon}            Makro speichern           {rvof} "
647 gosub44:ifn1goto555
648 gosub49:ifn1goto650
649 print"{up}":gosub51:goto555
650 n2=n1:print:print"{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}"n$"{up}"
651 n$="":input"{rght}{rght}{rght}File  - Name     ";n$:gosub79:ifn1goto555
652 iflen(n$)>13thenprint"{up}";:goto651
653 gosub918:open2,8,2,"ma."+n$+",s,w":gosub684:iff<>0goto555
654 print#2,ze:ifstgoto656
655 print#2,n$:sys21301,d,n2
656 close2:close1:gosub684:iff=0thengosub688
657 goto555
658 :
659 :
660 rem ********************************
661 rem *      makro laden             *
662 rem ********************************
663 :
664 gosub41:gosub43
665 print" {rvon}              Makro laden             {rvof} "
666 gosub890:n$="":input"{down}{down}{down}{rght}{rght}{rght}File - Name     ";n$:gosub79:ifn1goto555
667 iflen(n$)>13thenprint"{up}{up}{up}{up}";:goto666
668 open2,8,2,"ma."+n$+",s,r":gosub684:iff<>0goto555
669 input#2,ze:ifstgoto674
670 gosub915:iffthenclose2:close1:goto555
671 input#2,n$:ifstgoto674
672 k=k+1:ifp=0thenb$(k)=n$
673 sys21006,d,v,k
674 close2:close1:gosub684:iff=0goto676
675 k=k-1:goto555
676 gosub688:d=peek(2026)+256*peek(2027):v=peek(2028)+256*peek(2029)
677 goto735
678 :
679 :
680 rem ********************************
681 rem *     disk - status            *
682 rem ********************************
683 :
684 open1,8,15:input#1,f,f$,t,s:iff=0thenreturn
685 print:print"{down}{down}{rght}{rght}{rght}{rvon}Diskettenfehler :"
686 print"{down}{down}{rght}{rght}"f","f$","t","s
687 gosub47
688 close2:print#1,"u9":close1:return
689 :
690 :
691 rem ********************************
692 rem *     diskettenkommando senden *
693 rem ********************************
694 :
695 gosub41:gosub43
696 print" {rvon}       Diskettenkommando senden       {rvof} "
697 poke631,34:poke198,1:n$="":input"{down}{down}{rght}{rght}{rght}Kommando ";n$:gosub79:ifn1goto555
698 open1,8,15,n$:input#1,f,f$,t,s:print"{down}{down}{rght}{rght}{rght}{rvon}Diskettenstatus :"
699 gosub686:goto555
700 :
701 :
702 rem ********************************
703 rem *     makros auf diskette      *
704 rem ********************************
705 :
706 gosub41
707 print" {rvon}         Makros auf Diskette          {rvof} ";
708 print:open2,8,0,"$0:ma.*=seq":sys26134:close2
709 gosub684:close2:close1:iff=0thengosub47
710 goto555
711 :
712 :
713 rem ********************************
714 rem *      parameter-uebergabe     *
715 rem ********************************
716 :
717 w2=int(w/256):w1=w-256*w2:pokea+i,w1:pokea+i+1,w2:i=i+2:return
718 pokerf,15
719 printchr$(14)chr$(8)"{clr}{gry1}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}        Systemdiskette einlegen !"
720 gosub47:ifa$="_"thenreturn
721 open2,8,2,"cad.main,p,r":close2:gosub684:iffthena$="_":return
722 print#1,"u9":close1:return
723 forx=1tok:fory=1to13:w=peek(a+y):ifw=254theny=13:goto725
724 b$(x)=b$(x)+chr$(w)
725 nexty:a=a+14:nextx:a=49153:return
726 ifk=0thenreturn
727 forx=1tok:fory=1tolen(b$(x)):pokea+y,asc(mid$(b$(x),y,1)):nexty
728 pokea+y,254:a=a+14:nextx:a=49153:return
729 :
730 :
731 rem ********************************
732 rem *  geladenens makro einfuegen  *
733 rem ********************************
734 :
735 n$=b$(k):ifpgoto741
736 gosub49:ifn1<>kgoto738
737 goto740
738 print"{down}{down}":gosub52:b$(k)=n$
739 print"{up}{up}{up}{up}{up}{up}{up}{up}";:goto736
740 i=1:dh=k:dg=k:mm=k:as=1:gosub59:goto597
741 b$(k)=""
742 i=1:dh=k:goto605
743 :
744 :
745 rem ********************************
746 rem *     angewaehltes symbol      *
747 rem ********************************
748 :
749 ifz>=159oro<=100thenc=0:return
750 ifz<50thenpa=3:pc=49:pe=1:goto753
751 ifz<100thenpa=50:pc=99:pe=3:goto753
752 pa=100:pc=156:pe=2
753 ifo<135thenpb=102:pd=134:pf=2::goto756
754 ifo<165thenpb=135:pd=164:pf=1:goto756
755 pb=165:pd=196:pf=0
756 c=pf*3+pe:return
757 :
758 :
759 rem ********************************
760 rem *   verformung ueber joystick  *
761 rem ********************************
762 ifwqandei=0thenwq=0:b=3:gosub334
763 gosub77
764 ifj=128then767
765 ifint(j/2)=j/2then763
766 j=int(j/2)+1:return
767 b=3:gosub334:c=0
768 return
769 ifa<49ora>57thenc=0:sv=0:return
770 a=a-48:xa=int((9-a)/3)*3:xb=a-int((a-1)/3)*3
771 xb=3+(xb<2)*2+(xb>2)*1:c=xa+xb:sv=c:wq=1
772 ei=1:sysl,1:syse,0:gosub55:ifc=10goto775
773 ifc>6theninput"{clr}{down}{down}{rght}{rght}{rght}Drehwinkel   90{left}{left}{left}{left}";w:goto776
774 ifc>3theninput"{clr}{down}{down}{rght}{rght}{rght}Verschiebungssummand   50{left}{left}{left}{left}";w:goto776
775 input"{clr}{down}{down}{rght}{rght}{rght}Verzerrungsfaktor   1.5{left}{left}{left}{left}{left}";w:goto776
776 ifw=0thenc=0:sv=0:ei=0:sysfl,4
777 return
778 :
779 :
780 rem ********************************
781 rem *     hauptmenue loeschen      *
782 rem ********************************
783 :
784 gosub56
785 gosub41
786 print" {rvon}        Hauptmenue 'Loeschen'         {rvof} ";
787 gosub42
788 print"{home}{down}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}A. Flaechen durchblaettern"
789 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}B. Makros durchblaettern"
790 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}C. Bekanntes Makro loeschen"
791 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}D. Alles loeschen "
792 print"{down}{rght}{rght}{rght}{rght}{rght}{rght}E. Verbindungsvorschrift"
793 gosub81:if(a<65ora>69)anda<>95goto793
794 ifa=95goto880
795 ona-64goto802,828,854,866,877
796 :
797 :
798 rem ********************************
799 rem *    flaechen durchblaettern   *
800 rem ********************************
801 :
802 ifd=1goto793
803 syse,1:f=1:jl=0:n1=d-1:mo=1
804 gosub92
805 ifa=86thensysd2,f:sysc2,usr(1),f,usr(2),vb
806 ifa=95andjl>0thenpokerf,14:gosub820:gosub56:goto118
807 ifa=95thensysl,1:gosub56:goto118
808 gosub446:ifa=133andjl>1thenjl=0:pokerf,14:gosub820:f=f-1:goto804
809 ifa=94goto814
810 ifa=76andjl>0thenjl=jl+1:dg=f:sysl,1:gosub254:f=f-1:n1=d-1:goto804
811 ifa=76goto818
812 sysfl,4:gosub97:goto805
813 rem ***** '^' *******************
814 pokerf,14:sysl,1:b=2:gosub31
815 gosub56:dg=f:sysg,0,0,42,9,2,3
816 sysda,2,dg,1,2:sysco,1,0:u=2:goto214
817 rem *********** 'l' *************
818 sysl,1:b=2:gosub31:gosub58:dg=f
819 sysda,2,dg,1,2:syse,2:sysco,1,0:syse,1:gosub254:n1=d-1:goto804
820 sysl,1:b=2:gosub31:gosub58:sysda,0,d,1,2:syse,2
821 sysco,1,0:syse,1:return
822 :
823 :
824 rem ********************************
825 rem *     makros durchblaettern    *
826 rem ********************************
827 :
828 ifk=0goto793
829 syse,1:f=1:mo=3:n1=k
830 gosub92
831 ifa=95thensysl,1:gosub56:goto118
832 ifa<>86goto836
833 fori=1tod:sysd2,i:ifusr(2)<>kgoto835
834 sysc2,usr(1),i,usr(2),vb
835 nexti:syse,1
836 ifa=94goto840
837 ifa=76goto845
838 sysfl,4:gosub97:goto831
839 rem ******* '^' *****************
840 sysl,1:sysco,2,0:syse,2
841 b$=b$(f):gosub61:as=0:zn=0:gosub58
842 b=1:gosub31:gosub59:dg=f:sysda,4,dg,1,1:syse,1
843 as=1:goto515
844 rem ******* 'l' *****************
845 sysl,1:sysco,2,0:syse,2:gosub58
846 b=1:gosub31:sysda,4,f,1,1:syse,1
847 dg=f:gosub268:k=k-1:n1=k:goto118
848 :
849 :
850 rem ********************************
851 rem *   bekanntes makro loeschen   *
852 rem ********************************
853 :
854 ifk=0goto793
855 gosub41:gosub43
856 print" {rvon}  Makro mit bekanntem Namen loeschen  {rvof} ":gosub44
857 ifn1goto785
858 gosub49:ifn1thenf=n1:mo=3:n1=k:goto830
859 syse,1:gosub56:goto118
860 :
861 :
862 rem ********************************
863 rem *     alles loeschen           *
864 rem ********************************
865 :
866 print"{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}{rvon}Sind Sie sicher ?{rvof}  ";
867 gosub47
868 printa$:ifa$<>"j"goto870
869 sys25919:clr:d=1:goto12
870 gosub56:syse,1:goto118
871 :
872 :
873 rem ********************************
874 rem *     verbindungsvorschrift    *
875 rem ********************************
876 :
877 i=1:gosub41:gosub43
878 print" {rvon}   Momentane  Verbindungsvorschrift   {rvof} "
879 gosub84
880 syse,1:gosub56:goto118
881 :
882 :
883 rem ********************************
884 rem *    mehr als 63 makros ?      *
885 rem ********************************
886 :
887 sysl,1:i=1:syse,0:gosub55:gosub41
888 print"{clr}":gosub84
889 sysfl,4:return
890 ifk<64andmm<64thenreturn
891 fori=1tod:sysd2,i:gosub74:ifsa<>0thensa=sa-1
892 sysc2,xa,i,sa,vb:next:fori=2tomm:b$(i-1)=b$(i):next:mm=mm-1:k=k-1:return
893 :
894 :
895 rem ********************************
896 rem *    parameter codieren        *
897 rem *********************************
898 gosub718:ifa$="_"thensyse,1:pokerf,14:goto118
899 a=49153:pokea+919,255:i=900:w=k:gosub717:w=d:gosub717:w=v:gosub717
900 gosub726:poke836,0:print"{gry3}{clr}load"chr$(34)"cad.main"chr$(34)",8"
901 print"{down}{down}{down}{down}run:":poke631,19:poke632,13:poke633,13:poke198,3:new
902 :
903 :
904 rem ********************************
905 rem *    parameter decodieren      *
906 rem ********************************
907 a=49153:k=peek(a+900)+256*peek(a+901):d=peek(a+902)+256*peek(a+903)
908 v=peek(a+904)+256*peek(a+905):gosub723:return
909 :
910 :
911 rem ********************************
912 rem *   zu viele daten ?           *
913 rem ********************************
914 :
915 ifv+ze<1320thenf=0:return
916 f=1:sysl,1:syse,0:gosub55:print"{clr}{down}{down}{down}    Fuer diese Operation reicht der "
917 print"{down}     Speicherplatz nicht mehr aus!":gosub47:return
918 ze=0:fori=1tod-1:sysd2,i:sr=usr(1)
919 ifusr(2)=dhthensysd2,i+1:ze=ze+usr(1)-sr
920 nexti:return
  1 REM  ********************************** 
  2 REM *    GIGA-CAD  GRAPHIC-SYSTEM    * 
  3 REM *          'CAD.CREATE'          * 
  4 REM * BY S. VILSMEIER & S. LIPPSTREU * 
  5 REM ********************************** 
  6 : 
  7 : 
  8 A=PEEK (836)+1:POKE 836,A:IF A=1 THENPOKE 55,0:POKE 56,82:CLR :A=1 
  9 IF A=1 THENLOAD "HIRES3.CAD.OBJ",8,1 
 10 IF A=2 THENLOAD "HIRES8.CAD.OBJ",8,1 
 11 OPEN 1,8,15:GOSUB 688 
 12 SYS 50707,1:POKE 53280,14:DIM P(30,2),B$(63) 
 13 IF D=0 THENGOSUB 907 
 14 : 
 15 : 
 16 REM ********************************** 
 17 REM *    VARIABLEN/ SYS-ARESSEN      * 
 18 REM ********************************** 
 19 : 
 20 H=50181:CO=50292:PL=50447:E=50707:G=50859:LI=51049:JO=51627:RF=53280 
 21 FL=51480:L=51507:R=51800:KR=52008:D4=52103:D3=52176:T1=52466:T2=52490 
 22 MU=52517:CP=36878:L3=38378:J2=39247:C1=39718:D1=40052:C2=40206 
 23 D2=40344:L4=21764:CI=21836:UM=22873:C3=25652:DA=25123 
 24 SYS H,11,15,2:GOTO 108 
 25 : 
 26 : 
 27 REM ********************************* 
 28 REM *    GRAFIK LOESCHEN/ MENUE     * 
 29 REM ********************************* 
 30 : 
 31 PRINT"{CLR,GREY1}";:SYS H,11,15,B:SYS T1,B 
 32 BS=B:GOSUB 68:SYS KR,1,B:SYS MU,B:IF P=1 THENGOSUB 61 
 33 RETURN 
 34 J=J-128:QX=O:O=PZ:GOSUB 122:PZ=O:O=QX:RETURN :REM JOYST. UMWANDLUNG -TIEFE 
 35 : 
 36 : 
 37 REM ********************************* 
 38 REM *     DIVERSE UNTERPROGRAMME    * 
 39 REM ********************************* 
 40 : 
 41 PRINT"{CLR,GREY1,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@":RETURN 
 42 FOR I=1 TO22:PRINT" H{36SPACE}N":NEXT 
 43 PRINT"{HOME,24DOWN,SPACE}YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY{HOME}":RETURN 
 44 N$="":INPUT"{4DOWN,3RIGHT}MAKRO - NAME{5SPACE}";N$ 
 45 IF LEN (N$)>13 THENPRINT"{4UP}";:GOTO 44 
 46 GOSUB 79:RETURN 
 47 GET A$:IF A$=""GOTO 47 
 48 RETURN 
 49 N1=0:FOR I=1 TOK:IF N$=B$(I) THENN1=I:I=K 
 50 NEXT :RETURN 
 51 PRINT"{3DOWN,2SPACE}DIESES MAKRO IST NICHT IM SPEICHER !":GOSUB 47:RETURN 
 52 N$="":PRINT"{3RIGHT,2DOWN}UNTER WELCHEM NAMEN SOLL DAS MAKRO" 
 53 INPUT"{DOWN,3RIGHT}EINGEFUEGT WERDEN{18SPACE,16LEFT}";N$ 
 54 GOSUB 79:RETURN 
 55 PRINTCHR$ (14)CHR$ (8):POKE 198,0:RETURN 
 56 BS=1 
 57 SYS G,240,0,293,9,2,BS:RETURN 
 58 BS=2:GOTO 57 
 59 BS=1 
 60 SYS G,139,0,180,9,2,BS:RETURN 
 61 BS=2:GOTO 60 
 62 SYS G,0,0,42,9,2,1:RETURN 
 63 SYS G,99,0,137,9,2,1:RETURN 
 64 SYS G,43,0,98,9,2,1:RETURN 
 65 SYS H,11,15,2:RETURN 
 66 BS=2:GOTO 68 
 67 BS=1 
 68 SYS R,0,0,319,199,1,BS:SYS CP,BS:RETURN 
 69 ZM=1:GOTO 71 
 70 ZM=0 
 71 SYS R,2,101,157,197,ZM,3:RETURN 
 72 SYS J2,Z,O,0 
 73 Z=PEEK (2024)+256*PEEK (2025):O=PEEK (2026):A=PEEK (631):RETURN 
 74 XA=USR (1):SA=USR (2):VB=USR (3):RETURN 
 75 EI=PEEK (877):C=PEEK (881):IF EI THENEI=0:C=0:WQ=1 
 76 RETURN 
 77 SYS JO:J=PEEK (859):GET A$:RETURN 
 78 X2=X1:Y2=Y1:Z2=Z1:RETURN 
 79 N1=0:IF N$="←"OR N$="" THENN1=1 
 80 RETURN 
 81 IF PEEK (53272)<>23 THENSYS E,0:GOSUB 55 
 82 A=0:GET A$:IF A$<>"" THENA=ASC (A$) 
 83 RETURN 
 84 INPUT"{2DOWN,3RIGHT}VERBINDUNGSVORSCHRIFT ";VB:IF VB<0OR VB>2 THENPRINT"{4UP}";:GOTO 84 
 85 SYS E,1:RETURN 
 86 : 
 87 : 
 88 REM ********************************* 
 89 REM *   FLAECHEN & MAKROS DURCHBL.  * 
 90 REM ********************************* 
 91 : 
 92 SYS E,1 
 93 IF F<1 THENF=N1 
 94 IF F=N1+1 THENF=1 
 95 SYS L,1:GOSUB 65:SYS DA,MO,F,1,2 
 96 SYS CO,2,2:SYS FL,4 
 97 GOSUB 47 
 98 A=ASC (A$):IF A=43 THENF=F+1:GOTO 93 
 99 IF A=86 THENGOSUB 887:RETURN 
 100 IF A=45 THENF=F-1:GOTO 93 
 101 RETURN 
 102 : 
 103 : 
 104 REM ********************************* 
 105 REM *      1. DARSTELLUNG           * 
 106 REM ********************************* 
 107 : 
 108 B=2:GOSUB 31:IF D=1 THENSYS 25919 
 109 IF P THENSYS DA,5,K,1,B:GOTO 111 
 110 ZN=0:SYS DA,ZN,DG,1,B 
 111 SYS CO,1,0 
 112 : 
 113 : 
 114 REM ********************************* 
 115 REM *  JOYSTICK-ABFRAGE HAUPTMENUE  * 
 116 REM ********************************* 
 117 : 
 118 Z=159:O=12:POKE 40783,0 
 119 GOSUB 72 
 120 IF PEEK (631)=0 THEN127 
 121 GOTO 119 
 122 W=W+1:IF W>20 THENW=20 
 123 IF J1<>J THENW=1 
 124 IF ME=2 THENW=W*2 
 125 O=O-((J>3AND J<7)-(J<3OR J>7))*W:Z=Z-((J>1AND J<5)-(J>5))*W:IF ME=2 THENW=W/2 
 126 N=0:J1=J:RETURN 
 127 IF O>9GOTO 119 
 128 IF Z<42GOTO 182 
 129 IF Z>182AND Z<239GOTO 344 
 130 IF Z>99AND Z<137AND D<>1GOTO 420 
 131 IF Z>43AND Z<98GOTO 455 
 132 IF Z>137AND Z<182GOTO 555 
 133 IF Z>239AND Z<293AND P=0GOTO 784 
 134 IF Z>292AND P=0 THENPRINT"{CLR}":SYS E,0:GOTO 898 
 135 GOTO 119 
 136 : 
 137 : 
 138 REM ********************************* 
 139 REM *        LINIEN-BLINKEN         * 
 140 REM ********************************* 
 141 : 
 142 IF N=0 THENRETURN 
 143 SYS L4,PA,PB,Z,O,2,B 
 144 IF U=1OR ME=3 THENN=1-N:RETURN 
 145 SYS L4,Z,O,PC,PD,2,B:N=1-N:RETURN 
 146 : 
 147 : 
 148 REM ********************************* 
 149 REM *   TASTATURABFRAGE (BLINKEN)   * 
 150 REM ********************************* 
 151 : 
 152 A=ASC (A$) 
 153 N=1-N:GOSUB 142:N=1-N:IF ME=3GOTO 159 
 154 IF A=147 THENGOSUB 65:POKE 40783,0:B=2:GOTO 183 
 155 IF A=76 THENGOSUB 142:GOSUB 170:IF U=0GOTO 189 
 156 IF A=95GOTO 213 
 157 IF A=67 THENSYS CI,B:N=1 
 158 GOTO 198 
 159 IF A=147 THENSYS E,2:POKE 40783,0:GOTO 456 
 160 IF A=76 THENGOSUB 142:GOSUB 173:IF U=0GOTO 459 
 161 IF A=95GOTO 483 
 162 IF A=67 THENSYS CI,B:N=1 
 163 GOTO 468 
 164 : 
 165 : 
 166 REM ********************************* 
 167 REM *        LINIE LOESCHEN         * 
 168 REM ********************************* 
 169 : 
 170 GOSUB 142:U=U-1:IF U=0 THENRETURN 
 171 SYS L4,P(U-1,1)+160,P(U-1,2)+100,PC,PD,2,B 
 172 PC=P(U-1,1)+160:PD=P(U-1,2)+100:Z=PC:O=PD:RETURN 
 173 U=U-1:IF U=0 THENRETURN 
 174 SYS L4,P(U-1,0)+160,180-P(U-1,1),PA,PB,2,2 
 175 Z=PA:O=PB:PA=P(U-1,0)+160:PB=180-P(U-1,1):RETURN 
 176 : 
 177 : 
 178 REM ********************************* 
 179 REM *      FLAECHE: 2D-EINGABE      * 
 180 REM ********************************* 
 181 : 
 182 GOSUB 65:ME=1:B=3:C=0 
 183 GOSUB 66:SYS T1,2:SYS D4,1,2 
 184 U=0:SYS G,0,0,42,9,2,B 
 185 IF P THENGOSUB 61 
 186 M=0:B=2 
 187 SYS LI,160,97,160,103,1,2 
 188 SYS LI,157,100,163,100,1,2:SYS E,2 
 189 Z=160:O=100 
 190 GOSUB 72 
 191 IF A<>0GOTO 193 
 192 GOTO 197 
 193 IF A=67 THENSYS CI,B 
 194 IF A=95GOTO 213 
 195 GOTO 190 
 196 REM ***** 1. ECKPUNKT ************ 
 197 N=0:U=1:P(0,1)=Z-160:P(0,0)=0:P(0,2)=O-100:PA=Z:PB=O:PC=Z:PD=O 
 198 GOSUB 143:GOSUB 77:IF A$<>""GOTO 152 
 199 IF J=0 THENW=0:GOTO 198 
 200 GOSUB 142:IF J=128 THEN202 
 201 GOSUB 122:GOTO 198 
 202 IF PC=ZAND PD=OGOTO 198 
 203 IF U>29GOTO 198 
 204 SYS L4,PC,PD,Z,O,2,2 
 205 U=U+1:PC=Z:PD=O:P(U-1,1)=PC-160:P(U-1,0)=0:P(U-1,2)=PD-100 
 206 GOTO 198 
 207 : 
 208 : 
 209 REM ******************************** 
 210 REM *     FLAECHE: EINFUEGEN (3D)   * 
 211 REM ******************************** 
 212 : 
 213 VF=0:IF U>1 THENGOSUB 321:DG=D-1 
 214 C=0:ME=1:SYS L,1:M=0:Z=160:O=100 
 215 GOSUB 65:IF U<2 THENME=0:GOSUB 62:GOTO 118 
 216 SYS DA,1,DG,1,2 
 217 SYS CO,2,2:SYS FL,4 
 218 IF C=0 THENGOSUB 69 
 219 IF C<>0 THEN223 
 220 B=2:GOSUB 72:IF A<>0GOTO 227 
 221 IF Z<42AND O<9 THENA=95:GOTO 227 
 222 WQ=1 
 223 GOSUB 749:IF C=0 THEN220 
 224 GOSUB 762:IF C=0 THEN220 
 225 SYS UM,C,1,DG,D,EI,J,W:GOSUB 75 
 226 SYS L,1:M=0:GOTO 215 
 227 GOSUB 769:SYS E,1:IF SVGOTO 225 
 228 IF A=95GOTO 325 
 229 IF A=48 THENC=10:GOSUB 772:DF=DG:C=1:GOSUB 548:GOTO 225 
 230 IF A=43 THENVF=DG:GOTO 240 
 231 IF A=76 THENGOSUB 254:GOTO 325 
 232 IF A=42AND VF<>0GOTO 304 
 233 GOTO 220 
 234 : 
 235 : 
 236 REM ******************************** 
 237 REM *     FLAECHE DUPLIZIEREN      * 
 238 REM ******************************** 
 239 : 
 240 SYS L,1:SYS CO,1,1:S=0 
 241 SYS D2,DG:GOSUB 74:IF S<>2 THENZE=1:GOSUB 915:IF F THENSYS E,1:GOTO 247 
 242 SYS D2,DG+1:XB=USR (1):IF S=2 THENSA=K 
 243 SYS C2,V+1,D,SA,VB:D=D+1:SYS C2,V+(XB-XA)+1,D,SA,VB 
 244 FOR I=XA TOXB-1:V=V+1 
 245 SYS D1,I:SYS C1,USR (1),USR (2),USR (3),V 
 246 NEXT :IF S=2 THENRETURN 
 247 DG=D-1:GOTO 214 
 248 : 
 249 : 
 250 REM ******************************** 
 251 REM *    FLAECHE LOESCHEN          * 
 252 REM ******************************** 
 253 : 
 254 SYS L,1 
 255 SYS D2,DG:YA=USR (1):SYS D2,DG+1:XB=USR (1):SU=XB-YA 
 256 FOR I=DG+1 TOD+1 
 257 SYS D2,I:GOSUB 74:IF XA<SU THENXA=SU 
 258 SYS C2,XA-SU,I-1,SA,VB:NEXT :D=D-1 
 259 FOR I=XB TOV+SU 
 260 SYS D1,I:SYS C1,USR (1),USR (2),USR (3),I-SU:NEXT :V=V-SU 
 261 RETURN 
 262 : 
 263 : 
 264 REM ******************************** 
 265 REM *    MAKRO LOESCHEN            * 
 266 REM ******************************** 
 267 : 
 268 X2=1:Y2=0:SYS L,1:B$(DG)="" 
 269 FOR I=1 TOD-1 
 270 SYS D2,I:GOSUB 74:IF SA=DGGOTO 280 
 271 IF SA>DG THENSA=SA-1 
 272 SYS D2,I+1:Z1=USR (2):XB=USR (1) 
 273 SYS C2,Y2+1,X2,SA,VB:SYS C2,Y2+(XB-XA)+1,X2+1,Z1,VB 
 274 X2=X2+1 
 275 FOR Q=XA TOXB-1 
 276 SYS D1,Q:X1=USR (1):Y1=USR (2):Z1=USR (3) 
 277 IF X1=-3276.8 THENX1=0:Y1=0:Z1=0 
 278 Y2=Y2+1:SYS C1,X1,Y1,Z1,Y2 
 279 NEXT 
 280 NEXT 
 281 FOR I=X2+1 TOD:SYS C2,0,I,0,0:NEXT 
 282 V=Y2:D=X2 
 283 FOR I=DG TOMM+1:B$(I)=B$(I+1):NEXT :RETURN 
 284 : 
 285 : 
 286 REM ******************************** 
 287 REM *    MAKRO DUPLIZIEREN         * 
 288 REM ******************************** 
 289 : 
 290 GOSUB 890:SYS L,1:SYS CO,1,1 
 291 DR=D:DH=DG 
 292 GOSUB 918:GOSUB 915:IF F THENK=K-1:RETURN 
 293 FOR X2=1 TODR-1 
 294 SYS D2,X2:SA=USR (2) 
 295 IF SA=DH THENDG=X2:GOSUB 241 
 296 NEXT 
 297 RETURN 
 298 : 
 299 : 
 300 REM ******************************** 
 301 REM *    FLAECHEN VERBINDEN        * 
 302 REM ******************************** 
 303 : 
 304 SYS L,1:SYS D2,VF:XA=USR (1):VB=USR (3):SYS D2,VF+1:XB=USR (1):SYS D2,DG:YA=USR (1) 
 305 ZE=4*(XB-XA):GOSUB 915:IF FGOTO 314 
 306 FOR I=XA TOXB:IF I=XB THENX1=X3:Y1=Y3:Z1=Z3:PA=X4:PB=Y4:PC=Z4:GOTO 310 
 307 SYS D1,I:X1=USR (1):Y1=USR (2):Z1=USR (3):SYS D1,YA+(I-XA) 
 308 PA=USR (1):PB=USR (2):PC=USR (3) 
 309 IF I=XA THENX3=X1:Y3=Y1:Z3=Z1:X4=PA:Y4=PB:Z4=PC:GOTO 313 
 310 SYS C2,V+1,D,MM,VB:D=D+1:SYS C2,V+5,D,MM,VB 
 311 V=V+1:SYS C1,X1,Y1,Z1,V:V=V+1:SYS C1,X2,Y2,Z2,V 
 312 V=V+1:SYS C1,PD,PE,PF,V:V=V+1:SYS C1,PA,PB,PC,V:SYS DA,1,D-1,1,1 
 313 GOSUB 78:PD=PA:PE=PB:PF=PC:NEXT 
 314 GOSUB 65:SYS DA,1,DG,1,2:SYS CO,2,2:SYS FL,4:GOTO 220 
 315 : 
 316 : 
 317 REM ******************************** 
 318 REM * FLAECHE IN SPEICHER CODIEREN * 
 319 REM ******************************** 
 320 : 
 321 IF P=0 THENMM=0 
 322 ZE=1:GOSUB 915:IF F THENRETURN 
 323 SYS C2,V+1,D,MM,VN:SYS C2,V+U+1,D+1,MM,VN:D=D+1:FOR Q=1 TOU 
 324 SYS C1,P(Q-1,0),P(Q-1,1),P(Q-1,2),Q+V:NEXT :V=V+U:RETURN 
 325 GOSUB 70:SYS L,1:IF A<>76 THENSYS CO,1,1 
 326 ME=1:IF A=43 THENA=0:GOTO 215 
 327 ME=0:GOSUB 62:M=0:GOTO 118 
 328 : 
 329 : 
 330 REM ******************************** 
 331 REM *     SYMBOLE INVERTIEREN      * 
 332 REM ******************************** 
 333 : 
 334 IF C<>0AND EI<>1 THENSYS G,PA,PB,PC,PD,2,B 
 335 IF C=7 THENSYS 52664,2,B 
 336 IF C=8 THENSYS 52835,2,B 
 337 IF C=9 THENSYS 53045,2,B 
 338 RETURN 
 339 : 
 340 REM ******************************** 
 341 REM *    3D-ZEICHNEN               * 
 342 REM ******************************** 
 343 : 
 344 SYS CO,2,0:SYS D3,2,2:M=1:N=0 
 345 SYS G,182,0,239,9,2,2:ME=2:SYS E,2 
 346 Z=0:O=0:PZ=0:N=0:B=2:U=0 
 347 SYS LI,78,55,82,55,2,2:SYS LI,80,53,80,57,2,2 
 348 SYS LI,238,55,242,55,2,2:SYS LI,240,53,240,57,2,2 
 349 SYS LI,238,145,242,145,2,2:SYS LI,240,143,240,147,2,2 
 350 IF M=0 THENRETURN 
 351 SYS C3,PZ,Z,O,2,B:N=1-N 
 352 GOSUB 77:IF A$<>""GOTO 357 
 353 IF J=0OR J=128 THENW=0:GOTO 351 
 354 IF N THENSYS C3,PZ,Z,O,2,B:N=0 
 355 IF J>128 THENGOSUB 34:GOTO 351 
 356 GOSUB 122:GOTO 351 
 357 A=ASC (A$):IF N THENSYS C3,PZ,Z,O,2,B:N=0 
 358 IF A=94GOTO 362 
 359 IF A=95 THENGOTO 413 
 360 IF A=67 THENSYS CI,B:N=1 
 361 GOTO 351 
 362 U=1:P(0,1)=Z:P(0,0)=PZ:P(0,2)=O:PA=Z:PB=O:PC=Z:PD=O:PE=PZ:PF=PZ 
 363 GOSUB 378:GOSUB 77 
 364 IF A$<>""GOTO 386 
 365 IF J=0OR J=128 THENW=0:GOTO 363 
 366 GOSUB 377:IF J>128AND U<29 THENGOSUB 34:GOTO 363 
 367 GOSUB 122:GOTO 363 
 368 GOSUB 377:SYS L3,PF,PC,PD,PZ,Z,O,1,B 
 369 U=U+1:PC=Z:PD=O:PF=PZ:P(U-1,1)=PC:P(U-1,0)=PF:P(U-1,2)=PD 
 370 GOTO 363 
 371 : 
 372 : 
 373 REM ******************************** 
 374 REM *     3D-LINIEN-BLINKEN        * 
 375 REM ******************************** 
 376 : 
 377 IF N=0 THENRETURN 
 378 SYS L3,PE,PA,PB,PZ,Z,O,2,B:IF U=1 THENN=1-N:RETURN 
 379 SYS L3,PF,PC,PD,PZ,Z,O,2,B:N=1-N:RETURN 
 380 : 
 381 : 
 382 REM ******************************** 
 383 REM *  3D-ZEICHNEN: TASTENABFRAGE  * 
 384 REM ******************************** 
 385 : 
 386 A=ASC (A$):IF A=87OR A=94GOTO 390 
 387 IF A<>147AND A<>95AND A<>76AND A<>43AND A<>70AND A<>67GOTO 363 
 388 IF A<>147GOTO 390 
 389 POKE 40783,0:SYS CO,2,0:SYS D3,2,2:GOTO 345 
 390 IF A=95GOTO 396 
 391 IF A=76GOTO 405 
 392 IF A=43 THENM=0:GOSUB 347:M=1:GOTO 397 
 393 N=1-N:GOSUB 377:N=1-N:IF A=67 THENSYS CI,B:GOTO 363 
 394 IF A=94GOTO 368 
 395 GOSUB 62:GOTO 213 
 396 IF U<2GOTO 413 
 397 ME=2:GOSUB 321:SYS E,2 
 398 M=0:FOR Q=0 TOU-1:IF Q=U THENX1=X3:Y1=Y3:Z1=Z3:GOTO 400 
 399 X1=P(Q,0):Y1=P(Q,1):Z1=P(Q,2):IF M=0 THENM=1:X3=X1:Y3=Y1:Z3=Z1:GOTO 401 
 400 SYS L3,X1,Y1,Z1,X2,Y2,Z2,1,3 
 401 GOSUB 78:NEXT 
 402 SYS L3,PE,PA,PB,PF,PC,PD,1,3 
 403 IF A=43 THENN=1:U=0:B=2:GOTO 346 
 404 N=0:SYS E,1:ME=0:GOTO 118 
 405 GOSUB 377:IF U=<1 THENZ=0:O=0:PZ=0:U=0:GOTO 344 
 406 SYS CO,2,0:U=U-2:SYS G,182,0,239,9,2,2:SYS D3,2,2 
 407 M=0:FOR Q=0 TOU 
 408 X1=P(Q,0):Y1=P(Q,1):Z1=P(Q,2):IF M=0 THENGOSUB 347:M=1:GOTO 410 
 409 SYS L3,X1,Y1,Z1,X2,Y2,Z2,1,2 
 410 GOSUB 78:NEXT 
 411 PC=P(U,1):PD=P(U,2):PF=P(U,0):Z=PC:O=PD:PZ=PF:U=U+1 
 412 GOTO 363 
 413 IF U<2 THENME=0:SYS E,1:N=0:GOTO 118 
 414 : 
 415 : 
 416 REM ******************************** 
 417 REM *     FORM                     * 
 418 REM ******************************** 
 419 : 
 420 GOSUB 63:GOSUB 69:SYS CO,2,0:ME=0 
 421 Z=160:O=100:FO=1:JL=0:C=0 
 422 SYS E,1:B=1 
 423 ZN=0:IF P THENDG=MM:ZN=5 
 424 GOSUB 72 
 425 IF A<>0GOTO 435 
 426 IF Z>99AND Z<137AND O<9 THENA=95:GOTO 435 
 427 WQ=1 
 428 GOSUB 749:IF C=0GOTO 424 
 429 GOSUB 762:IF C=0GOTO 424 
 430 GOSUB 70:SYS UM,C,ZN,DG,D,EI,J,W:GOSUB 75 
 431 IF JL=0 THENGOSUB 442:GOSUB 334:SYS E,1:SYS CO,2,0 
 432 IF JL>0 THENJL=JL+1 
 433 GOSUB 69:IF C=0GOTO 424 
 434 GOTO 428 
 435 GOSUB 769:SYS L,1:SYS E,1:IF SVGOTO 430 
 436 GOSUB 446:IF JL>1AND A=133 THENPOKE RF,14:GOSUB 442:SYS E,1:SYS CO,2,0:JL=0 
 437 IF A=95AND JL>1 THENPOKE RF,14:GOSUB 442:SYS E,1:SYS CO,2,0:JL=0 
 438 IF A=95 THENGOSUB 63:GOSUB 70:ME=0:FO=0:GOTO 118 
 439 IF A=48 THENC=10:GOSUB 772:DF=DG:C=ZN:GOSUB 548:GOTO 430 
 440 GOTO 424 
 441 REM *** NEUE GESAMTDARSTELLUNG ** 
 442 SYS E,2:B=1:GOSUB 31 
 443 GOSUB 67:GOSUB 63 
 444 IF P=1 THENGOSUB 59 
 445 SYS DA,ZN,DG,1,B:GOSUB 75:GOSUB 69:RETURN 
 446 IF A=133AND JL=0 THENJL=1:POKE RF,6:RETURN 
 447 IF A=133AND JL=1 THENJL=0:POKE RF,14 
 448 RETURN 
 449 : 
 450 : 
 451 REM ******************************** 
 452 REM *     ROTATION: 2D-EINGABE     * 
 453 REM ******************************** 
 454 : 
 455 U=0:GOSUB 64:ME=3 
 456 GOSUB 65:SYS T1,2:GOSUB 66:SYS G,43,0,98,9,2,2 
 457 SYS D4,2,2:SYS 22659,1,2:SYS E,2 
 458 IF P THENGOSUB 61 
 459 Z=160:O=170:B=2 
 460 SYS J2,Z,O,1:GOSUB 73 
 461 IF A<>0GOTO 463 
 462 GOTO 467 
 463 IF A=95 THENSYS E,1:GOSUB 64:ME=0:GOTO 118 
 464 IF A=67 THENSYS CI,B 
 465 IF A=147 THENSYS E,2:POKE 40783,0:GOTO 456 
 466 GOTO 460 
 467 N=0:U=1:P(0,0)=Z-160:P(0,1)=180-O:PA=Z:PB=O 
 468 GOSUB 143:GOSUB 77:IF A$<>""GOTO 152 
 469 IF J=0 THENW=0:GOTO 468 
 470 GOSUB 142:IF J=128AND U<29 THENGOSUB 473:GOTO 468 
 471 GOSUB 122:IF O>180 THENO=180 
 472 GOTO 468 
 473 IF PA=ZAND PB=O THENRETURN 
 474 IF U>48 THENRETURN 
 475 SYS LI,Z,O,PA,PB,2,2 
 476 PA=Z:PB=O:P(U,0)=Z-160:P(U,1)=180-O:U=U+1:RETURN 
 477 : 
 478 : 
 479 REM ******************************** 
 480 REM *    ROTATION: EINFUEGEN (3D)  * 
 481 REM ******************************** 
 482 : 
 483 SYS E,0:GOSUB 55:K=K+1 
 484 GOSUB 41:GOSUB 43:PRINT"{HOME,DOWN,SPACE,RVSON,6SPACE}ROTATIONSKOERPER ERSTELLEN{6SPACE,RVOFF,SPACE}" 
 485 FC=0:INPUT"{DOWN,2RIGHT}ANZAHL DER FACETTEN{3SPACE}";FC 
 486 IF FC<3 THENPRINT"{2UP}";:GOTO 485 
 487 INPUT"{DOWN,2RIGHT}ROTATIONSWINKEL{9SPACE}360{5LEFT}";RW 
 488 IF ABS (RW)>360 THENPRINT"{2UP}";:GOTO 487 
 489 INPUT"{DOWN,2RIGHT}VERBINDUNGSVORSCHRIFT{3SPACE}0{3LEFT}";VB 
 490 IF VB<0OR VB>3 THENPRINT"{2UP}";:GOTO 489 
 491 IF P<>0GOTO 498 
 492 IF S=2 THENSYS E,0:GOSUB 55:PRINT"{CLR,DOWN}"; 
 493 N$="":INPUT"{DOWN,2RIGHT}MAKRO - NAME{10SPACE}";N$ 
 494 IF (N$="←"OR N$="")AND S=2 THENPRINT"{2UP}";:GOTO 493 
 495 GOSUB 79:IF N1 THENK=K-1:A=95:GOTO 463 
 496 GOSUB 49:IF N1 THENPRINT"{2UP}";:GOTO 493 
 497 B$(K)=N$ 
 498 SYS E,1:W=RW*π/180:IF S=2 THENS=0:GOTO 515 
 499 ZE=4*(U-1)*FC:GOSUB 915:IF F THENB$(K)="":GOTO 484 
 500 GOSUB 890:Z=0:FOR I=0 TOW-.000001STEP W/FC:W=W/FC:W1=SIN (I):W2=COS (I):PC=SIN (I+W) 
 501 PD=COS (I+W):FOR Q=0 TOU-2 
 502 SYS C2,V+1,D,K,VB:SYS C2,V+5,D+1,K,VB:D=D+1:V=V+1 
 503 SYS C1,W1*P(Q,1),W2*P(Q,1),P(Q,0),V:V=V+1 
 504 SYS C1,PC*P(Q,1),PD*P(Q,1),P(Q,0),V:V=V+1 
 505 SYS C1,PC*P(Q+1,1),PD*P(Q+1,1),P(Q+1,0),V:V=V+1 
 506 SYS C1,W1*P(Q+1,1),W2*P(Q+1,1),P(Q+1,0),V 
 507 NEXT :W=W*FC 
 508 NEXT :DG=K 
 509 : 
 510 : 
 511 REM ******************************** 
 512 REM *      MAKROS EINFUEGEN        * 
 513 REM ******************************** 
 514 : 
 515 Z=159:O=100:JL=0:C=0 
 516 IF JL=0 THENGOSUB 539 
 517 IF JL>0 THENJL=JL+1:SYS FL,4:GOSUB 69 
 518 IF C<>0GOTO 524 
 519 GOSUB 72 
 520 IF A<>0GOTO 528 
 521 IF Z>43AND Z<98AND O<9AND AS=0 THENA=95:GOTO 528 
 522 IF Z>137AND Z<182AND O<9AND AS THENA=95:GOTO 528 
 523 WQ=1 
 524 GOSUB 749:IF C=0GOTO 519 
 525 GOSUB 762:IF C=0GOTO 519 
 526 SYS L,1 
 527 GOSUB 70:SYS UM,C,3,DG,D,EI,J,W:GOSUB 75:GOTO 516 
 528 IF (A=95OR A=43)AND JL>1 THENPOKE RF,14:SYS L,1:GOSUB 539:JL=0 
 529 IF A=76AND JL>0 THENPOKE RF,14:JL=0 
 530 IF A=95 THENSYS L,1:SYS CO,1,1:GOTO 543 
 531 GOSUB 446:IF A=133AND JL>1 THENPOKE RF,14:JL=0:SYS L,1:GOSUB 539 
 532 IF A=76 THENGOSUB 268:ME=1:K=K-1:GOTO 543 
 533 IF A=43 THENK=K+1:S=2:GOSUB 290:SYS E,1:IF F THENA=95:GOTO 528 
 534 IF A=43 THENDG=K:GOTO 492 
 535 IF A=48 THENC=10:GOSUB 772:DF=K:C=3:GOSUB 548:GOTO 527 
 536 GOSUB 769:SYS E,1:IF SVGOTO 526 
 537 GOTO 519 
 538 REM *** NEU DARSTELLEN ********** 
 539 GOSUB 65:B=2 
 540 SYS DA,3,DG,1,B 
 541 SYS CO,2,2:GOSUB 69:FO=2 
 542 SYS FL,4:RETURN 
 543 GOSUB 70:FO=0:C=0:EI=0:IF AS=0 THENGOSUB 64 
 544 IF PAND AS THENAS=0:RETURN 
 545 IF AS<>0 THENAS=0:GOSUB 59 
 546 ME=0:GOTO 118 
 547 REM *** '0' BEI UMFORMUNGEN ***** 
 548 GOSUB 70:SYS UM,1,C,DF,D,1,0,W:SYS UM,2,C,DF,D,1,0,W:EI=1:C=3:SYS E,1:RETURN 
 549 : 
 550 : 
 551 REM ******************************** 
 552 REM *     MAKRO - HAUPTMENUE       * 
 553 REM ******************************** 
 554 : 
 555 GOSUB 41 
 556 PRINT"{SPACE,RVSON,11SPACE}MAKRO -HAUPTMENUE{10SPACE,RVOFF}" 
 557 GOSUB 42 
 558 PRINT"{HOME,5DOWN,6RIGHT}A.MAKRO LADEN" 
 559 PRINT"{DOWN,6RIGHT}B.MAKRO SPEICHERN" 
 560 PRINT"{DOWN,6RIGHT}C.DISKETTENKOMMANDO SENDEN" 
 561 PRINT"{DOWN,6RIGHT}D.MAKROS AUF DISKETTE" 
 562 PRINT"{DOWN,6RIGHT}E.MAKROS IM SPEICHER" 
 563 PRINT"{DOWN,6RIGHT}F.MAKRO ERSTELLEN" 
 564 PRINT"{DOWN,6RIGHT}G.MAKRO EINFUEGEN" 
 565 PRINT"{DOWN,6RIGHT}H.ALLES ERSTELLTE ALS MAKRO" 
 566 GOSUB 81:IF (A<65OR A>72)AND A<>95GOTO 566 
 567 IF A=95 THENSYS E,1:OPEN 1,8,15,"U9":CLOSE 1:GOTO 118 
 568 ON A-64GOTO 664,644,695,706,625,575,588,614 
 569 : 
 570 : 
 571 REM ******************************** 
 572 REM *     MAKRO ERSTELLEN          * 
 573 REM ******************************** 
 574 : 
 575 IF P=1GOTO 566 
 576 GOSUB 41:GOSUB 43 
 577 PRINT"{SPACE,RVSON,11SPACE}MAKRO ERSTELLEN{12SPACE,RVOFF,SPACE}" 
 578 GOSUB 890:GOSUB 44:IF N1GOTO 555 
 579 GOSUB 49:IF N1 THENPRINT"{5UP}";:GOTO 578 
 580 B$(K+1)=N$ 
 581 P=1:K=K+1:MM=K:SYS E,1:ZW=D:GOTO 108 
 582 : 
 583 : 
 584 REM ******************************** 
 585 REM *     MAKRO EINFUEGEN          * 
 586 REM ******************************** 
 587 : 
 588 IF K=0GOTO 566 
 589 GOSUB 41:GOSUB 43:PRINT"{SPACE,RVSON,11SPACE}MAKRO EINFUEGEN{12SPACE,RVOFF,HOME}" 
 590 GOSUB 44:IF N1GOTO 555 
 591 IF N$<>B$(MM)GOTO 598 
 592 IF D=ZW THENAS=1:P=0:SYS DA,0,V,1,1:SYS E,1:K=K-1:GOTO 543 
 593 FOR I=1 TOD:SYS D2,I:SA=USR (2):IF SA>MM THENSYS C2,USR (1),I,MM,USR (3) 
 594 NEXT 
 595 ZN=4:DG=MM:SYS H,11,15,1:SYS T1,1:GOSUB 67:SYS MU,1:SYS KR,1,1 
 596 AS=1:GOSUB 59:SYS DA,ZN,DG,1,1 
 597 SYS E,1:P=0:K=MM:MM=0:DG=K:GOTO 515 
 598 GOSUB 49:IF N1GOTO 600 
 599 GOSUB 51:GOTO 555 
 600 DG=N1:I=1:K=K+1:IF P=1 THEN605 
 601 GOSUB 52:IF N1 THENK=K-1:GOTO 555 
 602 GOSUB 49:IF N1 THENPRINT"{5UP}";:GOTO 601 
 603 B$(K)=N$:I=1 
 604 GOSUB 918:GOSUB 915:IF F THENK=K-1:GOTO 555 
 605 S=2:GOSUB 291:AS=1:ZN=4:DG=K:GOSUB 65:B=1:IF PGOTO 607 
 606 GOSUB 59:GOSUB 515:AS=0:GOSUB 59:GOTO 118 
 607 GOSUB 515:AS=0:GOTO 118 
 608 : 
 609 : 
 610 REM ******************************** 
 611 REM *  ALLES ERSTELLTE ALS MAKRO   * 
 612 REM ******************************** 
 613 : 
 614 IF D=1OR PGOTO 566 
 615 GOSUB 41:GOSUB 43:PRINT"{SPACE,RVSON,6SPACE}ALLES ERSTELLTE ALS MAKRO{7SPACE,RVOFF,SPACE}" 
 616 GOSUB 44:IF N1GOTO 555 
 617 B$(1)=N$:FOR I=1 TOD:SYS D2,I:Q=USR (1):VB=USR (3):SYS C2,Q,I,1,VB:NEXT 
 618 K=1:SYS E,1:GOTO 118 
 619 : 
 620 : 
 621 REM ******************************** 
 622 REM *     MAKROS IM SPEICHER       * 
 623 REM ******************************** 
 624 : 
 625 ZA=0:A=1:E1=19:MR=K:IF P=1 THENMR=MM 
 626 IF MR=0GOTO 566 
 627 GOSUB 41 
 628 PRINT"{SPACE,RVSON,10SPACE}MAKROS IM SPEICHER{10SPACE,RVOFF,SPACE}";:IF E1>MR THENE1=MR 
 629 GOSUB 42:N1$=STR$ (1322-V):N1$=RIGHT$ ("0000"+RIGHT$ (N1$,LEN (N1$)-1),4) 
 630 PRINT"{HOME,2DOWN}":FOR I=ZA TO18:PRINT"{11RIGHT,19SPACE}":NEXT 
 631 PRINT"{HOME,2DOWN}":FOR X=A TOE1 
 632 PRINT"{3RIGHT,10SPACE}";LEFT$ (B$(X)+"..............",14):NEXT 
 633 IF E1=MR THENPRINT"{3RIGHT,5SPACE}"N1$" ECKPUNKTE FREI" 
 634 GOSUB 47 
 635 IF E1=MRGOTO 555 
 636 A=E1+1:E1=A+18:IF E1>MR THENE1=MR:IF A>MR THENA=MR-1 
 637 GOTO 630 
 638 : 
 639 : 
 640 REM ******************************** 
 641 REM *     MAKRO SPEICHERN          * 
 642 REM ******************************** 
 643 : 
 644 IF K=0GOTO 566 
 645 GOSUB 41 
 646 PRINT"{SPACE,RVSON,12SPACE}MAKRO SPEICHERN{11SPACE,RVOFF,SPACE}" 
 647 GOSUB 44:IF N1GOTO 555 
 648 GOSUB 49:IF N1GOTO 650 
 649 PRINT"{UP}":GOSUB 51:GOTO 555 
 650 N2=N1:PRINT:PRINT"{2DOWN,22RIGHT}"N$"{UP}" 
 651 N$="":INPUT"{3RIGHT}FILE{2SPACE}- NAME{5SPACE}";N$:GOSUB 79:IF N1GOTO 555 
 652 IF LEN (N$)>13 THENPRINT"{UP}";:GOTO 651 
 653 GOSUB 918:OPEN 2,8,2,"MA."+N$+",S,W":GOSUB 684:IF F<>0GOTO 555 
 654 PRINT#2,ZE:IF STGOTO 656 
 655 PRINT#2,N$:SYS 21301,D,N2 
 656 CLOSE 2:CLOSE 1:GOSUB 684:IF F=0 THENGOSUB 688 
 657 GOTO 555 
 658 : 
 659 : 
 660 REM ******************************** 
 661 REM *      MAKRO LADEN             * 
 662 REM ******************************** 
 663 : 
 664 GOSUB 41:GOSUB 43 
 665 PRINT"{SPACE,RVSON,14SPACE}MAKRO LADEN{13SPACE,RVOFF,SPACE}" 
 666 GOSUB 890:N$="":INPUT"{3DOWN,3RIGHT}FILE - NAME{5SPACE}";N$:GOSUB 79:IF N1GOTO 555 
 667 IF LEN (N$)>13 THENPRINT"{4UP}";:GOTO 666 
 668 OPEN 2,8,2,"MA."+N$+",S,R":GOSUB 684:IF F<>0GOTO 555 
 669 INPUT#2,ZE:IF STGOTO 674 
 670 GOSUB 915:IF F THENCLOSE 2:CLOSE 1:GOTO 555 
 671 INPUT#2,N$:IF STGOTO 674 
 672 K=K+1:IF P=0 THENB$(K)=N$ 
 673 SYS 21006,D,V,K 
 674 CLOSE 2:CLOSE 1:GOSUB 684:IF F=0GOTO 676 
 675 K=K-1:GOTO 555 
 676 GOSUB 688:D=PEEK (2026)+256*PEEK (2027):V=PEEK (2028)+256*PEEK (2029) 
 677 GOTO 735 
 678 : 
 679 : 
 680 REM ******************************** 
 681 REM *     DISK - STATUS            * 
 682 REM ******************************** 
 683 : 
 684 OPEN 1,8,15:INPUT#1,F,F$,T,S:IF F=0 THENRETURN 
 685 PRINT:PRINT"{2DOWN,3RIGHT,RVSON}DISKETTENFEHLER :" 
 686 PRINT"{2DOWN,2RIGHT}"F","F$","T","S 
 687 GOSUB 47 
 688 CLOSE 2:PRINT#1,"U9":CLOSE 1:RETURN 
 689 : 
 690 : 
 691 REM ******************************** 
 692 REM *     DISKETTENKOMMANDO SENDEN * 
 693 REM ******************************** 
 694 : 
 695 GOSUB 41:GOSUB 43 
 696 PRINT"{SPACE,RVSON,7SPACE}DISKETTENKOMMANDO SENDEN{7SPACE,RVOFF,SPACE}" 
 697 POKE 631,34:POKE 198,1:N$="":INPUT"{2DOWN,3RIGHT}KOMMANDO ";N$:GOSUB 79:IF N1GOTO 555 
 698 OPEN 1,8,15,N$:INPUT#1,F,F$,T,S:PRINT"{2DOWN,3RIGHT,RVSON}DISKETTENSTATUS :" 
 699 GOSUB 686:GOTO 555 
 700 : 
 701 : 
 702 REM ******************************** 
 703 REM *     MAKROS AUF DISKETTE      * 
 704 REM ******************************** 
 705 : 
 706 GOSUB 41 
 707 PRINT"{SPACE,RVSON,9SPACE}MAKROS AUF DISKETTE{10SPACE,RVOFF,SPACE}"; 
 708 PRINT:OPEN 2,8,0,"$0:MA.*=SEQ":SYS 26134:CLOSE 2 
 709 GOSUB 684:CLOSE 2:CLOSE 1:IF F=0 THENGOSUB 47 
 710 GOTO 555 
 711 : 
 712 : 
 713 REM ******************************** 
 714 REM *      PARAMETER-UEBERGABE     * 
 715 REM ******************************** 
 716 : 
 717 W2=INT (W/256):W1=W-256*W2:POKE A+I,W1:POKE A+I+1,W2:I=I+2:RETURN 
 718 POKE RF,15 
 719 PRINTCHR$ (14)CHR$ (8)"{CLR,GREY1,12DOWN,8SPACE}SYSTEMDISKETTE EINLEGEN !" 
 720 GOSUB 47:IF A$="←" THENRETURN 
 721 OPEN 2,8,2,"CAD.MAIN,P,R":CLOSE 2:GOSUB 684:IF F THENA$="←":RETURN 
 722 PRINT#1,"U9":CLOSE 1:RETURN 
 723 FOR X=1 TOK:FOR Y=1 TO13:W=PEEK (A+Y):IF W=254 THENY=13:GOTO 725 
 724 B$(X)=B$(X)+CHR$ (W) 
 725 NEXT Y:A=A+14:NEXT X:A=49153:RETURN 
 726 IF K=0 THENRETURN 
 727 FOR X=1 TOK:FOR Y=1 TOLEN (B$(X)):POKE A+Y,ASC (MID$ (B$(X),Y,1)):NEXT Y 
 728 POKE A+Y,254:A=A+14:NEXT X:A=49153:RETURN 
 729 : 
 730 : 
 731 REM ******************************** 
 732 REM *  GELADENENS MAKRO EINFUEGEN  * 
 733 REM ******************************** 
 734 : 
 735 N$=B$(K):IF PGOTO 741 
 736 GOSUB 49:IF N1<>KGOTO 738 
 737 GOTO 740 
 738 PRINT"{2DOWN}":GOSUB 52:B$(K)=N$ 
 739 PRINT"{8UP}";:GOTO 736 
 740 I=1:DH=K:DG=K:MM=K:AS=1:GOSUB 59:GOTO 597 
 741 B$(K)="" 
 742 I=1:DH=K:GOTO 605 
 743 : 
 744 : 
 745 REM ******************************** 
 746 REM *     ANGEWAEHLTES SYMBOL      * 
 747 REM ******************************** 
 748 : 
 749 IF Z>=159OR O<=100 THENC=0:RETURN 
 750 IF Z<50 THENPA=3:PC=49:PE=1:GOTO 753 
 751 IF Z<100 THENPA=50:PC=99:PE=3:GOTO 753 
 752 PA=100:PC=156:PE=2 
 753 IF O<135 THENPB=102:PD=134:PF=2::GOTO 756 
 754 IF O<165 THENPB=135:PD=164:PF=1:GOTO 756 
 755 PB=165:PD=196:PF=0 
 756 C=PF*3+PE:RETURN 
 757 : 
 758 : 
 759 REM ******************************** 
 760 REM *   VERFORMUNG UEBER JOYSTICK  * 
 761 REM ******************************** 
 762 IF WQAND EI=0 THENWQ=0:B=3:GOSUB 334 
 763 GOSUB 77 
 764 IF J=128 THEN767 
 765 IF INT (J/2)=J/2 THEN763 
 766 J=INT (J/2)+1:RETURN 
 767 B=3:GOSUB 334:C=0 
 768 RETURN 
 769 IF A<49OR A>57 THENC=0:SV=0:RETURN 
 770 A=A-48:XA=INT ((9-A)/3)*3:XB=A-INT ((A-1)/3)*3 
 771 XB=3+(XB<2)*2+(XB>2)*1:C=XA+XB:SV=C:WQ=1 
 772 EI=1:SYS L,1:SYS E,0:GOSUB 55:IF C=10GOTO 775 
 773 IF C>6 THENINPUT"{CLR,2DOWN,3RIGHT}DREHWINKEL{3SPACE}90{4LEFT}";W:GOTO 776 
 774 IF C>3 THENINPUT"{CLR,2DOWN,3RIGHT}VERSCHIEBUNGSSUMMAND{3SPACE}50{4LEFT}";W:GOTO 776 
 775 INPUT"{CLR,2DOWN,3RIGHT}VERZERRUNGSFAKTOR{3SPACE}1.5{5LEFT}";W:GOTO 776 
 776 IF W=0 THENC=0:SV=0:EI=0:SYS FL,4 
 777 RETURN 
 778 : 
 779 : 
 780 REM ******************************** 
 781 REM *     HAUPTMENUE LOESCHEN      * 
 782 REM ******************************** 
 783 : 
 784 GOSUB 56 
 785 GOSUB 41 
 786 PRINT"{SPACE,RVSON,8SPACE}HAUPTMENUE 'LOESCHEN'{9SPACE,RVOFF,SPACE}"; 
 787 GOSUB 42 
 788 PRINT"{HOME,6DOWN,6RIGHT}A. FLAECHEN DURCHBLAETTERN" 
 789 PRINT"{DOWN,6RIGHT}B. MAKROS DURCHBLAETTERN" 
 790 PRINT"{DOWN,6RIGHT}C. BEKANNTES MAKRO LOESCHEN" 
 791 PRINT"{DOWN,6RIGHT}D. ALLES LOESCHEN " 
 792 PRINT"{DOWN,6RIGHT}E. VERBINDUNGSVORSCHRIFT" 
 793 GOSUB 81:IF (A<65OR A>69)AND A<>95GOTO 793 
 794 IF A=95GOTO 880 
 795 ON A-64GOTO 802,828,854,866,877 
 796 : 
 797 : 
 798 REM ******************************** 
 799 REM *    FLAECHEN DURCHBLAETTERN   * 
 800 REM ******************************** 
 801 : 
 802 IF D=1GOTO 793 
 803 SYS E,1:F=1:JL=0:N1=D-1:MO=1 
 804 GOSUB 92 
 805 IF A=86 THENSYS D2,F:SYS C2,USR (1),F,USR (2),VB 
 806 IF A=95AND JL>0 THENPOKE RF,14:GOSUB 820:GOSUB 56:GOTO 118 
 807 IF A=95 THENSYS L,1:GOSUB 56:GOTO 118 
 808 GOSUB 446:IF A=133AND JL>1 THENJL=0:POKE RF,14:GOSUB 820:F=F-1:GOTO 804 
 809 IF A=94GOTO 814 
 810 IF A=76AND JL>0 THENJL=JL+1:DG=F:SYS L,1:GOSUB 254:F=F-1:N1=D-1:GOTO 804 
 811 IF A=76GOTO 818 
 812 SYS FL,4:GOSUB 97:GOTO 805 
 813 REM ***** '↑' ******************* 
 814 POKE RF,14:SYS L,1:B=2:GOSUB 31 
 815 GOSUB 56:DG=F:SYS G,0,0,42,9,2,3 
 816 SYS DA,2,DG,1,2:SYS CO,1,0:U=2:GOTO 214 
 817 REM *********** 'L' ************* 
 818 SYS L,1:B=2:GOSUB 31:GOSUB 58:DG=F 
 819 SYS DA,2,DG,1,2:SYS E,2:SYS CO,1,0:SYS E,1:GOSUB 254:N1=D-1:GOTO 804 
 820 SYS L,1:B=2:GOSUB 31:GOSUB 58:SYS DA,0,D,1,2:SYS E,2 
 821 SYS CO,1,0:SYS E,1:RETURN 
 822 : 
 823 : 
 824 REM ******************************** 
 825 REM *     MAKROS DURCHBLAETTERN    * 
 826 REM ******************************** 
 827 : 
 828 IF K=0GOTO 793 
 829 SYS E,1:F=1:MO=3:N1=K 
 830 GOSUB 92 
 831 IF A=95 THENSYS L,1:GOSUB 56:GOTO 118 
 832 IF A<>86GOTO 836 
 833 FOR I=1 TOD:SYS D2,I:IF USR (2)<>KGOTO 835 
 834 SYS C2,USR (1),I,USR (2),VB 
 835 NEXT I:SYS E,1 
 836 IF A=94GOTO 840 
 837 IF A=76GOTO 845 
 838 SYS FL,4:GOSUB 97:GOTO 831 
 839 REM ******* '↑' ***************** 
 840 SYS L,1:SYS CO,2,0:SYS E,2 
 841 B$=B$(F):GOSUB 61:AS=0:ZN=0:GOSUB 58 
 842 B=1:GOSUB 31:GOSUB 59:DG=F:SYS DA,4,DG,1,1:SYS E,1 
 843 AS=1:GOTO 515 
 844 REM ******* 'L' ***************** 
 845 SYS L,1:SYS CO,2,0:SYS E,2:GOSUB 58 
 846 B=1:GOSUB 31:SYS DA,4,F,1,1:SYS E,1 
 847 DG=F:GOSUB 268:K=K-1:N1=K:GOTO 118 
 848 : 
 849 : 
 850 REM ******************************** 
 851 REM *   BEKANNTES MAKRO LOESCHEN   * 
 852 REM ******************************** 
 853 : 
 854 IF K=0GOTO 793 
 855 GOSUB 41:GOSUB 43 
 856 PRINT"{SPACE,RVSON,2SPACE}MAKRO MIT BEKANNTEM NAMEN LOESCHEN{2SPACE,RVOFF,SPACE}":GOSUB 44 
 857 IF N1GOTO 785 
 858 GOSUB 49:IF N1 THENF=N1:MO=3:N1=K:GOTO 830 
 859 SYS E,1:GOSUB 56:GOTO 118 
 860 : 
 861 : 
 862 REM ******************************** 
 863 REM *     ALLES LOESCHEN           * 
 864 REM ******************************** 
 865 : 
 866 PRINT"{5DOWN,6RIGHT,RVSON}SIND SIE SICHER ?{RVOFF,2SPACE}"; 
 867 GOSUB 47 
 868 PRINTA$:IF A$<>"J"GOTO 870 
 869 SYS 25919:CLR :D=1:GOTO 12 
 870 GOSUB 56:SYS E,1:GOTO 118 
 871 : 
 872 : 
 873 REM ******************************** 
 874 REM *     VERBINDUNGSVORSCHRIFT    * 
 875 REM ******************************** 
 876 : 
 877 I=1:GOSUB 41:GOSUB 43 
 878 PRINT"{SPACE,RVSON,3SPACE}MOMENTANE{2SPACE}VERBINDUNGSVORSCHRIFT{3SPACE,RVOFF,SPACE}" 
 879 GOSUB 84 
 880 SYS E,1:GOSUB 56:GOTO 118 
 881 : 
 882 : 
 883 REM ******************************** 
 884 REM *    MEHR ALS 63 MAKROS ?      * 
 885 REM ******************************** 
 886 : 
 887 SYS L,1:I=1:SYS E,0:GOSUB 55:GOSUB 41 
 888 PRINT"{CLR}":GOSUB 84 
 889 SYS FL,4:RETURN 
 890 IF K<64AND MM<64 THENRETURN 
 891 FOR I=1 TOD:SYS D2,I:GOSUB 74:IF SA<>0 THENSA=SA-1 
 892 SYS C2,XA,I,SA,VB:NEXT :FOR I=2 TOMM:B$(I-1)=B$(I):NEXT :MM=MM-1:K=K-1:RETURN 
 893 : 
 894 : 
 895 REM ******************************** 
 896 REM *    PARAMETER CODIEREN        * 
 897 REM ********************************* 
 898 GOSUB 718:IF A$="←" THENSYS E,1:POKE RF,14:GOTO 118 
 899 A=49153:POKE A+919,255:I=900:W=K:GOSUB 717:W=D:GOSUB 717:W=V:GOSUB 717 
 900 GOSUB 726:POKE 836,0:PRINT"{GREY3,CLR}LOAD"CHR$ (34)"CAD.MAIN"CHR$ (34)",8" 
 901 PRINT"{4DOWN}RUN:":POKE 631,19:POKE 632,13:POKE 633,13:POKE 198,3:NEW 
 902 : 
 903 : 
 904 REM ******************************** 
 905 REM *    PARAMETER DECODIEREN      * 
 906 REM ******************************** 
 907 A=49153:K=PEEK (A+900)+256*PEEK (A+901):D=PEEK (A+902)+256*PEEK (A+903) 
 908 V=PEEK (A+904)+256*PEEK (A+905):GOSUB 723:RETURN 
 909 : 
 910 : 
 911 REM ******************************** 
 912 REM *   ZU VIELE DATEN ?           * 
 913 REM ******************************** 
 914 : 
 915 IF V+ZE<1320 THENF=0:RETURN 
 916 F=1:SYS L,1:SYS E,0:GOSUB 55:PRINT"{CLR,3DOWN,4SPACE}FUER DIESE OPERATION REICHT DER " 
 917 PRINT"{DOWN,5SPACE}SPEICHERPLATZ NICHT MEHR AUS!":GOSUB 47:RETURN 
 918 ZE=0:FOR I=1 TOD-1:SYS D2,I:SR=USR (1) 
 919 IF USR (2)=DH THENSYS D2,I+1:ZE=ZE+USR (1)-SR 
 920 NEXT I:RETURN 
Listing 3. Eingabeeinheit
|
5 rem  **********************************
10 rem *   giga-cad     graphic-system  *
15 rem *        'cad.paint'             *
20 rem * by s. vilsmeier & s. lippstreu *
25 rem **********************************
30 :
35 :
40 a=peek(836)+1:poke836,a:ifa=1thenpoke55,0:poke56,56:clr:a=1
45 ifa=1thenload"hires5.cad.obj",8,1
50 ifa=2thenload"hires7.cad.obj",8,1
55 dimq(30,3),b$(64):c1=39718:d1=40052:d2=40344
60 print"{clr}{blk}";:ifdf=0thengosub1305
65 :
70 :
75 rem **********************************
80 rem *      sprungtabelle bzuegl. gr  *
85 rem **********************************
90 :
95 sys37021:open1,8,15,"xr-":print#1,"u9":close1:poke192,192
100 ifgr<>1theninput"{clr}{gry1}{down}{down}{down}{down}{rght}{rght}{rght}{rght}File - Name ";n$:print"{clr}"
105 gosub995:ifgr<>.5andwqthengosub870
110 g1=gr*h:g2=g1:ifgr=1goto425
115 ifgr=2andri=1goto165
120 ifgr=2andri=0goto370
125 ifgr=.5goto220
130 ifgr=3goto460
135 :
140 :
145 rem *********************************
150 rem *     10 - fache aufloesung     *
155 rem *********************************
160 :
165 g1=(gr+1.125)*h:g2=(gr+1.2)*h:forfi=1to5
170 fk=fi*200-200:gosub615:ifrnthengosub1065
175 ifrnandfi=5thensys21764,0,199,319,199,1,3
180 n1$="hz.":br=1:gosub1020:br=2:gosub1020
185 nextfi:goto1225
190 :
195 :
200 rem *********************************
205 rem *       film - schleife         *
210 rem *********************************
215 :
220 a=49153:i=942:dr=peek(a+940):dl=peek(a+941):gosub1190:fx=w
225 gosub1190:fy=w:gosub1190:fz=w:gosub1190:vf=w
230 gosub1190:kf=w:vx=wx:vy=wy:vz=wz:du=peek(a+952):f3=f1:f4=f2:h2=h:ke=ke-kf
235 ifdu=0thendu=dr
240 forfi=1to24:h3=(vf-100)/100/24*fi+1
245 ifdu=1thensys22873,8,0,1,df,1,0,15*fi
250 ifdu=2thensys22873,7,0,1,df,1,0,15*fi
255 ifdu=3thensys22873,9,0,1,df,1,0,15*fi
260 ifzvthensys22873,8,0,1,df,1,0,zv
265 w1=cos(fi*~/12):w2=sin(fi*~/12)
270 ifdl=1thenwy=vy*w1:wz=vz*w2
275 ifdl=2thenwx=vx*w1:wz=vz*w2
280 ifdl=3thenwx=vx*w1:wy=vy*w2
285 a1=a1+fx:a2=a2+fy:a3=a3+fz
290 ke=ke+kf:ifvf<>0thenh=h2*h3:f2=f4-(100/h3-100)/h2:f1=f3-(160/h3-160)/h2
295 g1=gr*h:g2=g1:ifwq=1and(fi=1ordl<>0ordr<>0)thengosub870
300 gosub615:m=0:n2$=n$:ifrnthensys51800,0,0,159,95,1,3
305 open2,8,2,"fi."+left$(n2$,10)+str$(fi)+",p,w":gosub1080:iff=0goto320
310 iff=99thenclose2:gosub990:goto325
315 close2:open1,8,15,"s:fi."+left$(n2$,10)+str$(fi):close1:goto305
320 sys22299:close2:close1:gosub990
325 if(wm=1orb=1)andm=0thensys50292,2,0:m=1:n2$="h."+n$:goto305
330 nextfi:wx=vx:wy=vy:wz=vz:a1=a1-fi*fx:a2=a2-fi*fy:a3=a3-fi*fz:h=h2
335 f1=f3:f2=f4:goto1225
340 :
345 :
350 rem *********************************
355 rem *      4 - fache aufloesung     *
360 rem *********************************
365 :
370 forfi=1to2
375 fk=(fi-1)*200:gosub615:ifrnthengosub1065
380 ifrnandfi=2thensys21764,0,199,319,199,1,3
385 n1$="hv.":br=1:gosub1020:br=2:gosub1020
390 nextfi:goto1225
395 :
400 :
405 rem *********************************
410 rem *        einzelne grafik        *
415 rem *********************************
420 :
425 gosub615:goto1225
430 :
435 :
440 rem *********************************
445 rem *        einzelnes filmbild     *
450 rem *********************************
455 :
460 gr=.5:gosub615:m=0:ifrnthensys51800,0,0,159,95,1,2
465 open2,8,2,"fi."+n$+",p,w":gosub1080:iff=0goto480
470 iff=99thenclose2:gosub990:goto490
475 close2:open1,8,15,"s:fi."+n$:close1:goto465
480 sys22299:close2:close1:gosub990
485 if(wm=1orb=1)andm=0thensys50292,2,0:m=1:n$="h."+n$:goto465
490 goto1225
495 :
500 :
505 rem *********************************
510 rem *umrechnung in bildschirmkkoord.*
515 rem *********************************
520 :
525 sysd2,i:xa=usr(1):vb=usr(3):sysd2,i+1:xb=usr(1):vr=0:ifvb=1thenvr=1
530 un=0:fora=xatoxb-1
535 sysd1,a:x1=usr(2):y1=usr(1):z1=usr(3)
540 iffl=0then565
545 ify1-a2=0thent=0:goto565
550 t=y1/(y1-a2)
555 x1=x1-t*(x1-a1)
560 z1=z1-t*(z1-a3)
565 x1=((x1+160)-f1)*g1:z1=((z1+100)-f2)*g2
570 ifrithend5=x1:x1=640-z1:z1=d5
575 z1=z1-fk:sysc1,x1,y1,z1,a:q(un,1)=x1:q(un,2)=y1:q(un,3)=z1:un=un+1:nexta
580 return
585 :
590 :
595 rem *********************************
600 rem *         extrema               *
605 rem *********************************
610 :
615 sys50181,11,15,1:sys50181,11,15,2:bs=1:ifgr=.5andwm=0andb=0thenbs=2
620 sys50707,bs
625 bv=2:ifgr>.5andwm=0thenbv=1
630 ifmcthensys21839,11,12,0,bv
635 fm=0:ifborgr>1thensys51480,0:fm=1
640 ifgr=.5andfithensys51800,310,0,319,194,1,3:sys50859,311,1,318,fi*8+1,1,3
645 gg=gr*320-1:ec=8000:ed=-ec:fori=1todf-1
650 qx=8000:px=-qx:qy=qx:py=px:gosub525
655 forx=0toun-1
660 ifq(x,1)<qxthenqx=q(x,1)
665 ifq(x,1)>pxthenpx=q(x,1)
670 ifq(x,3)<qythenqy=q(x,3)
675 ifq(x,3)>pythenpy=q(x,3)
680 nextx
685 ifqy<ecthenec=qy
690 ifpy>edthened=py
695 ifqy<0thenqy=0
700 ifpy>199thenpy=199
705 ifqy>199thenqy=199
710 ifpy<0thenpy=0
715 if(qx>gg)or(px<0)thenpoke18908+2*i,py:poke18909+2*i,qy:goto725
720 poke18908+2*i,qy:poke18909+2*i,py
725 nexti
730 if(ed<0)or(ec>199)thenreturn
735 ifed>199thened=199
740 ifec<0thenec=0
745 if(gr=.5)and(ed>95)thened=95
750 :
755 :
760 rem *********************************
765 rem *   eigentliche darstellung     *
770 rem *********************************
775 :
780 sys14857,sl,wq,mc,wm,b,se,ke,df,gr,ec,ed,bs
785 :
790 rem ******* systemdaten laden *******
795 sys51507,1:sys50707,0
800 open2,8,2,"cad.paint.datas,s,r":gosub1075:iff=0goto830
805 gosub1050:print"{clr}{down}{down} Diskette mit Systemdaten einlegen !"
810 print"{down}{down} Noch ein Versuch (j/n) ?"
815 gosub1055:ifa$="j"thenclose2:close1:print"{clr}":goto800
820 ifa$="n"thenclose2:close1:sys25919:print"{clr}":df=1:vi=0:mn=0:goto1225
825 goto815
830 sys22541,df,vi:close2:close1:sys40206,vi+1,df,0,0
835 gosub990:return
840 :
845 :
850 rem *********************************
855 rem *   winkel des normalenvektors  *
860 rem *********************************
865 :
870 ou=sqr(wx*wx+wy*wy+wz*wz):fori=1todf-1
875 sysd2,i:xa=usr(1):sysd2,i+1:xb=usr(1)
880 pn=0:fora=xatoxb-1
885 sysd1,a:q(pn,1)=usr(1):q(pn,2)=usr(2):q(pn,3)=usr(3):pn=pn+1
890 ifpn<2goto910
895 ifq(pn-2,1)<>q(pn-1,1)goto910
900 ifq(pn-2,2)<>q(pn-1,2)goto910
905 ifq(pn-2,3)=q(pn-1,3)thenpn=pn-1
910 nexta
915 ax=q(0,1)-q(2,1):bx=q(1,1)-q(2,1)
920 ay=q(0,2)-q(2,2):by=q(1,2)-q(2,2)
925 az=q(0,3)-q(2,3):bz=q(1,3)-q(2,3)
930 nx=ay*bz-az*by:ny=az*bx-ax*bz:nz=ax*by-ay*bx
935 bn=sqr(nx*nx+ny*ny+nz*nz):ifbn=0thenbn=.00000001
940 wi=(nx*wy+ny*wx+nz*wz)/(bn*ou)
945 fa=192-abs(int(wi*192)):iffa<0thenfa=0
950 poke20058+i,fa
955 nexti:return
960 :
965 :
970 rem *********************************
975 rem *      unterprogramme           *
980 rem *********************************
985 :
990 open1,8,15,"u9":close1:return
995 open1,8,15,"s:cad.paint.datas":close1
1000 open2,8,2,"cad.paint.datas,s,w":gosub1080:iff=0goto1015
1005 iff=99thenclose2:gosub990:return
1010 close2:goto995
1015 sys22520,df,vi:close2:close1:gosub990:return
1020 x$=n1$+left$(n$,10)+str$(fi*2+(br-2))+",p,w":open2,8,2,x$:gosub1080
1025 iff=0goto1040
1030 iff=99thenclose2:gosub990:return
1035 close2:open1,8,15,"s:"+x$:close1:goto1020
1040 sys26068,br:close2:close1
1045 gosub990:return
1050 sys51507,1:sys50707,0:printchr$(14)chr$(8)"{clr}":return
1055 geta$:ifa$=""goto1055
1060 return
1065 sys21764,0,0,0,199,1,1:iffi=1thensys21764,0,0,319,0,1,3
1070 sys21764,319,0,319,199,1,2:return
1075 open1,8,15:input#1,f,f$,t,s:return
1080 gosub1075:iff=0thenreturn
1085 close1:gosub1050:print"{clr}{down} {rvon}Diskettenstatus :{down}":printf","f$","t","s
1090 print"{down}{down} Noch ein Versuch (j/n) ?"
1095 gosub1055:ifa$="n"thenf=99:print"{clr}":return
1100 ifa$="j"thenf=1:print"{clr}":return
1105 goto1095
1110 :
1115 :
1120 rem ********************************
1125 rem *    parameter - uebergabe     *
1130 rem ********************************
1135 :
1140 w2=int(w/256):w1=w-256*w2:pokea+i,w1:pokea+i+1,w2:i=i+2:return
1145 w=w*10+32768:gosub1140:return
1150 gosub1050:print"{gry1}{clr}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}        Systemdiskette einlegen !":poke192,0
1155 gosub1055:open2,8,2,"cad.main,p,r":close2:gosub1075:close1:iff<>0goto1150
1160 poke646,peek(53281):return
1165 forx=1tomn:fory=1to13:w=peek(a+y):ifw=254theny=13:goto1175
1170 b$(x)=b$(x)+chr$(w)
1175 nexty:a=a+14:nextx:a=49153:return
1180 forx=1tomn:fory=1tolen(b$(x)):pokea+y,asc(mid$(b$(x),y,1)):nexty
1185 pokea+y,254:nextx:a=49153:return
1190 w=((peek(a+i)+256*peek(a+i+1))-32768)/10:i=i+2:return
1195 :
1200 :
1205 rem ********************************
1210 rem *    parameter codieren        *
1215 rem ********************************
1220 :
1225 a=49153:w=fl+2*wq+4*mc+8*ri+16*se+32*wm+64*b+128*hd:pokea+912,w
1230 i=900:w=mn:gosub1140:w=df:gosub1140:w=vi:gosub1140
1235 w=a1:gosub1145:w=a2:gosub1145:w=a3:gosub1145:i=i+1:w=wx:gosub1145
1240 w=wy:gosub1145:w=wz:gosub1145:i=i+2:w=f1:gosub1145:w=f2:gosub1145
1245 w=ke:gosub1145:pokea+919,gr*2:pokea+954,sl:i=898:w=zv:gosub1145
1250 pokea+920,rn:w$=str$(h):pokea+927,len(w$)
1255 forw=1tolen(w$):pokea+927+w,asc(mid$(w$,w,1)):nextw:ifmnthengosub1180
1260 gosub1150:poke192,0:open1,8,15,"xr+":print#1,"u9":close1
1265 poke836,0:print"{clr}load"chr$(34)"cad.main"chr$(34)",8":print"{down}{down}{down}{down}run:"
1270 poke55,0:poke56,80:clr:poke53263,1:poke631,19:poke632,13:poke633,13
1275 poke198,3:new
1280 :
1285 rem ********************************
1290 rem *    parameter decodieren      *
1295 rem ********************************
1300 :
1305 a=49153:mn=peek(a+900):df=peek(a+902)+256*peek(a+903)
1310 vi=peek(a+904)+256*peek(a+905):i=906:gosub1190:a1=w:gosub1190:a2=w
1315 gosub1190:a3=w:i=i+1:gosub1190:wx=w:gosub1190:wy=w:gosub1190:wz=w
1320 i=i+2:gosub1190:f1=w:gosub1190:f2=w:gosub1190:ke=w:gr=peek(a+919)/2
1325 i=898:gosub1190:zv=w:w=peek(a+912)
1330 fl=wand1:wq=(wand2)/2:mc=(wand4)/4:ri=(wand8)/8:se=(wand16)/16
1335 wm=(wand32)/32:b=(wand64)/64:hd=(wand128)/128:gosub1165:rn=peek(a+920)
1340 n$="":forx=1topeek(a+927):n$=n$+chr$(peek(a+927+x)):nextx:h=val(n$)
1345 sl=peek(a+954):return
  5 REM  ********************************** 
 10 REM *   GIGA-CAD     GRAPHIC-SYSTEM  * 
 15 REM *        'CAD.PAINT'             * 
 20 REM * BY S. VILSMEIER & S. LIPPSTREU * 
 25 REM ********************************** 
 30 : 
 35 : 
 40 A=PEEK (836)+1:POKE 836,A:IF A=1 THENPOKE 55,0:POKE 56,56:CLR :A=1 
 45 IF A=1 THENLOAD "HIRES5.CAD.OBJ",8,1 
 50 IF A=2 THENLOAD "HIRES7.CAD.OBJ",8,1 
 55 DIM Q(30,3),B$(64):C1=39718:D1=40052:D2=40344 
 60 PRINT"{CLR,BLACK}";:IF DF=0 THENGOSUB 1305 
 65 : 
 70 : 
 75 REM ********************************** 
 80 REM *      SPRUNGTABELLE BZUEGL. GR  * 
 85 REM ********************************** 
 90 : 
 95 SYS 37021:OPEN 1,8,15,"XR-":PRINT#1,"U9":CLOSE 1:POKE 192,192 
 100 IF GR<>1 THENINPUT"{CLR,GREY1,4DOWN,4RIGHT}FILE - NAME ";N$:PRINT"{CLR}" 
 105 GOSUB 995:IF GR<>.5AND WQ THENGOSUB 870 
 110 G1=GR*H:G2=G1:IF GR=1GOTO 425 
 115 IF GR=2AND RI=1GOTO 165 
 120 IF GR=2AND RI=0GOTO 370 
 125 IF GR=.5GOTO 220 
 130 IF GR=3GOTO 460 
 135 : 
 140 : 
 145 REM ********************************* 
 150 REM *     10 - FACHE AUFLOESUNG     * 
 155 REM ********************************* 
 160 : 
 165 G1=(GR+1.125)*H:G2=(GR+1.2)*H:FOR FI=1 TO5 
 170 FK=FI*200-200:GOSUB 615:IF RN THENGOSUB 1065 
 175 IF RNAND FI=5 THENSYS 21764,0,199,319,199,1,3 
 180 N1$="HZ.":BR=1:GOSUB 1020:BR=2:GOSUB 1020 
 185 NEXT FI:GOTO 1225 
 190 : 
 195 : 
 200 REM ********************************* 
 205 REM *       FILM - SCHLEIFE         * 
 210 REM ********************************* 
 215 : 
 220 A=49153:I=942:DR=PEEK (A+940):DL=PEEK (A+941):GOSUB 1190:FX=W 
 225 GOSUB 1190:FY=W:GOSUB 1190:FZ=W:GOSUB 1190:VF=W 
 230 GOSUB 1190:KF=W:VX=WX:VY=WY:VZ=WZ:DU=PEEK (A+952):F3=F1:F4=F2:H2=H:KE=KE-KF 
 235 IF DU=0 THENDU=DR 
 240 FOR FI=1 TO24:H3=(VF-100)/100/24*FI+1 
 245 IF DU=1 THENSYS 22873,8,0,1,DF,1,0,15*FI 
 250 IF DU=2 THENSYS 22873,7,0,1,DF,1,0,15*FI 
 255 IF DU=3 THENSYS 22873,9,0,1,DF,1,0,15*FI 
 260 IF ZV THENSYS 22873,8,0,1,DF,1,0,ZV 
 265 W1=COS (FI*π/12):W2=SIN (FI*π/12) 
 270 IF DL=1 THENWY=VY*W1:WZ=VZ*W2 
 275 IF DL=2 THENWX=VX*W1:WZ=VZ*W2 
 280 IF DL=3 THENWX=VX*W1:WY=VY*W2 
 285 A1=A1+FX:A2=A2+FY:A3=A3+FZ 
 290 KE=KE+KF:IF VF<>0 THENH=H2*H3:F2=F4-(100/H3-100)/H2:F1=F3-(160/H3-160)/H2 
 295 G1=GR*H:G2=G1:IF WQ=1AND (FI=1OR DL<>0OR DR<>0) THENGOSUB 870 
 300 GOSUB 615:M=0:N2$=N$:IF RN THENSYS 51800,0,0,159,95,1,3 
 305 OPEN 2,8,2,"FI."+LEFT$ (N2$,10)+STR$ (FI)+",P,W":GOSUB 1080:IF F=0GOTO 320 
 310 IF F=99 THENCLOSE 2:GOSUB 990:GOTO 325 
 315 CLOSE 2:OPEN 1,8,15,"S:FI."+LEFT$ (N2$,10)+STR$ (FI):CLOSE 1:GOTO 305 
 320 SYS 22299:CLOSE 2:CLOSE 1:GOSUB 990 
 325 IF (WM=1OR B=1)AND M=0 THENSYS 50292,2,0:M=1:N2$="H."+N$:GOTO 305 
 330 NEXT FI:WX=VX:WY=VY:WZ=VZ:A1=A1-FI*FX:A2=A2-FI*FY:A3=A3-FI*FZ:H=H2 
 335 F1=F3:F2=F4:GOTO 1225 
 340 : 
 345 : 
 350 REM ********************************* 
 355 REM *      4 - FACHE AUFLOESUNG     * 
 360 REM ********************************* 
 365 : 
 370 FOR FI=1 TO2 
 375 FK=(FI-1)*200:GOSUB 615:IF RN THENGOSUB 1065 
 380 IF RNAND FI=2 THENSYS 21764,0,199,319,199,1,3 
 385 N1$="HV.":BR=1:GOSUB 1020:BR=2:GOSUB 1020 
 390 NEXT FI:GOTO 1225 
 395 : 
 400 : 
 405 REM ********************************* 
 410 REM *        EINZELNE GRAFIK        * 
 415 REM ********************************* 
 420 : 
 425 GOSUB 615:GOTO 1225 
 430 : 
 435 : 
 440 REM ********************************* 
 445 REM *        EINZELNES FILMBILD     * 
 450 REM ********************************* 
 455 : 
 460 GR=.5:GOSUB 615:M=0:IF RN THENSYS 51800,0,0,159,95,1,2 
 465 OPEN 2,8,2,"FI."+N$+",P,W":GOSUB 1080:IF F=0GOTO 480 
 470 IF F=99 THENCLOSE 2:GOSUB 990:GOTO 490 
 475 CLOSE 2:OPEN 1,8,15,"S:FI."+N$:CLOSE 1:GOTO 465 
 480 SYS 22299:CLOSE 2:CLOSE 1:GOSUB 990 
 485 IF (WM=1OR B=1)AND M=0 THENSYS 50292,2,0:M=1:N$="H."+N$:GOTO 465 
 490 GOTO 1225 
 495 : 
 500 : 
 505 REM ********************************* 
 510 REM *UMRECHNUNG IN BILDSCHIRMKKOORD.* 
 515 REM ********************************* 
 520 : 
 525 SYS D2,I:XA=USR (1):VB=USR (3):SYS D2,I+1:XB=USR (1):VR=0:IF VB=1 THENVR=1 
 530 UN=0:FOR A=XA TOXB-1 
 535 SYS D1,A:X1=USR (2):Y1=USR (1):Z1=USR (3) 
 540 IF FL=0 THEN565 
 545 IF Y1-A2=0 THENT=0:GOTO 565 
 550 T=Y1/(Y1-A2) 
 555 X1=X1-T*(X1-A1) 
 560 Z1=Z1-T*(Z1-A3) 
 565 X1=((X1+160)-F1)*G1:Z1=((Z1+100)-F2)*G2 
 570 IF RI THEND5=X1:X1=640-Z1:Z1=D5 
 575 Z1=Z1-FK:SYS C1,X1,Y1,Z1,A:Q(UN,1)=X1:Q(UN,2)=Y1:Q(UN,3)=Z1:UN=UN+1:NEXT A 
 580 RETURN 
 585 : 
 590 : 
 595 REM ********************************* 
 600 REM *         EXTREMA               * 
 605 REM ********************************* 
 610 : 
 615 SYS 50181,11,15,1:SYS 50181,11,15,2:BS=1:IF GR=.5AND WM=0AND B=0 THENBS=2 
 620 SYS 50707,BS 
 625 BV=2:IF GR>.5AND WM=0 THENBV=1 
 630 IF MC THENSYS 21839,11,12,0,BV 
 635 FM=0:IF BOR GR>1 THENSYS 51480,0:FM=1 
 640 IF GR=.5AND FI THENSYS 51800,310,0,319,194,1,3:SYS 50859,311,1,318,FI*8+1,1,3 
 645 GG=GR*320-1:EC=8000:ED=-EC:FOR I=1 TODF-1 
 650 QX=8000:PX=-QX:QY=QX:PY=PX:GOSUB 525 
 655 FOR X=0 TOUN-1 
 660 IF Q(X,1)<QX THENQX=Q(X,1) 
 665 IF Q(X,1)>PX THENPX=Q(X,1) 
 670 IF Q(X,3)<QY THENQY=Q(X,3) 
 675 IF Q(X,3)>PY THENPY=Q(X,3) 
 680 NEXT X 
 685 IF QY<EC THENEC=QY 
 690 IF PY>ED THENED=PY 
 695 IF QY<0 THENQY=0 
 700 IF PY>199 THENPY=199 
 705 IF QY>199 THENQY=199 
 710 IF PY<0 THENPY=0 
 715 IF (QX>GG)OR (PX<0) THENPOKE 18908+2*I,PY:POKE 18909+2*I,QY:GOTO 725 
 720 POKE 18908+2*I,QY:POKE 18909+2*I,PY 
 725 NEXT I 
 730 IF (ED<0)OR (EC>199) THENRETURN 
 735 IF ED>199 THENED=199 
 740 IF EC<0 THENEC=0 
 745 IF (GR=.5)AND (ED>95) THENED=95 
 750 : 
 755 : 
 760 REM ********************************* 
 765 REM *   EIGENTLICHE DARSTELLUNG     * 
 770 REM ********************************* 
 775 : 
 780 SYS 14857,SL,WQ,MC,WM,B,SE,KE,DF,GR,EC,ED,BS 
 785 : 
 790 REM ******* SYSTEMDATEN LADEN ******* 
 795 SYS 51507,1:SYS 50707,0 
 800 OPEN 2,8,2,"CAD.PAINT.DATAS,S,R":GOSUB 1075:IF F=0GOTO 830 
 805 GOSUB 1050:PRINT"{CLR,2DOWN,SPACE}DISKETTE MIT SYSTEMDATEN EINLEGEN !" 
 810 PRINT"{2DOWN,SPACE}NOCH EIN VERSUCH (J/N) ?" 
 815 GOSUB 1055:IF A$="J" THENCLOSE 2:CLOSE 1:PRINT"{CLR}":GOTO 800 
 820 IF A$="N" THENCLOSE 2:CLOSE 1:SYS 25919:PRINT"{CLR}":DF=1:VI=0:MN=0:GOTO 1225 
 825 GOTO 815 
 830 SYS 22541,DF,VI:CLOSE 2:CLOSE 1:SYS 40206,VI+1,DF,0,0 
 835 GOSUB 990:RETURN 
 840 : 
 845 : 
 850 REM ********************************* 
 855 REM *   WINKEL DES NORMALENVEKTORS  * 
 860 REM ********************************* 
 865 : 
 870 OU=SQR (WX*WX+WY*WY+WZ*WZ):FOR I=1 TODF-1 
 875 SYS D2,I:XA=USR (1):SYS D2,I+1:XB=USR (1) 
 880 PN=0:FOR A=XA TOXB-1 
 885 SYS D1,A:Q(PN,1)=USR (1):Q(PN,2)=USR (2):Q(PN,3)=USR (3):PN=PN+1 
 890 IF PN<2GOTO 910 
 895 IF Q(PN-2,1)<>Q(PN-1,1)GOTO 910 
 900 IF Q(PN-2,2)<>Q(PN-1,2)GOTO 910 
 905 IF Q(PN-2,3)=Q(PN-1,3) THENPN=PN-1 
 910 NEXT A 
 915 AX=Q(0,1)-Q(2,1):BX=Q(1,1)-Q(2,1) 
 920 AY=Q(0,2)-Q(2,2):BY=Q(1,2)-Q(2,2) 
 925 AZ=Q(0,3)-Q(2,3):BZ=Q(1,3)-Q(2,3) 
 930 NX=AY*BZ-AZ*BY:NY=AZ*BX-AX*BZ:NZ=AX*BY-AY*BX 
 935 BN=SQR (NX*NX+NY*NY+NZ*NZ):IF BN=0 THENBN=.00000001 
 940 WI=(NX*WY+NY*WX+NZ*WZ)/(BN*OU) 
 945 FA=192-ABS (INT (WI*192)):IF FA<0 THENFA=0 
 950 POKE 20058+I,FA 
 955 NEXT I:RETURN 
 960 : 
 965 : 
 970 REM ********************************* 
 975 REM *      UNTERPROGRAMME           * 
 980 REM ********************************* 
 985 : 
 990 OPEN 1,8,15,"U9":CLOSE 1:RETURN 
 995 OPEN 1,8,15,"S:CAD.PAINT.DATAS":CLOSE 1 
 1000 OPEN 2,8,2,"CAD.PAINT.DATAS,S,W":GOSUB 1080:IF F=0GOTO 1015 
 1005 IF F=99 THENCLOSE 2:GOSUB 990:RETURN 
 1010 CLOSE 2:GOTO 995 
 1015 SYS 22520,DF,VI:CLOSE 2:CLOSE 1:GOSUB 990:RETURN 
 1020 X$=N1$+LEFT$ (N$,10)+STR$ (FI*2+(BR-2))+",P,W":OPEN 2,8,2,X$:GOSUB 1080 
 1025 IF F=0GOTO 1040 
 1030 IF F=99 THENCLOSE 2:GOSUB 990:RETURN 
 1035 CLOSE 2:OPEN 1,8,15,"S:"+X$:CLOSE 1:GOTO 1020 
 1040 SYS 26068,BR:CLOSE 2:CLOSE 1 
 1045 GOSUB 990:RETURN 
 1050 SYS 51507,1:SYS 50707,0:PRINTCHR$ (14)CHR$ (8)"{CLR}":RETURN 
 1055 GET A$:IF A$=""GOTO 1055 
 1060 RETURN 
 1065 SYS 21764,0,0,0,199,1,1:IF FI=1 THENSYS 21764,0,0,319,0,1,3 
 1070 SYS 21764,319,0,319,199,1,2:RETURN 
 1075 OPEN 1,8,15:INPUT#1,F,F$,T,S:RETURN 
 1080 GOSUB 1075:IF F=0 THENRETURN 
 1085 CLOSE 1:GOSUB 1050:PRINT"{CLR,DOWN,SPACE,RVSON}DISKETTENSTATUS :{DOWN}":PRINTF","F$","T","S 
 1090 PRINT"{2DOWN,SPACE}NOCH EIN VERSUCH (J/N) ?" 
 1095 GOSUB 1055:IF A$="N" THENF=99:PRINT"{CLR}":RETURN 
 1100 IF A$="J" THENF=1:PRINT"{CLR}":RETURN 
 1105 GOTO 1095 
 1110 : 
 1115 : 
 1120 REM ******************************** 
 1125 REM *    PARAMETER - UEBERGABE     * 
 1130 REM ******************************** 
 1135 : 
 1140 W2=INT (W/256):W1=W-256*W2:POKE A+I,W1:POKE A+I+1,W2:I=I+2:RETURN 
 1145 W=W*10+32768:GOSUB 1140:RETURN 
 1150 GOSUB 1050:PRINT"{GREY1,CLR,12DOWN,8SPACE}SYSTEMDISKETTE EINLEGEN !":POKE 192,0 
 1155 GOSUB 1055:OPEN 2,8,2,"CAD.MAIN,P,R":CLOSE 2:GOSUB 1075:CLOSE 1:IF F<>0GOTO 1150 
 1160 POKE 646,PEEK (53281):RETURN 
 1165 FOR X=1 TOMN:FOR Y=1 TO13:W=PEEK (A+Y):IF W=254 THENY=13:GOTO 1175 
 1170 B$(X)=B$(X)+CHR$ (W) 
 1175 NEXT Y:A=A+14:NEXT X:A=49153:RETURN 
 1180 FOR X=1 TOMN:FOR Y=1 TOLEN (B$(X)):POKE A+Y,ASC (MID$ (B$(X),Y,1)):NEXT Y 
 1185 POKE A+Y,254:NEXT X:A=49153:RETURN 
 1190 W=((PEEK (A+I)+256*PEEK (A+I+1))-32768)/10:I=I+2:RETURN 
 1195 : 
 1200 : 
 1205 REM ******************************** 
 1210 REM *    PARAMETER CODIEREN        * 
 1215 REM ******************************** 
 1220 : 
 1225 A=49153:W=FL+2*WQ+4*MC+8*RI+16*SE+32*WM+64*B+128*HD:POKE A+912,W 
 1230 I=900:W=MN:GOSUB 1140:W=DF:GOSUB 1140:W=VI:GOSUB 1140 
 1235 W=A1:GOSUB 1145:W=A2:GOSUB 1145:W=A3:GOSUB 1145:I=I+1:W=WX:GOSUB 1145 
 1240 W=WY:GOSUB 1145:W=WZ:GOSUB 1145:I=I+2:W=F1:GOSUB 1145:W=F2:GOSUB 1145 
 1245 W=KE:GOSUB 1145:POKE A+919,GR*2:POKE A+954,SL:I=898:W=ZV:GOSUB 1145 
 1250 POKE A+920,RN:W$=STR$ (H):POKE A+927,LEN (W$) 
 1255 FOR W=1 TOLEN (W$):POKE A+927+W,ASC (MID$ (W$,W,1)):NEXT W:IF MN THENGOSUB 1180 
 1260 GOSUB 1150:POKE 192,0:OPEN 1,8,15,"XR+":PRINT#1,"U9":CLOSE 1 
 1265 POKE 836,0:PRINT"{CLR}LOAD"CHR$ (34)"CAD.MAIN"CHR$ (34)",8":PRINT"{DOWN,3DOWN}RUN:" 
 1270 POKE 55,0:POKE 56,80:CLR :POKE 53263,1:POKE 631,19:POKE 632,13:POKE 633,13 
 1275 POKE 198,3:NEW 
 1280 : 
 1285 REM ******************************** 
 1290 REM *    PARAMETER DECODIEREN      * 
 1295 REM ******************************** 
 1300 : 
 1305 A=49153:MN=PEEK (A+900):DF=PEEK (A+902)+256*PEEK (A+903) 
 1310 VI=PEEK (A+904)+256*PEEK (A+905):I=906:GOSUB 1190:A1=W:GOSUB 1190:A2=W 
 1315 GOSUB 1190:A3=W:I=I+1:GOSUB 1190:WX=W:GOSUB 1190:WY=W:GOSUB 1190:WZ=W 
 1320 I=I+2:GOSUB 1190:F1=W:GOSUB 1190:F2=W:GOSUB 1190:KE=W:GR=PEEK (A+919)/2 
 1325 I=898:GOSUB 1190:ZV=W:W=PEEK (A+912) 
 1330 FL=WAND 1:WQ=(WAND 2)/2:MC=(WAND 4)/4:RI=(WAND 8)/8:SE=(WAND 16)/16 
 1335 WM=(WAND 32)/32:B=(WAND 64)/64:HD=(WAND 128)/128:GOSUB 1165:RN=PEEK (A+920) 
 1340 N$="":FOR X=1 TOPEEK (A+927):N$=N$+CHR$ (PEEK (A+927+X)):NEXT X:H=VAL (N$) 
 1345 SL=PEEK (A+954):RETURN 
Listing 4. Schattierungsroutine
|
5 rem  **********************************
10 rem *   giga-cad     graphic-system  *
15 rem *          'cad.movie'           *
20 rem * by s. vilsmeier & s. lippstreu *
25 rem **********************************
30 :
35 :
40 a=peek(836)+1:poke836,a:ifa=1thenload"movie.cad.obj",8,1
45 poke55,0:poke56,24:clr
50 c1=11:c4=15:c5=15:c2=12:c3=0
55 poke53280,14:poke53281,15:poke646,11
60 open1,8,15,"u9":close1:printchr$(14);chr$(8);
65 :
70 :
75 print"{clr}{rvon}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D}{CBM-D} {rvof}";
80 print"{rvon} oo                                  oo {rvof}";
85 print"{rvon} {rvof}  {rvon}(       Movie - Hauptmenue       ){rvof}  {rvon} {rvof}";
90 print"{rvon} ><                                  >< {rvof}";
95 print"{rvon}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C}{CBM-C} {rvof}";
100 print"{rvon}{CBM-D}{rvof}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{rvon}{CBM-F}{rvof}";
105 fori=1to18:print"{CBM-H}                                      {CBM-N}";:next
110 print"{rvon}{CBM-C}{rvof}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{home}":poke2023,254:poke56295,11
115 print"{home}{down}{down}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght} A. - Film laden"
120 print"{down}{rght}{rght}{rght}{rght} B. - Einzelnes Bild laden"
125 print"{down}{rght}{rght}{rght}{rght} C. - Diskettenkommando senden"
130 print"{down}{rght}{rght}{rght}{rght} D. - Directory"
135 print"{down}{rght}{rght}{rght}{rght} E. - Ablauf : zyklisch        ";
140 ifzthenprint"{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}vor-/rueckwaerts";
145 print:print"{down}{rght}{rght}{rght}{rght} F. - Modus  : Hires     ";
150 ifmthenprint"{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}Multicolor";
155 print:print"{down}{rght}{rght}{rght}{rght} G. - Farben aendern"
160 print"{down}{rght}{rght}{rght}{rght} H. - Film ansehen":poke198,0
165 getx$:ifx$<"a"orx$>"h"goto165
170 onasc(x$)-64goto185,350,310,275,400,405,420,485
175 :
180 :
185 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
190 print" {rvon}              Film laden              "
195 gosub495:n$="":input"{home}{down}{down}{down}{down}{down}{rght}{rght}File - Name ";n$:ifn$=""orn$="_"goto55
200 iflen(n$)>10goto195
205 a=6144:forx=1to24:print"{home}{down}{down}{down}{down}{down}{down}{down}  Bild"x
210 open2,8,2,"fi."+n$+str$(x)+",p,r":gosub230:iffgoto55
215 sys50187,a:close2:close1:a=a+2048:ifa=49152thena=51200
220 nextx
225 goto55
230 open1,8,15
235 input#1,f,f$,t,s:iff=0thenreturn
240 print:print"{down} {rvon}Diskettenstatus :"
245 print"{down}"f","f$","t","s
250 poke198,0
255 getx$:ifx$=""goto255
260 close2:close1:return
265 :
270 :
275 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
280 print" {rvon}          Directory anzeigen          ":print
285 open1,8,15:open2,8,0,"$0":gosub235:iffgoto55
290 sys50772:close2:gosub235:iff=0thengosub250
295 goto55
300 :
305 :
310 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
315 print" {rvon}       Diskettenkommando senden       ":gosub495
320 poke631,34:poke198,1
325 input"{home}{down}{down}{down}{down}{down}  Kommando ";c$:ifc$=""goto55
330 open1,8,15,c$:gosub235:iff=0thengosub240
335 goto55
340 :
345 :
350 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
355 print" {rvon}         Einzelnes Bild laden         ":gosub495
360 input"{home}{down}{down}{down}{down}{down}{rght}{rght}File - Name des Bildes ";n$:ifn$=""goto55
365 iflen(n$)>13goto360
370 print"{home}{down}{down}{down}{down}{down}{down}{down}  An welche Stelle im Film soll das"
375 n=-1:input"{down}  Bild geladen werden    ";n
380 ifn<1orn>24goto370
385 a=4096+n*2048:ifn>21thena=a+2048
390 open2,8,2,"fi."+n$+",p,r":gosub230:iffgoto55
395 sys50187,a:close2:close1:goto55
400 z=1-z:goto115
405 m=1-m:goto115
410 :
415 :
420 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
425 print" {rvon}            Farben aendern            ":gosub495
430 ifmgoto455
435 print"{home}{down}{down}{down}  Vordergrund  "c1;:input"{left}{left}{left}{left}{left}";c1:ifc1<0orc1>15goto435
440 print"{home}{down}{down}{down}{down}{down}  Hintergrund  "c4;:input"{left}{left}{left}{left}{left}";c4:ifc4<0orc4>15goto440
445 print"{home}{down}{down}{down}{down}{down}{down}{down}  Rand         "c5;:input"{left}{left}{left}{left}{left}";c5:ifc5<0orc5>15goto445
450 goto55
455 print"{home}{down}{down}{down} Farbe 1      "c1;:input"{left}{left}{left}{left}{left}";c1:ifc1<0orc1>15goto455
460 print"{home}{down}{down}{down}{down}{down} Farbe 2      "c2;:input"{left}{left}{left}{left}{left}";c2:ifc2<0orc2>15goto460
465 print"{home}{down}{down}{down}{down}{down}{down}{down} Farbe 3      "c3;:input"{left}{left}{left}{left}{left}";c3:ifc3<0orc3>15goto465
470 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down} Hintergrund  "c4;:input"{left}{left}{left}{left}{left}";c4:ifc4<0orc4>15goto470
475 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down} Rand         "c5;:input"{left}{left}{left}{left}{left}";c5:ifc5<0orc5>15goto475
480 goto55
485 print"{clr}";:ifmthenpoke53280,c5:poke53281,c4:sys50284,z,m,c1,c2,c3:goto55
490 poke53280,c5:sys50284,z,m,c1,c4,c3:goto55
495 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down} {CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{home}":return
  5 REM  ********************************** 
 10 REM *   GIGA-CAD     GRAPHIC-SYSTEM  * 
 15 REM *          'CAD.MOVIE'           * 
 20 REM * BY S. VILSMEIER & S. LIPPSTREU * 
 25 REM ********************************** 
 30 : 
 35 : 
 40 A=PEEK (836)+1:POKE 836,A:IF A=1 THENLOAD "MOVIE.CAD.OBJ",8,1 
 45 POKE 55,0:POKE 56,24:CLR 
 50 C1=11:C4=15:C5=15:C2=12:C3=0 
 55 POKE 53280,14:POKE 53281,15:POKE 646,11 
 60 OPEN 1,8,15,"U9":CLOSE 1:PRINTCHR$ (14);CHR$ (8); 
 65 : 
 70 : 
 75 PRINT"{CLR,RVSON}DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD{SPACE,RVOFF}"; 
 80 PRINT"{RVSON,SPACE}OO{34SPACE}OO{SPACE,RVOFF}"; 
 85 PRINT"{RVSON,SPACE,RVOFF,2SPACE,RVSON}({7SPACE}MOVIE - HAUPTMENUE{7SPACE}){RVOFF,2SPACE,RVSON,SPACE,RVOFF}"; 
 90 PRINT"{RVSON,SPACE}><{34SPACE}><{SPACE,RVOFF}"; 
 95 PRINT"{RVSON}CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC{SPACE,RVOFF}"; 
 100 PRINT"{RVSON}D{RVOFF}YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY{RVSON}F{RVOFF}"; 
 105 FOR I=1 TO18:PRINT"H{38SPACE}N";:NEXT 
 110 PRINT"{RVSON}C{RVOFF}PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP{HOME}":POKE 2023,254:POKE 56295,11 
 115 PRINT"{HOME,7DOWN,4RIGHT,SPACE}A. - FILM LADEN" 
 120 PRINT"{DOWN,4RIGHT,SPACE}B. - EINZELNES BILD LADEN" 
 125 PRINT"{DOWN,4RIGHT,SPACE}C. - DISKETTENKOMMANDO SENDEN" 
 130 PRINT"{DOWN,4RIGHT,SPACE}D. - DIRECTORY" 
 135 PRINT"{DOWN,4RIGHT,SPACE}E. - ABLAUF : ZYKLISCH{8SPACE}"; 
 140 IF Z THENPRINT"{16LEFT}VOR-/RUECKWAERTS"; 
 145 PRINT:PRINT"{DOWN,4RIGHT,SPACE}F. - MODUS{2SPACE}: HIRES{5SPACE}"; 
 150 IF M THENPRINT"{10LEFT}MULTICOLOR"; 
 155 PRINT:PRINT"{DOWN,4RIGHT,SPACE}G. - FARBEN AENDERN" 
 160 PRINT"{DOWN,4RIGHT,SPACE}H. - FILM ANSEHEN":POKE 198,0 
 165 GET X$:IF X$<"A"OR X$>"H"GOTO 165 
 170 ON ASC (X$)-64GOTO 185,350,310,275,400,405,420,485 
 175 : 
 180 : 
 185 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 190 PRINT"{SPACE,RVSON,14SPACE}FILM LADEN{14SPACE}" 
 195 GOSUB 495:N$="":INPUT"{HOME,5DOWN,2RIGHT}FILE - NAME ";N$:IF N$=""OR N$="←"GOTO 55 
 200 IF LEN (N$)>10GOTO 195 
 205 A=6144:FOR X=1 TO24:PRINT"{HOME,7DOWN,2SPACE}BILD"X 
 210 OPEN 2,8,2,"FI."+N$+STR$ (X)+",P,R":GOSUB 230:IF FGOTO 55 
 215 SYS 50187,A:CLOSE 2:CLOSE 1:A=A+2048:IF A=49152 THENA=51200 
 220 NEXT X 
 225 GOTO 55 
 230 OPEN 1,8,15 
 235 INPUT#1,F,F$,T,S:IF F=0 THENRETURN 
 240 PRINT:PRINT"{DOWN,SPACE,RVSON}DISKETTENSTATUS :" 
 245 PRINT"{DOWN}"F","F$","T","S 
 250 POKE 198,0 
 255 GET X$:IF X$=""GOTO 255 
 260 CLOSE 2:CLOSE 1:RETURN 
 265 : 
 270 : 
 275 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 280 PRINT"{SPACE,RVSON,10SPACE}DIRECTORY ANZEIGEN{10SPACE}":PRINT 
 285 OPEN 1,8,15:OPEN 2,8,0,"$0":GOSUB 235:IF FGOTO 55 
 290 SYS 50772:CLOSE 2:GOSUB 235:IF F=0 THENGOSUB 250 
 295 GOTO 55 
 300 : 
 305 : 
 310 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 315 PRINT"{SPACE,RVSON,7SPACE}DISKETTENKOMMANDO SENDEN{7SPACE}":GOSUB 495 
 320 POKE 631,34:POKE 198,1 
 325 INPUT"{HOME,5DOWN,2SPACE}KOMMANDO ";C$:IF C$=""GOTO 55 
 330 OPEN 1,8,15,C$:GOSUB 235:IF F=0 THENGOSUB 240 
 335 GOTO 55 
 340 : 
 345 : 
 350 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 355 PRINT"{SPACE,RVSON,9SPACE}EINZELNES BILD LADEN{9SPACE}":GOSUB 495 
 360 INPUT"{HOME,5DOWN,2RIGHT}FILE - NAME DES BILDES ";N$:IF N$=""GOTO 55 
 365 IF LEN (N$)>13GOTO 360 
 370 PRINT"{HOME,7DOWN,2SPACE}AN WELCHE STELLE IM FILM SOLL DAS" 
 375 N=-1:INPUT"{DOWN,2SPACE}BILD GELADEN WERDEN{4SPACE}";N 
 380 IF N<1OR N>24GOTO 370 
 385 A=4096+N*2048:IF N>21 THENA=A+2048 
 390 OPEN 2,8,2,"FI."+N$+",P,R":GOSUB 230:IF FGOTO 55 
 395 SYS 50187,A:CLOSE 2:CLOSE 1:GOTO 55 
 400 Z=1-Z:GOTO 115 
 405 M=1-M:GOTO 115 
 410 : 
 415 : 
 420 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 425 PRINT"{SPACE,RVSON,12SPACE}FARBEN AENDERN{12SPACE}":GOSUB 495 
 430 IF MGOTO 455 
 435 PRINT"{HOME,3DOWN,2SPACE}VORDERGRUND{2SPACE}"C1;:INPUT"{5LEFT}";C1:IF C1<0OR C1>15GOTO 435 
 440 PRINT"{HOME,5DOWN,2SPACE}HINTERGRUND{2SPACE}"C4;:INPUT"{5LEFT}";C4:IF C4<0OR C4>15GOTO 440 
 445 PRINT"{HOME,7DOWN,2SPACE}RAND{9SPACE}"C5;:INPUT"{5LEFT}";C5:IF C5<0OR C5>15GOTO 445 
 450 GOTO 55 
 455 PRINT"{HOME,3DOWN,SPACE}FARBE 1{6SPACE}"C1;:INPUT"{5LEFT}";C1:IF C1<0OR C1>15GOTO 455 
 460 PRINT"{HOME,5DOWN,SPACE}FARBE 2{6SPACE}"C2;:INPUT"{5LEFT}";C2:IF C2<0OR C2>15GOTO 460 
 465 PRINT"{HOME,7DOWN,SPACE}FARBE 3{6SPACE}"C3;:INPUT"{5LEFT}";C3:IF C3<0OR C3>15GOTO 465 
 470 PRINT"{HOME,9DOWN,SPACE}HINTERGRUND{2SPACE}"C4;:INPUT"{5LEFT}";C4:IF C4<0OR C4>15GOTO 470 
 475 PRINT"{HOME,11DOWN,SPACE}RAND{9SPACE}"C5;:INPUT"{5LEFT}";C5:IF C5<0OR C5>15GOTO 475 
 480 GOTO 55 
 485 PRINT"{CLR}";:IF M THENPOKE 53280,C5:POKE 53281,C4:SYS 50284,Z,M,C1,C2,C3:GOTO 55 
 490 POKE 53280,C5:SYS 50284,Z,M,C1,C4,C3:GOTO 55 
 495 PRINT"{HOME,24DOWN,SPACE}YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY{HOME}":RETURN 
Listing 5. Movieroutine
|
5 rem  **********************************
10 rem *   giga-cad     graphic-system  *
15 rem *        'cad.hardcopy'          *
20 rem * by s. vilsmeier & s. lippstreu *
25 rem **********************************
30 :
35 :
40 a=peek(836)+1:poke836,a:ifa=1thengosub1525:load"hard.cad.obj",8,1
45 dima(30,6),b(20):open1,8,15
50 open2,8,2,"cad.printer.datas,s,r":gosub305:iff<>0thenclose2:goto70
55 input#2,d$
60 forx=0to5:input#2,a(0,x):input#2,a(1,x):input#2,a(2,x):fori=3toa(2,x)+2
65 input#2,a(i,x):next:next:close2:gosub305:close1:dd=a(2,1)
70 open1,8,15,"u9":close1:printchr$(14)chr$(8):poke53280,14
75 :
80 :
85 rem **********************************
90 rem *          hauptmenue            *
95 rem **********************************
100 :
105 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
110 print" {rvon}        Hardcopy - Hauptmenue         {rvof}"
115 fori=1to21:print" {CBM-H}                                    {CBM-N}":next
120 print" {rvon}                                      {rvof}{home}"
125 print"{home}{down}{down}{down}{rght}{rght}{rght}{rght} A. - Einzelne Grafik laden"
130 print"{down}{rght}{rght}{rght}{rght} B. - Hardcopy 1-fach"
135 print"{down}{rght}{rght}{rght}{rght} C. - Hardcopy 4-fach"
140 print"{down}{rght}{rght}{rght}{rght} D. - Hardcopy 10-fach"
145 print"{down}{rght}{rght}{rght}{rght} E. - Einfache Dichte";
150 ifdmthenprint"{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}{left}Doppelte";
155 print:print"{down}{rght}{rght}{rght}{rght} F. - Druckeranpassung"
160 print"{down}{rght}{rght}{rght}{rght} G. - Diskettenkommando senden"
165 print"{down}{rght}{rght}{rght}{rght} H. - Directory anzeigen"
170 print"{down}{rght}{rght}{rght}{rght} I. - Druckerkommando senden"
175 print"{down}{rght}{rght}{rght}{rght} J. - Druckerparameter pruefen"
180 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rvon} Druckertyp : ";d$;"{home}{rvof}";
185 getx$:ifx$<"a"orx$>"j"goto185
190 onasc(x$)-64goto225,435,620,695,520,770,375,560,1415,1125
195 :
200 :
205 rem *********************************
210 rem *         grafik laden          *
215 rem *********************************
220 :
225 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
230 print" {rvon}              Grafik laden            {rvof}":gosub1545
235 input"{home}{down}{down}{down}{down}{down}{rght}{rght}{rght} Name ";n$:ifn$=""orn$="_"goto70
240 iflen(n$)>10goto235
245 sys50192,11,15,1:sys50299,1
250 open2,8,2,"pi."+n$+",p,r":fk=1:open1,8,15:gosub305
255 iff<>0thensys50299,0:close2:goto70
260 sys50442,1:close2:close1
265 sys50299,0:goto70
270 :
275 :
280 rem *********************************
285 rem *       disketten-fehler        *
290 rem *********************************
295 :
300 open1,8,15:fk=0
305 input#1,f,f$,t,s:iff=0thenreturn
310 iffkthensys50299,0:printchr$(14);chr$(8)
315 print:print"{down} {rvon}Diskettenstatus :"
320 print"{down}"f","f$","t","s
325 poke198,0
330 getx$:ifx$=""goto330
335 close2:close1:return
340 goto105
345 :
350 :
355 rem *********************************
360 rem *    diskettenkommando senden   *
365 rem *********************************
370 :
375 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
380 print" {rvon}       Diskettenkommando senden       {rvof}":gosub1545
385 poke631,34:poke198,1
390 input"{home}{down}{down}{down}{down}{down} Kommando ";c$:ifc$=""goto70
395 open1,8,15,c$:gosub305:iff=0thengosub315
400 close2:close1:goto70
405 :
410 :
415 rem *********************************
420 rem *        hardcopy 1-fach        *
425 rem *********************************
430 :
435 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
440 print" {rvon}            Hardcopy 1-fach           {rvof}":gosub1545
445 gosub1205:ifdmthengoto465
450 x=1:gosub1250:open4,4,a(1,4)
455 x=4:fors=0to24:gosub1250:sys50475,s*320,0,0,0:print#4:nexts:gosub1215
460 goto105
465 open4,4,a(1,2)
470 fors=0to24step2:x=0:sz=1:gosub1250:x=2:gosub1250
475 sys50475,s*320,1,0,0:print#4:x=0:sz=15:gosub1250:x=2:gosub1250
480 sys50475,s*320,1,1,0:print#4:nexts:gosub1215:goto105
485 goto70
490 :
495 :
500 rem *********************************
505 rem *      menuepunkt 'e'           *
510 rem *********************************
515 :
520 ifdd=0goto185
525 dm=1-dm:goto125
530 :
535 :
540 rem *********************************
545 rem *       directory anzeigen      *
550 rem *********************************
555 :
560 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
565 print" {rvon}          Directory anzeigen          {rvof}"
570 print"{home}{down}{down}":open2,8,0,"$0":gosub300:iffgoto70
575 sys50901:close2:close1:poke198,0
580 getx$:ifx$=""goto580
585 goto70
590 :
595 :
600 rem *********************************
605 rem *       hardcopy 4-fach         *
610 rem *********************************
615 :
620 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
625 print" {rvon}            Hardcopy 4-fach           {rvof}":gosub1545
630 n$="":input"{down}{down}{down}{down}{down}{rght}{rght}{rght}File - Name ";n$:ifn$=""orn$="_"goto105
635 forq=1to4step2:open2,8,2,"hv."+n$+str$(q)+",p,r":sys50442,1:close2
640 open2,8,2,"hv."+n$+str$(q+1)+",p,r":sys50442,2:close2
645 gosub300:iff<>0goto105
650 close1:ifdmthengosub1070:goto660
655 gosub1025
660 nextq:goto105
665 :
670 :
675 rem *********************************
680 rem *       hardcopy 10-fach        *
685 rem *********************************
690 :
695 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
700 print" {rvon}              Hardcopy 10-fach        {rvof}":gosub1545
705 n$="":input"{down}{down}{down}{down}{down}{rght}{rght}{rght}File - Name ";n$:ifn$=""orn$="_"goto105
710 forq=1to10step2:open2,8,2,"hz."+n$+str$(q)+",p,r":sys50442,1:close2
715 open2,8,2,"hz."+n$+str$(q+1)+",p,r":sys50442,2:close2
720 gosub300:iff<>0goto105
725 close1:ifdmthengosub1070:goto735
730 gosub1025
735 nextq:goto105
740 :
745 :
750 rem *********************************
755 rem *       druckeranpassung        *
760 rem *********************************
765 :
770 gosub1300
775 print"{home}{down}{down}{down}{down}{rght}{rght}{rght}{rght}Welchen Drucker haben":print"{down}{rght}{rght}{rght}{rght}Sie denn   ";d$
780 input"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";d$:d$=left$(d$,19)
785 ifd$="_"goto105
790 gosub1300:print"{down}{down}{rght}{rght}Nun muss eingegeben werden, ob ihr"
795 print"{down}{rght}{rght}Drucker ueber die Moeglichkeit ver-"
800 print"{down}{rght}{rght}fuegt, Grafiken in doppelter Dichte"
805 print"{down}{rght}{rght}mit einem Zeilenabstand von n halben "
810 print"{down}{rght}{rght}Punkten auszudrucken."
815 input"{down}{down}{rght}{rght}Nun, ist dies moeglich (j/n) ";n1$
820 dd=1:ifn1$="n"thendd=0:goto850
825 gosub1300:print"{down}{down}{rght}{rght}Wieviele Steuerzeichen muessen Sie"
830 print"{down}{rght}{rght}senden, um den Zeilenabstand auf  "
835 print"{down}{rght}{rght}n/144 Inch festzulegen  ";a(2,0)
840 input"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";a(2,0)
845 x=0:gosub1310:ifa$<>"j"goto825
850 gosub1300:print"{down}{down}{rght}{rght}Nun ist die Anzahl der Steuerzeichen"
855 print"{down}{rght}{rght}von Interesse, um den Drucker auf"
860 print"{down}{rght}{rght}einen Zeilenabstand von 8/72 Inch "
865 print"{down}{rght}{rght}einzustellen. Anzahl  ";a(2,1)
870 input"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";a(2,1):x=1:gosub1310:ifa$<>"j"goto850
875 ifdd=0goto925
880 gosub1300:print"{down}{down}{rght}{rght}Wieviel Codes muessen gesendet wer-"
885 print"{down}{rght}{rght}den, um Ihren Drucker zum Ausdruck"
890 print"{down}{rght}{rght}von 320 Punktspalten in doppelter"
895 print"{down}{rght}{rght}Dichte zu bewegen  ";a(2,2)
900 input"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";a(2,2):x=2:gosub1310:ifa$<>"j"goto880
905 gosub1300:print"{down}{down}{rght}{rght}Mit welcher Anzahl an Druckersteuer-{down}    zeichen ";
910 print"kann man 640 Grafikspalten in"
915 print"{down}{rght}{rght}doppelter Dichte drucken  ";a(2,3)
920 input"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";a(2,3):x=3:gosub1310:ifa$<>"j"goto905
925 gosub1300:print"{down}{down}{rght}{rght}Mit wieviel Steuercodes bewerkstel-"
930 print"{down}{rght}{rght}ligt man einen Ausdruck von 320"
935 print"{down}{rght}{rght}Spalten in einfacher Dichte  ";a(2,4)
940 input"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";a(2,4):x=4:gosub1310
945 ifa$<>"j"goto925
950 gosub1300:print"{down}{down}{rght}{rght}Jetzt ist es ausserdem noch wichtig,"
955 print"{down}{rght}{rght}wieviel Steuerzeichen Ihr Drucker zum"
960 print"{down}{rght}{rght}Ausdruck von 640 Spalten in einfacher"
965 print"{down}{rght}{rght}Groesse benoetigt  ";a(2,5)
970 input"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";a(2,5):x=5:gosub1310:ifa$<>"j"goto950
975 open1,8,15,"s:cad.printer.datas"
980 open2,8,2,"cad.printer.datas,s,w":print#2,d$
985 forx=0to5:fori=0toa(2,x)+2:print#2,a(i,x):nexti:nextx:close2
990 gosub305:close1:goto105
995 :
1000 :
1005 rem ********************************
1010 rem *   ausdruck einfache dichte   *
1015 rem ********************************
1020 :
1025 gosub1205:x=1:gosub1250:open4,4,a(1,5)
1030 x=5:fors=0to24:gosub1250:sys50475,320*s,0,0,1:print#4:nexts
1035 gosub1215:return
1040 :
1045 :
1050 rem ********************************
1055 rem *   ausdruck doppelte dichte   *
1060 rem ********************************
1065 :
1070 gosub1205:open4,4,a(1,3)
1075 fors=0to24step2:ze=15:ifs=24thenze=7
1080 x=0:sz=1:gosub1250:x=3:gosub1250:sys50475,s*320,1,0,1
1085 print#4:x=0:sz=ze:gosub1250:x=3:gosub1250:sys50475,320*s,1,1,1
1090 print#4:nexts:gosub1215:return
1095 :
1100 :
1105 rem ********************************
1110 rem *    druckerparameter pruefen  *
1115 rem ********************************
1120 :
1125 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
1130 print" {rvon}        Druckerparameter pruefen      {rvof}":as=1:gosub1545:print
1135 ifddthenprint"{down}{rght}{rght}Zeilenabstand n/144 Inch :":print:x=0:gosub1340
1140 print"{down}{rght}{rght}Zeilenabstand 8/72 Inch :":print:x=1:gosub1340
1145 ifddthenprint"{down}{rght}{rght}Doppelte Dichte /320 Punkte :":print:x=2:gosub1340
1150 ifddthenprint"{down}{rght}{rght}Doppelte Dichte /640 Punkte :":print:x=3:gosub1340
1155 print"{down}{rght}{rght}Einfache Dichte /320 Punkte :":print:x=4:gosub1340
1160 print"{down}{rght}{rght}Einfache Dichte /640 Punkte :":print:x=5:gosub1340
1165 geta$:ifa$=""goto1165
1170 goto105
1175 :
1180 :
1185 rem ********************************
1190 rem *     kanaele oeffnen & schl.  *
1195 rem ********************************
1200 :
1205 open1,4,a(1,0):open2,4,a(1,1):open3,4,a(1,2):open7,4,a(1,3)
1210 open5,4,a(1,4):open6,4,a(1,5):return
1215 fori=1to9:closei:next:return
1220 :
1225 :
1230 rem ********************************
1235 rem *     druckersequenz senden    *
1240 rem ********************************
1245 :
1250 a=a(1,x)+1:ifa=4thena=7
1255 fori=3toa(2,x)+2:fk=1:ifx=0andi=a(2,0)+2thenfk=sz
1260 print#a,chr$(a(i,x)*fk);:next
1265 return
1270 :
1275 :
1280 rem ********************************
1285 rem *   eingabe der steuerzeichen  *
1290 rem ********************************
1295 :
1300 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
1305 print" {rvon}             Druckeranpassung         {rvof}":gosub1545:return
1310 ifa(2,x)=0thenreturn
1315 print"{down}{down}":fori=3toa(2,x)+2:a$=right$(str$(i-2),2)
1320 print"{up}{rght}{rght}Steuercode #";a$;"              {left}{left}{left}{left}{left}{left}{left}{left}{left}{left}";a(i,x)
1325 input"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";a(i,x):nexti
1330 print"{down}{down}{rght}{rght}Sekundaeradresse  ";a(1,x):as=0
1335 input"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";a(1,x):as=0
1340 a$="  Sekundaeradresse "
1345 a$=a$+right$(str$(a(1,x)),len(str$(a(1,x)))-1)+": ":ifa(2,x)=0goto1365
1350 fori=3toa(2,x)+2:a$=a$+right$(str$(a(i,x)),len(str$(a(i,x)))-1)
1355 ifi<>a(2,x)+2thena$=a$+"/ "
1360 nexti:ifx=0thena$=a$+"*n"
1365 print"{up}";a$:ifasthenreturn
1370 print"{down}{rght}{rght}Ist dies korrekt ?"
1375 geta$:if(a$<>"n"anda$<>"j")goto1375
1380 return
1385 :
1390 :
1395 rem ********************************
1400 rem *     druckerkommando senden   *
1405 rem ********************************
1410 :
1415 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
1420 print" {rvon}         Druckerkommando senden       {rvof}":gosub1545
1425 input"{down}{down}{down}{rght}{rght}Anzahl der Codes ";x$:x=val(x$):ifx$="_"orx$=""goto105
1430 print"{down}{down}":fori=1tox:a$=right$(str$(i),2)
1435 print"{up}{rght}{rght}Steuercode #";a$;"               "
1440 input"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}";b(i):nexti
1445 input"{down}{down}{rght}{rght}Sekundaeradresse ";sa
1450 a$="  Sekundaeradresse "
1455 a$=a$+right$(str$(sa),len(str$(sa))-1)+": "
1460 fori=1tox:a$=a$+right$(str$(b(i)),len(str$(b(i)))-1)
1465 ifi<>xthena$=a$+"/ "
1470 nexti:print"{up}";a$
1475 print"{down}{rght}{rght}Ist dies korrekt ?"
1480 geta$:ifa$<>"j"anda$<>"n"goto1480
1485 ifa$="n"goto1415
1490 open4,4,sa:fori=1tox:print#4,chr$(b(i));:next:close4:goto105
1495 :
1500 :
1505 rem ********************************
1510 rem *         kopf beim laden      *
1515 rem ********************************
1520 :
1525 poke53280,15:poke53281,15:poke646,11:printchr$(14)chr$(8)
1530 print"{clr}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}     {CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}"
1535 print"     Giga-CAD Hardcopy loading..."
1540 print"     {CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}":return
1545 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down} {CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{home}{down}"
1550 return
  5 REM  ********************************** 
 10 REM *   GIGA-CAD     GRAPHIC-SYSTEM  * 
 15 REM *        'CAD.HARDCOPY'          * 
 20 REM * BY S. VILSMEIER & S. LIPPSTREU * 
 25 REM ********************************** 
 30 : 
 35 : 
 40 A=PEEK (836)+1:POKE 836,A:IF A=1 THENGOSUB 1525:LOAD "HARD.CAD.OBJ",8,1 
 45 DIM A(30,6),B(20):OPEN 1,8,15 
 50 OPEN 2,8,2,"CAD.PRINTER.DATAS,S,R":GOSUB 305:IF F<>0 THENCLOSE 2:GOTO 70 
 55 INPUT#2,D$ 
 60 FOR X=0 TO5:INPUT#2,A(0,X):INPUT#2,A(1,X):INPUT#2,A(2,X):FOR I=3 TOA(2,X)+2 
 65 INPUT#2,A(I,X):NEXT :NEXT :CLOSE 2:GOSUB 305:CLOSE 1:DD=A(2,1) 
 70 OPEN 1,8,15,"U9":CLOSE 1:PRINTCHR$ (14)CHR$ (8):POKE 53280,14 
 75 : 
 80 : 
 85 REM ********************************** 
 90 REM *          HAUPTMENUE            * 
 95 REM ********************************** 
 100 : 
 105 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 110 PRINT"{SPACE,RVSON,8SPACE}HARDCOPY - HAUPTMENUE{9SPACE,RVOFF}" 
 115 FOR I=1 TO21:PRINT" H{36SPACE}N":NEXT 
 120 PRINT"{SPACE,RVSON,38SPACE,RVOFF,HOME}" 
 125 PRINT"{HOME,3DOWN,4RIGHT,SPACE}A. - EINZELNE GRAFIK LADEN" 
 130 PRINT"{DOWN,4RIGHT,SPACE}B. - HARDCOPY 1-FACH" 
 135 PRINT"{DOWN,4RIGHT,SPACE}C. - HARDCOPY 4-FACH" 
 140 PRINT"{DOWN,4RIGHT,SPACE}D. - HARDCOPY 10-FACH" 
 145 PRINT"{DOWN,4RIGHT,SPACE}E. - EINFACHE DICHTE"; 
 150 IF DM THENPRINT"{15LEFT}DOPPELTE"; 
 155 PRINT:PRINT"{DOWN,4RIGHT,SPACE}F. - DRUCKERANPASSUNG" 
 160 PRINT"{DOWN,4RIGHT,SPACE}G. - DISKETTENKOMMANDO SENDEN" 
 165 PRINT"{DOWN,4RIGHT,SPACE}H. - DIRECTORY ANZEIGEN" 
 170 PRINT"{DOWN,4RIGHT,SPACE}I. - DRUCKERKOMMANDO SENDEN" 
 175 PRINT"{DOWN,4RIGHT,SPACE}J. - DRUCKERPARAMETER PRUEFEN" 
 180 PRINT"{HOME,23DOWN,4RIGHT,RVSON,SPACE}DRUCKERTYP : ";D$;"{HOME,RVOFF}"; 
 185 GET X$:IF X$<"A"OR X$>"J"GOTO 185 
 190 ON ASC (X$)-64GOTO 225,435,620,695,520,770,375,560,1415,1125 
 195 : 
 200 : 
 205 REM ********************************* 
 210 REM *         GRAFIK LADEN          * 
 215 REM ********************************* 
 220 : 
 225 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 230 PRINT"{SPACE,RVSON,14SPACE}GRAFIK LADEN{12SPACE,RVOFF}":GOSUB 1545 
 235 INPUT"{HOME,5DOWN,3RIGHT,SPACE}NAME ";N$:IF N$=""OR N$="←"GOTO 70 
 240 IF LEN (N$)>10GOTO 235 
 245 SYS 50192,11,15,1:SYS 50299,1 
 250 OPEN 2,8,2,"PI."+N$+",P,R":FK=1:OPEN 1,8,15:GOSUB 305 
 255 IF F<>0 THENSYS 50299,0:CLOSE 2:GOTO 70 
 260 SYS 50442,1:CLOSE 2:CLOSE 1 
 265 SYS 50299,0:GOTO 70 
 270 : 
 275 : 
 280 REM ********************************* 
 285 REM *       DISKETTEN-FEHLER        * 
 290 REM ********************************* 
 295 : 
 300 OPEN 1,8,15:FK=0 
 305 INPUT#1,F,F$,T,S:IF F=0 THENRETURN 
 310 IF FK THENSYS 50299,0:PRINTCHR$ (14);CHR$ (8) 
 315 PRINT:PRINT"{DOWN,SPACE,RVSON}DISKETTENSTATUS :" 
 320 PRINT"{DOWN}"F","F$","T","S 
 325 POKE 198,0 
 330 GET X$:IF X$=""GOTO 330 
 335 CLOSE 2:CLOSE 1:RETURN 
 340 GOTO 105 
 345 : 
 350 : 
 355 REM ********************************* 
 360 REM *    DISKETTENKOMMANDO SENDEN   * 
 365 REM ********************************* 
 370 : 
 375 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 380 PRINT"{SPACE,RVSON,7SPACE}DISKETTENKOMMANDO SENDEN{7SPACE,RVOFF}":GOSUB 1545 
 385 POKE 631,34:POKE 198,1 
 390 INPUT"{HOME,5DOWN,SPACE}KOMMANDO ";C$:IF C$=""GOTO 70 
 395 OPEN 1,8,15,C$:GOSUB 305:IF F=0 THENGOSUB 315 
 400 CLOSE 2:CLOSE 1:GOTO 70 
 405 : 
 410 : 
 415 REM ********************************* 
 420 REM *        HARDCOPY 1-FACH        * 
 425 REM ********************************* 
 430 : 
 435 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 440 PRINT"{SPACE,RVSON,12SPACE}HARDCOPY 1-FACH{11SPACE,RVOFF}":GOSUB 1545 
 445 GOSUB 1205:IF DM THENGOTO 465 
 450 X=1:GOSUB 1250:OPEN 4,4,A(1,4) 
 455 X=4:FOR S=0 TO24:GOSUB 1250:SYS 50475,S*320,0,0,0:PRINT#4:NEXT S:GOSUB 1215 
 460 GOTO 105 
 465 OPEN 4,4,A(1,2) 
 470 FOR S=0 TO24STEP 2:X=0:SZ=1:GOSUB 1250:X=2:GOSUB 1250 
 475 SYS 50475,S*320,1,0,0:PRINT#4:X=0:SZ=15:GOSUB 1250:X=2:GOSUB 1250 
 480 SYS 50475,S*320,1,1,0:PRINT#4:NEXT S:GOSUB 1215:GOTO 105 
 485 GOTO 70 
 490 : 
 495 : 
 500 REM ********************************* 
 505 REM *      MENUEPUNKT 'E'           * 
 510 REM ********************************* 
 515 : 
 520 IF DD=0GOTO 185 
 525 DM=1-DM:GOTO 125 
 530 : 
 535 : 
 540 REM ********************************* 
 545 REM *       DIRECTORY ANZEIGEN      * 
 550 REM ********************************* 
 555 : 
 560 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 565 PRINT"{SPACE,RVSON,10SPACE}DIRECTORY ANZEIGEN{10SPACE,RVOFF}" 
 570 PRINT"{HOME,2DOWN}":OPEN 2,8,0,"$0":GOSUB 300:IF FGOTO 70 
 575 SYS 50901:CLOSE 2:CLOSE 1:POKE 198,0 
 580 GET X$:IF X$=""GOTO 580 
 585 GOTO 70 
 590 : 
 595 : 
 600 REM ********************************* 
 605 REM *       HARDCOPY 4-FACH         * 
 610 REM ********************************* 
 615 : 
 620 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 625 PRINT"{SPACE,RVSON,12SPACE}HARDCOPY 4-FACH{11SPACE,RVOFF}":GOSUB 1545 
 630 N$="":INPUT"{5DOWN,3RIGHT}FILE - NAME ";N$:IF N$=""OR N$="←"GOTO 105 
 635 FOR Q=1 TO4STEP 2:OPEN 2,8,2,"HV."+N$+STR$ (Q)+",P,R":SYS 50442,1:CLOSE 2 
 640 OPEN 2,8,2,"HV."+N$+STR$ (Q+1)+",P,R":SYS 50442,2:CLOSE 2 
 645 GOSUB 300:IF F<>0GOTO 105 
 650 CLOSE 1:IF DM THENGOSUB 1070:GOTO 660 
 655 GOSUB 1025 
 660 NEXT Q:GOTO 105 
 665 : 
 670 : 
 675 REM ********************************* 
 680 REM *       HARDCOPY 10-FACH        * 
 685 REM ********************************* 
 690 : 
 695 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 700 PRINT"{SPACE,RVSON,14SPACE}HARDCOPY 10-FACH{8SPACE,RVOFF}":GOSUB 1545 
 705 N$="":INPUT"{5DOWN,3RIGHT}FILE - NAME ";N$:IF N$=""OR N$="←"GOTO 105 
 710 FOR Q=1 TO10STEP 2:OPEN 2,8,2,"HZ."+N$+STR$ (Q)+",P,R":SYS 50442,1:CLOSE 2 
 715 OPEN 2,8,2,"HZ."+N$+STR$ (Q+1)+",P,R":SYS 50442,2:CLOSE 2 
 720 GOSUB 300:IF F<>0GOTO 105 
 725 CLOSE 1:IF DM THENGOSUB 1070:GOTO 735 
 730 GOSUB 1025 
 735 NEXT Q:GOTO 105 
 740 : 
 745 : 
 750 REM ********************************* 
 755 REM *       DRUCKERANPASSUNG        * 
 760 REM ********************************* 
 765 : 
 770 GOSUB 1300 
 775 PRINT"{HOME,4DOWN,4RIGHT}WELCHEN DRUCKER HABEN":PRINT"{DOWN,4RIGHT}SIE DENN{3SPACE}";D$ 
 780 INPUT"{UP,13RIGHT}";D$:D$=LEFT$ (D$,19) 
 785 IF D$="←"GOTO 105 
 790 GOSUB 1300:PRINT"{2DOWN,2RIGHT}NUN MUSS EINGEGEBEN WERDEN, OB IHR" 
 795 PRINT"{DOWN,2RIGHT}DRUCKER UEBER DIE MOEGLICHKEIT VER-" 
 800 PRINT"{DOWN,2RIGHT}FUEGT, GRAFIKEN IN DOPPELTER DICHTE" 
 805 PRINT"{DOWN,2RIGHT}MIT EINEM ZEILENABSTAND VON N HALBEN " 
 810 PRINT"{DOWN,2RIGHT}PUNKTEN AUSZUDRUCKEN." 
 815 INPUT"{2DOWN,2RIGHT}NUN, IST DIES MOEGLICH (J/N) ";N1$ 
 820 DD=1:IF N1$="N" THENDD=0:GOTO 850 
 825 GOSUB 1300:PRINT"{2DOWN,2RIGHT}WIEVIELE STEUERZEICHEN MUESSEN SIE" 
 830 PRINT"{DOWN,2RIGHT}SENDEN, UM DEN ZEILENABSTAND AUF{2SPACE}" 
 835 PRINT"{DOWN,2RIGHT}N/144 INCH FESTZULEGEN{2SPACE}";A(2,0) 
 840 INPUT"{UP,25RIGHT}";A(2,0) 
 845 X=0:GOSUB 1310:IF A$<>"J"GOTO 825 
 850 GOSUB 1300:PRINT"{2DOWN,2RIGHT}NUN IST DIE ANZAHL DER STEUERZEICHEN" 
 855 PRINT"{DOWN,2RIGHT}VON INTERESSE, UM DEN DRUCKER AUF" 
 860 PRINT"{DOWN,2RIGHT}EINEN ZEILENABSTAND VON 8/72 INCH " 
 865 PRINT"{DOWN,2RIGHT}EINZUSTELLEN. ANZAHL{2SPACE}";A(2,1) 
 870 INPUT"{UP,23RIGHT}";A(2,1):X=1:GOSUB 1310:IF A$<>"J"GOTO 850 
 875 IF DD=0GOTO 925 
 880 GOSUB 1300:PRINT"{2DOWN,2RIGHT}WIEVIEL CODES MUESSEN GESENDET WER-" 
 885 PRINT"{DOWN,2RIGHT}DEN, UM IHREN DRUCKER ZUM AUSDRUCK" 
 890 PRINT"{DOWN,2RIGHT}VON 320 PUNKTSPALTEN IN DOPPELTER" 
 895 PRINT"{DOWN,2RIGHT}DICHTE ZU BEWEGEN{2SPACE}";A(2,2) 
 900 INPUT"{UP,20RIGHT}";A(2,2):X=2:GOSUB 1310:IF A$<>"J"GOTO 880 
 905 GOSUB 1300:PRINT"{2DOWN,2RIGHT}MIT WELCHER ANZAHL AN DRUCKERSTEUER-{DOWN,4SPACE}ZEICHEN "; 
 910 PRINT"KANN MAN 640 GRAFIKSPALTEN IN" 
 915 PRINT"{DOWN,2RIGHT}DOPPELTER DICHTE DRUCKEN{2SPACE}";A(2,3) 
 920 INPUT"{UP,27RIGHT}";A(2,3):X=3:GOSUB 1310:IF A$<>"J"GOTO 905 
 925 GOSUB 1300:PRINT"{2DOWN,2RIGHT}MIT WIEVIEL STEUERCODES BEWERKSTEL-" 
 930 PRINT"{DOWN,2RIGHT}LIGT MAN EINEN AUSDRUCK VON 320" 
 935 PRINT"{DOWN,2RIGHT}SPALTEN IN EINFACHER DICHTE{2SPACE}";A(2,4) 
 940 INPUT"{UP,30RIGHT}";A(2,4):X=4:GOSUB 1310 
 945 IF A$<>"J"GOTO 925 
 950 GOSUB 1300:PRINT"{2DOWN,2RIGHT}JETZT IST ES AUSSERDEM NOCH WICHTIG," 
 955 PRINT"{DOWN,2RIGHT}WIEVIEL STEUERZEICHEN IHR DRUCKER ZUM" 
 960 PRINT"{DOWN,2RIGHT}AUSDRUCK VON 640 SPALTEN IN EINFACHER" 
 965 PRINT"{DOWN,2RIGHT}GROESSE BENOETIGT{2SPACE}";A(2,5) 
 970 INPUT"{UP,20RIGHT}";A(2,5):X=5:GOSUB 1310:IF A$<>"J"GOTO 950 
 975 OPEN 1,8,15,"S:CAD.PRINTER.DATAS" 
 980 OPEN 2,8,2,"CAD.PRINTER.DATAS,S,W":PRINT#2,D$ 
 985 FOR X=0 TO5:FOR I=0 TOA(2,X)+2:PRINT#2,A(I,X):NEXT I:NEXT X:CLOSE 2 
 990 GOSUB 305:CLOSE 1:GOTO 105 
 995 : 
 1000 : 
 1005 REM ******************************** 
 1010 REM *   AUSDRUCK EINFACHE DICHTE   * 
 1015 REM ******************************** 
 1020 : 
 1025 GOSUB 1205:X=1:GOSUB 1250:OPEN 4,4,A(1,5) 
 1030 X=5:FOR S=0 TO24:GOSUB 1250:SYS 50475,320*S,0,0,1:PRINT#4:NEXT S 
 1035 GOSUB 1215:RETURN 
 1040 : 
 1045 : 
 1050 REM ******************************** 
 1055 REM *   AUSDRUCK DOPPELTE DICHTE   * 
 1060 REM ******************************** 
 1065 : 
 1070 GOSUB 1205:OPEN 4,4,A(1,3) 
 1075 FOR S=0 TO24STEP 2:ZE=15:IF S=24 THENZE=7 
 1080 X=0:SZ=1:GOSUB 1250:X=3:GOSUB 1250:SYS 50475,S*320,1,0,1 
 1085 PRINT#4:X=0:SZ=ZE:GOSUB 1250:X=3:GOSUB 1250:SYS 50475,320*S,1,1,1 
 1090 PRINT#4:NEXT S:GOSUB 1215:RETURN 
 1095 : 
 1100 : 
 1105 REM ******************************** 
 1110 REM *    DRUCKERPARAMETER PRUEFEN  * 
 1115 REM ******************************** 
 1120 : 
 1125 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 1130 PRINT"{SPACE,RVSON,8SPACE}DRUCKERPARAMETER PRUEFEN{6SPACE,RVOFF}":AS=1:GOSUB 1545:PRINT 
 1135 IF DD THENPRINT"{DOWN,2RIGHT}ZEILENABSTAND N/144 INCH :":PRINT:X=0:GOSUB 1340 
 1140 PRINT"{DOWN,2RIGHT}ZEILENABSTAND 8/72 INCH :":PRINT:X=1:GOSUB 1340 
 1145 IF DD THENPRINT"{DOWN,2RIGHT}DOPPELTE DICHTE /320 PUNKTE :":PRINT:X=2:GOSUB 1340 
 1150 IF DD THENPRINT"{DOWN,2RIGHT}DOPPELTE DICHTE /640 PUNKTE :":PRINT:X=3:GOSUB 1340 
 1155 PRINT"{DOWN,2RIGHT}EINFACHE DICHTE /320 PUNKTE :":PRINT:X=4:GOSUB 1340 
 1160 PRINT"{DOWN,2RIGHT}EINFACHE DICHTE /640 PUNKTE :":PRINT:X=5:GOSUB 1340 
 1165 GET A$:IF A$=""GOTO 1165 
 1170 GOTO 105 
 1175 : 
 1180 : 
 1185 REM ******************************** 
 1190 REM *     KANAELE OEFFNEN & SCHL.  * 
 1195 REM ******************************** 
 1200 : 
 1205 OPEN 1,4,A(1,0):OPEN 2,4,A(1,1):OPEN 3,4,A(1,2):OPEN 7,4,A(1,3) 
 1210 OPEN 5,4,A(1,4):OPEN 6,4,A(1,5):RETURN 
 1215 FOR I=1 TO9:CLOSE I:NEXT :RETURN 
 1220 : 
 1225 : 
 1230 REM ******************************** 
 1235 REM *     DRUCKERSEQUENZ SENDEN    * 
 1240 REM ******************************** 
 1245 : 
 1250 A=A(1,X)+1:IF A=4 THENA=7 
 1255 FOR I=3 TOA(2,X)+2:FK=1:IF X=0AND I=A(2,0)+2 THENFK=SZ 
 1260 PRINT#A,CHR$ (A(I,X)*FK);:NEXT 
 1265 RETURN 
 1270 : 
 1275 : 
 1280 REM ******************************** 
 1285 REM *   EINGABE DER STEUERZEICHEN  * 
 1290 REM ******************************** 
 1295 : 
 1300 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 1305 PRINT"{SPACE,RVSON,13SPACE}DRUCKERANPASSUNG{9SPACE,RVOFF}":GOSUB 1545:RETURN 
 1310 IF A(2,X)=0 THENRETURN 
 1315 PRINT"{2DOWN}":FOR I=3 TOA(2,X)+2:A$=RIGHT$ (STR$ (I-2),2) 
 1320 PRINT"{UP,2RIGHT}STEUERCODE #";A$;"{14SPACE,10LEFT}";A(I,X) 
 1325 INPUT"{UP,19RIGHT}";A(I,X):NEXT I 
 1330 PRINT"{2DOWN,2RIGHT}SEKUNDAERADRESSE{2SPACE}";A(1,X):AS=0 
 1335 INPUT"{UP,19RIGHT}";A(1,X):AS=0 
 1340 A$="{2SPACE}SEKUNDAERADRESSE " 
 1345 A$=A$+RIGHT$ (STR$ (A(1,X)),LEN (STR$ (A(1,X)))-1)+": ":IF A(2,X)=0GOTO 1365 
 1350 FOR I=3 TOA(2,X)+2:A$=A$+RIGHT$ (STR$ (A(I,X)),LEN (STR$ (A(I,X)))-1) 
 1355 IF I<>A(2,X)+2 THENA$=A$+"/ " 
 1360 NEXT I:IF X=0 THENA$=A$+"*N" 
 1365 PRINT"{UP}";A$:IF AS THENRETURN 
 1370 PRINT"{DOWN,2RIGHT}IST DIES KORREKT ?" 
 1375 GET A$:IF (A$<>"N"AND A$<>"J")GOTO 1375 
 1380 RETURN 
 1385 : 
 1390 : 
 1395 REM ******************************** 
 1400 REM *     DRUCKERKOMMANDO SENDEN   * 
 1405 REM ******************************** 
 1410 : 
 1415 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 1420 PRINT"{SPACE,RVSON,9SPACE}DRUCKERKOMMANDO SENDEN{7SPACE,RVOFF}":GOSUB 1545 
 1425 INPUT"{3DOWN,2RIGHT}ANZAHL DER CODES ";X$:X=VAL (X$):IF X$="←"OR X$=""GOTO 105 
 1430 PRINT"{2DOWN}":FOR I=1 TOX:A$=RIGHT$ (STR$ (I),2) 
 1435 PRINT"{UP,2RIGHT}STEUERCODE #";A$;"{15SPACE}" 
 1440 INPUT"{UP,19RIGHT}";B(I):NEXT I 
 1445 INPUT"{2DOWN,2RIGHT}SEKUNDAERADRESSE ";SA 
 1450 A$="{2SPACE}SEKUNDAERADRESSE " 
 1455 A$=A$+RIGHT$ (STR$ (SA),LEN (STR$ (SA))-1)+": " 
 1460 FOR I=1 TOX:A$=A$+RIGHT$ (STR$ (B(I)),LEN (STR$ (B(I)))-1) 
 1465 IF I<>X THENA$=A$+"/ " 
 1470 NEXT I:PRINT"{UP}";A$ 
 1475 PRINT"{DOWN,2RIGHT}IST DIES KORREKT ?" 
 1480 GET A$:IF A$<>"J"AND A$<>"N"GOTO 1480 
 1485 IF A$="N"GOTO 1415 
 1490 OPEN 4,4,SA:FOR I=1 TOX:PRINT#4,CHR$ (B(I));:NEXT :CLOSE 4:GOTO 105 
 1495 : 
 1500 : 
 1505 REM ******************************** 
 1510 REM *         KOPF BEIM LADEN      * 
 1515 REM ******************************** 
 1520 : 
 1525 POKE 53280,15:POKE 53281,15:POKE 646,11:PRINTCHR$ (14)CHR$ (8) 
 1530 PRINT"{CLR,10DOWN,5SPACE}YYYYYYYYYYYYYYYYYYYYYYYYYYYY" 
 1535 PRINT"{5SPACE}GIGA-CAD HARDCOPY LOADING..." 
 1540 PRINT"{5SPACE}PPPPPPPPPPPPPPPPPPPPPPPPPPPP":RETURN 
 1545 PRINT"{HOME,24DOWN,SPACE}YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY{HOME,DOWN}" 
 1550 RETURN 
Listing 6. Hardcopy-Routine für FX-80 und Kompatible
|
10 a=peek(836)+1:poke836,a
20 ifa=1thenpoke55,0:poke56,32:clr:load"mps801.cad.obj",8,1
25 sys50192,11,15,2:poke53280,14:poke53281,15
30 open1,8,15,"u9":close1:printchr$(14)chr$(8)
40 print"{gry1}{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
50 print" {rvon}        Hardcopy - Hauptmenue         {rvof}"
60 fori=1to21:print" {CBM-H}                                    {CBM-N}":next
70 print" {rvon}    Druckertyp: MPS-801/803           {rvof}{home}"
80 print"{home}{down}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght} A. - Grafik laden"
90 print"{down}{down}{rght}{rght}{rght}{rght} B. - Grafik ansehen"
100 print"{down}{down}{rght}{rght}{rght}{rght} C. - Diskettenkommando senden"
110 print"{down}{down}{rght}{rght}{rght}{rght} D. - Directory anzeigen"
120 print"{down}{down}{rght}{rght}{rght}{rght} E. - Hardcopy"
130 poke198,0
140 getx$:ifx$=""goto140
150 a=asc(x$)-64:ifa<1ora>5goto140
160 onagoto1000,2000,3000,4000,5000
1000 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
1010 print" {rvon}              Grafik laden            {rvof}":gosub1200
1020 input"{home}{down}{down}{down}{down}{down}{rght}{rght}{rght} Name ";n$:ifn$=""orn$="_"goto30
1030 iflen(n$)>10goto1020
1040 sys50192,11,15,2:sys50299,2
1050 open2,8,2,"pi."+n$+",p,r":fk=1:open1,8,15:gosub1105
1060 iffgoto30
1070 sys50442,2:close2:close1
1080 sys50299,0:goto30
1100 open1,8,15:fk=0
1105 input#1,f,f$,t,s:iff=0thenreturn
1110 iffkthensys50299,0:printchr$(14);chr$(8)
1120 print:print"{down} {rvon}Diskettenstatus :"
1130 print"{down}"f","f$","t","s
1140 getx$:ifx$=""goto1140
1150 close2:close1:return
1200 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down} {CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{home}{down}"
1210 return
2000 sys50299,2:poke198,0
2010 getx$:ifx$=""goto2010
2020 sys50299,0:poke53272,23:goto130
3000 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
3010 print" {rvon}       Diskettenkommando senden       {rvof}":gosub1200
3020 poke631,34:poke198,1
3030 input"{home}{down}{down}{down}{down}{down} Kommando ";c$:ifc$=""orc$="_"goto30
3040 fk=0:open1,8,15,c$:gosub1105:iff=0thengosub1120
3050 close2:close1:goto30
4000 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
4010 print" {rvon}          Directory anzeigen          {rvof}"
4020 print"{home}{down}{down}":open2,8,0,"$0":gosub1100:iffgoto30
4030 sys50475:close2:close1:poke198,0
4040 getx$:ifx$=""goto4040
4050 goto30
5000 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
5010 print" {rvon}               Hardcopy               {rvof}":gosub1200
5020 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}      Drucker eingeschaltet (j/n) ?":poke198,0
5030 getx$:ifx$<>"j"andx$<>"n"goto5030
5040 ifx$="n"goto30
5050 sys50555
5060 goto30
 10 A=PEEK (836)+1:POKE 836,A 
 20 IF A=1 THENPOKE 55,0:POKE 56,32:CLR :LOAD "MPS801.CAD.OBJ",8,1 
 25 SYS 50192,11,15,2:POKE 53280,14:POKE 53281,15 
 30 OPEN 1,8,15,"U9":CLOSE 1:PRINTCHR$ (14)CHR$ (8) 
 40 PRINT"{GREY1,CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 50 PRINT"{SPACE,RVSON,8SPACE}HARDCOPY - HAUPTMENUE{9SPACE,RVOFF}" 
 60 FOR I=1 TO21:PRINT" H{36SPACE}N":NEXT 
 70 PRINT"{SPACE,RVSON,4SPACE}DRUCKERTYP: MPS-801/803{11SPACE,RVOFF,HOME}" 
 80 PRINT"{HOME,6DOWN,4RIGHT,SPACE}A. - GRAFIK LADEN" 
 90 PRINT"{2DOWN,4RIGHT,SPACE}B. - GRAFIK ANSEHEN" 
 100 PRINT"{2DOWN,4RIGHT,SPACE}C. - DISKETTENKOMMANDO SENDEN" 
 110 PRINT"{2DOWN,4RIGHT,SPACE}D. - DIRECTORY ANZEIGEN" 
 120 PRINT"{2DOWN,4RIGHT,SPACE}E. - HARDCOPY" 
 130 POKE 198,0 
 140 GET X$:IF X$=""GOTO 140 
 150 A=ASC (X$)-64:IF A<1OR A>5GOTO 140 
 160 ON AGOTO 1000,2000,3000,4000,5000 
 1000 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 1010 PRINT"{SPACE,RVSON,14SPACE}GRAFIK LADEN{12SPACE,RVOFF}":GOSUB 1200 
 1020 INPUT"{HOME,5DOWN,3RIGHT,SPACE}NAME ";N$:IF N$=""OR N$="←"GOTO 30 
 1030 IF LEN (N$)>10GOTO 1020 
 1040 SYS 50192,11,15,2:SYS 50299,2 
 1050 OPEN 2,8,2,"PI."+N$+",P,R":FK=1:OPEN 1,8,15:GOSUB 1105 
 1060 IF FGOTO 30 
 1070 SYS 50442,2:CLOSE 2:CLOSE 1 
 1080 SYS 50299,0:GOTO 30 
 1100 OPEN 1,8,15:FK=0 
 1105 INPUT#1,F,F$,T,S:IF F=0 THENRETURN 
 1110 IF FK THENSYS 50299,0:PRINTCHR$ (14);CHR$ (8) 
 1120 PRINT:PRINT"{DOWN,SPACE,RVSON}DISKETTENSTATUS :" 
 1130 PRINT"{DOWN}"F","F$","T","S 
 1140 GET X$:IF X$=""GOTO 1140 
 1150 CLOSE 2:CLOSE 1:RETURN 
 1200 PRINT"{HOME,24DOWN,SPACE}YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY{HOME,DOWN}" 
 1210 RETURN 
 2000 SYS 50299,2:POKE 198,0 
 2010 GET X$:IF X$=""GOTO 2010 
 2020 SYS 50299,0:POKE 53272,23:GOTO 130 
 3000 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 3010 PRINT"{SPACE,RVSON,7SPACE}DISKETTENKOMMANDO SENDEN{7SPACE,RVOFF}":GOSUB 1200 
 3020 POKE 631,34:POKE 198,1 
 3030 INPUT"{HOME,5DOWN,SPACE}KOMMANDO ";C$:IF C$=""OR C$="←"GOTO 30 
 3040 FK=0:OPEN 1,8,15,C$:GOSUB 1105:IF F=0 THENGOSUB 1120 
 3050 CLOSE 2:CLOSE 1:GOTO 30 
 4000 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 4010 PRINT"{SPACE,RVSON,10SPACE}DIRECTORY ANZEIGEN{10SPACE,RVOFF}" 
 4020 PRINT"{HOME,2DOWN}":OPEN 2,8,0,"$0":GOSUB 1100:IF FGOTO 30 
 4030 SYS 50475:CLOSE 2:CLOSE 1:POKE 198,0 
 4040 GET X$:IF X$=""GOTO 4040 
 4050 GOTO 30 
 5000 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 5010 PRINT"{SPACE,RVSON,15SPACE}HARDCOPY{15SPACE,RVOFF}":GOSUB 1200 
 5020 PRINT"{HOME,11DOWN,6SPACE}DRUCKER EINGESCHALTET (J/N) ?":POKE 198,0 
 5030 GET X$:IF X$<>"J"AND X$<>"N"GOTO 5030 
 5040 IF X$="N"GOTO 30 
 5050 SYS 50555 
 5060 GOTO 30 
Listing 7. Hardcopy-Routine für MPS 801
|
10 a=peek(836)+1:poke836,a
20 ifa=1thenpoke55,0:poke56,31:clr:load"mps802.cad.obj",8,1
25 di=128:sys50192,11,15,1:sys50192,11,15,2:poke53280,14:poke53281,15
30 open1,8,15,"u9":close1:printchr$(14)chr$(8)
40 print"{gry1}{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
50 print" {rvon}        Hardcopy - Hauptmenue         {rvof}"
60 fori=1to21:print" {CBM-H}                                    {CBM-N}":next
70 print" {rvon}    Druckertyp: MPS-802/1526          {rvof}{home}"
80 print"{home}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght} A. - Einzelne Grafik laden"
90 print"{down}{rght}{rght}{rght}{rght} B. - Grafik ansehen"
100 print"{down}{rght}{rght}{rght}{rght} C. - Diskettenkommando senden"
110 print"{down}{rght}{rght}{rght}{rght} D. - Directory anzeigen"
120 print"{down}{rght}{rght}{rght}{rght} E. - Einfache";:ifdi=0thenprint"{left}{left}{left}{left}{left}{left}{left}{left}Doppelte";
121 print" Dichte"
122 print"{down}{rght}{rght}{rght}{rght} F. - Hardcopy 1-fach"
123 print"{down}{rght}{rght}{rght}{rght} G. - Hardcopy 4-fach"
124 print"{down}{rght}{rght}{rght}{rght} H. - Hardcopy 10-fach"
130 poke198,0
140 getx$:ifx$=""goto140
150 a=asc(x$)-64:ifa<1ora>8goto140
160 onagoto1000,2000,3000,4000,1300,5000,6000,7000
1000 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
1010 print" {rvon}              Grafik laden            {rvof}":gosub1200
1020 input"{home}{down}{down}{down}{down}{down}{rght}{rght} Name ";n$:ifn$=""orn$="_"goto30
1030 iflen(n$)>10goto1020
1040 sys50192,11,15,1:sys50299,1
1050 open2,8,2,"pi."+n$+",p,r":fk=1:open1,8,15:gosub1105
1060 iffgoto30
1070 sys50442,1:close2:close1
1080 sys50299,0:goto30
1100 open1,8,15:fk=0
1105 input#1,f,f$,t,s:iff=0thenreturn
1110 iffkthensys50299,0:printchr$(14);chr$(8)
1120 print:print"{down} {rvon}Diskettenstatus :"
1130 print"{down}"f","f$","t","s
1140 getx$:ifx$=""goto1140
1150 close2:close1:return
1200 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down} {CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{home}{down}"
1210 return
1300 di=128-di:goto80
1500 forx=8086to8092:pokex,0:nextx:poke8090,1:ifmthenpoke8092,2
1510 poke780,17+d+m:sys50555:return
2000 bs=1:poke198,0
2010 sys50299,bs
2020 getx$:ifx$=""goto2020
2030 ifx$="1"thenbs=1:goto2010
2040 ifx$="2"thenbs=2:goto2010
2050 sys50299,0:poke53272,23:goto130
3000 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
3010 print" {rvon}       Diskettenkommando senden       {rvof}":gosub1200
3020 poke631,34:poke198,1
3030 input"{home}{down}{down}{down}{down}{down} Kommando ";c$:ifc$=""orc$="_"goto30
3040 fk=0:open1,8,15,c$:gosub1105:iff=0thengosub1120
3050 close2:close1:goto30
4000 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
4010 print" {rvon}          Directory anzeigen          {rvof}"
4020 print"{home}{down}{down}":open2,8,0,"$0":gosub1100:iffgoto30
4030 sys50475:close2:close1:poke198,0
4040 getx$:ifx$=""goto4040
4050 goto30
5000 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
5010 print" {rvon}            Hardcopy 1-fach           {rvof}":gosub1200
5020 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}      Drucker eingeschaltet (j/n) ?":poke198,0
5030 getx$:ifx$<>"j"andx$<>"n"goto5030
5040 ifx$="n"goto30
5050 m=0:d=di:gosub1500
5060 goto30
6000 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
6010 print" {rvon}            Hardcopy 4-fach           {rvof}":gosub1200:m=64:d=0
6020 n$="":input"{down}{down}{down}{down}{down}{rght}{rght}{rght}File - Name ";n$:ifn$=""orn$="_"goto30
6030 forq=1to4step2:open2,8,2,"hv."+n$+str$(q)+",p,r":gosub1100:iffgoto7090
6040 sys50442,1:close2:close1
6050 open2,8,2,"hv."+n$+str$(q+1)+",p,r":gosub1100:iffgoto7090
6060 sys50442,2:close2:close1
6070 gosub1500:nextq
6080 goto30
7000 print"{clr} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
7010 print" {rvon}            Hardcopy 10-fach          {rvof}":gosub1200:m=64:d=0
7020 n$="":input"{down}{down}{down}{down}{down}{rght}{rght}{rght}File - Name ";n$:ifn$=""orn$="_"goto30
7030 forq=1to10step2:open2,8,2,"hz."+n$+str$(q)+",p,r":gosub1100:iffgoto7090
7040 sys50442,1:close2:close1
7050 open2,8,2,"hz."+n$+str$(q+1)+",p,r":gosub1100:iffgoto7090
7060 sys50442,2:close2:close1
7070 gosub1500:nextq
7080 goto30
7090 q=20:nextq:goto30
 10 A=PEEK (836)+1:POKE 836,A 
 20 IF A=1 THENPOKE 55,0:POKE 56,31:CLR :LOAD "MPS802.CAD.OBJ",8,1 
 25 DI=128:SYS 50192,11,15,1:SYS 50192,11,15,2:POKE 53280,14:POKE 53281,15 
 30 OPEN 1,8,15,"U9":CLOSE 1:PRINTCHR$ (14)CHR$ (8) 
 40 PRINT"{GREY1,CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 50 PRINT"{SPACE,RVSON,8SPACE}HARDCOPY - HAUPTMENUE{9SPACE,RVOFF}" 
 60 FOR I=1 TO21:PRINT" H{36SPACE}N":NEXT 
 70 PRINT"{SPACE,RVSON,4SPACE}DRUCKERTYP: MPS-802/1526{10SPACE,RVOFF,HOME}" 
 80 PRINT"{HOME,5DOWN,4RIGHT,SPACE}A. - EINZELNE GRAFIK LADEN" 
 90 PRINT"{DOWN,4RIGHT,SPACE}B. - GRAFIK ANSEHEN" 
 100 PRINT"{DOWN,4RIGHT,SPACE}C. - DISKETTENKOMMANDO SENDEN" 
 110 PRINT"{DOWN,4RIGHT,SPACE}D. - DIRECTORY ANZEIGEN" 
 120 PRINT"{DOWN,4RIGHT,SPACE}E. - EINFACHE";:IF DI=0 THENPRINT"{8LEFT}DOPPELTE"; 
 121 PRINT" DICHTE" 
 122 PRINT"{DOWN,4RIGHT,SPACE}F. - HARDCOPY 1-FACH" 
 123 PRINT"{DOWN,4RIGHT,SPACE}G. - HARDCOPY 4-FACH" 
 124 PRINT"{DOWN,4RIGHT,SPACE}H. - HARDCOPY 10-FACH" 
 130 POKE 198,0 
 140 GET X$:IF X$=""GOTO 140 
 150 A=ASC (X$)-64:IF A<1OR A>8GOTO 140 
 160 ON AGOTO 1000,2000,3000,4000,1300,5000,6000,7000 
 1000 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 1010 PRINT"{SPACE,RVSON,14SPACE}GRAFIK LADEN{12SPACE,RVOFF}":GOSUB 1200 
 1020 INPUT"{HOME,5DOWN,2RIGHT,SPACE}NAME ";N$:IF N$=""OR N$="←"GOTO 30 
 1030 IF LEN (N$)>10GOTO 1020 
 1040 SYS 50192,11,15,1:SYS 50299,1 
 1050 OPEN 2,8,2,"PI."+N$+",P,R":FK=1:OPEN 1,8,15:GOSUB 1105 
 1060 IF FGOTO 30 
 1070 SYS 50442,1:CLOSE 2:CLOSE 1 
 1080 SYS 50299,0:GOTO 30 
 1100 OPEN 1,8,15:FK=0 
 1105 INPUT#1,F,F$,T,S:IF F=0 THENRETURN 
 1110 IF FK THENSYS 50299,0:PRINTCHR$ (14);CHR$ (8) 
 1120 PRINT:PRINT"{DOWN,SPACE,RVSON}DISKETTENSTATUS :" 
 1130 PRINT"{DOWN}"F","F$","T","S 
 1140 GET X$:IF X$=""GOTO 1140 
 1150 CLOSE 2:CLOSE 1:RETURN 
 1200 PRINT"{HOME,24DOWN,SPACE}YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY{HOME,DOWN}" 
 1210 RETURN 
 1300 DI=128-DI:GOTO 80 
 1500 FOR X=8086 TO8092:POKE X,0:NEXT X:POKE 8090,1:IF M THENPOKE 8092,2 
 1510 POKE 780,17+D+M:SYS 50555:RETURN 
 2000 BS=1:POKE 198,0 
 2010 SYS 50299,BS 
 2020 GET X$:IF X$=""GOTO 2020 
 2030 IF X$="1" THENBS=1:GOTO 2010 
 2040 IF X$="2" THENBS=2:GOTO 2010 
 2050 SYS 50299,0:POKE 53272,23:GOTO 130 
 3000 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 3010 PRINT"{SPACE,RVSON,7SPACE}DISKETTENKOMMANDO SENDEN{7SPACE,RVOFF}":GOSUB 1200 
 3020 POKE 631,34:POKE 198,1 
 3030 INPUT"{HOME,5DOWN,SPACE}KOMMANDO ";C$:IF C$=""OR C$="←"GOTO 30 
 3040 FK=0:OPEN 1,8,15,C$:GOSUB 1105:IF F=0 THENGOSUB 1120 
 3050 CLOSE 2:CLOSE 1:GOTO 30 
 4000 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 4010 PRINT"{SPACE,RVSON,10SPACE}DIRECTORY ANZEIGEN{10SPACE,RVOFF}" 
 4020 PRINT"{HOME,2DOWN}":OPEN 2,8,0,"$0":GOSUB 1100:IF FGOTO 30 
 4030 SYS 50475:CLOSE 2:CLOSE 1:POKE 198,0 
 4040 GET X$:IF X$=""GOTO 4040 
 4050 GOTO 30 
 5000 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 5010 PRINT"{SPACE,RVSON,12SPACE}HARDCOPY 1-FACH{11SPACE,RVOFF}":GOSUB 1200 
 5020 PRINT"{HOME,11DOWN,6SPACE}DRUCKER EINGESCHALTET (J/N) ?":POKE 198,0 
 5030 GET X$:IF X$<>"J"AND X$<>"N"GOTO 5030 
 5040 IF X$="N"GOTO 30 
 5050 M=0:D=DI:GOSUB 1500 
 5060 GOTO 30 
 6000 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 6010 PRINT"{SPACE,RVSON,12SPACE}HARDCOPY 4-FACH{11SPACE,RVOFF}":GOSUB 1200:M=64:D=0 
 6020 N$="":INPUT"{5DOWN,3RIGHT}FILE - NAME ";N$:IF N$=""OR N$="←"GOTO 30 
 6030 FOR Q=1 TO4STEP 2:OPEN 2,8,2,"HV."+N$+STR$ (Q)+",P,R":GOSUB 1100:IF FGOTO 7090 
 6040 SYS 50442,1:CLOSE 2:CLOSE 1 
 6050 OPEN 2,8,2,"HV."+N$+STR$ (Q+1)+",P,R":GOSUB 1100:IF FGOTO 7090 
 6060 SYS 50442,2:CLOSE 2:CLOSE 1 
 6070 GOSUB 1500:NEXT Q 
 6080 GOTO 30 
 7000 PRINT"{CLR,SPACE}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 
 7010 PRINT"{SPACE,RVSON,12SPACE}HARDCOPY 10-FACH{10SPACE,RVOFF}":GOSUB 1200:M=64:D=0 
 7020 N$="":INPUT"{5DOWN,3RIGHT}FILE - NAME ";N$:IF N$=""OR N$="←"GOTO 30 
 7030 FOR Q=1 TO10STEP 2:OPEN 2,8,2,"HZ."+N$+STR$ (Q)+",P,R":GOSUB 1100:IF FGOTO 7090 
 7040 SYS 50442,1:CLOSE 2:CLOSE 1 
 7050 OPEN 2,8,2,"HZ."+N$+STR$ (Q+1)+",P,R":GOSUB 1100:IF FGOTO 7090 
 7060 SYS 50442,2:CLOSE 2:CLOSE 1 
 7070 GOSUB 1500:NEXT Q 
 7080 GOTO 30 
 7090 Q=20:NEXT Q:GOTO 30 
Listing 8. Hardcopy-Routine für MPS 802
|
5 rem  **********************************
10 rem *   giga-cad     graphic-system  *
15 rem *    'crsr1' & 'crsr2'  -maker   *
20 rem * by s. vilsmeier & s. lippstreu *
25 rem **********************************
30 :
35 :
40 open 2,8,2,"crsr1,p,w":lo=128:hi=191
45 gosub 75
50 close 2
55 open 2,8,2,"crsr2,p,w":lo=128:hi=255
60 gosub 75
65 close 2
70 end
75 print#2,chr$(lo);chr$(hi);
80 restore:for i=1 to 7:read a
85 print#2,chr$(a);chr$(0);chr$(0);
90 next i
95 for i=1 to 42:print#2,chr$(0);:next i
100 return
105 data 16,16,16,238,16,16,16
  5 REM  ********************************** 
 10 REM *   GIGA-CAD     GRAPHIC-SYSTEM  * 
 15 REM *    'CRSR1' & 'CRSR2'  -MAKER   * 
 20 REM * BY S. VILSMEIER & S. LIPPSTREU * 
 25 REM ********************************** 
 30 : 
 35 : 
 40 OPEN 2,8,2,"CRSR1,P,W":LO=128:HI=191 
 45 GOSUB 75 
 50 CLOSE 2 
 55 OPEN 2,8,2,"CRSR2,P,W":LO=128:HI=255 
 60 GOSUB 75 
 65 CLOSE 2 
 70 END 
 75 PRINT#2,CHR$ (LO);CHR$ (HI); 
 80 RESTORE :FOR I=1  TO 7:READ A 
 85 PRINT#2,CHR$ (A);CHR$ (0);CHR$ (0); 
 90 NEXT I 
 95 FOR I=1  TO 42:PRINT#2,CHR$ (0);:NEXT I 
 100 RETURN 
 105 DATA 16,16,16,238,16,16,16 
Listing 9. Sprites. Nach dem Start des Programms werden die beiden Files »CRSR1« und »CRSR2« auf der Diskette erzeugt.
|
5 rem  **********************************
10 rem *   giga-cad     graphic-system  *
15 rem *    'cad.printer.data' -maker   *
20 rem * by s. vilsmeier & s. lippstreu *
25 rem **********************************
30 :
35 :
40 open 2,8,2,"cad.printer.data,s,w"
45 print#2,"Epson FX 80+ (VCEI)"
50 for y=1 to 6
55 print#2,0:print#2,4
60 read a(2,y):print#2,a(2,y):for x=3 to a(2,y)+2
65 read a(x,y):print#2,a(x,y):next
70 next
75 close 2
80 data 3,27,51,2
85 data 3,27,65,8
90 data 4,27,76,64,1
95 data 4,27,76,128,2
100 data 4,27,75,64,1
105 data 4,27,75,128,2
  5 REM  ********************************** 
 10 REM *   GIGA-CAD     GRAPHIC-SYSTEM  * 
 15 REM *    'CAD.PRINTER.DATA' -MAKER   * 
 20 REM * BY S. VILSMEIER & S. LIPPSTREU * 
 25 REM ********************************** 
 30 : 
 35 : 
 40 OPEN 2,8,2,"CAD.PRINTER.DATA,S,W" 
 45 PRINT#2,"EPSON FX 80+ (VCEI)" 
 50 FOR Y=1  TO 6 
 55 PRINT#2,0:PRINT#2,4 
 60 READ A(2,Y):PRINT#2,A(2,Y):FOR X=3  TO A(2,Y)+2 
 65 READ A(X,Y):PRINT#2,A(X,Y):NEXT 
 70 NEXT 
 75 CLOSE 2 
 80 DATA 3,27,51,2 
 85 DATA 3,27,65,8 
 90 DATA 4,27,76,64,1 
 95 DATA 4,27,76,128,2 
 100 DATA 4,27,75,64,1 
 105 DATA 4,27,75,128,2 
Listing 10. Druckerdaten. Nach dem Start des Programms wird das File »CAD.PRINTER.DATA« erzeugt.
PROGRAMM : HRG.CAD.SRC    0801 0F64
-----------------------------------
0801 : 0F 08 CA A8 9E 32 30 36   85
0809 : 35 20 46 43 43 00 00 00   7D
0811 : A0 00 B9 69 07 99 00 CD   26
0819 : B9 69 08 99 00 CE B9 69   EC
0821 : 09 99 00 CF C8 D0 EB 4C   4C
0829 : C2 CD 78 A0 FF 84 FB A9   6B
0831 : C5 85 FC A9 36 85 01 8D   DC
0839 : 20 D0 C8 A5 2D D0 02 C6   97
0841 : 2E C6 2D A6 2E E0 0A D0   A6
0849 : 04 C9 18 F0 0F B1 2D 91   AC
0851 : FB A5 FB D0 02 C6 FC C6   10
0859 : FB 4C D3 CD A2 08 A9 01   3C
0861 : 86 2E 85 2D 84 FF 20 50   6F
0869 : CE C9 F3 D0 27 20 50 CE   85
0871 : AA 86 FA C9 04 B0 04 A9   7F
0879 : F3 D0 03 20 50 CE A0 00   97
0881 : 91 2D C8 C6 FA D0 F9 98   03
0889 : 18 65 2D 85 2D 90 02 E6   7D
0891 : 2E 4C 34 CE A0 00 91 2D   77
0899 : E6 2D F0 F3 A9 E2 A2 14   35
08A1 : E4 2E D0 C2 C5 2D D0 BE   AF
08A9 : A9 37 85 01 A9 FE 8D 20   78
08B1 : D0 58 20 59 A6 4C AE A7   B7
08B9 : A2 FF 86 F7 86 F8 E8 A9   22
08C1 : 01 85 FE A9 7F 85 FD C6   23
08C9 : FF 10 10 E6 FB D0 02 E6   CD
08D1 : FC A9 07 85 FF A0 00 B1   7D
08D9 : FB 85 F9 06 F9 B0 0A A4   6D
08E1 : FE A5 FD 39 F7 00 99 F7   2E
08E9 : 00 8A 0A A8 A5 F7 38 F9   B5
08F1 : E2 CE A5 F8 F9 E3 CE 90   DE
08F9 : 0E E0 0B F0 0A E8 38 66   EE
0901 : FD B0 C4 C6 FE F0 BC 8A   E0
0909 : F0 0F A5 F7 38 F9 E0 CE   5E
0911 : 85 F7 A5 F8 F9 E1 CE 85   0F
0919 : F8 A4 FE F0 07 A5 F8 85   CE
0921 : F7 88 84 F8 A5 FD 4A 90   31
0929 : 07 46 F8 66 F7 4C BE CE   D9
0931 : BD D2 CE 65 F7 A8 B9 00   63
0939 : CF 60 00 00 00 02 04 06   65
0941 : 11 26 43 63 84 A5 AF AF   36
0949 : AF AF 00 00 00 00 00 40   51
0951 : 00 60 00 70 00 9C 00 C6   02
0959 : 00 E3 00 F3 40 FB 60 FF   2F
0961 : 00 00 00 00 00 00 00 00   62
0969 : 00 FF F3 07 01 08 06 80   B0
0971 : C0 FC 60 10 04 E0 9F 03   95
0979 : CC 05 0F 20 99 7F 3F CF   C2
0981 : 1C F0 C1 33 F8 E6 30 C3   FB
0989 : 7C 32 0C F9 1F 3C E7 93   FB
0991 : 1E 18 FE 86 2C 81 67 66   85
0999 : 61 4C 38 D0 C9 78 31 E4   37
09A1 : C7 C6 A9 8C 85 54 45 28   28
09A9 : 27 F2 A6 A0 98 79 4E 49   28
09B1 : 39 34 13 0E 83 68 64 58   49
09B9 : 52 46 29 0D FD D3 C8 C2   41
09C1 : 9E 8F 8E 62 50 47 41 3E   D7
09C9 : 3A 2E 19 02 FB FA EA E3   AC
09D1 : E1 CB B1 B0 9A 88 7E 71   E5
09D9 : 70 63 53 4F 4D 42 3B 36   FA
09E1 : 26 25 24 22 16 12 11 0B   34
09E9 : 09 F5 F1 ED EC E2 DC D7   30
09F1 : D6 D2 CD CA C4 B9 B2 A8   33
09F9 : A5 A4 A2 9C 92 91 90 84   2D
0A01 : 82 7D 6F 69 65 59 57 55   74
0A09 : 4A 48 44 43 3D 37 35 2F   B2
0A11 : 2D 23 21 1B 1A 14 0A FF   E6
0A19 : 96 FF F8 92 F6 66 96 65   07
0A21 : EC CF 93 FB F4 FC 1E 4F   A7
0A29 : F3 E1 FF 1E 4F 73 DE FE   DA
0A31 : D9 9D FC CF E9 F2 78 F8   1C
0A39 : F7 B3 36 37 ED F5 76 37   55
0A41 : F5 B9 77 BA BE F8 F7 5B   92
0A49 : FF C3 37 A5 F9 2F 58 B7   96
0A51 : CC FC FF EF 63 99 F0 78   51
0A59 : F8 F7 B3 36 37 FB 5B FD   BD
0A61 : 2E AF 57 DF F1 FE EE 90   2C
0A69 : DD 6E 40 E3 5E 00 71 AF   15
0A71 : 27 E5 1B 5C CD 5D C6 6D   9B
0A79 : 5E DC F3 B6 9E DC F3 76   A6
0A81 : 86 E3 FB 5A 7B 9D 7E 30   42
0A89 : F4 FC EF D6 FF 67 4F 05   54
0A91 : AF 36 D7 5F F3 75 F5 3E   7C
0A99 : E6 9F D9 B5 FE DB 8C E9   51
0AA1 : 68 FE CF 4B CF F3 D1 AE   27
0AA9 : A7 58 33 CC 49 C1 E8 F4   13
0AB1 : DE 4C C0 E4 FC 87 11 C0   54
0AB9 : EA 70 06 24 E1 05 6E 84   EA
0AC1 : 09 08 46 B1 1A EA 38 19   A2
0AC9 : 2A 38 35 66 46 BC 9B E1   A6
0AD1 : C7 1C F8 73 FA 9D 4C F1   04
0AD9 : 1D 68 FD 48 61 B6 9B E1   B1
0AE1 : 1B 02 42 11 AC 46 BB 2F   FA
0AE9 : 36 85 2A 54 21 19 7B 2E   1C
0AF1 : 12 E3 93 24 4F 47 67 21   6D
0AF9 : 51 43 A9 F3 06 4B 2B 00   3C
0B01 : 0E 82 43 A2 9E 17 32 8A   F6
0B09 : 81 1B C0 07 AB 62 4F 28   84
0B11 : 6C 34 E9 C2 D4 88 12 00   44
0B19 : 82 0C EF B5 66 EE 1F FC   A8
0B21 : 01 EE 86 96 AE 4B C8 D0   18
0B29 : 8D 62 35 D4 68 D5 45 0C   32
0B31 : 45 1A F7 6A E2 4C C1 3E   E3
0B39 : 50 C4 88 50 8E 38 D3 E3   D9
0B41 : 19 37 D5 27 0E 1F 17 77   75
0B49 : 21 2F 84 6B 11 AE A7 D0   57
0B51 : 19 E6 24 E0 F4 7A 6F 3C   5C
0B59 : F2 7C 41 92 CE 01 C9 FF   48
0B61 : 2E 5E CF 12 44 1D 4E 00   5B
0B69 : C4 9C 20 AD D0 82 08 12   9E
0B71 : 10 8D 62 35 D4 88 4F 9E   93
0B79 : 21 02 16 BE FB 61 46 BC   56
0B81 : 94 02 2B 1D 45 CB 71 38   6E
0B89 : 03 51 A1 1C 83 3F 39 14   60
0B91 : 3A 8D 08 D6 23 5D A1 4A   A7
0B99 : 95 08 52 20 4A 4E 0F 3D   99
0BA1 : 1D 9C 85 62 38 1D D7 BA   FB
0BA9 : 90 86 4B 2B 12 70 24 3A   5E
0BB1 : 00 73 28 AA 28 7A B6 29   4E
0BB9 : F2 A3 82 84 69 08 86 9D   DA
0BC1 : 38 5A 91 02 52 70 D0 8E   D4
0BC9 : B5 D9 F2 81 1F 23 0A CF   2A
0BD1 : 7B 87 C4 8D 08 D6 23 5D   71
0BD9 : 4C 91 57 12 7F C0 62 38   FE
0BE1 : 23 8D 3C 83 9D 90 9C E0   DD
0BE9 : 8D 62 35 D4 51 10 67 98   F4
0BF1 : 91 08 5E 8F 4D 27 3C 9F   4E
0BF9 : F4 19 2C E6 31 C9 FF 2E   1F
0C01 : 5E CF 16 5E 58 0E A7 00   2D
0C09 : 62 4E 10 56 E8 24 E8 12   D9
0C11 : 10 8D 62 35 D6 E1 C2 D8   60
0C19 : A1 A1 49 AF BE D8 40 28   D7
0C21 : D7 93 20 32 56 32 74 AC   32
0C29 : 74 1C BC BE 2D 9C B7 1C   81
0C31 : CA 4F 88 36 1A 68 A0 C1   77
0C39 : 04 19 D9 D9 DD 18 C0 0E   39
0C41 : 87 AB 7F A4 68 46 B1 1A   C6
0C49 : ED 2A 10 A4 E0 51 44 76   7B
0C51 : 72 15 88 E0 77 5E ED 5C   67
0C59 : 49 08 95 88 E0 21 D4 9C   C0
0C61 : 0A A2 87 AB 62 9F 28 62   9C
0C69 : 44 28 47 1C 69 08 A7 0B   A2
0C71 : 52 70 28 A2 B5 D9 F2 A4   99
0C79 : 42 7A CF 7B 87 C5 CE C8   CF
0C81 : 46 84 6B 11 5D 28 A0 A2   E5
0C89 : 82 8A 0A 28 28 A0 A2 82   EF
0C91 : 8A 0A 28 28 A0 A2 82 8A   6E
0C99 : 0A 28 28 A0 A2 82 8A 0A   52
0CA1 : 28 28 A0 A2 82 8A C2 8E   FE
0CA9 : 03 9B 24 9C F9 24 90 F2   FF
0CB1 : E9 E9 53 D2 B1 92 69 9D   4E
0CB9 : 5B 16 2C 71 CD 4A 95 F4   C8
0CC1 : 66 9B 44 93 72 8E 6C 95   F1
0CC9 : CA 2E 51 9F 9D 9F 7F A3   0F
0CD1 : D1 CF 2F BF 93 34 D3 55   22
0CD9 : 24 E8 3F 1C DD E3 6B 1B   A6
0CE1 : B5 6A D5 AE F1 A4 74 34   95
0CE9 : 74 74 74 09 3C F4 8A 89   7E
0CF1 : 45 CA 2B 4B D7 BF 76 EF   05
0CF9 : AE 49 FF D9 A6 9A A9 26   B9
0D01 : DF 61 25 24 AA 45 60 A2   FA
0D09 : BE 51 9E D4 B8 E8 CE 14   E8
0D11 : 61 CA CA E7 5A 73 3F E6   93
0D19 : 34 A9 7F 2E 76 47 27 3C   7E
0D21 : 93 57 F8 F2 39 17 49 34   D6
0D29 : E4 92 4A 65 E7 F0 23 31   8A
0D31 : AA 3C 49 B9 47 36 4A E6   A0
0D39 : 99 D6 F8 78 38 2D 99 24   26
0D41 : E7 A4 54 49 2B 7A F5 EB   EF
0D49 : 04 9B FD 18 AE C4 49 C2   59
0D51 : 91 54 28 E2 56 3C 26 B5   BE
0D59 : AB 56 AD 9A 47 D1 F7 3D   4B
0D61 : AE 45 C2 FB FB 7C CC 58   69
0D69 : BF 69 26 AE A7 67 52 62   00
0D71 : 4D BC 7E 6A 33 9A 49 A4   80
0D79 : 91 53 2F 54 A9 5E A5 47   BD
0D81 : 89 34 6E 63 5C A2 6C 23   FF
0D89 : 3F EE C5 8B 1A C5 EA 95   C9
0D91 : 2B D4 A8 F1 27 C1 EA C9   4E
0D99 : 27 6C BE FB 6E D5 9A A9   79
0DA1 : 27 42 67 AA 40 51 CA 3E   4F
0DA9 : B1 26 E5 1C D9 2B 92 55   56
0DB1 : 22 B0 51 5F 33 CB FE 5C   B2
0DB9 : 18 1F 24 F3 28 D1 A3 CB   20
0DC1 : 24 C1 C5 6A D5 A2 4C F4   12
0DC9 : 8B 38 D9 49 D8 2C 9B 12   91
0DD1 : 63 FE AC 7C 7B C7 06 0F   9A
0DD9 : A7 57 27 53 CA 49 92 9D   DD
0DE1 : 2A 72 18 F2 9F C0 8C C6   68
0DE9 : 8C D2 A5 E8 CD 34 DA 04   57
0DF1 : 9B 94 68 D1 B8 49 09 15   4F
0DF9 : 82 4D 24 8A 99 AE 93 A6   27
0E01 : AE 49 B9 82 BD 1F C4 49   8D
0E09 : F0 7A B2 49 DB 2F BE DB   F6
0E11 : B5 66 AA 49 D0 99 EA 90   74
0E19 : 14 72 8F AC 49 B9 47 36   CC
0E21 : 4A E4 95 48 AC 17 C9 39   69
0E29 : 4F BE 67 D4 A3 CB E4 60   39
0E31 : BE 49 E3 E3 F1 FB 70 9D   05
0E39 : 73 A0 FC 7A 3F 6C E3 63   38
0E41 : 76 B1 B1 B1 BB C4 97 26   BF
0E49 : FD 38 9C 24 E1 A9 3C CF   0A
0E51 : 38 2C D9 48 B0 1C 6D 87   CF
0E59 : 3E 3D 7D 7B 44 9A BA 9A   3E
0E61 : 9A 95 4E 3C 9C DC 7C 7C   7D
0E69 : 7E 6A 7C E3 0A 28 F4 11   90
0E71 : 46 C2 28 B2 8A 29 24 F1   DF
0E79 : 2A 28 7D 14 53 45 1D C4   F7
0E81 : 51 65 14 31 14 59 45 17   FF
0E89 : 11 46 14 51 DC 45 08 C4   8E
0E91 : 50 FA 28 F6 51 47 B2 9F   A1
0E99 : 48 D2 B7 AD 6F 4B 08 1A   93
0EA1 : CC FA F5 BD 84 60 1D DD   9B
0EA9 : BD BD BE EE C0 17 C5 DB   66
0EB1 : F5 5F 03 D0 AE 6B D7 AE   34
0EB9 : 03 AE F7 1D 75 D0 15 CD   83
0EC1 : 97 16 50 1C 00 38 F8 1E   DD
0EC9 : C4 14 A0 82 00 12 76 CD   16
0ED1 : 40 2A DF BF 7E AD 90 25   F8
0ED9 : 95 82 56 01 7D DB 35 6F   CF
0EE1 : D9 02 E6 7E 2C 9C 9C 90   80
0EE9 : 2D E9 61 65 BC 20 7E 06   E3
0EF1 : 66 D7 AF CF 03 D3 48 B3   80
0EF9 : 6E 01 B6 ED 67 76 DF 03   03
0F01 : F7 FF 0C E8 20 AC 05 6F   72
0F09 : 52 DD BB 7A A9 38 41 F8   DB
0F11 : 7F 47 CF C6 FA 32 68 56   90
0F19 : 3C 61 F8 F8 BD 2A 1F 7C   06
0F21 : F6 5E C5 A7 F5 41 F7 7A   EB
0F29 : 7C AD DD DD EE 4D 0E 57   EF
0F31 : 26 86 B7 2F 4B E0 A1 EF   90
0F39 : 7F 3E B7 5B AD 43 B1 BB   64
0F41 : BD D4 F0 F2 68 4D CA EF   FF
0F49 : F7 FD BD DE 9E F7 F5 47   9A
0F51 : 28 76 37 77 BA 9E 1E 4D   25
0F59 : 0F BD CA D1 F6 FD DD EE   E8
0F61 : 56 F7 4C                  37
Listing 11. Grafikdaten zum Programm »Giga-CAD«. Das Programm erzeugt nach dem Start mit RUN das File »HRG.CAD.OBJ«.
PROGRAMM : HIRES1.CAD.OBJ C400 CFCD
-----------------------------------
C400 : A2 0E 4C 3A A4 20 A0 C6   5F
C408 : 20 9B B7 8E 3C 03 20 A0   53
C410 : C6 20 9B B7 8E 3D 03 20   E3
C418 : A0 C6 20 9B B7 8E 3E 03   86
C420 : AD 3C 03 C9 10 B0 D9 AD   2F
C428 : 3D 03 C9 10 B0 D2 AD 3E   30
C430 : 03 C9 03 B0 CB AD 3C 03   10
C438 : 0A 0A 0A 0A 6D 3D 03 AC   31
C440 : 3E 03 C0 02 F0 19 C0 00   4B
C448 : F0 B6 A2 8C 8E 53 C4 A0   A5
C450 : 00 99 00 8C C8 D0 FA E8   7F
C458 : E0 90 D0 F0 4C 60 C6 A2   FB
C460 : C0 8E 68 C4 A0 00 99 00   8A
C468 : C0 C8 D0 FA E8 E0 C4 D0   6A
C470 : F0 4C 80 C6 20 A0 C6 20   E2
C478 : 9B B7 8E 41 03 20 A0 C6   FC
C480 : 20 9B B7 E0 03 90 03 4C   D1
C488 : 00 C4 AD 41 03 8E 41 03   2E
C490 : AA E0 01 F0 07 E0 02 F0   6A
C498 : 14 4C 00 C4 A9 00 85 FA   12
C4A0 : 85 FC A9 E0 85 FB A9 A0   4A
C4A8 : 85 FD 4C BB C4 A9 00 85   5B
C4B0 : FA 85 FC A9 A0 85 FB A9   5B
C4B8 : E0 85 FD A9 34 78 85 01   2E
C4C0 : AE 41 03 A0 00 B1 FA E0   1F
C4C8 : 00 F0 0B E0 02 D0 05 51   7D
C4D0 : FC 4C D6 C4 11 FC 91 FC   7A
C4D8 : C8 D0 EA E6 FB E6 FD A5   DA
C4E0 : FD C9 BF F0 07 C9 FF F0   70
C4E8 : 03 4C C3 C4 A0 00 B1 FA   61
C4F0 : E0 00 F0 0B E0 02 D0 05   D9
C4F8 : 51 FC 4C FF C4 11 FC 91   C6
C500 : FC C8 C0 41 D0 E8 A9 37   22
C508 : 85 01 58 60 4C 00 C4 20   48
C510 : FD AE 20 EB B7 E0 C8 B0   F1
C518 : F3 8E 3F 03 A5 14 85 14   BC
C520 : A5 15 85 15 C9 01 90 08   4B
C528 : D0 E2 A5 14 C9 40 B0 DC   70
C530 : 20 46 CB AC 3F 03 AD 3F   3D
C538 : 03 29 F8 85 FE 85 FC A9   22
C540 : 00 85 FD 06 FC 26 FD 06   48
C548 : FC 26 FD 18 A5 FC 65 FE   B0
C550 : 85 FC A5 FD 69 00 85 FD   25
C558 : 06 FC 26 FD 06 FC 26 FD   02
C560 : 06 FC 26 FD 98 29 07 18   4D
C568 : 65 FC 85 FC A5 FD 69 00   3C
C570 : 85 FD 18 A5 14 29 F8 65   E8
C578 : FC 85 FC A5 15 65 FD 85   AA
C580 : FD AE 3E 03 E0 01 D0 1F   5C
C588 : 18 A9 00 65 FC 85 FC A9   65
C590 : A0 65 FD 85 FD A5 14 29   C2
C598 : 07 49 07 AA A9 01 CA 30   89
C5A0 : 03 0A D0 FA 4C C3 C5 18   66
C5A8 : A9 00 65 FC 85 FC A9 E0   F3
C5B0 : 65 FD 85 FD A5 14 29 07   E3
C5B8 : 49 07 AA A9 01 CA 30 03   92
C5C0 : 0A D0 FA 8D 41 03 A2 34   C2
C5C8 : A0 00 78 86 01 AE 40 03   E4
C5D0 : E0 02 F0 12 E0 01 F0 09   1C
C5D8 : 49 FF 31 FC 91 FC 4C EA   15
C5E0 : C5 11 FC 4C DC C5 51 FC   32
C5E8 : 91 FC AE 3E 03 E0 03 D0   50
C5F0 : 12 A5 FD 38 E9 40 85 FD   0E
C5F8 : A9 04 8D 3E 03 AD 41 03   77
C600 : 4C C3 C5 AD 3E 03 C9 04   80
C608 : D0 03 CE 3E 03 A2 37 86   04
C610 : 01 58 60 20 A0 C6 20 9B   51
C618 : B7 E0 03 B0 40 E0 02 F0   0B
C620 : 27 E0 01 F0 10 A9 1B 8D   EC
C628 : 11 D0 A9 15 8D 18 D0 A9   DF
C630 : 97 4C C4 CF EA AD 11 D0   1A
C638 : 29 80 09 3B 8D 11 D0 A9   43
C640 : 3D 8D 18 D0 4C C4 CF EA   64
C648 : AD 11 D0 29 80 09 3B 8D   2F
C650 : 11 D0 A9 0D 8D 18 D0 A9   06
C658 : 3C 4C C4 CF EA 4C 00 C4   80
C660 : A2 A0 8E 6B C6 A9 00 A0   5E
C668 : 00 99 00 A0 C8 D0 FA E8   1A
C670 : E0 BF D0 EE A0 00 98 99   E1
C678 : 00 BF C8 C0 80 D0 F8 60   D5
C680 : A2 E0 8E 8B C6 A9 00 A0   A2
C688 : 00 99 00 E0 C8 D0 FA E8   42
C690 : E0 FF D0 EE A0 00 98 99   21
C698 : 00 FF C8 C0 80 D0 F8 60   15
C6A0 : 20 79 00 C9 2C F0 03 4C   A5
C6A8 : 08 AF 60 20 FD AE 20 EB   52
C6B0 : B7 E0 C8 B0 A8 8E 42 03   2D
C6B8 : A5 14 8D 45 03 A5 15 8D   40
C6C0 : 46 03 C9 01 90 09 D0 95   DA
C6C8 : AD 45 03 C9 40 B0 8E 20   16
C6D0 : FD AE 20 EB B7 E0 C8 B0   B1
C6D8 : 84 8E 43 03 A5 14 8D 47   94
C6E0 : 03 A5 15 8D 48 03 C9 01   73
C6E8 : 90 09 D0 7A AD 47 03 C9   35
C6F0 : 40 B0 73 20 46 CB AC 42   63
C6F8 : 03 CC 43 03 F0 67 B0 66   6C
C700 : 8C 44 03 AD 46 03 CD 48   69
C708 : 03 90 0C D0 59 AD 45 03   8F
C710 : CD 47 03 F0 50 B0 4F AC   81
C718 : 44 03 8C 3F 03 AD 45 03   A2
C720 : 8D 49 03 AD 46 03 8D 4A   10
C728 : 03 AD 49 03 85 14 AD 4A   F9
C730 : 03 85 15 20 33 C5 18 AD   5C
C738 : 49 03 69 01 8D 49 03 AD   08
C740 : 4A 03 69 00 8D 4A 03 CD   39
C748 : 48 03 90 DD D0 0A AD 49   98
C750 : 03 CD 47 03 90 D3 F0 D1   7B
C758 : EE 44 03 AC 44 03 CC 43   D5
C760 : 03 90 B7 F0 B5 60 4C 00   47
C768 : C4 20 FD AE 20 EB B7 E0   93
C770 : C8 B0 F3 8E 54 03 A5 15   7D
C778 : C9 01 90 08 D0 E8 A5 14   FA
C780 : C9 40 B0 E2 A5 14 8D 4D   BD
C788 : 03 A5 15 8D 4E 03 20 FD   CE
C790 : AE 20 EB B7 E0 C8 B0 CE   F5
C798 : 8E 51 03 A5 15 C9 01 90   09
C7A0 : 08 D0 C3 A5 14 C9 40 B0   A8
C7A8 : BD A5 14 8D 4B 03 A5 15   7C
C7B0 : 8D 4C 03 AC 4D 03 84 14   E1
C7B8 : AD 4E 03 85 15 20 46 CB   01
C7C0 : A0 01 8C 4F 03 8C 50 03   CA
C7C8 : 8C 4D 03 88 8C 4E 03 8C   2D
C7D0 : 58 03 8C 59 03 88 AD 4C   BC
C7D8 : 03 C5 15 90 09 D0 1E AD   00
C7E0 : 4B 03 C5 14 B0 17 38 A5   91
C7E8 : 14 ED 4B 03 8D 55 03 A5   01
C7F0 : 15 ED 4C 03 8D 56 03 8C   20
C7F8 : 4F 03 4C 0E C8 38 AD 4B   39
C800 : 03 E5 14 8D 55 03 AD 4C   69
C808 : 03 E5 15 8D 56 03 AD 51   CC
C810 : 03 CD 54 03 B0 10 38 AD   37
C818 : 54 03 ED 51 03 8D 57 03   93
C820 : 8C 50 03 4C 2C C8 ED 54   88
C828 : 03 8D 57 03 AD 56 03 D0   63
C830 : 24 AD 55 03 CD 57 03 B0   E6
C838 : 1C AE 57 03 8D 57 03 8E   9E
C840 : 55 03 AD 4F 03 8D 59 03   74
C848 : AD 50 03 8D 58 03 C8 8C   6A
C850 : 4F 03 8C 50 03 AD 56 03   4B
C858 : 4A 8D 53 03 AD 55 03 6A   04
C860 : 8D 52 03 4C F9 C8 AD 4F   9C
C868 : 03 30 0E 18 65 14 85 14   3F
C870 : A5 15 69 00 85 15 4C 86   39
C878 : C8 38 A5 14 E9 01 85 14   2D
C880 : A5 15 E9 00 85 15 18 AD   E7
C888 : 54 03 6D 58 03 8D 54 03   B8
C890 : 18 AD 52 03 6D 57 03 8D   2D
C898 : 52 03 AD 53 03 69 00 8D   D8
C8A0 : 53 03 EE 4D 03 D0 03 EE   7B
C8A8 : 4E 03 AD 53 03 CD 56 03   4C
C8B0 : 90 47 D0 08 AD 55 03 CD   46
C8B8 : 52 03 B0 3D 38 AD 52 03   A0
C8C0 : ED 55 03 8D 52 03 AD 53   65
C8C8 : 03 ED 56 03 8D 53 03 AD   93
C8D0 : 59 03 30 0E 18 65 14 85   81
C8D8 : 14 A5 15 69 00 85 15 4C   4A
C8E0 : EF C8 38 A5 14 E9 01 85   96
C8E8 : 14 A5 15 E9 00 85 15 18   02
C8F0 : AD 54 03 6D 50 03 8D 54   32
C8F8 : 03 AC 54 03 8C 3F 03 20   D6
C900 : 33 C5 AD 4E 03 CD 56 03   49
C908 : 90 0B D0 08 AD 55 03 CD   80
C910 : 4D 03 B0 01 60 4C 66 C8   BF
C918 : 20 A0 C6 20 9B B7 8E 5A   A4
C920 : 03 86 02 78 A9 79 8D 14   BB
C928 : 03 A9 C9 8D 15 03 20 61   D1
C930 : C9 58 60 A9 00 8D 1A D0   E9
C938 : 78 A9 31 8D 14 03 A9 EA   59
C940 : 8D 15 03 58 20 A0 C6 20   86
C948 : 9B B7 E0 03 B0 10 E0 00   66
C950 : F0 0C E0 01 D0 04 20 35   B7
C958 : C6 60 20 48 C6 60 4C 00   00
C960 : C4 A9 01 8D 1A D0 AD 11   EC
C968 : D0 29 7F 8D 11 D0 A9 00   9D
C970 : 8D 12 D0 A9 01 8D 19 D0   F2
C978 : 60 AD 19 D0 29 01 D0 03   F3
C980 : 4C 31 EA C6 02 F0 06 20   F8
C988 : 61 C9 4C 31 EA AD 5A 03   93
C990 : 85 02 AD 18 D0 C9 0D F0   F6
C998 : 09 20 48 C6 20 61 C9 4C   69
C9A0 : 31 EA 20 35 C6 20 61 C9   7C
C9A8 : 4C 31 EA AD 00 DC C9 7F   0A
C9B0 : F0 45 C9 7E F0 46 C9 77   DC
C9B8 : F0 47 C9 7D F0 48 C9 7B   DD
C9C0 : F0 49 C9 6F F0 4A C9 76   2B
C9C8 : F0 4B C9 75 F0 4C C9 79   0A
C9D0 : F0 4D C9 7A F0 4E C9 6E   AE
C9D8 : F0 63 C9 67 F0 64 C9 6D   0D
C9E0 : F0 65 C9 6B F0 66 C9 66   99
C9E8 : F0 3F C9 65 F0 40 C9 69   A2
C9F0 : F0 41 C9 6A F0 42 60 A9   36
C9F8 : 00 4C 51 CA A9 01 4C 51   42
CA00 : CA A9 03 4C 51 CA A9 05   05
CA08 : 4C 51 CA A9 07 4C 51 CA   92
CA10 : A9 80 4C 51 CA A9 02 4C   D1
CA18 : 51 CA A9 04 4C 51 CA A9   87
CA20 : 06 4C 51 CA A9 08 4C 51   A9
CA28 : CA A9 82 4C 51 CA A9 84   0C
CA30 : 4C 51 CA A9 86 4C 51 CA   B2
CA38 : A9 88 4C 51 CA A9 81 4C   FB
CA40 : 51 CA A9 83 4C 51 CA A9   9F
CA48 : 85 4C 51 CA A9 87 4C 51   4C
CA50 : CA 8D 5B 03 60 4C 00 C4   0A
CA58 : 20 FD AE 20 EB B7 E0 C8   B8
CA60 : B0 F3 8E 5C 03 A5 15 C9   7E
CA68 : 01 90 08 D0 E8 A5 14 C9   6D
CA70 : 40 B0 E2 A5 14 8D 45 03   3E
CA78 : A5 15 8D 46 03 20 FD AE   5B
CA80 : 20 EB B7 E0 C8 B0 CE 8E   0A
CA88 : 5D 03 A5 15 C9 01 90 08   6A
CA90 : D0 C3 A5 14 C9 40 B0 BD   0B
CA98 : A5 14 8D 47 03 A5 15 8D   60
CAA0 : 48 03 20 46 CB AD 5C 03   DC
CAA8 : 8D 54 03 8D 51 03 AD 45   40
CAB0 : 03 85 14 AD 46 03 85 15   ED
CAB8 : AD 47 03 8D 4B 03 AD 48   8F
CAC0 : 03 8D 4C 03 20 C0 C7 AD   80
CAC8 : 47 03 85 14 8D 4B 03 AD   0F
CAD0 : 48 03 85 15 8D 4C 03 AD   40
CAD8 : 5C 03 8D 54 03 AD 5D 03   BD
CAE0 : 8D 51 03 20 C0 C7 AD 5D   96
CAE8 : 03 8D 54 03 8D 5D 03 AD   52
CAF0 : 45 03 8D 4B 03 AD 46 03   40
CAF8 : 8D 4C 03 AD 47 03 85 14   ED
CB00 : AD 48 03 85 15 20 C0 C7   28
CB08 : AD 45 03 85 14 8D 4B 03   AA
CB10 : AD 46 03 85 15 8D 4C 03   47
CB18 : AD 5C 03 8D 51 03 AD 5D   04
CB20 : 03 8D 54 03 20 C0 C7 60   47
CB28 : A9 9F 85 14 8D 4B 03 A9   17
CB30 : 00 85 15 8D 4C 03 A9 09   7F
CB38 : 8D 54 03 A9 C6 8D 51 03   09
CB40 : 20 46 CB 4C 65 CB 20 A0   76
CB48 : C6 20 9B B7 E0 03 B0 34   4D
CB50 : 8E 40 03 20 A0 C6 20 9B   BB
CB58 : B7 E0 04 B0 27 E0 00 F0   F2
CB60 : 23 8E 3E 03 60 20 C0 C7   54
CB68 : A9 63 8D 54 03 8D 51 03   99
CB70 : A9 01 85 14 8D 4C 03 A9   18
CB78 : 00 85 15 A9 3E 8D 4B 03   39
CB80 : 20 C0 C7 60 4C 00 C4 20   16
CB88 : 46 CB A0 0A 8C 3F 03 A2   31
CB90 : 0A 8E 45 03 A2 00 8E 46   84
CB98 : 03 AE 45 03 86 14 AE 46   F4
CBA0 : 03 86 15 20 33 C5 A9 0A   4C
CBA8 : 18 6D 45 03 8D 45 03 A9   8B
CBB0 : 00 6D 46 03 8D 46 03 C9   03
CBB8 : 01 D0 DE AD 45 03 C9 40   A3
CBC0 : D0 D7 A9 0A 18 6D 3F 03   17
CBC8 : 8D 3F 03 C9 BE D0 C0 60   25
CBD0 : 20 46 CB A0 0A 8C 3F 03   22
CBD8 : A2 00 8E 46 03 A2 05 8E   5D
CBE0 : 45 03 AD 45 03 85 14 AD   C3
CBE8 : 46 03 85 15 20 33 C5 A9   BA
CBF0 : 05 18 6D 45 03 8D 45 03   BD
CBF8 : C9 A0 D0 E6 A9 05 18 6D   20
CC00 : 3F 03 8D 3F 03 C9 64 D0   BE
CC08 : CF A0 0A 8C 3F 03 A2 00   D2
CC10 : 8E 46 03 A2 A0 8E 45 03   70
CC18 : AD 46 03 85 15 AD 45 03   34
CC20 : 85 14 20 33 C5 A9 05 18   0C
CC28 : 6D 45 03 8D 45 03 A9 00   BD
CC30 : 6D 46 03 8D 46 03 C9 01   D8
CC38 : D0 DE AD 45 03 C9 40 D0   AC
CC40 : D7 A9 05 18 6D 3F 03 8D   28
CC48 : 3F 03 C9 BE D0 C0 60 4C   80
CC50 : 00 C4 20 A0 C6 20 9B B7   1A
CC58 : E0 04 B0 F3 E0 00 F0 EF   96
CC60 : 8E 3E 03 E0 01 D0 0B A9   00
CC68 : A0 85 FB A9 00 85 FA 4C   B0
CC70 : 7A CC A9 E0 85 FB A9 00   B6
CC78 : 85 FA AD 5F 03 85 FD AD   81
CC80 : 5E 03 85 FC A9 34 78 85   8A
CC88 : 01 A0 00 B1 FC 91 FA A5   A3
CC90 : FA 18 69 01 85 FA A5 FB   D0
CC98 : 69 00 85 FB A5 FC 18 69   58
CCA0 : 01 85 FC A5 FD 69 00 85   8E
CCA8 : FD CD 61 03 D0 DD A5 FC   D1
CCB0 : CD 60 03 D0 D6 AD 3E 03   62
CCB8 : C9 03 D0 06 EE 3E 03 4C   7D
CCC0 : 67 CC AD 3E 03 C9 04 D0   F1
CCC8 : 03 CE 3E 03 A9 37 85 01   8F
CCD0 : 58 A9 01 8D 40 03 A9 08   C2
CCD8 : 8D 54 03 8D 51 03 A9 00   D6
CCE0 : 85 14 85 15 A9 3F 8D 4B   D5
CCE8 : 03 A9 01 8D 4C 03 20 C0   91
CCF0 : C7 60 A9 D7 8D 5F 03 A9   80
CCF8 : 86 8D 5E 03 A9 D8 8D 61   97
CD00 : 03 A9 C6 8D 60 03 20 52   7E
CD08 : CC 60 A9 D8 8D 5F 03 A9   BD
CD10 : C6 8D 5E 03 A9 DA 8D 61   FF
CD18 : 03 A9 06 8D 60 03 20 52   66
CD20 : CC 60 4C 00 C4 20 A0 C6   8D
CD28 : 20 9B B7 E0 04 B0 F3 E0   77
CD30 : 00 F0 EF 8E 3E 03 E0 02   F9
CD38 : D0 07 A9 F0 85 FB 4C 45   08
CD40 : CD A9 B0 85 FB A9 40 85   D8
CD48 : FA A9 D0 85 FD A9 00 85   34
CD50 : FC A9 34 78 85 01 A0 00   20
CD58 : B1 FC 91 FA C8 C0 A0 D0   02
CD60 : F7 A5 FA 18 69 40 85 FA   90
CD68 : A5 FB 69 01 85 FB A5 FC   4E
CD70 : 18 69 A0 85 FC A5 FD 69   DD
CD78 : 00 85 FD AD 3E 03 C9 01   95
CD80 : F0 0D C9 03 F0 09 A5 FB   AF
CD88 : C9 FF D0 CA 4C 95 CD A5   D2
CD90 : FB C9 BF D0 C1 A5 FA C9   42
CD98 : 40 D0 BB AD 3E 03 C9 03   0E
CDA0 : D0 06 EE 3E 03 4C 3A CD   0E
CDA8 : AD 3E 03 C9 04 D0 03 CE   DF
CDB0 : 3E 03 A9 37 85 01 58 60   44
CDB8 : 20 46 CB A0 64 8C 3F 03   B0
CDC0 : A9 F0 85 14 A9 00 85 15   A0
CDC8 : 20 33 C5 EE 3F 03 A9 F0   66
CDD0 : 85 14 A9 00 85 15 20 33   B2
CDD8 : C5 EE 3F 03 A9 F0 85 14   A5
CDE0 : A9 00 85 15 20 33 C5 AC   99
CDE8 : 3F 03 C8 C8 C8 C0 C3 D0   37
CDF0 : CC A0 37 8C 3F 03 A0 01   FC
CDF8 : 84 14 8C 49 03 A9 00 85   5B
CE00 : 15 20 33 C5 EE 49 03 AC   49
CE08 : 49 03 84 14 A9 00 85 15   51
CE10 : 20 33 C5 EE 49 03 AC 49   0B
CE18 : 03 84 14 A9 00 85 15 20   58
CE20 : 33 C5 AC 49 03 C8 C8 C8   B5
CE28 : C0 A1 D0 CC A9 EC 85 14   C7
CE30 : A9 00 85 15 8D 4C 03 A9   78
CE38 : F4 8D 4B 03 A0 37 8C 54   C5
CE40 : 03 8C 51 03 20 C0 C7 A9   B9
CE48 : F0 85 14 8D 4B 03 A9 00   25
CE50 : 8D 4C 03 85 15 A0 33 8C   B1
CE58 : 54 03 A0 3B 8C 51 03 20   5D
CE60 : C0 C7 60 A9 A1 8D 45 03   F3
CE68 : A9 00 8D 46 03 20 46 CB   1F
CE70 : AD 45 03 85 14 AD 46 03   FF
CE78 : 85 15 A0 37 8C 3F 03 20   A6
CE80 : 33 C5 AD 45 03 18 69 01   42
CE88 : 85 14 AD 46 03 69 00 85   D2
CE90 : 15 20 33 C5 AD 45 03 18   7C
CE98 : 69 02 85 14 AD 46 03 69   D2
CEA0 : 00 85 15 20 33 C5 A0 91   B3
CEA8 : 8C 3F 03 AD 45 03 85 14   F5
CEB0 : AD 46 03 85 15 20 33 C5   9D
CEB8 : AD 45 03 18 69 01 85 14   A9
CEC0 : AD 46 03 69 00 85 15 20   3F
CEC8 : 33 C5 AD 45 03 18 69 02   8C
CED0 : 85 14 AD 46 03 69 00 85   1A
CED8 : 15 20 33 C5 AD 45 03 18   C4
CEE0 : 69 05 8D 45 03 AD 46 03   95
CEE8 : 69 00 8D 46 03 C9 01 F0   E2
CEF0 : 03 4C 70 CE AD 45 03 C9   B4
CEF8 : 41 F0 03 4C 70 CE A9 4C   B8
CF00 : 85 14 A9 00 85 15 8D 4C   CA
CF08 : 03 A9 54 8D 4B 03 A0 37   64
CF10 : 8C 54 03 8C 51 03 20 C0   48
CF18 : C7 A9 50 85 14 8D 4B 03   59
CF20 : A9 00 85 15 8D 4C 03 A0   56
CF28 : 33 8C 54 03 A0 3B 8C 51   D0
CF30 : 03 20 C0 C7 60 20 46 CB   24
CF38 : A0 0A 8C 3F 03 A9 50 85   B2
CF40 : 14 A9 00 85 15 20 33 C5   84
CF48 : A9 F0 85 14 A9 00 85 15   28
CF50 : 20 33 C5 EE 3F 03 A9 50   AC
CF58 : 85 14 A9 00 85 15 20 33   3A
CF60 : C5 A9 F0 85 14 A9 00 85   80
CF68 : 15 20 33 C5 EE 3F 03 A9   5B
CF70 : 50 85 14 A9 00 85 15 20   7E
CF78 : 33 C5 A9 F0 85 14 A9 00   B6
CF80 : 85 15 20 33 C5 AC 3F 03   C3
CF88 : C8 C8 C8 C0 64 D0 AB A9   CD
CF90 : F0 8D 4B 03 A9 00 85 15   55
CF98 : 8D 4C 03 A0 8D 8C 54 03   B5
CFA0 : A0 95 8C 51 03 20 C0 C7   1C
CFA8 : A0 91 8C 54 03 8C 51 03   9E
CFB0 : A9 EC 85 14 A9 F4 8D 4B   C2
CFB8 : 03 A9 00 85 15 8D 4C 03   36
CFC0 : 20 C0 C7 60 8D 00 DD A9   E2
CFC8 : C8 8D 16 D0 60            C0
Listing 12. Hilfsprogramm »HiRes 1«
PROGRAMM : HIRES2.CAD.OBJ 9000 9EF9
-----------------------------------
9000 : 4C 00 C4 20 79 00 C9 2C   99
9008 : F0 03 4C 08 AF 60 20 03   12
9010 : 90 20 9B B7 E0 04 B0 E8   51
9018 : E0 00 F0 E4 8E 3E 03 E0   7A
9020 : 01 D0 0D A9 57 8D 40 90   06
9028 : A9 BD 8D 44 90 4C 3A 90   11
9030 : A9 57 8D 40 90 A9 FD 8D   5A
9038 : 44 90 78 A9 34 85 01 A9   DE
9040 : 57 85 FA A9 BD 85 FB A9   99
9048 : 07 85 FC A9 DA 85 FD A0   99
9050 : 00 B1 FC 11 FA 91 FA C8   44
9058 : C0 A9 D0 F5 A5 FA 18 69   45
9060 : 40 85 FA A5 FB 69 01 85   F0
9068 : FB A5 FC 18 69 A9 85 FC   6C
9070 : A5 FD 69 00 85 FD C9 DB   95
9078 : D0 D5 A5 FC C9 59 D0 CF   86
9080 : AD 3E 03 C9 03 D0 06 EE   F3
9088 : 3E 03 4C 23 90 AD 3E 03   35
9090 : C9 04 D0 03 CE 3E 03 A9   2E
9098 : 37 85 01 58 60 A0 C7 20   48
90A0 : A2 B3 A9 F6 A0 9F AA 20   57
90A8 : D4 BB A0 00 20 A2 B3 A9   BB
90B0 : F1 A0 9F AA 20 D4 BB A0   07
90B8 : A0 20 A2 B3 A9 EC A0 9F   4B
90C0 : AA 20 D4 BB A0 64 20 A2   1A
90C8 : B3 A9 E7 A0 9F AA 20 D4   D7
90D0 : BB A0 02 20 A2 B3 A9 E2   94
90D8 : A0 9F AA 20 D4 BB A0 16   D0
90E0 : 20 A2 B3 20 FE BA A9 DD   6A
90E8 : A0 9F AA 20 D4 BB A0 78   A5
90F0 : 20 A2 B3 A9 F6 A0 9F 20   B6
90F8 : 67 B8 A9 FB A0 9F AA 20   97
9100 : D4 BB A9 E7 8D 11 03 A9   DA
9108 : 9B 8D 12 03 A9 A5 A0 B1   FC
9110 : 20 A2 BB A9 F1 A0 9F 20   88
9118 : 50 B8 A9 91 A0 9F AA 20   53
9120 : D4 BB A0 06 20 A2 B3 A9   F4
9128 : 8C A0 9F AA 20 D4 BB A0   1A
9130 : 39 20 A2 B3 A9 F6 A0 9F   AC
9138 : 20 67 B8 A9 82 A0 9F AA   70
9140 : 20 D4 BB A0 6D 20 A2 B3   97
9148 : A9 82 A0 9F 20 28 BA A9   D0
9150 : 87 A0 9F AA 20 D4 BB A0   3D
9158 : 67 20 A2 B3 A9 82 A0 9F   5F
9160 : 20 28 BA A9 7D A0 9F AA   29
9168 : 20 D4 BB A0 D0 20 A2 B3   F5
9170 : A9 7D A0 9F 20 67 B8 A9   67
9178 : 7D A0 9F AA 20 D4 BB A0   5B
9180 : 03 20 A2 B3 A9 78 A0 9F   D2
9188 : AA 20 D4 BB A9 00 8D 4F   5E
9190 : 9F A0 05 20 A2 B3 A9 50   D4
9198 : A0 9F AA 20 D4 BB A0 0C   7C
91A0 : 20 A2 B3 A9 9B A0 9F AA   C6
91A8 : 20 D4 BB A9 F9 A0 BA 20   26
91B0 : A2 BB A9 9B A0 9F 20 0F   B3
91B8 : BB A9 04 A0 9F AA 20 D4   D6
91C0 : BB A0 66 20 A2 B3 A9 9B   0F
91C8 : A0 9F AA 20 D4 BB A9 E7   88
91D0 : A0 9F 20 A2 BB A9 9B A0   55
91D8 : 9F 20 0F BB A9 FF A0 9E   1D
91E0 : AA 20 D4 BB A0 0C 20 A2   77
91E8 : B3 A9 F9 A0 BA 20 0F BB   63
91F0 : A9 FA A0 9E AA 20 D4 BB   89
91F8 : A0 66 20 A2 B3 A9 E7 A0   91
9200 : 9F 20 0F BB A9 F5 A0 9E   F5
9208 : AA 20 D4 BB A9 E2 A0 9F   E2
9210 : 20 A2 BB A9 F1 A0 9F 20   88
9218 : 50 B8 A9 EB A0 9E AA 20   96
9220 : D4 BB A9 F9 A0 BA 20 A2   21
9228 : BB A9 EB A0 9E 20 28 BA   C8
9230 : A9 F0 A0 9E AA 20 D4 BB   C4
9238 : A9 F9 A0 BA 20 A2 BB A9   B7
9240 : E2 A0 9F 20 28 BA A9 E6   2B
9248 : A0 9E AA 20 D4 BB A0 0F   B2
9250 : 20 A2 B3 A9 E1 A0 9E AA   D6
9258 : 20 D4 BB A9 F9 A0 BA 20   D6
9260 : A2 BB A9 E1 A0 9E 20 0F   24
9268 : BB A9 DC A0 9E AA 20 D4   AC
9270 : BB A9 F1 A0 9F 20 50 B8   3E
9278 : A9 D2 A0 9E AA 20 D4 BB   FD
9280 : A9 E1 A0 9E 20 A2 BB A9   6F
9288 : F1 A0 9F 20 50 B8 A9 D7   D6
9290 : A0 9E AA 20 D4 BB A0 29   2E
9298 : 20 A2 B3 A9 FB A0 9F 20   AF
92A0 : 67 B8 A9 CD A0 9E AA 20   71
92A8 : D4 BB A0 01 20 A2 B3 A9   DB
92B0 : C8 A0 9E AA 20 D4 BB 60   1E
92B8 : EA A9 B5 A0 9F 20 A2 BB   F5
92C0 : A9 B0 A0 9F 20 5B BC C9   41
92C8 : FF F0 53 A9 BA A0 9F AA   CE
92D0 : 20 D4 BB A9 B0 A0 9F 20   4D
92D8 : A2 BB A9 B5 A0 9F AA 20   6B
92E0 : D4 BB A9 BA A0 9F 20 A2   20
92E8 : BB A9 B0 A0 9F AA 20 D4   31
92F0 : BB A9 AB A0 9F 20 A2 BB   7C
92F8 : A9 BA A0 9F AA 20 D4 BB   91
9300 : A9 A6 A0 9F 20 A2 BB A9   72
9308 : AB A0 9F AA 20 D4 BB A9   2B
9310 : BA A0 9F 20 A2 BB A9 A6   02
9318 : A0 9F AA 20 D4 BB EA A9   61
9320 : B5 A0 9F 20 A2 BB A9 F1   A4
9328 : A0 9F 20 5B BC 8D A0 9F   05
9330 : C9 FF D0 15 A9 B0 A0 9F   B1
9338 : 20 A2 BB A9 F1 A0 9F 20   B0
9340 : 5B BC C9 FF D0 03 4C E1   86
9348 : 95 AD A0 9F C9 FF D0 5F   6E
9350 : A9 AB A0 9F 20 A2 BB A9   44
9358 : A6 A0 9F 20 50 B8 A9 96   D9
9360 : A0 9F AA 20 D4 BB A9 B0   B2
9368 : A0 9F 20 28 BA A9 9B A0   8E
9370 : 9F AA 20 D4 BB A9 B5 A0   28
9378 : 9F 20 A2 BB A9 B0 A0 9F   29
9380 : 20 50 B8 A9 9B A0 9F 20   A9
9388 : 0F BB A9 AB A0 9F 20 50   7D
9390 : B8 A9 96 A0 9F 20 67 B8   E0
9398 : A9 AB A0 9F AA 20 D4 BB   A9
93A0 : A9 F1 A0 9F 20 A2 BB A9   B7
93A8 : B5 A0 9F AA 20 D4 BB EA   58
93B0 : A9 FB A0 9F 20 A2 BB A9   CC
93B8 : B0 A0 9F 20 5B BC 8D A0   B7
93C0 : 9F C9 FF F0 03 4C 4B 94   4B
93C8 : EA A9 B5 A0 9F 20 5B BC   EA
93D0 : C9 FF D0 03 4C E1 95 AD   B3
93D8 : A0 9F C9 FF D0 6D A9 A6   26
93E0 : A0 9F 20 A2 BB A9 AB A0   A5
93E8 : 9F 20 50 B8 A9 96 A0 9F   D3
93F0 : AA 20 D4 BB A9 B5 A0 9F   61
93F8 : 20 A2 BB A9 FB A0 9F 20   11
9400 : 50 B8 A9 96 A0 9F 20 28   C1
9408 : BA A9 9B A0 9F AA 20 D4   0B
9410 : BB A9 B5 A0 9F 20 A2 BB   1E
9418 : A9 B0 A0 9F 20 50 B8 A9   F0
9420 : 9B A0 9F 20 0F BB A9 A6   BA
9428 : A0 9F 20 50 B8 A9 96 A0   1E
9430 : 9F 20 67 B8 A9 A6 A0 9F   62
9438 : AA 20 D4 BB A9 FB A0 9F   DB
9440 : 20 A2 BB A9 B0 A0 9F AA   B9
9448 : 20 D4 BB EA A9 AB A0 9F   D8
9450 : 20 A2 BB A9 A6 A0 9F 20   13
9458 : 5B BC C9 FF F0 53 A9 A1   17
9460 : A0 9F AA 20 D4 BB A9 A6   9E
9468 : A0 9F 20 A2 BB A9 AB A0   2D
9470 : 9F AA 20 D4 BB A9 A1 A0   D8
9478 : 9F 20 A2 BB A9 A6 A0 9F   D9
9480 : AA 20 D4 BB A9 B5 A0 9F   F1
9488 : 20 A2 BB A9 A1 A0 9F AA   10
9490 : 20 D4 BB A9 B0 A0 9F 20   0D
9498 : A2 BB A9 B5 A0 9F AA 20   2B
94A0 : D4 BB A9 A1 A0 9F 20 A2   BD
94A8 : BB A9 B0 A0 9F AA 20 D4   F1
94B0 : BB EA A9 F1 A0 9F 20 A2   56
94B8 : BB A9 AB A0 9F 20 5B BC   29
94C0 : 8D A0 9F C9 01 F0 03 4C   FB
94C8 : 3F 95 EA A9 A6 A0 9F 20   F0
94D0 : 5B BC C9 01 D0 03 4C E1   36
94D8 : 95 AD A0 9F C9 01 D0 5F   06
94E0 : A9 B5 A0 9F 20 A2 BB A9   D9
94E8 : B0 A0 9F 20 50 B8 A9 96   73
94F0 : A0 9F AA 20 D4 BB A9 A6   2E
94F8 : A0 9F 20 28 BA A9 9B A0   1E
9500 : 9F AA 20 D4 BB A9 AB A0   90
9508 : 9F 20 A2 BB A9 A6 A0 9F   69
9510 : 20 50 B8 A9 9B A0 9F 20   39
9518 : 0F BB A9 B5 A0 9F 20 50   4E
9520 : B8 A9 96 A0 9F 20 67 B8   70
9528 : A9 B5 A0 9F AA 20 D4 BB   3E
9530 : A9 F1 A0 9F 20 A2 BB A9   47
9538 : AB A0 9F AA 20 D4 BB EA   DE
9540 : A9 F6 A0 9F 20 A2 BB A9   DA
9548 : A6 A0 9F 20 5B BC 8D A0   3D
9550 : 9F C9 FF F0 03 4C DB 95   1F
9558 : EA A9 AB A0 9F 20 5B BC   F8
9560 : C9 FF D0 03 4C E1 95 AD   43
9568 : A0 9F C9 FF D0 6D A9 B0   CB
9570 : A0 9F 20 A2 BB A9 B5 A0   5D
9578 : 9F 20 50 B8 A9 96 A0 9F   63
9580 : AA 20 D4 BB A9 AB A0 9F   A1
9588 : 20 A2 BB A9 F6 A0 9F 20   50
9590 : 50 B8 A9 96 A0 9F 20 28   51
9598 : BA A9 9B A0 9F AA 20 D4   9B
95A0 : BB A9 AB A0 9F 20 A2 BB   2C
95A8 : A9 A6 A0 9F 20 50 B8 A9   7B
95B0 : 9B A0 9F 20 0F BB A9 B0   5E
95B8 : A0 9F 20 50 B8 A9 96 A0   AE
95C0 : 9F 20 67 B8 A9 B0 A0 9F   42
95C8 : AA 20 D4 BB A9 F6 A0 9F   43
95D0 : 20 A2 BB A9 A6 A0 9F AA   A9
95D8 : 20 D4 BB A9 01 8D A0 9F   C5
95E0 : 60 A9 00 8D A0 9F 60 4C   E8
95E8 : 00 C4 20 FD AE 20 8A AD   84
95F0 : A9 D8 A0 9F AA 20 D4 BB   98
95F8 : 20 FD AE 20 8A AD A9 CE   21
9600 : A0 9F AA 20 D4 BB 20 FD   C6
9608 : AE 20 8A AD A9 C4 A0 9F   A1
9610 : AA 20 D4 BB 20 FD AE 20   64
9618 : 8A AD A9 D3 A0 9F AA 20   50
9620 : D4 BB 20 FD AE 20 8A AD   0B
9628 : A9 C9 A0 9F AA 20 D4 BB   48
9630 : 20 FD AE 20 8A AD A9 BF   3B
9638 : A0 9F AA 20 D4 BB 20 46   8F
9640 : CB A9 D8 A0 9F 20 A2 BB   27
9648 : A9 EC A0 9F 20 67 B8 A9   F7
9650 : B5 A0 9F AA 20 D4 BB A9   7D
9658 : C4 A0 9F 20 A2 BB A9 E7   D7
9660 : A0 9F 20 67 B8 A9 AB A0   8E
9668 : 9F AA 20 D4 BB A9 D3 A0   99
9670 : 9F 20 A2 BB A9 EC A0 9F   03
9678 : 20 67 B8 A9 B0 A0 9F AA   93
9680 : 20 D4 BB A9 BF A0 9F 20   EE
9688 : A2 BB A9 E7 A0 9F 20 67   C5
9690 : B8 A9 A6 A0 9F AA 20 D4   54
9698 : BB 20 B8 92 AD A0 9F C9   D6
96A0 : 00 D0 03 4C 54 97 EA A9   54
96A8 : E2 A0 9F 20 A2 BB A9 B5   E0
96B0 : A0 9F 20 0F BB A9 B5 A0   2B
96B8 : 9F AA 20 D4 BB A9 DD A0   11
96C0 : 9F 20 A2 BB A9 AB A0 9F   49
96C8 : 20 0F BB A9 F9 A0 BA 20   64
96D0 : 67 B8 A9 AB A0 9F AA 20   65
96D8 : D4 BB A9 E2 A0 9F 20 A2   1D
96E0 : BB A9 B0 A0 9F 20 0F BB   5F
96E8 : A9 B0 A0 9F AA 20 D4 BB   7C
96F0 : A9 DD A0 9F 20 A2 BB A9   FD
96F8 : A6 A0 9F 20 0F BB A9 F9   44
9700 : A0 BA 20 67 B8 A9 A6 A0   A7
9708 : 9F AA 20 D4 BB 20 13 97   D7
9710 : 4C 54 97 EA A9 B0 A0 9F   AB
9718 : 20 A2 BB 20 F7 B7 A5 14   78
9720 : 8D 4B 03 A5 15 8D 4C 03   BD
9728 : A9 A6 A0 9F 20 A2 BB 20   87
9730 : F7 B7 A5 14 8D 51 03 A9   B1
9738 : AB A0 9F 20 A2 BB 20 F7   98
9740 : B7 A5 14 8D 54 03 A9 B5   F0
9748 : A0 9F 20 A2 BB 20 F7 B7   20
9750 : 20 C0 C7 60 EA A9 CE A0   47
9758 : 9F 20 A2 BB A9 EC A0 9F   EB
9760 : 20 67 B8 A9 B5 A0 9F AA   CB
9768 : 20 D4 BB A9 C4 A0 9F 20   26
9770 : A2 BB A9 E7 A0 9F 20 67   AD
9778 : B8 A9 AB A0 9F AA 20 D4   7D
9780 : BB A9 C9 A0 9F 20 A2 BB   93
9788 : A9 EC A0 9F 20 67 B8 A9   37
9790 : B0 A0 9F AA 20 D4 BB A9   B8
9798 : BF A0 9F 20 A2 BB A9 E7   12
97A0 : A0 9F 20 67 B8 A9 A6 A0   BA
97A8 : 9F AA 20 D4 BB 20 B8 92   04
97B0 : AD A0 9F C9 00 D0 03 4C   FA
97B8 : 32 98 EA A9 E2 A0 9F 20   18
97C0 : A2 BB A9 B5 A0 9F 20 0F   06
97C8 : BB A9 EC A0 9F 20 67 B8   B1
97D0 : A9 B5 A0 9F AA 20 D4 BB   E6
97D8 : A9 DD A0 9F 20 A2 BB A9   E5
97E0 : AB A0 9F 20 0F BB A9 F9   31
97E8 : A0 BA 20 67 B8 A9 AB A0   A3
97F0 : 9F AA 20 D4 BB A9 E2 A0   5D
97F8 : 9F 20 A2 BB A9 B0 A0 9F   A9
9800 : 20 0F BB A9 EC A0 9F 20   5E
9808 : 67 B8 A9 B0 A0 9F AA 20   3E
9810 : D4 BB A9 DD A0 9F 20 A2   B5
9818 : BB A9 A6 A0 9F 20 0F BB   14
9820 : A9 F9 A0 BA 20 67 B8 A9   B9
9828 : A6 A0 9F AA 20 D4 BB 20   33
9830 : 13 97 EA A9 CE A0 9F 20   AF
9838 : A2 BB A9 EC A0 9F 20 67   16
9840 : B8 A9 B5 A0 9F AA 20 D4   C8
9848 : BB A9 D8 A0 9F 20 A2 BB   1F
9850 : A9 E7 A0 9F 20 67 B8 A9   7C
9858 : AB A0 9F AA 20 D4 BB A9   7B
9860 : C9 A0 9F 20 A2 BB A9 EC   EE
9868 : A0 9F 20 67 B8 A9 B0 A0   AA
9870 : 9F AA 20 D4 BB A9 D3 A0   A1
9878 : 9F 20 A2 BB A9 E7 A0 9F   E3
9880 : 20 67 B8 A9 A6 A0 9F AA   FA
9888 : 20 D4 BB 20 B8 92 AD A0   1D
9890 : 9F C9 00 D0 03 4C 10 99   34
9898 : EA A9 E2 A0 9F 20 A2 BB   20
98A0 : A9 B5 A0 9F 20 0F BB A9   FD
98A8 : EC A0 9F 20 67 B8 A9 B5   1E
98B0 : A0 9F AA 20 D4 BB A9 DD   5C
98B8 : A0 9F 20 A2 BB A9 AB A0   7D
98C0 : 9F 20 0F BB A9 E7 A0 9F   46
98C8 : 20 67 B8 A9 AB A0 9F AA   93
98D0 : 20 D4 BB A9 E2 A0 9F 20   70
98D8 : A2 BB A9 B0 A0 9F 20 0F   7E
98E0 : BB A9 EC A0 9F 20 67 B8   C9
98E8 : A9 B0 A0 9F AA 20 D4 BB   7C
98F0 : A9 DD A0 9F 20 A2 BB A9   FD
98F8 : A6 A0 9F 20 0F BB A9 E7   1F
9900 : A0 9F 20 67 B8 A9 A6 A0   1A
9908 : 9F AA 20 D4 BB 20 13 97   D7
9910 : 60 4C 00 C4 AD 01 D0 38   C6
9918 : E9 01 8D 01 D0 60 AD 01   CE
9920 : D0 18 69 01 8D 01 D0 60   5C
9928 : AD 00 D0 38 E9 01 8D 00   ED
9930 : D0 AD 10 D0 E9 00 8D 10   EA
9938 : D0 60 AD 00 D0 18 69 01   19
9940 : 8D 00 D0 AD 10 D0 69 00   E4
9948 : 8D 10 D0 60 4C 00 C4 A5   41
9950 : CB C9 40 D0 FA AD 00 DC   01
9958 : 29 10 F0 F9 A9 00 85 C6   43
9960 : 8D 77 02 20 FD AE 20 EB   DB
9968 : B7 E0 C8 B0 DF 8A 18 69   5D
9970 : 2F 8D 01 D0 A5 15 C9 01   EC
9978 : 90 08 D0 D0 A5 14 C9 40   FD
9980 : B0 CA A5 14 18 69 15 8D   BD
9988 : 00 D0 A5 15 69 00 8D 10   E9
9990 : D0 20 03 90 20 9B B7 E0   C3
9998 : 02 B0 B1 8E E8 07 A9 00   9E
99A0 : 8D 17 D0 8D 1D D0 8D E9   01
99A8 : 07 8D EA 07 8D EC 07 8D   89
99B0 : ED 07 A9 FA 8D EE 07 A9   AA
99B8 : 0B 8D 27 D0 A9 FE 8D F8   28
99C0 : C3 8D F8 8F A9 01 8D 15   7D
99C8 : D0 A5 CB C9 40 D0 20 20   E2
99D0 : AB C9 C9 00 D0 15 A9 FD   2B
99D8 : 8D EE 07 A9 00 8D C3 9A   84
99E0 : 20 F4 9A A9 FA 8D C1 9A   AE
99E8 : 4C C9 99 C9 80 D0 03 4C   EC
99F0 : D4 9A EE EE 07 AD EE 07   52
99F8 : C9 00 D0 17 A9 FD 8D EE   77
9A00 : 07 AD C3 9A 18 69 0A 8D   32
9A08 : C3 9A C9 C9 90 05 A9 C8   2D
9A10 : 8D C3 9A AD 5B 03 29 7F   4D
9A18 : C9 01 D0 06 20 14 99 4C   F8
9A20 : 6D 9A C9 02 D0 09 20 14   8B
9A28 : 99 20 3A 99 4C 6D 9A C9   C1
9A30 : 03 D0 06 20 3A 99 4C 6D   9D
9A38 : 9A C9 04 D0 09 20 3A 99   80
9A40 : 20 1E 99 4C 6D 9A C9 05   3C
9A48 : D0 06 20 1E 99 4C 6D 9A   CE
9A50 : C9 06 D0 09 20 28 99 20   5C
9A58 : 1E 99 4C 6D 9A C9 07 D0   B9
9A60 : 06 20 28 99 4C 6D 9A 20   8E
9A68 : 28 99 20 14 99 AD 01 D0   94
9A70 : C9 2F B0 08 A9 2F 8D 01   4A
9A78 : D0 4C 9E 9A AD E8 07 C9   3B
9A80 : 01 D0 0F AD 01 D0 C9 E4   EA
9A88 : 90 14 A9 E3 8D 01 D0 4C   C6
9A90 : 9E 9A AD 01 D0 C9 F7 90   63
9A98 : 05 A9 F6 8D 01 D0 AD 10   4F
9AA0 : D0 C9 01 D0 0F AD 00 D0   AF
9AA8 : C9 55 90 14 A9 54 8D 00   36
9AB0 : D0 4C C0 9A AD 00 D0 C9   DB
9AB8 : 15 B0 05 A9 15 8D 00 D0   FB
9AC0 : A2 FA A0 00 20 F4 9A 6A   F0
9AC8 : 20 F4 9A C8 D0 F6 E8 D0   2C
9AD0 : F1 4C C9 99 AD 00 D0 38   1B
9AD8 : E9 15 8D E8 07 AD 10 D0   8C
9AE0 : E9 00 8D E9 07 AD 01 D0   ED
9AE8 : 38 E9 2F 8D EA 07 A9 00   20
9AF0 : 8D 15 D0 60 A9 FF 8D C1   9C
9AF8 : 9A EE EC 07 AD EC 07 C9   17
9B00 : 00 D0 1E EE ED 07 AD ED   77
9B08 : 07 C9 05 D0 14 A9 00 8D   F9
9B10 : ED 07 8D EC 07 AD 27 D0   9E
9B18 : 29 0F C9 0B D0 04 EE 27   D4
9B20 : D0 60 CE 27 D0 60 20 FD   45
9B28 : AE 20 8A AD 20 E2 BA A9   96
9B30 : 91 A0 9F 20 67 B8 A9 D8   92
9B38 : A0 9F AA 20 D4 BB 20 FD   FE
9B40 : AE 20 8A AD 20 E2 BA A9   AE
9B48 : 91 A0 9F 20 67 B8 A9 CE   96
9B50 : A0 9F AA 20 D4 BB 20 FD   16
9B58 : AE 20 8A AD 20 E2 BA A9   C6
9B60 : 91 A0 9F 20 67 B8 A9 C4   9A
9B68 : A0 9F AA 20 D4 BB 20 FD   2E
9B70 : AE 20 8A AD A9 9B A0 9F   C0
9B78 : AA 20 D4 BB 20 D6 9C 90   2B
9B80 : 01 60 EA A9 9B A0 9F 20   1F
9B88 : A2 BB EA A9 8C A0 9F 20   84
9B90 : 28 BA A9 87 A0 9F 20 67   C7
9B98 : B8 20 F7 B7 A5 14 85 FA   5C
9BA0 : A5 15 85 FB A9 D8 A0 9F   D4
9BA8 : 20 A2 BB 20 F7 B7 A5 14   08
9BB0 : A0 00 91 FA C8 A5 15 91   45
9BB8 : FA A9 CE A0 9F 20 A2 BB   4B
9BC0 : 20 F7 B7 A0 02 A5 14 91   9E
9BC8 : FA A5 15 C8 91 FA A9 C4   14
9BD0 : A0 9F 20 A2 BB 20 F7 B7   A8
9BD8 : A0 04 A5 14 91 FA A5 15   18
9BE0 : C8 91 FA 60 4C 00 C4 A5   5F
9BE8 : 49 A6 4A 8D 62 03 8E 63   08
9BF0 : 03 AD 45 03 85 FA AD 46   EF
9BF8 : 03 85 FB A9 E2 A0 9F 20   E4
9C00 : 5B BC C9 00 F0 13 C9 01   FC
9C08 : F0 1E A0 01 20 37 9C A0   BF
9C10 : 00 20 4D 9C A0 01 4C B5   B6
9C18 : 9C A0 03 20 37 9C A0 02   A8
9C20 : 20 4D 9C A0 03 4C B5 9C   C5
9C28 : A0 05 20 37 9C A0 04 20   59
9C30 : 4D 9C A0 05 4C B5 9C B1   DC
9C38 : FA A8 20 A2 B3 A9 82 A0   B7
9C40 : 9F 20 28 BA A9 9B A0 9F   8A
9C48 : AA 20 D4 BB 60 B1 FA A8   80
9C50 : 20 A2 B3 A9 9B A0 9F 20   61
9C58 : 67 B8 A9 9B A0 9F AA 20   EB
9C60 : D4 BB A9 91 A0 9F 20 A2   7B
9C68 : BB A9 9B A0 9F 20 50 B8   A0
9C70 : 20 FE BA 60 A9 E7 8D 11   FC
9C78 : 03 A9 9B 8D 12 03 20 FD   9E
9C80 : AE 20 8A AD A9 9B A0 9F   D0
9C88 : AA 20 D4 BB 20 D6 9C B0   7B
9C90 : 7A A9 9B A0 9F 20 A2 BB   D7
9C98 : EA A9 8C A0 9F 20 28 BA   9F
9CA0 : A9 87 A0 9F 20 67 B8 20   89
9CA8 : F7 B7 A5 14 8D 45 03 A5   C1
9CB0 : 15 8D 46 03 60 B1 FA 29   50
9CB8 : 80 F0 06 20 58 BC 4C CB   6A
9CC0 : 9C 20 58 BC A9 F1 A0 9F   06
9CC8 : 20 50 B8 AD 62 03 85 49   DB
9CD0 : AD 63 03 85 4A 60 EA A9   47
9CD8 : 9B A0 9F 20 A2 BB 20 F7   28
9CE0 : B7 A5 15 C9 05 90 08 D0   7F
9CE8 : 23 A5 14 C9 2A B0 1D 18   E9
9CF0 : 60 EA A9 96 A0 9F 20 A2   CF
9CF8 : BB 20 F7 B7 A5 15 C9 01   E4
9D00 : 90 08 D0 08 A5 14 C9 A6   39
9D08 : B0 02 18 60 38 60 20 FD   CE
9D10 : AE 20 8A AD A9 9B A0 9F   60
9D18 : AA 20 D4 BB 20 FD AE 20   6C
9D20 : 8A AD A9 96 A0 9F AA 20   B0
9D28 : D4 BB 20 03 90 20 9B B7   2A
9D30 : E0 40 B0 61 8E 64 03 20   E1
9D38 : 03 90 20 9B B7 E0 04 B0   F3
9D40 : 54 8E 65 03 20 D6 9C B0   22
9D48 : C2 20 F1 9C B0 BD EA A9   22
9D50 : 96 A0 9F 20 A2 BB A9 78   C2
9D58 : A0 9F 20 28 BA A9 7D A0   05
9D60 : 9F 20 67 B8 20 F7 B7 A5   EC
9D68 : 14 85 FA A5 15 85 FB A9   73
9D70 : 9B A0 9F 20 A2 BB 20 F7   C0
9D78 : B7 A5 14 A0 00 91 FA C8   25
9D80 : A5 15 91 FA AD 65 03 0A   9A
9D88 : 0A 0A 0A 0A 0A 18 6D 64   3B
9D90 : 03 C8 91 FA 60 4C 00 C4   AD
9D98 : 20 FD AE 20 8A AD A9 96   50
9DA0 : A0 9F AA 20 D4 BB 20 F1   4E
9DA8 : 9C B0 2D A9 96 A0 9F 20   4A
9DB0 : A2 BB EA A9 78 A0 9F 20   6B
9DB8 : 28 BA A9 7D A0 9F 20 67   AE
9DC0 : B8 20 F7 B7 A5 14 8D 45   39
9DC8 : 03 A5 15 8D 46 03 A9 D9   6C
9DD0 : 8D 11 03 A9 9D 8D 12 03   70
9DD8 : 60 A5 49 8D 62 03 A5 4A   78
9DE0 : 8D 63 03 EA A9 E2 A0 9F   B0
9DE8 : 20 5B BC C9 01 F0 4E C9   82
9DF0 : 00 F0 33 AD 45 03 85 FA   63
9DF8 : AD 46 03 85 FB A0 01 B1   66
9E00 : FA A8 20 A2 B3 A9 82 A0   7F
9E08 : 9F 20 28 BA A9 9B A0 9F   52
9E10 : AA 20 D4 BB A0 00 B1 FA   3E
9E18 : A8 20 A2 B3 A9 9B A0 9F   29
9E20 : 20 67 B8 4C 55 9E AD 45   37
9E28 : 03 85 FA AD 46 03 85 FB   ED
9E30 : A0 02 B1 FA 29 3F A8 20   0C
9E38 : A2 B3 4C 55 9E AD 45 03   E4
9E40 : 85 FA AD 46 03 85 FB A0   04
9E48 : 02 B1 FA 4A 4A 4A 4A 4A   DF
9E50 : 4A A8 20 A2 B3 AD 62 03   83
9E58 : 85 49 AD 63 03 85 4A 60   A0
9E60 : EB D1 67 63 67 73 9B 6F   D9
9E68 : 73 6D 9B 4F 43 4F 4D 6B   1D
9E70 : 5B DB DB 6F 57 55 43 51   6D
9E78 : 63 67 65 4D B5 93 83 85   A3
9E80 : 89 B5 71 43 DB 4F 4D 6B   ED
9E88 : 69 73 59 B5 5D 63 55 55   A9
9E90 : 4F 4D 51 6B 4B B5 A9 DB   08
9E98 : 4F 4D 6B 69 73 59 B5 49   01
9EA0 : 63 5D 4F 5B 6B 63 6B 51   13
9EA8 : DB 73 5D 5D B5 51 63 67   82
9EB0 : 65 4D 4F B5 51 6B 4F 6B   CB
9EB8 : 51 49 6B 6D B5 B3 DB 49   31
9EC0 : 6B 51 4F 63 57 59 B5 95   56
9EC8 : 99 8B B5 97 B5 93 8B 99   E0
9ED0 : 93 99 93 83 85 89 DB FF   99
9ED8 : A5 02 C9 E3 F0 03 4C E2   8B
9EE0 : FC A0 00 B9 60 9E C9 FF   86
9EE8 : F0 0E 49 FF 18 4A 38 E9   BA
9EF0 : 05 20 D2 FF C8 4C E3 9E   76
9EF8 : 60                        B3
Listing 13. Hilfsprogramm »HiRes 2«
PROGRAMM : HIRES3.CAD.OBJ 5500 6666
-----------------------------------
5500 : AA 4C D4 BB 20 FD AE 20   6A
5508 : 8A AD A9 B5 A0 9F 20 00   11
5510 : 55 20 FD AE 20 8A AD A9   2B
5518 : AB A0 9F 20 00 55 20 FD   26
5520 : AE 20 8A AD A9 B0 A0 9F   18
5528 : 20 00 55 20 FD AE 20 8A   8D
5530 : AD A9 A6 A0 9F 20 00 55   15
5538 : 20 46 CB 20 B8 92 AD A0   8A
5540 : 9F C9 01 D0 03 20 13 97   CB
5548 : 60 4C 00 C4 20 03 90 20   04
5550 : 9B B7 E0 04 B0 F3 E0 00   AE
5558 : F0 EF 8E 3E 03 A2 02 8E   16
5560 : 40 03 AD 4F 9F C9 00 F0   A1
5568 : 03 4C 4A 58 A9 93 8D 01   9E
5570 : D0 A9 B5 8D 00 D0 A9 00   61
5578 : 8D 10 D0 8D E8 07 AD 00   71
5580 : DC 29 10 F0 F9 A5 CB C9   A2
5588 : 40 D0 FA A9 00 8D 77 02   72
5590 : 85 C6 20 9E 99 AD 77 02   3D
5598 : C9 00 D0 EF AC E9 07 20   0A
55A0 : A2 B3 A9 82 A0 9F 20 28   AE
55A8 : BA A9 73 A0 9F 20 00 55   CD
55B0 : AC E8 07 20 A2 B3 A9 73   EC
55B8 : A0 9F 20 67 B8 A9 73 A0   05
55C0 : 9F 20 00 55 AC EA 07 20   99
55C8 : A2 B3 A9 6E A0 9F 20 00   03
55D0 : 55 20 85 57 A9 00 8D E8   24
55D8 : 07 AD 00 DC 29 10 F0 F9   1C
55E0 : A5 CB C9 40 D0 FA A9 00   71
55E8 : 8D 77 02 85 C6 AD 00 DC   F6
55F0 : 29 10 D0 08 A0 00 C8 D0   25
55F8 : FD 4C ED 55 20 9E 99 AD   FA
5600 : 77 02 C9 00 D0 E0 AC E9   85
5608 : 07 20 A2 B3 A9 82 A0 9F   AF
5610 : 20 28 BA A9 69 A0 9F 20   82
5618 : 00 55 AC E8 07 20 A2 B3   6E
5620 : A9 69 A0 9F 20 67 B8 A9   0D
5628 : 69 A0 9F 20 00 55 AC EA   00
5630 : 07 20 A2 B3 A9 64 A0 9F   E6
5638 : 20 00 55 A9 73 A0 9F 20   DE
5640 : A2 BB A9 69 A0 9F 20 50   7F
5648 : B8 20 58 BC 20 0C BC A9   67
5650 : E2 A0 9F 20 78 BF A9 9B   D2
5658 : A0 9F 20 00 55 A9 6E A0   6E
5660 : 9F 20 A2 BB A9 64 A0 9F   AF
5668 : 20 50 B8 20 58 BC 20 0C   E6
5670 : BC A9 E2 A0 9F 20 78 BF   2A
5678 : A9 9B A0 9F 20 67 B8 20   6B
5680 : 71 BF A9 5F A0 9F 20 00   AF
5688 : 55 A9 F1 A0 9F 20 5B BC   24
5690 : C9 00 D0 03 4C 4D 58 4C   17
5698 : 7A 58 EA A9 5F A0 9F 20   E8
56A0 : A2 BB A9 50 A0 9F 20 0F   3A
56A8 : BB A9 5A A0 9F 20 00 55   88
56B0 : A9 E2 A0 9F 20 28 BA A9   68
56B8 : 4A A0 9F 20 00 55 A9 F1   73
56C0 : A0 9F 20 A2 BB A9 55 A0   2C
56C8 : 9F 20 00 55 EA A9 55 A0   B5
56D0 : 9F 20 A2 BB A9 5A A0 9F   CE
56D8 : 20 67 B8 A9 9B A0 9F 20   8D
56E0 : 00 55 A9 55 A0 9F 20 A2   6D
56E8 : BB 20 64 E2 A9 5F A0 9F   80
56F0 : 20 28 BA A9 73 A0 9F 20   03
56F8 : 67 B8 A9 B5 A0 9F 20 00   64
5700 : 55 A9 55 A0 9F 20 A2 BB   90
5708 : 20 6B E2 A9 5F A0 9F 20   85
5710 : 28 BA A9 6E A0 9F 20 67   24
5718 : B8 A9 AB A0 9F 20 00 55   49
5720 : A9 9B A0 9F 20 A2 BB 20   F9
5728 : 64 E2 A9 5F A0 9F 20 28   2B
5730 : BA A9 73 A0 9F 20 67 B8   BA
5738 : A9 B0 A0 9F 20 00 55 A9   00
5740 : 9B A0 9F 20 A2 BB 20 6B   77
5748 : E2 A9 5F A0 9F 20 28 BA   FC
5750 : A9 6E A0 9F 20 67 B8 A9   C0
5758 : A6 A0 9F 20 00 55 20 3B   DC
5760 : 55 A9 4A A0 9F 20 A2 BB   2D
5768 : A9 55 A0 9F 20 67 B8 A9   4B
5770 : 55 A0 9F 20 00 55 A9 E5   1E
5778 : A0 E2 20 5B BC C9 FF D0   B9
5780 : 03 4C CC 56 60 AC EA 07   CC
5788 : 20 A2 B3 A9 AB A0 9F 20   9A
5790 : 00 55 A9 A6 A0 9F 20 00   01
5798 : 55 AC E9 07 20 A2 B3 A9   D8
57A0 : 82 A0 9F 20 28 BA A9 B5   C9
57A8 : A0 9F 20 00 55 AC E8 07   8C
57B0 : 20 A2 B3 A9 B5 A0 9F 20   62
57B8 : 67 B8 A9 B5 A0 9F 20 00   24
57C0 : 55 A9 E2 A0 9F 20 67 B8   C0
57C8 : A9 B0 A0 9F 20 00 55 A9   90
57D0 : E2 A0 9F 20 A2 BB A9 B5   08
57D8 : A0 9F 20 50 B8 A9 B5 A0   4B
57E0 : 9F 20 00 55 20 3B 55 AC   C5
57E8 : EA 07 20 A2 B3 A9 AB A0   2B
57F0 : 9F 20 00 55 A9 E2 A0 9F   BD
57F8 : 20 67 B8 A9 A6 A0 9F 20   5D
5800 : 00 55 A9 E2 A0 9F 20 A2   3E
5808 : BB A9 AB A0 9F 20 50 B8   44
5810 : A9 AB A0 9F 20 00 55 AC   5C
5818 : E9 07 20 A2 B3 A9 82 A0   B5
5820 : 9F 20 28 BA A9 B5 A0 9F   3B
5828 : 20 00 55 AC E8 07 20 A2   C0
5830 : B3 A9 B5 A0 9F 20 67 B8   43
5838 : A9 B5 A0 9F 20 00 55 A9   83
5840 : B0 A0 9F 20 00 55 20 3B   CE
5848 : 55 60 20 9A 56 EA A9 6E   69
5850 : A0 9F 20 A2 BB 20 F7 B7   28
5858 : A5 14 8D EA 07 A9 73 A0   95
5860 : 9F 20 A2 BB 20 F7 B7 A5   1B
5868 : 14 8D E8 07 A5 15 8D E9   6B
5870 : 07 20 85 57 A9 00 8D 4F   43
5878 : 9F 60 20 9A 56 A9 01 8D   75
5880 : 4F 9F 60 20 46 CB A9 0A   38
5888 : 8D 45 03 A9 00 8D 46 03   39
5890 : A0 02 8C A0 9F 98 18 6D   62
5898 : 45 03 85 14 8D 4B 03 AD   DD
58A0 : 46 03 69 00 85 15 8D 4C   92
58A8 : 03 A9 B4 8D 54 03 A9 B7   D2
58B0 : 8D 51 03 20 C0 C7 AC A0   E9
58B8 : 9F C8 C8 C0 14 D0 D3 AD   78
58C0 : 45 03 18 69 0A 85 14 8D   F2
58C8 : 4B 03 AD 46 03 69 00 85   50
58D0 : 15 8D 4C 03 A9 B4 8D 54   3E
58D8 : 03 A9 BA 8D 51 03 20 C0   3F
58E0 : C7 AD 45 03 85 14 8D 4B   F5
58E8 : 03 AD 46 03 85 15 8D 4C   84
58F0 : 03 A9 B4 8D 54 03 A9 BD   26
58F8 : 8D 51 03 20 C0 C7 AD 45   7E
5900 : 03 18 69 14 8D 45 03 AD   57
5908 : 46 03 69 00 8D 46 03 C9   D5
5910 : 01 F0 03 4C 90 58 AD 45   E1
5918 : 03 C9 36 F0 03 4C 90 58   31
5920 : A9 01 85 15 8D 4C 03 A9   E8
5928 : 36 85 14 8D 4B 03 A9 B4   B4
5930 : 8D 54 03 A9 BD 8D 51 03   71
5938 : 20 C0 C7 A9 03 85 14 A9   DF
5940 : 00 85 15 A9 3C 8D 4B 03   E1
5948 : A9 01 8D 4C 03 A9 B4 8D   CA
5950 : 54 03 8D 51 03 20 C0 C7   77
5958 : 60 20 1C 62 8E 71 03 CA   32
5960 : 8A A8 20 A2 B3 A9 9B A0   D3
5968 : 9F 20 00 55 A9 78 A0 9F   E2
5970 : 20 A2 BB A9 9B A0 9F 20   83
5978 : 0F BB 20 CC BC A9 C8 A0   84
5980 : 9E 20 67 B8 20 F7 B7 A5   0B
5988 : 14 8D 70 03 20 1C 62 8E   69
5990 : 68 03 20 16 62 A9 AF A0   B8
5998 : 9E 20 00 55 20 16 62 A9   81
59A0 : B4 A0 9E 20 00 55 20 1C   B3
59A8 : 62 8E 6D 03 20 1C 62 8E   97
59B0 : 6E 03 20 16 62 A9 45 A0   34
59B8 : 9F 20 00 55 A9 01 8D 6F   CA
59C0 : 03 AD 70 03 C9 01 F0 14   A7
59C8 : C9 02 F0 0A C9 03 F0 09   9A
59D0 : A9 0A 8D 71 03 60 4C 5A   29
59D8 : 5C 4C CD 5D AD 6D 03 C9   5F
59E0 : 01 F0 33 AD 6E 03 C9 01   04
59E8 : D0 07 A9 04 A0 9F 4C 0C   77
59F0 : 5A C9 02 D0 07 A9 FF A0   C8
59F8 : 9E 4C 0C 5A C9 03 D0 07   11
5A00 : A9 FA A0 9E 4C 0C 5A EA   87
5A08 : A9 F5 A0 9E 20 A2 BB A9   01
5A10 : 45 A0 9F 20 00 55 A0 01   C0
5A18 : 20 A2 B3 A9 C3 A0 9E 20   A7
5A20 : 00 55 AD 68 03 C9 00 F0   A4
5A28 : 0D 20 5C 5B AD 6F 03 C9   BE
5A30 : 00 D0 03 4C 28 5B EA A9   3F
5A38 : C3 A0 9E 20 A2 BB 20 B2   E5
5A40 : 9D A9 C8 A0 9E 20 A2 BB   E5
5A48 : 20 E3 9D A9 B9 A0 9E 20   52
5A50 : 00 55 A9 C8 A0 9E 20 A2   43
5A58 : BB A9 C3 A0 9E 20 67 B8   E7
5A60 : 20 B2 9D A9 C8 A0 9E 20   C2
5A68 : A2 BB 20 E3 9D A9 BE A0   D0
5A70 : 9E 20 00 55 EA A9 B9 A0   ED
5A78 : 9E 20 A2 BB 20 98 9C A9   D3
5A80 : C8 A0 9E 20 A2 BB 20 F1   B0
5A88 : 9B A9 D8 A0 9F 20 00 55   E8
5A90 : A9 E2 A0 9F 20 A2 BB 20   0D
5A98 : F1 9B A9 CE A0 9F 20 00   22
5AA0 : 55 A9 78 A0 9F 20 A2 BB   F9
5AA8 : 20 F1 9B A9 C4 A0 9F 20   ED
5AB0 : 00 55 A9 45 A0 9F 20 A2   3B
5AB8 : BB AD 71 03 C9 01 D0 11   11
5AC0 : A9 D8 A0 9F 20 28 BA A9   73
5AC8 : D8 A0 9F 20 00 55 4C F8   AA
5AD0 : 5A C9 02 D0 11 A9 CE A0   84
5AD8 : 9F 20 28 BA A9 CE A0 9F   BB
5AE0 : 20 00 55 4C F8 5A C9 03   6F
5AE8 : D0 0E A9 C4 A0 9F 20 28   9A
5AF0 : BA A9 C4 A0 9F 20 00 55   6A
5AF8 : 20 10 5C A9 B9 A0 9E 20   C8
5B00 : A2 BB 20 8A 9B A9 C8 A0   45
5B08 : 9E 20 A2 BB A9 B9 A0 9E   FE
5B10 : 20 67 B8 A9 B9 A0 9E 20   A2
5B18 : 00 55 A9 BE A0 9E 20 5B   3B
5B20 : BC C9 FF D0 03 4C 74 5A   F4
5B28 : EA A9 C8 A0 9E 20 A2 BB   1A
5B30 : A9 C3 A0 9E 20 67 B8 A9   2A
5B38 : C3 A0 9E 20 00 55 A9 B4   B2
5B40 : A0 9E 20 5B BC C9 FF D0   5F
5B48 : 03 4C 22 5A AD 6D 03 C9   2B
5B50 : 01 D0 08 A9 00 8D 6D 03   19
5B58 : 8D 71 03 60 A9 01 8D 6F   22
5B60 : 03 AD 68 03 C9 01 D0 03   A2
5B68 : 4C 89 5B C9 02 D0 03 4C   D4
5B70 : 9D 5B 20 F3 5B AD 68 03   0C
5B78 : C9 03 D0 03 4C B1 5B C9   AB
5B80 : 04 D0 03 4C C5 5B 4C D9   53
5B88 : 5B EA A9 C3 A0 9E 20 A2   00
5B90 : BB A9 AF A0 9E 20 5B BC   F2
5B98 : C9 00 D0 51 60 EA A9 C3   4B
5BA0 : A0 9E 20 A2 BB A9 AF A0   F5
5BA8 : 9E 20 5B BC C9 00 F0 3D   A0
5BB0 : 60 EA A9 AA A0 9E 20 A2   0A
5BB8 : BB A9 AF A0 9E 20 5B BC   1A
5BC0 : C9 00 D0 29 60 EA A9 AA   3C
5BC8 : A0 9E 20 A2 BB A9 AF A0   1D
5BD0 : 9E 20 5B BC C9 00 F0 15   77
5BD8 : 60 EA A9 AA A0 9E 20 A2   32
5BE0 : BB A9 AF A0 9E 20 5B BC   42
5BE8 : C9 FF F0 01 60 A9 00 8D   7C
5BF0 : 6F 03 60 EA A9 C3 A0 9E   CF
5BF8 : 20 A2 BB 20 B2 9D A9 E2   E1
5C00 : A0 9F 20 A2 BB 20 E3 9D   54
5C08 : A9 AA A0 9E 20 00 55 60   1A
5C10 : EA A9 D8 A0 9F 20 A2 BB   16
5C18 : 20 E2 BA A9 91 A0 9F 20   6A
5C20 : 67 B8 A9 D8 A0 9F 20 00   F0
5C28 : 55 A9 CE A0 9F 20 A2 BB   16
5C30 : 20 E2 BA A9 91 A0 9F 20   82
5C38 : 67 B8 A9 CE A0 9F 20 00   C7
5C40 : 55 A9 C4 A0 9F 20 A2 BB   AC
5C48 : 20 E2 BA A9 91 A0 9F 20   9A
5C50 : 67 B8 A9 C4 A0 9F 20 00   9E
5C58 : 55 60 AD 6D 03 C9 01 F0   5B
5C60 : 33 AD 6E 03 C9 01 D0 07   5C
5C68 : A9 E6 A0 9E 4C 8A 5C C9   9E
5C70 : 02 D0 07 A9 E2 A0 9F 4C   1C
5C78 : 8A 5C C9 03 D0 07 A9 F0   D1
5C80 : A0 9E 4C 8A 5C EA A9 EB   6F
5C88 : A0 9E 20 A2 BB A9 45 A0   33
5C90 : 9F 20 00 55 A0 01 20 A2   C2
5C98 : B3 A9 C3 A0 9E 20 00 55   BA
5CA0 : AD 68 03 C9 00 F0 0D 20   77
5CA8 : 5C 5B AD 6F 03 C9 00 D0   2B
5CB0 : 03 4C A6 5D EA A9 C3 A0   7B
5CB8 : 9E 20 A2 BB 20 B2 9D A9   E8
5CC0 : C8 A0 9E 20 A2 BB 20 E3   D4
5CC8 : 9D A9 B9 A0 9E 20 00 55   52
5CD0 : A9 C8 A0 9E 20 A2 BB A9   33
5CD8 : C3 A0 9E 20 67 B8 20 B2   B9
5CE0 : 9D A9 C8 A0 9E 20 A2 BB   85
5CE8 : 20 E3 9D A9 BE A0 9E 20   42
5CF0 : 00 55 EA A9 B9 A0 9E 20   E6
5CF8 : A2 BB 20 98 9C A9 C8 A0   0E
5D00 : 9E 20 A2 BB 20 F1 9B A9   22
5D08 : D8 A0 9F 20 00 55 A9 E2   33
5D10 : A0 9F 20 A2 BB 20 F1 9B   98
5D18 : A9 CE A0 9F 20 00 55 A9   EF
5D20 : 78 A0 9F 20 A2 BB 20 F1   41
5D28 : 9B A9 C4 A0 9F 20 00 55   83
5D30 : A9 45 A0 9F 20 A2 BB AD   F9
5D38 : 71 03 C9 04 D0 11 A9 D8   0C
5D40 : A0 9F 20 50 B8 A9 D8 A0   3F
5D48 : 9F 20 00 55 4C 76 5D C9   24
5D50 : 05 D0 11 A9 CE A0 9F 20   E7
5D58 : 67 B8 A9 CE A0 9F 20 00   E7
5D60 : 55 4C 76 5D C9 06 D0 0E   51
5D68 : A9 C4 A0 9F 20 50 B8 A9   4A
5D70 : C4 A0 9F 20 00 55 20 10   BC
5D78 : 5C A9 B9 A0 9E 20 A2 BB   18
5D80 : 20 8A 9B A9 C8 A0 9E 20   4E
5D88 : A2 BB A9 B9 A0 9E 20 67   F8
5D90 : B8 A9 B9 A0 9E 20 00 55   35
5D98 : A9 BE A0 9E 20 5B BC C9   00
5DA0 : FF D0 03 4C F2 5C EA A9   63
5DA8 : C8 A0 9E 20 A2 BB A9 C3   A2
5DB0 : A0 9E 20 67 B8 A9 C3 A0   BD
5DB8 : 9E 20 00 55 A9 B4 A0 9E   11
5DC0 : 20 5B BC C9 FF D0 03 4C   21
5DC8 : A0 5C 4C 4C 5B AD 6D 03   12
5DD0 : C9 01 F0 36 AD 6E 03 C9   0B
5DD8 : 01 D0 07 A9 E1 A0 9E 4C   6F
5DE0 : 00 5E C9 02 D0 07 A9 DC   68
5DE8 : A0 9E 4C 00 5E C9 03 D0   CC
5DF0 : 07 A9 D7 A0 9E 4C 00 5E   DF
5DF8 : C9 04 D0 0E A9 D2 A0 9E   AA
5E00 : 20 A2 BB A9 45 A0 9F 20   AD
5E08 : 00 55 EA A9 CD A0 9E 20   3F
5E10 : A2 BB A9 E5 A0 E2 20 0F   77
5E18 : BB A9 45 A0 9F 20 28 BA   1E
5E20 : A9 45 A0 9F 20 00 55 A9   33
5E28 : F1 A0 9F 20 A2 BB A9 40   84
5E30 : A0 9F 20 00 55 A9 3B A0   79
5E38 : 9F 20 00 55 A9 36 A0 9F   A0
5E40 : 20 00 55 A9 45 A0 9F 20   03
5E48 : A2 BB AD 71 03 C9 07 D0   9E
5E50 : 0A 20 B4 BF A9 40 A0 9F   EE
5E58 : 4C 6E 5E C9 08 D0 07 A9   23
5E60 : 3B A0 9F 4C 6E 5E C9 09   70
5E68 : D0 04 A9 36 A0 9F EA 20   5E
5E70 : 00 55 A9 40 A0 9F 20 A2   5A
5E78 : BB 20 6B E2 A9 A5 A0 9E   02
5E80 : 20 00 55 A9 40 A0 9F 20   F3
5E88 : A2 BB 20 64 E2 A9 A0 A0   DC
5E90 : 9E 20 00 55 A9 3B A0 9F   1F
5E98 : 20 A2 BB 20 6B E2 A9 9B   A8
5EA0 : A0 9E 20 00 55 A9 27 A0   18
5EA8 : 9F 20 00 55 A9 3B A0 9F   38
5EB0 : 20 A2 BB 20 64 E2 A9 96   45
5EB8 : A0 9E 20 00 55 A9 36 A0   6C
5EC0 : 9F 20 A2 BB 20 6B E2 A9   CC
5EC8 : 91 A0 9E 20 00 55 A9 36   13
5ED0 : A0 9F 20 A2 BB 20 64 E2   B0
5ED8 : A9 8C A0 9E 20 00 55 A9   6E
5EE0 : 96 A0 9E 20 A2 BB A9 8C   3A
5EE8 : A0 9E 20 28 BA A9 31 A0   E3
5EF0 : 9F 20 00 55 A9 96 A0 9E   59
5EF8 : A9 96 A0 9E 20 A2 BB A9   42
5F00 : F1 A0 9F 20 50 B8 A9 91   C2
5F08 : A0 9E 20 28 BA A9 2C A0   EF
5F10 : 9F 20 00 55 A9 A0 A0 9E   C9
5F18 : 20 A2 BB A9 91 A0 9E 20   86
5F20 : 28 BA A9 22 A0 9F 20 00   DB
5F28 : 55 A9 A5 A0 9E 20 A2 BB   BC
5F30 : A9 9B A0 9E 20 28 BA A9   24
5F38 : 8C A0 9E 20 28 BA A9 22   03
5F40 : A0 9F 20 67 B8 A9 22 A0   47
5F48 : 9F 20 00 55 A9 A0 A0 9E   01
5F50 : 20 A2 BB A9 8C A0 9E 20   6E
5F58 : 28 BA A9 1D A0 9F 20 00   73
5F60 : 55 A9 A5 A0 9E 20 A2 BB   F4
5F68 : A9 9B A0 9E 20 28 BA A9   5C
5F70 : 91 A0 9E 20 28 BA A9 1D   36
5F78 : A0 9F 20 50 B8 A9 1D A0   88
5F80 : 9F 20 00 55 A9 A5 A0 9E   62
5F88 : 20 A2 BB A9 F1 A0 9F 20   00
5F90 : 50 B8 A9 96 A0 9E 20 28   49
5F98 : BA A9 18 A0 9F 20 00 55   E7
5FA0 : A9 A5 A0 9E 20 A2 BB A9   71
5FA8 : 91 A0 9E 20 28 BA A9 13   5A
5FB0 : A0 9F 20 00 55 A9 A0 A0   8E
5FB8 : 9E 20 A2 BB A9 9B A0 9E   BE
5FC0 : 20 28 BA A9 8C A0 9E 20   61
5FC8 : 28 BA A9 13 A0 9F 20 50   42
5FD0 : B8 A9 13 A0 9F 20 00 55   DB
5FD8 : A9 A5 A0 9E 20 A2 BB A9   A9
5FE0 : 96 A0 9E 20 28 BA A9 0E   8D
5FE8 : A0 9F 20 00 55 A9 A0 A0   C6
5FF0 : 9E 20 A2 BB A9 9B A0 9E   F6
5FF8 : 20 28 BA A9 91 A0 9E 20   E9
6000 : 28 BA A9 0E A0 9F 20 67   08
6008 : B8 A9 0E A0 9F 20 00 55   D2
6010 : A9 A0 A0 9E 20 A2 BB A9   5F
6018 : 96 A0 9E 20 28 BA A9 09   BB
6020 : A0 9F 20 00 55 A9 C8 A0   9F
6028 : 9E 20 A2 BB A9 C3 A0 9E   6F
6030 : 20 00 55 AD 68 03 C9 00   21
6038 : F0 0D 20 5C 5B AD 6F 03   29
6040 : C9 00 D0 03 4C EF 61 EA   3D
6048 : A9 C3 A0 9E 20 A2 BB 20   15
6050 : B2 9D A9 C8 A0 9E 20 A2   19
6058 : BB 20 E3 9D A9 B9 A0 9E   F8
6060 : 20 00 55 A9 C3 A0 9E 20   07
6068 : A2 BB A9 C8 A0 9E 20 67   B9
6070 : B8 20 B2 9D A9 C8 A0 9E   39
6078 : 20 A2 BB 20 E3 9D A9 BE   2B
6080 : A0 9E 20 00 55 EA A9 B9   3E
6088 : A0 9E 20 A2 BB 20 98 9C   2C
6090 : A9 C8 A0 9E 20 A2 BB 20   DF
6098 : F1 9B A9 D8 A0 9F 20 00   64
60A0 : 55 A9 E2 A0 9F 20 A2 BB   93
60A8 : 20 F1 9B A9 CE A0 9F 20   8D
60B0 : 00 55 A9 78 A0 9F 20 A2   A1
60B8 : BB 20 F1 9B A9 C4 A0 9F   F6
60C0 : 20 00 55 A9 27 A0 9F 20   A1
60C8 : 28 BA A9 D3 A0 9F 20 00   BA
60D0 : 55 A9 D8 A0 9F 20 A2 BB   41
60D8 : A9 31 A0 9F 20 28 BA A9   B7
60E0 : D3 A0 9F 20 67 B8 A9 D3   7A
60E8 : A0 9F 20 00 55 A9 CE A0   7F
60F0 : 9F 20 A2 BB A9 2C A0 9F   7D
60F8 : 20 28 BA A9 D3 A0 9F 20   11
6100 : 67 B8 A9 D3 A0 9F 20 00   30
6108 : 55 A9 22 A0 9F 20 A2 BB   CB
6110 : A9 D8 A0 9F 20 28 BA A9   C3
6118 : C9 A0 9F 20 00 55 A9 1D   A9
6120 : A0 9F 20 A2 BB A9 CE A0   72
6128 : 9F 20 28 BA A9 C9 A0 9F   E3
6130 : 20 67 B8 A9 C9 A0 9F 20   C7
6138 : 00 55 A9 18 A0 9F 20 A2   1D
6140 : BB A9 C4 A0 9F 20 28 BA   26
6148 : A9 C9 A0 9F 20 67 B8 A9   65
6150 : C9 A0 9F 20 00 55 A9 13   CD
6158 : A0 9F 20 A2 BB A9 D8 A0   D2
6160 : 9F 20 28 BA A9 BF A0 9F   CB
6168 : 20 00 55 A9 0E A0 9F 20   B7
6170 : A2 BB A9 CE A0 9F 20 28   0C
6178 : BA A9 BF A0 9F 20 67 B8   15
6180 : A9 BF A0 9F 20 00 55 A9   D0
6188 : 09 A0 9F 20 A2 BB A9 C4   05
6190 : A0 9F 20 28 BA A9 BF A0   46
6198 : 9F 20 67 B8 A9 C4 A0 9F   BB
61A0 : 20 00 55 A9 D3 A0 9F 20   4C
61A8 : A2 BB A9 D8 A0 9F 20 00   35
61B0 : 55 A9 C9 A0 9F 20 A2 BB   5D
61B8 : A9 CE A0 9F 20 00 55 20   7C
61C0 : 10 5C A9 B9 A0 9E 20 A2   65
61C8 : BB 20 8A 9B A9 C8 A0 9E   4A
61D0 : 20 A2 BB A9 B9 A0 9E 20   C1
61D8 : 67 B8 A9 B9 A0 9E 20 00   BC
61E0 : 55 A9 BE A0 9E 20 5B BC   9F
61E8 : C9 FF D0 03 4C 85 60 EA   8E
61F0 : A9 C8 A0 9E 20 A2 BB A9   53
61F8 : C3 A0 9E 20 67 B8 A9 C3   21
6200 : A0 9E 20 00 55 A9 B4 A0   AE
6208 : 9E 20 5B BC C9 FF D0 03   0B
6210 : 4C 33 60 4C 4C 5B 20 FD   B4
6218 : AE 4C 8A AD 20 03 90 4C   3A
6220 : 9B B7 EA 20 03 90 20 9B   C2
6228 : B7 8E 68 03 20 FD AE 20   8E
6230 : 8A AD A9 AF A0 9E 20 00   71
6238 : 55 20 46 CB A9 C8 A0 9E   49
6240 : 20 A2 BB A9 C3 A0 9E 20   D1
6248 : 00 55 A9 01 8D 6F 03 EA   B4
6250 : A9 C3 A0 9E 20 A2 BB 20   1D
6258 : B2 9D A9 C8 A0 9E 20 A2   21
6260 : BB 20 E3 9D A9 31 A0 9F   BE
6268 : 20 00 55 A9 C3 A0 9E 20   0F
6270 : A2 BB A9 C8 A0 9E 20 67   C1
6278 : B8 20 B2 9D A9 C8 A0 9E   41
6280 : 20 A2 BB 20 E3 9D A9 2C   0E
6288 : A0 9F 20 00 55 A9 F1 A0   AC
6290 : 9F 20 5B BC C9 00 D0 01   90
6298 : 60 AD 68 03 C9 00 F0 0D   C4
62A0 : 20 5C 5B AD 6F 03 C9 00   B1
62A8 : D0 03 4C 1B 64 EA A9 31   17
62B0 : A0 9F 20 A2 BB 20 98 9C   D5
62B8 : A9 C8 A0 9E 20 A2 BB 20   07
62C0 : F1 9B A9 40 A0 9F 20 00   79
62C8 : 55 A9 E2 A0 9F 20 A2 BB   BB
62D0 : 20 F1 9B A9 3B A0 9F 20   7C
62D8 : 00 55 A9 78 A0 9F 20 A2   C9
62E0 : BB 20 F1 9B A9 36 A0 9F   A9
62E8 : 20 00 55 A9 C8 A0 9E 20   DF
62F0 : A2 BB A9 2C A0 9F 20 50   88
62F8 : B8 A9 BE A0 9E 20 00 55   DE
6300 : 20 98 9C A9 C8 A0 9E 20   15
6308 : A2 BB 20 F1 9B A9 D3 A0   66
6310 : 9F 20 00 55 A9 E2 A0 9F   DD
6318 : 20 A2 BB 20 F1 9B A9 C9   B2
6320 : A0 9F 20 00 55 A9 78 A0   5E
6328 : 9F 20 A2 BB 20 F1 9B A9   4B
6330 : BF A0 9F 20 00 55 A9 40   FD
6338 : A0 9F 20 A2 BB A9 D8 A0   B2
6340 : 9F 20 00 55 A9 3B A0 9F   D0
6348 : 20 A2 BB A9 CE A0 9F 20   8E
6350 : 00 55 A9 36 A0 9F 20 A2   F9
6358 : BB A9 C4 A0 9F 20 00 55   D3
6360 : 20 41 96 A9 31 A0 9F 20   D2
6368 : A2 BB A9 C8 A0 9E 20 67   B9
6370 : B8 A9 B9 A0 9E 20 00 55   15
6378 : EA A9 B9 A0 9E 20 A2 BB   A6
6380 : 20 98 9C A9 40 A0 9F 20   10
6388 : A2 BB A9 D3 A0 9F 20 00   74
6390 : 55 A9 3B A0 9F 20 A2 BB   9A
6398 : A9 C9 A0 9F 20 00 55 A9   ED
63A0 : 36 A0 9F 20 A2 BB A9 BF   40
63A8 : A0 9F 20 00 55 A9 C8 A0   27
63B0 : 9E 20 A2 BB 20 F1 9B A9   D2
63B8 : D8 A0 9F 20 00 55 A9 40   9E
63C0 : A0 9F 20 00 55 A9 E2 A0   A7
63C8 : 9F 20 A2 BB 20 F1 9B A9   EB
63D0 : CE A0 9F 20 00 55 A9 3B   A2
63D8 : A0 9F 20 00 55 A9 78 A0   16
63E0 : 9F 20 A2 BB 20 F1 9B A9   03
63E8 : C4 A0 9F 20 00 55 A9 36   A6
63F0 : A0 9F 20 00 55 20 41 96   F1
63F8 : A9 C8 A0 9E 20 A2 BB A9   5B
6400 : B9 A0 9E 20 67 B8 A9 B9   0B
6408 : A0 9E 20 00 55 A9 BE A0   DE
6410 : 9E 20 5B BC C9 01 F0 03   9B
6418 : 4C 78 63 EA A9 C8 A0 9E   77
6420 : 20 A2 BB A9 C3 A0 9E 20   B1
6428 : 67 B8 A9 C3 A0 9E 20 00   4E
6430 : 55 4C 4F 62 20 16 62 A9   5B
6438 : 69 A0 9F 20 00 55 20 16   35
6440 : 62 A9 64 A0 9F 20 00 55   4A
6448 : 20 16 62 A9 87 A0 9E 20   79
6450 : 00 55 20 46 CB A0 04 20   DE
6458 : A2 B3 A9 31 A0 9F 20 00   EC
6460 : 55 A9 69 A0 9F 20 50 B8   A6
6468 : A9 D8 A0 9F 20 00 55 A9   44
6470 : 31 A0 9F 20 A2 BB A9 69   5F
6478 : A0 9F 20 67 B8 A9 D3 A0   46
6480 : 9F 20 00 55 20 15 65 20   5B
6488 : 2A 65 20 41 96 A9 31 A0   52
6490 : 9F 20 A2 BB A9 64 A0 9F   DF
6498 : 20 50 B8 A9 CE A0 9F 20   F4
64A0 : 00 55 A9 31 A0 9F 20 A2   A8
64A8 : BB A9 64 A0 9F 20 67 B8   6F
64B0 : A9 C9 A0 9F 20 00 55 20   F1
64B8 : 00 65 20 2A 65 20 41 96   42
64C0 : A9 31 A0 9F 20 A2 BB A9   77
64C8 : 87 A0 9E 20 50 B8 A9 C4   46
64D0 : A0 9F 20 00 55 A9 31 A0   F1
64D8 : 9F 20 A2 BB A9 87 A0 9E   3E
64E0 : 20 67 B8 A9 BF A0 9F 20   D7
64E8 : 00 55 20 00 65 20 15 65   11
64F0 : 20 41 96 20 00 65 20 15   30
64F8 : 65 20 2A 65 20 41 96 60   CC
6500 : A9 69 A0 9F 20 A2 BB A9   D3
6508 : D8 A0 9F 20 00 55 A9 D3   15
6510 : A0 9F 4C 00 55 A9 64 A0   08
6518 : 9F 20 A2 BB A9 CE A0 9F   BA
6520 : 20 00 55 A9 C9 A0 9F 4C   84
6528 : 00 55 A9 87 A0 9E 20 A2   F3
6530 : BB A9 C4 A0 9F 20 00 55   AB
6538 : A9 BF A0 9F 4C 00 55 A9   4A
6540 : 67 85 FB A9 D0 85 FA A9   16
6548 : 00 A0 00 91 FA C8 D0 FB   FC
6550 : A9 00 85 FA A5 FB 18 69   27
6558 : 01 85 FB C9 8C D0 E8 60   08
6560 : A2 02 20 C9 FF A9 00 20   D2
6568 : D2 FF A9 20 20 D2 FF A9   94
6570 : 00 85 FA AD 5F 03 85 FB   C3
6578 : A0 00 A2 35 78 86 01 B1   8B
6580 : FA A2 37 86 01 58 20 D2   63
6588 : FF C8 D0 EE E6 FB A5 FB   DA
6590 : CD 61 03 D0 E3 4C CC FF   BC
6598 : A2 02 20 C6 FF 20 CF FF   5C
65A0 : 20 CF FF A9 00 85 FA AD   50
65A8 : 5F 03 85 FB A0 00 20 CF   94
65B0 : FF 91 FA C8 D0 F8 E6 FB   B8
65B8 : A5 FB CD 61 03 D0 ED 4C   01
65C0 : CC FF 4C 00 C4 20 03 90   19
65C8 : 20 9B B7 E0 03 B0 F3 E0   07
65D0 : 00 F0 EF 60 20 C5 65 E0   D8
65D8 : 01 D0 0D A9 A0 8D 5F 03   B4
65E0 : A9 C0 8D 61 03 4C 60 65   58
65E8 : A9 E0 8D 5F 03 A9 00 8D   E9
65F0 : 61 03 4C 60 65 20 C5 65   2B
65F8 : E0 01 D0 0D A9 A0 8D 5F   C3
6600 : 03 A9 C0 8D 61 03 4C 98   4A
6608 : 65 A9 E0 8D 5F 03 A9 00   E0
6610 : 8D 61 03 4C 98 65 A2 02   DB
6618 : 20 C6 FF 20 CF FF 20 CF   BC
6620 : FF 20 CF FF A5 90 D0 3A   BA
6628 : 20 CF FF F0 35 A6 90 E0   DA
6630 : 00 D0 2F 20 CF FF A6 90   21
6638 : E0 00 D0 26 85 FA 20 CF   61
6640 : FF A6 90 E0 00 D0 1B A6   13
6648 : FA 20 CD BD 20 CF FF A6   4B
6650 : 90 E0 00 D0 0D 20 D2 FF   88
6658 : D0 F2 A9 0D 20 D2 FF 4C   DF
6660 : 21 66 20 CC FF 60         57
Listing 14. Hilfsprogramm »HiRes 3«
PROGRAMM : HIRES4.CAD.OBJ 554C 584B
-----------------------------------
554C : 4C 00 C4 20 03 90 20 9B   3A
5554 : B7 E0 10 B0 F3 8E 5E 03   C9
555C : 20 03 90 20 9B B7 E0 10   41
5564 : B0 E6 8E 5F 03 20 03 90   75
556C : 20 9B B7 E0 10 B0 D9 8E   6F
5574 : 60 03 AD 5E 03 0A 0A 0A   4A
557C : 0A 18 6D 5F 03 8D 5E 03   F6
5584 : 20 03 90 20 9B B7 E0 03   4F
558C : B0 BE E0 00 F0 BA 8E 3E   6F
5594 : 03 AD 60 03 A0 00 99 00   57
559C : D8 99 00 D9 99 00 DA 99   B4
55A4 : 00 DB C8 D0 F1 AE 3E 03   71
55AC : E0 02 F0 1D AD 5E 03 A0   88
55B4 : 00 99 00 8C 99 00 8D 99   15
55BC : 00 8E 99 00 8F C8 D0 F1   D0
55C4 : 20 35 C6 A9 D8 8D 16 D0   5A
55CC : 60 AD 5E 03 A0 00 99 00   6B
55D4 : C0 99 00 C1 99 00 C2 99   71
55DC : 00 C3 C8 D0 F1 20 48 C6   D9
55E4 : 4C C7 55 4C 00 C4 20 03   9F
55EC : 90 20 9B B7 8E 5E 03 20   92
55F4 : 03 90 20 9B B7 E0 04 B0   AF
55FC : EA E0 00 F0 E6 8E 3E 03   56
5604 : E0 01 F0 07 E0 02 F0 2B   BA
560C : 20 37 56 A9 A0 85 FB A9   0C
5614 : 00 85 FA AD 5E 03 A0 00   CC
561C : 91 FA C8 D0 FB E6 FB A5   A9
5624 : FB C9 BF D0 EE AD 5E 03   EA
562C : A0 00 99 00 BF C8 C0 41   FA
5634 : D0 F8 60 A9 E0 85 FB A9   4B
563C : 00 85 FA AD 5E 03 A0 00   F4
5644 : 91 FA C8 D0 FB E6 FB A5   D1
564C : FB C9 FF D0 EE AD 5E 03   22
5654 : A0 00 99 00 FF C8 C0 41   26
565C : D0 F8 60 4C 00 C4 20 03   F7
5664 : 90 20 9B B7 E0 A0 B0 F3   A0
566C : 8E 5E 03 20 03 90 20 9B   5B
5674 : B7 E0 C8 B0 E6 8E 71 03   92
567C : 20 03 90 20 9B B7 E0 04   49
5684 : B0 D9 8E 40 03 20 03 90   2B
568C : 20 9B B7 E0 04 B0 CC E0   3E
5694 : 00 F0 C8 8E 3E 03 A9 00   B3
569C : 18 0E 5E 03 69 00 8D 5F   3F
56A4 : 03 AD 5E 03 18 69 01 8D   62
56AC : 60 03 AD 5F 03 69 00 8D   7C
56B4 : 61 03 AD 40 03 C9 01 F0   6F
56BC : 3D C9 02 F0 44 C9 03 F0   FD
56C4 : 4B 4C EF 56 8D 40 03 AD   3E
56CC : 5E 03 85 14 AD 5F 03 85   7D
56D4 : 15 AD 71 03 8D 3F 03 20   9C
56DC : 33 C5 60 8D 40 03 AD 60   4F
56E4 : 03 85 14 AD 61 03 85 15   D3
56EC : 4C D5 56 A9 00 20 C8 56   BE
56F4 : A9 00 20 DF 56 60 A9 01   B2
56FC : 20 C8 56 A9 00 20 DF 56   78
5704 : 60 A9 00 20 C8 56 A9 01   25
570C : 20 DF 56 60 A9 01 20 C8   72
5714 : 56 A9 01 20 DF 56 60 A2   FB
571C : 02 20 C9 FF A9 00 20 D2   61
5724 : FF A9 20 20 D2 FF A9 00   D8
572C : 85 FA A9 E0 85 FB A0 00   6F
5734 : A2 35 78 86 01 B1 FA A2   2F
573C : 37 86 01 58 20 D2 FF C8   2C
5744 : C0 A0 D0 EC A5 FA 18 69   8B
574C : 40 85 FA A5 FB 69 01 85   DC
5754 : FB C9 EF D0 D9 4C CC FF   7D
575C : 20 FD AE 20 8A AD A9 B4   51
5764 : A0 9E AA 20 D4 BB 20 FD   AA
576C : AE 20 8A AD A9 C8 A0 9E   23
5774 : 20 67 B8 A9 AF A0 9E AA   7B
577C : 20 D4 BB A9 B4 A0 9E 20   35
5784 : A2 BB 20 B2 9D AD 45 03   C5
578C : 85 FC AD 46 03 85 FD A9   6B
5794 : 67 85 FB A9 D0 85 FA 60   D8
579C : EA A9 AF A0 9E 20 A2 BB   48
57A4 : 20 98 9C AD 45 03 85 FC   6A
57AC : AD 46 03 85 FD A9 6D 85   DC
57B4 : FB A9 00 85 FA 60 A0 00   6A
57BC : B1 FA 20 D2 FF A5 FA 18   96
57C4 : 69 01 85 FA A5 FB 69 00   4E
57CC : 85 FB C5 FD D0 E8 A5 FA   61
57D4 : C5 FC D0 E2 60 20 CF FF   EE
57DC : A0 00 91 FA A5 FA 18 69   A5
57E4 : 01 85 FA A5 FB 69 00 85   31
57EC : FB C5 FD D0 E8 A5 FA C5   96
57F4 : FC D0 E2 60 A2 02 20 C9   6B
57FC : FF 20 5C 57 20 BA 57 20   83
5804 : 9C 57 20 BA 57 20 CC FF   55
580C : 60 A2 02 20 C6 FF 20 5C   E8
5814 : 57 20 D9 57 20 9C 57 20   61
581C : D9 57 20 CC FF 60 03 0F   70
5824 : 10 19 12 09 07 08 14 20   A8
582C : 31 39 38 36 20 13 2E 0C   3A
5834 : 09 10 10 13 14 12 05 15   BC
583C : 20 26 20 13 2E 16 09 0C   AA
5844 : 13 0D 05 09 05 12 20      D1
Listing 15. Hilfsprogramm »HiRes 4«
PROGRAMM : HIRES5.CAD.OBJ 62A6 64D5
-----------------------------------
62A6 : 4C 00 C4 A9 00 8D 41 03   D0
62AE : A9 FF 8D 5F 03 A9 FB A0   55
62B6 : 9F 20 A2 BB A9 E2 A0 9F   F9
62BE : 20 28 BA A9 C8 A0 9E 20   22
62C6 : 67 B8 A9 FB A0 9F AA 20   65
62CE : D4 BB 20 B8 92 A9 C8 A0   7A
62D6 : 9E 20 A2 BB A9 FB A0 9F   E1
62DE : 20 50 B8 A9 FB A0 9F AA   22
62E6 : 20 D4 BB A9 E2 A0 9F 20   86
62EE : A2 BB A9 FB A0 9F 20 0F   FD
62F6 : BB A9 FB A0 9F AA 20 D4   12
62FE : BB AD A0 9F C9 01 F0 01   16
6306 : 60 EA A9 B0 A0 9F 20 A2   28
630E : BB 20 F7 B7 A5 14 8D 4B   96
6316 : 03 A5 15 8D 4C 03 A9 A6   B4
631E : A0 9F 20 A2 BB 20 F7 B7   F6
6326 : A5 14 8D 51 03 A9 AB A0   D0
632E : 9F 20 A2 BB 20 F7 B7 A5   E9
6336 : 14 8D 54 03 A9 B5 A0 9F   90
633E : 20 A2 BB 20 F7 B7 A0 01   64
6346 : 8C 4F 03 8C 50 03 8C 4D   B6
634E : 03 88 8C 4E 03 8C 58 03   7E
6356 : 8C 59 03 88 AD 4C 03 C5   36
635E : 15 90 09 D0 1E AD 4B 03   9A
6366 : C5 14 B0 17 38 A5 14 ED   21
636E : 4B 03 8D 55 03 A5 15 ED   D6
6376 : 4C 03 8D 56 03 8C 4F 03   4A
637E : 4C 92 63 38 AD 4B 03 E5   00
6386 : 14 8D 55 03 AD 4C 03 E5   2C
638E : 15 8D 56 03 AD 51 03 CD   6D
6396 : 54 03 B0 10 38 AD 54 03   E2
639E : ED 51 03 8D 57 03 8C 50   07
63A6 : 03 4C B0 63 ED 54 03 8D   10
63AE : 57 03 AD 56 03 D0 24 AD   60
63B6 : 55 03 CD 57 03 B0 1C AE   6F
63BE : 57 03 8D 57 03 8E 55 03   E5
63C6 : AD 4F 03 8D 59 03 AD 50   92
63CE : 03 8D 58 03 C8 8C 4F 03   43
63D6 : 8C 50 03 AD 56 03 4A 8D   C3
63DE : 53 03 AD 55 03 6A 8D 52   27
63E6 : 03 4C 7D 64 AD 4F 03 30   BD
63EE : 0E 18 65 14 85 14 A5 15   9E
63F6 : 69 00 85 15 4C 0A 64 38   7A
63FE : A5 14 E9 01 85 14 A5 15   02
6406 : E9 00 85 15 18 AD 54 03   3A
640E : 6D 58 03 8D 54 03 18 AD   33
6416 : 52 03 6D 57 03 8D 52 03   1C
641E : AD 53 03 69 00 8D 53 03   23
6426 : EE 4D 03 D0 03 EE 4E 03   7D
642E : AD 53 03 CD 56 03 90 47   4E
6436 : D0 08 AD 55 03 CD 52 03   0E
643E : B0 3D 38 AD 52 03 ED 55   F0
6446 : 03 8D 52 03 AD 53 03 ED   62
644E : 56 03 8D 53 03 AD 59 03   FD
6456 : 30 0E 18 65 14 85 14 A5   49
645E : 15 69 00 85 15 4C 73 64   23
6466 : 38 A5 14 E9 01 85 14 A5   8B
646E : 15 E9 00 85 15 18 AD 54   9A
6476 : 03 6D 50 03 8D 54 03 AC   85
647E : 54 03 8C 3F 03 20 9C 64   CB
6486 : AD 4E 03 CD 56 03 90 0B   AB
648E : D0 08 AD 55 03 CD 4D 03   52
6496 : B0 01 60 4C EA 63 AD 41   6B
649E : 03 C9 01 F0 1C CC 5C 03   84
64A6 : F0 01 60 A5 14 8D 5E 03   11
64AE : 8D 60 03 A5 15 8D 5F 03   22
64B6 : 8D 61 03 A9 01 8D 41 03   71
64BE : 60 CC 5C 03 D0 0B A5 14   20
64C6 : 8D 60 03 A5 15 8D 61 03   42
64CE : 60 A9 00 8D 41 03 60      B1
Listing 16. Hilfsprogramm »HiRes 5«
PROGRAMM : HIRES6.CAD.OBJ 5000 5444
-----------------------------------
5000 : A9 01 8D 40 03 20 FD AE   1C
5008 : 20 8A AD A9 B4 A0 9E 20   19
5010 : 40 54 20 03 90 20 9B B7   CB
5018 : 8E 71 03 20 03 90 20 9B   90
5020 : B7 8E 72 03 20 FD AE 20   08
5028 : 8A AD A9 40 A0 9F 20 40   03
5030 : 54 20 FD AE 20 8A AD A9   4A
5038 : 3B A0 9F 20 40 54 20 FD   D2
5040 : AE 20 8A AD A9 36 A0 9F   65
5048 : 20 40 54 20 FD AE 20 8A   8C
5050 : AD A9 31 A0 9F 20 40 54   D7
5058 : 20 FD AE 20 8A AD A9 2C   3C
5060 : A0 9F 20 40 54 20 F7 B7   76
5068 : A5 14 8D 70 03 20 FD AE   0F
5070 : 20 8A AD A9 27 A0 9F 20   AC
5078 : 40 54 20 FD AE 20 8A AD   1C
5080 : A9 22 A0 9F 20 40 54 20   EC
5088 : FD AE 20 8A AD A9 1D A0   14
5090 : 9F 20 40 54 20 03 90 20   77
5098 : 9B B7 8E 73 03 8E 3E 03   C4
50A0 : A9 C8 A0 9E 20 A2 BB A9   03
50A8 : C3 A0 9E 20 40 54 A9 FB   AC
50B0 : A0 9F 20 A2 BB A9 C8 A0   EA
50B8 : 9E 20 67 B8 A9 13 A0 9F   4C
50C0 : 20 40 54 AD 72 03 D0 1F   8C
50C8 : A9 31 A0 9F 20 A2 BB A9   7F
50D0 : 2C A0 9F 20 28 BA A9 31   9A
50D8 : A0 9F 20 40 54 A9 2C A0   DC
50E0 : 9F 20 40 54 4C 4F 51 EA   84
50E8 : A9 04 A0 9F 20 A2 BB A9   09
50F0 : 2C A0 9F 20 67 B8 A9 31   9D
50F8 : A0 9F 20 28 BA A9 A5 A0   46
5100 : 9E 20 40 54 A0 09 20 A2   61
5108 : B3 A9 96 A0 9F 20 40 54   EE
5110 : A0 08 20 A2 B3 A9 96 A0   35
5118 : 9F 20 0F BB A9 2C A0 9F   C0
5120 : 20 67 B8 A9 31 A0 9F 20   2E
5128 : 28 BA A9 31 A0 9F 20 40   46
5130 : 54 A9 A5 A0 9E 20 A2 BB   C3
5138 : A9 2C A0 9F 20 40 54 A9   BC
5140 : 13 A0 9F 20 A2 BB E6 61   F6
5148 : A9 A0 A0 9E 20 40 54 EA   68
5150 : A9 C3 A0 9E 20 A2 BB 20   1D
5158 : B2 9D A9 C8 A0 9E 20 A2   21
5160 : BB 20 E3 9D A9 B9 A0 9E   00
5168 : 20 40 54 A9 0E A0 9F 20   97
5170 : 40 54 A9 C3 A0 9E 20 A2   82
5178 : BB A9 C8 A0 9E 20 67 B8   48
5180 : 20 B2 9D A9 C8 A0 9E 20   E2
5188 : A2 BB 20 E3 9D A9 BE A0   F0
5190 : 9E 20 40 54 A9 00 8D 41   2C
5198 : 03 EA A9 B9 A0 9E 20 A2   77
51A0 : BB 20 98 9C A9 C8 A0 9E   C6
51A8 : 20 A2 BB 20 F1 9B A9 CE   4C
51B0 : A0 9F 20 40 54 A9 E2 A0   8F
51B8 : 9F 20 A2 BB 20 F1 9B A9   DB
51C0 : D8 A0 9F 20 40 54 A9 78   12
51C8 : A0 9F 20 A2 BB 20 F1 9B   50
51D0 : A9 C4 A0 9F 20 40 54 AD   A8
51D8 : 71 03 F0 7B A9 3B A0 9F   AD
51E0 : 20 A2 BB A9 CE A0 9F 20   26
51E8 : 50 B8 A9 18 A0 9F 20 40   0A
51F0 : 54 A9 F1 A0 9F 20 5B BC   8B
51F8 : C9 00 F0 5B A9 18 A0 9F   86
5200 : 20 A2 BB A9 CE A0 9F 20   46
5208 : 0F BB A9 18 A0 9F 20 40   6A
5210 : 54 A9 40 A0 9F 20 A2 BB   5A
5218 : A9 D8 A0 9F 20 50 B8 A9   04
5220 : 18 A0 9F 20 28 BA A9 D8   25
5228 : A0 9F 20 50 B8 A9 D8 A0   27
5230 : 9F 20 40 54 A9 36 A0 9F   88
5238 : 20 A2 BB A9 C4 A0 9F 20   DD
5240 : 50 B8 A9 18 A0 9F 20 28   32
5248 : BA A9 C4 A0 9F 20 50 B8   CA
5250 : A9 C4 A0 9F 20 40 54 EA   A3
5258 : A9 27 A0 9F 20 A2 BB A9   0A
5260 : EC A0 9F 20 50 B8 A9 D8   AB
5268 : A0 9F 20 67 B8 A9 31 A0   AC
5270 : 9F 20 28 BA A9 D8 A0 9F   A4
5278 : 20 40 54 A9 22 A0 9F 20   E8
5280 : A2 BB A9 E7 A0 9F 20 50   8F
5288 : B8 A9 C4 A0 9F 20 67 B8   64
5290 : A9 2C A0 9F 20 28 BA A9   ED
5298 : C4 A0 9F 20 40 54 AD 72   DA
52A0 : 03 F0 31 A9 D8 A0 9F 20   EE
52A8 : A2 BB A9 96 A0 9F 20 40   6D
52B0 : 54 A9 C4 A0 9F 20 A2 BB   1B
52B8 : A9 A0 A0 9E 20 50 B8 A9   68
52C0 : D8 A0 9F 20 40 54 A9 96   4F
52C8 : A0 9F 20 A2 BB A9 C4 A0   F2
52D0 : 9F 20 40 54 EA A9 1D A0   CC
52D8 : 9F 20 A2 BB A9 C4 A0 9F   2A
52E0 : 20 50 B8 A9 C4 A0 9F 20   9C
52E8 : 40 54 A9 B9 A0 9E 20 A2   B9
52F0 : BB A9 BE A0 9E 20 5B BC   15
52F8 : C9 00 D0 1F A9 69 A0 9F   81
5300 : 20 A2 BB A9 D8 A0 9F 20   E7
5308 : 40 54 A9 87 A0 9E 20 A2   92
5310 : BB A9 C4 A0 9F 20 40 54   8A
5318 : 4C 44 53 AD 41 03 D0 24   C9
5320 : A9 01 8D 41 03 A9 D8 A0   F7
5328 : 9F 20 A2 BB A9 69 A0 9F   9F
5330 : 20 40 54 A9 C4 A0 9F 20   CB
5338 : A2 BB A9 87 A0 9E 20 40   13
5340 : 54 4C DB 53 EA A9 D8 A0   BC
5348 : 9F 20 A2 BB A9 B5 A0 9F   21
5350 : 20 40 54 A9 C4 A0 9F 20   EB
5358 : A2 BB A9 AB A0 9F 20 40   C0
5360 : 54 A9 D3 A0 9F 20 A2 BB   8F
5368 : A9 B0 A0 9F 20 40 54 A9   2E
5370 : BF A0 9F 20 A2 BB A9 A6   67
5378 : A0 9F 20 40 54 20 3B 55   D6
5380 : AD 70 03 C9 02 D0 54 A9   AB
5388 : 13 A0 9F 20 A2 BB A9 D8   38
5390 : A0 9F 20 50 B8 A9 B5 A0   03
5398 : 9F 20 40 54 A9 C4 A0 9F   64
53A0 : 20 A2 BB A9 AB A0 9F 20   B4
53A8 : 40 54 A9 13 A0 9F 20 A2   AC
53B0 : BB A9 D3 A0 9F 20 50 B8   F6
53B8 : A9 B0 A0 9F 20 40 54 A9   7E
53C0 : BF A0 9F 20 A2 BB A9 A6   B7
53C8 : A0 9F 20 40 54 A9 02 8D   FE
53D0 : 3E 03 20 3B 55 AD 73 03   96
53D8 : 8D 3E 03 EA A9 D8 A0 9F   C6
53E0 : 20 A2 BB A9 D3 A0 9F 20   76
53E8 : 40 54 A9 C4 A0 9F 20 A2   22
53F0 : BB A9 BF A0 9F 20 40 54   28
53F8 : A9 B9 A0 9E 20 A2 BB A9   D3
5400 : C8 A0 9E 20 67 B8 A9 B9   1A
5408 : A0 9E 20 40 54 A9 BE A0   D6
5410 : 9E 20 5B BC C9 01 F0 03   9B
5418 : 4C 99 51 EA A9 C3 A0 9E   5B
5420 : 20 A2 BB A9 C8 A0 9E 20   02
5428 : 67 B8 A9 C3 A0 9E 20 40   CE
5430 : 54 A9 B4 A0 9E 20 5B BC   6C
5438 : C9 00 F0 03 4C 4F 51 60   E3
5440 : AA 4C D4 BB               DC
Listing 17. Hilfsprogramm »HiRes 6«
PROGRAMM : HIRES7.CAD.OBJ 3800 4881
-----------------------------------
3800 : E6 61 20 F7 B7 A5 14 85   A2
3808 : FA A5 15 18 69 50 85 FB   44
3810 : A9 45 A0 9F 20 A2 BB A9   D1
3818 : F9 A0 BA 20 28 BA A9 91   36
3820 : A0 9F 20 67 B8 20 F7 B7   61
3828 : A0 00 A5 14 91 FA C8 A5   14
3830 : 15 91 FA 60 E6 61 20 F7   C2
3838 : B7 A5 15 18 69 50 85 15   64
3840 : A0 00 B1 14 AA C8 B1 14   AF
3848 : A8 8A 20 81 39 A9 91 A0   D6
3850 : 9F 20 A2 BB A9 68 A0 49   12
3858 : 20 50 B8 A9 68 A0 49 AA   0A
3860 : 20 D4 BB A9 F9 A0 BA 20   DE
3868 : A2 BB A9 68 A0 49 4C 0F   03
3870 : BB 20 F7 B7 A5 14 18 69   5E
3878 : 5A 85 FA A5 15 69 4E 85   E9
3880 : FB A0 00 B1 FA A8 4C A2   6D
3888 : B3 20 F7 B7 A5 14 18 69   6E
3890 : 5A 85 FA A5 15 69 4E 85   01
3898 : FB A9 45 A0 9F 20 A2 BB   CA
38A0 : 20 F7 B7 A5 14 A0 00 91   C8
38A8 : FA 60 EA A9 A0 A0 9E 20   8C
38B0 : 28 BA A9 9B A0 9F 20 67   69
38B8 : B8 E6 61 20 F7 B7 A5 14   3C
38C0 : 18 69 28 85 FA A5 15 69   4C
38C8 : 4D 85 FB A9 45 A0 9F 20   24
38D0 : A2 BB A9 F9 A0 BA 20 28   AA
38D8 : BA A9 91 A0 9F 20 67 B8   E9
38E0 : 20 F7 B7 A0 00 A5 14 91   9E
38E8 : FA C8 A5 15 91 FA 60 EA   9B
38F0 : A9 A0 A0 9E 20 28 BA A9   67
38F8 : 9B A0 9F 20 67 B8 E6 61   6A
3900 : 20 F7 B7 A5 14 18 69 28   B6
3908 : 85 FA A5 15 69 4D 85 FB   25
3910 : A0 00 B1 FA AA C8 B1 FA   2A
3918 : A8 8A 20 81 39 A9 91 A0   A6
3920 : 9F 20 A2 BB A9 68 A0 49   E2
3928 : 20 50 B8 A9 68 A0 49 AA   DA
3930 : 20 D4 BB A9 F9 A0 BA 20   AE
3938 : A2 BB A9 68 A0 49 4C 0F   D3
3940 : BB E6 61 20 F7 B7 A5 14   C7
3948 : 18 69 DC 85 FA A5 15 69   01
3950 : 49 85 FB A0 00 AD 72 03   AC
3958 : 91 FA AD 73 03 C8 91 FA   F3
3960 : 60 E6 61 20 F7 B7 A5 14   8C
3968 : 18 69 DC 85 FA A5 15 69   21
3970 : 49 85 FB A0 00 B1 FA 8D   23
3978 : 72 03 C8 B1 FA 8D 73 03   C4
3980 : 60 8D 4F 9F 20 A2 B3 A5   A0
3988 : 61 18 69 08 85 61 A9 68   2C
3990 : A0 49 AA 20 D4 BB AC 4F   00
3998 : 9F 20 A2 B3 A9 68 A0 49   59
39A0 : 20 67 B8 A9 68 A0 49 AA   DD
39A8 : 20 D4 BB 60 20 FD AE 4C   72
39B0 : 8A AD 20 03 90 4C 9B B7   C3
39B8 : 00 08 35 3D 02 0A 37 3F   7D
39C0 : 10 18 25 2D 12 1A 27 2F   B8
39C8 : 31 39 04 0C 33 3B 06 0E   5A
39D0 : 21 29 14 1C 23 2B 16 1E   2F
39D8 : 03 0B 36 3E 01 09 34 3C   58
39E0 : 13 1B 26 2E 11 19 24 2C   93
39E8 : 32 3A 07 0F 30 38 05 0D   CE
39F0 : 22 2A 17 1F 20 28 15 1D   A3
39F8 : AD 75 03 0A 0A 0A 6D 74   F2
3A00 : 03 A8 B9 B8 39 A8 4C A2   2C
3A08 : B3 20 B2 39 8E 77 03 20   90
3A10 : B2 39 8E 7A 03 20 B2 39   C0
3A18 : 8E 76 03 20 B2 39 8E 7B   CC
3A20 : 03 20 B2 39 8E 7D 03 20   28
3A28 : B2 39 8E 79 03 20 AC 39   A0
3A30 : A9 6D A0 49 AA 20 D4 BB   58
3A38 : 20 AC 39 A9 B4 A0 9E AA   52
3A40 : 20 D4 BB 20 AC 39 A9 AA   4E
3A48 : A0 9E AA 20 D4 BB 20 B2   F7
3A50 : 39 8E 81 03 20 B2 39 8E   2B
3A58 : 82 03 20 B2 39 8E 3E 03   C1
3A60 : 8E 7C 03 20 6F 3C 4C DC   B5
3A68 : 45 A9 01 8D 68 03 A9 D8   6B
3A70 : A0 9F 20 A2 BB A9 D3 A0   D6
3A78 : 9F 20 5B BC 30 55 F0 53   AE
3A80 : A9 68 A0 49 AA 20 D4 BB   25
3A88 : A9 D3 A0 9F 20 A2 BB A9   90
3A90 : D8 A0 9F AA 20 D4 BB A9   E0
3A98 : 68 A0 49 20 A2 BB A9 D3   FD
3AA0 : A0 9F AA 20 D4 BB A9 CE   2E
3AA8 : A0 9F 20 A2 BB A9 68 A0   60
3AB0 : 49 AA 20 D4 BB A9 C9 A0   62
3AB8 : 9F 20 A2 BB A9 CE A0 9F   5A
3AC0 : AA 20 D4 BB A9 68 A0 49   1A
3AC8 : 20 A2 BB A9 C9 A0 9F AA   D3
3AD0 : 20 D4 BB 20 0E 3C A9 A4   00
3AD8 : A0 49 20 A2 BB A9 CE A0   FF
3AE0 : 9F 20 50 B8 A9 9A A0 49   3F
3AE8 : AA 20 D4 BB A9 D8 A0 9F   72
3AF0 : 20 A2 BB 20 CC BC 20 2B   DE
3AF8 : BC 10 07 A9 F1 A0 9F 20   96
3B00 : A2 BB EA A9 55 A0 9F AA   9E
3B08 : 20 D4 BB A9 D3 A0 9F 20   B7
3B10 : A2 BB 20 CC BC A9 D6 A0   E7
3B18 : 49 20 5B BC 30 09 F0 07   FD
3B20 : A9 D6 A0 49 20 A2 BB EA   61
3B28 : A9 CC A0 49 AA 20 D4 BB   FF
3B30 : EA A9 9A A0 49 20 A2 BB   41
3B38 : A9 A4 A0 49 20 67 B8 A9   F8
3B40 : 9A A0 49 AA 20 D4 BB A9   BD
3B48 : 55 A0 9F 20 A2 BB AD 76   85
3B50 : 03 F0 11 A9 E2 A0 9F 20   37
3B58 : A2 BB A9 55 A0 9F 20 0F   92
3B60 : BB 20 CC BC EA A9 95 A0   89
3B68 : 49 AA 20 D4 BB 20 34 38   A7
3B70 : A9 31 A0 9F AA 20 D4 BB   44
3B78 : AD 77 03 F0 41 AD 7A 03   31
3B80 : F0 08 AD 78 03 F0 03 4C   4B
3B88 : BE 3B EA A9 9A A0 49 20   E8
3B90 : 50 B8 20 58 BC A9 E2 A0   35
3B98 : 9F 20 5B BC 10 20 AD 7A   63
3BA0 : 03 D0 0B A9 01 8D 40 03   87
3BA8 : 20 0A 3D 4C E8 3B A9 01   B7
3BB0 : 8D 78 03 20 0A 3D A9 00   6F
3BB8 : 8D 78 03 4C E8 3B EA A9   33
3BC0 : E2 A0 9F 20 A2 BB AD 68   6E
3BC8 : 03 F0 03 20 B4 BF EA A9   50
3BD0 : 31 A0 9F 20 67 B8 A9 9A   55
3BD8 : A0 49 20 5B BC 10 09 AD   5C
3BE0 : 68 03 8D 40 03 20 0A 3D   09
3BE8 : EA A9 55 A0 9F 20 A2 BB   0D
3BF0 : A9 AA A0 9E 20 67 B8 A9   5E
3BF8 : 55 A0 9F AA 20 D4 BB A9   C5
3C00 : CC A0 49 20 5B BC C9 01   37
3C08 : F0 03 4C 30 3B 60 EA A9   49
3C10 : D8 A0 9F 20 A2 BB A9 D3   7B
3C18 : A0 9F 20 50 B8 A9 9F A0   33
3C20 : 49 AA 20 D4 BB A5 61 D0   71
3C28 : 10 A9 F1 A0 9F 20 A2 BB   9A
3C30 : A9 A4 A0 49 AA 20 D4 BB   F3
3C38 : 60 EA A9 CE A0 9F 20 A2   1E
3C40 : BB A9 C9 A0 9F 20 50 B8   04
3C48 : A9 68 A0 49 AA 20 D4 BB   ED
3C50 : A9 9F A0 49 20 A2 BB A9   73
3C58 : 68 A0 49 20 0F BB AD 76   D9
3C60 : 03 F0 02 E6 61 EA A9 A4   96
3C68 : A0 49 AA 20 D4 BB 60 A0   49
3C70 : 33 20 A2 B3 A9 A0 A0 9E   32
3C78 : AA 20 D4 BB A0 3F 20 A2   A9
3C80 : B3 A9 96 A0 9E AA 20 D4   2B
3C88 : BB A9 EC A0 9F 20 A2 BB   64
3C90 : E6 61 A9 8C A0 9E AA 20   0D
3C98 : D4 BB A9 AA A0 9E 20 28   D9
3CA0 : BA A9 68 A0 49 AA 20 D4   71
3CA8 : BB A9 C8 A0 9E 20 A2 BB   6B
3CB0 : A9 68 A0 49 20 50 B8 A9   99
3CB8 : D6 A0 49 AA 20 D4 BB A9   71
3CC0 : AA A0 9E 20 A2 BB 20 F7   DE
3CC8 : B7 A5 14 8D 70 03 AC 76   C7
3CD0 : 03 C8 20 A2 B3 A9 AA A0   08
3CD8 : 9E AA 20 D4 BB A9 C8 A0   DB
3CE0 : 9E 20 A2 BB A9 91 A0 9F   97
3CE8 : 20 50 B8 A9 8B A0 49 AA   CC
3CF0 : 20 D4 BB A9 F9 A0 BA 20   6E
3CF8 : A2 BB A9 8B A0 49 20 0F   47
3D00 : BB A9 8B A0 49 AA 20 D4   9B
3D08 : BB 60 AD 79 03 F0 48 A9   BA
3D10 : 6D A0 49 20 A2 BB A9 9A   08
3D18 : A0 49 20 50 B8 20 2B BC   22
3D20 : 8D A0 9F 20 58 BC A9 C8   8D
3D28 : A0 9E 20 5B BC 30 06 AD   4C
3D30 : A0 9F 30 23 60 EA A9 6D   EF
3D38 : A0 49 20 A2 BB A9 45 A0   39
3D40 : 9F AA 20 D4 BB A9 95 A0   78
3D48 : 49 20 A2 BB 20 00 38 A9   F8
3D50 : 01 8D 40 03 4C 83 3D EA   34
3D58 : A9 9A A0 49 20 A2 BB A9   F9
3D60 : 45 A0 9F AA 20 D4 BB A9   1D
3D68 : 95 A0 49 20 A2 BB 20 00   2C
3D70 : 38 AD 78 03 F0 05 A9 00   DB
3D78 : 8D 40 03 AD 7A 03 F0 03   25
3D80 : 4C 3B 3E AD 7C 03 8D 3E   42
3D88 : 03 AD 70 03 C9 02 D0 35   39
3D90 : A9 8C A0 9E 20 A2 BB A9   D5
3D98 : 95 A0 49 20 0F BB 20 CC   BD
3DA0 : BC 20 F7 B7 E6 14 A5 14   2F
3DA8 : 8D 3E 03 C9 02 90 16 A9   9F
3DB0 : 8C A0 9E 20 A2 BB A9 95   12
3DB8 : A0 49 20 50 B8 A9 95 A0   7F
3DC0 : 49 AA 20 D4 BB AD 76 03   0A
3DC8 : F0 13 A9 72 A0 49 20 A2   15
3DD0 : BB 20 F7 B7 A5 14 18 6D   C6
3DD8 : 40 03 8D 40 03 AD 40 03   AA
3DE0 : C9 04 90 05 A9 03 8D 40   D9
3DE8 : 03 AD 76 03 F0 10 A9 95   21
3DF0 : A0 49 20 A2 BB 20 F7 B7   9D
3DF8 : 20 AC 3F 4C 32 3E EA A9   DC
3E00 : 95 A0 49 20 A2 BB 20 F7   B4
3E08 : B7 20 93 3F AD 7B 03 D0   00
3E10 : 03 4C 32 3E EA A9 95 A0   21
3E18 : 49 20 A2 BB 20 F7 B7 18   62
3E20 : 46 14 B0 06 20 E8 3E 4C   38
3E28 : 32 3E AD 7F 03 F0 03 20   D9
3E30 : E8 3E AD 7D 03 F0 03 4C   AF
3E38 : C7 3F 60 A9 00 8D 7F 03   5D
3E40 : AD 40 03 C9 01 D0 06 8D   D1
3E48 : 7F 03 4C 83 3D EA A9 95   C9
3E50 : A0 49 20 A2 BB 20 F7 B7   FD
3E58 : A5 14 29 07 8D 74 03 AD   16
3E60 : 7E 03 29 07 8D 75 03 A9   6F
3E68 : C3 A0 9E 20 A2 BB 20 71   92
3E70 : 38 A9 77 A0 49 AA 20 D4   83
3E78 : BB AD 76 03 D0 1C A9 78   8D
3E80 : A0 9F 20 A2 BB A9 77 A0   74
3E88 : 49 20 0F BB 20 CC BC A9   CB
3E90 : 77 A0 49 AA 20 D4 BB 4C   2F
3E98 : CA 3E EA A9 96 A0 9E 20   9A
3EA0 : A2 BB A9 77 A0 49 20 0F   6C
3EA8 : BB 20 CC BC A9 72 A0 49   81
3EB0 : AA 20 D4 BB A9 96 A0 9E   26
3EB8 : 20 28 BA A9 77 A0 49 20   B2
3EC0 : 50 B8 A9 77 A0 49 AA 20   05
3EC8 : D4 BB 20 F8 39 A9 77 A0   A1
3ED0 : 49 20 5B BC C9 01 F0 08   10
3ED8 : A9 01 8D 40 03 4C 83 3D   88
3EE0 : A9 00 8D 40 03 4C 83 3D   10
3EE8 : EA A9 95 A0 49 20 A2 BB   B8
3EF0 : 20 F7 B7 A5 14 4A 29 07   F5
3EF8 : 8D 74 03 AD 7E 03 29 07   E9
3F00 : 8D 75 03 A9 C3 A0 9E 20   3A
3F08 : A2 BB 20 71 38 A9 77 A0   AE
3F10 : 49 AA 20 D4 BB A9 96 A0   F6
3F18 : 9E 20 A2 BB A9 77 A0 49   52
3F20 : 20 0F BB 20 CC BC A9 72   F9
3F28 : A0 49 AA 20 D4 BB A9 96   1A
3F30 : A0 9E 20 28 BA A9 77 A0   45
3F38 : 49 20 50 B8 A9 77 A0 49   28
3F40 : AA 20 D4 BB A9 72 A0 49   EA
3F48 : 20 A2 BB 20 F7 B7 A5 14   A8
3F50 : 8D 40 03 AD 7F 03 F0 06   54
3F58 : EE 40 03 4C 6F 3F 20 F8   14
3F60 : 39 A9 77 A0 49 20 5B BC   DC
3F68 : C9 01 F0 03 EE 40 03 AD   A7
3F70 : 40 03 C9 04 90 05 A9 03   03
3F78 : 8D 40 03 EA A9 95 A0 49   A0
3F80 : 20 A2 BB 20 F7 B7 18 46   0E
3F88 : 15 66 14 A9 02 8D 3E 03   96
3F90 : 4C AC 3F A5 15 F0 0C C9   53
3F98 : 01 F0 01 60 A5 14 C9 40   00
3FA0 : 90 01 60 AD 7E 03 8D 3F   33
3FA8 : 03 4C 33 C5 A5 15 F0 01   20
3FB0 : 60 A5 14 C9 A0 90 01 60   74
3FB8 : A5 14 8D 5E 03 AD 7E 03   34
3FC0 : 8D 71 03 20 9A 56 60 A9   FC
3FC8 : 00 8D 40 03 AD 7F 03 F0   C4
3FD0 : 08 A9 01 8D 40 03 4C E3   B4
3FD8 : 3F AD 78 03 F0 05 A9 01   4C
3FE0 : 8D 40 03 A9 02 8D 3E 03   0F
3FE8 : A9 95 A0 49 20 A2 BB 20   F3
3FF0 : F7 B7 4C 93 3F A9 00 85   95
3FF8 : FA A9 50 85 FB A9 00 A0   DA
4000 : 00 91 FA C8 D0 FB E6 FB   21
4008 : A5 FB C9 55 D0 EF 60 AD   31
4010 : 7E 03 8D 5C 03 A9 4F A0   FB
4018 : 49 20 A2 BB A9 B5 A0 9F   9B
4020 : AA 20 D4 BB A9 4A A0 49   89
4028 : 20 A2 BB A9 B0 A0 9F AA   A1
4030 : 20 D4 BB A9 45 A0 49 20   9D
4038 : A2 BB A9 AB A0 9F AA 20   8A
4040 : D4 BB A9 40 A0 49 20 A2   7E
4048 : BB A9 A6 A0 9F AA 20 D4   0F
4050 : BB 20 A9 62 AD 5F 03 C9   47
4058 : FF D0 03 4C 40 45 AD 5E   AB
4060 : 03 AC 5F 03 20 81 39 A9   38
4068 : D8 A0 9F AA 20 D4 BB AD   C0
4070 : 60 03 AC 61 03 20 81 39   53
4078 : A9 D3 A0 9F AA 20 D4 BB   9D
4080 : A9 00 8D 78 03 AD 7A 03   29
4088 : F0 1C AD 65 03 F0 17 C9   46
4090 : 02 F0 0E A9 63 A0 49 20   64
4098 : A2 BB 20 F7 B7 46 14 90   3E
40A0 : 05 A9 01 8D 78 03 EA A9   0A
40A8 : 4A A0 49 20 A2 BB A9 4F   E6
40B0 : A0 49 20 50 B8 A9 9F A0   A0
40B8 : 49 AA 20 D4 BB 20 58 BC   91
40C0 : A9 E2 A0 9F 20 5B BC 10   E6
40C8 : 03 4C C1 41 EA A9 7C A0   B9
40D0 : 49 20 A2 BB A9 81 A0 49   05
40D8 : 20 50 B8 A9 68 A0 49 AA   8A
40E0 : 20 D4 BB A9 9F A0 49 20   F3
40E8 : A2 BB A9 68 A0 49 20 0F   D2
40F0 : BB A9 A4 A0 49 AA 20 D4   D1
40F8 : BB A9 4F A0 49 20 A2 BB   07
4100 : A9 D8 A0 9F 20 50 B8 A9   EC
4108 : A4 A0 49 20 28 BA A9 81   55
4110 : A0 49 20 67 B8 A9 CE A0   9F
4118 : 9F AA 20 D4 BB A9 4F A0   36
4120 : 49 20 A2 BB A9 D3 A0 9F   94
4128 : 20 50 B8 A9 A4 A0 49 20   88
4130 : 28 BA A9 81 A0 49 20 67   F3
4138 : B8 A9 C9 A0 9F AA 20 D4   C5
4140 : BB AD 78 03 F0 05 AD 7D   39
4148 : 03 F0 1A EA A9 D8 A0 9F   CA
4150 : 20 A2 BB A5 61 D0 0B A9   81
4158 : D3 A0 9F 20 A2 BB A5 61   C9
4160 : F0 03 20 69 3A 4C D8 43   F7
4168 : EA A9 54 A0 49 20 A2 BB   E8
4170 : A9 9B A0 9F AA 20 D4 BB   79
4178 : A9 D8 A0 9F 20 A2 BB A9   03
4180 : 45 A0 9F AA 20 D4 BB A9   3D
4188 : C8 A0 9E 20 A2 BB 20 AA   2A
4190 : 38 A9 CE A0 9F 20 A2 BB   61
4198 : A9 45 A0 9F AA 20 D4 BB   76
41A0 : A9 E2 A0 9F 20 A2 BB 20   1D
41A8 : AA 38 A9 54 A0 49 20 A2   7D
41B0 : BB A9 C8 A0 9E 20 67 B8   80
41B8 : A9 54 A0 49 AA 20 D4 BB   53
41C0 : 60 EA A9 40 A0 49 20 A2   22
41C8 : BB A9 45 A0 49 20 50 B8   06
41D0 : A9 9F A0 49 AA 20 D4 BB   11
41D8 : 20 58 BC A9 E2 A0 9F 20   7A
41E0 : 5B BC 10 38 A9 81 A0 49   60
41E8 : 20 A2 BB A9 7C A0 49 20   B0
41F0 : 67 B8 A9 68 A0 49 AA 20   6A
41F8 : D4 BB A9 E2 A0 9F 20 A2   3D
4200 : BB A9 68 A0 49 20 0F BB   07
4208 : EA A9 CE A0 9F AA 20 D4   08
4210 : BB A9 C9 A0 9F AA 20 D4   A0
4218 : BB 4C 41 41 EA A9 7C A0   A1
4220 : 49 20 A2 BB A9 81 A0 49   55
4228 : 20 50 B8 A9 68 A0 49 AA   DA
4230 : 20 D4 BB A9 9F A0 49 20   43
4238 : A2 BB A9 68 A0 49 20 0F   22
4240 : BB A9 A4 A0 49 AA 20 D4   21
4248 : BB A9 45 A0 49 20 A2 BB   D5
4250 : A9 D1 A0 49 20 50 B8 A9   EE
4258 : A4 A0 49 20 28 BA A9 81   A5
4260 : A0 49 20 67 B8 4C 08 42   2C
4268 : EA A9 8B A0 49 20 A2 BB   B5
4270 : A9 90 A0 49 AA 20 D4 BB   29
4278 : A9 00 8D 80 03 8D 78 03   19
4280 : A9 F1 A0 9F 20 A2 BB A9   97
4288 : BF A0 9F AA 20 D4 BB EA   42
4290 : A9 F1 A0 9F 20 A2 BB A9   A7
4298 : 9B A0 9F AA 20 D4 BB EA   2E
42A0 : A9 C8 A0 9E 20 A2 BB 20   EF
42A8 : EF 38 A9 90 A0 49 20 5B   BB
42B0 : BC 10 17 A9 90 A0 49 AA   F8
42B8 : 20 D4 BB A9 9B A0 9F 20   E4
42C0 : A2 BB A9 86 A0 49 AA 20   BA
42C8 : D4 BB EA A9 9B A0 9F 20   E7
42D0 : A2 BB A9 C8 A0 9E 20 67   21
42D8 : B8 A9 9B A0 9F AA 20 D4   D9
42E0 : BB A9 54 A0 49 20 5B BC   15
42E8 : D0 B5 A9 8B A0 49 20 A2   89
42F0 : BB A9 90 A0 49 20 5B BC   34
42F8 : D0 03 4C A5 43 AD 80 03   BB
4300 : D0 3B A9 01 8D 80 03 A9   35
4308 : 86 A0 49 20 A2 BB A9 9B   1B
4310 : A0 9F AA 20 D4 BB A9 C8   92
4318 : A0 9E 20 A2 BB 20 EF 38   51
4320 : A9 D8 A0 9F AA 20 D4 BB   C8
4328 : A9 E2 A0 9F 20 A2 BB 20   A5
4330 : EF 38 A9 CE A0 9F AA 20   71
4338 : D4 BB 4C 7C 43 EA A9 86   CC
4340 : A0 49 20 A2 BB A9 9B A0   9A
4348 : 9F AA 20 D4 BB A9 C8 A0   4C
4350 : 9E 20 A2 BB 20 EF 38 A9   D4
4358 : D3 A0 9F AA 20 D4 BB A9   A3
4360 : E2 A0 9F 20 A2 BB 20 EF   E7
4368 : 38 A9 C9 A0 9F AA 20 D4   75
4370 : BB A9 00 8D 80 03 8D 68   D9
4378 : 03 20 D3 3A EA A9 86 A0   1F
4380 : 49 20 A2 BB A9 9B A0 9F   33
4388 : AA 20 D4 BB A9 8B A0 49   FB
4390 : 20 A2 BB A9 45 A0 9F AA   53
4398 : 20 D4 BB A9 C8 A0 9E 20   93
43A0 : A2 BB 20 AA 38 EA A9 8B   16
43A8 : A0 49 20 A2 BB A9 90 A0   D6
43B0 : 49 AA 20 D4 BB A9 BF A0   3A
43B8 : 9F 20 A2 BB A9 C8 A0 9E   28
43C0 : 20 67 B8 A9 BF A0 9F AA   CC
43C8 : 20 D4 BB A9 54 A0 49 20   26
43D0 : 5B BC F0 03 4C 8F 42 60   31
43D8 : EA A9 45 A0 49 20 A2 BB   94
43E0 : 20 CC BC A9 BD A0 49 AA   26
43E8 : 20 D4 BB A9 40 A0 49 20   05
43F0 : A2 BB 20 CC BC A9 B8 A0   4F
43F8 : 49 AA 20 D4 BB A9 BD A0   7A
4400 : 49 20 5B BC 10 26 A9 68   71
4408 : A0 49 AA 20 D4 BB A9 BD   49
4410 : A0 49 20 A2 BB A9 B8 A0   DE
4418 : 49 AA 20 D4 BB A9 68 A0   45
4420 : 49 20 A2 BB A9 BD A0 49   37
4428 : AA 20 D4 BB EA A9 54 A0   1D
4430 : 49 20 A2 BB A5 61 D0 4F   F1
4438 : A9 BD A0 49 20 A2 BB A9   6A
4440 : B3 A0 49 AA 20 D4 BB A9   D6
4448 : B8 A0 49 20 A2 BB A9 AE   B3
4450 : A0 49 AA 20 D4 BB EA A9   6E
4458 : 63 A0 49 20 A2 BB A9 A9   64
4460 : A0 49 AA 20 D4 BB A9 BD   A1
4468 : A0 49 20 A2 BB A9 C7 A0   73
4470 : 49 AA 20 D4 BB A9 B8 A0   DE
4478 : 49 20 A2 BB A9 C2 A0 49   B7
4480 : AA 20 D4 BB 4C 68 41 EA   CA
4488 : A9 A9 A0 49 20 A2 BB A9   B0
4490 : C8 A0 9E 20 67 B8 A9 63   FE
4498 : A0 49 20 5B BC F0 05 AD   13
44A0 : 83 03 F0 B2 EA A9 BD A0   6B
44A8 : 49 20 A2 BB A9 B8 A0 49   97
44B0 : 20 5B BC D0 01 60 EA A9   D9
44B8 : D1 A0 49 20 A2 BB A9 C7   6E
44C0 : A0 49 20 5B BC D0 09 A9   42
44C8 : B8 A0 49 20 5B BC F0 41   09
44D0 : EA A9 C2 A0 49 20 5B BC   D0
44D8 : D0 09 A9 BD A0 49 20 5B   DA
44E0 : BC F0 2E AD 83 03 F0 26   B6
44E8 : A9 B3 A0 49 20 A2 BB A9   15
44F0 : C7 A0 49 AA 20 D4 BB A9   9A
44F8 : AE A0 49 20 A2 BB A9 C2   81
4500 : A0 49 AA 20 D4 BB A9 00   C5
4508 : 8D 83 03 4C A4 44 4C 56   EB
4510 : 44 EA A9 63 A0 49 20 A2   BA
4518 : BB A9 A9 A0 49 AA 20 D4   3A
4520 : BB A9 BD A0 49 20 A2 BB   CB
4528 : A9 C7 A0 49 AA 20 D4 BB   7D
4530 : A9 B8 A0 49 20 A2 BB A9   E0
4538 : C2 A0 49 AA 20 D4 BB 60   4A
4540 : EA A9 45 A0 49 20 A2 BB   FC
4548 : A9 40 A0 49 20 5B BC 8D   4E
4550 : A0 9F 30 1C A9 D1 A0 49   8E
4558 : 20 A2 BB A9 45 A0 49 20   AC
4560 : 5B BC C9 01 F0 09 A9 40   2A
4568 : A0 49 20 5B BC 10 01 60   31
4570 : AD A0 9F 10 1B A9 D1 A0   DF
4578 : 49 20 A2 BB A9 40 A0 49   A3
4580 : 20 5B BC C9 01 F0 E8 A9   45
4588 : 45 A0 49 20 5B BC 30 DF   90
4590 : EA A9 4F A0 49 20 A2 BB   CE
4598 : 20 2B BC 10 1A A9 F1 A0   77
45A0 : 9F 20 A2 BB A9 D8 A0 9F   92
45A8 : AA 20 D4 BB A9 D3 A0 9F   0A
45B0 : AA 20 D4 BB 4C 80 40 EA   B6
45B8 : A9 D6 A0 49 20 A2 BB A9   77
45C0 : 4A A0 49 20 5B BC 10 13   B3
45C8 : A9 D8 A0 9F AA 20 D4 BB   70
45D0 : A9 D3 A0 9F AA 20 D4 BB   F5
45D8 : 4C 80 40 60 AD 81 03 8D   8E
45E0 : 7E 03 AC 7E 03 20 A2 B3   FE
45E8 : A9 D1 A0 49 AA 20 D4 BB   42
45F0 : 20 F5 3F A9 C8 A0 9E 20   5C
45F8 : A2 BB A9 C3 A0 9E AA 20   44
4600 : D4 BB EA A9 C3 A0 9E 20   9E
4608 : A2 BB 20 61 39 AD 7E 03   BD
4610 : CD 72 03 B0 03 4C 49 47   34
4618 : AD 73 03 CD 7E 03 B0 03   C2
4620 : 4C 49 47 EA A9 F1 A0 9F   2C
4628 : 20 A2 BB A9 54 A0 49 AA   82
4630 : 20 D4 BB A9 C3 A0 9E 20   DA
4638 : A2 BB 20 B2 9D A9 C8 A0   A2
4640 : 9E 20 A2 BB 20 E3 9D A9   F9
4648 : 5E A0 49 AA 20 D4 BB A9   89
4650 : B9 A0 9E AA 20 D4 BB A9   41
4658 : 78 A0 9F 20 A2 BB 20 E3   5C
4660 : 9D 20 F7 B7 A5 14 8D 65   FE
4668 : 03 AD 45 03 18 69 03 8D   E8
4670 : 45 03 AD 46 03 69 00 8D   02
4678 : 46 03 A9 C8 A0 9E 20 A2   88
4680 : BB 20 E3 9D A9 59 A0 49   72
4688 : AA 20 D4 BB A9 F1 A0 9F   DB
4690 : 20 A2 BB A9 63 A0 49 AA   DB
4698 : 20 D4 BB A9 C8 A0 9E 20   93
46A0 : A2 BB A9 59 A0 49 20 50   2B
46A8 : B8 A9 BE A0 9E AA 20 D4   62
46B0 : BB EA A9 B9 A0 9E 20 A2   47
46B8 : BB 20 98 9C 20 7B 47 AD   93
46C0 : 45 03 18 69 06 8D 45 03   A2
46C8 : AD 46 03 69 00 8D 46 03   12
46D0 : 20 B3 47 20 EB 47 A9 00   3F
46D8 : 8D 83 03 20 0F 40 A9 63   4C
46E0 : A0 49 20 A2 BB A9 C8 A0   EF
46E8 : 9E 20 67 B8 A9 63 A0 49   52
46F0 : AA 20 D4 BB A9 B9 A0 9E   7F
46F8 : 20 A2 BB A9 C8 A0 9E 20   DA
4700 : 67 B8 A9 B9 A0 9E AA 20   4F
4708 : D4 BB A9 BE A0 9E 20 5B   32
4710 : BC F0 03 4C B1 46 A9 01   85
4718 : 8D 83 03 A9 5E A0 49 20   AD
4720 : A2 BB 20 98 9C 20 B3 47   E3
4728 : A9 BE A0 9E 20 A2 BB 20   72
4730 : 98 9C 20 7B 47 20 EB 47   42
4738 : 20 0F 40 A9 54 A0 49 20   D5
4740 : A2 BB A5 61 F0 03 20 68   CE
4748 : 42 EA A9 C3 A0 9E 20 A2   A7
4750 : BB A9 C8 A0 9E 20 67 B8   20
4758 : A9 C3 A0 9E AA 20 D4 BB   55
4760 : A9 B4 A0 9E 20 5B BC F0   11
4768 : 03 4C 02 46 EE 7E 03 AD   25
4770 : 82 03 CD 7E 03 90 03 4C   10
4778 : E2 45 60 EA A9 C8 A0 9E   13
4780 : 20 A2 BB 20 F1 9B A9 4F   25
4788 : A0 49 AA 20 D4 BB A9 78   3E
4790 : A0 9F 20 A2 BB 20 F1 9B   18
4798 : A9 45 A0 49 AA 20 D4 BB   AC
47A0 : A9 E2 A0 9F 20 A2 BB 20   1D
47A8 : F1 9B A9 81 A0 49 AA 20   41
47B0 : D4 BB 60 EA A9 C8 A0 9E   78
47B8 : 20 A2 BB 20 F1 9B A9 4A   53
47C0 : A0 49 AA 20 D4 BB A9 78   76
47C8 : A0 9F 20 A2 BB 20 F1 9B   50
47D0 : A9 40 A0 49 AA 20 D4 BB   61
47D8 : A9 E2 A0 9F 20 A2 BB 20   55
47E0 : F1 9B A9 7C A0 49 AA 20   D8
47E8 : D4 BB 60 EA A9 4F A0 49   39
47F0 : 20 A2 BB A9 4A A0 49 20   94
47F8 : 5B BC C9 01 F0 01 60 EA   B2
4800 : A9 68 A0 49 AA 20 D4 BB   A5
4808 : A9 4A A0 49 20 A2 BB A9   81
4810 : 4F A0 49 AA 20 D4 BB A9   42
4818 : 68 A0 49 20 A2 BB A9 4A   6A
4820 : A0 49 AA 20 D4 BB A9 45   70
4828 : A0 49 20 A2 BB A9 68 A0   B5
4830 : 49 AA 20 D4 BB A9 40 A0   BC
4838 : 49 20 A2 BB A9 45 A0 49   8B
4840 : AA 20 D4 BB A9 68 A0 49   9A
4848 : 20 A2 BB A9 40 A0 49 AA   61
4850 : 20 D4 BB A9 81 A0 49 20   81
4858 : A2 BB A9 68 A0 49 AA 20   8E
4860 : D4 BB A9 7C A0 49 20 A2   26
4868 : BB A9 81 A0 49 AA 20 D4   80
4870 : BB A9 68 A0 49 20 A2 BB   C6
4878 : A9 7C A0 49 AA 20 D4 BB   27
4880 : 60                        C2
Listing 18. Hilfsprogramm »HiRes 7«
PROGRAMM : HIRES8.CAD.OBJ 5200 544E
-----------------------------------
5200 : 20 FD AE 20 8A AD 60 20   A6
5208 : 03 90 20 9B B7 60 20 00   CE
5210 : 52 A9 B4 A0 9E AA 20 D4   E1
5218 : BB 20 00 52 A9 2C A0 9F   EB
5220 : AA 20 D4 BB A9 27 A0 9F   1C
5228 : AA 20 D4 BB 20 07 52 8E   2F
5230 : 64 03 A2 02 20 C6 FF 20   77
5238 : CF FF A6 90 F0 03 4C 08   2B
5240 : 53 C9 FF D0 03 4C 08 53   EB
5248 : 8D 65 03 20 CF FF A6 90   05
5250 : F0 03 4C 08 53 8D 41 03   83
5258 : EA A9 2C A0 9F 20 A2 BB   33
5260 : A9 C8 A0 9E 20 67 B8 A9   DD
5268 : 2C A0 9F AA 20 D4 BB 20   F9
5270 : 98 9C AD 45 03 85 FA AD   0E
5278 : 46 03 85 FB A0 00 20 CF   4B
5280 : FF A6 90 F0 03 4C 08 53   6E
5288 : 91 FA C8 C0 06 D0 EF CE   25
5290 : 41 03 AD 41 03 D0 C1 A9   F7
5298 : 27 A0 9F 20 A2 BB A9 C8   3B
52A0 : A0 9E 20 67 B8 A9 9B A0   0D
52A8 : 9F AA 20 D4 BB A9 B4 A0   5C
52B0 : 9E 20 A2 BB A9 96 A0 9F   8F
52B8 : AA 20 D4 BB 20 4E 9D A9   5D
52C0 : B4 A0 9E 20 A2 BB A9 C8   B0
52C8 : A0 9E 20 67 B8 A9 B4 A0   99
52D0 : 9E AA 20 D4 BB A9 96 A0   0B
52D8 : 9F AA 20 D4 BB A9 2C A0   6A
52E0 : 9F 20 A2 BB A9 C8 A0 9E   50
52E8 : 20 67 B8 A9 9B A0 9F AA   B2
52F0 : 20 D4 BB 20 4E 9D A9 2C   3E
52F8 : A0 9F 20 A2 BB A9 27 A0   AB
5300 : 9F AA 20 D4 BB 4C 37 52   37
5308 : EA A9 B4 A0 9E 20 A2 BB   F5
5310 : 20 F7 B7 A5 14 8D EA 07   36
5318 : A5 15 8D EB 07 A9 2C A0   D8
5320 : 9F 20 A2 BB 20 F7 B7 A5   DB
5328 : 14 8D EC 07 A5 15 8D ED   34
5330 : 07 20 CC FF 60 20 00 52   26
5338 : A9 B4 A0 9E AA 20 D4 BB   AE
5340 : A9 BE A0 9E AA 20 D4 BB   BB
5348 : 20 07 52 8E 40 03 A2 02   FD
5350 : 20 C9 FF A9 C8 A0 9E 20   D6
5358 : A2 BB A9 B9 A0 9E AA 20   63
5360 : D4 BB EA A9 B9 A0 9E 20   5D
5368 : A2 BB 20 B2 9D A9 E2 A0   3A
5370 : 9F 20 A2 BB 20 E3 9D 20   17
5378 : F7 B7 A5 14 CD 40 03 F0   03
5380 : 03 4C 22 54 EA A9 78 A0   DC
5388 : 9F 20 A2 BB 20 E3 9D 20   2F
5390 : F7 B7 A5 14 20 D2 FF A9   3B
5398 : C8 A0 9E 20 A2 BB 20 E3   AC
53A0 : 9D A9 22 A0 9F AA 20 D4   28
53A8 : BB A9 B9 A0 9E 20 A2 BB   A7
53B0 : A9 C8 A0 9E 20 67 B8 20   1A
53B8 : B2 9D A9 C8 A0 9E 20 A2   81
53C0 : BB 20 E3 9D A9 1D A0 9F   7D
53C8 : AA 20 D4 BB A9 22 A0 9F   9C
53D0 : 20 A2 BB A9 1D A0 9F 20   FB
53D8 : 50 B8 20 F7 B7 A5 14 20   C5
53E0 : D2 FF EA A9 22 A0 9F 20   87
53E8 : A2 BB 20 98 9C AD 45 03   D5
53F0 : 85 FA AD 46 03 85 FB A0   B4
53F8 : 00 B1 FA 20 D2 FF C8 C0   65
5400 : 06 D0 F6 A9 C8 A0 9E 20   AD
5408 : A2 BB A9 22 A0 9F 20 67   8D
5410 : B8 A9 22 A0 9F AA 20 D4   B3
5418 : BB A9 1D A0 9F 20 5B BC   E5
5420 : D0 C0 EA A9 C8 A0 9E 20   8C
5428 : A2 BB A9 B9 A0 9E 20 67   98
5430 : B8 A9 B9 A0 9E AA 20 D4   A9
5438 : BB A9 BE A0 9E 20 5B BC   5D
5440 : F0 03 4C 62 53 A9 FF 20   D4
5448 : D2 FF 20 CC FF 60         F0
Listing 19. Hilfsprogramm »HiRes 8«
PROGRAMM : MOVIE.CAD.OBJ  C400 C6A4
-----------------------------------
C400 : 20 79 00 C9 2C F0 03 4C   05
C408 : 08 AF 60 20 FD AE 20 8A   EF
C410 : AD 20 F7 B7 A5 14 85 FA   C9
C418 : A5 15 85 FB 18 69 07 8D   2D
C420 : 61 03 A2 02 20 C6 FF 20   64
C428 : CF FF 20 CF FF A0 00 20   3E
C430 : CF FF 78 A2 34 86 01 91   10
C438 : FA A2 37 86 01 58 C8 D0   BA
C440 : EE A5 FB 18 69 01 85 FB   AF
C448 : CD 61 03 D0 E0 A0 00 20   F4
C450 : CF FF 78 A2 34 86 01 91   30
C458 : FA A2 37 86 01 58 C8 C0   B9
C460 : 80 D0 EC 20 CC FF 60 A2   1B
C468 : 0E 4C 3A A4 20 00 C4 20   15
C470 : 9B B7 E0 02 B0 F1 8E 41   B7
C478 : 03 20 00 C4 20 9B B7 E0   A3
C480 : 02 B0 E4 8E 51 03 20 00   93
C488 : C4 20 9B B7 8E 45 03 20   99
C490 : 00 C4 20 9B B7 8E 47 03   81
C498 : 20 00 C4 20 9B B7 8E 49   32
C4A0 : 03 20 B9 C5 A9 7E 8D 54   48
C4A8 : 03 A9 18 8D 5F 03 78 A9   7B
C4B0 : 34 85 01 20 19 C6 AD 5F   28
C4B8 : 03 18 69 08 8D 5F 03 C9   96
C4C0 : C0 F0 F6 C9 E0 F0 2A A9   81
C4C8 : 37 85 01 A9 10 2C 00 DC   53
C4D0 : F0 1C A9 08 2C 00 DC F0   52
C4D8 : 26 A9 04 2C 00 DC F0 35   6F
C4E0 : AC 54 03 A2 00 CA D0 FD   61
C4E8 : 88 D0 F8 4C AF C4 4C 9F   31
C4F0 : C5 AD 41 03 D0 35 A9 18   CA
C4F8 : 8D 5F 03 78 4C E0 C4 AD   3F
C500 : 54 03 38 E9 05 90 06 8D   29
C508 : 54 03 4C E0 C4 A9 01 8D   C6
C510 : 54 03 4C E0 C4 AD 54 03   26
C518 : 18 69 05 B0 06 8D 54 03   60
C520 : 4C E0 C4 A9 FB 8D 54 03   C6
C528 : 4C E0 C4 A9 D8 8D 5F 03   C8
C530 : 78 A9 34 85 01 20 19 C6   3E
C538 : AD 5F 03 38 E9 08 8D 5F   31
C540 : 03 C9 C0 F0 F6 C9 10 F0   56
C548 : 27 A9 37 85 01 A9 10 2C   B8
C550 : 00 DC F0 9A A9 08 2C 00   D9
C558 : DC F0 18 A9 04 2C 00 DC   43
C560 : F0 27 AC 54 03 A2 00 CA   74
C568 : D0 FD 88 D0 F8 4C 31 C5   B5
C570 : 4C A9 C4 AD 54 03 38 E9   8A
C578 : 05 90 06 8D 54 03 4C 62   4C
C580 : C5 A9 01 8D 54 03 4C 62   5F
C588 : C5 AD 54 03 18 69 05 B0   DC
C590 : 06 8D 54 03 4C 62 C5 A9   15
C598 : FB 8D 54 03 4C 62 C5 A9   12
C5A0 : 37 85 01 58 A9 1B 8D 11   B1
C5A8 : D0 A9 15 8D 18 D0 A9 97   22
C5B0 : 8D 00 DD A9 C8 8D 16 D0   DD
C5B8 : 60 A9 E0 85 FB A9 00 85   EE
C5C0 : FA A9 00 A0 00 91 FA C8   AD
C5C8 : D0 FB E6 FB A5 FB D0 F1   30
C5D0 : AD 45 03 0A 0A 0A 0A 6D   16
C5D8 : 47 03 A0 00 99 00 C0 99   99
C5E0 : 00 C1 99 00 C2 99 00 C3   A8
C5E8 : C8 D0 F1 AD 51 03 F0 19   6D
C5F0 : AD 49 03 A0 00 99 00 D8   95
C5F8 : 99 00 D9 99 00 DA 99 00   78
C600 : DB C8 D0 F1 A9 D8 8D 16   75
C608 : D0 A9 3B 8D 11 D0 A9 0D   86
C610 : 8D 18 D0 A9 3C 8D 00 DD   FF
C618 : 60 A9 E7 85 FB A9 D0 85   53
C620 : FA AD 5F 03 85 FD A9 00   18
C628 : 85 FC A0 00 B1 FC 91 FA   93
C630 : C8 C0 A0 D0 F7 A5 FC 18   6B
C638 : 69 A0 85 FC A5 FD 69 00   E2
C640 : 85 FD A5 FA 18 69 40 85   65
C648 : FA A5 FB 69 01 85 FB C9   01
C650 : F6 D0 D7 60 A2 02 20 C6   F8
C658 : FF 20 CF FF 20 CF FF 20   1C
C660 : CF FF A5 90 D0 3A 20 CF   A9
C668 : FF F0 35 A6 90 E0 00 D0   B3
C670 : 2F 20 CF FF A6 90 E0 00   16
C678 : D0 26 85 FA 20 CF FF A6   EA
C680 : 90 E0 00 D0 1B A6 FA 20   AE
C688 : CD BD 20 CF FF A6 90 E0   6F
C690 : 00 D0 0D 20 D2 FF D0 F2   96
C698 : A9 0D 20 D2 FF 4C 5F C6   98
C6A0 : 20 CC FF 60               34
Listing 20. Maschinenprogramme zur »Movie-Routine«
PROGRAMM : HARD.CAD.OBJ   C400 C725
-----------------------------------
C400 : 20 79 00 C9 2C F0 03 4C   05
C408 : 08 AF 60 A2 0E 4C 3A A4   CA
C410 : 20 00 C4 20 9B B7 8E 45   A2
C418 : 03 20 00 C4 20 9B B7 8E   9F
C420 : 46 03 20 00 C4 20 9B B7   1B
C428 : 8E 3E 03 AD 45 03 C9 10   00
C430 : B0 D9 AD 46 03 C9 10 B0   21
C438 : D2 AD 3E 03 C9 03 B0 CB   E0
C440 : AD 45 03 0A 0A 0A 0A 6D   86
C448 : 46 03 AC 3E 03 C0 02 F0   23
C450 : 17 C0 00 F0 B6 A2 8C 8E   B5
C458 : 5E C4 A0 00 99 00 8C C8   9E
C460 : D0 FA E8 E0 90 D0 F0 60   18
C468 : A2 C0 8E 71 C4 A0 00 99   C1
C470 : 00 C0 C8 D0 FA E8 E0 C4   20
C478 : D0 F0 60 20 00 C4 20 9B   BA
C480 : B7 E0 03 B0 86 E0 02 F0   D8
C488 : 27 E0 01 F0 10 A9 1B 8D   54
C490 : 11 D0 A9 15 8D 18 D0 A9   47
C498 : 97 4C C5 C4 EA AD 11 D0   61
C4A0 : 29 80 09 3B 8D 11 D0 A9   AB
C4A8 : 3D 8D 18 D0 4C C5 C4 EA   A8
C4B0 : AD 11 D0 29 80 09 3B 8D   97
C4B8 : 11 D0 A9 0D 8D 18 D0 A9   6E
C4C0 : 3C 4C C5 C4 EA 8D 00 DD   03
C4C8 : A9 C8 8D 16 D0 60 A2 02   9A
C4D0 : 20 C6 FF 20 CF FF 20 CF   74
C4D8 : FF A9 00 85 FA AD 5F 03   FD
C4E0 : 85 FB A0 00 20 CF FF 91   2F
C4E8 : FA C8 D0 F8 E6 FB A5 FB   76
C4F0 : CD 61 03 D0 ED 4C CC FF   BD
C4F8 : 4C 0B C4 20 00 C4 20 9B   DD
C500 : B7 E0 03 B0 F3 E0 00 F0   26
C508 : EF 60 20 FB C4 E0 01 D0   A8
C510 : 0D A9 A0 8D 5F 03 A9 C0   02
C518 : 8D 61 03 4C CE C4 A9 E0   1C
C520 : 8D 5F 03 A9 00 8D 61 03   4B
C528 : 4C CE C4 A9 00 8D 60 03   36
C530 : 8D 61 03 8D 65 03 8D 3D   FF
C538 : 03 8D 41 03 A2 04 20 C9   11
C540 : FF 20 FD AE 20 8A AD 20   F2
C548 : F7 B7 A5 14 8D 49 03 A5   81
C550 : 15 8D 4A 03 20 00 C4 20   74
C558 : 9B B7 8E 71 03 20 00 C4   5B
C560 : 20 9B B7 8E 6F 03 20 00   9D
C568 : C4 20 9B B7 8E 70 03 AD   EE
C570 : 49 03 8D 45 03 AD 4A 03   14
C578 : 18 69 A0 8D 46 03 AD 45   DC
C580 : 03 18 69 40 8D 47 03 AD   6C
C588 : 46 03 69 01 8D 48 03 AD   4D
C590 : 49 03 C9 00 D0 0C AD 4A   86
C598 : 03 C9 1E D0 05 A9 01 8D   DE
C5A0 : 3D 03 A9 07 8D 54 03 AD   8D
C5A8 : 6F 03 8D 68 03 78 A9 35   0E
C5B0 : 85 01 AD 45 03 85 FA AD   6D
C5B8 : 46 03 85 FB AD 47 03 85   8D
C5C0 : FC AD 48 03 85 FD AC 68   D1
C5C8 : 03 B1 FA 8D 5E 03 B1 FC   D3
C5D0 : 8D 5F 03 A9 37 85 01 58   57
C5D8 : AC 54 03 B9 CD C6 8D 51   92
C5E0 : 03 AD 5E 03 2D 51 03 F0   FD
C5E8 : 07 AD 60 03 38 4C F4 C5   84
C5F0 : AD 60 03 18 2A 8D 60 03   28
C5F8 : AD 5F 03 2D 51 03 F0 07   BA
C600 : AD 61 03 38 4C 0B C6 AD   B9
C608 : 61 03 18 2A 8D 61 03 AD   81
C610 : 71 03 F0 03 EE 68 03 EE   BB
C618 : 68 03 AD 68 03 C9 08 90   3A
C620 : 8C AD 60 03 8D 65 03 AD   67
C628 : 71 03 F0 19 AD 3D 03 F0   2D
C630 : 05 A9 00 8D 61 03 AD 60   61
C638 : 03 18 0A 0A 0A 0A 18 6D   37
C640 : 61 03 8D 65 03 AD 65 03   6C
C648 : 20 D2 FF A9 00 8D 65 03   0E
C650 : 8D 60 03 8D 61 03 CE 54   92
C658 : 03 AD 54 03 30 03 4C A7   43
C660 : C5 AD 45 03 18 69 08 8D   B6
C668 : 45 03 AD 46 03 69 00 8D   FA
C670 : 46 03 AD 47 03 18 69 08   33
C678 : 8D 47 03 AD 48 03 69 00   62
C680 : 8D 48 03 EE 41 03 AD 41   35
C688 : 03 C9 28 B0 03 4C A2 C5   39
C690 : AD 70 03 F0 34 A9 00 8D   00
C698 : 70 03 8D 41 03 8D 60 03   39
C6A0 : 8D 61 03 8D 65 03 AD 49   08
C6A8 : 03 8D 45 03 AD 4A 03 18   8D
C6B0 : 69 E0 8D 46 03 AD 45 03   6E
C6B8 : 18 69 40 8D 47 03 AD 46   16
C6C0 : 03 69 01 8D 48 03 4C A2   7D
C6C8 : C5 20 CC FF 60 01 02 04   EE
C6D0 : 08 10 20 40 80 A2 02 20   56
C6D8 : C6 FF 20 CF FF 20 CF FF   E0
C6E0 : 20 CF FF A5 90 D0 3A 20   55
C6E8 : CF FF F0 35 A6 90 E0 00   0C
C6F0 : D0 2F 20 CF FF A6 90 E0   93
C6F8 : 00 D0 26 85 FA 20 CF FF   8A
C700 : A6 90 E0 00 D0 1B A6 FA   9D
C708 : 20 CD BD 20 CF FF A6 90   3B
C710 : E0 00 D0 0D 20 D2 FF D0   00
C718 : F2 A9 0D 20 D2 FF 4C E0   46
C720 : C6 20 CC FF 60            06
Listing 21. Maschinenteile zur Hardcopy-Routine (FX-80 und Kompatible)
PROGRAMM : MPS801.CAD.OBJ C400 C6CC
-----------------------------------
C400 : 20 79 00 C9 2C F0 03 4C   05
C408 : 08 AF 60 A2 0E 4C 3A A4   CA
C410 : 20 00 C4 20 9B B7 8E 45   A2
C418 : 03 20 00 C4 20 9B B7 8E   9F
C420 : 46 03 20 00 C4 20 9B B7   1B
C428 : 8E 3E 03 AD 45 03 C9 10   00
C430 : B0 D9 AD 46 03 C9 10 B0   21
C438 : D2 AD 3E 03 C9 03 B0 CB   E0
C440 : AD 45 03 0A 0A 0A 0A 6D   86
C448 : 46 03 AC 3E 03 C0 02 F0   23
C450 : 17 C0 00 F0 B6 A2 8C 8E   B5
C458 : 5E C4 A0 00 99 00 8C C8   9E
C460 : D0 FA E8 E0 90 D0 F0 60   18
C468 : A2 C0 8E 71 C4 A0 00 99   C1
C470 : 00 C0 C8 D0 FA E8 E0 C4   20
C478 : D0 F0 60 20 00 C4 20 9B   BA
C480 : B7 E0 03 B0 86 E0 02 F0   D8
C488 : 27 E0 01 F0 10 A9 1B 8D   54
C490 : 11 D0 A9 15 8D 18 D0 A9   47
C498 : 97 4C C5 C4 EA AD 11 D0   61
C4A0 : 29 80 09 3B 8D 11 D0 A9   AB
C4A8 : 3D 8D 18 D0 4C C5 C4 EA   A8
C4B0 : AD 11 D0 29 80 09 3B 8D   97
C4B8 : 11 D0 A9 0D 8D 18 D0 A9   6E
C4C0 : 3C 4C C5 C4 EA 8D 00 DD   03
C4C8 : A9 C8 8D 16 D0 60 A2 02   9A
C4D0 : 20 C6 FF 20 CF FF 20 CF   74
C4D8 : FF A9 00 85 FA AD 5F 03   FD
C4E0 : 85 FB A0 00 20 CF FF 91   2F
C4E8 : FA C8 D0 F8 E6 FB A5 FB   76
C4F0 : CD 61 03 D0 ED 4C CC FF   BD
C4F8 : 4C 0B C4 20 00 C4 20 9B   DD
C500 : B7 E0 03 B0 F3 E0 00 F0   26
C508 : EF 60 20 FB C4 E0 01 D0   A8
C510 : 0D A9 A0 8D 5F 03 A9 C0   02
C518 : 8D 61 03 4C CE C4 A9 E0   1C
C520 : 8D 5F 03 A9 00 8D 61 03   4B
C528 : 4C CE C4 A2 02 20 C6 FF   9D
C530 : 20 CF FF 20 CF FF 20 CF   59
C538 : FF A5 90 D0 3A 20 CF FF   2C
C540 : F0 35 A6 90 E0 00 D0 2F   36
C548 : 20 CF FF A6 90 E0 00 D0   D6
C550 : 26 85 FA 20 CF FF A6 90   B4
C558 : E0 00 D0 1B A6 FA 20 CD   2E
C560 : BD 20 CF FF A6 90 E0 00   94
C568 : D0 0D 20 D2 FF D0 F2 A9   C7
C570 : 0D 20 D2 FF 4C 36 C5 20   10
C578 : CC FF 60 78 A9 34 85 01   BF
C580 : A9 E0 85 FB A9 00 85 FA   21
C588 : 85 FC A9 20 85 FD A0 00   C4
C590 : B1 FA 91 FC C8 D0 F9 E6   8B
C598 : FB E6 FD A5 FB D0 EF A9   94
C5A0 : 37 85 01 58 A9 7F A2 04   0E
C5A8 : A0 00 20 BA FF 20 C0 FF   AC
C5B0 : A2 7F 86 67 20 C9 FF A9   44
C5B8 : FF 85 61 A9 07 85 FD A9   EF
C5C0 : 1C 85 97 A9 00 8D B6 C6   8F
C5C8 : A9 28 8D B8 C6 A2 04 BD   0D
C5D0 : 5A C6 20 D2 FF CA 10 F7   76
C5D8 : A9 00 85 63 85 64 AD B6   EF
C5E0 : C6 85 65 A9 00 85 FE A5   6B
C5E8 : 63 A6 64 A4 65 20 5F C6   AE
C5F0 : A0 00 B1 AC A6 FE 9D BA   E0
C5F8 : C6 E6 65 E8 86 FE E4 FD   98
C600 : D0 E5 A9 00 A0 07 A6 FD   06
C608 : 1E BA C6 2A CA 10 F9 25   DA
C610 : 61 09 80 20 D2 FF 88 10   89
C618 : ED A5 63 18 69 08 85 63   67
C620 : 90 02 E6 64 CE B8 C6 D0   67
C628 : B5 A9 0D 20 D2 FF AD B6   4A
C630 : C6 18 69 07 8D B6 C6 C6   75
C638 : 97 F0 03 4C C8 C5 A9 04   FB
C640 : C5 FD F0 0C 85 FD A9 01   B2
C648 : 85 97 A9 0F 85 61 D0 EB   64
C650 : A9 0F 20 D2 FF A9 7F 4C   C7
C658 : CC FF 50 00 10 1B 08 85   3D
C660 : 14 86 15 98 4A 4A 4A AA   85
C668 : BD 98 C6 85 AD 8A 29 03   AD
C670 : AA BD B2 C6 85 AC 98 29   F1
C678 : 07 18 65 AC 85 AC A5 14   F7
C680 : 29 F8 85 63 A9 20 05 AD   FE
C688 : 85 AD 18 A5 AC 65 63 85   2D
C690 : AC A5 AD 65 15 85 AD 60   1C
C698 : 00 01 02 03 05 06 07 08   A7
C6A0 : 0A 0B 0C 0D 0F 10 11 12   AE
C6A8 : 14 15 16 17 19 1A 1B 1C   B6
C6B0 : 1E 1F 00 40 80 C0 A1 00   FB
C6B8 : 11 00 00 00 00 80 00 00   CE
C6C0 : 00 00 00 FF 00 FF 02 C8   5A
C6C8 : CC 00 02 90               83
Listing 22. Maschinenteile zur Hardcopy-Routine (MPS 801)
PROGRAMM : MPS802.CAD.OBJ C400 C81B
-----------------------------------
C400 : 20 79 00 C9 2C F0 03 4C   05
C408 : 08 AF 60 A2 0E 4C 3A A4   CA
C410 : 20 00 C4 20 9B B7 8E 45   A2
C418 : 03 20 00 C4 20 9B B7 8E   9F
C420 : 46 03 20 00 C4 20 9B B7   1B
C428 : 8E 3E 03 AD 45 03 C9 10   00
C430 : B0 D9 AD 46 03 C9 10 B0   21
C438 : D2 AD 3E 03 C9 03 B0 CB   E0
C440 : AD 45 03 0A 0A 0A 0A 6D   86
C448 : 46 03 AC 3E 03 C0 02 F0   23
C450 : 17 C0 00 F0 B6 A2 8C 8E   B5
C458 : 5E C4 A0 00 99 00 8C C8   9E
C460 : D0 FA E8 E0 90 D0 F0 60   18
C468 : A2 C0 8E 71 C4 A0 00 99   C1
C470 : 00 C0 C8 D0 FA E8 E0 C4   20
C478 : D0 F0 60 20 00 C4 20 9B   BA
C480 : B7 E0 03 B0 86 E0 02 F0   D8
C488 : 27 E0 01 F0 10 A9 1B 8D   54
C490 : 11 D0 A9 15 8D 18 D0 A9   47
C498 : 97 4C C5 C4 EA AD 11 D0   61
C4A0 : 29 80 09 3B 8D 11 D0 A9   AB
C4A8 : 3D 8D 18 D0 4C C5 C4 EA   A8
C4B0 : AD 11 D0 29 80 09 3B 8D   97
C4B8 : 11 D0 A9 0D 8D 18 D0 A9   6E
C4C0 : 3C 4C C5 C4 EA 8D 00 DD   03
C4C8 : A9 C8 8D 16 D0 60 A2 02   9A
C4D0 : 20 C6 FF 20 CF FF 20 CF   74
C4D8 : FF A9 00 85 FA AD 5F 03   FD
C4E0 : 85 FB A0 00 20 CF FF 91   2F
C4E8 : FA C8 D0 F8 E6 FB A5 FB   76
C4F0 : CD 61 03 D0 ED 4C CC FF   BD
C4F8 : 4C 0B C4 20 00 C4 20 9B   DD
C500 : B7 E0 03 B0 F3 E0 00 F0   26
C508 : EF 60 20 FB C4 E0 01 D0   A8
C510 : 0D A9 A0 8D 5F 03 A9 C0   02
C518 : 8D 61 03 4C CE C4 A9 E0   1C
C520 : 8D 5F 03 A9 00 8D 61 03   4B
C528 : 4C CE C4 A2 02 20 C6 FF   9D
C530 : 20 CF FF 20 CF FF 20 CF   59
C538 : FF A5 90 D0 3A 20 CF FF   2C
C540 : F0 35 A6 90 E0 00 D0 2F   36
C548 : 20 CF FF A6 90 E0 00 D0   D6
C550 : 26 85 FA 20 CF FF A6 90   B4
C558 : E0 00 D0 1B A6 FA 20 CD   2E
C560 : BD 20 CF FF A6 90 E0 00   94
C568 : D0 0D 20 D2 FF D0 F2 A9   C7
C570 : 0D 20 D2 FF 4C 36 C5 20   10
C578 : CC FF 60 85 5B A9 64 A2   E6
C580 : 04 A0 00 20 83 C6 A9 6A   C2
C588 : A2 04 A0 06 20 83 C6 A2   94
C590 : 6A 20 C9 FF A9 14 20 D2   DE
C598 : FF A2 64 20 C9 FF A9 8D   64
C5A0 : 20 D2 FF A9 69 A2 04 A0   5B
C5A8 : 05 20 83 C6 A5 5B 0A 90   F5
C5B0 : 03 4C 01 C7 A5 5B 29 07   FA
C5B8 : A2 02 20 8E C6 A9 14 85   4A
C5C0 : FB A5 5B 29 C0 F0 10 A5   A9
C5C8 : 5B 4A 4A 4A 29 07 A2 00   7A
C5D0 : 20 8E C6 A9 00 85 FB A9   8E
C5D8 : 00 8D 3D 03 20 A8 C6 20   F1
C5E0 : E1 C6 F0 29 A2 69 20 C9   0F
C5E8 : FF A2 00 BD 3E 03 20 D2   12
C5F0 : FF E8 E0 08 D0 F5 A9 0D   1A
C5F8 : 20 D2 FF A2 64 20 C9 FF   44
C600 : 20 EF C6 A9 FE 20 D2 FF   3B
C608 : A9 8D 20 D2 FF 18 A5 5E   EE
C610 : 69 08 85 5E 90 02 E6 5F   1E
C618 : 20 E1 FF F0 3F EE 3D 03   AD
C620 : AD 3D 03 C9 28 D0 B5 A5   91
C628 : 5B 29 C0 F0 18 A5 5E A6   DB
C630 : 5C 85 5C 86 5E A5 5F A6   15
C638 : 5D 85 5D 86 5F A5 FB 49   26
C640 : 28 85 FB D0 92 A2 64 20   54
C648 : C9 FF A9 0D 20 D2 FF EE   93
C650 : 3C 03 AD 3C 03 C9 19 F0   C5
C658 : 03 4C D7 C5 A9 69 20 C3   1E
C660 : FF A2 6A 20 C9 FF A9 24   DA
C668 : 20 D2 FF A2 64 20 C9 FF   B4
C670 : A9 8D 20 D2 FF A9 6A 20   79
C678 : C3 FF 20 CC FF A9 64 20   FC
C680 : C3 FF 60 20 BA FF A9 00   B1
C688 : 20 BD FF 4C C0 FF A0 06   AB
C690 : D9 96 1F F0 03 88 D0 F8   44
C698 : A9 00 95 5C 8D 3C 03 18   29
C6A0 : 69 20 88 10 FB 95 5D 60   E0
C6A8 : 78 A9 34 85 01 A2 00 8A   ED
C6B0 : 9D 3E 03 E8 E0 08 D0 F8   CE
C6B8 : A9 80 85 60 A0 00 B1 5E   9C
C6C0 : A2 00 0A 90 0A 48 BD 3E   4D
C6C8 : 03 05 60 9D 3E 03 68 E8   89
C6D0 : E0 08 D0 EE 46 60 C8 C0   D2
C6D8 : 08 D0 E3 A9 37 85 01 58   CB
C6E0 : 60 A2 00 8A DD 3E 03 D0   60
C6E8 : 05 E8 E0 08 D0 F6 60 18   11
C6F0 : A5 FB 6D 3D 03 AA F0 08   EF
C6F8 : A9 20 20 D2 FF CA D0 FA   A3
C700 : 60 A5 5B 29 07 A2 00 20   F5
C708 : 8E C6 85 5F A9 00 85 5E   B4
C710 : 85 FB 85 59 85 5A A9 C0   73
C718 : 95 FC 4A 4A E8 E0 04 D0   4E
C720 : F7 A9 00 8D 3D 03 20 A8   5B
C728 : C6 A5 5A F0 11 A2 00 BD   17
C730 : 3E 03 0A 0A 0A 0A 9D 3E   98
C738 : 03 E8 E0 08 D0 F1 20 DD   C1
C740 : C7 4C 51 C7 A2 00 BD 4A   30
C748 : 03 9D 46 03 E8 E0 04 D0   53
C750 : F5 20 08 C8 F0 2F A2 69   56
C758 : 20 C9 FF A2 00 BD 46 03   BE
C760 : 20 D2 FF BD 46 03 20 D2   43
C768 : FF E8 E0 04 D0 EF A9 0D   E1
C770 : 20 D2 FF A2 64 20 C9 FF   BC
C778 : 20 EF C6 A9 FE 20 D2 FF   B3
C780 : A9 8D 20 D2 FF 20 E1 FF   DB
C788 : D0 03 4C 5C C6 EE 3D 03   57
C790 : A5 59 49 08 85 59 D0 AC   F5
C798 : 18 A5 5E 69 08 85 5E 90   8F
C7A0 : 02 E6 5F AD 3D 03 C9 50   57
C7A8 : F0 03 4C 26 C7 A2 64 20   55
C7B0 : C9 FF A9 0D 20 D2 FF A5   69
C7B8 : 5A 49 19 85 5A A5 5E A6   47
C7C0 : 5C 85 5C 86 5E A5 5F A6   A5
C7C8 : 5D 85 5D 86 5F EE 3C 03   74
C7D0 : AD 3C 03 C9 32 F0 03 4C   E5
C7D8 : 21 C7 4C 5C C6 A9 00 AA   8A
C7E0 : A8 9D 46 03 E8 E0 08 D0   A0
C7E8 : F8 AA B9 3E 03 0A 90 0B   44
C7F0 : 48 18 B9 46 03 75 FC 99   7E
C7F8 : 46 03 68 E8 E0 04 D0 ED   44
C800 : A2 00 C8 C0 08 D0 E3 60   44
C808 : A2 00 8A DD 46 03 D0 05   D2
C810 : E8 E0 04 D0 F6 60 00 FF   F6
C818 : FF FF FF                  C1
Listing 23. Maschinenteile zur Hardcopy-Routine (MPS 802)
********************************************************
*                                                      *
*        Source - Listing : Directory - Routine        *
*                                                      *
********************************************************

 10  -.EQ CHROUT = $FFD2
 20  -.EQ CHKIN  = $FFC6
 30  -.EQ CHRIN  = $FFCF
 40  -.EQ CLRCHN = $FFCC
 50  -.EQ NUMOUT = $BDCD
 60  -.BA $C654
 70  -DIR       LDX #2      ; Eingabekanal
 80  -          JSR CHKIN   ; definieren
 90  -          JSR CHRIN   ; Startadresse LO-Byte und
100  -          JSR CHRIN   ; HI-Byte ueberlesen
110  -NXTFILE   JSR CHRIN   ; Linkadresse LO-Byte lesen
120  -          LDA $90     ; Fehler-Check
130  -          BNE END     ; bei Fehler => Ende
140  -          JSR CHRIN   ; Linkadresse HI-Byte lesen
150  -          BEQ END     ; Linkadresse Null => Ende
160  -          LDX $90
170  -          CPX #$00
180  -          BNE END
190  -          JSR CHRIN   ; Blocks LO-Byte holen
200  -          LDX $90
210  -          CPX #$00
220  -          BNE END
230  -          STA $FA     ; zwischenspeichern
240  -          JSR CHRIN   ; Blocks HI-Byte holen
250  -          LDX $90
260  -          CPX #$00
270  -          BNE END
280  -          LDX $FA     ; Blocks nach A/X
290  -          JSR NUMOUT  ; und ausgeben
300  -GIVOUT    JSR CHRIN   ; Programmnamen und Filetyp
310  -          LDX $90     ; Zeichen
320  -          CPX #$00    ; fuer
330  -          BNE END     ; Zeichen
340  -          JSR CHROUT  ; ausgeben
350  -          BNE GIVOUT  ; letztes Zeichen ?
360  -          LDA #$0D    ; ja => CR ausgeben
370  -          JSR CHROUT
380  -          JMP NXTFILE ; und naechstes File holen
390  -END       JSR CLRCHN  ; Eingabekanal ruecksetzen
400  -          RTS         ; und zurueck zu BASIC
Listing 24. Quelltext zur Ausgabe des Directories
 ********************************************************
 *                                                      *
 *        Source - Listing : Hardcopy - Routine         *
 *                                                      *
 ********************************************************

  10  -.EQ LINFLG   = $033D
  20  -.EQ XL       = $14
  30  -.EQ XH       = $15
  40  -.EQ SPALTE   = $0341
  50  -.EQ LIN1     = $0345
  60  -.EQ LIN2     = $0347
  70  -.EQ OFFSET   = $0349
  80  -.EQ MASKE    = $0351
  90  -.EQ BITNUM   = $0354
 100  -.EQ BYTE1    = $035E
 110  -.EQ BYTE2    = $035F
 120  -.EQ ROW1     = $0360
 130  -.EQ ROW2     = $0361
 140  -.EQ ROW      = $0365
 150  -.EQ BITLIN   = $0368
 160  -.EQ START    = $036F
 170  -.EQ GROESSE  = $0370
 180  -.EQ MODUS    = $0371
 190  -.EQ GETBYT   = $B79B
 200  -.EQ FACTOADR = $B7F7
 210  -.EQ FRMNUM   = $AD8A
 220  -.EQ CHKOUT   = $FFC9
 230  -.EQ CHROUT   = $FFD2
 240  -.EQ CHKIN    = $FFC6
 250  -.EQ CHRIN    = $FFCF
 260  -.EQ CLRCHN   = $FFCC
 270  -.BA $C51B

 ******************* Komma - Check **********************

 280  -CHKCOM    JSR $0079     ; letztes Zeichen holen
 290  -          CMP #$2C      ; Komma ?
 300  -          BEQ KOM       ; ja
 310  -          JMP $AF08     ; ' ?SYNTAX ERROR
 320  -KOM       RTS           ; Ruecksprung

 ***************** Illegal  Quantity ********************

 330  -ILLQUAN   LDX #14       ; Fehlernummer
 340  -          JMP $A43A     ; Ausgabe des Fehlers

 ********************* Hardcopy *************************

 350  -HARDCOPY  LDA #0        ; Variablen ruecksetzen :
 360  -          STA ROW1      ; Drucker-Hilfsbyte 1
 370  -          STA ROW2      ; Drucker-Hilfsbyte 2
 380  -          STA ROW       ; Druckerbyte
 390  -          STA LINFLG    ; Flag fuer letzte Zeile
 400  -          STA SPALTE    ; Spalte 0-39
 410  -          LDX #$04      ; Kanal fuer Ausgabe
 420  -          JSR CHKOUT    ; vorbereiten

 430  -          JSR $AEFD     ; Zeilenoffset (320*Zeile)
 440  -          JSR FRMNUM    ; aus BASIC-Text holen
 450  -          JSR FACTOADR  ; in Adressformat wandeln
 460  -          LDA XL        ; LO-Byte
 470  -          STA OFFSET    ; speichern
 480  -          LDA XH        ; HI-Byte
 490  -          STA OFFSET+1  ; speichern
 500  -          JSR CHKCOM    ; Modus (Druckdichte)
 510  -          JSR GETBYT    ; aus BASIC-Text lesen
 520  -          STX MODUS     ; und speichern
 530  -          JSR CHKCOM    ; Druckbeginn (1./2.Zeile)
 540  -          JSR GETBYT    ; lesen
 550  -          STX START     ; und abspeichern
 560  -          JSR CHKCOM    ; Groesse (1 oder 2 Bilder
 570  -          JSR GETBYT    ; nebeneinander ) lesen
 580  -          STX GROESSE   ; und speichern
 590  -          LDA OFFSET    ; Absolute Adresse in der
 600  -          STA LIN1      ; Bit-Map berechnen und
 610  -          LDA OFFSET+1  ; speichern:
 620  -          CLC           ; 1. Zeile
 630  -          ADC #$A0
 640  -          STA LIN1+1
 650  -          LDA LIN1      ; 2. Zeile (fuer doppelte
 660  -          CLC           ; Dichte)
 670  -          ADC #$40
 680  -          STA LIN2
 690  -          LDA LIN1+1
 700  -          ADC #$01
 710  -          STA LIN2+1
 720  -          LDA OFFSET    ; letzte Zeile ?
 730  -          CMP #<(7680)  ; Ueberpruefung notwendig,
 740  -          BNE NXTSP     ; da sonst bei doppelter
 750  -          LDA OFFSET+1  ; Dichte eine nicht vor-
 760  -          CMP #>(7680)  ; handene Zeile 26 mitge-
 770  -          BNE NXTSP     ; druckt wuerde !
 780  -          LDA #$01      ; letzte Zeile => Flag
 790  -          STA LINFLG    ; setzen
 800  -NXTSP     LDA #7        ; Bitposition im
 810  -          STA BITNUM    ; jeweiligen Byte
 820  -BITLOOP   LDA START     ; 'Bit-Zeile' in der je-
 830  -          STA BITLIN    ; weiligen 8x8-Gruppe
 840  -LINLOOP   SEI           ; Interrupt verhindern,
 850  -          LDA #$35      ; RAM selektieren
 860  -          STA 01
 870  -          LDA LIN1      ; Jeweilige Startadressen
 880  -          STA $FA       ; der momentanen
 890  -          LDA LIN1+1    ; 8x8-Gruppen setzen
 900  -          STA $FB
 910  -          LDA LIN2
 920  -          STA $FC
 930  -          LDA LIN2+1
 940  -          STA $FD
 950  -          LDY BITLIN    ; 'Bit-Zeile'
 960  -          LDA ($FA),Y   ; Byte aus der 8x8-Gruppe
 970  -          STA BYTE1     ; holen und speichern
 980  -          LDA ($FC),Y   ; Entsprechendes Byte aus
 990  -          STA BYTE2     ; der 2.Zeile (d. Dichte)
1000  -          LDA #$37      ; ROM selektieren,
1010  -          STA 01
1020  -          CLI           ; Interrupt wieder ein
1030  -          LDY BITNUM    ; Maske zum 'filtern' des
1040  -          LDA BASE,Y    ; Bytes holen
1050  -          STA MASKE
1060  -          LDA BYTE1
1070  -          AND MASKE     ; und Bit herausfiltern
1080  -          BEQ NULL      ; falls Bit gesetzt, ins
1090  -          LDA ROW1      ; senkrechte Drucker-
1100  -          SEC           ; Hilfsbyte einbauen
1110  -          JMP WEITER
1120  -NULL      LDA ROW1
1130  -          CLC
1140  -WEITER    ROL
1150  -          STA ROW1
1160  -          LDA BYTE2     ; die selbe 'Filterung'
1170  -          AND MASKE     ; mit dem Byte aus der
1180  -          BEQ NULL2     ; 2.Zeile wiederholen
1190  -          LDA ROW2
1200  -          SEC
1210  -          JMP WEITER2
1220  -NULL2     LDA ROW2
1230  -          CLC
1240  -WEITER2   ROL
1250  -          STA ROW2
1260  -          LDA MODUS     ; bei doppelter Dichte
1270  -          BEQ EINFACH   ; muss 'Bit-Zeile' mit
1280  -          INC BITLIN    ; Step 2 erhoeht werden
1290  -EINFACH   INC BITLIN    ; naechste 'Bit-Zeile',
1300  -          LDA BITLIN    ; bis das entsprechende
1310  -          CMP #$08      ; senkrechte Byte der
1320  -          BCC LINLOOP   ; 8x8-Gruppe komplett ab-
1330  -          LDA ROW1      ; getastet ist
1340  -          STA ROW       ; senkrechtes Drucker-Byte
1350  -          LDA MODUS     ; einfache Dichte ?
1360  -          BEQ OUTPUT    ; ja   => Byte ausgeben
1370  -          LDA LINFLG    ; letzte Zeile ?
1380  -          BEQ OKAY      ; nein => Bytes verbinden
1390  -          LDA #0        ; Byte aus der imaginaeren
1400  -          STA ROW2      ; Zeile 26 auf 0 setzen
1410  -OKAY      LDA ROW1      ; die beiden senkrechten
1420  -          CLC           ; Drucker-Bytes zu einem
1430  -          ASL           ; verschmelzen, um den
1440  -          ASL           ; Ausdruck in doppelter
1450  -          ASL           ; Dichte bei einem Zeilen-
1460  -          ASL           ; vorschub von einem
1470  -          CLC           ; halben Punkt zu
1480  -          ADC ROW2      ; ermoeglichen
1490  -          STA ROW
1500  -OUTPUT    LDA ROW       ; Drucker-Byte holen
1510  -          JSR CHROUT    ; und ausgeben
1520  -          LDA #0        ; Drucker-Bytes fuer den
1530  -          STA ROW       ; naechsten Durchlauf
1540  -          STA ROW1      ; loeschen
1550  -          STA ROW2
1560  -          DEC BITNUM    ; naechste 'Bit-Spalte' im
1570  -          LDA BITNUM    ; 8x8-Feld berechnen
1580  -          BMI CHKSP     ; 8x8-Gruppe ausgegeben ?
1590  -          JMP BITLOOP   ; nein => weitermachen
1600  -CHKSP     LDA LIN1      ; Startadressen der neuen
1610  -          CLC           ; 8x8-Gruppe berechnen
1620  -          ADC #$08      ; und speichern
1630  -          STA LIN1
1640  -          LDA LIN1+1
1650  -          ADC #$00
1660  -          STA LIN1+1
1670  -          LDA LIN2
1680  -          CLC
1690  -          ADC #$08
1700  -          STA LIN2
1710  -          LDA LIN2+1
1720  -          ADC #$00
1730  -          STA LIN2+1
1740  -          INC SPALTE    ; ist die Zeile komplett
1750  -          LDA SPALTE    ; ausgegeben ?
1760  -          CMP #40
1770  -          BCS CHKGR
1780  -          JMP NXTSP     ; nein => weitermachen
1790  -CHKGR     LDA GROESSE   ; einfache Groesse ?
1800  -          BEQ ENDE      ; ja   => fertig
1810  -          LDA #0        ; nein => entsprechende
1820  -          STA GROESSE   ; Zeile des 2.Bildschirms
1830  -          STA SPALTE    ; ausgeben
1840  -          STA ROW1
1850  -          STA ROW2
1860  -          STA ROW
1870  -          LDA OFFSET
1880  -          STA LIN1
1890  -          LDA OFFSET+1
1900  -          CLC
1910  -          ADC #$E0
1920  -          STA LIN1+1
1930  -          LDA LIN1
1940  -          CLC
1950  -          ADC #$40
1960  -          STA LIN2
1970  -          LDA LIN1+1
1980  -          ADC #$01
1990  -          STA LIN2+1
2000  -          JMP NXTSP
2010  -ENDE      JSR CLRCHN    ; Ausgabekanal ruecksetzen
2020  -          RTS           ; Ruecksprung zu BASIC
2030  -BASE      .BY1,2,4,8,16,32,64,128
                               ; Daten fuer die 'Filter'-
                               ; Masken
Listing 25. Quelltext zur »Hardcopy-Routine«
*********************************************************
*                                                       *
*           Source - Listing : Movie - Routine          *
*                                                       *
*********************************************************

  10  -.EQ GETBYT  =$B79B
  20  -.EQ ZYKLUS  =$0341
  30  -.EQ COLOR1  =$0345
  40  -.EQ COLOR2  =$0347
  50  -.EQ COLOR3  =$0349
  60  -.EQ MODUS   =$0351
  70  -.EQ GESCHW  =$0354
  80  -.EQ ADRESSE =$035F
  90  -.BA $C45C
 100  -CHKCOM    JSR $0079    ; letztes Zeichen holen
 110  -          CMP #$2C     ; Komma ?
 120  -          BEQ KOM      ; ja   => OK
 130  -          JMP $AF08    ; nein => ' ?SYNTAX ERROR
 140  -KOM       RTS          ; Ruecksprung
 150  -ILLQUAN   LDX #14      ; Fehlernummer
 160  -          JMP $A43A    ; und Fehler ausgeben

********************** Parameter holen ******************

 170  -MOVIE     JSR CHKCOM   ; auf Komma pruefen
 180  -          JSR GETBYT   ; Wert holen
 190  -          CPX #$02     ; Bereich pruefen
 200  -          BCS ILLQUAN  ; zu gross => ERROR
 210  -          STX ZYKLUS   ; Wert fuer spaeter mer
 220  -          JSR CHKCOM   ; das gleiche nocheinmal
 230  -          JSR GETBYT
 240  -          CPX #$02
 250  -          BCS ILLQUAN
 260  -          STX MODUS    ; und Parameter speichern
 270  -          JSR CHKCOM   ; nun werden die drei
 280  -          JSR GETBYT   ; Multicolor-Farben aus
 290  -          STX COLOR1   ; dem Basic-Text gelesen
 300  -          JSR CHKCOM   ; und gespeichert
 310  -          JSR GETBYT
 320  -          STX COLOR2   ; Farbe 2
 330  -          JSR CHKCOM
 340  -          JSR GETBYT
 350  -          STX COLOR3   ; Farbe 3
 360  -          JSR SET      ; und Farben setzen
 370  -          LDA #126     ; Geschwindigkeit auf An-
 380  -          STA GESCHW   ; fangswert (mittel) setzen
 390  -MOV       LDA #$18     ; HI-Byte der Adresse des
 400  -          STA ADRESSE  ; ersten Bildes
 410  -          SEI          ; Interrupt verhindern

*************** Film - Schleife vorwaerts ***************

 420  -MLOOP     LDA #$34     ; RAM selektieren
 430  -          STA $01
 440  -          JSR SHOW     ; Bild darstellen
 450  -          LDA ADRESSE  ; Adresse auf naechstes
 460  -JUMP      CLC          ; Bild setzen
 470  -          ADC #$08
 480  -          STA ADRESSE
 490  -          CMP #$C0     ; Adresse = $C000 ?
 500  -          BEQ JUMP     ; ja => ueberspringen, da
                              ; im Bereich $C000 - $C7FF
                              ; Farbspeicher und Movie-
                              ; Routine liegen !
 510  -          CMP #$E0     ; letztes Bild ?
 520  -          BEQ END      ; ja => Durchlauf beendet
 530  -          LDA #$37     ; ROM selektieren
 540  -          STA $01

******************* Joystick - Abfrage 1 ****************

 550  -          LDA #$10     ; Feuerknopf gedrueckt ?
 560  -          BIT 56320
 570  -          BEQ STOP     ; ja => zurueck zu BASIC
 580  -          LDA #$08     ; Joystick rechts ?
 590  -          BIT 56320    ; ja => Geschwindigkeit
 600  -          BEQ PLUS     ; des Films erhoehen
 610  -          LDA #$04     ; Joystick links ?
 620  -          BIT 56320    ; ja => Geschwindigkeit des
 630  -          BEQ MINUS    ; Films verringern

******************** Warte - Schleife 1 *****************

 640  -WAIT      LDY GESCHW   ; Warteschleife, der
 650  -WA1       LDX #0       ; Geschwindigkeit ent-
 660  -WA2       DEX          ; sprechend lang
 670  -          BNE WA2
 680  -          DEY
 690  -          BNE WA1
 700  -          JMP MLOOP    ; naechstes Bild darstellen
 710  -STOP      JMP RUECK    ; Ruecksprung zu BASIC
 720  -END       LDA ZYKLUS   ; Durchlauf zyklisch ?
 730  -          BNE REVMOV   ; nein => Film rueckwaerts
 740  -          LDA #$18     ; ja   => Adresse auf
 750  -          STA ADRESSE  ; erstes Bild setzen
 760  -          SEI          ; Interrupt verhindern
 770  -          JMP WAIT     ; und weiter wie oben

*************** Geschwindigkeitsaenderungen 1 ***********

 780  -PLUS      LDA GESCHW   ; Warteschleife ver-
 790  -          SEC          ; kuerzen = Erhoehung der
 800  -          SBC #$05     ; Geschwindigkeit
 810  -          BCC UNDERFLOW
 820  -          STA GESCHW
 830  -          JMP WAIT     ; und weiter wie oben
 840  -UNDERFLOW LDA #$01
 850  -          STA GESCHW
 860  -          JMP WAIT
 870  -MINUS     LDA GESCHW   ; Warteschleife ver-
 880  -          CLC          ; laengern = Verringerung
 890  -          ADC #$05     ; der Geschwindigkeit
 900  -          BCS OVERFLOW
 910  -          STA GESCHW
 920  -          JMP WAIT     ; und weiter wie oben
 930  -OVERFLOW  LDA #251
 940  -          STA GESCHW
 950  -          JMP WAIT
 960  -REVMOV    LDA #$D8     ; HI-Byte der Adresse des
 970  -          STA ADRESSE  ; letzten Bildes
 980  -          SEI          ; Interrupt verhindern

************** Film - Schleife rueckwaerts **************

 990  -RLOOP     LDA #$34     ; RAM selektieren
1000  -          STA $01
1010  -          JSR SHOW     ; Bild darstellen
1020  -          LDA ADRESSE  ; Der gesamte Ablauf der
1030  -JUMP2     SEC          ; Rueckwaerts-Schleife
1040  -          SBC #$08     ; ist voellig analog zu dem
1050  -          STA ADRESSE  ; der Vorwaerts-Schleife.
1060  -          CMP #$C0
1070  -          BEQ JUMP2
1080  -          CMP #$10
1090  -          BEQ END2
1100  -          LDA #$37
1110  -          STA $01

******************* Joystick - Abfrage 2 ****************

1120  -          LDA #$10
1130  -          BIT 56320
1140  -          BEQ RUECK
1150  -          LDA #$08
1160  -          BIT 56320
1170  -          BEQ PLUS2
1180  -          LDA #$04
1190  -          BIT 56320
1200  -          BEQ MINUS2

******************** Warte - Schleife 2 *****************

1210  -WAIT2     LDY GESCHW
1220  -WA3       LDX #0
1230  -WA4       DEX
1240  -          BNE WA4
1250  -          DEY
1260  -          BNE WA3
1270  -          JMP RLOOP
1280  -END2      JMP MOV

*************** Geschwindigkeitsaenderungen 2 ***********

1290  -PLUS2     LDA GESCHW
1300  -          SEC
1310  -          SBC #$05
1320  -          BCC UNDERFLW
1330  -          STA GESCHW
1340  -          JMP WAIT2
1350  -UNDERFLW  LDA #$01
1360  -          STA GESCHW
1370  -          JMP WAIT2
1380  -MINUS2    LDA GESCHW
1390  -          CLC
1400  -          ADC #$05
1410  -          BCS OVERFLW
1420  -          STA GESCHW
1430  -          JMP WAIT2
1440  -OVERFLW   LDA #251
1450  -          STA GESCHW
1460  -          JMP WAIT2

**************** Ruecksprung zu BASIC *******************

1470  -RUECK     LDA #$37
1480  -          STA $01
1490  -          CLI
1500  -          LDA #27
1510  -          STA 53265
1520  -          LDA #21
1530  -          STA 53272
1540  -          LDA #151
1550  -          STA 56576
1560  -          LDA #200
1570  -          STA 53270
1580  -          RTS

********* Bitmap und Farbspeicher initialisieren ********

1590  -SET       LDA #$E0     ; Adresse der Bitmap
1600  -          STA $FB
1610  -          LDA #$00
1620  -          STA $FA
1630  -LOP1      LDA #$0      ; Bitmap loeschen
1640  -          LDY #$0
1650  -LOP2      STA ($FA),Y
1660  -          INY
1670  -          BNE LOP2
1680  -          INC $FB
1690  -          LDA $FB
1700  -          BNE LOP1
1710  -          LDA COLOR1   ; Farb-Byte aus den beiden
1720  -          ASL          ; COLOR1/COLOR2 - Nibbles
1730  -          ASL          ; zusammensetzen
1740  -          ASL
1750  -          ASL
1760  -          ADC COLOR2
1770  -          LDY #$00
1780  -LOOP      STA $C000,Y  ; und Farbspeicher fuer
1790  -          STA $C100,Y  ; Farben 1 und 2 initiali-
1800  -          STA $C200,Y  ; sieren
1810  -          STA $C300,Y
1820  -          INY
1830  -          BNE LOOP
1840  -          LDA MODUS    ; HiRes-Modus ?
1850  -          BEQ RET      ; ja   => fertig
1860  -          LDA COLOR3   ; nein => COLOR3 setzen
1870  -          LDY #$00
1880  -LOOP2     STA $D800,Y  ; COLOR3-Farbspeicher
1890  -          STA $D900,Y  ; initialisieren
1900  -          STA $DA00,Y
1910  -          STA $DB00,Y
1920  -          INY
1930  -          BNE LOOP2
1940  -          LDA #216     ; Multicolor-Bit setzen
1950  -          STA 53270
1960  -RET       LDA #59      ; auf Graphik-Schirm
1970  -          STA 53265    ; umschalten
1980  -          LDA #13
1990  -          STA 53272
2000  -          LDA #60
2010  -          STA 56576
2020  -          RTS

********************** Bild anzeigen ********************

2030  -SHOW      LDA #$E7     ; Anfangsadresse des Movie-
2040  -          STA $FB      ; Windows ('Leinwand') in
2050  -          LDA #$D0     ; der Bitmap
2060  -          STA $FA
2070  -          LDA ADRESSE  ; Anfangsadresse des Bildes
2080  -          STA $FD      ; im Speicher
2090  -          LDA #$00
2100  -          STA $FC
2110  -SLOP1     LDY #$0      ; eine 8-Pixel-Zeile in die
2120  -SLOP2     LDA ($FC),Y  ; Bitmap kopieren
2130  -          STA ($FA),Y
2140  -          INY
2150  -          CPY #$A0
2160  -          BNE SLOP2
2170  -          LDA $FC      ; Adresse auf naechste
2180  -          CLC          ; Zeile des Bildes im
2190  -          ADC #$A0     ; Speicher setzen
2200  -          STA $FC
2210  -          LDA $FD
2220  -          ADC #0
2230  -          STA $FD
2240  -          LDA $FA      ; Adresse der naechsten
2250  -          CLC          ; Zeile in der Bitmap be-
2260  -          ADC #$40     ; rechnen
2270  -          STA $FA
2280  -          LDA $FB
2290  -          ADC #$01
2300  -          STA $FB
2310  -          CMP #$F6     ; letzte Zeile kopiert ?
2320  -          BNE SLOP1    ; nein => weitermachen
2330  -          RTS          ; ja   => Ruecksprung
2340  -.EN
Listing 26. Quelltext zur »Movie-Routine«
10 print"{clr}das programm 'giga-cad' und verschie-"
20 print"dene fertige beispiel-programme"
30 print"finden sie auf der zweiten diskette!"
40 print
50 print"vorderseite : system-diskette"
60 print"rueckseite  : beispiele"
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →