BASIC-BOSS

From C64-Wiki
Jump to: navigation, search
Stub This article is very short and not very detailed. Please help to improve it.
GEOS
Start screen.
Developer Thilo Herrmann
Company
Publisher Markt & Technik Verlag
Release 1988
Licence Full version
Platform C64
Genre BASIC-Compiler
Operation Icon tastatur.png
Media Icon disk525 1.png
Language(s) Language German Language:english
Information 64'er Extra Nr.11

BASIC-BOSS is a 2 pass BASIC compiler, which was programmed by Thilo Herrmann in 1988. The compilation is real 6502 machine language code, not a compressed programming language code. The compiled BASIC programs run averaged faster than the orginal BASIC code. How many times faster the compilation is, decide the program code of a programmer.

BASIC-BOSS used the syntax of BASIC V2. In the standard compilation is speeding up a BASIC program a little bit more, because some BASIC commands are used without the BASIC interpreter of the C64. The power of BASIC-BOSS is to use special compiler syntaxes, which optimize the BASIC program.

Contents

[edit] New Variables

(thumbnail)
64'er Extra Nr.11: BASIC-BOSS.

One of the advantages of BASIC-BOSS are the new variables:

  • Boolean
  • Byte (8 bit integer without algebraic sign)
  • Integer (16 bit integer with algebraic sign)
  • Word (16 bit integer without algebraic sign)
  • Real (equates the normal float)
  • String (equates the normal string)

Every calculation in BASIC is running by float. This method vaste a lot of time. The new variables allows easy additions with byte, integer or word by using a few assembler commands. This new method speed up the calculations. By using variables for increasing from 0 to 100 it should be declared this variable as byte.

This code example can be used in BASIC V2 (slowly) or as BASIC-BOSS compilation (faster machine code):

 10 REM@ £BYTE I=FAST:£FASTFOR
 20 FOR I=0 TO 255:POKE 1024+I,I:NEXT I

