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
Rueckkehr in den "Ready-mode" (beim 3001/8001 durch standardmaessigen NMI-Vektor
in NMINV):
JMP READY
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
Aufruf der Routine, die bei jedem Einschaltvorgang durchlaufen wird (Speichertest,
Ausdruck: "COMMODORE BASIC..."):
JMP RESET
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
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
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
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
Der "normale" Interrupt-Vektor in CINV kann mit folgender Routine gesetzt
werden:
LDX #12
JSR SETVEC
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 $0ELetzte Änderung: 2019-01-04 10:06:41