Blitz! (BASIC-Compiler)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Blitz!
Blitz! Hauptmenü
Entwickler Peter Schwartz, Bob Skyles (Handbuch)
Verleger Skyles Electric Works Inc., Supersoft
Release 1984
Lizenz Vollversion
Plattform(en) C64, C128, CBM 8032
Genre Programmierung
Steuerung Icon tastatur.png
Medien Icon disk525 1.png
Sprache(n) Programm: Sprache:englisch
Information aka Skyles-Blitz, Blitz 64

Beschreibung[Bearbeiten | Quelltext bearbeiten]

Blitz! (bis auf den Namen identisch mit Austro-Speed 88) ist ein 2-Pass-Compiler für den Commodore 64, der BASIC-Programme in P-Code übersetzt. Die Ergebnisdatei beinhaltet zusätzlich zum P-Code eine 6 kBytes große Runtime, die den P-Code ausführen kann.

Blitz! führt beim Kompilieren folgende Optimierungen durch (genaueres siehe Compiler):

  • Variablen und Sprungziele werden vom Code direkt über ihre Stelle im Speicher referenziert; der Lookup über den Variablennamen bzw. Zeilennummer entfällt.
  • Zahlenkonstanten werden in ihre native Integer- bzw. Floating Point-Darstellung konvertiert und nicht als PETSCII gespeichert, was Geschwindigkeit bringt und Speicherplatz spart.
  • Integer-Berechnungen werden als solche ausgeführt und nicht der Umweg über die langsamen Floating Point-Routinen gemacht.
  • Ausdrücke werden in umgekehrte polnische Notation umgeformt, was Zwischenwerte einspart.

Interessanterweise ist Blitz! in BASIC geschrieben und mit sich selbst kompiliert worden; nur eine relativ kleine in Assembler geschriebene Hilfsroutine wird beim Einlesen des Eingabeprogramms genutzt.

Laut der Eigenwerbung des Herstellers ist BLITZ! schneller als PETSPEED 64 und bis zu 20-mal schneller als BASIC V2.[1]

Hinweis: Das heutige Blitz BASIC, das Anfang der 1990er Jahre für den Amiga entwickelt wurde, und später ebenfalls für den PC umgesetzt wurde, hat mit diesem BASIC-Compiler gar nichts gemein!

Nutzung[Bearbeiten | Quelltext bearbeiten]

Die Benutzung ist relativ simpel; im Gegensatz zu vielen anderen Compilern gibt es kaum Einstellungsmöglichkeiten. Beim Kompilieren wird eine weitere Datei erzeugt, in der sich die Zuordnung "Speicherstelle (des P-Codes) zu Original-BASIC-Zeilennummer" befindet. Mit Hilfe dieser Datei lassen sich Fehlermeldungen im Kompilat wieder dem originalen BASIC-Programm zuordnen. Außerdem lässt sich mit der Datei ein Eindruck gewinnen, welche BASIC-Befehle wieviele Bytes als P-Code beanspruchen.

Hinter den Compile-Optionen mit mehreren Laufwerken verbirgt sich auch die Option, mehrere Dateien nacheinander zu übersetzen; sie werden dann so erzeugt, dass die Kompilate sich gegenseitig unter Beibehaltung der BASIC-Variablen laden können (Overlays).

Optimierung[Bearbeiten | Quelltext bearbeiten]

Ein großer Zugewinn an Geschwindigkeit ergibt sich durch die echten Integer-Routinen. Diese werden jedoch nur genutzt, wenn die Variablen auch als Integer (%) gekennzeichnet sind. Das gilt auch für die Zählvariablen in FOR-Schleifen; allerdings ist dabei zu beachten, dass reines BASIC Integer-Variablen nicht als Zählvariablen erlaubt.

Platzbedarf[Bearbeiten | Quelltext bearbeiten]

Der Platzbedarf des erzeugten P-Codes ist speziell bei größeren Programmen meist geringer als für das entsprechende BASIC-Programm, da z.B. Zahlenkonstanten, die von BASIC V2 als PETSCII gespeichert werden, von Blitz! im nativen Format gespeichert werden. Trotzdem kann es vorkommen, dass ein Eingabeprogramm wegen Platzproblemen nicht von Blitz! kompiliert werden kann, was meist daran liegt, dass die Länge des erzeugten P-Codes von Blitz! intern auf etwa 2^15=32768 Bytes limitiert ist. Eine Abschätzung des Platzbedarfs verschiedener Parametertypen ist im folgenden Code-Fragment zu sehen.

q=49152       : rem 7 bytes (im p-code)
poke128,255   : rem 5 bytes
poke512,128   : rem 6 bytes
poke49152,64  : rem 9 bytes
pokeq,12      : rem 3 bytes
sys128        : rem 4 bytes
sys512        : rem 5 bytes
sys49152      : rem 8 bytes
sysq          : rem 3 bytes
print"end"    : rem 5 bytes

Meinung[Bearbeiten | Quelltext bearbeiten]

1570: "Simples, aber schnelles und relativ robustes Tool. Leider wird keine Übersetzung in Maschinencode angeboten, allerdings ist der P-Code auch schon ziemlich schnell und hat weniger Platzprobleme. Echt schade ist, dass es anders als z.B. beim Basic-Boss keine Möglichkeit gibt, Integer-Variablen per Compiler-Direktive als Integer zu deklarieren. Damit ist man gezwungen, im Code überall Prozentzeichen einzustreuen, was das Originalprogramm vergrößert und verlangsamt und im Falle von Zählvariablen dafür sorgt, dass das Programm unkompiliert gar nicht mehr ausführbar ist. Dafür ist wiederum schön, dass es Blitz! auch als PC-Version gibt und Decompiler verfügbar sind."

Weblinks[Bearbeiten | Quelltext bearbeiten]


Quellen[Bearbeiten | Quelltext bearbeiten]

  1. https://www.tpug.ca/tpug-media/tpugmag/TPUG_Issue_04_1984_Jun.pdf TPUG magazine - The offical publication for the world's largest international Commodore users group; June 1984, S.3 Sprache:englisch