Od grafické karty VGA k vyšším rozlišením i většímu množství barev

10. 6. 2025
Doba čtení: 68 minut

Sdílet

Stará VGA grafická karta do sběrnice ISA
Autor: Drahtlos, podle licence: CC BY-SA 4.0
Už jsme se setkali s problematikou grafického subsystému. Dnes si ukážeme využití VBE (VESA BIOS Extension) pro nastavení grafických režimů s vyšším rozlišením a/nebo počtem barev, než nabízel standard VGA.

Obsah

1. Od grafické karty VGA k vyšším rozlišením i většímu množství barev

2. Grafická karta IBM 8514/A

3. Typická konfigurace grafické karty IBM 8514/A

4. Klony IBM 8514/A a další vývoj grafických karet na počítačích PC

5. Následníci grafické karty VGA v podobě nestandardu SVGA

6. Organizace video paměti u karet SVGA

7. Standard VESA aneb částečné zmírnění chaosu na trhu s grafickými kartami

8. Standardní grafické režimy představené ve VBE 1.2

9. Praktická část

10. Přečtení základních informací o grafické kartě

11. První demonstrační příklad: zjištění, zda je VBE dostupný

12. Blok s informacemi o grafické kartě

13. Druhý demonstrační příklad: zobrazení základních informací o grafické kartě

14. Třetí demonstrační příklad: výpis OEM řetězce s další informací o kartě

15. Čtvrtý demonstrační příklad: zjištění a výpis čísel všech podporovaných grafických režimů

16. Přečtení informací o zvoleném grafickém režimu

17. Pátý demonstrační příklad: získání rozlišení, bitové hloubky a struktury obrazových řádků zvoleného grafického režimu

18. Šestý demonstrační příklad: základní informace o čtecích a zápisových oknech pro reálný režim

19. Repositář s demonstračními příklady

20. Odkazy na Internetu

1. Od grafické karty VGA k vyšším rozlišením i většímu množství barev

V seriálu o tvorbě her a grafických dem pro platformu IBM PC (a systém DOS) jsme se již několikrát setkali s problematikou grafického subsystému této platformy. Připomeňme si krátce, že IBM PC byla modulární a konfigurovatelnou platformou, pro niž postupně vznikla celá řada různých grafických karet, které mnohdy byly více či méně zpětně kompatibilní. Základem byla karta MDA s podporou dobře čitelného textu, ovšem bez podpory grafického výstupu. Doplňovala ji karta CGA s (na dnešní dobu) primitivními grafickými režimy 320×200 pixelů se čtyřmi barvami a 640×200 pixelů monochromaticky. Alternativou k MDA+CGA se stala karta Hercules s monochromatickým režimem s vysokým rozlišením 720×348 pixelů, který se i díky podpoře levného monochromatického monitoru stal velmi populární kartou.

Firma IBM na dvojici MDA+CGA navázala kartou EGA, v níž se poprvé mohli vývojáři setkat s takzvanými planárními režimy, které umožnily, aby byla celá video RAM mapována do jediného segmentu (64kB), se všemi z toho plynoucími důsledky. EGA podporovala vyšší rozlišení (640×350 pixelů) i vyšší počet barev. Úspěšná byla navazující karta nazvaná VGA s podporou ještě vyšších rozlišení (oficiálně až do 640×480 pixelů) a možností v některých režimech současně zobrazit 256 barev.

Ovšem vývoj pokračoval dále a vznikaly další typy grafických karet. Některé byly určeny pro profesionální použití (orientace na CAD), jiné postupně (společně se snižující se cenou pamětí atd.) zvyšovaly jak nabízená rozlišení, tak i počet současně zobrazitelných barev. Každý výrobce přitom nabízel různá rozšíření BIOSu pro nastavení nových grafických režimů atd. Lišila se i organizace grafické paměti, takže výsledkem byl – slušně řečeno – chaos. Ten byl částečně zmírněn firmami sloučenými do organizace VESA (Video Electronics Standards Association), která navrhla standard VBE neboli VESA BIOS Extensions. A zejména VBE se budeme zabývat v dnešním článku.

Poznámka: povšimněte si, jak se řízení dalšího vývoje platformy PC postupně přeneslo od společnosti IBM ke sdružení většího množství firem.

2. Grafická karta IBM 8514/A

Grafická karta IBM 8514/A začala být nabízena v roce 1987 společností IBM jako doplňková grafická karta ke kartě VGA (která o několik let později začala být nepsaným standardem v oblasti grafiky). Ve skutečnosti ji však bylo po malých úpravách možné použít i s dalšími grafickými kartami, zejména s poměrně populárním Herculesem (změny se týkaly zejména úpravy řádkových frekvencí). Současně se jednalo i o první široce dostupný grafický akcelerátor určený pro počítače IBM PC, protože předchozí grafické akcelerátory (například „trojkarta“ PGA či mnohé verze grafických karet typu TARGA a TIGA) byly velmi drahé, a jejich použití tak bylo limitováno pouze pro profesionální účely, čemuž odpovídalo i spektrum aplikací, kterými byly tyto karty podporovány.

Grafická karta IBM 8514/A byla použitelná prakticky na všech počítačích řady IBM PC/AT, které však musely obsahovat poměrně málo úspěšnou sběrnici MCA (Micro Channel Architecture). V pozdějších letech se objevily i klony této grafické karty, které bylo možné zapojit i do rozšířenějších sběrnic ISA či VESA Local Bus, sběrnice MCA se totiž mimo originální počítače od firmy IBM příliš neujala, částečně to bylo zapříčiněno způsobem licencování.

Poznámka: po technické stránce však byla MCA zcela zajisté krokem dopředu.

Grafická karta IBM 8514/A patří do skupiny grafických prostředků určených zejména pro aplikace typu CAD, tedy pro aplikace orientované na zpracování a rychlé zobrazování vektorů (i písmo se v CAD systémech vykresluje, resp. přesněji řečeno v minulosti vykreslovalo pomocí vektorů – jen tak je totiž možné zajistit uspokojivé vykreslení na perových plotterech). Při použití tohoto grafického adaptéru bylo pomocí dodávané programové knihovny (ve své podstatě se jednalo o rozsáhlé rozšíření BIOSu) nazvané AI-Adapter Interface (s umělou inteligencí tato knihovna samozřejmě nemá nic společného) podporováno vykreslování základních geometrických tvarů, jakými jsou například úsečka, lomená čára (polyčára), polygon nebo kružnice. Kromě toho obsahoval tento grafický adaptér také podpůrný modul pro rychlé vykreslování rastrových obrazců pomocí operací typu BitBlt – Bit Block Transfer. Byla také dodržena částečná zpětná kompatibilita s grafickými adaptéry typu VGA (viz předchozí díly tohoto seriálu), což bylo důležité pro zaručení funkčnosti adaptéru v mnoha aplikacích, které byly vytvořeny právě pro tento rozšířený typ grafických karet.

3. Typická konfigurace grafické karty IBM 8514/A

Grafický adaptér IBM 8514/A byl do počítačů IBM PC zapojován jako přídavná (tj. ve skutečnosti druhá) grafická karta. Toto řešení, zejména způsob „sériového” napojení karet do jednoho monitoru, bylo nazýváno AVE – Auxiliary Video Extension. Primární kartou nainstalovanou v počítači byl většinou, jak jsme si již ostatně řekli v předchozí kapitole, grafický adaptér VGA, který zajišťoval podporu základních i rozšířených textových a grafických režimů. Přídavná karta IBM 8514/A dokázala generovat rastrový obraz pouze v rozlišení 1024×768 pixelů prokládaně (interlaced) nebo v režimu 640×480 pixelů neprokládaně (non-interlaced). Barevná hloubka dosahovala podle kapacity nainstalované video paměti na tomto adaptéru buď šestnácti nebo 256 současně zobrazitelných barev (což bylo na dobu vzniku velmi dobré).

V grafickém režimu s vyšším rozlišením (tj. konkrétně 1024×768 pixelů) se řádková frekvence rovnala 38 kHz, snímková frekvence však byla rovna pouhým 43,5 Hz (IBM o tomto rozlišení tvrdila, že má obnovovací frekvenci rovnu 88 Hz, ovšem prokládaně; bolesti hlavy byly dodávány zadarmo). V nižším grafickém rozlišení (tj. 640×480 pixelů) byla obrazová frekvence stejná jako na kartě VGA ve stejném grafickém režimu, tj. 60 Hz. Kromě zmíněných dvou grafických režimů neumožňovala tato grafická karta zobrazovat ani textové režimy, ani další grafické režimy – vše ostatní tedy muselo být zobrazováno s využitím primární grafické karty. Tento způsob kooperace dvou grafických karet se ukázal jako výhodný, protože IBM 8514/A mohla být díky tomu poměrně jednoduchá, práce v grafických režimech je totiž o mnoho jednodušší než v režimech textových.

Hardwarová konfigurace této grafické karty je taktéž velmi zajímavá. Pro synchronizaci sériového čtení jednotlivých pixelů z video paměti během zobrazování snímku jsou použity dva krystaly. První z nich má rezonanční frekvenci „vybroušenou” na 44,9 MHz, druhý má frekvenci nastavenou na 25,175 MHz. Vyšší frekvence se používala u rozlišení 1024×768, nižší frekvence je plně kompatibilní s grafickou kartou VGA (viz předchozí díly tohoto seriálu, v nichž je podrobně uvedeno časování v grafických režimech). Kapacita video paměti byla rovna buď 1 MB, nebo 1,5 MB (to je na rok 1987 hodně vysoká hodnota – 1,5 mnohdy převyšovala celkovou kapacitu RAM). Podle instalované kapacity se odvozoval i počet maximálně zobrazitelných barev. Zjednodušené schéma grafického adaptéru IBM 8514/A spolu s jeho připojením do počítače je zobrazeno na následujícím obrázku:

8514/A

Obrázek 1: Zjednodušené schéma grafického adaptéru IBM 8514/A.

4. Klony IBM 8514/A a další vývoj grafických karet na počítačích PC

Design grafické karty IBM 8514/A byl samozřejmě, jak bylo v té době zvykem, bez okolků kopírován různými dalšími výrobci periferních zařízení. Mezi úspěšné klony této grafické karty, které v ledasčem svůj originál převyšovaly, patří například grafické karty ATI 38800 (Mach 8), ATI 68800 (Mach 32), Chips and Technologies 82c480, Paradise WD95C00 a Paradise WD95C01 (pamětníci si možná na některé tyto názvy vzpomenou). Většina klonů byla připojitelná do sběrnice ISA či VLB, zatímco originální karta IBM 8514/A byla dostupná, jak již ostatně víme z předchozích odstavců, pouze pro sběrnici MCA.

Vzhledem k omezením, která tato grafická karta měla (zejména kvůli závislosti na primární grafické kartě), se však další výrobci grafických karet zaměřili především na rozšiřování funkcionality původní grafické karty VGA. Výsledkem jsou grafické karty označované jako Super VGA, zkráceně SVGA. Nejedná se však o žádný oficiální standard, pouze o označení grafických karet, které nabízejí vyšší rozlišení či počet současně zobrazitelných barev než karta VGA (s níž byly karty SVGA většinou do velké míry kompatibilní).

5. Následníci grafické karty VGA v podobě nestandardu SVGA

Termínem SVGA nebo také Super VGA jsou obecně označovány všechny grafické karty vytvořené pro počítače řady IBM PC, které umožňovaly či umožňují používat rozšířené grafické režimy, tj. režimy s rozlišením vyšším, než je nejvyšší rozlišení karty VGA: 640×480 pixelů. Tyto karty současně mohou podporovat režimy s vyšším počtem současně zobrazitelných barev; v některých případech je dostupná patnáctibitová, šestnáctibitová či dokonce čtyřiadvacetibitová barevná hloubka. Podívejme se nyní blíže na možnosti, které grafické karty typu SVGA nabízejí.

Každá grafická karta typu SVGA by měla být zpětně kompatibilní s kartou VGA, a to jak organizací video paměti do bitových rovin, tak i časováním horizontálních a vertikálních synchronizačních signálů a v neposlední řadě významem řídicích registrů. Ne všechny grafické karty SVGA jsou kompatibilní na sto procent, většina funkcí z původní VGA však typicky zůstává zachována, zejména způsob nastavení základních textových a grafických režimů pomocí funkcí BIOSu a metody přístupu do video paměti při čtení či zápisu barev jednotlivých pixelů (ovšem například režim split-screen, který jsme si popsali, mohl být problematický).

Grafické karty SVGA nabízejí grafické režimy s vyšším rozlišením než 640×480 pixelů. Typicky byla dostupná rozlišení 800×600 pixelů a 1024×768 pixelů. Tyto režimy bylo možné používat s různou barevnou hloubkou a s různou obnovovací frekvencí obrazu i řádkovou frekvencí. Minimálním základem pro všechny rozšířené grafické režimy je zobrazení šestnácti barev. V tomto případě postačuje pro grafický režim 800×600×16 kapacita video paměti 256 kB, což odpovídá původním grafickým kartám typu VGA. Pokud je použit grafický režim s vyšším rozlišením či větší barevná hloubka, musí se patřičně zvýšit i kapacita video paměti, která tak postupně dosahovala hodnot 512 kB, 1 MB, 2 MB atd. (stále bereme v úvahu kapacitu nutnou pro zobrazení pouze jednoho rastrového obrázku, v případě použití předního a zadního bufferu se samozřejmě kapacita video paměti musí dále zvyšovat). Některé používané principy přístupu do obrazové paměti budou popsány v navazující kapitole.

