APPLICATIONSDIVERS ★ Teil 2 ★

Profi-RSX 2 (CPC Amstrad International)Applications Divers
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Wie bereits vor einem Monat angekündigt, folgt hier Teil 2 unserer Befehlserweiterung. Dieses ist auch gleichzeitig der zweite und letzte Teil der Graphik-Befehle. Die Befehle der heutigen Folge bewirken dabei kein Zeichnen von Figuren, sondern die Verwaltung der bekannten und von neuen Fenstern.

Wie Sie wahrscheinlich wissen, gibt es bei den Schneider CPC's 8 Text-Fenster, jedoch nur ein Graphik-Fenster. Warum wird hier der Graphik-Bereich benachteiligt? Es gibt durchaus Anwendungsfalle, wo mehrere Graphik-Fenster wünschenswert wären. Deshalb stellen wir Ihnen hier 6 zusätzliche Befehle zur Verfügung, mit denen Sie jetzt auch 8 Graphik-Fenster verwalten können.

Dabei unterscheiden diese sich in Ihrer Handhabung nicht von dem »Handling« des bisher einzigen Fensters. Der Locomotive BASIC-Befehl, der hier wieder im Mittelpunkt steht, ist, wie bereits in Teil 1 erwähnt, der Befehl ORIGIN. Zur Wiederholung: Hiermit können Sie die Grenzen des Graphik-Fensters festlegen und zusätzlich noch den Startpunkt des Graphik-Cursors definieren.

Da dieser Befehl bereits existiert und für unsere Anwendung genau passend ist, habe ich einen gleichlautenden Befehl innerhalb von Profi-RSX geschaffen, der sich nur durch einen zusätzlichen Parameter von dem Standard-Befehl unterscheidet. Dieser wird als erster dem Befehlswort nachgestellt und gibt die Fen-ster-Nummer an, für das die folgenden Parameter gelten sollen. Die Syntax ist: IORIGIN, Graphik-Fenster-Nr. (, X-, Y-Urspung) (, links, rechts, oben, unten) Sie können den Ursprung des Graphik-Cursors sowie die Lage und die Ausmaße für jedes Fenster getrennt festlegen. Dabei ist der Ursprung des Cursors relativ zur unteren linken Ecke des Fensters anzugeben, nicht zur linken unteren Ecke des Bildschirms. Für die Ecken des Fensters muß dagegen der Abstand zur linken unteren Ecke des Bildschirms angegeben werden.

Wie wendet man diese Befehle konkret an?

Am besten initalisieren Sie zu Anfang alle Fenster mit Hilfe von |RGW, womit Sie erreichen, daß alle Fenster auf die Ausmaße und Werte des Standard-Fensters gesetzt werden. Danach definieren Sie soviel Fenster wie Sie benötigen, mit den von Ihnen gewünschten Werten. Dabei steht die Fenster-Nr. 0 für das Standard-Fenster, die Werte 1-7 für die zusätzlich definierbaren Fenster. Werte > 7 sind nicht zulässig.

Um von einem zum anderen Fenster umzuschalten, benutzen Sieden Befehl |GWINDOW, G.-Fenster-Nr. Hiernach laufen ab sofort alle Ausgaben über diesen Kanal. Übrigens hat jedes Graphik-Fenster auch eine eigene Graphikstift-und Graphikpapierfarbe. Alles weitere erfahren Sie selbsverständlich wieder aus der Befehlsliste im Anschluß an diesen Beitrag.

Jetzt haben Sie zwar insgesamt 16 Fenster, aber »echte« Fenster, wie Sie Ihnen vielleicht von (meistens) 16 Bit-Rechnern wie Atari ST oder Schneider PC bekannt sind. Diese würden auch Ihrem CPC besser zu Gesicht stehen. Zumal der CPC von seiner Graphik-Auflösung genauso leistungsfähig wie ein IBM PC ist. »Echte« Fenster zeichnen sich dadurch aus, daß diese, wenn sie auf dem Bildschirm eingeblendet werden, den Hintergrund nicht zerstören, sondern ihn sichern (d.h. den Bildschirm oder einen Teil davon, in den internen Speicher kopieren). Das erfordert natürlich eine nicht unbedeutende Menge an freiem RAM, benötigt doch ein kompletter CPC-Bildschirm fast 16K Speicherplatz. Anm. für Spezialisten: Es sind beim CPC nicht 16K (entsprechend 16384 Bytes), wie fast überall irrtümlicherweise geschrieben wird, sondern »nur« genau 16000 Bytes (80 Bytes in 200 Zeilen). Die restlichen 384 Bytes werden beim CPC nicht verwendet — vorausgesetzt der Bildschirm wird nicht gescrollt, denn dann rücken die Bytes eventuell in den Blickpunkt.

