C 64
Grafik

Screen Change

Ärgern Sie sich beim Erstellen umfangreicher Programme auch manchmal darüber, daß Sie nicht mehr genau wissen, wie ein bestimmter Programmteil aussieht? Dann werden Sie neu listen und der zuletzt bearbeitete Programmteil ist verschwunden. Die entsprechende Stelle muß wieder gesucht werden. Bis dahin hat man die zuerst gesuchte Stelle vielleicht schon wieder vergessen.

Die Routine »Screen Change« erweitert den Basicbefehlssatz dahingehend, daß der aktuelle Bildschirminhalt im RAM zwischengespeichert und bei Bedarf wieder zurückgeholt werden kann. So können bis zu vier Seiten abgelegt werden. Man hat also die Möglichkeit Notizen, oder andere Informationen, wie beispielsweise Listings oder Low-Resolution-Grafik, zu konservieren. Gleichermaßen sind Sie in der Lage, im Programmablauf eine Text- oder Grafikseite darzustellen, während eine weitere unsichtbar aufgebaut wird.

Nachdem der Basic-Lader gestartet wurde, ist das Programm automatisch initialisiert (SYS 49152). Durch gleichzeitiges Drücken der Tasten »CTRL« und »COMMODORE C« und einer f-Taste werden nun Video-RAM und entsprechender Seitenspeicher vertauscht. Normalerweise wird anschließend lediglich »Müll« auf dem Bildschirm zu sehen sein, da die betreffende Seite noch nicht beschrieben war. Drücken Sie nun aber die gleiche Kombination, oder einfach nur die Tasten »CTRL- und f-Taste« dann erscheint sofort der ursprüngliche Inhalt. Haben Sie die erste Kombination eingegeben wurden die Speicher wieder vertauscht, das heißt der Müll wurde zurückgeschrieben. Hingegen bleibt bei der zweiten Kombination der Seitenspeicher mit der gerade eingelesenen Information gefüllt. Dies läßt sich leicht überprüfen, indem der Bildschirm gelöscht wird, um daraufhin die zweite Kombination noch einmal einzugeben. Es zeigt sich sofort, daß der Inhalt unverändert geblieben ist. Dies istsolange der Fall bis die betreffende Seite mit Tastenkombination 1 »CTRL + C« eine andere Bildschirmseite aufnimmt. Das oben gesagte gilt für alle vier Funktionstasten.

Natürlich versagt diese Methode, wenn die gewünschte Funktion vom Basicprogramm her aufgerufen werden soll. Dazu wird der neue Befehl »SEITEx,m« eingeführt. Der Index x gibt dabei die Seitennummer und m den Modus an. Die Seitennummer darf dabei zwischen 0 und 3 liegen.m kann T oder H sein.
T bedeutet: Seiten tauschen; entsprechend Tastenkombination 1
H bedeutet: Seite holen; entsprechend Tastenkombination 2

Damit hat man die Möglichkeit Zwischenergebnisse abzulegen, eine Bedienungsanleitung einzublenden, um dann wieder in die normale Textseite zurückzukehren, Bildschirmmasken einzublenden und vieles mehr. Der interessierte Anwender wird sicher eine Fülle weiterer Einsatzmöglichkeiten entdecken. Doch nun einige Worte zum Programm selbst. Natürlich ist es auch möglich die Seiten über das Befehlswort im Basicdirektmodus aufzurufen. Dies hat jedoch den Nachteil, daß der Befehlstext sowie die READY-Meldung mit übertragen werden. Um dies zu umgehen wird die Tastaturabfrage über eine neue Routine geleitet, die die f-Tasten decodiert.

Der Befehl »SEITE« wird erkannt indem die Interpreterschleife meine Routine durchläuft. Dies kann im einzelnen dem Assemblerlisting entnommen werden.

Interessant ist in diesem Zusammenhang, daß die zusätzlich benötigten 4 KByte Video-RAM den freien Basicspeicherbereich nicht einschränken, da sie im normalerweise nicht nutzbaren Bereich hinter dem Interpreter liegen.

Zusätzlich habe ich eine Routine entwickelt, die über eine Befehlserweiterung das Laden und Speichern der Seiten auf Diskette zuläßt.

Über die normale Anwendung hinaus mögen folgende Anmerkungen von Nutzen sein:

lm CTRL-Modus wird in die rechte obere Bildecke die gewählte Seitennummer eingeblendet. Sollte dies als störend empfunden werden, so kann durch Ändern der letzten Zahl der letzten DATA-Zeile in eine beliebige andere die Einblendung ausgeschaltet werden.

Das Zurückschreiben der »32« führt wieder zur Standardausgabe. Über die Adresse 49313 (POKE 49313,F) läßt sich die Zeichenfarbe F der einzublendenden Seiten ändern. Gekoppelt mit dem Befehl SEITE ließen sich die verschiedenen Seiten in jeweils typischen Farben darstellen. Soll von vornherein eine bestimmte Zeichenfarbe eingestellt werden, so ist die »14« in der DATA-Zeile 79 dahingehend zu ändern.

