Knihovna Lite a ukázkový program World

autorem JIVA a další z internetu

Cílem knihovny Lite je poskytnout rozhraní, jeden celek, nadstavbu nad samotným Borland Pascalem 7.0, se kterým lze jednoduše a rychle seskládat programy, které budou v grafickém režimu a umožní přehrávat i zvuky. Například rychle napsat hru, která vypadá naprosto seriózně. Nebo jinak: mohl by to být program dělající cokoliv jiného, ovšem chceme vynést na obrazovku například graf nebo informace. Cílem tohoto jednotného celku "na všechno" je, aby si zachoval status "Lite", tzn. odlehčený, malý nebo chcete-li bez cukru.

V současné době je Lite koncipovaný na program pro reálný režimu procesoru. Z volných 640 KB paměti obsadí asi polovinu, možná i víc. Z toho vyplývá, že výsledný program Litu může nabýt asi tak velikosti 128..192 KB. Pracuje se na verzi pro protected mode, ta bude využívat RTM.EXE. Lite se jako projekt pro reálný režim a součást výsledného programu logicky skládá z menších knihoven. Umožní program 150 KB v grafice, se zvuky atd. bez nutnosti dodat jakoukoli další knihovnu. Jedná se o programovací sadu, která vznikla sestavením z knihoven různých autorů. Dalšími zdroji byly manuálové programy jako SYSMAN, PCGPE nebo ATHELP. Knihovna je tedy sběraniko, je ovšem tak zaformátované, že by mělo dávat smysl.

Podknihovna *1* - GLOB

V této části se nacházejí základní deklarace popisující paměťový model programu (v tuto chvíli real). V souboru Glob, který představuje první podknihovnu tpu, najdeme seznam všech šestnácti částí. Každá část je podknihovna, ve finále se linkují do jednotného Litu, který přesahuje 64 KB. V globu je to rozdělené na všeobecně Types, Variables, Const a každá z těchto částí je dál rozdělená na 16 podčástí. V boku je nadepsán prefix, jména podknihovny, v druhém boku je případný komentář, v těle asi veprostřed jsou definované typy, proměnné a konstanty. 16 - 16 - 16. I v případě, že daná sekce neobsahuje nic, přesto je zadána jako kolonka pro pozdější možné doplnění.

Níže následuje část, kde zase v 16 sekcích podknihoven najdeme programové možnosti. Ty si prohlédněte, to jsou stavební kameny pro výsledný program. Ty a jedině ty. Teoreticky k nim patří samozřejmě ještě programové prvky pascalu samého jaksi bez knihoven. Od toho je to Lite, že je to strohé. Měl by v tom být přehled. Cílem je vždy minimalizace okolních doplňujících variabilit. Co je možné, je dané staticky. To vede ke rychlému ovládnutí rozhraní Lite, prakticky bez nutnosti načerpat obsáhlé téma k rychlé produktivitě grafických programů.

Za Interfacem je Implementation, který se bez výjimek zakládá na include souborech jako v Céčku. Include soubory naleznete ve složce STORE v podsložkách s čísly a zkrácenými jmény. Snažil jsem se i o to, aby file browser Borland Pascalu, který zobrazuje dva sloupce, byl optimálně pokryt 8+8 soubory podknihoven a dále 16 složkami ve store. Jednotlivé koncové include funkce by měly být jen tak početné, aby si file browser zachoval schopnost rychlého nalezení a otevření souboru. Kompilace probíhá bat souborem, který má přeložit všechny podknihovny najednou, ale pokud chcete, kompilujte manuálně, postupně od souboru GLOB k dalším podknihovnám. Všechny jsou na sobě závislé navzájem se stoupající tendencí potřeby všech všemi.

Podknihovna *2* - RAM

V této podknihovně se snažím o obsluhu vyšší paměti. Dokud je knihovna pro real, realizuji to pomocí XMS. Poprvé je vidět, že příkazy mají také prefixy. Je to pro přehled v knihovně, aby bylo zřejmé, že je použit stavební prvek Litu.

Podknihovna *3* - DOS

Tato pasáž je zamýšlená náhrada DOSU a CRT, která ale není dotažená do konce, je jen v náznaku nejnutnějších funkcí. K čemu to je, když je DOS a CRT v základním pascalu. Úprava na bez CRT a bez DOSu povede k odstranění problémů spojených s chybou v některých verzích jednotky CRT. Knihovna Lite by vypadala lépe, kdyby nevyžadovala nic, dokonce ani DOS a CRT. Nedokončeno.

