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

Index
Register
Login

Die Anzeige des Archivs erfolgt grafisch. Ändern

Kurs: GeoProgrammer (Teil 2)

Autor: Jürgen Heinisch

Teil 2: Dummy & Beeper

Willkommen zum 2. Teil des GeoProgrammer Kurses. Hoffentlich habt Ihr bei der Ausführung des 1. Teils auch Erfolg gehabt. Ich denke ja. Nun werden wir erstmals eigene Programme schreiben. Diese Programme, Dummy 3 und Beeper, sind dem Buch 'Alles über Geos 1.3' entnommen und wurden von mir für die Verwendung mit GeoProgrammer umgeschrieben.
Die folgenden Kursteile werden die Programme aus dem Sonderheft 28 von M&T behandeln und in dem Quellcode für GeoProgrammer vorgestellt. Da die einzelnen Routinen in diesem Sonderheft und in dem Buch 'Alles über Geos 1.3' beschrieben sind, gehe Ich zunächst nicht näher darauf ein. Sehr gut ist es dann natürlich, wenn Ihr eine der vorgestellten Lektüren habt. Besser sind noch beide. Zur Not leiht es Euch oder bildet eine Arbeitsgruppe.
Es geht mir zunächst darum, daß Ihr selbst lauffähige Programme abtippt, dabei spielt es auch keine Rolle, wie groß eure Assemblererkenntnisse sind. Alles wird während des Kurses wachsen. Enden wird der Kurs mit zwei von mir selbst erstellten Progammen. Als Fortsetzung soll dann eine Rubrik Tips und Tricks für die Arbeit mit dem GeoProgrammer eingeführt werden.
Es folgen also nun sehr ausführlich dokumentierte Listings, die Ihr mit GeoWrite eingeben müßt. Da alle Programme in diesem Kurs nur einfache sequentielle Programme sind und keine VLIR Programme vorkommen, werden wir immer den gleichen HEADER und LINKER verwenden. Diese müßt Ihr nur einmal (als einzelne Files) eingeben. Allerdings hat das erstellte Programm immer den Namen GeoPGMerKurs und muß deshalb nach Erstellung umbenannt werden, bevor das nächste Programm gelinkt wird.

Nun kommt der Quellcode für den Linker

              ; *** Allgemeiner Linker Quellcode ***
   .output GeoPGMerKurs
              ; Name des fertigen Programms
   .header HEADER.rel
              ; Name des Infoblocks (Header)
   .seq
              ; Programmtype
   .psect $0400
              ; Startadresse des Programms
   .ramsect $5000
              ; Startadresse der Variablen
   PGM.src.rel
              ; Name des Programms, Assembler Datei

Nun kommt der Quellcode für den Header:

              ; *** Header Allgemein ***
              ; * Vorspann *
   .if Pass1
   .noeqin
   .include   geosSym
   .eqin
   .endif
;*Header*
   .header    ; Start des Header
   .word 0    ; Die ersten zwei immer 0
   .byte 3    ; Iconbreite in Bytes
   .byte 21   ; Iconhöhe in Bits

 Icon: JH

   .byte      $80 ö USR
              ; Bit für Filetyp setzen
   .byte      APPLICATON
              ; Goes File Type
   .byte      SEQUENTIAL
              ; Geos File Struktur
   .word      ProgStart
              ; Startadresse
   .word      $3ff
              ; Endadresse. nur notwendig, bei Desk-Accessories
   .word      ProgStart
              ; Startadresse
   .byte "GEOS LERNEN V1.0" ,0,0,0,0
              ; Dauer Filename: 12 Zeichen.
              ; danach 4 Zeichen Versions Nummer
              ; danach 3 Nullen, danach 40/80 Zeichen Flag

   .byte "Jürgen Heinisch    ",0
              ; Neunzehn Zeichen Autorname

              ; Kontrollblock
   .block 160-117
              ; 43 Bytes überspringen
   .byte "Erstellt von"
   .byte "Jürgen Heinisch.",0
   .endh