Durch Anpassung der Zieladressen-Tabelle lassen sich die Seiten in jeden möglichen Speicherbereich legen. Dabei muß lediglich beachtet werden, ob eventuell das Basic-RAM oder ein darin liegendes Programm geschützt werden muß! Auf diese Weise lassen sich natürlich auch weit mehr Seiten anlegen.

Soll nun im Rahmen eines Basicprogramms eine Seite beschrieben werden, so kann dies wie gewohnt über POKEs erfolgen. Zu berücksichtigen sind lediglich die Startadressen der vier Seitenspeicher. Will man normalerweise den Bildschirm über POKE ansprechen, dann geht man von Adresse 1024 aus. Diese ersetzt man nun gegen die unten angegebenen und die gewählte Seite läßt sich unsichtbar beschreiben um bei Bedarf eingeblendet zu werden. Das Farb-RAM muß hier nicht neu beschrieben werden. Im folgenden nun die benötigten Adressen:
Seite 0: 40960 bis 41959
Seite 1 : 41984 bis 42983
Seite 2 : 43008 bis 44007
Seite 3 : 44032 bis 45031

(Harald Soyka/rg)
10 s=0:i=0
20 fori=49152to49443
30 reada:s=s+a
40 rem     pokei,a
50 nexti
60 ifs<>35160thenprint"daten sind falsch eingegeben!"
70 sys49152
71 data169,21,162,192,141,143,2,142,144,2,169,181,162,192,141,8,3,142,9
72 data3,96,162,3,228,203,240,8,232,224,7,208,247,76,72,235,228,197,240
73 data249,134,197,173,141,2,201,4,240,7,201,6,240,6,76,72,235,32,174,192
74 data32,64,192,76,66,235,120,189,22,193,72,133,254,169,4,133,252,169,0
75 data133,251,133,253,72,198,1,162,4,160,0,177,253,112,6,72,177,251,145
76 data253,104,145,251,136,208,241,230,252,230,254,202,208,234,230,1,184
77 data104,170,172,35,193,192,32,240,4,104,76,152,192,189,29,193,41,191
78 data73,128,153,0,4,200,232,224,7,208,240,104,74,74,41,3,9,176,153,0,4
79 data169,216,133,254,162,4,160,0,169,14,145,253,136,208,251,230,254,202
80 data208,246,88,96,8,104,9,64,72,40,96,32,115,0,8,201,83,208,8,160,1,177
81 data122,201,69,240,7,40,32,121,0,76,231,167,32,115,0,162,3,32,115,0,221
82 data29,193,208,40,232,224,6,208,243,32,115,0,201,48,48,28,201,52,16,24
83 data41,15,24,105,3,170,32,115,0,201,44,208,11,32,115,0,201,72,240,7,201
84 data84,240,6,76,8,175,32,174,192,238,35,193,32,64,192,206,35,193,32,115
85 data0,76,174,167,0,0,0,160,164,168,172,62,83,69,73,84,69,32
Listing Basic-Lader von »Screen Change«
90 OPEN4,4
180 SYS9*4096
110 *= $C000
120 .OPT P,OO
130 STO1     = $FB
140 STO2     = $FD
150 LSTX     = $C5
160 SFDX     = $CB
170 R6510    = $01
180 SHFLAG   = $028D
190 RETURN1  = $EB48
200 RETURN2  = $EB42
210 RETURN3  = $A7E7
220 VECTOR1  = $028F
230 VECTOR2  = $0308
240 CHRGET   = $0073
250 CHRGOT   = $0079
260 SYNTAX   = $AF08
278 ;
288 ; ***********   HARALD SOYKA   **********
298 ; *********** HATTINGERSTR.685 **********
388 ; ***********   463 BOCHUM 5   **********
385 ; *********** TEL. 8234/411913 **********
310 ;
328 ; DIESES PROGRAMM TAUSCHT DEN BILDSCHIRMSPEICHER
338 ; MIT DEM BEREICH $A000-$B000. SOMIT KOENNEN BILD-
348 ; SCHIRMINHALTE ZWISCHENGESPEICHERT WERDEN.
350 ; UEBER DIE FUNKTIONSTASTEN+(CTRL) KANN LAUFEND
360 ; ZWISCHEN VIER BILDSCHIRMSEITEN GEWECHSELT WERDEN.
378 ;
380 ;
398 ; ********** PRG INITIALISIEREN *********
400 LDA #<START
410 LDX #>START       ;TASTATURABFRAGE
420 STA VECTOR1       ;UEBER EIGENE
430 STX VECTOR1+1     ;ROUTINE LEITEN
440 ;
450 LDA #<INTER
460 LDX #>INTER       ;INTERPRETER
470 STA VECTOR2       ;UEBER EIGENE
480 STX VECTOR2+1     ;ROUTINE LEITEN
490 RTS
500 ;
510 ; *** AUF GEDRUECKTE F-TASTEN PRUEFEN ***
520 START LDX #$83
530 S0 CPX SFDX
548 BEO FOUND
558 INX
560 CPX #$07
578 BNE S0
580 BACK JMP RETURN1
590 ;
608 FOUND CPX LSTX
610 BEQ BACK
620 STX LSTX
630 LDA SHFLAG        ;CONTROL TASTE
640 CMP #$04          ;GEDRUECKT
650 BEQ M1
660 CMP #$06
670 BEQ M2
680 JMP RETURN1
690 M1 JSR VFL           ;V-FLAG SETZEN
700 M2 JSR CHAN          ;CHANGE SRCEEN
710 JMP RETURN2
720 ;
730 ; *** ZEIGER FUER VERSCHIEBEROUTINE SETZEN ***
740 ;
750 CHAN SEI
760 ;
770 LDA SEITE,X       ;NUMMER DER TASTE
780 PHA
790 STA STO2+1        ;IN X
800 LDA #04
810 STA STO1+1
820 LDA #$00
830 STA STO1
840 STA STO2
850 PHA
860 ;
870 ;*********** RAM AUSTAUSCHEN ***********
880 RAM DEC R6510        ;$A000 RAM FREIGEBEN
890 LDX #4           ;4 BLOECKE
900 LDY #0
910 S2 LDA (STO2),Y     ;VON $AXXX
920 BVS M3
930 PHA
940 LDA (STO1),Y     ;VON $0400
950 STA (STO2),Y     ;NACH $AXXX
960 PLA
970 M3 STA (STO1),Y     ;NACH $0400
980 DEY
990 BNE S2
1000 ;
1010 BLOCK INC STO1+1       ;ZEIGER
1020 INC STO2+1       ;HOCHZAEHLEN
1030 DEX
104© BNE S2
1050 INC $01
1060 CLV
1070 ;
1080 ; ******** SEITENNUMMER EINTRAGEN *******
1090 PLA
1100 TAX
1110 LDY TEXT+6        ;AUF MODUS
1120 CPY #$20          ;PRUEFEN
1130 BEQ S1
1140 PLA
115© JMP FARB          ;FARBE SETZEN
1160 S1 LDA TEXT,X
1170 AND #%10111111
1180 EOR #$80          ;IN BILDSCHIRM
1190 STA $0400,Y       ;SCHREIBEN
1200 INY
1210 INX
1220 CPX #$07          ;ALLE ZEICHEN
1230 BNE S1
1240 PLA
1250 LSR : LSR
1260 AND #%100000011   ;SEITENNUMMER
1270 ORA #%110110000
12S0 STA $0400,Y       ;EINFUEGEN
1290 ;
1300 ; *********  FARB-RAM AUFUELLEN *********
1310 FARB LDA #$D8          ;ZEIGER AUF
1320 STA STO2+1        ;FARB-RAM
1330 LDX #4
1340 LDY #0
1350 LDA #14           ;FARBE NR. 14
1360 S3 STA (STO2),Y
1370 DEY
1380 BNE S3            ;IN RAM
1390 INC STO2+1
1400 DEX
1410 BNE S3            ;SCHREIBEN
1420 CLI
1430 RTS
1440 ;
1450 ; *********** V-FLAG SETZEN *************
1460 VFL PHP
1470 PLA
1480 ORA #%01000000
1490 PHA
1500 PLP
1510 RTS
1515 ;
1520 ; ************ BASIC-CODE SUCHEN ********
1530 INTER JSR CHRGET        ;ZEICHEN HOLEN
1540 PHP
1550 CMP #$53
1560 BNE PL
1573 LDY #$01
1580 LDA ($7A),Y       ;ZEICHEN HOLEN
1590 CMP #$45
1600 BEQ TAUSCH
1610 PL PLP
1620 JSR CHRGOT
1630 JMP RETURN3       ;BEFEHL AUSFUEHREN
1635 ;
1640 TAUSCH JSR CHRGET
1650 LDX #$03          ;BEFEHLSCODE
1660 S4 JSR CHRGET
1670 CMP TEXT,X        ;PRUEFEN.
1680 BNE SY            ;EINGABE FEHLER
1690 INX
1700 CPX #$06
1710 BNE S4
1720 JSR CHRGET        ;SEITENNR.
1730 CMP #$30
1740 BMI SY
1750 CMP #$34          ;HOLEN
1760 BPL SY
1770 AND #$0F          ;UND AUFBEREITEN
1780 CLC
1790 ADC #$03
1800 TAX
1810 JSR CHRGET        ;NAECHSTES ZEICHEN
1820 CMP #$2C
1830 BNE SY
1840 JSR CHRGET
1850 CMP #$48
1860 BEQ I1
1878 CMP #$54
1880 BEQ I2
1890 SY JMP SYNTAX         ;SYNTAX ERROR
1900 I1 JSR VFL            ;V-FLAG SETZEN
1910 I2 INC TEXT+6         ;EINBLENDUNG
1920 JSR CHAN
1930 DEC TEXT+6        ;BLOCKIEREN
1940 JSR CHRGET
1950 JMP $A7AE
1955 ;
I960 ; ****  HIGH BYTES DER ZIELADRESSEN *****
1970 SEITE .BYTE $00,$00,$00,$A0,$A4,$A8,$AC
1980 ;
1990 ; ************* BILDEINTRAG *************
2000 TEXT .ASC ">SEITE ”
READY.
Assembler Listing von »Screen Change«
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →