Blog:BDSC a SGL
Z PMD 85 Infoserver
BDS C - kompilátor jazyka C pre CP/M
Koncom 70-tych rokov vznikol pre CP/M (Mikros) (celočíselný) kompilátor jazyka C s názvom BDS C podľa štandardu "K&R Classic". Aj napriek určitým odchýlkam od tohto štandardu, ktoré sú dané možnosťami a obmedzeniami samotného CP/M, je to veľmi slušný kompilátor jazyka C, ktorý generuje kód pre i8080.
Autorom kompilátora je Leor Zolman, ktorý ho vydal pod hlavičkou vlastnej spoločnosti BD Software a v roku 2002 ho celý, vrátane zdrojových kódov, zverejnil ako Public Domain.
Ku kompilátoru je k dispozícii vyše 200 stranový obsiahly návod v PDF, ktorý detailne popisuje použitie kompilátora, jeho obmedzenia a odchýlky od štandardu. Je dobré si tento návod aspoň zhruba preštudovať a zoznámiť sa s ním. Pre programátora sú dôležité kapitoly 1, 3, 4 a 7. Musím spomenúť, že aj keď tento návod obsahuje nejaké príklady, nie je učebnicou jazyka C.
Zdrojové súbory sa kompilujú pomocou programu CC.COM a výsledkom je relatívny modul s príponou CRL. Následne je treba tento modul "zlinkovať" so štandardnými knižnicami pomocou linkera a tak získať výsledný COM súbor. Ku kompilátoru je dodávaný linker CLINK.COM, avšak Scott W. Layson napísal vylepšený linker L2.COM, ktorý generuje efektívnejší kód. Jeho popis je v návode v kapitole 8.2.
Ako bolo vyššie naznačené, kompilátor je v základe iba celočíselný, takže nepodporuje typy float a double. Pre využívanie FP čísel je ale k dispozícii BCD knižnica, ktorá poskytuje podporu desatinných čísel v BCD formáte. Popis knižnice je v návode v kapitole 9.
Ku kompilátoru existuje aj debugger CDB, ktorý vytvoril David Kirkland v jazyku C a kompiloval ho priamo pomocou BDS C. Popis debuggera je v návode v kapitole 6.
Za pomoci BDS C vznikol aj obrazovkový editor RED, ktorý vytvoril Edward K. Ream. Pri kompilácii si viete nechať vygenerovať "chybový súbor", ktorý potom editor RED vie využiť pre navigáciu na riadky s chybami pri editácii zdrojového textu. Popis editora RED je v návode v kapitole 5.
Samozrejmosťou je možnosť vytvárať si vlastné knižnice funkcií v assembleri a tie potom linkovať ku svojim programom. K tomu slúži CASM preprocesor a ďalšie nástroje. Popis je v návode v kapitole 8.1.
Použitie BDS C na PMD 85
Originálne publikovaný archív bdsc-all.zip obsahuje jednotlivé časti kompilátora, knižníc, príkladov a utilít v osobitných adresároch, prípadne sú spakované v špeciálnych archívoch vytvorených pod CP/M. Všetko, čo som považoval za dôležité alebo zaujímavé, som roztriedil a rozbalil a vytvoril som P32 obrazy diskov.
Najdôležitejší je bdsc-main.p32, ktorý obsahuje samotný kompilátor a linker a aj ďalšie nástroje, medzi ktorými je aj konfiguračná utilita kompilátora. Ja som kompilátor nakonfiguroval pre PMD 85 tak, že tento hlavný disk musí byť umiestnený v mechanike B: a pracovný disk, napr. práve bdsc-work.p32 musí byť v mechanike A:. Ten obsahuje nejaké ukážkové zdrojové súbory, ale aj dávkový súbor C.SUB pre spustenie kompilácie. Kompilácia sa spúšťa zadaním SUBMIT C FILENAME, kde FILENAME je meno zdrojového céčkovského súboru bez prípony.
Knižnica SGL - jednoduchá grafická knižnica
CP/M je konzolovo orientovaný operačný systém, avšak na PMD 85 máme možnosť pracovať aj s grafikou. Aby sa to dalo využiť, vznikla pre BDS C jednoduchá grafická knižnica SGL - Simple Graphics Library viazaná na grafické možnosti PMD 85-2A/3. Knižnica poskytuje:
- funkcie pre "čiarovú" grafiku s rozlíšením 256 x 256 bodov
- funkcie pre výpis textu s jednoduchou alebo dvojitou šírkou/výškou v rozlíšení 48 znakov na šírku a 256 mikroriadkov na výšku
- spritovú grafiku v rozlíšení 48 znakových stĺpcov na šírku a 256 mikroriadkov na výšku
- vypĺňanie jednoduchou bytovou vzorkou
- celočíselnú variantu goniometrických funkcií SIN/COS, ktoré sú svojimi vlastnosťami prispôsobené danému grafickému rozlíšeniu
- možnosť voľby spôsobu vykresľovania a vypisovania textu, podobne ako je to v BASICu príkazmi PEN a INK
- zvoliť pre súradnicu Y počiatok
- funkcie pre priamy test klávesnice
- funkcie pre "vyludzovanie" jednoduchých tónov a melódií
Použitie knižnice
Pre použitie knižnice vo vlastných programoch je potrebné na hlavný programový disk BDS C nakopírovať tieto súbory SGL knižnice:
- SGL.CRL - relatívny modul knižnice
- SGL.H - hlavičkový súbor knižnice
Do zdrojového súboru je potrebné na začiatok pridať vloženie hlavičkového súboru:
#include <sgl.h>
V dávkovom súbore C.SUB je treba linkeru L2 povedať, aby použil pri linkovaní aj relatívny modul knižnice SGL, napr.
B:L2 $1 -L B:SGL
kde sa očakáva, že hlavný programový disk je v mechanike B:.
Funkcie knižnice
Detailný popis všetkých funkcií je uvedený v hlavičkovom súbore SGL.H a ukážka ich použitia je v zdrojových súboroch demonštračného programu SGLDEMO.COM. Tu si vypíšeme iba ich stručný zoznam:
- gInit
- gOriginY, gMode
- gCls
- gPrintPos, gPrint
- gMove, gPlot, gDraw
- gSin, gCos, gSinDA, gCosDA
- gFill, gSprite, gVramByte, gVramBlk
- gKey, gInkey
- gBeep, gMelody
Zdrojové súbory knižnice a demonštračného programu
Na disku bdsc-sgl.p32 sú všetky zdrojové a dávkové súbory pre skompilovanie knižnice aj demonštračného programu.
- SGL.CSM - hlavný zdrojový súbor SGL knižnice
- BDS.LIB - "hlavičkový" súbor pre kompiláciu externých knižníc
- SGL.SUB - dávkový súbor pre skompilovanie SGL knižnice
- SGL.H - hlavičkový súbor SGL knižnice
- SGL.CRL - skompilovaný relatívny modul SGL knižnice
- SGLDEMO.C, SGLDEMOG.C, SGLDEMO.H - zdrojové súbory demonštračného programu
- SGLDEMO.SUB - dávkový súbor pre skompilovanie demonštračného programu
- SGLDEMO.COM - výsledná binárka demonštračného programu
- DIAFONT.FNT, SPRITES.SPR, SPRITES2.SPR, ROOM.DAT, MELODY.DAT - pracovné súbory demonštračného programu
- SUBMIT.COM - program pre spúšťanie dávkových súborov
Aj keď som si vytvoril vlastný celoobrazovkový editor FSED pre CP/M, z pohodlnosti som editoval zdrojové súbory na PC vo VS Code. Kompilácia už ale prebiehala samozrejme v Mikrose. Skompilovanie SGL knižnice trvá asi 4 minúty, skompilovanie Demo programu asi 5,5 minúty (zrýchlenie CPU v Emulátore ale túto nepríjemnú časť vývoja uľahčilo).
- bdsc-sgl-src.zip - zdrojové súbory SGL knižnice a demonštračného programu