Podknihovna *4* - VGA

Lite pracuje s VGA fixně v režimu 320x200x256. V GLOBu je připravený paměťový prostor Buffers. Definoval jsem 4 Buffery po 64 KB očíslované 0 1 2 3. Jsou to pointery, které ukazují na čtyři bloky 64 KB. Ty jsou přítomné v paměti po celou dobu běhu programu. Všechny se použijí. Buffer číslo 4 pak představuje VIDEO RAM na segmentu A000h. Práce s VGA je pojata takto: Buffer 0 slouží jako pomocný pro načítání ze souborů. Do Bufferů 1 a 2 se nahrávají kousky grafiky a grafika fontu a pak se procesem přenesení obdélné oblasti kopírují dále do Bufferu 3. Ten představuje finální framebuffer, který je cyklicky vysílán (flip) na monitor (Buffer 4).

Podknihovna umí nakreslit pixel, čáru a prázdný nebo plný obdélník, vymazat nebo zkopírovat celý buffer (včetně synchronizace s obrazovkou - WaitRetrace) a různými způsoby přenášet obdélníky obsahu z Bufferu do Bufferu (celé nebo s vynecháním průhledných pixelů).

Podknihovna *5* - SVGA

Stejně jako VGA pracuje s fixním rozlišením 640x480, 256 barev. Není o moc pomalejší než VGA, tzn. průtok dat odpovídá takové rychlosti, že to stačí na většinu úloh a nikde nic nebliká, ovšem vzhledem k více než čtyřnásobnému objemu grafických dat se dostáváme na rychlost pouze 25 FPS a méně. Používají se stejné Buffery 0123 jako ve VGA, jsou v programu platné všude jako vymezený prostor. Buffer 4 už kvůli bankování VRAM nemá smysl. Máme možnost psát přímo na viditelnou scénu, nebo použít framebuffer v paměti karty (TogglePaging). Jména a parametry procedur by měly být stejné jako u VGA (Pixel, Rectangle, Bar, Spr, BarZ, SprZ, Clear, Flip, WaitRetrace), jen se liší prefixem SVGA u příkazů.

Podknihovna *6* - 3DFX

Ruská knihovna Inertia, kterou jsem začlenil do Litu tak, aby se přehledně zkompilovala ve verzi pro reálný režim a stala se součástí možností. V příslušné části STORE (složka 3DFX) se nacházejí soubory knihovny Inertia = profesionální 3D knihovna, která se používala v době raných grafických akcelerátorů a pak byla uveřejněna zdarma. Je poměrně obsáhlá. Umožňuje softwarově renderovat 3D objekty (formát GVO) na virtuální obrazovku do velikosti 64 KB (tedy 320x200 px).

Podknihovna *7* - TEXT

Obsahuje tři druhy grafického vypisování textu a čísel. První OutText píše českým podomácku sestaveným fontem (const). Umí běžné znaky, ale se specifičtějším znakem si neporadí. Druhý WriteText píše barevným uživatelským fontem: do Bufferu 1 nebo 2 se nahraje tabulka znaků (příkaz load Default font) a WriteText z ní potom bere jednotlivá písmena a přenáší je na výstup. Je to k tomu, abyste si mohli podle vzorové tabulky sestavit svou vlastní, třeba jako BMP. Změní se jen zdrojový soubor a rozměry znaků. Tabulka je na 26 písmen, 10 čísel a 4 něco, co zbylo (celkem 40 znaků). Třetí Text je Mircosoftův, píše jednobarevně, umožňuje kompletní znakovou sadu a fonty nahrává ze souborů FNT.

Tu uvedu: Sprajty ve VGA a SVGA a tady u textu WriteText pracují tak, že 1 pixel = 1 bajt, stejně jako na obrazovce. Pixely s hodnotou nula se považují za "průhlednou" černou barvu, která se nekreslí. Jak by tedy vypadalo BMP s fontem? Pozadí bude černé s barvou rovnou nule a jen pixely jiných barev se vykreslí.

Podknihovna *8* - MAPS

