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