Všechny najednou si můžete stáhnout hned tady (313 kB). Přibaleny jsou všechny podpůrné soubory pro kompilaci i běh. Následující seznam ukazuje pouze samotné zdrojáky - dobré pro zběžné prohlédnutí, ale jestli je chcete k něčemu použít, je dobré stáhnout celý balík, aby vám neuteklo nic důležitého. Přehled návaznosti jednotek.
Soubory s fonty nutné pro zobrazování textů jsou spolu s editorem v sekci Programy. Pokud jste si odkazem nahoře stáhli všechny jednotky najednou, máte základní font přibalen.
Zajímavé triky: kreslicí algoritmy, VESA grafika obecně, virtuální obrazovka a stránkování a spousta podrobně okomentovaného assembleru.
VGA - grafická jednotka pro 256barevnou grafiku v rozlišení 320×200. Obsahuje sadu základních kreslicích procedur (čáry, obdélníky, elipsy, texty apod.) a hlavně práci s obrázky (Getimage, Putimage a 32bitové "průhledné" sprity) a virtuálními obrazovkami pro celoobrazovkové animace. Samozřejmostí je spuštění a ukončení grafiky a nastavitelné ořezávací okno.
Zajímavé triky: je to vlastně jenom jednodušší VESA, takže celkem nic nového.
Images - univerzální jednotka pro práci s rastrovými obrázky. Pracuje většinou pouze s daty v paměti a ne s obrazovkou, takže může spolupracovat s jakoukoli grafikou, kde 1 pixel = 1 byte (u mě jednotky VESA2 a VGA). Umí obrázky zvětšovat a zmenšovat, ořezávat, zrcadlit, otáčet, různě zešikmovat, kresli do nich (pixel, čára, obdélník, elipsa a vložení jiného obrázku), nahrazovat barvy a plynule měnit jas od jedné hrany ke druhé. Dále převádí obdélníkové obrázky na "průhledný" sprite a zpět a načítá a ukládá formáty BMP, PCX, CUT a ORF. BMP umí načíst z jakékoli bitové hloubky (pokud neobsahuje víc než 256 různých barev), ukládá pouze v 8 b/px. Ukládání se dá z nadřazeného programu modifikovat tak, aby bralo data odjinud než z normální paměti (třeba z XMS nebo z obrazovky), takže se dají uložit i obrázky větší než 64 KB.
Zajímavé triky: prakticky všechno výše uvedené :-). Plus na konci zdrojáku podrobný popis použitých grafických formátů.
Zvuky - jednotka pro přehrávání zvuků přes Sound Blaster. Umí přehrávat až osm zvuků současně a u každého zvlášť nastavovat hlasitost. Zvuky umí načítat ze souborů *.WAV, které si automaticky převádí na svůj interní osmibitový monofonní formát. Za chodu je má uložené v rozšířené paměti (XMS). Rozhraní je kompletně v češtině a zdroják samá vysvětlivka.
Zajímavé triky: obsluha zvukové karty, nízkoúrovňová práce s XMS a hlavně spousta assembleru, místy poněkud obskurnějšího (32bitové instrukce psané napůl ve strojovém kódu).
Pozor: jednotka ještě není úplně stabilní, ve Windows XP někdy chrchlá a v Dosboxu padá.
Woknows 4 - grafické rozhraní pro pascalovské programy "nepatrně" připomínající Okna od pana Gatese. Objektová tlačítka, přepínače, nabídky, posuvníky, textová pole, okna atd., různé dialogy (místní nabídka, menu, otázka ano/ne, zadávání textu nebo čísla, výběr souboru atd.) a pár dalších věcí pro usnadnění práce. Nejedná se o plně integrovaný hierarchický systém jako Windows: např. okna nejdou přesouvat, protože nejsou nijak propojená s tím, co do nich nakreslíte. To je výhoda i nevýhoda podle toho, co zrovna potřebujete.
Veškeré texty v jednotce (včetně klávesových zkratek) jsou uloženy v externím souboru a načítají se až při startu programu, což zjednodušuje tvorbu různých jazykových mutací (balík obsahuje českou a anglickou verzi). Toto úložiště textů mohou využít i programy, které jednotku používají.
Zajímavé triky: spousta objektů, dynamických struktur a mravenčí práce.
Klávesy 2 - jednotka pro obsluhu klávesnice. Obsahuje vlastní Keypressed a Readkey (bez CRT), funkce pro zjištění stavu Shiftů, Altů, Ctrlů a Locků, přepínání Locků, zápis do bufferu klávesnice, čekání na klávesu, diagnostiku atd.. Především ale má vlastní ovladač klávesnice a když ho spustíte, získáte možnost detekovat víc stisknutých kláves najednou, rychlejší bufferované čtení (protože už nemusí volat žádné systémové služby), možnost pověsit si proceduru na Printscreen a vůbec kompletně předefinovat celé rozložení kláves. Rozložení se načítá ze souboru (přiloženy jsou dva základní pro českou a anglickou), takže nejsme závislí na OS. Dá se nadefinovat samostatná tabulka kódů pro každý přeřaďovač (levý a pravý Alt se rozlišuje, Controly a Shifty ne) i mrtvé klávesy (háčky, čárky a tak). Fungují všechny tři Locky (včetně kontrolek), Pause/Break, zadávání ASCIIkódů přes Alt+čísla, a spousta dalších věcí se dá překonfigurovat podle potřeby.
Zajímavé triky: obsluha klávesnice přes int $16, int $21 a stavový word i přes vlastní přerušení. Dále podrobný popis, jak klávesnice funguje.
Program pro vytváření nových definic rozložení kláves najdete v sekci Programy.
Myš 4 - prakticky všechno, co potřebujete pro práci s myší ve VESA grafice: inicializace, kontrola polohy a stavu tlačítek, nastavení citlivosti, omezení rozsahu pohybu, zobrazování a pohyb kurzoru (podporuje i stránkovanou grafiku), záměna tlačítek apod.. Může pracovat ve dvou režimech. Buď ruční, kdy je potřeba neustále volat proceduru pro zobrazení kurzoru, nebo automatický, kdy se celá obsluha myši pověsí na příslušné přerušení a vše je pak ještě jednodušší než u standardního kurzoru v BGI.
Soubory s kurzory nutné pro funkci jednotky jsou spolu s editorem v sekci Programy (jeden základní kurzor je přibalen v balíku všech jednotek).
Zajímavé triky: základní obsluha myši přes přerušení $33 a zavedení vlastního handleru na pozadí.
Myš pro VGA - jednotka pro práci s myší v grafice VGA (320×200 px, 256 barev). Používá se úplně stejně a umí přesně totéž jako Myš 4.
Zajímavé triky: viz výše.
Grafika 4 - různé grafické blbinky pro VESA grafiku: oblouky, výseče, stínovaný text, "procentové" indikátory, komiksové bubliny, práce s bitmapami apod., vypnutí a zapnutí obrazovky a vektorová řetězcová grafika včetně písma ( tři ukázkové fonty jsou zde).
Zajímavé triky: použití paměti XMS pro ukládání obrazovky a dynamická pole s proměnnou velikostí prvku u vektorového fontu.
uMAC 4 - jednotka pro zobrazování vektorových grafických struktur (*.MAC), které se vytvářejí editorem AlmostCAD (viz sekci Programy). Výhodou tohoto formátu jsou minimální nároky na paměť i místo na disku při libovolných vizuálních rozměrech obrázku, možnost plynule měnit měřítko zobrazení (po procentech) a úhel natočení (po stupních) a možnost tvorby animací. Formát byl vyvinut hlavně pro hry, ale už jsem v něm kreslil i pár schémat do školy :-).
Zajímavé triky: dynamická beztypová pole s proměnnou velikostí prvku a přetypované ukazatele, to vše v maximálním možném množství.
Zajímavé triky: z programátorského hlediska jsou nejzajímavější matice (dynamická 2D pole), vyhodnocování výrazů (práce se zásobníky) a obrčísla (dynamická pole, bitové operace a výpočetní algoritmy).
Čas - obsahuje procedury pro čekání nebo měření času nezávislé na rychlosti počítače (fungují na bázi zrychleného systémového časovače, přesnost na 5 ms nebo v případě potřeby až 1 ms). Začátek a konec čekání je oddělený. Použití je velmi jednoduché, protože veškerá instalace i odinstalace přerušení probíhá plně automaticky a ostatní je podobné jako u Delay. Dále tu najdete jednoduché objektové stopky na bázi GetTime (přesnost na sekundy) a možnost nechat na pozadí v zadaném časovém intervalu automaticky volat vlastní proceduru.
Zajímavé triky: zrychlení časovače, použití vlastního přerušení včetně jeho automatické instalace a odinstalace a volání procedury z tohoto přerušení.
COM - jednotka pro komunikaci dvou počítačů po kříženém sériovém kabelu RS-232. Využívá FIFO frontu na příjem i odesílání, o oboje se stará obsluha přerušení. Také umí číst a přepínat všechny přímo přístupné piny. Několik portů současně provozovat neumí. Demo zde.
Zajímavé triky: sériová komunikace obecně - co, jak a proč. Snad každý krok je v komentářích podrobně vysvětlen, najdete tam i teoretický úvod.
XMS - umožňuje využít až 64 MB rozšířené paměti, a to z obyčejného real módu. V případě, že rozšířená paměť není dostupná, kompletně ji emuluje pomocí dočasných souborů na disku. Ošetřeno je i automatické uvolnění alokované paměti při ukončení programu.
Jako high-level jsou tu dva objekty: jeden pro načítání a uchovávání textů z textových souborů (což umožní výrazně snížit spotřebu omezené základní paměti bez toho, aby se muselo pořád štrachat v souborech) a druhý pro uchovávání spritů (což je nezbytné, protože do základní paměti se žádná rozsáhlejší grafika prostě nevejde).
Zajímavé triky: využití funkcí ovladače paměti (hodně Asm) a ukládání řetězců do beztypové struktury.
Generátor Xspritů - malá jednoúčelová jednotka pro tvorbu knihoven spritů, které se dají načítat do objektů typu Xsprite z jednotky XMS a dále zpracovávat jednotkami Images, VGA nebo VESA2.
CFG - jednotka pro práci s textovými konfiguračními soubory. Formát je víceméně kompatibilní s *.INI, ale pro jistotu používám vlastní koncovku CFG. V programu stačí použít konfigurační objekt, napojit ho na svoje proměnné a potom už je hromadné uložení nebo načtení hodnot otázkou jednoho příkazu.
Jako high-level funkce je tu možnost uložit do konfiguračního souboru něco jako "podpis" a z něj potom poznat, jestli program běží na tomto počítači poprvé nebo ne.
Zajímavé triky: spojové seznamy s proměnnou velikostí prvků, práce s řetězci a hledání "zaručeně unikátních" informací v počítači.
Paleta 2 - jednotka pro práci s barevnou paletou ve 256barevné grafice: čtení a nastavování jednotlivých barev i celých palet, změny jasu (0..200%), plynulé přechody jedné palety do druhé, rotace palety, vyhledávání nejbližší barvy a možnost přepnout grafickou kartu do 8bitového režimu (kdy se rozsah RGB složek zjemní ze standardních 0..63 na 0..255) a zpět.
Zajímavé triky: práce s paletou přes porty grafické karty, zbytek je o cyklech, počítání procent a v případě hledání nejbližší barvy o Pythagorově větě.
Need For Speed UnderPascal - obsahuje různé variace na Move (32 a 64bitová varianta) a Fillchar (32bitová; přidán ještě Fillword, který vyplňuje wordem místo bytem) a rychlý celočíselný sinus a cosinus. Zrychlení oproti standardním procedurám je poměrně výrazné. Dále tu najdete vylepšenou verzi datového typu množina (zvládne až 65535 prvků) a vylepšenou správu paměti (Getmem a Freemem).
Zajímavé triky: 32bitové instrukce v Asm a kopírování dat přes koprocesor.
Chybové hlášky - obsahuje proceduru pro pohodlné vypisování chybových hlášení s možností ukončit program, pokračovat nebo se zeptat uživatele (pro jakýkoli textový i grafický režim, při kompilaci se dá zvolit mezi češtinou a angličtinou) a dále české chybové hlášky pro jednotku XMS, standardní proměnnou Doserror a funkci IOresult.
Zajímavé triky: výpis hlášky na obrazovku pomocí služeb Dosu (takže nezáleží na režimu obrazovky a nejsou potřeba žádné další jednotky).
Disk - obsahuje objekt Turbosoubor na bufferované čtení ze souborů (asi nejužitečnější metody jsou "najeď za..." a "čti do..."), různé věci pro práci se soubory (kopírování, mazání, test existence, přejmenování na windowsovsky dlouhé jméno, jednoduché šifrování, vytvoření seznamu nebo stromu adresářů...), několik diagnostických procedur (existence a vlastnosti diskových jednotek a mechanik) a pár dalších drobností (operace se jmény souborů, reset počítače, hromadné nastavení atributů apod.).
Zajímavé triky: práce se soubory, dynamické spojové struktury, insertsort, rekurze, využití funkcí Dosu a Biosu.
Řetězce - funkce pro operace s řetězci: převod nejrůznějších číselných typů na řetězec a řetězců na čísla, zarovnávání a ořezávání řetězců, kopírování úseků, převod řetězců na velká nebo malá písmena, rozklad řetězce na slova nebo na řádky, převody české diakritiky nebo obecně nahrazování jedněch znaků druhými, řetězce neomezené délky apod..
Zajímavé triky: práce s řetězci a spojovými seznamy, občas trochu Asm a dost divokého přístupu ke stringům.
Texty 2 - přepnutí do textového režimu 80×25, ovládání textového kurzoru, nastavení znakové sady a dále různé procedury pro výstup na obrazovku přímým zápisem do videopaměti: psaní znaku a řetězce, smazání řádku, sloupce, bloku řádků nebo celé obrazovky, barvení písma, zobrazování číslic a písmen ve stylu sedmisegmentového displeje. Vše pro fyzickou i virtuální obrazovku. Nepoužívá jednotku CRT.
Zajímavé triky: přístup k obrazovce přes ukazatel na absolutní proměnnou a spousta Asm.
Novinka: úprava sedmisegmentovky, aby pozadí kreslila jiným znakem než popředí (lepší čitelnost).
Textové menu - jednoduchý objekt pro obsluhu nabídek v textovém režimu. Umožňuje udělat menu s nápovědou ke každé položce a řeší interakci s uživatelem.
Zajímavé triky: asi nic, nejsložitější použitý algoritmus je hledání maxima v poli.
Náhoda - Random s longintovým rozsahem, x-stěnná a procentová kostka, funkce, která vrací náhodné číslo ze zadaného rozsahu a automatické Randomize při startu.
Zajímavé triky: jednoduchá aplikace metody půlení intervalu; zbytek je jenom o použití standardní funkce Random.
Staré a překonané jednotky, které už nepoužívám a nebudu vylepšovat. Všechny je najdete v tomhle balíku (196 kB). Neručím za funkčnost - stahujete je na vlastní nebezpečí a na bugreporty už asi nebudu reagovat.
Konstanty - různé konstanty, znaky (šipky...), pomocné množiny znaků (např. pro rychlé roztřídění vstupu z klávesnice) apod.
Zajímavé triky: asi nic.
Klávesy - obsluha klávesnice. Pro bufferované čtení používá služby Dosu, pro okamžité čtení stisků jednotlivých kláves má vlastní přerušení. Vlastní řešení bufferovaného vstupu jako verze 2 ovšem ještě nemá.
Zajímavé triky: jak napsat vlastní Keypressed a Readkey, jak číst shifty a spol. a jak detekovat víc současně stisknutých kláves.
PCX - načítání a ukládání obrázků mezi obrazovkou a soubory typu PCX. Spolupracuje s jednotkami VGA a VESA, přepíná se to direktivou při kompilaci.
Zajímavé triky: nic moc, radši si stáhněte Images - tam je to líp popsané a implementované bez chyb :-).
Paleta - starší, ale univerzálnější jednotka pro práci s paletou. Funguje s 16 i 256barevnými paletami, ale pro 256barevné nemá tolik funkcí jako Paleta 2.
Zajímavé triky: viz Paleta 2, plus práce s 16barevnou paletou.
SVGA 4.1 - upravená jednotka pro 256barevnou grafiku z knihovny SVGA 4 od ASP/VR Group. Podrobný seznam úprav je ve zdrojáku.
VESA - další vývojová fáze jednotky SVGA. Ubyly speciální funkce pro přímou obsluhu grafických karet různých značek, zůstal jenom obecný standard VESA. Naopak přibyla spousta nových funkcí a optimalizací.
Grafika - různé grafické procedury, např. ukládání a načítání celé obrazovky (do konvenční paměti (640×480×16) nebo na disk (univerzální, ale někdy pomalá)), vypnutí nebo zapnutí obrazovky, rychlý Getimage a Putimage pro režim 640×480×16, procedury pro psaní vlastními fonty (rastrové, 8×8 pixelů, kreslí se Putpixelem) a další.
Myš - jednotka pro základní obsluhu myši. Obsahuje mj. několik integrovaných grafických kurzorů (kreslených pomocí čar, dá se nastavit barva i velikost). Funguje ve všech BGI režimech.
Zajímavé triky: použití proměnných typu procedura a základy práce s myší.
Woknows - první verze mojí GUI jednotky. Pracuje v BGI grafice, obsahuje mnohem méně objektů a funkcí než Woknows 3 a už neručím za provozuschopnost.
Woknows 3 - poslední verze, která má ještě texty zapsané přímo ve zdrojáku. Pro VESA grafiku.
Spouštěč VGA - stačí ji použít v programu a o start grafického režimu se nemusíte dále starat (BGI, 640×480×16).
Zajímavé triky: přilinkování grafického ovladače do programu (už žádné *.BGI soubory!).
Spouštěč SVGA - totéž, ale spouští grafiku SVGA (SVGA256.BGI). Skládá se ze dvou jednotek (jedné pro režim 640×480×256 a druhé pro 800×600×256) a OBJ souboru s grafickým ovladačem.
Zajímavé triky: viz výše + použití nestandardního BGI ovladače (InstallUserDriver a spol.).
Zvuky - vlastní Sound a Nosound (Asm, nepotřebuje CRT), jedna pípací procedura a nevyzkoušený pokus o objektový přehrávač melodií, vše pro interní PC speaker. Nezaměňujte se stejnojmennou novější jednotkou, která pracuje se zvukovou kartou.
Texty - jednotka pro textový výstup, prakticky jenom aplikace standardních funkcí z CRT.
Global - konstanty (kódy grafických a textových režimů) a proměnné (stav monitoru, myši, klávesnice atd.), které slouží k výměně informací mezi jednotkami navzájem a programy. Některé z předchozích jednotek ji využívají.