6. Organizace video paměti u karet SVGA

V grafickém režimu 800×600×16 je možné při čtení či zápisu jednotlivých pixelů použít klasický přístup přes bitové roviny, tj. technologii známou z karet EGA i VGA. Je to možné z toho důvodu, že počet pixelů v jedné bitové rovině je při tomto rozlišení roven 480000, což odpovídá 60000 bytům, tj. zhruba kapacitě jedné bitové roviny (připomeňme si, že barvy pixelů jsou rozděleny do všech čtyř barvových bitových rovin). Podobný případ nastává u grafického režimu 640×400×256, který je většinou možné (i když nestandardními postupy) nastavit tak, aby se choval jako již popsaný Mód X, tj. dva sousední pixely jsou vždy uloženy ve dvou nezřetězených bitových rovinách. V tomto režimu se spotřebuje 256000 bajtů obrazové paměti, což prakticky přesně naráží na hranice původní karty VGA (ale ještě je nepřekračuje).

Problémy však nastávají ve všech ostatních rozšířených grafických režimech, například v režimu 1024×768×16, 640×480×256 či 800×600×256, a samozřejmě u všech režimů s větší barvovou hloubkou. Zde se již překračuje adresovatelná kapacita jednotlivých bitových rovin, proto se přístup do obrazové paměti musí řešit odlišným způsobem.

V reálném režimu procesoru (tj. zejména v DOSu) je nutné použít takzvané paměťové banky nebo paměťová okna. Jejich princip spočívá v tom, že se pomocí konfiguračních registrů grafické karty zvolí, do které paměťové banky se mohou zapisovat pixely a ze které paměťové banky se budou pixely číst – čtení a zápis totiž může obecně probíhat v odlišných bankách (přičemž čtení je z praktického hlediska až nepoužitelně pomalé). Celá video paměť je potom rozdělena do pruhů, každý pruh odpovídá jednomu paměťovému banku. Zápis pixelu se touto organizací video paměti podstatným způsobem komplikuje, protože je nejdříve nutné rozhodnout, do kterého banku čtený či zapisovaný pixel padne, tento bank se posléze vybere, a teprve poté je již možné provést čtení/zápis. I při vykreslování spritů může nastat případ, kdy různé části spritu padnou do jiného banku.

Situace se poněkud zlepšuje v chráněném režimu procesoru. Tam je totiž možné celou video paměť „virtuálně“ mapovat do jednoho souvislého paměťového úseku, který se nachází za nejvyšší adresou operační paměti. Paměťové banky jsou sice stále fyzicky přítomné (tj. musí se přepínat), ale aplikace je nemusí ovládat přímo. Ve skutečnosti o jejich přítomnosti nemusí vůbec vědět. Pokud se totiž provede zápis do oblasti video paměti, která neodpovídá aktuálně nastavenému banku, dojde k výjimce (jsme v chráněném režimu, oblasti čtení a zápisu se definují pomocí deskriptorů), kterou odchytí ovladač grafické karty, ten potřebný bank nastaví a zápis posléze provede. Novější grafické karty řady SVGA, zejména ty, které jsou připojeny na sběrnici PCI, nemusí banky používat vůbec, tam je možné celou grafickou paměť mapovat do adresové oblasti procesoru. Konkrétní počáteční adresa se nastaví při inicializaci zařízení typu plug-and-play).

Ovládání banků (a současně i jejich velikost) je však závislá na typu grafické karty, tj. například karta Trident 8900 (ve své době velmi oblíbená) se ovládá jiným způsobem než karta OTI či Chips and Technologies. Chaos v ovládání grafických karet v rozšířených grafických režimech částečně odstranila až norma VESA, která je popsána v navazující kapitole.

7. Standard VESA aneb částečné zmírnění chaosu na trhu s grafickými kartami

V předchozích dvou kapitolách jsme si popsali určitý chaos ve světě SVGA karet. Tyto karty nabízely poměrně mnoho funkcí i grafických režimů, jejich největší nevýhodou však byla vzájemná nekompatibilita. Neexistoval totiž jednotný způsob nastavení rozšířených grafických režimů, lišily se režimy přístupu do video paměti, způsob přepínání paměťových banků apod. IBM se nastálý chaos pokusila vyřešit uvedením grafické karty XGA, ta se však objevila na trhu poměrně pozdě a ostatní výrobci grafických čipů tuto kartu celkem úspěšně ignorovali a navrhovali si vlastní řešení a pseudostandardy. Výsledkem poměrně rychlého vývoje grafických karet tak bylo paradoxně zaostávání aplikací za technickými možnostmi grafických karet, protože softwarové firmy z celkem pochopitelných důvodů reagovaly na nové výrobky se zpožděním. Tento stav začal být evidentní a dosti palčivý v devadesátých letech minulého století.

Kromě pokusu firmy IBM o řešení zmatku v grafických kartách se objevil i standard navržený sdružením VESA (Video Electronics Standards Association). Do tohoto sdružení se dříve či později zapojili prakticky všichni výrobci grafických čipů a taktéž významné softwarové firmy. Výsledkem práce tohoto sdružení bylo několik verzí norem, které byly v počítačové literatuře zkráceně nazývány pouze termínem VESA, například VESA 1.1 či VESA 2.0 (což není úplně přesné). V těchto normách byla uvedena zejména čísla rozšířených grafických režimů tak, aby je bylo možné nastavit pomocí služeb takzvaného VESA BIOSu. Kromě toho byly specifikovány služby pro zjištění parametrů grafických karet, tj. výrobce grafického čipu, typu grafické karty, podporovaných rozlišení a podporovaných obnovovacích frekvencí obrazu (některé grafické režimy bylo možné zobrazovat s odlišnými frekvencemi vertikálních a horizontálních synchronizačních signálů).

Kromě toho bylo specifikováno uspořádání grafických dat v obrazové paměti a způsob přepínání jednotlivých banků v reálném režimu procesoru. Pozdější norma VESA obsahovala i doporučení o (alespoň virtuálně) lineárním uspořádání obrazové paměti v chráněném režimu (což využívaly pozdější hry). Výše zmíněný VESA BIOS (VBE – VESA BIOS Extension) mohl být implementován buď přímo na grafické kartě, nebo přes ovladač grafické karty, který byl typicky dodávaný třetím výrobcem, protože mnoho výrobců grafických čipů tyto ovladače kupodivu přímo nedodávalo.

Standard VESA byl v minulosti použit zejména v operačním systému DOS, v dnešní době má význam pouze jako nejmenší společný prvek, který by (alespoň teoreticky) měly podporovat všechny moderní grafické karty. Nicméně VBE je již zastaralý a byl nahrazen UEFI GOP (Graphics Output Protocol), což je však téma na samostatný článek.

8. Standardní grafické režimy představené ve VBE 1.2

VBE verze 1.2 přinesl určitou standardizaci grafických režimů, protože definoval šestnáct režimů, včetně jejich rozlišení, barevné hloubky a tím pádem i počtu zobrazitelných barev (ovšem například velikost paměťových bank může být odlišná!). Ne všechny režimy musí být kartou (+ monitorem) podporovány, ovšem minimálně některé z nich podporuje prakticky každá karta kompatibilní s VESA (čímž se myslí VBE 1.2 nebo vyšší verze):

Číslo Rozlišení Bitů na pixel Počet barev
0×0100 640×400 8 256
0×0101 640×480 8 256
0×0102 800×600 4 16
0×0103 800×600 8 256
0×010D 320×200 15 32768
0×010E 320×200 16 65536
0×010F 320×200 24/32 1677216
0×0110 640×480 15 32768
0×0111 640×480 16 65536
0×0112 640×480 24/32 1677216
0×0113 800×600 15 32768
0×0114 800×600 16 65536
0×0115 800×600 24/32 1677216
0×0116 1024×768 15 32768
0×0117 1024×768 16 65536
0×0118 1024×768 24/32 1677216

9. Praktická část

V praktické části dnešního článku si ukážeme základní služby VBE neboli VESA BIOS Extension. Nejdříve zjistíme základní informace o grafické kartě a následně načteme informace o zvoleném grafickém režimu. A jak je již v tomto seriálu zvykem, implementace bude naprogramována v Netwide Assembleru pro operační systém DOS (tedy pro reálný režim se všemi omezeními, které tento režim mikroprocesoru přináší v praxi). Demonstrační příklady by měly být funkční pro všechny počítače s VBE (SW implementace či přímo součást ROM na kartě), nezávisle na verzi VBE. A pochopitelně jsou tyto příklady spustitelné i v DOSBoxu.

10. Přečtení základních informací o grafické kartě

První službou BIOSu grafických karet odpovídajících normě VESA, kterou si ukážeme, je hned první služba s číslem 00. Tato služba otestuje, zda je VBE dostupný a pokud ano, naplní paměťový blok o velikosti 256 resp. 512 bajtů (podle verze VBE) podrobnějšími informacemi o výrobci karty, dostupných grafických režimech atd. Navíc tato služba (i všechny další služby VBE) vrací v registru AL hodnotu 0×4F v případě, že je služba podporována. A v registru AH je vrácen příznak, zda bylo volání úspěšné či nikoli. V praxi nám tedy bude postačovat testovat hodnotu uloženou do registru AX na 0×004F, protože AX vznikne spojením registrů AH a AL (což již velmi dobře známe):

Vstup:  AH = 4Fh        Služby SVGA
        AL = 00h        Získání základních informací o SVGA
        ES:DI = ukazatel na buffer (256/512 bajtů)
 
Výstup: AL = 4Fh pokud je služba podporována, jinak odlišná hodnota
        AH = 00h pokud je volání úspěšné, jinak hodnota 01h
Poznámka: jedná se sice o VBE, ten je ovšem rozšířením Video služeb BIOSu. Proto se služby volají přes int 10h.

11. První demonstrační příklad: zjištění, zda je VBE dostupný

Dnešní první demonstrační příklad je velmi jednoduchý. Pouze v něm voláme výše popsanou službu VBE a na základě návratové hodnoty uložené v registru AX zjišťujeme, zda je VBE podporován či nikoli. Na základě tohoto testu se vypíše zpráva „Success“ nebo „Failed“:

;-----------------------------------------------------------------------------
org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
 
start:
        jmp main                   ; skok na zacatek kodu
 
%include "io.asm"                  ; nacist symboly, makra a podprogramy
%include "print.asm"               ; nacist symboly, makra a podprogramy
 
main:
        push ds
        pop  es                    ; nastaveni CS=DS=ES
 
        clc                        ; ziskani zakladnich informaci o VESA rezimech
        mov  di, vesa_block_info
        mov ax, 0x4f00
        int     0x10
 
        cmp ax, 0x004f             ; test, zda bylo volani funkce BIOSu uspesne
        jne     failed
 
success:
        print_string success_msg
        jmp     finish
 
failed:
        print_string failed_msg
 
finish:
        wait_key            ; cekani na klavesu
        exit                ; navrat do DOSu
 
 
; datova cast
section .data
 
success_msg: db "Success", 0x0a, 0x0d, "$"
failed_msg:  db "Failed", 0x0a, 0x0d, "$"
 
section .bss
vesa_block_info: resb 512

Zajímavé bude zjistit, jaké zprávy se vypíšou. V DOSBoxu, pokud je pochopitelně nakonfigurována karta SVGA (což v originální konfiguraci je), by se měla vypsat pouze zpráva:

Success

12. Blok s informacemi o grafické kartě

Služba VBE, kterou jsme volali v rámci prvního demonstračního příkladu, kromě návratového kódu naplní i paměťový blok o velikosti 256 nebo 512 bajtů (podle verze VBE), na který ukazuje dvojice registrů ES:DI. Struktura první části tohoto bloku je přesně definována, poté následuje 222 rezervovaných bajtů a následně 256 bajtů, které jsou v novějších verzích VBE použity pro účely výrobce grafických karet. Základní strukturu tohoto bloku můžeme v assembleru popsat následovně:

vesa_block_info:
        Signature               resb 4
        Version                 resw 1
        OEMNamePtr              resd 1
        Capabilities            resd 1
 
        VideoModesOffset        resw 1
        VideoModesSegment       resw 1
 
        CountOf64KBlocks        resw 1
        OEMSoftwareRevision     resw 1
        OEMVendorNamePtr        resd 1
        OEMProductNamePtr       resd 1
        OEMProductRevisionPtr   resd 1
        Reserved                resb 222
        OEMData                 resb 256
Poznámka: resb znamená reserve bytes, resw reserve 16bit words a resd reserve 32bit doublewords). Z toho lze usoudit, jak vypadají jednotlivé prvky v tomto bloku (první prvek je například čtveřice bajtů, naopak verze je šestnáctibitová hodnota atd.).

Některé důležité hodnoty předané v tomto bloku, si ukážeme v dalších demonstračních příkladech.