Wir brauchen für ein zweites, vollständiges Bildschirmfenster also 16000 Bytes Speicherplatz. Deshalb gibt es gewisse Einschränkungen bei der Anwendung der Fenster-Technik auf dem CPC. Aus diesem Grunde haben wohl die Entwickler von Locomotive Software sich mit der eingeschränkten Fenster-Verwaltung (ohne dem Sichern des Bildschirms) zufrieden gegeben. Da wir das nicht wollen, denn gerade die Fenster-Technik gibt Ihren Programmen einen professionellen Touch, habe ich die Verwaltung voll in die bereits existierende Firmware eingefügt.

Gerade diese nahtlose Einbindung ist für die Programmerstellung von großem Vorteil. Sie können demnach 8 Fenster definieren, deren Ausmaße mit den »normalen« Text-Fenstern immer übereinstimmen. Auch die Anwendung ist denkbar einfach. Sie definieren zuerst mit Hilfe des BASIC-Befehls WINDOW Ihre Fenster. Danach erfragen Sie bei Profi RSX den benötigten Speicherplatz mit Hilfe von |WLAENGE, Fenster-Nr., Adresse Integer Variable.

In der angegebenen Variablen erhalten Sie dann umgehend die benötigte Speicherplatzgröße zurück. Wichtig ist nur, daß Sie vorher das Fenster bereits definiert haben (möglichst nicht auf das ganze Bildschirmformat). Dann senken Sie HIMEM um die Länge ab und übergeben danach der Profi RSX-Fenster-Verwaltung den Wert HIMEM +1 und die bereits errechnete Länge mit Hilfe des Befehls |W.SET.

Das ist schon alles. Jetzt können Sie das Fenster bereits auf den Bildschirm einblenden. Nehmen wir einmal an, Sie haben Fenster Nr. 1 bereits definiert. Dann müßten Sie öWINDOW, 1 eingeben und das Fenster wird auf dem Bildschirm sichtbar werden. Wahrscheinlich ist der Inhalt unsinnig (das ist der alte Speicherinhalt), Sie können es jedoch mit CLS # 1 löschen. Wollen Sie nun Ausgaben in das Fenster tätigen, so müssen Sie immer erst den Kanal # 1 an wählen, z.B. beim PRINT-Befehl (PRINT # 1 ,«Dies ist ein 'echtes' Fenster!«). Durch nochmalige Eingabe von öWINDOW, 1 verschwindet das Fenster aus dem Bildschirm und der Hintergrund wird wieder sichtbar. Der Befehl öWINDOW schaltet also wechselweise (FlipFlop) ein Fenster auf Sicht- oder Unsichtbar. Wichtig: Ausgaben auf Kanal 1 sind immer möglich, zerstören jedoch den Hintergrund, wenn das Fenster nicht sichtbar ist. Sie dürfen auf keinen Fall vergessen, das Fenster vorher einzublenden. Aber keine Angst, probieren geht über studieren!

Damit haben wir schon die zweite Befehlsgruppe abgehandelt, es fehlt nur noch ein wichtiger Hinweis, bevor wir an den dritten Komplex gehen.

Wichtig: Wenn Sie ein Fenster definiert haben, dürfen Sie nicht mehr den Mode wechseln, da sich dann die Größe des benötigten Speicherplatzes ändert und außerdem der Inhalt unleserlich wird. Ebenso ist es verboten, während ein Fenster auf dem Bildschirm ist, diesen zu scrollen.

Anm.: Natürlich wären »echte« Graphik-Fenster ebenfalls wünschenswert und ohne Probleme zu programmieren. Doch aus Speicherplatzgründen habe ich darauf verzichtet. Dennoch ein Tip für diejenigen, die dies trotzdem realisieren wollen. Sie brauchen dazu nur je ein Text- und ein Graphik-Fenster auf die gleiche Stelle des Bildschirms zu definieren. Dann erfolgen alle Graphik-Ausgaben in diesem Bereich und Sie können trotzdem mit Hilfe der Text-Fenster Befehle diesen Bereich ständig ein- und ausblenden.

