CBMPET: Verschiedenes

Aus CBMPET.DE

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

10. Verschiedenes

        Dieses Kapitel beschreibt einige Programme, die sich nicht eindeutig einem der
        uebrigen Kapitel zuordnen lassen. Es sind dies : Abfrage der STOP-Taste, Sprung zum
        READY-Mode, RESET des Computers, Blockverschiebung, setzen des Standard-Interruptvektors.
        
        Die verwendeten ROM-Routinen und Speicherplaetze sind :
        
        Name      2001       3001      8001         Beschreibung
        -------------------------------------------------------------------
        BSOUT     $FFD2      $FFD2     $FFD2        Zeichen zum Schirm
        GRAPHIC    ----       ----     $E01B        Graphic-mode einschalten
        MOVBLK    $C2E1      $C2DF     $B357        Speicherblock verschieben
        PCR       $E84C      $E84C     $E84C        Peripheral Control Register
        PIEP       ----       ----     $E02A        Piepton erzeugen
        READY     $C38B      $C389     $B3FF        Rueckkehr in den READY-mode
        RESET     $FD38      $FCD1     $FD16        RESET-Routine durchlaufen
        SETVEC    $FD1B      $FC9B     $FCE0        Interrupt-Vektor setzen
        STOPEQ    $F32A      $F301     $F335        Z-Flag gesetzt bei STOP-Taste
        STOPR     $FFE1      $FFE1     $FFE1        READY-mode bei STOP-Taste
        STRMOD    $E349      $E33F     $E16A        setzt String-mode-Flag
        TEXT       ----       ----     $E018        Text-mode einschalten
        
        CINV      $0219      $90-91    $90-91       Interrupt-Vektor
        MOVPT1    $A7-A8     $55-56    $55-56       Blockzeiger #1
        MOVPT2    $A9-AA     $57-58    $57-58       Blockzeiger #2 
        MOVPT3    $AE-AF     $5C-5D    $5C-5D       Blockzeiger #3
        NMINV      -----     $94-95    $94-95       Vektor fuer NMI
        STRFLG    $EA        $CD       $CD          String-mode Flag
<pre>        
        
==10.1  READY-Mode==
<pre>
        Rueckkehr in den "Ready-mode" (beim 3001/8001 durch standardmaessigen NMI-Vektor
        in NMINV):
        
        JMP READY

10.2 STOP-Taste

         Es empfiehlt sich, in Assembler-Programme Abfragen auf die STOP-Taste einzubauen,
         da diese Abfrage waehrend der Ausfuehrung eines Maschinenprogramms standardmaessig
         nicht durchgefuehrt wird.
         
         a) Diese Routine testet die STOP-Taste. Ist sie gedrueckt, erfolgt ein Ruecksprung
            in den READY-mode.
            
                  JSR STOPR               
         
         b) Von der folgenden Routine wird das Ergebnis des Tests im Status-Register geliefert: 
            Z-Flag gesetzt: gedrueckt, Z-Flag geloescht: nicht gedrueckt.

                  JSR STOPEQ
                  BEQ STOP

10.3 Reset

        Aufruf der Routine, die bei jedem Einschaltvorgang durchlaufen wird (Speichertest, 
        Ausdruck: "COMMODORE BASIC..."):

        JMP RESET


10.4 String-mode

        Diese Routine setzt das StringÄmodeÄFlag STRFLG. Das laufende Zeichen wird im
        A-Register uebergeben. Das Flag wird fuer jeden Stringbegrenzer CHR$(34)
        "umgeschaltet":

                  LDA CHR
                  JSR STRMOD

10.5 Graphik /Text (Umschaltung Zeichengenerator)

        Diese Umschaltung (von BASIC her bekannt durch: POKE 59468,12 bzw. 14) wird
        hier analog durchgefuehrt:
	
	          LDA #$0C    ;Graphik
                  STA PCR

	          LDA #$8E    ;Text
                  STA PCR


10.6 Graphik/Text (Umschaltung Bildschirmcontroller)

        Zusaetzlich zur Umschaltung des Zeichengenerators (s.Kap. 18.5) bietet der
        8001-Computer noch eine Umschaltmoeglichkeit zwischen zwei Bildschirmformaten.
        Im Graphik-mode werden die Text-Zeilen (wie beim 2001/3001-Computer) nahtlos
        aneinander gesetzt. Im Text-mode werden zwischen je zwei Text-Zeilen zur
        besseren Lesbarkeit zwei Strahl-Zeilen eingeschoben. Die jeweilige Umschaltung 
        beinhaltet gleichzeitig die Umschaltung des Zeichengenerators.
        Durch entsprechende Kombination der beiden Umschalt-Moeglichkeiten koennen aber
        alle vier moeglichen Darstellungen erreicht werden.

                  JSR GRAPHIC ;Graphik
                                           
                  JSR TEXT    ;Text

10.7 Verschieben eines Speicherblocks

        Die Pointer MOVPT1, MOVPT2 und MOVPT3 muessen gesetzt werden.

        MOVPT1 = Endadresse+1 des Zielbereiches         ($55/56)
        MOVPT2 = Endadresse+1 des Ausgangsbereiches     ($57/58) 
        MOVPT3 = Anfangsadresse des Ausgangsbereiches   ($5C/5D)

                  JSR MOVBLK


10.8 Standard lnterrupt-Vektor setzen

        Der "normale" Interrupt-Vektor in CINV kann mit folgender Routine gesetzt
        werden:

                  LDX #12
                  JSR SETVEC


10.9 Pieptonerzeugung

        Ansprechen des beim 8001-Computer eingebauten Piepers ist auf zwei Arten
        moeglich:

        a) durch Ausgabe des Kontrollcodes "rvs g":
         
                  LDA #7        ;CONTROL-CODE g
                  JSR BSOIJT    ; AUSGEBEN

        b) direkter Ansprung der Piep-Routine:

                  JSR PIEP      ;PIEPTON ERZEUGEN

        Durch Einbau eines Lautsprechers (ueber Verstaerker an USER-PORT Pin M (CB2))
        kann auch beim 2001 und 3001-Computer eine Tonerzeugung erfolgen. Wird dabei
        eine Tonfolge wie die beim 8001-Computer gewuenscht (Folge von sieben Toenen),
        so kann dies mit der folgenden Routine geschehen:
	
         PIEP  LDY #xx       ;PIEPDAUER
               BEQ RETURN
               LDA #$10            ;SHIFT-REGISTER AUF
               STA $E84B           ; FREE RUNNING SETZEN
               LDA #$0F            ;SERIELLES AUSGABEBYTE
               STA $E84A           ; IN SHIFT-REGISTER
               LDX #$07            ;ANZAHL DER TOENE
         LOOP2 LDA TAB,X           ;TONTABELLE       
               STA $E848           ;VIA-TIMER SETZEN
	       LDA #xx             ;PIEPDAUER
         LOOP1 DEV
               BNE LOOP1
               SEC
               SBC #$01            ; A-REGISTER DEKREMENTIEREN
               BNE LOOP1
               DEX
               BNE LOOP2
               STX $E84A           ;SHIFTÄREGISTER 6
               STX$E848            ;FREE-RUNNING-MODE ABSCHALTEN
        RETURN RTS

               TAB .BY $0E $1E $3E $7E $3E $1E $0E
Persönliche Werkzeuge