Nun kommt der Quellcode für das Programm Dummy 3

              ; Programm Dummy 3 aus dem Buch alles über GEOS1.3
   .if   Paas1
              ; Vorspann zum einbinden der vordefinierten
              ; Symboltabelle und Macro´s
   .include   geosSym
   .include   geosMac
   .endif
   .psect

   ProgStart:
   LoadW      r0,#Parameter
              ; Zeiger auf DialogBoxDaten
   jsr        DoDlgBox
              ; Aufbau der Dialogbox
   jmp        EnterDeskTop
              ; Programm beenden
   Parameter  ; = Label
   .byte   $82   ; Werte für die Dialogbox
   .byte   $0b
   .byte   7
   .byte   10
   .word   Text
   .byte   $01
   .byte   10
   .byte   20
   .byte   0
   Text:    .byte  24,14
   .byte   "Das ist der Text."
   .byte   0

Nun kommt der Quellcode für das Programm Beeper

              ;Beispiel BEEPER aus Alles über GEOS 1.3

   .if        Pass1
   .include   geosSym
   .include   geosMac
   .endif
   .psect

   ProgStart:
   sei        ; Interrupt verbieten
   lda   #$37 ; I/O ROM einschalten
   sta        $01
   lda        #$0f
   sta        $d418   ; Tonroutine aus MSE- 64er
   lda        #$00
   sta        $d405
   lda        #$f7
   sta        $d406
   lda        #$11
   sta        $d404
   lda        #$32
   sta        $d401
   lda        #$00
   sta        $d400
   ldy        #$80    ; Schleife für Tondauer
   loop1:     ldx     #$ff
   loop2:     dex
              bne     loop2
              dey
              bne     loop1
   lda        #$10
   sta        $d404
   lda        #$30    ; I/O ROM ausschalten
   sta        $01
   cli                ; interrupt zulassen
   jmp        EnterDeskTop
                      ; Programm beenden
   ProgEnd:           ; Label für Endadresse
                      ; s. Symboltabelle

Eingabehinweise:
Der Quellcode kann sowohl mit GeoWrite 1.3 als auch mit GeoWrite 2.1 eingegeben werden. Die verwendete Schrift spielt keine Rolle. Normalerweise verwende Ich immer BSW. Nur für diesen Kurs habe Ich den Standartzeichensatz California 10 verwendet. Ihr müßt Euch also nicht an diese Vorgabe halten. Der Text wurde zur besseren Lesbarkeit weiterhin mit Hilfe des Tabulators übersichtlicher dargestellt. Es ist günstig, wenn Ihr Euch gleich an eine solche Form gewöhnt. Dies erleichtert später das Fehlersuchen. Nach einem Semikolon folgt ein Kommentartext. Dieser braucht nicht abgetippt zu werden. Er hat keine Funktion für den Programmablauf, sondern dient nur der Erklärung.

Verwendete Maschinesprachebefehle:

   lda        #$37          ;lädt den Wert 37 in den Akkumulator
   sta        $d418         ;speichert den Inhalt des Akkumulators
                            ;in die Adresse $d418
   jsr        DoDlgBox      ;Springt zu der Routine DoDlgBox
                            ;und kehrt zurück
   jmp        EnterDeskTop  ;Ruft die Routine EnterDeskTop auf
   sei                      ;Unterbricht den Interrupt
   cli                      ;Startet den Interrupt
   dex,dey                  ;reduziert den Wert im X/Y-Register um 1
   bne                      ;Prüft Ergebnis auf Null

 

-JH-

 

 

 




Dieser Artikel ist Bestandteil von:

Ausgabe 03

! - - - - - M I C R O F I L M - - - - - ! | Editorial | GEOS 2.0 - die Kehrseite ?, GEOS 2.0 - Meinung und Tips | Probleme : | Buchbesprechung | Kurs: GeoProgrammer (Teil 2) | Software - Test: International Fontpack | Software - Test: DESKPACK | Mein erster Artikel für die GUP | GEOS Public Domain Software in der GeoThek: | Satzung des Geos User Club ( GUC ) | GEOS User Club - Vorstellung


GeoProgrammer

Kurs: GeoProgrammer (Teil 1) | Kurs: GeoProgrammer (Teil 2)



letzte Änderung am 01.01.1970