Mapa je základ pro hru, ale i pro jiné účely. Máme oblast 640x400 pixelů grafiky. Na monitoru se zobrazuje výřez například 100x100 nebo 320x200 a oblast "Mapa" je vyobrazení segmentu v rozlišení 320x200 v rozlišení 640x480 segmenty a pak v 640x480 celek. Mapa je sestavená z políček 8x8 pixelů (kreslí se přes Spr nebo Bar) a je uložená jako řada čísel 0..499. Tato čísla jsou indexy políček v tabulce spritů. Tabulka je uložena v levé polovině Bufferu 2 (320x200) ve formě obdélníku 160x200 px, tedy 20x25 políček 8x8 px. Index 0 odpovídá políčku v levém horním rohu, dál to pokračuje doprava a pak po řádcích dolů. Mapa tedy umožňuje z modelových kostiček 8x8 v Bufferu 2 sestavovat na obrazovce opakující se vzory a podobně. Mělo by to připomínat dobu Nintendo 8b kazet 128..256 KB.

Podknihovna *9* - TIME

Obsahuje Paletu, Speaker a Timer.

Část Timer umožnuje Delay (čekání), dále Stopky a proměnnou Second automaticky blikající na frekvenci 1 Hz.

Část Paleta umožňuje přečíst nebo nastavit RGB složky jednotlivých barev a vybrané úseky palety asynchronně stmívat, rozjasňovat nebo s nimi blikat. Pracujeme po šestnáctkách (např. úsek 16 barev 50..65), odtud i prefix.

Část Speaker přehrává zvuky na interním pípátku počítače (PC-Speaker, Dosbox ho emuluje přes reproduktory zvukové karty). Je tu definovaný formát na zvuky: vlna vzorků přejede a vydá to zvuk asi jako kváknutí nebo zakvíknutí. Pak je tu generátor zvuku. Umožňuje vysílat oktávu CDEFGAHC tam a zpět jako houkačku nebo třeba pozměnit frekvence některých not a vytvářet fantomový nízkofrekvenční signál navázaný na hudbě (použití v psychowalkmanu WORLD).

Podknihovna *10* - SOUND BLASTER 16

Přehrává zvuky na zvukové kartě. Jako základ byl použit Sound Blaster 16 Ethana Brodského, který většinou hraje, a Mircosoftovy Zvuky, které nefungují v Dosboxu. Ve složce STORE/10-SB16 jsou obsažené utility na práci se zvukem.

Podknihovna *11* - KEYBOARD 1

Moje Lite klávesnice, detekce stisku.

Podknihovna *12* - KEYBOARD 2

Mirkosoftova klávesnice, komplexní program, kvůli psaní memo v programu WORLD.

Podknihovna *13* - MOUSE

Práce s myší, pohyb, stisk.

Podknihovna *14* - MATH

Rutiny pro vynášení grafů nebo kreslení objektů hry a jejich pohyb po křivkách. Například kreslení sřely letící po dráze.

Podknihovna *15* - IPX

Zcela funkční metoda spojení dvou dosboxových stanic a výměna dat (paketů) po síti.

Podknihovna *16* - MISC

Načítání a ukládání datových formátů pro zvuky, grafiku a mapy. A hlavně spouštěcí a ukončovací procedury PowerOn a PowerOff. Ta první se stará o nastartování všech ostatních částí knihovny (inicializace proměnných, alokace Bufferů a podobně), volejte ji hned na začátku programu. Tu druhou volejte před jeho ukončením, postará se o úklid a bezpečné vypnutí.

Ukázkový program WORLD

Vysoce účinný psychedelický nástroj navozující změněné stavy vědomí. Od lehčího omámení až k silným stavům trvajícím dlouho. Postupujte jen s nejvyšší mírou opatrnosti, použijte nejlepší rozum, jaký máte.

Soubory a odkazy

COMPLETE - Kompletní složka C:\DOS (Všechny soubory na jednom místě)

SOURCES.zip - Všechny zdrojové kódy a pomocné soubory

TOOLS.zip - Nástroje k práci s datovými soubory

C-SYSTEM.zip - FreeDOS harddisk C pouzity pri tvorbe

BORLAND.zip - Borland Pascal 7.0 minimalisticka verze

ATHELP.zip - Technicka dokumentace pouziteho pocitace

SYSMAN.zip - Druha takova technicka dokumentace

PCGPE.zip - Prirucka programatora her (anglicky)

Reklamy:
„Kdyby se mužům dostávalo manželek, jakých si zasluhují, měli by zatraceně těžký život.“ Oscar Wilde