BASIC-Erweiterungen f{CBM-X}r den C64 gibt's schon etliche, mit mehr oder weniger komfortablen Befehlen, die das karge Basic V 2.0 dieses Commodore-Computers auf Vordermann bringen. Diese Erweiterung, BASIC V 2.+, widmet sich speziell und in hervorragender Manier den grafischen und musikalischen F{CBM-F}higkeiten Ihres C64, wobei einige unerl{CBM-F}{CBM-V}liche Zusatzfunktionen wie Old, Renumber, Merge nicht fehlen.
Dem Autor waren, wie er schreibt, "die bisherigen BASIC-Erweiterungen f{CBM-X}r den C64 h{CBM-F}ufig zu lang, schleppten zuviel Ballast mit sich herum, den man sowieso nicht braucht - oder sie waren zu speziell. Besonders die Grafik- und die Soundprogrammierung werden von BASIC V 2+ unterst{CBM-X}tzt, so da{CBM-V} es auch vielen Anf{CBM-F}ngern oder unerfahrenen Programmierern ein Leichtes sein sollte, sich damit zu besch{CBM-F}ftigen. Ich wei{CBM-V}, da{CBM-V} der POKE-Dschungel, der ansonsten durchk{CBM-F}mpft werden mu{CBM-V}, oft sehr abschreckend wirkt."
Doch nun zum Programm selbst: Beachten Sie bitte, da{CBM-V} Sie BASIC V 2.+" (obwohl in reiner Maschinensprache geschrieben) wie ein normales BASIC-Programm mit LOAD "BASIC V 2.+",8 laden und mit "RUN" starten k{CBM-C}nnen. Erst dann wird der MC-Code blitzschnell nach $ 9000 (36864 dez.) geschrieben, die Systemeinschaltmeldung erscheint. Nach einem Reset l{CBM-F}{CBM-V}t sich die Befehlserweiterung mit der Anweisung SYS 39713 wieder starten.
Auf Ihrer Diskette finden Sie auch noch zwei Demo-Programme abgespeichert (1. u. 2. Demo), die Sie danach ganz normal laden und mit "RUN" starten k{CBM-C}nnen. Sehen und staunen Sie, zu welchen K{CBM-X}nsten der C64 jetzt f{CBM-F}hig ist! Die folgende Zusammenstellung der Befehle des BASIC V 2.+, eingeleitet von der Speicheraufteilung und einer {SHIFT--}bersicht der benutzten Speicherbereiche, gibt Ihnen eine umfassende {SHIFT--}bersicht {CBM-X}ber die Handhabung der 23 neuen Befehle, die Ihr C64 jetzt zus{CBM-F}tzlich zu den bereits bekannten versteht. Zur Identifizierung der neuen Befehle besitzt BASIC V 2.+ eine eigene Routine. Der Zeiger in $ 308 (Low-Byte) und $ 309 (High-Byte) wird auf diese "Befehlserkennung" gesetzt. Die neuen Befehle werden durch die einheitliche Verwendung des Rautenzeichens vor den Befehlsw{CBM-C}rtern dem Computer kenntlich gemacht. Das normale Interpreter-ROM des BASIC V 2.0 bleibt somit unangetastet. Es kann also zu keinen Kollisionen mit anderen Maschinenprogrammen kommen, sofern diese die erw{CBM-F}hnten Zeiger nicht ver{CBM-F}ndern oder Speicherbereiche belegen, die das Maschinenprogramm von BASIC V 2.+ selber braucht (s. Speicherbelegung).
Benutzte Speicherbereiche:
- Zeropage: verschiedene Speicher-
stellen in der Nullseite sind
benutzt, so da{CBM-V} auf sie nicht f{CBM-X}r
eigene Zwecke zur{CBM-X}ckgegriffen werden
sollte.
- $02A7-$02FF
$033C-$03FF: teilweise f{CBM-X}r verschie-
dene Zwischenspeicherungen
- $0801-$167C: BASIC V2+ (nur direkt
nach dem Laden)
- $9000-$9D7C:
BASIC V2+ (regul{CBM-F}r)
- $C000-$C3FF: Bildschirmspeicher im
HiRes-Modus (wird benutzt als Farb-
speicher)
- $CF00-$CFFF: Zwischenspeicher f{CBM-X}r
Textausgaben im HiRes-Modus
- $E000-$FFFF: Bitmap im HiRes-Modus
Beschreibung der neuen Befehle:
-------------------------------
1. Grafikbefehle
1.1 Ausgabekontrolle
PLACE
-----
Syntax: #PLACE,zle,spl
mit zle = Zeile (0-24)
spl = Spalte (0-39)
Funktion: PLACE setzt den Cursor an die angegebene Stelle, bzw. die n{CBM-F}chste Ausgabe erfolgt an der durch zle und spl festgelegten Stelle.
MARGIN
------
Syntax: #MARGIN,col
mit col = Farbbcode (0-15)
Funktion: Bestimmung der Rahmenfarbe (Farbcodes siehe Handbuch).
SCREEN
------
Syntax: #SCREEN,col
mit col = Farbcode (0-15)
Funktion: Bestimmung der Hintergrundfarbe.
PEN
---
Syntax: #PEN,col
mit col=Farbcode (0..15)
Funktion: Bestimmung der Zeichenfarbe.
LOWER
-----
Syntax: #LOWER
Funktion: Umschaltung in den zweiten Commodore-Zeichensatz (Gro{CBM-V}-/Kleinschrift)
UPPER
-----
Syntax: #UPPER
Funktion: Umschaltung in den Gro{CBM-V}schrift-/Grafik-Modus.
1.2 Hochaufl{CBM-C}sende (Bitzuordnungs-) Grafik
COLOUR
------
Syntax: #COLOUR,rhmcol,hngcol,blpcol
mit rhmcol=Rahmenfarbe (0-15)
hngcol=Hintergrundfarbe (0-15)
blpcol=Bildpunktfarbe (0-15)
Funktion: Setzen der Farben f{CBM-X}r die hochaufl{CBM-C}sende Grafik. Die Farbbestimmung sollte vor Einschalten der Grafik geschehen.
HIRES
-----
Syntax: #HIRES,mod
mit mod=Modus
0=R{CBM-X}ckkehr in den Textmodus
(HiRes aus)
1=Einschalten des Hires-Modus
2=L{CBM-C}schen der Bitmap +
Einschalten der Grafik
Funktion: L{CBM-C}schen, Einschalten bzw. Ausschalten des HiRes-Modus.
PLOT
----
Syntax: #PLOT,mod,x,y
mit mod=Modus
0=L{CBM-C}schen des Bildpunktes
1=Setzen des Bildpunktes
x = horizontale Koordinate
des Bildpunktes (0-319)
y = vertikale Koordinate
des Bildpunktes (0-199)
Funktion: Setzen bzw. L{CBM-C}schen eines bestimmten Bildpunktes.
TEXT
----
Syntax: #TEXT,zle,spl,"text"
mit zle=Zeile (0-24)
spl=Spalte (0-39)
Funktion: Einbringen von Text in die hochaufl{CBM-C}sende Grafik. Als Steuerzeichen sind RVS ON/RVS OFF erlaubt, die eine inverse Ausgabe bewirken.
CIRCLE
------
Syntax: #CIRCLE,xm,ym,r
mit xm=X-Koordinate des Kreis-
mittelpunktes
ym=Y-Koordinate des
Mittelpunktes
r=Radius
Funktion: Zeichnen eines Kreises. Zu beachten ist, da{CBM-V} xm minus r und xm plus r sowie ym minus r und ym plus r die Koordinaten des Bildschirmes nicht {CBM-X}ber- oder unterschreiten d{CBM-X}rfen.
LINE
----
Syntax: #LINE,x0,y0,x1,y1
mit x0,y0=Koordinaten des
Anfangspunktes
x1,y1=Koordinaten des
Endpunktes der Linie
(x:0-319; y:0-199)
Funktion: Zeichnen einer Strecke in der HiRes-Grafik.
REC
---
Syntax: #REC,xA,yA,xB,yB
mit xA,yA=Koordinaten der linken
oberen Ecke
xB,yB=Koordinaten der rechten
unteren Ecke des Rechteckes.
Funktion: Zeichnen eines beliebigen Rechteckes in der HiRes-Grafik.
2. Befehle zur Tonerzeugung
VOLUME
------
Syntax: #VOLUME,vol
mit vol=Lautst{CBM-F}rke(0-15)
Funktion: Einstellen der Lautst{CBM-F}rke.
ENVELOPE
--------
Syntax: #ENVELOPE,st,A,D,S,R
mit st=Stimme (1-3)
A=Attack - Dauer der
Anschwellphase
D=Decay - Dauer der
Abschwellphase
S=Sustain - Lautst{CBM-F}rke in der
Haltephase
R=Release - Dauer der
Ausklingphase (A,D,S,R:0-15)
Funktion: Festlegen der ADSR-H{CBM-X}llkurve f{CBM-X}r eine Stimme.
VOICE
-----
Syntax: #VOICE,st,f,w,d
mit st=Stimme (1-3)
f=Frequenz (0-65535)
w=Wellenform:
1=Dreieck
2=S{CBM-F}gezahn
3=Rechteck
4=Rauschen
d=Tondauer (0-65535)
Funktion: Einstellen der {CBM-X}brigen Stimmenparameter. Bei d=0 wird der Ton gem{CBM-F}{CBM-V} der ADSR-H{CBM-X}llkurve einmal angeschlagen.
PULSE
-----
Syntax: #PULSE,st,pb
mit st=Stimme (1-3)
pb=Pulsbreite (0-65535)
Funktion: Festlegen der Pulsbreite (nur, wenn als Wellenform Rechteck gew{CBM-F}hlt).
3. Sonstige Befehle
KEYPRESS
--------
Syntax: #KEYPRESS
Funktion: H{CBM-F}lt das laufende Programm an, bis eine beliebige Taste gedr{CBM-X}ckt wird.
OFF
--
Syntax: #OFF
Funktion: Ausschalten von STOP und STOP-RESTORE.
REVIVE
------
Syntax: #REVIVE
Funktion: Wiedereinschalten von STOP und STOP-RESTORE.
OLD
---
Syntax: #OLD
Funktion: Zur{CBM-X}ckholen (retten) eines BASIC-Programms nach NEW oder RESET.
RENUMBER
--------
Syntax: RENUMBER,ezle,sw
mit ezle=erste neue BASIC-
Zeilennummer
sw=Schrittweite (0-255)
Funktion: Numeriert die Zeilennummern des BASIC-Programms im Speicher neu durch. Sprungbefehle innerhalb des Programms (GOTO, etc.) m{CBM-X}ssen "per Hand" angepa{CBM-V}t werden.
MERGE
Syntax: #MERGE,"name",ga
mit name= Name des anzuh{CBM-F}ngenden
Programms
ga=Ger{CBM-F}teadresse (1/8)
Funktion: L{CBM-F}dt ein Programm von Diskette oder Kassette und h{CBM-F}ngt es an das im Speicher enthaltene an. Es ist darauf zu achten, da{CBM-V} die Zeilennummern des nachzuladenden Programmes h{CBM-C}her sind als die des im Speicher befindlichen (evtl. vorher=RENUMBER).