This BASIC program is the same program example after compiling:

 10 REM@ £BYTE I=FAST,SC(=1024:£FASTFOR
 15 DIM SC(1000)
 20 FOR I=0 TO 255:SC(I)=I:NEXT I


[edit] BASIC-BOSS syntaxes

The BASIC-BOSS commands are containing the char "£", "" or "@". This shows the coder and the compiler which line contain a BASIC-BOSS command.

[edit] BASIC-BOSS commands

  • £ALLRAM / £BASICRAM
First you must declaire, if the whole RAM is used or only the BASIC-RAM ($0801-$9FFF, the famous 38911 bytes).
  • £ROUTSTART
Start adress in hexadecimal of the compilation, which is start with SYS or JSR/JMP - example: '£ROUTSTART $2000'.
  • £HEAPEND
Declaration for the RAM aera (end) of the string heap in hexadecimal. If the RAM aera too small or detected BASIC-BOSS a conflict the error message "HEAPSTART OVER HEAPEND" is shwon by compiling.
- Example: £HEAPEND $7FFF
  • £FASTFOR
Activate and a faster compilation of FOR NEXT loops. Attention: Every FOR must excat following a NEXT command for using this compiler command.
  • £FASTARRAY
Switched off the aera check for arrays. That means, that no error message appears if the array index is outside the dimensions.
  • REM@
For compiling REM remakes.
  • £IGNORE / £USE
The BASIC code between £IGNORE and £USE is ignored by compiling. Examples:
- REM@ £IGNORE - ignored REM lines
- REM@ £USE
  • ←LOAD
For loading program datas like music, graphics or sprites with a KERNAL-LOAD.
Syntax: ←LOAD,"<File-Name>",<Geräte-Nr.>,<Startadresse>
Example: ←LOAD,"MUSIK",8,4096 - music datas are loading on RAM adress $1000 by using device adress 8 for a disk drive.
Under Construction Site / Sign
Language German TO Language:english
This article has recently been imported from the German C64-Wiki and not been translated yet. Please come back at a later time to read the English version of this article or help us.


[edit] Changing against BASIC 2.0

Man möchte in der Regel das sich ein kompiliertes Programm, außer das es schneller ausgeführt wird, genau wie die unkompilierte Version verhält. Es gibt allerdings ein paar Kleinigkeiten, die sich anders Verhalten. Da gibt es zum einen Erweiterungen, wie die Möglichkeit ganzzahlige Werte mit einem vorangestellten Dollarzeichen auch hexadezimal anzugeben (z.B. $1337) und zum anderen zusätzliche Befehle und Funktionen. Ebenfalls verändert ist die interne Zeichenkettenverwaltung, was sich in einer deutlich schnelleren „Garbage Collection“ niederschlägt, also wenn der Speicher aufgeräumt wird, um Platz zu schaffen und alte, nicht mehr benutzte String-Daten zu entsorgen.

Die zusätzlichen Möglichkeiten kann man einfach ignorieren/nicht verwenden, um die Kompatibilität mit BASIC 2.0 zu wahren. Allerdings verhält sich das Kompilat an einigen Stellen auch anders als der interpretierte Code. Beispiele:

  • Arrays müssen in Zeilen, bevor sie verwendet werden, mit DIM angelegt werden und die Dimensionen müssen zur Übersetzungszeit feststehen, dürfen also keine Variablen sein, außer sie wurden mit £CONSTANT als Konstanten deklariert (womit sie dann keine Variablen mehr sind, aber man kann auf diese Weise symbolische Namen vergeben und die Dimension(en) von mehreren zusammengehörenden Arrays an einer Stelle anpassen).
  • Die Funktion ASC() liefert bei einer leeren Zeichenkette 0 statt einen ?ILLEGAL QUANTITY ERROR auszulösen.
  • FRE(X) liefert auch bei einem Wert größer 32767 den korrekten Wert und keine negative Zahl die man erst umrechnen muss.
  • LIST, NEW, und STOP verhalten sich im Kompilat wie der END-Befehl.
  • GOSUBRETURN und FORNEXT können in einer bestimmten Kombination zum Absturz des Kompilats führen, weil RETURN in den Maschinenbefehl RTS übersetzt wird, der die Rücksprungadresse auf dem Stack erwartet, FOR-Schleifen dort aber auch Informationen ablegen. Das bedeutet eine FOR-Schleife muss komplett abgearbeitet sein, bevor ein RETURN erfolgen darf, denn sonst interpretiert RTS die FOR-Daten als Rücksprungadresse. Diese ”gefährliche” Befehlsabfolge sollte in sauber programmierten BASIC-Programmen aber sowieso nicht vorkommen. Verlassen kann man sich darauf jedoch nicht, da der BASIC-Interpreter sehr gutmütig mit offenen FOR-NEXT- sowie GOSUB-RETURN-Strukturen umgeht und implizit mit einem RETURN oder FOR für eine bestimmte Schleifenvariable alle inneren FOR-NEXT-Schleifen still und ohne Nebenwirkung (hinsichtlich Stapelüberlauf) beseitigt. Im folgenden Beispiel würde der Interpreter mit dem RETURN alle offenen FOR-NEXT des Unterprogramm einfach implizit schließen. Das Programm springt aus der Schleife, bevor sie vollständig abgearbeitet ist und kehrt zum aufrufenden Programmteil "vorzeitig" zurück. Ein Beispiel mit einer logisch ”offen” gelassen Schleife zeigt die Situation, die für den Compiler vermieden werden sollte:
  10 GOSUB 20:END
  20 FOR I=1 TO 10
  30 GOTO 50
  40 NEXT I
  50 RETURN

[edit] Versions

  • In Germany was the last official version of BASIC-BOSS V2.4 published by Markt & Technik in 64'er Extra Nr.11 vertrieben. [1]
  • It exists also an inoffical version 2.42 of BASIC-BOSS compiler from the year 2011.

[edit] Links

[edit] References

  1. : BASIC-BOSS Handbuch (Manual), Markt & Technik Verlag (1988) Language German
Personal tools
In other languages