Vision BASIC

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Vision BASIC
Entwickler Dennis Osborn
Release 2017; 2022
Lizenz Vollversion
Plattform(en) C64
Genre BASIC-Erweiterung
Steuerung
Medien , digitaler Download
Sprache(n) Anleitung Sprache:englisch
Information Es sind verschiedene Versionen zu verschiedenen Preise erschienen.

Vision BASIC wurde vom amerikanischen Programmierer Dennis Osborn entwickelt und 2022 für den Commodore 64 veröffentlicht. Es bildet ein Paket aus einer Entwicklungsumgebung bzw. einem Programmeditor für einen eigenen BASIC-Dialekt sowie einem BASIC-Compiler, der auch das Mischen von BASIC und Assembler unterstützt.

Vision BASIC bietet über 100 neue BASIC-Befehle für Bitmap-Grafiken, Sprites, Zeichen, Sound, Interrupts und Weiteres.

BASIC V2-Programme lassen sich meist nicht ohne Änderungen in Vision BASIC kompilieren, da letzterem unter anderem einige Fließkommabefehle fehlen und mathematische Ausdrücke strikt von links nach rechts ausgewertet werden.


Beschreibung[Bearbeiten | Quelltext bearbeiten]

Folgende technische Anforderungen hat "Vision BASIC":[1]

Anforderungen[Bearbeiten | Quelltext bearbeiten]

  • Ein C64 oder C128 oder eine geeignete C64-Emulation (wie VICE).
  • Zusätzliche 256 KByte RAM (empfohlen: 512 KByte oder mehr) über eine REU oder eine SuperCPU. Dieser zusätzliche RAM ist jedoch für die Entwicklungsumgebung vorgesehen. Kompilierte Programme laufen auf einem Standard-C64 ohne zusätzlichen RAM, es sei denn, das Programm benötigt tatsächlich eine REU.
  • Ein Peripheriegerät, wie Diskettenlaufwerk, das die bereitgestellten Medien lesen kann.
  • Zur Verbesserung der Kompilierungsgeschwindigkeit empfohlen, aber nicht nötig: Ein Turbo Chameleon 64, eine SuperCPU, 1541 Ultimate oder Ultimate 64.

Versionen[Bearbeiten | Quelltext bearbeiten]