Noch kurz zwischendurch möchte ich hier auf 3 Befehle hinweisen, speziell aber auf den Befehl können Sie 2 Bildschirme verwalten und diese auch als »unsichtbares« Ausgabegerät verwenden. Auch die hier vorliegende Lösung ist nicht nach dem Motto »Hauptsache einen SCREEN-Befehl, egal wie.«, wie in vielen Listings bereits abgedruckt, erstellt, sondern diese beiden Bildschirme werden komplett durch Profi RSX verwaltet. Dabei wird das unterschiedliche Scrolling der Schirme immer beachtet, ebenso wie die momentane RAM-Aufteilung. D.h., daß eine Umschaltung nur möglich ist, wenn der entsprechende Speicherbereich abgesichert ist. Das ist wichtig, da sonst eventuell sogar Ihr BASIC-Programm zerstört würde! Wenn diese Faktoren nicht mit überwacht werden müßten, täten es zwei BASIC-OUT-Befehle auch. Zusätzlich können Sie diese noch - das ist neu — »transparent übereinanderlegen«, um deren Inhalte zu vergleichen. Das Ergebnis entspricht dem Überdecken zweier Folien. Der letzte große Block dieser Ausgabe sind die Kopier-Befehle, die in Ihrer Vielfalt und Geschwindigkeit wahrscheinlich einmalig für die CPC's sind. Sehen Sie sich dazu zuerst das Listing 1 und die zugehörige Abbildung 1 an. Dort sehen Sie den kompletten Source-Code sowie den zugehörigen Programmablaufplan der gesamten Graphik-Kopier-befehle.

Dabei ist es auffällig, daß es nur eine Routine gibt, die für alle Befehle die Ausgabe übernimmt, egal ob es um das Vergrößern/Verkleinern, Austauschen oder nur um das einfache Kopieren von A nach B geht. Und das alles kombiniert mit oder ohne spiegeln und der gezielten Auswahl, bestimmte Punkte einer Farbe. Dabei ist die sehr hohe Geschwindigkeit, mit der alles ausgeführt wird, beachtlich, handelt es sich beim CPC schließlich nur um einen 8-Bit (Z80 A) Rechner mit einer effektiven Taktfrequenz von ca. 3,2 MHz.

Um eine hohe Geschwindigkeit zu erreichen, muß der Bildschirm direkt »bearbeitet« werden, außerdem können Fen-ster-Grenzen und dergleichen nicht berücksichtigt werden. Eine Ausnahme stellt der aktuelle Darstellungsmodus (FORCE, XOR, etc.) dar, der immer beachtet wird.

Da die Routine vollständig kommentiert ist, soll hier nicht nocheinmal der Ablauf geschildert werden, wir wollen hier nur ein paar »Tricks« näher betrachten, die auffällig sind.

Die Routine rechnet immer intern mit einem Vergrößerungs- und einem Verkleinerungsfaktor, wobei bei den COPY und den SWAP-Befehlen diese einfach auf 1 gesetzt sind.

Außerdem arbeitet die Routine intern mit 2 Flags, wodurch sie unterscheiden kann, ob innerhalb eines oder zwischen zwei Bildschirmen kopiert werden soll und ob die Bereiche nur kopiert oder auch auszutauschen sind.
Diese beiden Spezial-Fälle werden hier näher betrachtet. Zuerst die Lösung hinsichtlich dem Kopieren zwischen 2 Bildschirmen, also den ».. .SCR«-Befehlen. Bei diesen Befehlen war das Ziel, daß sie nicht langsamer als die Befehle für das Kopieren innerhalb eines Bildschirmes sein sollen.

Auf dem ersten Blick scheint dies unmöglich, da scheinbar ständig zwischen 2 Bildschirmen umgeschaltet werden muß, um den einen Punkt aus dem ersten »Screen« zu lesen und ihn danach in den nächsten zu schreiben. Das ist auch eine Möglichkeit, dieses zu programmieren, doch es geht auch anders.

Um es anders zu machen, darf intern jedoch nicht mehr mit Koordinaten gerechnet werden. Es müssen stattdessen direkte Speicheradressen verwendet werden. Diese Voraussetzung wird von der Routine bereits erfüllt, da hierdurch auch der gesamte Ablauf der Routine beschleunigt wird.

Anm.: Um einem Punkt auf dem Bildschirm darzustellen, geben Sie meistens die X-, Y-Koordinaten an, mit denen er eindeutig »bemaßt« ist. Es ist aber auch möglich, diesen mit Speicheradressen zu adressieren. Dabei fällt auf, daß pro Adresse 2, 4 oder 8 Punkte vorhanden sind, je nach Auflösung. Eine Speicheradresse reicht deshalb nicht zur zweifelsfreien Lage-Bestimmung aus, zusätzlich wird noch eine »Maske« benötigt, die die einzelnen Bits (die für die Darstellung eines Pixels zuständig sind) des Bytes der Speicherstelle festlegt.

In der Routine wird folgerichtig nur mit zwei Adressen (Ausgangs- und Zielfeld) und den zugehörigen Masken gerechnet. Dabei ist es völlig uninteressant, ob diese Speicherstellen in dem Bereich von &C000 — &FFFF (dem normalen Bildschirm) oder von &4000 — &7FFF (dem zweiten B.) liegen.

Damit ist das Problem fast gelöst; die Routine kümmert sich überhaupt nicht darum, wo sie kopiert. Es wäre durchaus möglich, die Routine zum Kopieren von Bits innerhalb des Speichers einzusetzen. Die Routine benötigt als Einsprungsbedingung nur die Anfangsadressen, die dann bereits im richtigen Bildschirm liegen müssen. Das wird durch die . .SCR«-Befehle erreicht, die den richtigen Bildschirm einschalten und nach Beendigung der Routine auch den vorherigen Zustand wieder herstellen. Innerhalb der Routine wird der Bildschirm dann einmal gewechselt, um die Adressen des Zielfeldes zu ermitteln.

Zur Erkennung dieser Notwendigkeit wird ein Flag benutzt. Dazu wird in Zeile 10890 das CARRY-Flag benutzt. Normalerweise steht dort ein XOR A-Be-fehl, das CARRY wird bei der Programmabarbeitung auf falsch gesetzt. Durch alle ».. .SCR«-Befehle wird in diese Speicherstellen ein SCF-Befehl eingesetzt. Dadurch wird das CARRY-Flag bei dem Durchlauf des Programmes durch den Prozessor auf wahr (= 1) gesetzt, und somit ist die Bedingung für den folgenden Sprung nicht mehr erfüllt. Wenn das CARRY auf 1 ist, wird die Routine m den folgenden Zeilen zur Bildschirmumschaltung ablaufen, ansonsten wird der Programmablauf durch einen Sprung hinter diesen Abschnitt normal fortgeführt. Ähnlich ist die Abfrage bezüglich des SWAP-Befehls in Zeile 11510 realisiert worden.

Allerdings können wir keinen XOR A-Befehl verwenden, da der Inhalt von A nach dieser Abfrage weiter wichtig ist. Deshalb ist ein SCF-Befehl vorangestellt, der das CARRY immer auf wahr setzt. Nachfolgend bewirkt der CCF-Be-fehl ein Komplementieren des CARRYs, es ist anschließend auf falsch. Dadurch wird der folgende Sprung ausgeführt. Das CARRY wird also erst auf ' 1 ' und mit dem nächsten Befehl sofort wieder auf '0' gebracht.

Ist die SWAP-Funktion aktiv, wird das CARRY nicht verändert. Folgerichtig bleibt es auf wahr und der Sprung wird nicht ausgeführt. Dieses wird durch das Einsetzen des Befehls NOP erreicht, der die Eigenschaft hat, daß er nichts bewirkt. Die Register und der Zustand der Flags bleiben aus diesem Grund unverändert.

Anm.: Er bewirkt genaugenommen doch etwas, und zwar das Erhöhen des Befehlszählers (Programm Counter, (PC)) um eins, damit der nächste Befehl abgearbeitet werden kann.

Es wäre als Alternative denkbar, daß der Sprung direkt beeinflußt wird. Dies würde bedeuten, daß anstelle der bedingten Sprung-Befehle (JR NC,...) ein absoluter (relativer) Sprung (JR ...) eingesetzt wird. Dann müßten beim anderen Fall zwei NOP-Befehle eingefügt werden. Dieses wäre in der Ausführung schneller, es hat aber mehrere schwerwiegende Nachteile. Zum einen würde die Routine, welche die Speicherstelle zu manipulieren hat, erheblich länger und das Programm würde insgesamt fehleranfälliger. In diesem Fall dürfte die Routine, die übersprungen werden soll, in ihrer Länge nicht verändert werden, ohne die andere Routine anzupassen. Solche Abhängigkeiten birgen immer die Gefahr, daß die notwendige Abänderung der zweiten Routine leicht vergessen oder übersehen werden kann, insbesondere wenn Unkundige das Programm ändern sollten. Solche 'riskanten' Programmiertechniken sollten nach Möglichkeit vermieden werden, um unnötige Fehlerquellen auszuschalten und das Programm auch für andere verständlich zu halten. Nach dem letzten Abschnitt für die Assembler-Freaks unter Ihnen, d.h. besser für diejenigen, die es werden wollen, (die richtigen 'Profis' haben diese Ergänzungen selbstverständlich nicht nötig), folgt jetzt eine kleine Zusammenfassung sowie die Konzeption der Befehle in Stichworten.

Die Eigenschaften der Befehle für die Graphik-Fenster dürften klar sein, ebe-so wie für die »echten Fenster-Befehle«. Da bleiben schließlich für unsere Beschreibung noch die Kopier-Befehle. Dabei können Sie für alle Befehle genau festlegen, was diese eigentlich kopieren sollen. Sie können zwischen 3 Arten wählen:

-a) alles

