Kompilátor C‘ na ZX Spectru

A vůbec, kolik kompilátorů na ZX Spectru znáte?

Kompilátory Basicu ani není třeba počítat, alespoň jeden vznikl i v Čechách.

Pomněte na IUC-88+ (popis je v ZX Magazínu 6/1992), případně SRP (Super Rychlý Překladač z nabídky firmy Hellsoft, zmíněn v ZX Magazínu 7/1990 – i když v tomto případě může jít o úpravu zahraničního kompilátoru, třeba USCHI Compileru).

Máme tu stařičký, napůl v Basicu psaný M-Coder převzatý ze ZX81 a M-Coder II, integer kompilátory HiSoft Colt, už zmíněný USCHI Compiler, Softek Integer Compiler a pozdější desetinný Softek FP, polský TOBOS FP (o kterém si nejsem jist, zda nevychází ze Softeku), skvělý HiSoft Basic a nesmíme zapomenout na Laser Basic (což sice bylo rozšíření Basicu ne nepodobné různým Mega, Beta nebo Sigma Basicům, velmi komplexní a obohacující Basic hlavně o práci s grafickými objekty, ale existoval k němu i kompilátor Laser Compiler).

Pak jsou tu kompilátory jazyků jiných, jako Mira Pascal a HiSoft Pascal (v různých verzích včetně kazetové HP4T) či jeho (snad české, Adámkovo) rozšíření o editor a 64 znaků na řádek HP-80 (český Mikrobáze Pascal bohužel nejspíš není kompilátor).

Kompilujícím jazykem je i Mira Modula-2.

Dalším zajímavým kompilátorem je ukrajinský kompilátor jazyka Coloss, který je navíc napsaný sám v sobě!
(Ovšem problémem Colossu je dokumentace – číst ruské texty sice dokážu, ale pochopit z nich principy toho jazyka ne.)

A na jazyk C nesmíme zapomenout!

Ano, i HiSoft C na ZX Spectru kompiluje (pozor, snadno se splete s Hi-Tech C pro CP/M).

Kdysi jsem je shrnul ve starším článku.

Jeden mi tam ale chyběl.

A to slovenský C‘ compiler z roku 1990.

Pokud lze věřit úvodnímu obrázku, mají jej na svědomí KAMASOFT – L. Karrach a T. Martinec.

Program se na internetu vyskytoval už dřív, ale nebylo k němu ani zblo informací a uznejte, že tak složitá věc, jako kompilátor programovacího jazyka, se bez návodu ovládá relativně obtížně.

Informace jsou zatím velmi stručné, ale dá se s tím už pracovat a něco dál objevovat.

Předně, C‘ compiler není úplně kompilátor C (ten apostrof je tam důležitý).

Je to ale jazyk C velmi podobný, nebo Tiny C, takové zjednodušené C.

Nejde třeba vkládat jiné zdrojákové soubory, ale je možné přilinkovávat funkce z už předkompilované knihovny.

Kompilátor obsahuje rovnou i editor, který se ovládá stejně jako editor assembleru Laser Genius.

Pokud se na obrazovce objeví menu, ovládá se pomocí kláves Q, A, M a trochu nestandardně N (jako „zpět“).

V hlavním programu najdeme tuto nabídku:

EDITOR – práce se zdrojovým textem, obsahuje podmenu:
– EDIT – vstoupí do editoru
– NEW – založí nový text
– BLOCK – práce s blokem (ale nepochopil jsem, jaká)
– PRINT – tisk textu na tiskárnu
PROJECT – k uložení nebo načtení zdrojového kódu nebo knihovny či funkce, má podmenu:
– LOAD – načte zdrojový text
– SAVE – uloží zdrojový text
– VERIFY – bez ověření to na kazetě nejde
– LIBRARY – přihrání knihovny
COMPILE – vlastní překlad zdrojového kódu, má podmenu:
– RUN – spustí přeložený program
– ANALYSE – kontrola syntaxe bez překladu
– CODE – zkompiluje kód
– INFO – vypíše název a autory programu
EXIT – vyskočí z programu.

