»Windows« für den C 64
Dieses Programm für den C 64 stellt vier Speicher für Bildschirminhalte im Text/Blockgrafikmodus zur Verfügung. Da diese Speicher im RAM »unterhalb« des Betriebssystems liegen, beanspruchen sie keinen zusätzlichen Speicherplatz. Das Programm ist in Maschinensprache geschrieben und durch Verwendung eines Verschiebeladers in verschiedenen Speicherbereichen lauffähig.
Besonders in größeren Programmen ist es oft wünschenswert, zwischen mehreren Bildschirmen umschalten zu können oder aber Fenster mit Zusatzinformationen in den laufenden Bildschirm einblenden zu können, ohne jedoch seinen ursprünglichen Inhalt zu zerstören. Um dies zu ermöglichen, stellt das Programm vier Speicher zur Verfügung, in denen komplette Bildschirminhalte oder Teile daraus abgelegt werden können. Ein Speicher belegt einen Bereich von 2 KByte, jeweils ein KByte für Zeichen und Farbe. Da diese Speicher unterhalb des Betriebssystems im RAM ab Adresse $E000 untergebracht sind, beanspruchen Sie keinerlei zusätzlichen Platz.
Anwendung
Das Programm bietet folgende Betriebsarten:
- STORE: SYS BA,NR,XO,YO,FB,FH Speichern
- RECALL: SYSBA+3,NR Rückholen
- SWAP: SYSBA+6,NR Austauschen
Die Parameter haben folgende Bedeutung:
BA = Basisadresse des Programms (siehe unten)
NR = Nummer des angesprochenen Speichers (0…3)
X0,Y0 = Position der linken oberen Ecke des zu speichernden Bereiches (0..39,0..24)
FB = Breite des Bereiches(1…40)
FH = Hohe des Bereiches(1…25)
Die Fensterseite (Höhe) darf nur bis zum rechten (unteren) Bildrand reichen. Wenn zum Beispiel die linke obere Ecke auf die Koordinate X = 10und Y = 5 gesetzt ist, so ist die maximale Fensterbreite 30 und die maximale Fensterhöhe 20. Falsche Angaben für die Parameter erzeugen die Fehlermeldung »ILLEGAL QUANTITY ERROR«.
STORE: Um einen kompletten Bildschirm abzuspeichern, geben Sie folgendes ein: SYS BA,NR,0,0,40,25. Mit anderen Parametern erzeugen sie ein Bildschirmfenster, das bei RECALL auch nur den durch diese Parameter definierten Bereich überschreibt. Darum bleibt der ursprüngliche Bildschirm erhalten.
RECALL: Es ist nur die Angabe der Speichernummer nötig. Der gespeicherte Bereich wird an seine ursprüngliche Position zurückgeschrieben.
SWAP: Wenn Sie ein schon vorher vorbereitetes und im Speicher stehendes Informationsfenster in den aktuellen Bildschirm einblenden, wird dessen ursprünglicher Inhalt zerstört. Um ihn zu erhalten, müßten Sie ihn vor der Einblendung in einen noch freien Speicher retten. SWAP erleichtert die Arbeit und spart Speicherplatz, indem es die Inhalte von aktuellem Schirm und Speicher austauscht. Mit einmal SWAP rufen sie den Speicher ab, noch einmal SWAP erzeugt wieder das ursprüngliche Bild. Die Information über Position und Größe des auszutauschen Bereiches liefert das Bild im Speicher. SWAP wird daher nur mit der Speichernummer aufgerufen.
Noch ein Hinweis: Vermeiden Sie es, mit RECALL oder SWAP einen Speicher aufzurufen, in den noch nichts hineingeschrieben wurde, dies würde zum Absturz des Programms führen (siehe: Kompatibilität zu Simons-Basic). Der Basic-Lader initialisiert alle 4 Speicher, um einer Fehlbedienung vorzubeugen.
Laden des Programmes
Die Verschieberoutine des Basic-Laders gestattet es, das Programm auf den Anfang jeder (sinnvollen) Speicherseite zu legen. Nach dem Start bietet der Lader die Optionen:
1 RAM-Ende normales Basic ($9E00)
2 RAM-EndeSimons-Basic ($7E00)
3 Geschützter Bereich ($C000)
>7 Eingabe der Startseite
Die Optionen 1 bis 3 setzen den Programmanfang auf die angegebene Adresse, bei Eingabe einer Zahl > 7 wird diese als die Nummer derjenigen Speicherseite interpretiert, wo das Programm abgelegt werden soll.
Aus der Nummer der Speicherseite erhält man durch Multiplikation mit 256 die noch fehlende Basisadresse. Das Ladeprogramm gibt sie am Schluß mit aus.
Der Vektor für die Basic-Obergrenze in (55),(56) wird entsprechend der Startadresse des Maschinenprogramms heruntergesetzt, sofern das Programm nicht im geschützten Bereich untergebracht ist. Beachten Sie, daß Sie diesen Vektor nach einem Reset beziehungsweise STOP/RESTORE korrigieren, sonst wird das Programm überschrieben.
Im Programmlisting erkennen Sie zwei Unterschiedlich umfangreiche Blocks von DATA-Zeilen. Der erste, große Block stellt das eigentliche Programm dar, der kleine ist eine Liste von Adressen, welche relativ zum Programmanfang diejenigen Bytes angeben, die bei einer Verschiebung korrigiert werden müssen. Der Korrekturwert ergibt sich aus der Differenz zwischen der Startadresse, mit der das Programm assembliert wurde ($9E00=Speicherseite 158) und der gewünschten Startseite. Die beiden Blocks besitzen eigene Checksummen und OK-/Fehlermeldungen.
Kompatibilität zu Simons-Basic
»Bildspeicher« ist auch eine hilfreiche Erweiterung der Simons-Basic-Befehle für die Bildschirmsteuerung. Es sind jedoch folgende Punkte zu beachten:
- Die Hires-Grafik überschreibt alle vier Speicher. Diese müssen daher vor einem Zugriff mit »RECALL« oder »SWAP« unbedingt neu beschrieben werden.
- Der geschützte Bereich ab $C000 wird ebenfalls von Hires überschrieben, so daß »Bildspeicher« in Programmen, welche die Hires-Grafik benützen, am Basic-RAM-Ende untergebracht werden muß (Option 2).
Ob Sie jedoch nun mit oder ohne Simons-Basic arbeiten, in jedem Falle ist »Bildspeicher« eine nützliche Routine, die auch dem C 64-Besitzer das Fenster zum »Windowing« aufstößt.
(Hans-Herbert Hagedorn / ev)