-b) nur das, was nicht in INK 0 gezeichnet ist -c) nur eine bestimmte Farbe Somit können Sie Ihrer Kreativität freien Lauf lassen. Besonders positiv ist meiner Meinung nach Variante b, da in 99 % aller Fälle der Hintergrund (das 'Papier') in INK 0 dargestellt ist. Die Ausschaltung des 'Papiers' von dem Kopiervorgang bringt den Effekt, daß Bilder 'transparent' übereinander gelegt werden können und diese, falls Sie es wünschen, sich sogar logisch miteinander verknüpfen lassen.

Letzteres können Sie durch Anwendung der Befehle für den Darstellungsmodus (FORCE, XOR, usw.; siehe Profi RSX — TEIL 1) erreichen. Ersteres läßt sich dagegen durch den LASSO-Befehl verwirklichen.

Zusätzlich können Sie Bilder auch SPIE-GELn, sowohl in X- als auch in Y-Rich-tung und in beide zusammen. Hierzu brauchen Sie nur mit Hilfe des SPIEGEL-Befehls die Schalter ('FLAGs') für die gewünschte Version zu aktivieren. Danach gelten diese Definitionen für alle Graphik-Kopier-Befehle. Und falls Sie mit dem Platz, den Ihnen ein Bildschirm bietet, nicht auskommen, so lassen Sie sich alle Befehle auch zwischen 2 Bildschirmen anstellen, indem Sie den Befehlsnamen um das Kürzel SCR verlängern.

Bitte beachten Sie jedoch bei der Anwendung aller Kopier-Befehle:

— daß die Fenster-Grenzen nicht beachtet werden;

— daß auch an den Bildschirmrändern nicht halt gemacht wird. Es wird dann an den entgegengesetzten Kanten weiterkopiert!

Das war's dazu, eventuell aufkommende Fragen werden hoffentlich durch die Befehlsliste wieder im Keim erstickt.

Da bleiben zum Schluß noch die Text-Kopierbefehle übrig, die bisher noch unerwähnt blieben. Hiermit können Sie Texte (natürlich auch Graphik!) kopieren, wobei diese Befehle an die Textdarstellung angepaßt worden sind. Es werden dort die Textkoordinaten (Spalten, Zeilen) verwendet. Da diese Befehle grundsätzlich Byte-orientiert arbeiten, sind diese erheblich schneller als die (Bit-or.) Graphik-Befehle. Sie haben allerdings den Nachteil, daß die Spiegel und Lasso-Funktionen nicht beachtet werden.

Nach Abschluß dieses Beitrages kann ich mich morgen an Teil 3 begeben, während vor Ihnen das Warten auf die DATA-BOX oder das (leider mühselige) Abtippen des BASIC-Loaders liegt. Nachdem Sie den BASIC-Loader im Speicher Ihres Rechners haben, starten Sie diesen, indem Sie den BASIC-Speicher durch

MEMORY 38575

herabsetzen. Anschließend sichern Sie den M-Code dann sofort auf Band (oder Scheibe). Zusätzlich müssen Sie den BASIC-Loader auf jeden Fall abspeichem, damit eventuell nicht bemerkte Tipp-Fehler korrigiert werden können. Den M-Code sollten Sie auf jeden Fall unter dem folgenden Namen speichern.

SAVE“G2-464“,b,&96B0,&9F92-&96B0

Besitzer eines 664 bzw. 6128 ändern die Zeichenfolge »464« in »664« bzw. Danach setzen Sie den Rechner komplett zurück (durch CTRL-SHIFT-ESC).

Falls Sie mit Profi RSX arbeiten möchten, so befolgen Sie beim Laden folgende Reihenfolge:

MEMORY 38575
LOAD “G1-464.BIN“
LOAD “G2-464.BIN“
CALL &9FA0
CALL &96B0

Wenn Sie sich an unsere Vorgaben halten, kann eigentlich nichts schiefgehen und Sie können schon Ihre ersten Programme mit Profi RSX schreiben (oder haben Sie schon letztes Mal losgelegt?!?). Wie wäre es z.B. mit einer Graphik-Verarbeitung mit 'echter' Fenster-Technik und zwei Bildschirmen?

Auf jeden Fall nicht vergessen: Fortsetzung folgt! — in einem Monat.

APPLICATIONSDIVERS ★ Befehlsliste der RSX-Befehlserweiterunsen »Profi-RSX« Versionen 1,1/1.2/1.3 ★

Teil 2: Fenster- und Kopier-Befehle
***GRAPHIK-FENSTER BEFEHLE***

Mit den folgenden Befehlen ist es möglich, 8 Graphik-Fenster zu verwalten. Fenster-Nummern: 0 = bisheriges Graphik-Fenster; l-7=zusätzliche Graphik-Fenster.