13. Druhý demonstrační příklad: zobrazení základních informací o grafické kartě

V dnešním druhém demonstračním příkladu si necháme vypsat základní informace o grafické kartě získané přes VBE. Z celého 256 bajtového nebo 512 bajtového bloku získáme tři důležité údaje:

  1. Signaturu na začátku paměťového bloku, která by měla obsahovat ASCII kódy znaků „VESA“ (ovšem nejedná se o řetězec)
  2. Verzi VBE ve formátu vyšší_bajt.nižší_bajt. Pokud se například vrátí hodnota 0×102, jedná se o verzi 1.2 atd.
  3. Kapacita obrazové paměti (VideoRAM) specifikovaná jako počet paměťových bloků, z nichž každý má velikost 64kB. Ovšem některé karty používají menší okna (zejména u starších karet byl tento údaj zavádějící). Nicméně většinou postačuje zde uloženou hodnotu vynásobit 64kB a získat tak celkovou kapacitu obrazové paměti.

Zdrojový kód tohoto příkladu vypadá následovně:

;-----------------------------------------------------------------------------
org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
 
start:
        jmp main                   ; skok na zacatek kodu
 
%include "io.asm"                  ; nacist symboly, makra a podprogramy
%include "print.asm"               ; nacist symboly, makra a podprogramy
 
main:
        push ds
        pop  es                    ; nastaveni CS=DS=ES
 
        clc                        ; ziskani zakladnich informaci o VESA rezimech
        mov  di, vesa_block_info
        mov ax, 0x4f00
        int     0x10
 
        cmp ax, 0x004f             ; test, zda bylo volani funkce BIOSu uspesne
        jne     failed
 
success:
        print_string success_msg
 
        mov eax, [Signature]       ; zkopirovat VESA signaturu do DOSovskeho retezce
        mov [signature_msg], eax
        print_string signature_msg ; tisk naplneneho retezce
 
        sub eax, eax
        mov ax, [Version]          ; verze VBE
        print_hex eax
 
        sub eax, eax
        mov ax, [CountOf64KBlocks] ; pocet 64kB bloku video RAM
        print_dec eax
 
        jmp     finish
 
failed:
        print_string failed_msg
 
finish:
        wait_key            ; cekani na klavesu
        exit                ; navrat do DOSu
 
 
; datova cast
section .data
 
success_msg:     db "Success", 0x0a, 0x0d, "$"
failed_msg:      db "Failed", 0x0a, 0x0d, "$"
signature_msg:   db "????", 0x0a, 0x0d, "$"
 
section .bss
vesa_block_info:
        Signature               resb 4
        Version                 resw 1
        OEMNamePtr              resd 1
        Capabilities            resd 1
 
        VideoModesOffset        resw 1
        VideoModesSegment       resw 1
 
        CountOf64KBlocks        resw 1
        OEMSoftwareRevision     resw 1
        OEMVendorNamePtr        resd 1
        OEMProductNamePtr       resd 1
        OEMProductRevisionPtr   resd 1
        Reserved                resb 222
        OEMData                 resb 256

V mém konkrétním případě se vypíše:

Success
VESA
00000200
0000000064

To znamená, že verze VBE je rovna 2.0 a grafická karta má 64 oken, každé o velikosti 64kB. Celkem jsou tedy na kartě nainstalovány 4MB Video RAM.

14. Třetí demonstrační příklad: výpis OEM řetězce s další informací o kartě

Ve třetím příkladu, který si dnes ukážeme, se navíc ještě vypisuje řetězec s označením grafické karty. Tento řetězec je umístěn na adrese, která je uložena jako dvojice segment:offset v prvcích OEMNamePtr+2 a OEMNamePtr. Jedná se o céčkovský řetězec ukončený nulou, který nelze přímo vypsat funkcemi DOSu, takže jsem pro jednoduchost zvolil výpis stylem znak po znaku, což je sice pomalé, ale pro typicky hodně krátké řetězce nám to nemusí příliš vadit:

        mov es, [OEMNamePtr+2]     ; dlouhy ukazatel na retezec
        mov bx, [OEMNamePtr]       ; ukonceny nulou
next_char:
        mov dl, es:[bx]            ; nacteni znaku
        cmp dl, 0                  ; test na ukoncovaci nulu
        jz  end_str
        mov ah, 02                 ; DOS funkce pro tisk znaku
        int 0x21
        inc bx                     ; prechod na dalsi znak
        jmp next_char              ; pokracujeme
end_str:

V mém případě se vypíšou tyto údaje (jméno výrobce a typ grafické karty):

S3 Incorporated. Trio64

Úplný zdrojový kód tohoto příkladu vypadá následovně:

;-----------------------------------------------------------------------------
org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
 
start:
        jmp main                   ; skok na zacatek kodu
 
%include "io.asm"                  ; nacist symboly, makra a podprogramy
%include "print.asm"               ; nacist symboly, makra a podprogramy
 
main:
        push ds
        pop  es                    ; nastaveni CS=DS=ES
 
        clc                        ; ziskani zakladnich informaci o VESA rezimech
        mov  di, vesa_block_info
        mov ax, 0x4f00
        int     0x10
 
        cmp ax, 0x004f             ; test, zda bylo volani funkce BIOSu uspesne
        jne     failed
 
success:
        print_string success_msg
 
        mov eax, [Signature]       ; zkopirovat VESA signaturu do DOSovskeho retezce
        mov [signature_msg], eax
        print_string signature_msg ; tisk naplneneho retezce
 
        sub eax, eax
        mov ax, [Version]          ; verze VBE
        print_hex eax
 
        sub eax, eax
        mov ax, [CountOf64KBlocks] ; pocet 64kB bloku video RAM
        print_dec eax
 
        mov es, [OEMNamePtr+2]     ; dlouhy ukazatel na retezec
        mov bx, [OEMNamePtr]       ; ukonceny nulou
next_char:
        mov dl, es:[bx]            ; nacteni znaku
        cmp dl, 0                  ; test na ukoncovaci nulu
        jz  end_str
        mov ah, 02                 ; DOS funkce pro tisk znaku
        int 0x21
        inc bx                     ; prechod na dalsi znak
        jmp next_char              ; pokracujeme
end_str:
 
        jmp     finish
 
failed:
        print_string failed_msg
 
finish:
        wait_key            ; cekani na klavesu
        exit                ; navrat do DOSu
 
 
; datova cast
section .data
 
success_msg:     db "Success", 0x0a, 0x0d, "$"
failed_msg:      db "Failed", 0x0a, 0x0d, "$"
signature_msg:   db "????", 0x0a, 0x0d, "$"
 
section .bss
vesa_block_info:
        Signature               resb 4
        Version                 resw 1
        OEMNamePtr              resd 1
        Capabilities            resd 1
 
        VideoModesOffset        resw 1
        VideoModesSegment       resw 1
 
        CountOf64KBlocks        resw 1
        OEMSoftwareRevision     resw 1
        OEMVendorNamePtr        resd 1
        OEMProductNamePtr       resd 1
        OEMProductRevisionPtr   resd 1
        Reserved                resb 222
        OEMData                 resb 256

15. Čtvrtý demonstrační příklad: zjištění a výpis čísel všech podporovaných grafických režimů

Dalším důležitým údajem, který o sobě grafická karta přes VBE prozrazuje, je tabulka s čísly grafických ale i textových režimů (ovšem bez dalších podrobností). Adresa (ukazatel) na tuto tabulku je uložena ve dvojici VideoModesSegment a VideoModesOffset, přičemž každé číslo režimu je šestnáctibitové. Na konci tabulky je uložena šestnáctibitová hodnota –1 (tedy 0×ffff), kterou budeme hledat, aby bylo možné ukončit smyčku, která čísla všech grafických režimů vypíše:

        mov es, [VideoModesSegment] ; tabulka s cisly grafickych rezimu
        mov bx, [VideoModesOffset]
 
next_mode:
        xor eax, eax
        mov ax, es:[bx]            ; nacteni cisla rezimu
        cmp ax, -1                 ; jde o posledni zaznam?
        je  last_mode              ; ano -> koncime
        print_dec eax              ; tisk cisla rezimu
        inc bx                     ; offset pro dalsi rezim
        inc bx
        jmp next_mode              ; pokracujeme
last_mode:

Opět se podívejme, jaká čísla režimů se vypíšou pro grafickou kartu Trio64:

0000000256
0000000257
0000000258
0000000259
0000000260
0000000261
0000000262
0000000263
0000000264
0000000265
0000000266
0000000267
0000000268
0000000272
0000000273
0000000274
0000000275
0000000276
0000000277
0000000278
0000000279
0000000280
0000000281
0000000282
0000000288
0000000289
0000000290
0000000337
0000000341
0000000342
0000000343
0000000344
0000000352
0000000358
0000000359
0000000360
0000000361
0000000362
0000000364
0000000368
0000000375
0000000376
0000000379
0000000380
0000000381
0000000382
0000000383
0000000384
0000000386
0000000387
0000000400
0000000519
0000000521
0000000522
0000000523
0000000530
0000000531
0000000533
0000000534

Celý zdrojový kód takto upraveného demonstračního příkladu vypadá následovně:

;-----------------------------------------------------------------------------
org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
 
start:
        jmp main                   ; skok na zacatek kodu
 
%include "io.asm"                  ; nacist symboly, makra a podprogramy
%include "print.asm"               ; nacist symboly, makra a podprogramy
 
main:
        push ds
        pop  es                    ; nastaveni CS=DS=ES
 
        clc                        ; ziskani zakladnich informaci o VESA rezimech
        mov  di, vesa_block_info
        mov ax, 0x4f00
        int     0x10
 
        cmp ax, 0x004f             ; test, zda bylo volani funkce BIOSu uspesne
        jne     failed
 
success:
        print_string success_msg
 
        mov eax, [Signature]       ; zkopirovat VESA signaturu do DOSovskeho retezce
        mov [signature_msg], eax
        print_string signature_msg ; tisk naplneneho retezce
 
        sub eax, eax               ; nacitame jen AX, proto vymazat hornich 32 bitu EAX
        mov ax, [Version]          ; verze VBE
        print_hex eax
 
        mov ax, [CountOf64KBlocks] ; pocet 64kB bloku video RAM
        print_dec_16 eax
 
        mov es, [OEMNamePtr+2]     ; dlouhy ukazatel na retezec
        mov bx, [OEMNamePtr]       ; ukonceny nulou
next_char:
        mov dl, es:[bx]            ; nacteni znaku
        cmp dl, 0                  ; test na ukoncovaci nulu
        jz  end_str
        mov ah, 02                 ; DOS funkce pro tisk znaku
        int 0x21
        inc bx                     ; prechod na dalsi znak
        jmp next_char              ; pokracujeme
end_str:
 
        mov es, [VideoModesSegment] ; tabulka s cisly grafickych rezimu
        mov bx, [VideoModesOffset]
 
next_mode:
        xor eax, eax
        mov ax, es:[bx]            ; nacteni cisla rezimu
        cmp ax, -1                 ; jde o posledni zaznam?
        je  last_mode              ; ano -> koncime
        print_dec eax              ; tisk cisla rezimu
        inc bx                     ; offset pro dalsi rezim
        inc bx
        jmp next_mode              ; pokracujeme
last_mode:
 
        jmp     finish
 
failed:
        print_string failed_msg
 
finish:
        wait_key            ; cekani na klavesu
        exit                ; navrat do DOSu
 
 
; datova cast
section .data
 
success_msg:     db "Success", 0x0a, 0x0d, "$"
failed_msg:      db "Failed", 0x0a, 0x0d, "$"
signature_msg:   db "????", 0x0a, 0x0d, "$"
 
section .bss
vesa_block_info:
        Signature               resb 4
        Version                 resw 1
        OEMNamePtr              resd 1
        Capabilities            resd 1
 
        VideoModesOffset        resw 1
        VideoModesSegment       resw 1
 
        CountOf64KBlocks        resw 1
        OEMSoftwareRevision     resw 1
        OEMVendorNamePtr        resd 1
        OEMProductNamePtr       resd 1
        OEMProductRevisionPtr   resd 1
        Reserved                resb 222
        OEMData                 resb 256

16. Přečtení informací o zvoleném grafickém režimu

Prvním voláním služby VBE jsme získali mj. tabulku s čísly grafických režimů, ovšem vůbec nevíme, jaké jsou vlastnosti jednotlivých režimů (a dokonce ani to, jestli se jedná o režim grafický nebo textový). Podrobné informace o jednom vybraném grafickém režimu musíme zjistit další službou, konkrétně službou číslo 0×4F a podslužbou 1. Do registru CX je nutné zadat číslo režimu, který potřebujeme prozkoumat a v registrovém páru ES:DI musí být předán ukazatel na buffer o délce 256 bajtů, do kterého se uloží podrobné informace o zvoleném režimu:

Vstup:  AH = 4Fh        Služby SVGA
        AL = 01h        Získání informací o zvoleném grafickém režimu
        CX = číslo režimu
        ES:DI = ukazatel na buffer (256 bajtů)
 
Výstup: AL = 4Fh pokud je služba podporována, jinak odlišná hodnota
        AH = 00h pokud je volání úspěšné, jinak hodnota 01h

