Exbasic Level II
Exbasic Level II | |
---|---|
Entwickler | Andreas Dripke & Michael Krause |
Verleger | kommerziell: Interface Age frei: Markt und Technik Verlag |
Release | 1983 / 1988 |
Lizenz | Vollversion |
Plattform(en) | C64, VC20 |
Genre | BASIC-Erweiterung |
Steuerung | |
Medien | |
Sprache(n) | , Anleitung |
Exbasic Level II ist eine BASIC-Erweiterung für Commodore-Computer.
Sie wurde in den Jahren 1981 bis 1983 entwickelt und ursprünglich kommerziell als Modul von Interface Age vertrieben. Zunächst gab es sie für Commodore PET Computer der Reihen CBM2000/3000/4000/8000, später für den VC20 und den C64. Eine freie Version für den Commodore 64 wurde im 64'er Magazin 04/1988 als Listing des Monats veröffentlicht. Auf der zugehörigen Diskette gibt es sowohl ein Programm (V64.3) als auch eine Modulversion (V64.1). Die Beschreibung in diesem Artikel bezieht sich auf die 64'er-Version.
Laden und Starten[Bearbeiten | Quelltext bearbeiten]
Das Modul wird in den Expansionsport gesteckt.
Von Diskette wird das Programm wird wie ein BASIC-Programm geladen und gestartet:
LOAD "EXBASIC L II",8 RUN
Nun stehen 59 zusätzliche Schlüsselwörter zur Verfügung mit DOS 5.1 Unterstützung und Funktionstastenbelegung.
Speicherbelegung[Bearbeiten | Quelltext bearbeiten]
Das Programm belegt 4 KByte im Bereich $8000-$9FFF.
Befehlsadressen findet man ab $9EA0, die Schlüsselwörter ab $9EE8.
Geänderte Vektoren[Bearbeiten | Quelltext bearbeiten]
Adresse | Bedeutung | Start |
---|---|---|
$028F-$0290 | Zeiger für Tastaturdekodierung | $9D7F |
$0300-$0301 | BASIC-Warmstart | $83F9 |
$0302-$0303 | Eingabe einer Zeile | $8173 |
$0308-$0309 | BASIC-Befehlsadresse holen | $8306 |
$030A-$030B | Ausdruck auswerten | $83D8 |
BASIC-Erweiterung[Bearbeiten | Quelltext bearbeiten]
Der Schwerpunkt der Erweiterung Exbasic Level II liegt auf der bequemen Programmentwicklung. Der BASIC-Editor wird mit einer Reihe von Befehlen unterstützt und glänzt mit scrollbarem Listing. Die speziellen Fähigkeiten des C64 werden dagegen nur teilweise unterstützt. Für Sound gibt es zwar einige Befehle, für hochauflösende Grafik aber keine.
Schlüsselwörter[Bearbeiten | Quelltext bearbeiten]
Token | Schlüsselwort | Abkürzung | nur C64 |
---|---|---|---|
$01 | OFF | oF | |
$02 | RENUM | rE | |
$03 | FIND | fI | |
$04 | DEL | dE | |
$05 | AUTO | aU | |
$06 | DUMP | dU | |
$07 | VPLOT | vP | |
$08 | CALL | cA | |
$09 | BORDER | bO | X |
$0A | EXEC | eX | |
$0B | MERGE | mE | |
$0C | HPLOT | hP | |
$0D | DOKE | dO | |
$0E | SPACE | sP | |
$0F | INPUTLINE | inputL | |
$10 | SET | sE | X |
$11 | KEY | kE | X |
$12 | CURSOR | cU | X |
$13 | ADSR | aD | X |
$14 | PAUSE | pA | X |
$15 | PLAY | pL | X |
$16 | VOLUME | vO | X |
$DC | RESET | reS | |
$DD | MEM | ||
$DE | TRACE | tR | |
$DF | BASIC | bA | |
$E0 | RESUME | resU | |
$E1 | LETTER | lE | |
$E2 | HELP | hE | |
$E3 | COKE | cE | X |
$E4 | GROUND | gR | X |
$E5 | MATRIX | mA | |
$E6 | DISPOSE | dI | |
$E7 | PRINT@ | pR | |
$E8 | HIMEM | hI | |
$E9 | HARDCOPY | hA | |
$EA | INPUTFORM | inputF | |
$EB | LOCK | lO | X |
$EC | SWAP | sW | |
$ED | USING | ||
$EE | SEC | ||
$EF | ELSE | eL | |
$F0 | ERROR | eR | |
$F1 | ROUND | rO | |
$F2 | DEEK | deE | |
$F3 | STRING$ | sT | |
$F4 | POINT | pO | |
$F5 | INSTR | inS | |
$F6 | CEEK | cE | X |
$F7 | MIN | mI | |
$F8 | MAX | ||
$F9 | VARPTR | vA | |
$FA | FRAC | fR | |
$FB | ODD | oD | |
$FC | DEC | ||
$FD | HEX$ | heX | |
$FE | EVAL | eV |
Befehle und Funktionen[Bearbeiten | Quelltext bearbeiten]
Tabelle der Befehle nach Anwendungsart geordnet[Bearbeiten | Quelltext bearbeiten]
Editierbefehle | |
FIND text [,bereich] | zeigt all jene Zeilen aus dem angegebenen Bereich, die den Suchtext bzw. die gesuchte Anweisung enthalten |
AUTO [zeilennummer][,schrittweite] | automatische Zeilennummernvorgabe bei der Eingabe neuer Zeilen |
DEL [bereich] | löscht eine Zeile bzw. einen Zeilenbereich |
RENUM [startzeilennummer][,schrittweite] | Zeilen umnummerieren (ohne Parameter mit Vorgabe 10, 10) |
TRACE [ON] / OFF | aktuelle Zeile während des Programmablaufs ganz oben am Bildschirm einblenden; Steuerung mit CTRL und C= |
DUMP | zeigt alle einfachen Variablen und deren Werte an |
MATRIX | zeigt alle indizierte Variablen (Arrays) mit den jeweiligen Werten an |
LETTER [ON][OFF] | schaltet um in Klein-/Großschrift (ON) oder Großschrift/Blockgrafik (OFF) |
MEM | Speicherbelegung anzeigen |
HIMEM adresse | obere Speichergrenze für BASIC setzen |
SPACE [ON][OFF] | mit Leerzeichen formatierte LIST-Ausgabe ein- (ON) oder ausschalten (OFF) |
HELP | Exbasic-Schlüsselwörter auflisten |
HELP* | Schlüsselwörter des Standard-BASIC auflisten (* kann beliebig sein) |
BASIC | Standard-BASIC aktivieren; Rückkehr zu Exbasic ist: PRINT USR(0) |
MERGE programmname | lädt Programm von Kassette mit 5-facher Geschwindigkeit und fügt es in bestehendes ein |
MERGE* programmname,gnr | lädt Programm von Gerät gnr und fügt es in ein bereits bestehendes ein |
KEY | zeigt die Belegung der Funktionstasten an |
KEY [nummer],[string] | definiert die Belegung der Funktionstaste nummer; das Zeichen '←' am Ende der Zeichenkette string entspricht einem CHR$(13) |
KEY ON | Funktionstastenbelegung wiederherstellen; bei Modul mit Standardbelegung |
Kontrollstukturen | |
IF...THEN...ELSE | bedingte Verzweigung, erweitert das IF-THEN-Konstrukt um einen ELSE-Teil |
RESTORE [zeilennummer] | Erweiterung des Befehls RESTORE: DATA-Zeilen-Zeiger auf angegebene Zeile setzen |
ON X RESTORE [zeilennummerliste] | RESTORE mit berechneter Zeilennummer (ähnlich ON GOTO / ON GOSUB) |
DISPOSE | Manipulation des Stapels; schließt offene FOR-Schleifen und GOSUB-Aufrufe |
DISPOSE CLR | verwirft alle ausständigen Schleifen und Unterprogramme |
DISPOSE RETURN | verwirft den Rücksprung zur darüber liegenden Unterprogrammebene (innerstes GOSUB), das letzte GOSUB hat dann die Wirkung eines GOTOs |
DISPOSE NEXT [variablenname] | verwirft alle Schleifen (gemäß der entsprechenden Verschachtelung) bis zu jener mit der angegebenen Laufvariablen (ohne variablenname dann nur die zuletzt geöffnete Schleife), dabei erfolgt kein Sprung aus der Schleife |
ON ERROR GOTO [zeilennummer] | Fehlerausgang definieren; Zeilennummer 0 schaltet die Fehlerroutine aus; die Variable EL enthält die Nummer der fehlerhaften Programmzeile, EC die Fehlernummer |
RESUME | Rückkehr nach Fehlerbehandlung zur Zeile, in der der Fehler aufgetreten ist |
RESUME NEXT | Rückkehr nach Fehlerbehandlung zur Folgezeile der Zeile, in der der Fehler aufgetreten ist |
RESUME [zeilennr] | beliebiger Rücksprung nach Fehlerbehandlung |
Ein-/Ausgabe | |
INPUTLINE ["text";] var$ | liest Eingabezeile; sämtliche Zeichen - auch Kommata und Doppelpunkte - möglich |
INPUTFORM ["text";] var$,[länge] | liest Tastatureingabe der Länge länge (Byte-Wert, Vorgabe ist 79), ohne Beeinflussung durch Bildschirmeditorfunktionen |
PRINT@ bildpos, [ausdruck] | gibt den Wert von an der Bildschirmposition bildpos (0 bis 999) aus. |
PRINT USING [#fnr,] format$, ausdruck | formatierte Ausgabe eines Ausdrucks |
SPACE bildschirmbereich [,bscode] [,fz] | füllt angegebenen Bildschirmbereich mit Zeichen in angegebener Farbe |
STRING$ (anzahl, string) | erzeugt eine Zeichenkette bestehend aus dem ersten Zeichen von string in Vielfachheit anzahl |
HARDCOPY | Ausgabe der Textbildschirmes auf Drucker mit Geräteadresse 4 |
String-Befehle | |
INSTR (string, suchtext [,pos]) | sucht in string den Text suchtext ab Position pos; liefert 0, wenn nicht gefunden, sonst die entsprechende Position beginnend bei 1. |
EVAL (string) | die Funktion berechnet den in string enthaltenen Ausdruck (beliebigen Typs) und gibt das Ergebnis zurück |
EXEC string | führt den Inhalt der mit string gelieferten Zeichenkette als BASIC-Anweisung aus |
Grafikbefehle (Blockgrafik) | |
CURSOR farbe | setzt Zeichenfarbe (1 bis 16) |
GROUND farbe | setzt Hintergrundfarbe (1 bis 16) |
BORDER farbe | setzt Rahmenfarbe (1 bis 16) |
COKE bspos, {s/c}, {bscode/farbe} | schreibt Zeichen mit Bildschirmcode bzw. Farbe in Bildschirm an Position (1...1000), Screencode 0 bis 255, Farbe 1 bis 16 |
CEEK (bspos, {s/c}) | Holt Bildschirmcode bzw. Farbe von Bildschirmposition |
HPLOT ausdruck [,farbe] | Zeichnet horizontale Balkengrafik mit der Balkenlänge |
VPLOT ausdruck [,farbe] | Zeichnet vertikale Balkengrafik mit der Balkenlänge |
SET (spalte, zeile) [,farbe] | setzt Punkt in Blockgrafik (spalte 0 bis 79, zeile 0 bis 49) |
RESET spalte, zeile | Blockgrafikpunkt löschen (spalte 0 bis 79, zeile 0 bis 49) |
POINT spalte, zeile | Funktion, die testet, ob Punkt gesetzt (ja = -1, nein = 0) |
Tonerzeugung | |
VOLUME wert | Lautstärke des SID setzen; Wert 0 bis 15 |
ADSR stimme,welle,a,d,s,r [,pulsweite] | ADSR-Klangparameter setzen |
PLAY stimme,tonhöhe [sti2,ton2...] | spielt eine oder mehrere Noten |
PAUSE byteausdruck | verzögert byteausdruck/16 Sekunden |
Numerische Funktionen und Konversionsfunktionen | |
MAX(ausdruck1,ausdruck2 [,ausdruck3...]) | ermittelt den größten Wert aus der Liste der Ausdrücke |
MIN(ausdruck1,ausdruck2 [,ausdruck3...]) | ermittelt den kleinsten Wert aus der Liste der Ausdrücke |
FRAC(ausdruck) | ermittelt die Nachkommazahl eines numerischen Ausdrucks (Ganzzahlanteil wird 0) |
ROUND(ausdruck [,byteausdruck] | rundet den ausdruck auf byteausdruck Nachkommastellen (Vorgabe = 0) |
ODD(zahl) | prüft auf gerade oder ungerade (ungerade = -1, gerade = 0) |
RND(zahl) | Erweiterung des BASIC-V2-Befehls RND: Bei zahl > 1 werden werden "zufällige", ganzzahlige Werte im Bereich von 1 bis zahl berechnet. |
HEX$(adresse) | erzeugt einen String im Hex-Format aus dem Wert von adresse (im Bereich von 0 bis 65535), ohne vorangestelltes '$' |
DEC(hexstring$) | liefert den Dezimalwert eines aus zwei oder vier Zeichen bestehenden Strings im Hex-Format, ohne vorangestelltes '$' |
Verbindung zur Maschinensprache | |
CALL (parameterliste) | Aufruf eines Maschinenprogramms mit Parametern |
DEF CALL = [adresse] | Definition des CALL-Vektors |
DEEK adresse | Doppelbyte-PEEK, liefert einen Wert von 0 bis 65535 (Low-Byte an 'adresse, High-Byte an adresse+1) |
DOKE adresse,wert | Doppelbyte-POKE, schreibt den 16-Bit-Wert wert (0 bis 65535) nach adresse (Low-Byte an 'adresse, High-Byte an adresse+1) |
VARPTR(variablenname) | liefert die Startadresse zum Inhalt der zugehörigen einfachen Variable (keine Arrays) |
DEF USR (adresse) | Einsprungvektor der Funktion USR(x) auf adresse setzen |
Sonstige Befehle | |
SEC byteausdruck | wartet byteausdruck Sekunden (Ausdruck wird immer als Ganzzahl verwendet, Bereich 0 bis 255) |
LOCK [ON] | verriegelt das Umschalten der Zeichensätze per Shift +C= |
LOCK OFF | erlaubt das Umschalten der Zeichensätze per Tastenkombination |
SWAP var1,var2 | tauscht die Werte zweier Variablen gleichen Typs aus |
Laden und Speichern | |
LOAD | lädt mit ca. 5-facher Geschwindigkeit von Kassette |
LOAD* | entspricht dem üblichen BASIC-Befehl LOAD |
SAVE | speichert mit ca. 5-facher Geschwindigkeit von Kassette |
SAVE* | entspricht dem üblichen BASIC-Befehl SAVE |
Diskettenbefehle[Bearbeiten | Quelltext bearbeiten]
Exbasic Level II enthält Befehle des DOS 5.1:
@ | Fehlerkanal auslesen |
@$[text] | Directory verlustfrei anzeigen |
/dateiname | Laden eines BASIC-Programms |
↑dateiname | Laden und Starten eines BASIC-Programms |
←dateiname | Speichern eines BASIC-Programms |
@diskbefehl | Floppy-Befehl senden |
@Q | DOS 5.1 deaktivieren (aktivieren mit SYS 52224 |
- Anstelle von @ kann dabei auch > benutzt werden.
- Der Befehl @#gerätenummer hat keine Wirkung. Als Gerätenummer wird immer 8 benutzt.
- Der Befehl %dateiname (Laden eines Maschinenspracheprogramms) wird nicht unterstützt.
Anmerkungen[Bearbeiten | Quelltext bearbeiten]
- Mit Taste C= kann das Scrollen eines Listings angehalten werden, mit CTRL wieder normal fortsetzen.
- Beim TRACE-Vorgang kann die Ausgabe mit Taste CTRL stark und mit Taste C= schwächer gebremst werden.
- Wird das Anzeigen des Listing abgebrochen, kann mit den Cursor-Tasten nach oben oder unten das Listing weitergescrollt werden.
- Im Editor kann Rauf- und Runter-Scrollen mit Vorgabe einer Zeilennummer am linken Rand unter Umständen zum Absturz führen.
- Funktionstastenbelegung
KEY ON
setzt beim Modul die KEY- bzw. die Funktionstastenbelegung auf Standard zurück, beim Disketten-Programm aber nicht.
Die Standardbelegung ist (mit←
für RETURN):- F1 -
KEY1,"LIST"
- Auflisten von BASIC-Programmen nach Eingabe von RETURN . - F2 -
KEY2,"AUTO"
- Aufruf des BefehlsAUTO
- für das Starten der automatischen Zeilennummerierung beim Schreiben von BASIC-Programme. - F3 -
KEY3,"DUMP←"
- Zeigt alle benutzten einfache Variablen an. - F4 -
KEY4,"MATRIX←"
- Zeigt alle benutzten indizierten Variablen (Arrays) an. - F5 -
KEY5,"RUN←"
- Startet ein BASIC-Programm - F6 -
KEY6,"GOTO"
- Aufruf des BefehlsGOTO
- F7 -
KEY7,"FIND"
- Aufruf des BefehlsFIND
- F8 -
KEY8,"MEM←"
- Zeigt die aktuelle Speicherbelegung an.
- F1 -
- Abfrage der Befehle vom DOS 5.1:
#$2F = / $8E3E #$3E = > $8E68 #$40 = @ $8E68 #$5E = ↑ $8E44 #$5F = ← $8E97 (+$E159)
- Bei Farbbefehlen (CURSOR, GROUND, BORDER) sind die Farbnummern um 1 höher als bei den POKEs unter BASIC V2 üblich:
1 = schwarz 2 = weiß ... 15 = hellblau 16 = hellgrau
- LOAD/SAVE/MERGE*:
- Die Abfrage auf * geschieht in der Subroutine ab $96AC:
- Subroutinen-Adressen
Save $8F8B (#$80 in $93=Flag für load/verify) Verify $96B6 Load $96B9 Merge $984B
- Der Befehl
BASIC
- setzt den Zeiger für Tastaturdekodierung $028F-0290 auf $EB48 (prüfen auf Shift/Ctrl/C=) zurück
- ruft die Kernal-Routine $E453 zum Setzen der BASIC-Vektoren auf
- setzt den USR-Vektor auf $813E
- und springt zur Interpreterschleife $A7AE
Weblinks[Bearbeiten | Quelltext bearbeiten]
- Artikel
- 64'er 1984/0 S.42-44,46 "Exbasic Level II" (Modul Testbericht von Thomas Krätzig)
- 64'er 1988/04 S.48 ff. "Das Kraftpaket" (Exbasic L.II zum Abtippen)
- Download
- 64'er 8804A D64 bei arnold.c64.org
- Exbasic Level II by Nobody (1983) D64 in CSDb
- T64 und BASIC-Anleitung
- exbasic level ii v64-1 cartridge The Game Archives (Internet Archiv)
- Exbasic Level II v64.1 (1988)(Markt & Technik) CRT bei Planet Emulation
- Exbasic Level II für VIC-20
- Exbasic Level II für VIC-20 The Game Archives (Internet Archiv)
- WimBasic patched exbasic level II for VIC-20
- Dokumentation
- 64'er 06/84 Seiten 42 ff. bei retroport hardware d-e Exbasic Level II
- Thema: Exbasic Level II.zip auf Forum64.de Anleitung als PDF-Datei im Forum64 (entspricht der aus dem 64'er-Artikel)
- Exbasic Level II Docs mit Anleitung bei c64.rulez.org
- Handbuch zu Exbasic Level II für CBM 2000/3000/4000/8000 Interface Age Verlag (Internet Archiv)
- C64-Software Manuals bei Retro Commodore mit "Exbasic Level II Commodore 64"
- PDF: EXBASIC Level II
- Expansions (64'er 7/1984 S.18-19) mit Exbasic Level II Modul inkl. Verkaufspreis
- Sonstiges
- http://www.computerwoche.de/a/optimierte-uebersetzung,1184014 Exbasic Compiler, 1982 von Interface Age
Dieser Artikel wurde Artikel des Monats. |