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 $0E
Letzte Änderung: 2019-01-04 10:06:41