Příkazy editoru se vybírají po stisku EXTEND počátečním písmenem zobrazeným v liště (Start, End, Del, Copy, Find, Name, Put, Mrg, Quit).

V editoru se, pokud na editor Laser Genia nejste zvyklí, ovládá kurzor kurzorovými klávesami.

Caps Shift + 4 je skok na načátek, Caps Shift + 9 na konec textu.
Ke stránkování slouží Symbol Shift + Q (nahoru) a Symbol Shift + E (dolů).
Caps Shift + 0 maže znak před kurzorem, Symbol Shift + 0 maže znak za kurzorem, Symbol Shift + D maže do konce řádku, Caps Shift + 3 smaže řádek celý.
Symbol Shift + W vloží mezeru, Symbol Shift + I vloží řádek.

Některé znaky se vkládají takto:
{ – Symbol Shift + F
} – Symbol Shift + G
[ – Symbol Shift + Y
] – Symbol Shift + U

Samostatně stojí program Lib.Maker, který slouží k manipulaci s knihovnami funkcí:

DELETE – vymaže zvolenou funkci
RENUM – přejmenování funkce
LIST – vypíše seznam funkcí a délky jejich kódů
SAVE – uložení knihovny
LOAD – načtení knihovny
VERIFY – kontrola záznamu na médiu
MERGE – přihrání další knihovny
CODE – přihraje do knihovny zkompilovanou funkci
INFO – vypíše název a autory programu
EXIT – vyskočí z programu.

S programem se dodává jedna hotová knihovna, která obsahuje následující funkce:

PEEK (2 bajty)
CALL (1 bajt)
CLS (3 bajty)
POKE (17 bajtů)
POINT (27 bajtů)
PLOT (13 bajtů)
INKEY (13 bajtů)
PRINT (87 bajtů)
PAUSE (5 bajtů)

Vedle této knihovny je k dispozici i několik zkompilovaných funkcí v samostatných souborech (všimněte si, že funkce AT v knihovně LIB++ není):

PEEK (6 bajtů)
AT (26 bajtů)
PRINT (87 bajtů)

Knihovna se, kromě odstraňování a přidávání funkcí, nedá vlastně upravovat a nedá se načíst do editoru jako zdrojový kód.

Bohužel mi není jasné, jak vlastně jednotlivé kompilované funkce vznikají, jak Lib.Maker pozná, jak se jmenují a jaké mají parametry.

Podívejme se tedy nyní na samotný jazyk.

Je podobný C, trochu jednodušší, podobně jako C podporuje volání funkcí s parametry a obsahuje podobné zabudované operátory.

Podporované příkazy jsou:

if () { ... } else { ... }
for i=1; i<10; i++ { ... }
while (i<10) { ...; i++; }
do { ...; i++; } while (i<10);
continue;
break;
goto <label>
<label>:
switch () {case <podmínka 1>; { ... } <podmínka 2> { ... }}
inline <konstanta1>, <konstanta2>, ...;

Definice funkcí:
func <jméno> (<param1>, <param2>, ...); {return <hodnota> ;}

Aritmetické operátory:
+, -, *, /, % (modulo), ++, – (prefixové i postfixové)

Logické operátory:
<, >, >=, <=, !=, ==, &&, ||(and a or)

Bitové operátory:
<<, >>, &, |, @

Přiřazení:
=
& adresa proměnné

Struktura programu ve zdrojovém textu je následující:

(deklarace proměnných int 0-65535, char 0-255)
declare
int i, i2;
char c[10];

merge <seznam funkcí vytvořených v programu Lib.Maker, např. print(), peek(), poke()> ;

{
<tělo hlavního programu>
}

Ukázkový program (bez vkládaných funkcí) vidíte na screenshotu.