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

Index
Register
Login

Die Anzeige des Archivs erfolgt grafisch. Ändern

Kurs: GeoProgrammer (Teil 9)

Autor: Jürgen Heinisch

INPUT

Jedem, der schon einmal unter BASIC programmiert hat, ist der Befehl INPUT ein Begriff. Er dient zur Eingabe von Zahlen oder Texten in Variablen. GEOS ist da nicht so komfortabel. Für die Eingabe von Text steht uns die Dialogbox als recht einfache Möglichkeit zur Verfügung, siehe dazu im Kursteil 6 nach. Aber mit Zahlen sieht es ganz schlecht aus.
Zur Lösung dieses Problems habe ich mir eine eigene Routine ausgetüfftelt. Dabei wird die Zahl in Form eines Textes eingegeben. Dieser wird nun von der Umrechnungsroutine untersucht und ein Ergebnis als 2 Byte-Wert ermittelt.
Die verwendeten Routinen sind alle schon in den vorhergegangenen Kursteilen angewandt worden. Lediglich bei der Eingabe der Zahl wurde ein neuer Weg beschritten. Die aufgebaute Dialogbox enthält die Position zur Eingabe der Zahl in einen Textspeicher und ein Abbruch-Icon. Das erfordert natürlich ein entsprechende Abfrage und Verzweigung nach dem Aufbau der Dialogbox. Dazu wird zunächst ins X-Register der Wert für das Abbruchfeld (CANCEL) geladen. Diesen Wert vergleicht man mit der Adresse sysBDData. In dieser Adresse steht nach verlassen der Dialogbox ein Code für das verwendete Komando. Ist der Vergleich NULL, so wird das Programm zum Desktop beendet oder andernfalls mit der Zahlberechnung fortgesetzt.

 jsr DoDlgBox     ; Dialogbox aufbauen
 ldx #CANCEL      ; Register mit Wert für
                  ; Abbruch-Feld laden
 cpx sysDBData    ; Vergleichen mit
                  ; Mausklickstatus
 bne Weiter       ; Bei Return Taste
                  ; gehe zu Weiter
 jmp EnterDesktop ; Bei Abbruchklick
                  ; zum Desktop
 Weiter:

Zur Überprüfung der Zahlumrechnung wird die ermittelte Zahl mit PutDecimal ausgegeben.
Die hier verwendete Umrechnungsroutine ist bestimmt nicht die beste und sicherste. Wenn jemand ein einfacheres und universelles Verfahren entwickelt hat, soll er es uns bitte vorstellen.
Aus Platzgründen erfolgt hier nur der Abdruck der Umrechungsroutine. Das gesamte Listing ist 2 Seiten lang.

An dieser Stelle wird der GeoProgrammerKurs beendet, um auch für andere Kurse Platz zu machen. Von nun ab werden in unregelmäßigen Abständen in einer neuen Rubrik, GeoProgrammmer Tips, Tricks und weitere Hilfen vorgestellt.

Der gesamte GeoProgrammerKurs ist auf einer Diskette zusammengefaßt worden. Diese Disk, GUP Spezial 1, kann innerhalb der GeoThek bestellt werden. Auf der Disk finden sich die Texte zu allen Kursteilen, die Listings der Demoprogramme und die lauffähigen Programme selbst. Außerdem befindet sich ein kompletter allgemeiner Assemblerkurs für den C=64 auf der Diskette.

             ; Umrechnung der Textzahl in einen 2 Byte-Wert
 Weiter:
   LoadB   a2,48        ; Variable a2 mit Wert für "0" laden
   LoadW   a9,1         ; In Variable a9 Dezimalposition
   LoadB   a3,10        ; Variable a3 Faktor für Dezimalposition
   LoadW   AusgabeZahl,0; Ergebnisvariable mit NULL laden

   LoadB   a8L,4        ; Variable a8L = Größe des Textes - 1
   jmp     Schleife     ; Einsprung in die Berechnungsschleife

 Mal_10:                ; Dezimalposition mit 10 multiplizieren
   ldy     #$72         ; Register Y und X zeigen auf die
   ldx     #$7e         ; Faktoren (Variablen a6L und a9)
   jsr     BMult        ; Ergebnis im Zeiger von X

 Leerstelle:            ; Geprüfte Stelle war keine Zahl
   dec     a8L          ; Reduziere a8L um 1
   bcs     Ende         ; Wenn aSL <0 also 255 dann ENDE

 Schleife:              ; Ermittlung ob Zahl oder Text
   Idx     a8L          ; X Register mit der zu untersuchenden
                        ; Stelle laden
   lda     EingabeZahl,x; In Akku den Wert der zu
                        ; untersuchenden Stelle laden
   cmp     #48          ; Vergleiche mit Wert für "0"
   bmi     Leerstelle   ; Wenn kleiner dann zu LEERSTELLE
   cmp     #58          ; Vergleiche mit Wert für ":"
   bpl     Leerstelle   ; Wenn größer dann zu LEERSTELLE

   sec                  ; Übertragsbit setzen für Subtraktion
   sbc     a2           ; Von AkKu Wert für "0" abziehen
   sta     a6L          ; Ergebnis in a6L festhalten
   MoveW   a9,a5        ; Variable a9 nach a5 retten
   ldy     #$78         ; Register Y und X auf die Faktoren
   ldx     #$7e         ; zeigen lassen
   jsr     BMult        ; Ermittelten Wert mit Dezimalposition
                        ; Multiplizieren
   AddW    a9,AusgabeZahl; Dieses Ergebnis zu Ausgabezahl addieren
   MoveW   a5,a9        ; Variable a9 mit alten Wert versehen
   jmp     Mal_10       ; Dezimalposition nach links verschieben

   Ende:                ; Ende der Berechnungen

 

Jürgen Heinisch

 

 

 




Dieser Artikel ist Bestandteil von:

Ausgabe 10

! - - - - - M I C R O F I L M - - - - - ! | Editorial | Organisationsschema des GUC | Aufruf zum Clubtreffen | Aus den Regionen | GEOS in Thüringen / DDR | Drucker-Test | Druckerecke | Drucker - Anschluß | Bazar | Zusatz - Information zur GUP 10 | Kurs: GeoProgrammer (Teil 9) | Vorschlag zur Einheit - Praktikabler GUP Umbruch | Die Fabel vom schnellen Prozessor | Anfrage | Bilder in GEOS importieren - Handyscan 64 | LOGO - Wettbewerb | Neues zur GeoThek | GEOS lernt kochen | Das Letzte


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/953


Letzte Änderung am 01.11.2019