Die folgenden Versionen von "Vision BASIC" sind erschienen. Die aktuelle Versionsnummer ist 1.1.2:

  • Vision BASIC 1.1: Basic Paket (59 U$, auf 5,25"-Diskette, USB-Speicher und digitaler Download, sowie 352-seitiges Handbuch)
  • Vision BASIC 1.1+: NeoRAM Paket (110 U$, mit 1MB-NeoRAM-Steckmodul - ein GeoRAM-Klon -, sowie auf 5,25"-Diskette, USB-Speicher und digitaler Download, sowie 352-seitiges Handbuch)
  • Vision BASIC 1.1e: 300-seitiges Handbuch + digitaler Download (45 U$, mit Versand, empfohlen für ausländische Besteller!)

Hinweis: Zu gewissen Feiertagen und Jahreszeiten erscheinen zeitlich begrenzte Sonderangebote im offiziellen Online-Shop, sowie der Sonderposten für etwa 20 U$ "damage set" (beschädigte Ware)!

Startbildschirm[Bearbeiten | Quelltext bearbeiten]

Wenn man "Vision BASIC" über einer REU startet, so erscheint folgender Startbildschirm mit grünen Hintergrund und hellgrünen Rahmen- und Textfarbe.

            VISION BASIC 1.0

   COPYRIGHT 2017 BY DENNIS M. OSBORN

        96K FREE FORE SOURCE CODE

XRAM: REU - 6 OF 256 BANKS USED
MODE: FULL

READY.

Neue Befehle[Bearbeiten | Quelltext bearbeiten]

Diese neue BASIC-Befehle enthält "Vision BASIC":[2]

Funktionstastenbelegung[Bearbeiten | Quelltext bearbeiten]

  • F1  :
  • F2  :
  • F3  :
  • F4  :
  • F5  : LISTER
  • F6  : VLIST
  • F7  :
  • F8  :

Allgemeine[Bearbeiten | Quelltext bearbeiten]

  • ASSEM - schaltet in den Assembler-Modus.
  • BASIC - schaltet in den BASIC-Modus.
  • BANK[wert] - weist einer Bank (0 bis 9) ein Programm oder Programmteil zu.
  • BUTTON(PORT,[wert]) - liefert den Rückmeldewert eines Buttons eines Eingabegerätes z.B. Joystick.
  • COMPARE [Variable1], [Variable2] - vergleicht 2 Variablen oder Ausdrücke miteinander
  • CLOCK[wert] - setzt die interne Systemuhr; Beispiel: CLOCK0 - setzt die Uhr auf 0.
  • CLS [poke-code [, color]] - löscht bzw. überschreibt den Bildschirm mit einem beliebigen Zeichen von 0 bis 255 (Standard: Leerzeichen mit dem Wert 32) und einer Textfarbe von 0 bis 15 (Standard: keine Farbe)
  • DEBUG [0|1]
  • DELETE [startzeile]-[endzeile] - löschte einen Zeilenbereich, ohne Parameter funktioniert es wie NEW!
  • DECIMAL [Variable1], [Variable2], [...] -
  • DESC[zeile],"text" - fügt 3 REM-Zeilen ab Zeilennr. mit der text-Beschreibung ein.
  • DO - erweitert die Schleife
  • ELSE - erweitert IF ... THEN ... ELSE ...
  • ERROR - zeigt einen Fehler an, wenn dieser vorhanden ist.
  • FAST - beschleunigt einige Befehle
  • SLOW - schlatet zurück auf die normale C64-Geschwindigkeit.
  • FILE - ruft ein Menü auf, indem folgende Änderungen für "Vision BASIC" vorgenommen werden können: Memory (Übersicht Speicherbelegung), Banks (Übersicht und Veränderung der Bank-Belegung), Details (Beschreibungen der Bank) und Settings (allgemeine Einstellungen von "Vision BASIC" und aktuelles Programm).
  • KEYPRESS - wartet auf einen beliebigen Tastendruck
  • KEYPRESS"taste..." - wartet auf einen Tastendruck mit d. angegebene(n) Taste(n).
  • QUIT - verlässt "Vision BASIC" nach BASIC 2.0, dabei verändert sich Hintergrund-, Rahmen- und Textfarbe zu den Startfarben des C64. Reaktivierung von "Vision BASIC" mit SYS57000.
  • RENUM startzeile - endzeile, neue_startzeile [, schrittweite] - Nummiert den angegebenen Zeilenbereich eines Programms neu durch; wird keine Schrittweite angegeben, so ist diese 10.
  • LISTER[zeilennr] - zeigt eine Bildschirmseite des BASIC-Listings ab Zeilenummer an.
  • VLIST - zeigt auf dem Bildschirm alle Variablen im Speicher an.
  • LOCAL -
  • GLOBAL -
  • SEND [variable]
  • RANDOM [wert] - Initalisiert den Zufallsgenerator für die RND-Funktion.
  • STRINGS [wert] -
  • LOC [Spalte], [Zeile]; ["Zeichenkette"|Zeichenvariable$] [; [...]] - zeigt den angegebenen Text an Spalte und Zeile auf dem Bildschirm an.
  • PAUSE [0],[Zeit] - weist dem Programm eine Pause von x Sekunden zu oder ohne Parameter eine beliebige.
  • PROC [Prozedurname] - Erstellt eine Prozedur bzw. ein "Vision BASIC"-Unterprogramm. Diese wird mit einem RETURN beendet.
  • TAG <labelname> - definiert ein Label
  • [assembler code] - baut einen Assembler-Code in die BASIC-Zeile ein (siehe Vision_BASIC#Einbetten_von_Maschinensprache).

Spezielle[Bearbeiten | Quelltext bearbeiten]

  • ADD x=x+dx
  • SUB x=x-dx
  • COMP [wert1],[wert2]
  • DEC [variable] - erniedrigt den aktuellen Variablenwert um 1
  • INC [variable] - erhöht den aktuellen Variablenwert um 1

Zeichen[Bearbeiten | Quelltext bearbeiten]

  • CHARTPAT[zeichen],[zeichensatz] - weist einen zu definieren Zeichen die aktuelle Nummer zu.
  • CODE./+* - Definiert eine Zeichen-Zeile; pro Zeile stehen 4 Zeichen zur Verfügung; pro Zeichen werden 8 CODE-Zeilen benötigt.
  • CHARSET[zeichensatz] -
  • COPYSET[zeichensatz][,wert] - kopiert Zeichen mit 0 Grafikzeichen und Grossschrift und mit 1 Gross-/Kleinschrift
  • COLORS [textfarbe],[Rahmenfarbe],[Hintergrund],[farbe1],[farbe2],[farbe3] - weist Zeichen, Hintergrund und Rahmen, sowie die 3 Extended-Color-Farben eine neue aktuelle Farbe von 0 bis 15 zu. Je nachdem was benötigt wird, können auch die hinteren Parameter entfallen.
  • EXTENDED on[, farbe1, farbe2, farbe3] - schaltete den Extendend Grafikmodus an. Weiterhin können die 3 zusätzlichen Farben eingestellt werden.
  • MULTI on[, mfarbe1, mfarbe2] - schaltete den Multicolor-Farbmodus an. Weiterhin können die 2 zusätzlichen Multicolorfarben eingestellt werden.
  • NORMAL [0|1] - schaltet auf den normalen Text-Bildschirm um.
  • CATCH [rasterzeile]] - Wartet auf die Rasterzeile 0 bis 255
  • LOWERCASE [1] - schaltet auf Groß-/Kleinschrift um; mit 1 wird das Umschalten des Zeichensatzes per Tastatur deaktivert.
  • UPPERCASE [1] - schaltet auf Großschrift/Grafikzeichen um; mit 1 wird das Umschalten des Zeichensatzes per Tastatur deaktivert.
  • PANX [bit], [0|1] - mit bit = 0 bis 3; mit 0 = 38 Spalten und 1 = 40 Spalten.
  • PANY [bit], [0|1] - mit bit = 0 bis 3; mit 0 = 24 Zeilen und 1 = 25 Zeilen. (POKE 2384,0 deaktiviert PANX und PANY)
  • VIDLOC [bildschirmnr], [ausgabebildschirm], [zeichensatz], [0|l]

Sprite[Bearbeiten | Quelltext bearbeiten]

  • MOBCLR -löscht alle Sprite-Zuordnungen
  • MOBPAT [wert] - weist einem zu definieren Sprite die aktuelle Nummer zu
  • CODEabcabcabcabc: - Definiert eine Sprite-Zeile mit den Farben A,B,C; pro Zeile stehen 12 Buchstaben zur Verfügung mit Abschluss :; pro Sprite werden 21-CODE-Zeilen benötigt.
  • MOBSET[wert1],wert2] -
  • MOB [1],[2],[3],[4],[5],[6] - weist einen Sprite alle Parameter zu, insbesonder die X- und Y-Position.
  • ALLMOBS [X0],[Y0],... - weist allen 8 Sprites die X- und Y-Position zu.
  • SHAPE [wert] - Ruft das Sprite mit der Nummer auf.
  • MOBCOL [farbe1],[farbe2],[farbe3] - Sprite-Farben (auch Multicolor)
  • MOBEXP [wert1],[wert2] - Sprite-Expansion mit 1 vergrößert und mit 0 normal.
  • COLLISION[wert] -
  • DETECT[wert] -
  • SPRCLR - löscht alle Sprites.
  • SPRITECLR

Sound[Bearbeiten | Quelltext bearbeiten]

  • VOICE [wert] - bestimmt die Stimme 1-3. Muss als erster Befehl für die Sounderzeugung aufgerufen werden!
  • FREQ [wert] - bestimmt die Frequenz
  • PULSE [wert] - bestimmt den Pulse
  • ADSR [wert1],[wert2],[wert3],[wert4] - bestimmt die Werte für Hüllkurve ADSR
  • WAVE [wert1],[wert2] - bestimmt den Wellentyp: 1 = Dreieck, 2 = Sägezahn, 4 = Puls and 8 = Geräusch
  • VOL [wert] - bestimmt die Lautstärke 0 bis 15
  • PLAY.[stimme],[tempo],[wert3],[wert4],"Zeichenkette" - spielt einen Ton
  • PLAY.[stimme],[tempo],"Zeichenkette" - spielt einen Tonfolge
  • PLAYSET.[volume],[tempo],[beats],[start],[end] - Legt Einstellungen fest
  • PLAYPAUSE.yes? - hält die Musik an mit 1 oder mit 0 für Wiederholung,
  • PLAYSTOP - hält die Musik an und die Lautstärke wird auf 0 gesetzt.
  • PLAYCLR - löscht die aktuelle Musik aus dem Speicher
  • SIDCLR - löscht den programmierten SID.
Ein Musik-Demo
[3]
10 clr:cls
20 keypress
30 play.1,0,">bagabbb2aaa2b>dd2"
40 play.1,1,"<bagabbbbaabag1l2"
50 keypress

Erweiterte BASIC-Befehle[Bearbeiten | Quelltext bearbeiten]

Diese BASIC 2.0-Befehle wurden erweitert oder modifiziert:

  • CHR$ (mehrere Parameter möglich) - Beispiel: CHRS$(96,20)
  • GOSUB - kann nun auch für Tags und Labels genutzt werden; Beispiel: GOSUB DEMO
  • GOTO - kann nun auch für Tags und Labels genutzt werden; Beispiel: GOTO MORE
  • LET
  • IF-THEN-ELSE (diese Befehlsreihe kann auch auf mehrere Zeilen verteilt werden!)
  • PEEK (mehrere Parameter möglich) - Beispiel: PEEK(53280,2)
  • POKE (mehrere Parameter möglich) - Beispiel: POKE 1065,8,5,12,12,15," C64-WIKI"
  • SAVE "file",<device_number>,<device_number2|address1>,<address2> - speichert Maschinensprachecode oder definierte Speicherbereiche ab; Beispiel: SAVE "C64WIKI-DATAS",8,49125,50000

Einbetten von Maschinensprache[Bearbeiten | Quelltext bearbeiten]

"Vision BASIC" erlaubt das Einbetten von Assemblercode bzw. Maschinensprache.

  • Wenn Maschinensprache in einer BASIC-Zeile genutzt wird, müssen eckige Klammern für die mnemonics benutzt werden: [ ...assembler... ]
100 REM *** MACHINE CODE ***
200 [JMP C000]
  • Wichtig ist nur die offene eckige Klammer [ !
130 [LDA#7: STA646 :PRINT"YELLOW TEXT!"

Weiterhin kann der integrierte Maschinensprachemonitor genutzt werden:

  • START address - Die Startadresse des Maschinenspracheprogrammes. Es sollte als erster Befehl genutzt werden.
  • Diese reservierten Befehle können nur im Maschinensprachemonitor genutzt werden (allerdings nicht als Variablen- oder Tag-Name!): ADD< SUBTRACT, BYTES, COMPARE, DEBUG, DOUBLE, GOTO, GOSUB, HALF, HALT, LOCAL, GLOBAL, MODULE, PROC, RASTER, RETURN, REM, RESUME, START, STARTINT, STRINGS, TAG, VARIABLES, VERSION.
  • Tags und Variablen können Werte und Speicheradressen ersetzen.
  • ; - Das Semikolon wird für Anmerkungen im Maschinencode genutzt.

Tipps[Bearbeiten | Quelltext bearbeiten]

Unterschiede zu BASIC V2 sind:

  • Schleifen mit FOR-TO­-STEP-NEXT und DO funktionieren nur mit ganzzahligen Variablen.
  • Zeichenketten und Zeichenkettenvariablen können nicht aus Vision BASIC-Unterprogrammen zurückgegeben werden.
  • Bei Verwendung der neuen Soundbefehle FREQ, PULSE, ADSR und WAVE müssen Sie zunächst eine aktuelle VOICE festlegen, bevor Sie diese aufrufen können.
  • Vision BASIC benutzt keine Fließkommazahlen, sondern Festkommazahlen mit drei Bytes für den Ganzzahlanteil und drei Bytes für die Nachkommastellen. Daraus ergibt sich der Wertebereich ±16.777.215,9999999.
  • Klammern in mathematischen Ausdrücken wie A = 1+ ((2+5) *9) werden nicht unterstützt, stattdessen muss der Ausdruck umgeschrieben werden: A = 2+5 : A = A*9 : A = A+1
  • Alle mathematischen Ausdrücke werden streng von links nach rechts ausgewertet, es gibt keine Operator-Rangfolge.
  • Die Dateibefehle sind für die Gerätediskette optimiert (optional 8 oder 9 bis 12).

Folgende BASIC-Befehle sind nicht verfügbar[Bearbeiten | Quelltext bearbeiten]

Diese folgenden BASIC 2.0-Befehle sind unter "Vision BASIC" nicht verfügbar:

Beispiel[Bearbeiten | Quelltext bearbeiten]

Ein kleines Beispielprogramm in "Vision BASIC" geschrieben:[4]

  0 clock0
  1 clr
  2 random
  5 dim a(4),b(4)
  6 decimal sr, ti
 10 colors 1,0,0:cls
 20 a(0)=-2:a(1)=-80:a(2)=2:a(3)=80
 22 b(0)=-1:b(1)=-40:b(2)=1:b(3)=40
 30 sc=1105
 31 sr=rnd*10:a=sr*80+sc
 33 sr=rnd*10:a=sr*2+a
 40 [lda #160:ldx #0]
 41 [sta 1064,x:sta1304,x:sta1544,x:sta1784,x:inx:cpx#240:bne41:lda#32:ldx#0]
 42 [sta1984,x:inx:cpx#40:bne42]
 43 fori=0to23:p=i*40+1063:pokep,32:next
100 poke a,4
110 j=rnd(2)and3:let x=j
112 compare s,sm:[bcc120]:let sm=s,fi=b
120 pb=peek(a,a(j))
122 compare pb,160:[bne130
123 aa=b(j):add a=a+aa:pokea,32
125 :      :add a=a+aa:pokea,j
127 let b=a:incs
129 goto110
130 inc j:j=j and3
131 compare j,x:[bne120
140 j=peek(a)
141 poke a,32
142 dec s
143 comp j,4:[bcs150
144 a=a-a(j):goto110
150 pokea,1:pokefi,2
160 ti=clock/60:printti

Programme[Bearbeiten | Quelltext bearbeiten]

Folgende Programme wurden in "Vision BASIC" für den C64 entwickelt:[5]

Spiele


Weblinks[Bearbeiten | Quelltext bearbeiten]

Videos[Bearbeiten | Quelltext bearbeiten]

Quellen[Bearbeiten | Quelltext bearbeiten]