Weltsprache für den Spectrum: »C« im Test

Basic und Assembler sind die meistverwendeten Sprachen beim Spectrum. Aber für C spricht unter anderem die leichte Übertragbarkeit auf andere Computer.

C gilt als Weltsprache für Computer. Basic, Assembler, Pascal, Forth, Prolog unterscheiden sich von den Versionen für »größere« Computer manchmal durch Kleinigkeiten, oft aber auch ganz erheblich. Wer sich mit Mühe in eine dieser Sprachen eingearbeitet hat, erlebt beim Umstieg auf einen anderen Computer leicht eine schlimme Überraschung: Manchmal gleicht sich nur der Name.

Anders bei C. An die Vorgaben der beiden Väter von C, Kernighan und Ritchie, halten sich nahezu alle Programmierer, auch die Entwickler von HiSoft-C.

Im Lieferumfang sind ein Handbuch, leider in Englisch, und eine Kassette enthalten. Die Kassette enthält den Compiler, und die Bibliotheken STDIO.H und STDIO.LIB. In solchen Bibliotheken liegen die computerspezifischen Programmteile eines C-Compilers.

Nach dem Laden von der Kassette läßt sich eine Kopie auf ein Microdrive-Cartridge ablegen. Das langwierige Laden von der Kassette erspart man sich dann für die Zukunft.

Die Syntax ist bis auf zwei zusätzliche Befehle voll kompatibel. Unterschiede zu C-Compilern auf größeren Computern sind fast ausschließlich durch die Speicherkapazität des Spectrum bedingt.

Das zeigt sich bei der Rechengenauigkeit. In HiSoft-C gibt es zum Beispiel keine Fließkomma-Zahlen. Weitere, nicht so gravierende Beschränkungen, sind: Integer-Definitionen INT, LONG und SHORT ergeben keine unterschiedliche Genauigkeiten, sondern arbeiten alle mit zwei Byte. Sie sind also syntaktisch im Sprachumfang enthalten, stellen aber nicht deren Zahlenbereich zur Verfügung. Darüber hinaus wurde für die TYPE-Umwandlung, der neue Operator CASI implementiert. Eine Erweiterung, die viele Spectrum-Benutzer hoch schätzen werden, ist der Befehl INLINE. Damit läßt sich problemlos Maschinencode einfügen.. Aber das sind keine wirklichen Einschränkungen für den Einstieg in die C-Sprache. Sie behindert auch nicht das Hauptmerkmal von C, die Portabilität der Programme auf andere Computer.

Wie auch bei Versionen auf anderen Computern, fehlt nicht der Bildschirmorientierte Editor. Er krankt leider an ein paar kleinen Fehlern: Das Kommando »P(ut)«, zum Sichern des Quellcodes, ignoriert die angegebenen Grenzwerte, mit dem man einen Teil des Source-Listings auswählt, und speichert immer den kompletten Code.
Durch einen Druck auf Taste B sollte man in den Basic-Interpreter zurückkehren. Man springt aber lediglich in den Direktmodus des Compilers. Dafür gibt es aber auch das Kommando C. Trotz dieser kleinen Macken kommt man mit dem Editor gut zurecht.

Eine außergewöhnliche Fähigkeit des Spectrum-C ist das Compilieren von Quelldateien vom Kassettenrecorder. Den Quelltext sichert man vorher mit einer speziellen Speicherfunktion in Blöcken auf das Band. Eine kurze Pause zwischen den Blöcken genügt, um den Text zu compilieren.

Die gute Anpassung an den Spectrum spielt der Compiler in Zusammenarbeit mit den Microdrives und ROM-Routinen aus. Die Funktion FOPEN öffnet jede - insgesamt vier - Micrödrive-Datei, um deren Daten zu lesen. In anderen Programmiersprachen ist das unmöglich oder mit viel Aufwand verbunden.

Eine Besonderheit der C-Sprache, die auch Assembler-Fans für C einnimmt, ist das Definieren von Static Variablen. Durch eine solche Definition legt man die Adresse der Variable im Speicher fest. Dadurch hat man sehr einfach Zugriff auf die Systemvariablen und kann somit Systemfunktionen leicht beeinflussen. In anderen Sprachen wählt der Compiler selbst aus, wo die Variable abgelegt wird.

Unser kleines Programm demonstriert einige beeindruckende Vor-teile gegenüber anderen Hochsprachen. Es definiert das Kommando CAT in C. Die Routine Shadow ruft eine Unterroutine im ROM des Interface 1 auf. Die Adresse 0xlc58 gilt nur für Interfaces der Version 1. Für Version 2 verwenden Sie bitte 0x1c52, und 0xlc54 für Version 3. Für die Systemvariablen wurden die gleichen Namen wie im Handbuch gewählt.

Für knappe 100 DM bekommt man eine schnelle und empfehlenswerte Programmiersprache für den Spectrum, die Leistungsvergleiche mit wesentlich teureren Versionen auf leistungsstärkeren Computern nicht zu scheuen braucht.

Rainer W. Gerling/hb

# define void int

extern char *channel(),*keyw(); 
main()
{
    cat(1,2)
}

void cat(drive,stream)
    int drive,stream;
{
    static int *d_strl = 23766; 
    static int *s_strl = 23768;

    if (strms(stream)==0)
        printf("STREAM %d NOT OPEN", stream); 
    else 
    { 
        *d_str1=drive; 
        *s_str1=stream; 
        shadow(Oxic58);
    }
}

void shadow(adress)
    int address;
{
    static int *hd_11 = 23789;
    *hd_ll = address;
    inline(Oxdd,OxeS,Oxcf,Ox32,Oxdd,Oxel);
}

int strms(fp)
    int fp;
{
typedef int *intp;
return *cast(intp)(23568 + 6 + 2 * fp); 

C-Listing zum Anzeigen des Inhaltsverzeichnisses


Links

Copyright-Bestimmungen: siehe Über diese Seite
Classic Computer Magazines
[ Join Now | Ring Hub | Random | << Prev | Next >> ]