Exbasic Level II

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Exbasic Level II
Exbasic Level II Modul Einschaltmeldung
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 Icon tastatur.png
Medien Icon cartridge.png Icon disk525.png Icon kassette.png
Sprache(n) Sprache:englisch, Anleitung Sprache:deutsch

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]

Exbasic Level II Diskettenversion Einschaltmeldung und Befehlsausgabe

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 Befehls AUTO - 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 Befehls GOTO
    • F7  - KEY7,"FIND" - Aufruf des Befehls FIND
    • F8  - KEY8,"MEM←" - Zeigt die aktuelle Speicherbelegung an.


  • Abfrage der Befehle vom DOS 5.1:
#$2F = /    $8E3E   
#$3E = >    $8E68
#$40 = @    $8E68
#$5E = ↑    $8E44
#$5F = ←    $8E97 (+$E159)
 1 = schwarz
 2 = weiß
...
15 = hellblau
16 = hellgrau


  • LOAD/SAVE/MERGE*:
Die Abfrage auf * geschieht in der Subroutine ab $96AC:
96AC   C9 AC      CMP #$AC
96AE   D0 05      BNE $96B5
96B0   20 73 00   JSR $0073
96B3   A9 00      LDA #$00
96B5   60         RTS
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
Download
Exbasic Level II für VIC-20
Dokumentation
Sonstiges
Artikel des Monats.gif Dieser Artikel wurde Artikel des Monats.