18. RGW (,Graphik-Window NR. (0-7))

  • Ohne Parameter: Setzt alle Fenster auf die Werte des momentan ausgewählten Fensters zurück (alle Eigenschaften werden zurückgesetzt).
  • Parameter angegeben: Nur dieses G.-Fensters wird zurückgesetzt.
  • Das Fenster wird nicht ausgewählt (eingeschaltet).

19. ORIGIN, G.W.-Nr. (, X-, Y-Origin) (,linke, rechte, obere, untere Ecke des Fensters)

  • Entspricht dem normalen BASIC-Be-fehl ORIGIN, mit dem Unterschied, daß die Fensternummer angegeben werden muß.
  • Dieses Fenster wird jedoch nicht eingeschaltet (wenn ein anderes momentan gültig ist).

20. GWINDOW, G.W.-Nr.

  • Wählt das mit der Nummer spezifizierte Fenster aus. Dieses Fenster ist ab sofort für alle Graphikausgaben maßgebend.

21. CLG (, G.W.-Nr.) (, Farbstift-Nr.)

  • Füllt das angegebene Fenster mit der momentan gültigen »Graphikpapierfarbe« aus.
  • Ohne Parameter: Füllt das momentan aktive Fenster aus (identisch mit dem BASIC-Befehl »CLG«),
  • Die Stift-Nr. kann nur zusammen mit der Fenster-Nr. angegeben werden.

22. GPEN (, G.W.-Nr.), INK-Nummer (0-15)

  • Setzt die Farbe für den »Graphikstift«.

23. GPAPER »wie Pos. 22«

  • Setzt die Farbe für das »Graphikpapier«.

***TEXT-FENSTER BEFEHLE***

Mit den folgenden Befehlen ist es möglich, »ECHTE« Fenster zu verwalten. Bitte beachten Sie bei der Anwendung dieser Befehle:

  • Bevor ein Fenster benutzt werden kann, muß ein hierfür entsprechender Speicherbereich reserviert werden (siehe »W.SET«)!
  • Die Fensterausmaße und -nummern entsprechen den Standardfenstern.

24. WLAENGE, Fenstemummer (0-7), Adresse Integer Variable

  • Dieser Befehl gibt den benötigten Speicherplatz in der Variablen zurück.
  • Die Berechnung erfolgt unter Berücksichtigung der Größe des Fensters und der momentanen Bildschirmauflösung.
  • Mit Hilfe des zurückgegebenen Wertes muß der BASIC-Speicher herabgesetzt werden (mit dem Befehl »MEMORY HIMEM-WERT-1« (WERT= ermittelte Größe)).
  • Jetzt muß PROFI-RSX die Adresse mit Hilfe des Befehls Nr. 26 mitgeteilt werden. Erst dann ist das Fenster ini-talisiert.

25. WINDOW, Fensternummer

  • Funktion: Tauscht den entsprechenden Bildschirmbereich des Fensters mit dem Inhalt des zugehörigen Speichers (beim erstmaligen Aufruf wird das Fenster eingeblendet, beim nächsten ausgeblendet).
  • Nach dem erstmaligen Aufruf sollte das Fenster mit dem BASIC-Befehl »CLS #X« gelöscht werden.
  • Das Fenster kann nur beschrieben werden, wenn es auf dem Bildschirm ist.

26. W.SET, Fenstemr., untere Speicherstelle

  • Weist dem Fenster einen Speicherbereich ab der angegebenen Speicherstelle aufwärts zu.

BITTE BEACHTEN: Bei einem Modewechsel ändert sich auch die benötigte Speicherplatzgröße.

Die folgenden Befehle erlauben 2 Bildschirme gleichzeitig im Speicher.

  • Der zweite Bildschirm befindet sich im Bereich von &4000 bis &7FFF. Deswegen muß dieser Bereich vor dem Verwenden der Befehle geschützt werden (mit »MEMORY &4000-1«), Ist das nicht der Fall, funktionieren die Befehle nicht.
  • Mit Hilfe der an diese Befehle folgenden Befehle ist auch ein kopieren zwischen diesen Bildschirmen möglich.

27. SCREEN, Bildschirmnummer (, Flag (1 oder 0) für Sicht- oder Unsichtbar)

  • Schaltet zwischen zwei Bildschirmen um.
  • Bildschirmnummer: 1 (>0) für den bisherigen Bildschirm, 0 für den neuen B.
  • Flag: Ist hier eine Zahl größer 0 angegeben, so wird der mit der davor angegebenen Zahl definierte Bildschirm auf dem Monitor angezeigt. Außerdem laufen jetzt alle Text- und Graphikausgaben über diesen Bildschirm. Wenn hier eine »0« angegeben ist, so wird dieser Bildschirm zwar für alle folgenden Bildschirmausgaben verwendet, auf dem Monitor ist aber weiterhin der bisher sichtbare Bildschirm zu sehen!