Blok o délce 256 bajtů, který je vyplněn, má tuto strukturu:

graphics_mode_block_info:
        ModeAttributes      resw 1 ; mode attributes
        WinAAttributes      resb 1 ; window A attributes
        WinBAttributes      resb 1 ; window B attributes
        WinGranularity      resw 1 ; window granularity
        WinSize             resw 1 ; window size
        WinASegment         resw 1 ; window A start segment
        WinBSegment         resw 1 ; window B start segment
        WinFuncPtr          resd 1 ; pointer to windor function
        BytesPerScanLine    resw 1 ; bytes per scan line
 
        XResolution         resw 1 ; horizontal resolution
        YResolution         resw 1 ; vertical resolution
        XCharSize           resb 1 ; character cell width
        YCharSize           resb 1 ; character cell height
        NumberOfPlanes      resb 1 ; number of memory planes
        BitsPerPixel        resb 1 ; bits per pixel
        NumberOfBanks       resb 1 ; number of banks
        MemoryModel         resb 1 ; memory model type
        BankSize            resb 1 ; bank size in kb
        NumberOfImagePages  resb 1 ; number of images
        Reserved1           resb 1 ; reserved for page function
 
        RedMaskSize         resb 1 ; size of direct color red mask in bits
        RedFieldPosition    resb 1 ; bit position of LSB of red mask
        GreenMaskSize       resb 1 ; size of direct color green mask in bits
        GreenFieldPosition  resb 1 ; bit position of LSB of green mask
        BlueMaskSize        resb 1 ; size of direct color blue mask in bits
        BlueFieldPosition   resb 1 ; bit position of LSB of blue mask
        RsvdMaskSize        resb 1 ; size of direct color reserved mask in bits
        DirectColorModeInfo resb 1 ; Direct Color mode attributes
        Reserved2           resb 216 ; remainder of ModeInfoBlock
Poznámka: ne všechny položky musí být relevantní, proto si ukážeme jen ty nejdůležitější prvky.

17. Pátý demonstrační příklad: získání rozlišení, bitové hloubky a struktury obrazových řádků zvoleného grafického režimu

Jak se tedy postupuje v praxi? Aplikace (nebo přímo uživatel) si vybere požadované rozlišení a počet barev. Následně je nutné projít všemi nabízenými grafickými režimy a vybrat z nich ten, který odpovídá požadavkům. Například aplikace bude vyžadovat rozlišení 800×600 pixelů s 256 barvami – takový režim je typicky podporovaný většinou SVGA karet. Naopak některé režimy s rozlišením přesahujícím 1024×768 pixelů podporovány být nemusí.

V dnešním předposledním demonstračním příkladu si necháme vypsat základní informace o grafickém režimu číslo 0×103. Pokud grafická karta tento režim podporuje, vypíše se jeho rozlišení (pro grafické režimy je přímo uvedeno v pixelech), počet bajtů alokovaných pro každý obrazový řádek, počet bitů pro uložení jednoho pixelu a taktéž počet bitových rovin (což je spíše historická hodnota, protože se typicky vrací jediná bitová rovina):

;-----------------------------------------------------------------------------
org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
 
start:
        jmp main                   ; skok na zacatek kodu
 
%include "io.asm"                  ; nacist symboly, makra a podprogramy
%include "print.asm"               ; nacist symboly, makra a podprogramy
 
main:
        push ds
        pop  es                    ; nastaveni CS=DS=ES
 
        clc                        ; ziskani zakladnich informaci o grafickem rezimu
        mov  di, graphics_mode_block_info
        mov  cx, 0x103             ; cislo rezimu
        mov  ax, 0x4f01
        int      0x10
 
        cmp ax, 0x004f             ; test, zda bylo volani funkce BIOSu uspesne
        jne     failed
 
success:
        print_string success_msg
 
        mov ax, [XResolution]
        print_dec_16
 
        mov ax, [YResolution]
        print_dec_16
 
        mov ax, [BytesPerScanLine]
        print_dec_16
 
        mov al, [BitsPerPixel]
        print_dec_8
 
        mov al, [NumberOfPlanes]
        print_dec_8
 
        jmp     finish
 
failed:
        print_string failed_msg
 
finish:
        wait_key            ; cekani na klavesu
        exit                ; navrat do DOSu
 
 
; datova cast
section .data
 
success_msg:     db "Success", 0x0a, 0x0d, "$"
failed_msg:      db "Failed", 0x0a, 0x0d, "$"
 
section .bss
graphics_mode_block_info:
        ModeAttributes      resw 1 ; mode attributes
        WinAAttributes      resb 1 ; window A attributes
        WinBAttributes      resb 1 ; window B attributes
        WinGranularity      resw 1 ; window granularity
        WinSize             resw 1 ; window size
        WinASegment         resw 1 ; window A start segment
        WinBSegment         resw 1 ; window B start segment
        WinFuncPtr          resd 1 ; pointer to windor function
        BytesPerScanLine    resw 1 ; bytes per scan line
 
        XResolution         resw 1 ; horizontal resolution
        YResolution         resw 1 ; vertical resolution
        XCharSize           resb 1 ; character cell width
        YCharSize           resb 1 ; character cell height
        NumberOfPlanes      resb 1 ; number of memory planes
        BitsPerPixel        resb 1 ; bits per pixel
        NumberOfBanks       resb 1 ; number of banks
        MemoryModel         resb 1 ; memory model type
        BankSize            resb 1 ; bank size in kb
        NumberOfImagePages  resb 1 ; number of images
        Reserved1           resb 1 ; reserved for page function
 
        RedMaskSize         resb 1 ; size of direct color red mask in bits
        RedFieldPosition    resb 1 ; bit position of LSB of red mask
        GreenMaskSize       resb 1 ; size of direct color green mask in bits
        GreenFieldPosition  resb 1 ; bit position of LSB of green mask
        BlueMaskSize        resb 1 ; size of direct color blue mask in bits
        BlueFieldPosition   resb 1 ; bit position of LSB of blue mask
        RsvdMaskSize        resb 1 ; size of direct color reserved mask in bits
        DirectColorModeInfo resb 1 ; Direct Color mode attributes
        Reserved2           resb 216 ; remainder of ModeInfoBlock

Po překladu a spuštění tohoto příkladu se v mém případě (ale i na mnoha dalších počítačích) vypíše:

Success
0000000800
0000000600
0000000800
0000000008
0000000001

Jak se tyto údaje dekódují? První dva řádky naznačují rozlišení grafického režimu 800×600 pixelů. Další řádek uvádí, že délka obrazové řádky je 800 bajtů. Na pátém řádku je uvedeno, že bitová hloubka je osm bitů na pixel a tudíž tento režim podporuje 256 barev. A na posledním řádku je uvedeno, že počet bitových rovin je roven jedné.

18. Šestý demonstrační příklad: základní informace o čtecích a zápisových oknech pro reálný režim

Údaje o rozlišení a počtu barev, které jsme doposud zjistili, poskytují požadované informace z uživatelského pohledu. Uživatel (nebo aplikace) totiž vybírá právě tyto údaje. Ovšem pro čtení a zápis do obrazové paměti je nutné mít k dispozici ještě více informací – zejména to, jak velké jsou paměťové banky (okna), kolik těchto oken je k dispozici atd. Tyto údaje si necháme zjistit a vypsat dnešním posledním demonstračním příkladem, jehož zdrojový kód vypadá následovně:

;-----------------------------------------------------------------------------
org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
 
start:
        jmp main                   ; skok na zacatek kodu
 
%include "io.asm"                  ; nacist symboly, makra a podprogramy
%include "print.asm"               ; nacist symboly, makra a podprogramy
 
main:
        push ds
        pop  es                    ; nastaveni CS=DS=ES
 
        clc                        ; ziskani zakladnich informaci o grafickem rezimu
        mov  di, graphics_mode_block_info
        mov  cx, 0x103             ; cislo rezimu
        mov  ax, 0x4f01
        int      0x10
 
        cmp ax, 0x004f             ; test, zda bylo volani funkce BIOSu uspesne
        jne     failed
 
success:
        print_string success_msg
 
        xor eax, eax
 
        mov al, [WinAAttributes]
        print_hex eax
 
        xor eax, eax
 
        mov al, [WinBAttributes]
        print_hex eax
 
        xor eax, eax
 
        mov ax, [WinGranularity]
        print_dec_8
 
        jmp     finish
 
failed:
        print_string failed_msg
 
finish:
        wait_key            ; cekani na klavesu
        exit                ; navrat do DOSu
 
 
; datova cast
section .data
 
success_msg:     db "Success", 0x0a, 0x0d, "$"
failed_msg:      db "Failed", 0x0a, 0x0d, "$"
 
section .bss
graphics_mode_block_info:
        ModeAttributes      resw 1 ; mode attributes
        WinAAttributes      resb 1 ; window A attributes
        WinBAttributes      resb 1 ; window B attributes
        WinGranularity      resw 1 ; window granularity
        WinSize             resw 1 ; window size
        WinASegment         resw 1 ; window A start segment
        WinBSegment         resw 1 ; window B start segment
        WinFuncPtr          resd 1 ; pointer to windor function
        BytesPerScanLine    resw 1 ; bytes per scan line
 
        XResolution         resw 1 ; horizontal resolution
        YResolution         resw 1 ; vertical resolution
        XCharSize           resb 1 ; character cell width
        YCharSize           resb 1 ; character cell height
        NumberOfPlanes      resb 1 ; number of memory planes
        BitsPerPixel        resb 1 ; bits per pixel
        NumberOfBanks       resb 1 ; number of banks
        MemoryModel         resb 1 ; memory model type
        BankSize            resb 1 ; bank size in kb
        NumberOfImagePages  resb 1 ; number of images
        Reserved1           resb 1 ; reserved for page function
 
        RedMaskSize         resb 1 ; size of direct color red mask in bits
        RedFieldPosition    resb 1 ; bit position of LSB of red mask
        GreenMaskSize       resb 1 ; size of direct color green mask in bits
        GreenFieldPosition  resb 1 ; bit position of LSB of green mask
        BlueMaskSize        resb 1 ; size of direct color blue mask in bits
        BlueFieldPosition   resb 1 ; bit position of LSB of blue mask
        RsvdMaskSize        resb 1 ; size of direct color reserved mask in bits
        DirectColorModeInfo resb 1 ; Direct Color mode attributes
        Reserved2           resb 216 ; remainder of ModeInfoBlock

Opět se podívejme na vypsané informace:

Success
00000007
00000000
0000000064

Jak se tyto informace použijí? K dispozici je podpora pro použití jednoho okna (WindowA), které lze použít jak pro čtení z obrazové paměti, tak i pro zápis do ní. Druhé okno podporováno není (dolní tři bity jsou nulové). A tzv. granularita okna A je rovna 64 kilobajtům. To znamená, že okno bude mapováno do „klasického“ segmentu 0×A000, jak je tomu zvykem již od dob grafických karet EGA a VGA. Pozor si musíme dát na to, že některé karty mají granularitu 4 kB nebo 16 kB, nikoli celých 64 kB. To je ovšem téma, kterému se budeme podrobněji věnovat v navazujícím článku.

Jen pro úplnost si uveďme význam bitů určujících vlastnosti okna A a popř. i okna B:

Bit Význam
0 1=okno je podporováno HW karty
1 1=z okna je možné číst data (z obrazové paměti)
2 1=do okna je možné zapisovat data (do obrazové paměti)
3–7 rezervováno

19. Repositář s demonstračními příklady

Demonstrační příklady napsané v assembleru, které jsou určené pro překlad s využitím assembleru NASM, byly uloženy do Git repositáře, který je dostupný na adrese https://github.com/tisnik/8bit-fame. Jednotlivé demonstrační příklady si můžete v případě potřeby stáhnout i jednotlivě bez nutnosti klonovat celý (dnes již poměrně rozsáhlý) repositář:

# Příklad Stručný popis Adresa
1 hello.asm program typu „Hello world“ naprogramovaný v assembleru pro systém DOS https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hello.asm
2 hello_shorter.asm kratší varianta výskoku z procesu zpět do DOSu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hello_shorter.asm
3 hello_wait.asm čekání na stisk klávesy https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hello_wait.asm
4 hello_macros.asm realizace jednotlivých částí programu makrem https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hello_macros.asm
       
5 gfx4_putpixel.asm vykreslení pixelu v grafickém režimu 4 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_putpixel.asm
6 gfx6_putpixel.asm vykreslení pixelu v grafickém režimu 6 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_putpixel.asm
7 gfx4_line.asm vykreslení úsečky v grafickém režimu 4 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_line.asm
8 gfx6_line.asm vykreslení úsečky v grafickém režimu 6 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_line.asm
       
9 gfx6_fill1.asm vyplnění obrazovky v grafickém režimu, základní varianta https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_fill1.asm
10 gfx6_fill2.asm vyplnění obrazovky v grafickém režimu, varianta s instrukcí LOOP https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_fill2.asm
11 gfx6_fill3.asm vyplnění obrazovky instrukcí REP STOSB https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_fill3.asm
12 gfx6_fill4.asm vyplnění obrazovky, synchronizace vykreslování s paprskem https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_fill4.asm
       
