Es gibt sehr viele BASIC-Erweiterungen f{CBM-X}r den C 64. Alle bieten neue Befehle, aber fast alle "schlucken" etwas vom Speicherplatz. "W{CBM-X}rthele's Expanded BASIC" bietet jedoch mehr Speicher, als im normalen Betrieb f{CBM-X}r das BASIC gebraucht wird.
Die BASIC-Erweiterung wird absolut (LOAD "WEB",8,1) geladen und anschlie{CBM-V}end mit SYS49152 gestartet. Wenn Sie sie aus unserem Disclader heraus laden, ben{CBM-C}tigen Sie die SYS-Anweisung nicht, da wir einen kleinen Programmlader (web.loader), der das eigentliche Programm nachl{CBM-F}dt und es startet, auf der Diskette abgespeichert haben. Verwenden Sie also am besten immer diesen kleinen Lader, auch wenn Sie das Programm nicht aus unserem Diskettenmen{CBM-X} heraus starten wollen. "W{CBM-X}rthele's Expanded BASIC" bietet mehr Speicher, als normal f{CBM-X}r das BASIC ben{CBM-C}tigt wird. Zus{CBM-F}tzlich kann ein eigener Zeichensatz und ein Grafikbildschirm verwendet werden, wobei immer noch gen{CBM-X}gend Platz f{CBM-X}r eigene Sprites bleibt. Der somit gr{CBM-C}{CBM-V}ere freie Speicherplatz kann auch f{CBM-X}r eigene Routinen benutzt werden. Der komplette ROM-Bereich wird, wenn es nicht f{CBM-X}r das BASIC verwendet wird, gen{CBM-X}tzt. Auf der Diskette ist zus{CBM-F}tzlich noch das Programm "EB Anweisung" enthalten, in dem Sie alle wichtigen Befehle der Erweiterung erkl{CBM-F}rt bekommen.
Sie sollten sich deshalb, bevor Sie richtig mit dem Programm arbeiten wollen, die Anleitung mit ihren Demonstrationen anschauen. Alle Programme auf der Diskette, die mit "EB" im Filenamen beginnen, sind Demos, die bei Verwendung der BASIC-Erweiterung geladen werden k{CBM-C}nnen. Etwas Besonderes hat die Erweiterung zu bieten. So ist die Integrierung von "No-Border-Sprites" kein Problem. Das mitgelieferte Demo "EB CLOCK SHOW" beweist das sehr anschaulich. "WEB", die Kurzform von "W{CBM-X}rthele's Expanded BASIC", verf{CBM-X}gt {CBM-X}ber sehr schnelle Grafikbefehle, die sogar die Geschwindigkeit von "Simons's BASIC" {CBM-X}bertreffen.
Die Benutzerf{CBM-X}hrung
-------------------
"WEB" ist nach dem Installieren nur f{CBM-X}r reinen Floppybetrieb vorgesehen. Der Kassettenpuffer wird als BASIC-Speicher verwendet. Wer dennoch mit Kassette arbeiten will, mu{CBM-V} den BASIC-Speicher nach 1022 hochlegen und opfert dadurch einige Bytes Speicherplatz. Dennoch steht mehr Speicherplatz zur Verf{CBM-X}gung als normalerweise. Erreicht wird dies durch die Bildschirmspeicherverschiebung ins RAM oberhalb der Adresse 49152. Wer also nicht auf den Datasettenbetrieb verzichten will, gibt folgendes nach dem Installieren von "WEB" ein:
Poke 43,254:Poke 44,3:Poke 1021,0:New
Die BASIC-Erweiterung bietet einige neue und n{CBM-X}tzliche Befehle, die dem Programmierer ungeahnte Vorteile bringen:
- Grafikbefehle (Linien, Punkte etc.)
- eigener Zeichensatz m{CBM-C}glich ohne
Speichereinschr{CBM-F}nkungen
- Sprite-Handling
- No-Border-Sprites werden unterst{CBM-X}tzt
- Komfortabler Directory- und List-
Befehl
- gr{CBM-C}{CBM-V}erer BASIC-Speicher als normal,
auch wenn Grafikschirm, eigener
Zeichensatz und Sprites voll aus-
gesch{CBM-C}pft werden, sogar wenn die
Datasette benutzt wird. Alle Sprites
werden im vierten VIC-Block
abgespeichert
- erweiterte Befehle (GOTO Variable)
- bei Textmodus (keine Grafikseite)
64 Sprites-Bl{CBM-C}cke verf{CBM-X}gbar
- sonstige Erweiterungen
Insgesamt stehen Ihnen 17 neue Befehle sowie verbesserte GOTO- und LIST-Befehle zur Verf{CBM-X}gung.jDer RAM-Speicher des C64 kann mit "WEB" fast vollst{CBM-F}ndig gen{CBM-X}tzt werden. Die RAM-Bereiche unterhalb des ROMs werden f{CBM-X}r die Bitmap, den Zeichensatz und die Sprites genutzt, der Rest steht dem BASIC-Speicher zur Verf{CBM-X}gung.jjDurch die Erweiterung werden die bereits im C64 enthaltenen BASIC-Befehle nicht beeintr{CBM-F}chtigt, das hei{CBM-V}t alle alten Befehle des C64 bleiben erhalten.
Die neuen Befehle beginnen immer mit dem @-Zeichen (Klammeraffe).
Die genaue Auflistung aller neuen Befehle entnehmen Sie bitte der Tabelle 1.
Bei IF...THEN-Konstruktionen ist zu beachten, da{CBM-V}, sofern auf THEN ein "WEB"-Befehl folgt, dieser vom THEN-Statement durch einen Doppelpunkt abzutrennen ist. Ein Beispiel:
IF a=4 THEN:@B6
Ebenfalls neu ist der @!-Befehl.
Dieser kann nur im Direktmodus eingegeben werden. Im Notfall kann dadurch ein abgest{CBM-X}rztes Programm wieder listbar gemacht werden. Es handelt sich allerdings nicht um ein 100prozentiges RENEW.
Mit SYS50231 k{CBM-C}nnen Sie sich den Diskstatus beziehungsweise den Fehlerkanal #8 ausgeben lassen. Dieser Befehl ist ein Teil des Directory-Befehls und kann auch so angesprochen werden, quasi noch eine zus{CBM-F}tzliche Erweiterung des Befehlssatzes.
Hinweise f{CBM-X}r Programmierer
--------------------------
Zur Anpassung einiger BASIC-Programme, die in den Bildschirmspeicher poken, sollten Sie zur Adresse den Wert 51200 dazuz{CBM-F}hlen (aus 1024 wird 52224).
Bei der Spritebenutzung legen Sie die Sprites ab Adresse 61440 ab, die Spritezeiger sind dann im Bereich 53240 bis 53247 anstatt im Bereich 2040 bis 2047 zu finden.
Im "W{CBM-X}rthele's Expanded BASIC" d{CBM-X}rfen auf den GOTO-Befehl auch Variablen oder mathematische Ausdr{CBM-X}cke folgen. Beispiel:
GOTO VA+4/INT(RND(1))
Der LOAD-Befehl gleicht im Expanded Border Mode Hintergrund- und Rahmenfarbe einander an, um ein Flackern im Split zu vermeiden. Mit dem LIST-Befehl k{CBM-C}nnen Sie das Listen mit einer beliebigen Taste anhalten, mit der Funktionstaste F7 wird die LIST-Funktion weiter ausgef{CBM-X}hrt. Wurde das Listen angehalten, wird je nach gedr{CBM-X}ckter Taste ein Buchstabe oder Ausdruck gelistet.
Wenn Sie in Maschinensprache programmieren wollen, k{CBM-C}nnen Sie neben "WEB" auch Maschinenspracheroutinen benutzen. Dazu betrachten Sie unsere Tabelle 2, die Ihnen eine genaue Speicher{CBM-X}bersicht liefert. In diesem Fall verringern Sie am besten den BASIC-Speicher (zum Beispiel {CBM-X}ber Adresse 55/56). Sie k{CBM-C}nnen die 72 beziehungsweise 15 freien Bytes unter oder {CBM-X}ber den BASIC-Speicher als Zwischenspeicher verwenden. Andere Adressen (zum Beispiel in der Zeropage) m{CBM-X}ssen vor dem Benutzen gerettet und nach der erstellten Routine wieder mit dem alten Wert geladen werden.
Vorsicht beim Interrupt-Programmieren! Wenn der Expanded Border Mode angeschaltet ist, wird der Interrupt daf{CBM-X}r umgeleitet und in eine zeitkritische Routine verzweigt.
Ein paar n{CBM-X}tzliche Hinweise
---------------------------
F{CBM-X}r eine Kreis-Funktion fehlte innerhalb von "WEB" der Platz. Der folgende Dreizeiler erledigt das:
Der Aufruf erfolgt hier in unserem Beispiel durch GOSUB 10. Folgende Parameter werden verwendet:
x,y = Koordinaten des Kreismittelpunktesr = Radius
m = Modus (1 = setzen, 0 = l{CBM-C}schen)
"WEB" vertr{CBM-F}gt sich mit einigen Fastloadern. Es ist aber zu beachten, da{CBM-V} zuerst "WEB" installiert werden mu{CBM-V}, danach der Fastloader mit dem entsprechenden SYS-Befehl. Das ist deshalb n{CBM-C}tig, da "WEB" den LOAD-Vektor verbiegt, um im Falle des Expanded Border Mode die Rahmenfarbe w{CBM-F}hrend des Ladevorgangs der Hintergrundfarbe anzupassen, damit ein Flimmern verhindert wird.jBeim Installieren von "WEB" mit SYS49152 durchl{CBM-F}uft das Programm automatisch den @R-Befehl. Wollen Sie dies vermeiden, so k{CBM-C}nnen Sie auch erst bei der Adresse $COBB (dezimal 49339) in das Programm einspringen. N{CBM-X}tzlich ist das, wenn Sie einen eigenen Zeichensatz im Speicher nicht {CBM-X}berschreiben wollen.
Im Expanded Border Mode k{CBM-C}nnen Sie mit
POKE65535,Z
eine Schwarzblende {CBM-X}ber den erweiterten Rahmen legen.
F{CBM-X}r Z gelten folgende Parameter:
Z = 0 Schwarzblende aus
Z = 255 Schwarzblende ein
W{CBM-F}hlen Sie f{CBM-X}r Z einen Wert, der zwischen Null und 255 liegt, k{CBM-C}nnen Sie die Bits der Schwarzblende setzen und l{CBM-C}schen. Dadurch lassen sich recht interessante Effekte erzielen.
Das Autostartprogramm
---------------------
Auf Ihrer Diskette befindet sich auch ein zu "WEB" geh{CBM-C}render Autostartgenerator. Damit lassen sich alle Programme, die unter "WEB" erstellt wurden, mit einem Autostarter versehen. Das hei{CBM-V}t, alle damit bearbeiteten Programme k{CBM-C}nnen nach der Installation von "WEB" geladen und automatisch gestartet werden. Dadurch entf{CBM-F}llt das l{CBM-F}stige Eintippen des RUN-Befehls.
Und so versehen Sie Ihr "WEB"-Programm mit dem Autostart:
Sichern Sie Ihr Programm und verlassen Sie die BASIC-Erweiterung entweder durch einen Reset-Schalter, oder schalten Sie Ihren C64 einfach ab. Danach laden Sie den Autostarter ("AUT.STG.V4") im normalen BASIC absolut, also mit ",8,1". Anschlie{CBM-V}end geben Sie SYS49152 ein. Es erscheint eine Meldung, da{CBM-V} nun dieselbe Speicherkonfiguration wie unter "WEB" geschaffen wurde. Das "WEB" ist aber nicht installiert. Nun laden Sie Ihr erstelltes "WEB"-Programm. Beachten Sie, da{CBM-V} das Programm im Augenblick nicht lauff{CBM-F}hig ist.
Mit dem Befehl SYS49342 gelangen Sie in das Autostart-Generator-Men{CBM-X} (der SYS-Befehl wird in der Meldung mit angegeben). Hier w{CBM-F}hlen Sie nun den Namen des Programmes, das den Autostart bekommen soll. Anschlie{CBM-V}end wird das Autostart-Programm erstellt. Bei sehr langen Programmen kann dies eine Weile dauern, also haben Sie bitte etwas Geduld. Dieser Autostart-Generator fand aus Speicherplatz-Gr{CBM-X}nden keinen Platz mehr in der eigentlichen BASIC-Erweiterung. In der vorliegenden Form kann der Generator auch sehr lange Programme verwalten.
Folgendes ist beim Autostart-Generator zu beachten:
1. Die erste Zeile mu{CBM-V} immer die
Nummer "0" tragen
2. RUN-STOP/RESTORE ist blockiert.
Soll die Funktion dennoch frei-
gegeben werden, so geben Sie
POKE808,237 ein, und die Abfrage
wird wieder eingeschaltet
3. Der Bildschirm ist beim Start des
Programmes ausgeblendet. Mit
POKE53265,27 k{CBM-C}nnen Sie den Bild-
schirm wieder einblenden. Weiterhin
ist es m{CBM-C}glich, die Einblendung erst
vorzunehmen, wenn die Bildschirm-
maske des Programmes fertig ist.
Dadurch geben Sie Ihren Programmen
einen professionellen Touch.
Noch ein Tip, wie Sie in bereits bestehende Programme die Zeile null einf{CBM-X}gen k{CBM-C}nnen. Dazu geben Sie einfach POKE808,237:POKE53265,27 ein. Alles ist dann genau so, als w{CBM-F}re ein "normales" Programm geladen und mit RUN gestartet worden. Wir w{CBM-X}nschen Ihnen viel Spa{CBM-V} beim Ausprobieren und Experimentieren.
--------------------------------------
TABELLE 1
--------------------------------------
PARAMETERLOSE BEFEHLE
@C Clear Bitmap
----------------
l{CBM-C}scht den Grafikschirm
@D Display Directory
---------------------
zeigt das Inhaltsverzeichnis einer Diskette an. Abbruch mit F7, mit anderer Taste warten
@E Expand Border
-----------------
schaltet erweiterten Rahmen ein
@G Graphic Mode
----------------
schaltet den Grafikschirm an
@I Invert Bitmap
-----------------
invertiert den Grafikbildschirm
@N Normal Text Mode
--------------------
Textschirm, Gegenteil zu d)
@O Old Border
--------------
Normalschirm, Gegenteil zu c)
@R Redfine Charset
-------------------
setzt als aktuellen Zeichensatz den normalen C=-Zeichensatz
EINPARAMETRIGE BEFEHLE
@B x Border's Color
--------------------
Rahmenfarbe x
@F x Foreground Color
----------------------
Vordergrundfarbe x (x bedeutet den Wert der gew{CBM-X}nschten Farbe, siehe Handbuch)
ZWEIPARAMETRIGE BEFEHLE
@M x,z Modify Bitmap's Color
-----------------------------
Der Textschirm wird mit Zeichen gef{CBM-X}llt, die bei eingeschaltetem Grafikmodus der Farbwahl Zeichenfarbe x auf Hintergrund x entspricht. Im Textmodus kann der Bildschirm mit denselben Zeichen gef{CBM-X}llt werden.
@M 0,2
------
l{CBM-C}scht den Textbildschirm
DREI- UND MEHRPARAMETRIGE BEFEHLE
@A x,z,a$
---------
PRINTAT: Der String a$ (darf auch in Anf{CBM-X}hrungszeichen direkt folgen) wird in Spalte y und Zeile x auf den Bildschirm geschrieben
@S a,x,y
--------
SPRITESET: Das Sprite Nummer a wird an die Position x ,y gesetzt (LSB/HSB wird automatisch gesetzt)
@P m,x,y
--------
PLOTPOINT: Ist m gleich eins, so wird der Punkt x,y in der Bitmap gesetzt. Ist m gleich null, so wird er gel{CBM-C}scht
@L m,x,y,z,t
------------
LINEPRINT: m ist gleich in Punkt n) beschrieben. Es wird von x,y nach z,t eine Linie gezogen
@T m,b,x,y,a$
-------------
TEXT IN BITMAP: Der String a$ wird in die Bitmap in Zeile x, Spalte y geschrieben. Auch darf der String in Anf{CBM-X}hrungszeichen folgen.
Ist m eins, so wird der String "normal" ausgegeben. Ist m zwei, wird er revers geschrieben.
Mit b wird der Textmodus geregelt. Ist b eins, so wird der normale Gro{CBM-V}/Grafik-Modus eingeschaltet. Ist b zwei, wird der Gro{CBM-V}/Kleinschrift-Modus eingeschaltet. Ist b drei beziehungsweise vier, wird der eigene Zeichensatz in Gro{CBM-V}/Grafik- oder Gro{CBM-V}/Kleinschrift-Modus geschrieben. Wenn kein eigener Zeichensatz erstellt wurde, so haben die Wert drei und eins sowie vier und zwei jeweils dieselbe Wirkung.