PF 2013, basic a hrátky s VGA paletou

Na blog poslední měsíce nebylo příliš času. Dodělával jsem diplomovou práci a trávil jsem ještě vánoční svátky korekcí posledních připomínek vedoucího. Původní nápad popíjet víno, přežírat se chlebíčky a pařit u toho Extreme Assault na počítači s 3Dfx kartou (když už jsem sehnal placku) tedy nevyšel. Bohužel.

Postupně by se měla situace zlepšit. Nápadů je pořád dost, dokonce jsou sepsané asi čtyři články, které už týdny čekají jen na to, až je nahodím do redakčního systému a přidám k nim obrázky. Jenže teď tu máme konec roku, a tak bych si radši odpočinul a užil si těch pár dní, kdy nechodím spát ve čtyři hodiny ráno, abych za pět hodin zas pracoval.

Na PFka mě moc neužije. Nedělám žádné kartičky a pohlednice a ani nic nerozesílám mailem na všechny adresy v kontaktech. Pro tentokrát jsem udělal výjimku. Potřeboval jsem udělat něco, čím bych zahnal všechny ty mindfucky, kterých mám ještě teď z diplomky a procesů okolo ní plnou hlavu.

Quick Basic!

Jako malého fakana mě na programování moc neužilo. Doma na to byli jiní experti. Všichni ostatní byly starší, takže jsem jim to přenechal. Pominu-li pár pokusů, začalo pro mě programování až s Pascalem na střední škole. Postupně jsem si prošel celou plejádu jazyků přes Javu, C#, C/C++ až po LISP a Prolog a udělal více či méně složité projekty.

Nikdy jsem ovšem nedělal nic v Microsoftím Basicu pro PC/DOS. Navnaděn programováním ve VBA (Excel) kvůli diplomové práci, jsem nahodil DOS a v něm stařičký Quick Basic 4.5 (pozdější ořezaná verze se jmenovala QBasic) a zábava mohla začít. Původně mělo jít o jednoduchou textovou blbinu, kde se podle nějakého algoritmu bude měnit paleta. Nakonec se to trochu rozrostlo a já se pokoušel kreslit krajinku na tabletu. Vrátil jsem se díky tomu všemu zas do dětství, kdy jsem celý den proseděl u počítače prováděním kreativních činností, aniž bych měl přehled o čase a každou chvíli odpovídal na maily.

Microsoftí dialekt BASICu jsem se naučil tak nějak za pochodu díky integrované nápovědě. Představu jsem měl jasnou a věděl jsem, jak by se to mělo naprogramovat v jiných jazycích, takže jsem šel celkem na jistotu. Kde jsem nevěděl, tam pomohl strýček Google. Dneska jsou možnosti hledání tutoriálu díky internetu nesrovnatelně lepší, než to bylo tenkrát. Snadno se dají stáhnout knihovny i podrobné návody. Mít tohle tenkrát, to by se dělaly programy.

Původní nápad načítat přímo BMP ztroskotal, když jsem viděl tu rychlost (asi 8 sekund na 20MHz 386). Basic bohužel není moc rychlý a vytáčela mě práce s datovými typy. Chybí cokoli bez znaménka a 8bit je jenom char. Jednoduché hrátky z C jsou tady nemožné. Sem tam jsem zuřil a přemýšlel, že část kódu napíšu v assembleru, ale když jsem viděl způsob, jakým se ASM kód do Quick Basicu vkládá, tak jsem se na to vykašlal. Místo toho jsem data jiným programem převedl do nativního formátu pro funkce GET/PUT a hlavičku BMP obrázku uložil bokem.

Nechtěl jsem to mít statické, takže jsem přidal jednoduchou animaci tekoucí vody. K tomu je potřeba pracovat s paletou. Tato práce je naštěstí primitivní. V použitém nejvyšším režimu VGA (640×480, 16 barev) lze kteroukoli ze 16 barev v paletě přemíchat přes registry karty na RGB hodnotu z 262 tisíc. Přidat plynule objevení a mizení obrázku/textu už byla hračka.

Se zvukem jsem si moc práce nedal. Studoval jsem, jak pracovat s adresou 388h (389h) kvůli podpoře jednoduchého FM zvuku na zvukovkách kompatibilních s AdLibem a Sound Blastery. Vybral jsem projekt FMEngine, který jsem použil více méně tak, jak byl. Na netu je dnes spousta knihoven pro přehrávání různých typů MIDI dat a zvuků.