13 gfx4_image1.asm vykreslení rastrového obrázku získaného z binárních dat, základní varianta https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_image1.asm
14 gfx4_image2.asm varianta vykreslení rastrového obrázku s využitím instrukce REP MOVSB https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_image2.asm
15 gfx4_image3.asm varianta vykreslení rastrového obrázku s využitím instrukce REP MOVSW https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_image3.asm
16 gfx4_image4.asm korektní vykreslení všech sudých řádků bitmapy https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_image4.asm
17 gfx4_image5.asm korektní vykreslení všech sudých i lichých řádků bitmapy https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_image5.asm
       
18 gfx4_image6.asm nastavení barvové palety před vykreslením obrázku https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_image6.asm
19 gfx4_image7.asm nastavení barvové palety před vykreslením obrázku, snížená intenzita barev https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_image7.asm
20 gfx4_image8.asm postupná změna barvy pozadí https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_image8.asm
       
21 gfx6_putpixel1.asm vykreslení pixelu, základní varianta se 16bitovým násobením https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_putpixel1.asm
22 gfx6_putpixel2.asm vykreslení pixelu, varianta s osmibitovým násobením https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_putpixel2.asm
23 gfx6_putpixel3.asm vykreslení pixelu, varianta bez násobení https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_putpixel3.asm
24 gfx6_putpixel4.asm vykreslení pixelu přes obrázek, nekorektní chování (přepis obrázku) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_putpixel4.asm
25 gfx6_putpixel5.asm vykreslení pixelu přes obrázek, korektní varianta pro bílé pixely https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_putpixel5.asm
       
26 cga_text_mode1.asm standardní textový režim s rozlišením 40×25 znaků https://github.com/tisnik/8bit-fame/blob/master/pc-dos/cga_text_mode1.asm
27 cga_text_mode3.asm standardní textový režim s rozlišením 80×25 znaků https://github.com/tisnik/8bit-fame/blob/master/pc-dos/cga_text_mode3.asm
28 cga_text_mode_intensity.asm změna významu nejvyššího bitu atributového bajtu: vyšší intenzita namísto blikání https://github.com/tisnik/8bit-fame/blob/master/pc-dos/cga_text_mode_intensity.asm
29 cga_text_mode_cursor.asm změna tvaru textového kurzoru https://github.com/tisnik/8bit-fame/blob/master/pc-dos/cga_text_mode_cursor.asm
30 cga_text_gfx1.asm zobrazení „rastrové mřížky“: pseudografický režim 160×25 pixelů (interně textový režim) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/cga_text_gfx1.asm
31 cga_text_mode_char_height.asm změna výšky znaků https://github.com/tisnik/8bit-fame/blob/master/pc-dos/cga_text_mode_char_height.asm
32 cga_text_160×100.asm grafický režim 160×100 se šestnácti barvami (interně upravený textový režim) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/cga_text_160×100.asm
       
33 hercules_text_mode1.asm využití standardního textového režimu společně s kartou Hercules https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hercules_text_mode1.asm
34 hercules_text_mode2.asm zákaz blikání v textových režimech https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hercules_text_mode2.asm
35 hercules_turn_off.asm vypnutí generování video signálu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hercules_turn_off.asm
36 hercules_gfx_mode1.asm přepnutí karty Hercules do grafického režimu (základní varianta) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hercules_gfx_mode1.asm
37 hercules_gfx_mode2.asm přepnutí karty Hercules do grafického režimu (vylepšená varianta) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hercules_gfx_mode2.asm
38 hercules_putpixel.asm subrutina pro vykreslení jediného pixelu na kartě Hercules https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hercules_putpixel.asm
       
39 ega_text_mode_80×25.asm standardní textový režim 80×25 znaků na kartě EGA https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_text_mode_80×25.asm
40 ega_text_mode_80×43.asm zobrazení 43 textových řádků na kartě EGA https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_text_mode_80×43.asm
41 ega_gfx_mode_320×200.asm přepnutí do grafického režimu 320×200 pixelů se šestnácti barvami https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_gfx_mode_320×200.asm
42 ega_gfx_mode_640×200.asm přepnutí do grafického režimu 640×200 pixelů se šestnácti barvami https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_gfx_mode_640×200.asm
43 ega_gfx_mode_640×350.asm přepnutí do grafického režimu 640×350 pixelů se čtyřmi nebo šestnácti barvami https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_gfx_mode_640×350.asm
44 ega_gfx_mode_bitplanes1.asm ovládání zápisu do bitových rovin v planárních grafických režimech (základní způsob) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_gfx_mode_bitplanes1.asm
45 ega_gfx_mode_bitplanes2.asm ovládání zápisu do bitových rovin v planárních grafických režimech (rychlejší způsob) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_gfx_mode_bitplanes2.asm
       
46 ega_320×200_putpixel.asm vykreslení pixelu v grafickém režimu 320×200 pixelů se šestnácti barvami https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_320×200_putpixel.asm
47 ega_640×350_putpixel.asm vykreslení pixelu v grafickém režimu 640×350 pixelů se šestnácti barvami https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_640×350_putpixel.asm
       
48 ega_standard_font.asm použití standardního fontu grafické karty EGA https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_standard_font.asm
49 ega_custom_font.asm načtení vlastního fontu s jeho zobrazením https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_custom_font.asm
       
50 ega_palette1.asm změna barvové palety (všech 16 barev) v grafickém režimu 320×200 se šestnácti barvami https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_palette1.asm
51 ega_palette2.asm změna barvové palety (všech 16 barev) v grafickém režimu 640×350 se šestnácti barvami https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_palette2.asm
52 ega_palette3.asm změna všech barev v barvové paletě s využitím programové smyčky https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_palette3.asm
53 ega_palette4.asm změna všech barev, včetně barvy okraje, v barvové paletě voláním funkce BIOSu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_palette4.asm
       
54 vga_text_mode_80×25.asm standardní textový režim 80×25 znaků na kartě VGA https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_text_mode_80×25.asm
55 vga_text_mode_80×50.asm zobrazení 50 a taktéž 28 textových řádků na kartě VGA https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_text_mode_80×50.asm
56 vga_text_mode_intensity1.asm změna chování atributového bitu pro blikání (nebezpečná varianta změny registrů) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_text_mode_intensity1.asm
57 vga_text_mode_intensity2.asm změna chování atributového bitu pro blikání (bezpečnější varianta změny registrů) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_text_mode_intensity2.asm
58 vga_text_mode_9th_column.asm modifikace způsobu zobrazení devátého sloupce ve znakových režimech (720 pixelů na řádku) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_text_mode_9th_column.asm
59 vga_text_mode_cursor_shape.asm změna tvaru textového kurzoru na grafické kartě VGA https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_text_mode_cursor_shape.asm
60 vga_text_mode_custom_font.asm načtení vlastního fontu s jeho zobrazením https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_text_mode_custom_font.asm
       
61 vga_gfx_mode_640×480.asm přepnutí do grafického režimu 640×480 pixelů se šestnácti barvami, vykreslení vzorků https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_640×480.asm
62 vga_gfx_mode_320×200.asm přepnutí do grafického režimu 320×200 pixelů s 256 barvami, vykreslení vzorků https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_320×200.asm
63 vga_gfx_mode_palette.asm změna všech barev v barvové paletě grafické karty VGA https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_palette.asm
64 vga_gfx_mode_dac1.asm využití DAC (neočekávané výsledky) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_dac1.asm
65 vga_gfx_mode_dac2.asm využití DAC (očekávané výsledky) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_dac2.asm
       
66 vga_640×480_putpixel.asm realizace algoritmu pro vykreslení pixelu v grafickém režimu 640×480 pixelů se šestnácti barvami https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_640×480_putpixel.asm
67 vga_320×200_putpixel1.asm realizace algoritmu pro vykreslení pixelu v grafickém režimu 320×200 s 256 barvami (základní varianta) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_putpixel1.asm
68 vga_320×200_putpixel2.asm realizace algoritmu pro vykreslení pixelu v grafickém režimu 320×200 s 256 barvami (rychlejší varianta) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_putpixel2.asm
       
69 vga_gfx_mode_dac3.asm přímé využití DAC v grafickém režimu 13h https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_dac3.asm
       
70 vga_gfx_mode_unchained_step1.asm zobrazení barevných pruhů v režimu 13h https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_unchained_step1.asm
71 vga_gfx_mode_unchained_step2.asm vypnutí zřetězení bitových rovin a změna způsobu adresování pixelů https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_unchained_step2.asm
72 vga_gfx_mode_unchained_step3.asm vykreslení barevných pruhů do vybraných bitových rovin https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_unchained_step3.asm
       
73 vga_gfx_mode_320×400.asm nestandardní grafický režim s rozlišením 320×400 pixelů a 256 barvami https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_320×400.asm
74 vga_320×200_image.asm zobrazení rastrového obrázku ve standardním grafickém režimu 320×200 pixelů https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_image.asm
75 vga_320×200_unchained_image1.asm zobrazení rastrového obrázku v režimu s nezřetězenými rovinami (nekorektní řešení) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_unchained_image1.asm
76 vga_320×200_unchained_image2.asm zobrazení rastrového obrázku v režimu s nezřetězenými rovinami (korektní řešení) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_unchained_image2.asm
77 vga_320×400_unchained_image.asm zobrazení rastrového obrázku v nestandardním režimu 320×400 pixelů https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×400_unchained_image.asm
       
78 vga_vertical_scroll1.asm vertikální scrolling na kartě VGA v režimu s rozlišením 320×200 pixelů https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_vertical_scroll1.asm
79 vga_vertical_scroll2.asm vertikální scrolling na kartě VGA v režimu s rozlišením 320×400 pixelů https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_vertical_scroll2.asm
80 vga_split_screen1.asm režim split-screen a scrolling, nefunční varianta https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_split_screen1.asm
81 vga_split_screen2.asm režim split-screen a scrolling, plně funkční varianta https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_split_screen2.asm
82 vga_horizontal_scroll1.asm horizontální scrolling bez rozšíření počtu pixelů na virtuálním řádku https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_horizontal_scroll1.asm
83 vga_horizontal_scroll2.asm horizontální scrolling s rozšířením počtu pixelů na virtuálním řádku https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_horizontal_scroll2.asm
84 vga_horizontal_scroll3.asm jemný horizontální scrolling s rozšířením počtu pixelů na virtuálním řádku https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_horizontal_scroll3.asm
       
85 vga_320×240_image.asm nastavení grafického režimu Mode-X, načtení a vykreslení obrázku, scrolling https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×240_image.asm
       
86 io.asm knihovna maker pro I/O operace https://github.com/tisnik/8bit-fame/blob/master/pc-dos/io.asm
87 vga_lib.asm knihovna maker a podprogramů pro programování karty VGA https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_lib.asm
88 vga_320×240_lib.asm nastavení grafického režimu Mode-X, tentokrát knihovními funkcemi https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×240_lib.asm
       
89 vga_bitblt1.asm první (naivní) implementace operace BitBLT https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_bitblt1.asm
90 vga_bitblt2.asm operace BitBLT s výběrem bitových rovin pro zápis https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_bitblt2.asm
91 vga_bitblt3.asm operace BitBLT s výběrem bitových rovin pro čtení i zápis https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_bitblt3.asm
92 vga_bitblt4.asm korektní BitBLT pro 16barevný režim, realizace makry https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_bitblt4.asm
93 vga_bitblt5.asm korektní BitBLT pro 16barevný režim, realizace podprogramem https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_bitblt5.asm
       
94 vga_bitblt_rotate.asm zápisový režim s rotací bajtu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_bitblt_rotate.asm
95 vga_bitblt_fast.asm rychlá korektní 32bitová operace typu BitBLT https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_bitblt_fast.asm
96 vga_320×400_bitblt1.asm přenos obrázku v režimu 320×400 operací BitBLT (neúplná varianta) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×400_bitblt1.asm
97 vga_320×400_bitblt2.asm přenos obrázku v režimu 320×400 operací BitBLT (úplná varianta) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×400_bitblt2.asm
98 vga_write_modes1.asm volitelné zápisové režimy grafické karty VGA, zápis bez úpravy latche https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_write_modes1.asm
99 vga_write_modes2.asm volitelné zápisové režimy grafické karty VGA, zápis s modifikací latche https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_write_modes2.asm
100 vga_write_modes3.asm volitelné zápisové režimy grafické karty VGA, cílená modifikace latche vzorkem https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_write_modes3.asm
       
101 instruction_jump.asm použití instrukce JMP https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_jump.asm
102 instruction_jnz.asm použití instrukce JNZ pro realizaci programové smyčky https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_jnz.asm
103 instruction_jz_jmp.asm použití instrukcí JZ a JMP pro realizaci programové smyčky https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_jz_jmp.asm
104 instruction_loop.asm použití instrukce LOOP pro realizaci programové smyčky https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_loop.asm
       
105 instruction_template.asm šablona všech následujících demonstračních příkladů https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_template.asm
106 instruction_print_hex.asm tisk osmibitové hexadecimální hodnoty https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_print_hex.asm
107 instruction_xlat.asm využití instrukce XLAT pro získání tisknutelné hexadecimální cifry https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_xlat.asm
       
