Logo: Geos Online Print Archiv
G.O.P.A. - Geos Online Print Archiv
28.03.2024 Archiv  #  Recherche  #  Links  #  Kontakt  #  Gästebuch  #  Impressum

Index
Register
Login

Die Anzeige des Archivs erfolgt grafisch. Ändern

Kurs: GeoProgrammer (Teil 4)

Autor: Jürgen Heinisch

Im Kursteil 3 haben wir uns mit der Ausgabe von Grafikelementen beschäftigt. Nun geht es an die Ausgabe von Texten.
Gehen wir sofort an die Durchsprache des Listings.

Zunächst wird dem GeoAssembler in dem 1. Block mitgeteilt, welche Tabellen er zur Verarbeitung der Quelldatei benötigt. Das steht innerhalb von >.if< und >.endif<. Benötigt werden beim 1. Durchlauf >Pass1< des GeoAssmbler die Dateien >geosSym< und >geosMac<.
An der Stelle >.psect< legt der GeoLinker die Startadresse fest.

Nun beginnt der eigentliche Quellcode des Programms. Über ProgStart wird dem Header die Startadresse übermittelt.
Als erstes werden wir den Bildschirm löschen. Dazu verwenden wir die aus dem Kursteil 3 bekannte Routine GraphicsString. Die Tabelle zum löschen des Bildschirms heißt ClearScreen. Darauf richten wir zunächst das Register r0. Anschließend ruft man die Routine GraphicsString auf.

Jetzt starten wir die Routine >iPutString< zur direkten Textausgabe. Es werden also Anweisungen erwartet, die direkt ausgeführt werden können. Als erstes wird der Curser auf die X/Y Position 10/10 gesetzt. Dann folgt der auszugebende Text. Der nächste Text soll an einer neuen Position erscheinen. Dazu wird über GOTOXY die neue Position eingestellt.

Nun werden wir die Textausgabe ein wenig variieren. OUTLINEON und BOLDON geben nun die Outline- und Fettschrift vor. In dieser Stilart erscheint nun der nächste Text. Das CR bewirkt ein Return. Der Curser wird eine gedachte Zeile entsprechend der Zeichenhöhe, tiefer an der linken Seite gestellt. PLAINTEXT schaltet alle Stilarten wieder aus.
Mit GOTOX wird eine neue X-Position definiert. Die Y-Position bleibt erhalten SHORTCUT gibt ein >Commodore Logo< aus. REVON erzeugt Textausgaben im reversen Druckstil. In diesem wird nun der nächste Text ausgegeben. NULL markiert das Ende der Textausgabe. Die Routine iPutString wird verlassen.

Das entstandene Bild soll noch eine Weile erhalten bleiben. Deshalb wird eine Warteschleife aufgerufen, die zunächst vorbereitet und dann durch >jsr Schleife< aufgerufen wird.
Ist die Schleife beendet so wird das Programm über >jmp EnterDeskTop< verlassen.

Hier nun der Quellcode:

; Demo Textausgabe aus 64er Sonderheft 28 "Alles über  Geos",
; übersetzt von Hypra-Ass in GeoAssembler

   .if        Pass1         ; dem Assembler mitteilen welche
   .include   geosSym       ; Dateien eingebunden werden
   .include   geosMac       ; müssen.
   .endif

   .psect                   ; Programmanfangsadresse

ProgStart:                  ; Programmstart

   LoadW      r0,#ClearScreen ; Zeiger auf Bildschirmlöschroutine
   jsr        GraphicsString  ; Bildschirm löschen -> ausführen

   jsr        iPutString    ; Textausgabe aufrufen

   .word      10            ; Cursor positionieren
   .byte      10
   .byte      "Hier bei 10/10 fängt es an..."
                            ; Text ausgeben
   .byte      GOTOXY        ; Textcurser neu positionieren
   .word      100
   .byte      100
   .byte      OUTLINEON     ; Textausgabe auf Outline
   .byte      BOLDON        ; und Fett schalten.
   .byte      "Der GUC GEOS-Kurs"
                            ; Text ausgeben
   .byte      CR            ; Return
   .byte      PLAINTEXT     ; Normaltext einschalten
   .byte      GOTOX         ; Textcurser neu positionieren
   .word      100
   .byte      SHORTCUT      ; Commodore Symbol ausgeben
   .byte      REVON         ; Reverse einschalten
   .byte      "Test von Jürgen  Heinisch."
                            ; Text ausgeben
   .byte      NULL          ; Ende der Tabelle

   lda        #30           ; Warteschleife vorbereiten
   ldx        #00
   ldy        #00

   jsr        Schleife      ; Warteschleife aufrufen

   jmp        EnterDeskTop  ; Zurück zum Desktop