Paměťová náročnost v operační paměti je okolo 100 kB, z čehož 64 kB je vyhrazeno pro načítání obrázku (resp. jeho polovin). Šlo by to udělat méně náročné načítáním po menších blocích, ale nebyl důvod. Stroje s VGA kartami běžně neměly méně než 512, resp. 640 kB RAM. Pokud tedy máte ve svém počítači alespoň VGA kartu a je tam nějaký DOS, půjde program spustit.

Stáhnout „PF 2013“ (124 kB).

Dneska bych raději slavil. Předávám tedy PFko i se zdrojovým kódem (verze bez zvuku funguje i ve QBasicu) a potřebnými soubory. Stačí spustit na počítači s DOSem nebo Windows 9x. Pravděpodobně poběží i na novějších Windows do verze XP (která poslední v DOS okně podporuje grafiku). Pro ostatní tu je naštěstí DOSBox. Za pár dní zkusím nahodit nějaký soubor pro emulátor nebo video na Youtube.

Sám jsem to celé udělal v DOSBoxu (nezapomeňte si přepnout syntézu na OPL3). Potřeboval jsem hodně cestovat, a tak jsem to napsal na ThinkPadu T400. Do staršího notebooku jsem kopíroval hotové kusy přes sériovou linku hyperterminálem.

No a to je vše. Mějte se dobře i v dalším roce!

Dodatek

Pro spuštění na nových počítačích stačí nainstalovat dosbox a na ikonu jeho zástupce (vytvoří se na ploše) přetáhnout spustitelný soubor PFka (pfko13.exe).

Vyzkoušel jsem konečně program i na počítači IBM PS/2 (tento z roku 1989) s originální kartou VGA a funguje na 100%. Výstup na CRT monitor byl dle očekávání bez problémů. Zaujalo mě, jak si s mícháním palety poradil integrovaný plasmový displej, který zvládá zobrazit 16 stupňů jasu. Při změně palety se mírně měnil i jas některých dalších barev, jakoby snad IBM už tehdy použilou jakousi obdobu dynamického kontrastu (kvůli lepší čitelnosti).

Komentáře k článku

  1. 1. Logout  2.1.2013  9:24:42

    Měl jsem tu moc pěkný komentář, bohužel jsem zapomněl na mail a když jsem následně dal back, tak formulář byl prázdný. Když ale vidím, že nikdo nekomentuje, tak to zkusím znovu:

    Nadávat na typy u defaultně beztypového jazyka mi přijde trochu zvláštní, možnosti a rozsahy jsou jaké jsou a je to prostě vlastnost. Vždycky můžeš napsat PFku v assembleru a naimplementovat si typ, jaký uznáš za vhodné :-)

    Jinak se mi to velmi líbí, zajímalo by mě jaký tablet a v jakém softu jsi použil.

  2. 2. swarm  2.1.2013  10:44:30

    [1] Jsem rád, že se líbí. Díky za komentář – právě jsem v administraci nutnost mailu vypnul. Bylo to by default.

    Způsob, jakým BASIC pracuje s datovými typy je fajn. Vztekal jsem se pouze v případě, že jsem měl pracovat se soubory nebo grafikou. Tam by se prostě 8bit int hodil. Nicméně chápu, že ten jazyk směřoval trochu jinam a pro svůj účel byl navržený dobře. Chybí mi možnost se dneska do něčeho podobného přepnout na libovolném počítači (tj. aby to bylo součástí OS). Ale co se divím, však mi na to jeden člověk řekl, že pěkný, ale že by to v powerpointu měl hotové za 10 minut… :)

  3. 3. Johny  7.1.2013  2:18:55

    Jirko, Jirkovu poznámku o powerpointu nesmíš brát moc vážně :-D

    To je jako by si v laborce vyrobil po letech syntetické maso a nějakej sedlák by ti řekl, že zajíce klepne během pár vteřin, tak co ses s tím tak patlal ;-)

  4. 4. Matt  1.6.2013  4:58:37

    Pomocí QB64GL to jde přeložit do exe souboru spustitelného na nových počítačích bez DOSBoxu. Problém není ani velikost okna, které se dá udělat měnitelná. Fungovala mi ale jen verze bez zvuku. U verze se zvukem nějak koliduje FMEngine.


Napsat komentář