108 instruction_daa.asm operace součtu s využitím binární i BCD aritmetiky https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_daa.asm
109 instruction_daa_sub.asm instrukce DAA po provedení operace rozdílu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_daa_sub.asm
110 instruction_das.asm instrukce DAS po provedení operace rozdílu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_das.asm
111 instruction_aaa.asm korekce výsledku na jedinou BCD cifru operací AAA https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_aaa.asm
112 instruction_mul.asm ukázka výpočtu součinu dvou osmibitových hodnot https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_mul.asm
113 instruction_aam.asm BCD korekce po výpočtu součinu instrukcí AAM https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_aam.asm
       
114 instruction_stosb.asm blokový zápis dat instrukcí STOSB https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_stosb.asm
115 instruction_rep_stosb.asm opakované provádění instrukce STOSB https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_rep_stosb.asm
116 instruction_lodsb.asm čtení dat instrukcí LODSB https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_lodsb.asm
117 instruction_movsb.asm přenos jednoho bajtu instrukcí MOVSB https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_movsb.asm
118 instruction_rep_movsb.asm blokový přenos po bajtech instrukcí MOVSB https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_rep_movsb.asm
119 instruction_rep_scas.asm vyhledávání v řetězci instrukcí SCAS https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_rep_scas.asm
       
120 vga_320×200_image_0B.asm výsledek blokového přenosu ve chvíli, kdy je CX=0 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_image_0B.asm
121 vga_320×200_image_64kB.asm výsledek blokového přenosu ve chvíli, kdy je CX=0×ffff https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_image_64kB.asm
122 vga_320×200_image_movsb.asm blokový přenos v rámci obrazové paměti instrukcí REP MOVSB https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_image_movsb.asm
123 vga_320×200_image_movsw.asm blokový přenos v rámci obrazové paměti instrukcí REP MOVSW https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_image_movsw.asm
124 vga_320×200_image_movsd.asm blokový přenos v rámci obrazové paměti instrukcí REP MOVSD https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_image_movsd.asm
125 vga_320×200_image_movsb_forward.asm blokový přenos překrývajících se bloků paměti (zvyšující se adresy) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_image_mov­sb_forward.asm
126 vga_320×200_image_movsb_backward1.asm blokový přenos překrývajících se bloků paměti (snižující se adresy, nekorektní nastavení) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_image_mov­sb_backward1.asm
127 vga_320×200_image_movsb_backward2.asm blokový přenos překrývajících se bloků paměti (snižující se adresy, korektní nastavení) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_image_mov­sb_backward2.asm
       
128 sound_bell.asm přehrání zvuku pomocí tisku ASCII znaku BELL https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_bell.asm
129 sound_beep.asm přehrání zvuku o zadané frekvenci na PC Speakeru https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_beep.asm
130 sound_play_pitch.asm přehrání zvuku o zadané frekvenci na PC Speakeru, použití maker https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_play_pitch.asm
       
131 sound_opl2_basic.asm přehrání komorního A na OPL2 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl2_basic.asm
132 sound_opl2_table.asm přehrání komorního A na OPL2, použití tabulky s hodnotami registrů https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl2_table.asm
       
133 sound_opl2_table2.asm přepis tabulky s obsahy registrů pro přehrání komorního A https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl2_table2.asm
134 sound_key_on.asm přímé ovládání bitu KEY ON mezerníkem https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_key_on.asm
135 sound_adsr.asm nastavení obálky pro tón přehrávaný prvním kanálem https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_adsr.asm
136 sound_modulation.asm řízení frekvence modulátoru klávesami 1 a 0 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_modulation.asm
       
137 keyboard_basic.asm přímá práce s klávesnicí IBM PC https://github.com/tisnik/8bit-fame/blob/master/pc-dos/keyboard_basic.asm
       
138 sound_stereo_opl2.asm stereo zvuk v konfiguraci DualOPL2 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_stereo_opl2.asm
139 sound_opl2_multichannel.asm vícekanálový zvuk na OPL2 (klávesy), delší varianta https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl2_multichannel.asm
140 sound_opl2_multichannel2.asm vícekanálový zvuk na OPL2 (klávesy), kratší varianta https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl2_multichannel2.asm
141 sound_opl3_stereo1.asm stereo výstup na OPL3 (v kompatibilním režimu) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl3_stereo1.asm
142 sound_opl3_stereo2.asm stereo výstup na OPL3 (v režimu OPL3) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl3_stereo2.asm
143 sound_opl3_multichannel.asm vícekanálový zvuk na OPL3 (klávesy) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl3_multichannel.asm
       
144 sound_opl3_waveform1.asm interaktivní modifikace tvaru vlny u prvního operátoru https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl3_waveform1.asm
145 sound_opl3_waveform2.asm oprava chyby: povolení režimu kompatibilního s OPL3 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl3_waveform2.asm
146 sound_opl3_waveform3.asm vliv tvaru vln na zvukový kanál s FM syntézou https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl3_waveform3.asm
147 sound_opl3_waveform4.asm modifikace tvaru vlny nosné vlny i modulátoru https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl3_waveform4.asm
148 sound_opl3_4operators1.asm výběr AM/FM režimu ve čtyřoperátorovém nastavení https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl3_4operators1.asm
149 sound_opl3_4operators2.asm výběr AM/FM režimu ve čtyřoperátorovém nastavení https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl3_4operators2.asm
       
150 timer_basic.asm základní obsluha přerušení od časovače/čítače https://github.com/tisnik/8bit-fame/blob/master/pc-dos/timer_basic.asm
151 timer_restore.asm obnovení původní obsluhy přerušení při ukončování aplikace https://github.com/tisnik/8bit-fame/blob/master/pc-dos/timer_restore.asm
152 timer_restore_better_structure.asm refaktoring předchozího demonstračního příkladu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/timer_restore_better_structure.asm
153 timer_faster_clock.asm zrychlení čítače na 100 přerušení za sekundu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/timer_faster_clock.asm
       
154 instruction_push_imm.asm instrukce PUSH s konstantou https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_push_imm.asm
155 instruction_imul_imm.asm instrukce IMUL s konstantou https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_imul_imm.asm
156 instruction_into1.asm instrukce INTO s obsluhou přerušení https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_into1.asm
157 instruction_into2.asm instrukce INTO s obsluhou přerušení https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_into2.asm
158 instruction_bound1.asm instrukce BOUND s obsluhou přerušení (nekorektní řešení) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_bound1.asm
159 instruction_bound2.asm instrukce BOUND s obsluhou přerušení (korektní řešení) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_bound2.asm
160 vga_320×200_putpixel286.asm instrukce bitového posunu s konstantou větší než 1 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_putpixel286.asm
161 instruction_push_pop.asm instrukce PUSH a POP se všemi pracovními registry https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_push_pop.asm
       
162 instruction_push_pop_B.asm instrukce s novými segmentovými registry https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_push_pop_B.asm
163 instruction_near_jz_jmp.asm blízké skoky https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_near_jz_jmp.asm
164 instruction_bsf.asm nová instrukce BSF https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_bsf.asm
165 instruction_bsr.asm nová instrukce BSR https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_bsr.asm
166 instruction_add_32bit.asm 32bitový součet https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_add_32bit.asm
167 instruction_inc_32bit.asm 32bitová instrukce INC v šestnáctibitovém režimu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_inc_32bit.asm
168 instruction_inc_32bit_B.asm 32bitová instrukce INC v 32bitovém režimu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_inc_32bit_B.asm
       
169 ems_status.asm zjištění stavu (emulace) paměti EMS https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ems_status.asm
170 ems_total_mem.asm získání celkové kapacity paměti EMS v blocích https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ems_total_mem.asm
171 ems_free_mem.asm získání volné kapacity paměti EMS v blocích https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ems_free_mem.asm
172 xms_free_mem.asm získání volné kapacity paměti XMS v blocích https://github.com/tisnik/8bit-fame/blob/master/pc-dos/xms_free_mem.asm
       
173 vga_320×200_short_address1.asm blokový přenos provedený v rámci prostoru segmentu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_short_address1.asm
174 vga_320×200_short_address2.asm rozepsaný blokový přenos provedený v rámci prostoru segmentu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_short_address2.asm
175 vga_320×200_short_address3.asm přenos nelze provést přes hranici offsetu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_short_address3.asm
176 vga_320×200_short_address4.asm přenos nelze provést přes hranici offsetu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_short_address4.asm
177 vga_320×200_long_address1.asm 32bitový blokový přenos https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_long_address1.asm
178 vga_320×200_long_address2.asm rozepsaný 32bitový blokový přenos provedený v rámci prostoru segmentu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_long_address2.asm
179 vga_320×200_long_address3.asm přístup do obrazové paměti přes segment 0×0000 a 32bitový offset https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_long_address3.asm
180 vga_320×200_long_address4.asm otestování, jak lze přenášet data s využitím 32bitového offsetu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_long_address4.asm
       
181 print_msw.asm přečtení a zobrazení obsahu speciálního registru MSW https://github.com/tisnik/8bit-fame/blob/master/pc-dos/print_msw.asm
182 print_cr0.asm přečtení a zobrazení obsahu speciálního registru CR0 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/print_cr0.asm
183 prot_mode286.asm přechod do chráněného režimu na čipech Intel 80286 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/prot_mode286.asm
184 prot_mode386.asm přechod do chráněného režimu na čipech Intel 80386 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/prot_mode386.asm
185 prot_mode_back_to_real_mode286.asm přechod mezi reálným režimem a chráněným režimem i zpět na čipech Intel 80286 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/prot_mode_back_to_real_mo­de286.asm
186 prot_mode_back_to_real_mode386.asm přechod mezi reálným režimem a chráněným režimem i zpět na čipech Intel 80386 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/prot_mode_back_to_real_mo­de386.asm
187 prot_mode_check.asm test, zda se mikroprocesor již nachází v chráněném režimu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/prot_mode_check.asm
188 unreal_mode.asm nastavení nereálného režimu (platné pro Intel 80386) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/unreal_mode.asm
       
189 float32_constants.asm vytištění základních FP konstant typu single https://github.com/tisnik/8bit-fame/blob/master/pc-dos/float32_constants.asm
190 float64_constants.asm vytištění základních FP konstant typu double https://github.com/tisnik/8bit-fame/blob/master/pc-dos/float64_constants.asm
191 fpu_arithmetic.asm základní aritmetické operace prováděné matematickým koprocesorem https://github.com/tisnik/8bit-fame/blob/master/pc-dos/fpu_arithmetic.asm
192 fpu_divide_by_zero.asm dělení nulou matematickým koprocesorem https://github.com/tisnik/8bit-fame/blob/master/pc-dos/fpu_divide_by_zero.asm
193 fpu_divide_by_neg_zero.asm dělení záporné hodnoty nulou matematickým koprocesorem https://github.com/tisnik/8bit-fame/blob/master/pc-dos/fpu_divide_by_neg_zero.asm
194 fpu_divide_by_neg_zero2.asm dělení hodnoty zápornou nulou matematickým koprocesorem https://github.com/tisnik/8bit-fame/blob/master/pc-dos/fpu_divide_by_neg_zero2.asm
195 fpu_divide_zero_by_zero.asm výpočet 0/0 matematickým koprocesorem https://github.com/tisnik/8bit-fame/blob/master/pc-dos/fpu_divide_zero_by_zero.asm
       
196 io.asm pomocná makra pro komunikaci s DOSem a BIOSem https://github.com/tisnik/8bit-fame/blob/master/pc-dos/io.asm
197 print.asm pomocná makra pro tisk FPU hodnot typu single a double v hexadecimálním tvaru https://github.com/tisnik/8bit-fame/blob/master/pc-dos/print.asm
       
198 fpu_divide.asm operace podílu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/fpu_divide.asm
199 fpu_divide_r.asm operace podílu s prohozenými operandy https://github.com/tisnik/8bit-fame/blob/master/pc-dos/fpu_divide_r.asm
200 fpu_sqrt.asm výpočet druhé odmocniny https://github.com/tisnik/8bit-fame/blob/master/pc-dos/fpu_sqrt.asm
201 fpu_sqrt_neg_value.asm výpočet druhé odmocniny ze záporné hodnoty https://github.com/tisnik/8bit-fame/blob/master/pc-dos/fpu_sqrt_neg_value.asm
202 fpu_check.asm detekce typu matematického koprocesoru https://github.com/tisnik/8bit-fame/blob/master/pc-dos/fpu_check.asm
203 fpu_compare.asm porovnání dvou hodnot s vyhodnocením výsledku https://github.com/tisnik/8bit-fame/blob/master/pc-dos/fpu_compare.asm
204 fpu_status_word.asm tisk obsahu stavového slova koprocesoru https://github.com/tisnik/8bit-fame/blob/master/pc-dos/fpu_status_word.asm
205 fpu_status_word_stack.asm tisk obsahu stavového slova koprocesoru https://github.com/tisnik/8bit-fame/blob/master/pc-dos/fpu_status_word_stack.asm
       
