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. Dieses Entwicklungstool bietet über 100 neue BASIC-Befehle für Bitmap-Grafiken, Sprites, Zeichen, Sound, Interrupts und vieles mehr. Die Programmierumgebung umfasst Funktionen wie einen Speichermanager, einen verbesserten Programmeditor, vereinfachte Festplattenbefehle, benutzerdefinierte Befehle und vollständige Kompatibilität mit Emulatoren wie VICE und THEC64

Alle Vision BASIC-Programme werden zur Ausführung in extrem schnelle, eigenständige Maschinensprache kompiliert, und Assemblersprache kann nahtlos mit BASIC-Code gemischt werden, um eine noch größere Geschwindigkeitssteigerung zu erzielen.


Beschreibung[Bearbeiten | Quelltext bearbeiten]

Folgende technische Anforderungen muss Ihr C64 erfüllen, um "Vision BASIC" nutzen zu können:[1]

Anforderungen[Bearbeiten | Quelltext bearbeiten]

  • Ein C64 oder C128 oder eine geeignete C64-Emulation (wie VICE).
  • Zusätzliche 256 KB RAM in Form einer REU oder einer SuperCPU mit zusätzlichem RAM. 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.
  • Gute Programmierkenntnisse in BASIC 2.0 und des C64 selbst.

Empfohlen[Bearbeiten | Quelltext bearbeiten]


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)

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]

  • 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)
  • COLORS [textfarbe],[farbe1],[farbe2] - weist Zeichen, Hintergrund und Rahmen eine neue aktuelle Farbe von 0 bis 15 zu.
  • DEBUG
  • 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 ...
  • 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.
  • LISTER[zeilennr] - zeigt eine Bildschirmseite des BASIC-Listings ab Zeilenummer an.
  • VLIST - zeigt auf dem Bildschirm folgendes an:
  • LOCAL -
  • GLOBAL -
  • NORMAL -
  • SEND [variable]
  • RANDOM -
  • STRINGS [wert] -
  • UPPERCASE [wert] - aktiviert den Grafik-/Zeichen- oder Groß-/Kleinschrift-Modus bzw. verändert den Zeichensatz 0 und 1.
  • 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#Einbau_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[zeichennr.],[wert] - 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.

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


Diese BASIC-Befehle wurden erweitert:

  • 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

Einbau von Maschinensprache[Bearbeiten | Quelltext bearbeiten]

"Vision BASIC" erlaubt es "Vision BASIC"-Befehle und Assemblercode bzw. Maschinensprache miteinander direkt zu vermischen.

  • 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.0 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.
  • Der Maximalwert für Variablen in Vision BASIC beträgt: ±16.777.215
  • Klammern sind in mathematischen Ausdrücken wie A = 1+ ((2*5) *9) nicht zulässig. Wenn Sie diese verwenden möchten, müssen Sie sie wie folgt schreiben: A = 2*5: A = A*9 : A = A+1
  • Alle mathematischen Ausdrücke werden streng von links nach rechts ausgewertet!
  • 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]

Quellen[Bearbeiten | Quelltext bearbeiten]