ACHTUNG: Ab sofort können Sie die Bildschirmausgaben nicht mehr verfolgen. Nützlich ist diese unsichtbare Ausgabe, wenn relativ aufwendige Ausgaben aufgebaut werden müssen, die aber erst nach Fertigstellung sichtbar werden sollen.

28. SWAP.ON (keine Parameter)

  • Stellt die zwei Bildschirme übereinander dar.
  • Funktion: Jede 25stel Sekunde wird abwechselnd ein Bildschirm auf dem Monitor dargestellt. Dadurch entsteht der Eindruck, daß die Bilder übereinander liegen. Nachteilig ist, daß es hierdurch zu einem Flimmern kommen kann. Der Vorteil liegt aber darin, daß Bilder verglichen werden können, ohne daß diese physikalisch (durch Speicherverschiebung) miteinander in Berührung kommen.

29. SWAP.OFF (keine Parameter)

  • Schaltet die Darstellung wieder aus.

***KOPIER BEFEHLE***

Teil 1: für Graphik-Bildschirm. Mit Hilfe dieser Befehle ist es möglich, innerhalb eines oder zwischen zwei Bildschirmen zu kopieren. Wahlweise können auch nur bestimmte Farben kopiert werden. Auch vergrößern und verkleinern ist möglich. Es sind spezielle Befehle für Text und Graphik vorhanden. In der Vielfalt, Komfort und in der Geschwindigkeit dürften diese Befehle einmalig sein. Sie dürften auch viele spezielle Graphikverarbeitungen übertreffen.

Bitte beachten Sie:

  • Alle Koordinaten müssen in Pixel angegeben werden und beziehen sich auf die linke untere Ecke des anzugebenen rechteckigen Ausschnittes.
  • Werden keine Ausgangskoordinaten angegeben, so wird die aktuelle Graphik-Cursor Position angenommen.

30. COPY (, X-, Y-Koordinate Ausgangsrechteck), Anzahl der Kopierpunkte in X-, Y-Richtung, X-, Y-Koordinate Zielrechteck.

  • Dieser Befehl bewirkt das Kopieren des Inhaltes des rechteckigen Ausgangsfeldes zum angegebenen Zielfeld.
  • Es wird sowohl die »SPIEGEL«-Funktion als auch die »LASSO«-Funktion berücksichtigt.

31. a) ZOOM, X-, Y-Faktor

  • FAKTOR steht für eine Zahl, die die Vergrößerung oder Verkleinerung in der jeweiligen Richtung definiert. Positive Werte bewirken eine Vergrößerung, negative Angaben ergeben eine Verkleinerung (z.B. Faktor 2 bewirkt eine Verdopplung, Faktor -2 eine Halbierung).
  • Wird der Befehl wie oben aufgeführt verwendet, so erfolgt keine Kopieraktion, es werden lediglich die Werte für eine event. spätere Aktion definiert, oderb) ZOOM (, X-, Y-Faktor), X-, Y-Koordinate Ausgangsfeld, Kopierpunkte in X-, Y-Richtung, X-, YKoordinate Zielfeld.
  • Hier wird das Ausgangsfeld unter Berücksichtigung der Faktoren ins Zielfeld kopiert, dabei können die Ausmaße des Zielfeldes größer oder kleiner werden.
  • Wird hier kein Faktor angegeben, so wird der vor diesem Befehl verwendete wieder verwendet.
  • ACHTUNG: Sowohl die »COPY« -als auch die »SWAP«-Befehle setzen die Faktoren auf 1!

32. SWAP »wie Pos. 30«

  • Hier wird nicht ein Bereich in den anderen kopiert, sondern der Inhalt der beiden Bereiche wird ausgetauscht!

33. SPIEGEL, X-Schalter EIN/AUS, Y-Schalter EIN(1)/AUS(0)

  • Wird hier ein Schalter »eingeschaltet«, so wird das Ausgangsfeld spiegelbildlich in das Zielfeld kopiert! Gleichzeitig ändert sich auch die Lage der anzugebenden Zielkoordinaten.
  • Folgende Varianten sind möglich: 1/0 - Spiegelung in X-Richtung; Koordinatenlage: rechts unten des Zielfeldes.
  • 1/1 — Spiegelung in X- und Y-Rich-tung; Koordinatenlage: rechts oben.
  • 0/1 — Spiegelung in Y-Richtung; Koordinatelage: links oben.
  • 0/0 - Keine Spiegelung! (Koordinatenlage normal, d.h. links unten des Zielfeldes)
  • Diese Angaben werden bei allen hier angegebenen Kopier-Befehlen berücksichtigt (auch bei »ZOOM« und »SWAP«)!