206 svga_info1.asm zjištění, zda je VBE dostupný https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_info1.asm
207 svga_info2.asm zobrazení základních informací o grafické kartě https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_info2.asm
208 svga_info3.asm výpis OEM řetězce s další informací o kartě https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_info3.asm
209 svga_info4.asm zjištění a výpis čísel všech podporovaných grafických režimů https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_info4.asm
210 svga_info5.asm získání rozlišení, bitové hloubky a struktury obrazových řádků zvoleného grafického režimu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_info5.asm
211 svga_info6.asm základní informace o čtecích a zápisových oknech pro reálný režim https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_info6.asm

20. Odkazy na Internetu

  1. VESA BIOS Extensions
    https://en.wikipedia.org/wi­ki/VESA_BIOS_Extensions
  2. Video Electronics Standards Association
    https://en.wikipedia.org/wi­ki/Video_Electronics_Stan­dards_Association
  3. DJGPP (Wikipedia)
    https://cs.wikipedia.org/wiki/DJGPP
  4. DJGPP home page
    http://www.delorie.com/djgpp/
  5. DJGPP Zip File Picker
    http://www.delorie.com/djgpp/zip-picker.html
  6. The Intel 8088 Architecture and Instruction Set
    https://people.ece.ubc.ca/~ed­c/464/lectures/lec4.pdf
  7. x86 Opcode Structure and Instruction Overview
    https://pnx.tf/files/x86_op­code_structure_and_instruc­tion_overview.pdf
  8. x86 instruction listings (Wikipedia)
    https://en.wikipedia.org/wi­ki/X86_instruction_listin­gs
  9. x86 assembly language (Wikipedia)
    https://en.wikipedia.org/wi­ki/X86_assembly_language
  10. Intel Assembler (Cheat sheet)
    http://www.jegerlehner.ch/in­tel/IntelCodeTable.pdf
  11. 25 Microchips That Shook the World
    https://spectrum.ieee.org/tech-history/silicon-revolution/25-microchips-that-shook-the-world
  12. Chip Hall of Fame: MOS Technology 6502 Microprocessor
    https://spectrum.ieee.org/tech-history/silicon-revolution/chip-hall-of-fame-mos-technology-6502-microprocessor
  13. Chip Hall of Fame: Intel 8088 Microprocessor
    https://spectrum.ieee.org/tech-history/silicon-revolution/chip-hall-of-fame-intel-8088-microprocessor
  14. Jak se zrodil procesor?
    https://www.root.cz/clanky/jak-se-zrodil-procesor/
  15. Apple II History Home
    http://apple2history.org/
  16. The 8086/8088 Primer
    https://www.stevemorse.or­g/8086/index.html
  17. flat assembler: Assembly language resources
    https://flatassembler.net/
  18. FASM na Wikipedii
    https://en.wikipedia.org/wiki/FASM
  19. Fresh IDE FASM inside
    https://fresh.flatassembler.net/
  20. MS-DOS Version 4.0 Programmer's Reference
    https://www.pcjs.org/docu­ments/books/mspl13/msdos/dos­ref40/
  21. DOS API (Wikipedia)
    https://en.wikipedia.org/wiki/DOS_API
  22. Bit banging
    https://en.wikipedia.org/wi­ki/Bit_banging
  23. IBM Basic assembly language and successors (Wikipedia)
    https://en.wikipedia.org/wi­ki/IBM_Basic_assembly_lan­guage_and_successors
  24. X86 Assembly/Bootloaders
    https://en.wikibooks.org/wi­ki/X86_Assembly/Bootloaders
  25. Počátky grafiky na PC: grafické karty CGA a Hercules
    https://www.root.cz/clanky/pocatky-grafiky-na-pc-graficke-karty-cga-a-hercules/
  26. Co mají společného Commodore PET/4000, BBC Micro, Amstrad CPC i grafické karty MDA, CGA a Hercules?
    https://www.root.cz/clanky/co-maji-spolecneho-commodore-pet-4000-bbc-micro-amstrad-cpc-i-graficke-karty-mda-cga-a-hercules/
  27. Karta EGA: první použitelná barevná grafika na PC
    https://www.root.cz/clanky/karta-ega-prvni-pouzitelna-barevna-grafika-na-pc/
  28. RGB Classic Games
    https://www.classicdosgames.com/
  29. Turbo Assembler (Wikipedia)
    https://en.wikipedia.org/wi­ki/Turbo_Assembler
  30. Microsoft Macro Assembler
    https://en.wikipedia.org/wi­ki/Microsoft_Macro_Assembler
  31. IBM Personal Computer (Wikipedia)
    https://en.wikipedia.org/wi­ki/IBM_Personal_Computer
  32. Intel 8251
    https://en.wikipedia.org/wi­ki/Intel_8251
  33. Intel 8253
    https://en.wikipedia.org/wi­ki/Intel_8253
  34. Intel 8255
    https://en.wikipedia.org/wi­ki/Intel_8255
  35. Intel 8257
    https://en.wikipedia.org/wi­ki/Intel_8257
  36. Intel 8259
    https://en.wikipedia.org/wi­ki/Intel_8259
  37. Support/peripheral/other chips – 6800 family
    http://www.cpu-world.com/Support/6800.html
  38. Motorola 6845
    http://en.wikipedia.org/wi­ki/Motorola_6845
  39. The 6845 Cathode Ray Tube Controller (CRTC)
    http://www.tinyvga.com/6845
  40. CRTC operation
    http://www.6502.org/users/an­dre/hwinfo/crtc/crtc.html
  41. The 6845 Cathode Ray Tube Controller (CRTC)
    http://www.tinyvga.com/6845
  42. Motorola 6845 and bitwise graphics
    https://retrocomputing.stac­kexchange.com/questions/10996/mo­torola-6845-and-bitwise-graphics
  43. IBM Monochrome Display Adapter
    http://en.wikipedia.org/wi­ki/Monochrome_Display_Adap­ter
  44. Color Graphics Adapter
    http://en.wikipedia.org/wi­ki/Color_Graphics_Adapter
  45. Color Graphics Adapter and the Brown color in IBM 5153 Color Display
    https://www.aceinnova.com/en/e­lectronics/cga-and-the-brown-color-in-ibm-5153-color-display/
  46. The Modern Retrocomputer: An Arduino Driven 6845 CRT Controller
    https://hackaday.com/2017/05/14/the-modern-retrocomputer-an-arduino-driven-6845-crt-controller/
  47. flat assembler: Assembly language resources
    https://flatassembler.net/
  48. FASM na Wikipedii
    https://en.wikipedia.org/wiki/FASM
  49. Fresh IDE FASM inside
    https://fresh.flatassembler.net/
  50. MS-DOS Version 4.0 Programmer's Reference
    https://www.pcjs.org/docu­ments/books/mspl13/msdos/dos­ref40/
  51. DOS API (Wikipedia)
    https://en.wikipedia.org/wiki/DOS_API
  52. IBM Basic assembly language and successors (Wikipedia)
    https://en.wikipedia.org/wi­ki/IBM_Basic_assembly_lan­guage_and_successors
  53. X86 Assembly/Arithmetic
    https://en.wikibooks.org/wi­ki/X86_Assembly/Arithmetic
  54. Art of Assembly – Arithmetic Instructions
    http://oopweb.com/Assembly/Do­cuments/ArtOfAssembly/Volu­me/Chapter6/CH06–2.html
  55. ASM Flags
    http://www.cavestory.org/gu­ides/csasm/guide/asm_flag­s.html
  56. Status Register
    https://en.wikipedia.org/wi­ki/Status_register
  57. Linux assemblers: A comparison of GAS and NASM
    http://www.ibm.com/develo­perworks/library/l-gas-nasm/index.html
  58. Programovani v assembleru na OS Linux
    http://www.cs.vsb.cz/gryga­rek/asm/asmlinux.html
  59. Is it worthwhile to learn x86 assembly language today?
    https://www.quora.com/Is-it-worthwhile-to-learn-x86-assembly-language-today?share=1
  60. Why Learn Assembly Language?
    http://www.codeproject.com/Ar­ticles/89460/Why-Learn-Assembly-Language
  61. Is Assembly still relevant?
    http://programmers.stackex­change.com/questions/95836/is-assembly-still-relevant
  62. Why Learning Assembly Language Is Still a Good Idea
    http://www.onlamp.com/pub/a/on­lamp/2004/05/06/writegreat­code.html
  63. Assembly language today
    http://beust.com/weblog/2004/06/23/as­sembly-language-today/
  64. Assembler: Význam assembleru dnes
    http://www.builder.cz/rubri­ky/assembler/vyznam-assembleru-dnes-155960cz
  65. Programming from the Ground Up Book – Summary
    http://savannah.nongnu.or­g/projects/pgubook/
  66. DOSBox
    https://www.dosbox.com/
  67. The C Programming Language
    https://en.wikipedia.org/wi­ki/The_C_Programming_Langu­age
  68. Hercules Graphics Card (HCG)
    https://en.wikipedia.org/wi­ki/Hercules_Graphics_Card
  69. Complete 8086 instruction set
    https://content.ctcd.edu/cou­rses/cosc2325/m22/docs/emu8086in­s.pdf
  70. Complete 8086 instruction set
    https://yassinebridi.github.io/asm-docs/8086_instruction_set.html
  71. 8088 MPH by Hornet + CRTC + DESiRE (final version)
    https://www.youtube.com/wat­ch?v=hNRO7lno_DM
  72. Area 5150 by CRTC & Hornet (Party Version) / IBM PC+CGA Demo, Hardware Capture
    https://www.youtube.com/wat­ch?v=fWDxdoRTZPc
  73. 80×86 Integer Instruction Set Timings (8088 – Pentium)
    http://aturing.umcs.maine­.edu/~meadow/courses/cos335/80×86-Integer-Instruction-Set-Clocks.pdf
  74. Colour Graphics Adapter: Notes
    https://www.seasip.info/Vin­tagePC/cga.html
  75. Restoring A Vintage CGA Card With Homebrew HASL
    https://hackaday.com/2024/06/12/res­toring-a-vintage-cga-card-with-homebrew-hasl/
  76. Demoing An 8088
    https://hackaday.com/2015/04/10/de­moing-an-8088/
  77. Video Memory Layouts
    http://www.techhelpmanual.com/89-video_memory_layouts.html
  78. Screen Attributes
    http://www.techhelpmanual.com/87-screen_attributes.html
  79. IBM PC Family – BIOS Video Modes
    https://www.minuszerodegre­es.net/video/bios_video_mo­des.htm
  80. EGA Functions
    https://cosmodoc.org/topics/ega-functions/#the-hierarchy-of-the-ega
  81. Why the EGA can only use 16 of its 64 colours in 200-line modes
    https://www.reenigne.org/blog/why-the-ega-can-only-use-16-of-its-64-colours-in-200-line-modes/
  82. How 16 colors saved PC gaming – the story of EGA graphics
    https://www.custompc.com/retro-tech/ega-graphics
  83. List of 16-bit computer color palettes
    https://en.wikipedia.org/wi­ki/List_of16-bit_computer_color_palettes
  84. Why were those colors chosen to be the default palette for 256-color VGA?
    https://retrocomputing.stac­kexchange.com/questions/27994/why-were-those-colors-chosen-to-be-the-default-palette-for-256-color-vga
  85. VGA Color Palettes
    https://www.fountainware.com/EX­PL/vga_color_palettes.htm
  86. Hardware Level VGA and SVGA Video Programming Information Page
    http://www.osdever.net/Fre­eVGA/vga/vga.htm
  87. Hardware Level VGA and SVGA Video Programming Information Page – sequencer
    http://www.osdever.net/Fre­eVGA/vga/seqreg.htm
  88. VGA Basics
    http://www.brackeen.com/vga/ba­sics.html
  89. Introduction to VGA Mode ‚X‘
    https://web.archive.org/web/20160414072210/htt­p://fly.srk.fer.hr/GDM/ar­ticles/vgamodex/vgamx1.html
  90. VGA Mode-X
    https://web.archive.org/web/20070123192523/htt­p://www.gamedev.net/referen­ce/articles/article356.asp
  91. Mode-X: 256-Color VGA Magic
    https://downloads.gamedev­.net/pdf/gpbb/gpbb47.pdf
  92. Instruction Format in 8086 Microprocessor
    https://www.includehelp.com/embedded-system/instruction-format-in-8086-microprocessor.aspx
  93. How to use „AND,“ „OR,“ and „XOR“ modes for VGA Drawing
    https://retrocomputing.stac­kexchange.com/questions/21936/how-to-use-and-or-and-xor-modes-for-vga-drawing
  94. VGA Hardware
    https://wiki.osdev.org/VGA_Hardware
  95. Programmer's Guide to Yamaha YMF 262/OPL3 FM Music Synthesizer
    https://moddingwiki.shika­di.net/wiki/OPL_chip
  96. Does anybody understand how OPL2 percussion mode works?
    https://forum.vcfed.org/in­dex.php?threads/does-anybody-understand-how-opl2-percussion-mode-works.60925/
  97. Yamaha YMF262 OPL3 music – MoonDriver for OPL3 DEMO [Oscilloscope View]
    https://www.youtube.com/watch?v=a7I-QmrkAak
  98. Yamaha OPL vs OPL2 vs OPL3 comparison
    https://www.youtube.com/wat­ch?v=5knetge5Gs0
  99. OPL3 Music Crockett's Theme
    https://www.youtube.com/wat­ch?v=HXS008pkgSQ
  100. Bad Apple (Adlib Tracker – OPL3)
    https://www.youtube.com/wat­ch?v=2lEPH6Y3Luo
  101. FM Synthesis Chips, Codecs and DACs
    https://www.dosdays.co.uk/to­pics/fm_synthesizers.php
  102. The Zen Challenge – YMF262 OPL3 Original (For an upcoming game)
    https://www.youtube.com/wat­ch?v=6JlFIFz1CFY
  103. [adlib tracker II techno music – opl3] orbit around alpha andromedae I
    https://www.youtube.com/wat­ch?v=YqxJCu_WFuA
  104. [adlib tracker 2 music – opl3 techno] hybridisation process on procyon-ii
    https://www.youtube.com/wat­ch?v=daSV5mN0sJ4
  105. Hyper Duel – Black Rain (YMF262 OPL3 Cover)
    https://www.youtube.com/wat­ch?v=pu_mzRRq8Ho
  106. IBM 5155–5160 Technical Reference
    https://www.minuszerodegre­es.net/manuals/IBM/IBM_5155_5160_Techni­cal_Reference_6280089_MAR86­.pdf
  107. a ymf262/opl3+pc speaker thing i made
    https://www.youtube.com/watch?v=E-Mx0lEmnZ0
  108. [OPL3] Like a Thunder
    https://www.youtube.com/wat­ch?v=MHf06AGr8SU
  109. (PC SPEAKER) bad apple
    https://www.youtube.com/wat­ch?v=LezmKIIHyUg
  110. Powering devices from PC parallel port
    http://www.epanorama.net/cir­cuits/lptpower.html
  111. Magic Mushroom (demo pro PC s DOSem)
    http://www.crossfire-designs.de/download/articles/sou­ndcards//mushroom.rar
  112. Píseň Magic Mushroom – originál
    http://www.crossfire-designs.de/download/articles/sou­ndcards/speaker_mushroom_con­verted.mp3
  113. Píseň Magic Mushroom – hráno na PC Speakeru
    http://www.crossfire-designs.de/download/articles/sou­ndcards/speaker_mushroom_spe­aker.mp3
  114. Pulse Width Modulation (PWM) Simulation Example
    http://decibel.ni.com/content/docs/DOC-4599
  115. Resistor/Pulse Width Modulation DAC
    http://www.k9spud.com/trax­mod/pwmdac.php
  116. Class D Amplifier
    http://en.wikipedia.org/wi­ki/Electronic_amplifier#Clas­s_D
  117. Covox Speech Thing / Disney Sound Source (1986)
    http://www.crossfire-designs.de/index.php?lang=en&what=ar­ticles&name=showarticle.htm&ar­ticle=soundcards/&page=5
  118. Covox Digital-Analog Converter (Rusky, obsahuje schémata)
    http://phantom.sannata.ru/kon­kurs/netskater002.shtml
  119. PC-GPE on the Web
    http://bespin.org/~qz/pc-gpe/
  120. Keyboard Synthesizer
    http://www.solarnavigator­.net/music/instruments/ke­yboards.htm
  121. FMS – Fully Modular Synthesizer
    http://fmsynth.sourceforge.net/
  122. Javasynth
    http://javasynth.sourceforge.net/
  123. Software Sound Synthesis & Music Composition Packages
    http://www.linux-sound.org/swss.html
  124. Mx44.1 Download Page (software synthesizer for linux)
    http://hem.passagen.se/ja_linux/
  125. Software synthesizer
    http://en.wikipedia.org/wi­ki/Software_synthesizer
  126. Frequency modulation synthesis
    http://en.wikipedia.org/wi­ki/Frequency_modulation_syn­thesis
  127. Yamaha DX7
    http://en.wikipedia.org/wi­ki/Yamaha_DX7
  128. Wave of the Future
    http://www.wired.com/wired/ar­chive/2.03/waveguides_pr.html
  129. Analog synthesizer
    http://en.wikipedia.org/wi­ki/Analog_synthesizer
  130. Minimoog
    http://en.wikipedia.org/wiki/Minimoog
  131. Moog synthesizer
    http://en.wikipedia.org/wi­ki/Moog_synthesizer
  132. Tutorial for Frequency Modulation Synthesis
    http://www.sfu.ca/~truax/fmtut.html
  133. An Introduction To FM
    http://ccrma.stanford.edu/sof­tware/snd/snd/fm.html
  134. John Chowning
    http://en.wikipedia.org/wi­ki/John_Chowning
  135. I'm Impressed, Adlib Music is AMAZING!
    https://www.youtube.com/wat­ch?v=PJNjQYp1ras
  136. Milinda- Diode Milliampere ( OPL3 )
    https://www.youtube.com/wat­ch?v=oNhazT5HG0E
  137. Dune 2 – Roland MT-32 Soundtrack
    https://www.youtube.com/wat­ch?v=kQADZeB-z8M
  138. Interrupts
    https://wiki.osdev.org/In­terrupts#Types_of_Interrup­ts
  139. Assembly8086SoundBlasterDma­SingleCycleMode
    https://github.com/leonardo-ono/Assembly8086SoundBlas­terDmaSingleCycleMode/blob/mas­ter/sbsc.asm
  140. Interrupts in 8086 microprocessor
    https://www.geeksforgeeks­.org/interrupts-in-8086-microprocessor/
  141. Interrupt Structure of 8086
    https://www.eeeguide.com/interrupt-structure-of-8086/
  142. A20 line
    https://en.wikipedia.org/wi­ki/A20_line
  143. Extended memory
    https://en.wikipedia.org/wi­ki/Extended_memory#eXtended_Me­mory_Specification_(XMS)
  144. Expanded memory
    https://en.wikipedia.org/wi­ki/Expanded_memory
  145. Protected mode
    https://en.wikipedia.org/wi­ki/Protected_mode
  146. Virtual 8086 mode
    https://en.wikipedia.org/wi­ki/Virtual_8086_mode
  147. Unreal mode
    https://en.wikipedia.org/wi­ki/Unreal_mode
  148. DOS memory management
    https://en.wikipedia.org/wi­ki/DOS_memory_management
  149. Upper memory area
    https://en.wikipedia.org/wi­ki/Upper_memory_area
  150. Removing the Mystery from SEGMENT : OFFSET Addressing
    https://thestarman.pcminis­try.com/asm/debug/Segments­.html
  151. Segment descriptor
    https://en.wikipedia.org/wi­ki/Segment_descriptor
  152. When using a 32-bit register to address memory in the real mode, contents of the register must never exceed 0000FFFFH. Why?
    https://stackoverflow.com/qu­estions/45094696/when-using-a-32-bit-register-to-address-memory-in-the-real-mode-contents-of-the
  153. A Brief History of Unreal Mode
    https://www.os2museum.com/wp/a-brief-history-of-unreal-mode/
  154. Segment Limits
    https://wiki.osdev.org/Segment_Limits
  155. How do 32 bit addresses in real mode work?
    https://forum.osdev.org/vi­ewtopic.php?t=30642
  156. The LOADALL Instruction by Robert Collins
    https://www.rcollins.org/ar­ticles/loadall/tspec_a3_doc­.html
  157. How do you put a 286 in Protected Mode?
    https://retrocomputing.stac­kexchange.com/questions/7683/how-do-you-put-a-286-in-protected-mode
  158. Control register
    https://en.wikipedia.org/wi­ki/Control_register
  159. CPU Registers x86
    https://wiki.osdev.org/CPU_Re­gisters_x86
  160. x86 Assembly/Protected Mode
    https://en.wikibooks.org/wi­ki/X86_Assembly/Protected_Mo­de
  161. MSW: Machine Status Word
    https://web.itu.edu.tr/kes­gin/mul06/intel/intel_msw­.html
  162. 80×87 Floating Point Opcodes
    http://www.techhelpmanual.com/876–80×87_floating_point_opcodes.html
  163. Page Translation
    https://pdos.csail.mit.edu/6­.828/2005/readings/i386/s05_02­.htm
  164. 80386 Paging and Segmenation
    https://stackoverflow.com/qu­estions/38229741/80386-paging-and-segmenation
  165. 80386 Memory Management
    https://tldp.org/LDP/khg/Hy­perNews/get/memory/80386mm­.html
  166. DOSEMU
    http://www.dosemu.org/
  167. Intel 80386, a revolutionary CPU
    https://www.xtof.info/intel80386.html
  168. PAI Unit 3 Paging in 80386 Microporcessor
    https://www.slideshare.net/Kan­chanPatil34/pai-unit-3-paging-in-80386-microporcessor
  169. 64 Terabytes of virtual memory for 32-bit x86 using segmentation: how?
    https://stackoverflow.com/qu­estions/5444984/64-terabytes-of-virtual-memory-for-32-bit-x86-using-segmentation-how
  170. Pi in the Pentium: reverse-engineering the constants in its floating-point unit
    http://www.righto.com/2025/01/pentium-floating-point-ROM.html
  171. Simply FPU
    http://www.website.masmfo­rum.com/tutorials/fptute/
  172. Art of Assembly language programming: The 80×87 Floating Point Coprocessors
    https://courses.engr.illi­nois.edu/ece390/books/arto­fasm/CH14/CH14–3.html
  173. Art of Assembly language programming: The FPU Instruction Set
    https://courses.engr.illi­nois.edu/ece390/books/arto­fasm/CH14/CH14–4.html
  174. INTEL 80387 PROGRAMMER'S REFERENCE MANUAL
    http://www.ragestorm.net/dow­nloads/387intel.txt
  175. x86 Instruction Set Reference: FLD
    http://x86.renejeschke.de/html/fi­le_module_x86_id100.html
  176. x86 Instruction Set Reference: FLD1/FLDL2T/FLDL2E/FLDPI/­FLDLG2/FLDLN2/FLDZ
    http://x86.renejeschke.de/html/fi­le_module_x86_id101.html
  177. X86 Assembly/Arithmetic
    https://en.wikibooks.org/wi­ki/X86_Assembly/Arithmetic
  178. 8087 Numeric Data Processor
    https://www.eeeguide.com/8087-numeric-data-processor/
  179. Data Types and Instruction Set of 8087 co-processor
    https://www.eeeguide.com/data-types-and-instruction-set-of-8087-co-processor/
  180. 8087 instruction set and examples
    https://studylib.net/doc/5625221/8087-instruction-set-and-examples
  181. GCC documentation: Extensions to the C Language Family
    https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions
  182. GCC documentation: Using Vector Instructions through Built-in Functions
    https://gcc.gnu.org/online­docs/gcc/Vector-Extensions.html
  183. SSE (Streaming SIMD Extentions)
    http://www.songho.ca/misc/sse/sse­.html
  184. Timothy A. Chagnon: SSE and SSE2
    http://www.cs.drexel.edu/~tc365/mpi-wht/sse.pdf
  185. Intel corporation: Extending the Worldr's Most Popular Processor Architecture
    http://download.intel.com/techno­logy/architecture/new-instructions-paper.pdf
  186. SIMD architectures:
    http://arstechnica.com/ol­d/content/2000/03/simd.ar­s/
  187. Tour of the Black Holes of Computing!: Floating Point
    http://www.cs.hmc.edu/~ge­off/classes/hmc.cs105…/sli­des/class02_floats.ppt
  188. 3Dnow! Technology Manual
    AMD Inc., 2000
  189. Intel MMXTM Technology Overview
    Intel corporation, 1996
  190. MultiMedia eXtensions
    http://softpixel.com/~cwrig­ht/programming/simd/mmx.phpi
  191. AMD K5 („K5“ / „5k86“)
    http://www.pcguide.com/ref/cpu/fam/g5K5-c.html
  192. Sixth Generation Processors
    http://www.pcguide.com/ref/cpu/fam/g6­.htm
  193. Great Microprocessors of the Past and Present
    http://www.cpushack.com/CPU/cpu1.html
  194. Very long instruction word (Wikipedia)
    http://en.wikipedia.org/wi­ki/Very_long_instruction_word
  195. CPU design (Wikipedia)
    http://en.wikipedia.org/wi­ki/CPU_design
  196. Grafické karty a grafické akcelerátory (14)
    https://www.root.cz/clanky/graficke-karty-a-graficke-akceleratory-14/
  197. Grafické karty a grafické akcelerátory (15)
    https://www.root.cz/clanky/graficke-karty-a-graficke-akceleratory-15/
  198. Grafické karty a grafické akcelerátory (16)
    https://www.root.cz/clanky/graficke-karty-a-graficke-akceleratory-16/
  199. VESA Video Modes
    https://wiki.osdev.org/VE­SA_Video_Modes
  200. Introduction to VESA programming
    http://www.monstersoft.com/tu­torial1/VESA_intro.html
  201. Guide: VBE 2.0 graphics modes
    https://delorie.com/djgpp/doc/ug/grap­hics/vbe20.html
  202. NASM instruction list
    https://userpages.cs.umbc­.edu/chang/cs313/nasmdoc/html/nas­mdocb.html
Neutrální ikona do widgetu na odběr článků ze seriálů

Zajímá vás toto téma? Chcete se o něm dozvědět víc?

Objednejte si upozornění na nově vydané články do vašeho mailu. Žádný článek vám tak neuteče.


Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.