Schleife:
   dey                      ; Warteschleife
   bne        Schleife
   dex
   bne        Schleife
   sec
   sbc        #01
   bne        Schleife
   rts                      ; Ende der Warteschleife

ClearScreen:                ; Bildschirm löschen
   .byte      NEWPATTERN,2  ; Füllmuster bestimmen
   .byte      MOVEPENTO     ; Punktcursor auf X/Y
   .word      0
   .byte      0
   .byte      RECTANGLETO   ; Rechteck zeichnen bis X/Y
   .word      319
   .byte      199
   .byte      NULL          ; Ende der Tabelle

Nun wollen wir noch einmal auf die Tabelle >ClearScreen< zu sprechen kommen. Mit NEWPATTERN wird eines der Füllmuster festgelegt. MOVEPENTO setzt den Pixelcursor auf die nachfolgende X/Y Koordinaten. RECTANGLETO zeichnet ein Rechteck mit dem Füllmuster zu der nachfolgenden Koordinate.

In unserem Fall ist die obere linke und die untere rechte Ecke gewählt. Das bedeutet, daß der gesamte Bildschirm mit dem Füllmuster belegt wird. Die NULL kennzeichnet wieder das Ende der Tabelle.

Der HEADER ist so eingestellt, daß die vorgestellten Programme unter GEOS 64 und GEOS 128, beliebiger Version, im 40 Zeichenmodus arbeiten. Will man unter GEOS 128 auch den 80 Zeichenmodus nutzen, so muß man das 40/80 Zeichen Flag von 0 auf 128 ($80) ändern. Siehe dazu Kursteil 2.
Das hat nun aber zur Folge, daß von dem 80 Zeichenbildschirm nur die linke Hälfte gelöscht wird. Um den ganzen Bildschirm zu löschen, muß man die Koordinate nach RECTANGLETO mit 619/199 angeben.

In der Schleife werden ausschließlich reine Maschinensprachebefehle verwendet. Deshalb nun eine Kurzbeschreibung der Schleife.
Der Akumulator, daß X- und Y-Register werden geladen mit den Werten 30,0 und 0. In der Schleife wird nun zunächst Y solange reduziert, bis wieder der Wert 0 erreicht wird. Dann wird X reduziert. Jetzt wieder Y, bis dieser wieder Null ist, u.s.w., bis auch X den Wert 0 erreicht. Dann wird der Akku um 1 reduziert. Das Ganze läuft solange, bis der Akku 30 mal reduziert wurde und auch 0 erreicht hat.
Mit den vorhandenen Kommandos von GeoProgrammer, die Ihr nun kennt, könnt Ihr schon tolle Demos machen. Wenn Ihr etwas schönes geschrieben habt, so sendet es bitte für die GeoThek ein.

 

- Jürgen Heinisch -

 

 

 




Dieser Artikel ist Bestandteil von:

Ausgabe 05

! - - - - - M I C R O F I L M - - - - - ! | Editorial | Leserzuschriften | Paint Drivers | Printer Edit und ConvTab | G E O C H A R T | Erfahrungsbericht Beckerbasic | Leseranfrage - GeoBox | Druckerhilfe | Fehlerteufel ! | Clubinterna : | Kurs: GeoProgrammer (Teil 4) | Buchtip | Der richtige Beitrag | GeoThek


GeoProgrammer

Kurs: GeoProgrammer (Teil 1) | Kurs: GeoProgrammer (Teil 2) | Kurs: GeoProgrammer (Teil 3) | Kurs: GeoProgrammer (Teil 4) | Kurs: GeoProgrammer (Teil 5) | Kurs: GeoProgrammer (Teil 6) | Kurs: GeoProgrammer (Teil 7) | Kurs: GeoProgrammer (Teil 8) | Kurs: GeoProgrammer (Teil 9)


Kurzlink hierhin: http://geos-printarchiv.de/856


Letzte Änderung am 01.11.2019