34. LASSO, Schalter EIN(1)/AUS(0) (,Farbe)

  • Hierdurch ist es möglich, nur die Punkte eines Bildes zu kopieren, die in einer bestimmten Farbe gezeichnet worden sind.
  • Wird keine Farbe angegeben, so werden ab jetzt alle Punkte, mit Ausnahme der in INK dargestellten, kopiert. Das bedeutet, daß der Hintergrund nicht mitkopiert wird. Dieses ermöglicht ein Übereinanderlegen verschiedener Bilder.
  • Wird eine Farbe (0-15) zusätzlich angegeben, so werden nur Punkte dieser INK kopiert! - Diese Funktion gilt ebenfalls für alle Kopier-Befehle.
  • Abschalten geht über das Angeben einer 0 im Befehl.

Kopieren zwischen 2 Bildschirmen. Mit Hilfe der nachfolgenden 3 Befehle ist es zusätzlich möglich, diese Kopierarten auch zwischen zwei Bildschirmen auszuführen, sofern der zweite Bildschirm eingerichtet worden ist (siehe »SCREEN«), Die Befehlsnamen erhalten noch das »Anhängsel« SCR, außerdem muß noch ein weiterer Parameter hinzugefügt werden. Dieser Parameter definiert, welcher
Bildschirm als Ausgangsbildschirm gelten soll. Eine 1 steht hierbei für den »normalen«, eine 0 für den zweiten Bildschirm. Die Spiegel- und Lassodefmitio-nen werden ebenfalls beachtet.

35. COPYSCR »wie bei 'COPY' + Nummer des Ausgangsbildschirmes als letzten Parameter«.

36. ZOOMSCR »wie bei 'ZOOM' + Nummer des Ausgangsbildschirmes«.

37. SWAPSCR »wie bei 'SWAP + Nummer des Ausgangsbildschirmes«.

Außerdem gibt es noch eine spezielle Version des COPYSCR-Befehls. Dieser kopiert den gesamten Bildschirm in einen anderen. Als Parameter muß hier nur die Nummer des Ausgangsbildschirmes angegeben werden. Die Syntax lautet also so: COPYSCR, Nummer des Ausgangsbildschirmes.

Teil 2: für Text-Bildschirm.

Diese Kopierbefehle sind speziell für die Text-Darstellungen gedacht. Sie arbeiten, anders als die vorher genannten Befehle, Byteorientiert und sind somit erheblich schneller. Als Koordinaten müssen die normalen Text-Koordinaten verwendet werden.

38. TCOPY, Zeile-, Spalte-Ausgangsfeld, Zeile-, Spalte-Zielfeld, X-, Y-Ausdehnung in Zeichen.

  • Hierdurch wird der Inhalt des Ausgangsfeldes, dessen Größe am Schluß definiert ist, in das Zielfeld übertragen.

39. TSWAP »wie bei Pos. 38«

  • Hier wird der Inhalt der beiden Felder ausgetauscht.

40. TSCOPY, Zeile-, Spalte-Aus-gangsfeld, Zeile-, Spalte-Zielfeld, X-, Y-Ausdehnung, Nummer des Ausgangsbildschirms.

  • Hier wird zwischen den 2 Bildschirmen kopiert (Nummern der Bildschirme siehe Befehl »SCREEN«)
  • Ansonsten entspricht die Funktion der des Befehls »TCOPY« (Nr. 38).

41. SSWAP »wie bei Pos. 40«

  • Hier werden die beiden Bereiche ausgetauscht.

ACHTUNG: Bei den Text-Kopierbefehlen werden die Spiegel- und Lasso-Funktionen nicht beachtet.

(K. Kremer/ME) , CPCAI

★ PUBLISHER: CPC Amstrad International
★ YEARE: 1987 , 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC AMSTRAD INTERNATIONAL 1987
★ AUTHOR: Klaus Kremer

Page précédente : Profi-RSX 1
★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
  » Profi-RSX  2-Graphik2-Befehle    (CPC  Amstrad  International)    GERMANDATE: 2022-08-04
DL: 11 fois
TYPE: ZIP
SIZE: 8Ko
NOTE: 40 Cyls
.HFE: NON

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » RSX XBOS (CPC Magazin)
» Applications » Rsx - Zoom (CPC Amstrad International)
» Applications » Ultra-Basic v1
» Applications » Disc-RSX
» Applications » RSX Check / Checksummer (CPC Amstrad International)
» Applications » Strings als Basic-Kommandos
Je participe au site:
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 232 millisecondes et consultée 49 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.