Obsah
1. Textové režimy grafických karet SVGA na platformě IBM PC
3. Proč vznikly režimy se 132 znaky na řádku?
4. Zjištění, které rozšíření textové režimy jsou grafickou kartou podporovány
5. Test, zda je režim textový nebo grafický
6. První demonstrační příklad: výpis všech rozšířených textových režimů
7. Zjištění podrobnějších informací o vybraném textovém režimu
8. Druhý demonstrační příklad: podrobné informace o vybraném textovém režimu
9. Přepnutí do textového režimu karet SVGA
10. Třetí demonstrační příklad: přepnutí do vybraného textového režimu
11. Text a atributy – standard, který přežil až do dnešní doby
12. Vyplnění části obrazovky přepnuté do textového režimu
13. Čtvrtý demonstrační příklad: vyplnění části obrazové paměti znaky a jejich atributy
14. Pátý demonstrační příklad: tatáž operace, ovšem provedená v odlišném textovém režimu
16. Řídicí registry čipu MC6845
17. Změna tvaru textového kurzoru modifikací HW registrů
18. Šestý demonstrační příklad: změna tvaru textového kurzoru
19. Repositář s demonstračními příklady
1. Textové režimy grafických karet SVGA na platformě IBM PC
Jak jsme si již naznačili v perexu dnešního článku, byla tvorba aplikací s grafickým výstupem na platformě IBM PC dosti složitá a v důsledku i neefektivní. V závislosti na době, ve které aplikace vznikala, i na požadavcích na zpětnou kompatibilitu, bylo nutné podporovat grafické karty se zcela různými způsoby organizace grafické (video) paměti. Například grafická karta CGA mapovala (v grafických režimech) video RAM do segmentu 0×B800 a celá její kapacita 16kB byla rozdělena do dvou banků o velikosti 8kB. V prvním banku byly uloženy liché řádky, ve druhém banku řádky sudé. A hodnoty pixelů (1 bit či 2 bity) byly ukládány do jediné bitové roviny.
Naproti tomu karta Hercules mapovala svoji video RAM do segmentu 0×B000 a paměť byla rozdělena nikoli do dvou, ale do čtyřech paměťových banků. Grafická karta EGA zavedla planární grafiku (až čtyři bitové roviny) a mapování video RAM do segmentu 0×A000. Karta VGA tuto techniku rozšířila o další grafické režimy a aby toho nebylo málo, byla zavedena zřetězená grafika používaná v grafickém režimu s rozlišením 320×200 pixelů (jediný příčetný grafický režim v historii IBM PC :-).
Situace se (oproti možná až příliš optimistickému očekávání) nezlepšila ani s příchodem grafických karet SVGA a později i standardu VESA (a rozšíření VBE). Standard VESA totiž konstruktérům grafických karet ponechával velkou volnost v tom, jakým způsobem vlastně budou ukládány hodnoty pixelů v grafických režimech s 15, 16, 24 či 32 bity na pixel. Navíc bylo nutné nějakým způsobem vyřešit mapování obrazové paměti (nyní již o velkých kapacitách 512kB, 1MB nebo dokonce 2MB) do jediného dostupného segmentu 0×A000. Opět bylo k dispozici několik možností, nikoli jeden uznávaný standardní způsob.
Ovšem jedna věc zůstávala po celou dobu existence IBM PC (a to se bavíme o několika desítkách let) prakticky nezměněná – textové režimy. Již grafické karty CGA a MDA podporovaly textový režim s 80 sloupci a 25 textovými řádky, přičemž každému znaku bylo možné přiřadit barvové aj. (blikání, podtržení) atributy. Na grafických kartách EGA a VGA bylo navíc možné zvýšit počet textových řádků na 30, 43 či 60 řádků (i více, ovšem to již bylo poněkud nestandardní). Organizace grafické (textové?) paměti zůstala po celou dobu existence platformy IBM PC stejná a vlastně ji můžeme využívat dodnes.
Další zvýšení počtu textových řádků a/nebo sloupců poskytly až grafické karty SVGA. A právě textovými režimy těchto karet se budeme zabývat v dnešním článku.
2. Seznam textových režimů
V následující tabulce jsou zobrazeny textové režimy dostupné na platformě IBM PC (samozřejmě v závislosti na použité grafické kartě). Obecně platí prakticky stoprocentní zpětná kompatibilita, takže i moderní karty by měly dokázat pracovat ve starodávném režimu 40×25 atd.:
Rozlišení (znaky) | Maska znaků (pixely) | Použité rozlišení obrazovky | Atributy | Grafické karty |
---|---|---|---|---|
80×25 | 9×14 | 720×350 | monochrom | MDA, Hercules |
40×25 | 8×8 | 320×200 | 16 colors | CGA, EGA |
80×25 | 8×8 | 640×200 | 16 colors | CGA, EGA |
80×25 | 8×14 | 640×350 | 16 colors | EGA |
80×43 | 8×8 | 640×350 | 16 colors | EGA |
80×25 | 9×16 | 720×400 | 16 colors | VGA |
80×30 | 8×16 | 640×480 | 16 colors | VGA |
80×50 | 9×8 | 720×400 | 16 colors | VGA |
80×60 | různá | různá | 16 colors | VESA-compatible Super VGA |
132×25 | různá | různá | 16 colors | VESA-compatible Super VGA |
132×43 | různá | různá | 16 colors | VESA-compatible Super VGA |
132×50 | různá | různá | 16 colors | VESA-compatible Super VGA |
132×60 | různá | různá | 16 colors | VESA-compatible Super VGA |
3. Proč vznikly režimy se 132 znaky na řádku?
Při pohledu na tabulku uvedenou v předchozí kapitole vás možná napadne, proč se vlastně v nových textových režimech SVGA používá 132 znaků na řádku, když by hodnota 128 znaků byla „zaokrouhlenější“ a více by odpovídala rozlišením grafických režimů (1024 pixelů / 8 = 128). Tato hodnota má ve skutečnosti za sebou poměrně dlouhý vývoj, který ovšem souvisí s řádkovými tiskárnami vyráběnými společností IBM (od které tuto hodnotu okopírovali i další výrobci). A ještě před těmito tiskárnami (a vůbec před vznikem moderních počítačů) existovaly stroje nazývané tabulating machine, které dokázaly sečíst výsledky voleb, výsledky sčítání lidu atd. Některé z těchto strojů tiskly výsledky na papírový pás o šířce 14 palců a přitom bylo možné zobrazit 10 znaků na palec.
Tyto rozměry převzala společnost IBM a používala je u tiskáren systému IBM 1400 (začátek prodeje se datuje až do roku 1959). Šířka 14 palců a 10 znaků na palec znamená 140 znaků na řádku, ovšem osm znaků bylo rezervováno na perforované okraje (traktorový papír a traktorový podavač). Výsledkem je tedy 132 znaků na řádku.
Jen pro zajímavost se podívejme, jaké modely tiskáren pro systém IBM 1400 (počítač měl číslo 1401, tiskárny 1403) byly k dispozici:
Tiskárna | Znaků/řádek | Rychlost tisku | Rychlost tisku (jen čísla) |
---|---|---|---|
Model 1 | 100 | 600 | 1285 |
Model 2 | 132 | 600 | 1285 |
Model 3 | 132 | 1100 | 1400 |
Model 4 | 100 | 465 | × |
Model 5 | 132 | 465 | × |
Model 6 | 120 | 340 | × |
Model 7 | 120 | 600 | × |
Model N1 | 132 | 1100 | 1400 |
4. Zjištění, které rozšíření textové režimy jsou grafickou kartou podporovány
Ve druhé kapitole jsme si (kromě dalších režimů) vypsali i de facto standardní textové režimy karet SVGA s vyšším počtem textových řádků a popř. s podporou 132 znaků na řádku. Některé grafické karty ovšem umožňovaly zobrazit i vyšší počty znaků – relativně typické byly režimy se 160 znaky na řádku atd. Jak je ovšem možné zjistit, které z těchto režimů jsou podporovány? Budeme postupovat následovně:
- Zjistíme čísla všech dostupných režimů (ať již grafických či textových)
- Pro každý z režimů si necháme zjistit jeho základní charakteristiky (typ atd.)
- Pokud se jedná o textový režim, necháme si tento režim vypsat
- Skok zpět na 2
Připomeňme si, že informace o grafické kartě vrácené přes VBE vypadají 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
Velmi 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:
5. Test, zda je režim textový nebo grafický
To, zda je nějaký režim textový nebo grafický, se pozná z pátého bitu (s indexem 4) v prvku ModeAttributes získaného ze struktury graphics_mode_block_info. Pokud se jedná o textový režim, bude jeho rozlišení specifikováno ve znacích (nikoli v pixelech) a současně prvky XCharSize a YCharSize budou obsahovat velikost masky znaků (tentokrát pochopitelně v pixelech). Typické hodnoty jsou 8×8 a 8×16 (zmizel tedy devátý sloupec). Test na textový režim a výpis jeho základních informací lze realizovat relativně snadno (kód není optimalizován):
print_mode_info: pushad ; uschovat pracovni registry push es ; pro pozdejsi obnovu na konci subrutiny push ds pop es ; nastaveni CS=DS=ES mov dx, ax clc ; ziskani zakladnich informaci o grafickem rezimu mov di, graphics_mode_block_info mov cx, ax ; cislo rezimu mov ax, 0x4f01 int 0x10 cmp ax, 0x004f ; test, zda bylo volani funkce BIOSu uspesne jne not_text_mode mov ax, [ModeAttributes] ; bit cislo 4 je u textovych rezimu nastaven na hodnotu 0 and ax, 16 ; test bitu cislo 4 jnz not_text_mode ; je to textovy rezim! mov ax, dx ; tisk cisla rezimu print_dec_16 mov ax, [XResolution] ; horizontalni rozliseni ve znacich print_dec_16 mov ax, [YResolution] ; vertikalni rozliseni ve znacich print_dec_16 mov ax, [XCharSize] ; sirka znaku v pixelech print_dec_8 mov ax, [YCharSize] ; vyska znaku v pixelech print_dec_8 print_string eoln ; na konci odradkovat not_text_mode: pop es ; obnoveni vsech relevantnich registru popad ret ; a navrat ze subrutiny
6. První demonstrační příklad: výpis všech rozšířených textových režimů
V dnešním prvním demonstračním příkladu si necháme vypsat všechny textové režimy podporované SVGA kartou. U každého režimu se vypíše jeho rozlišení (ve znacích) i velikost masek znaků (typicky 8×8 nebo 8×16 pixelů):
;----------------------------------------------------------------------------- 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: mov byte [dec_message+10], ' ' ; trik -> nechceme odradkovat po tisku hodnoty mov byte [dec_message+11], ' ' 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 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 inc bx ; offset pro dalsi rezim inc bx mov ax, es:[bx] ; znovu nacist cislo rezimu call print_mode_info ; a vypsat podrobejsi informace o nem jmp next_mode ; pokracujeme last_mode: jmp finish failed: print_string failed_msg finish: wait_key ; cekani na klavesu exit ; navrat do DOSu print_mode_info: pushad ; uschovat pracovni registry push es ; pro pozdejsi obnovu na konci subrutiny push ds pop es ; nastaveni CS=DS=ES mov dx, ax clc ; ziskani zakladnich informaci o grafickem rezimu mov di, graphics_mode_block_info mov cx, ax ; cislo rezimu mov ax, 0x4f01 int 0x10 cmp ax, 0x004f ; test, zda bylo volani funkce BIOSu uspesne jne not_text_mode mov ax, [ModeAttributes] ; bit cislo 4 je u textovych rezimu nastaven na hodnotu 0 and ax, 16 ; test bitu cislo 4 jnz not_text_mode ; je to textovy rezim! mov ax, dx ; tisk cisla rezimu print_dec_16 mov ax, [XResolution] ; horizontalni rozliseni ve znacich print_dec_16 mov ax, [YResolution] ; vertikalni rozliseni ve znacich print_dec_16 mov ax, [XCharSize] ; sirka znaku v pixelech print_dec_8 mov ax, [YCharSize] ; vyska znaku v pixelech print_dec_8 print_string eoln ; na konci odradkovat not_text_mode: pop es ; obnoveni vsech relevantnich registru popad ret ; a navrat ze subrutiny ; datova cast section .data success_msg: db "Success", 0x0a, 0x0d, "$" failed_msg: db "Failed", 0x0a, 0x0d, "$" eoln: 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 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
Výsledky by mohly vypadat následovně:
0000000264 0000000080 0000000060 0000000008 0000000008 0000000265 0000000132 0000000025 0000000008 0000000016 0000000266 0000000132 0000000043 0000000008 0000000008 0000000267 0000000132 0000000050 0000000008 0000000008 0000000268 0000000132 0000000060 0000000008 0000000008
Což snadno převedeme do čitelné tabulky:
Režim Znaků Řádků Šířka Výška (pixely) ====================================== 264 80 60 8 8 265 132 25 8 16 266 132 43 8 8 267 132 50 8 8 268 132 60 8 8
7. Zjištění podrobnějších informací o vybraném textovém režimu
Z předchozích částí tohoto seriálu již víme, že podrobné informace o jednom vybraném textovém nebo grafickém režimu musíme zjistit 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
Mnohé atributy postrádají v případě textových režimů význam (například bitové masky a velikosti), ovšem minimálně tyto atributy jsou velmi důležité:
ModeAttributes resw 1 ; atributy režimu, včetně rozlišení text/grafika WinAAttributes resb 1 ; zajímá nás jen, jestli okno existuje WinASegment resw 1 ; segment pro okno A (měl by být 0xB800) BytesPerScanLine resw 1 ; počet bajtů, tentokrát na textový řádek (počet znaků*2) XResolution resw 1 ; počet znaků na textovém řádku YResolution resw 1 ; počet textových řádků XCharSize resb 1 ; šířka znaku v pixelech YCharSize resb 1 ; výška znaku v pixelech
8. Druhý demonstrační příklad: podrobné informace o vybraném textovém režimu
V dnešním druhém demonstračním příkladu si ukážeme, jakým způsobem lze získat a zobrazit podrobnější informace o vybraném textovém režimu. Konkrétně budeme zjišťovat informace o režimu s číslem 0×108. Tyto informace se přečtou a následně zobrazí na terminálu:
;----------------------------------------------------------------------------- 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, 0x108 ; 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 mov ax, [XCharSize] print_dec_8 mov ax, [YCharSize] print_dec_8 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_16 xor eax, eax mov ax, [WinSize] print_dec_16 xor eax, eax mov ax, [WinASegment] print_hex eax xor eax, eax mov ax, [WinBSegment] print_hex 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, "$" 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
Podívejme se nyní, jaké informace se vypsaly:
Success 0000000080 0000000060 0000000160 0000000004 0000000004 0000000008 0000000008 00000007 00000000 0000000032 0000000032 0000B800 00000000
Rozklíčovat je můžeme následujícím způsobem:
Počet znaků na řádku: 80 Počet textových řádků: 60 Počet bajtů na řádek: 160 (80×2) Bitů na pixel: 4 (postrádá přímý význam) Počet rovin: 4 (postrádá přímý význam) Šířka znaku v pixelech: 8 Výška znaku v pixelech: 8 Atributy okna A: 7 (lze měnit) Atributy okna B: 0 (neexistuje) Granularita oken: 32 kB (prakticky postrádá význam) Velikost oken: 32 kB (prakticky taktéž postrádá význam) Segment okna A: B800 (naprostý standard pro textové režimy) Segment okna B: 0000 (okno B neexistuje)
9. Přepnutí do textového režimu karet SVGA
Textový režim SVGA se nastavuje naprosto stejným způsobem, jako režim grafický. Pouze musíme zavolat službu 02 rozšíření VBE a v registru BX jí předat číslo požadovaného režimu. A – podobně jako u dalších volání VBE – se v pracovním registru AX vrátí hodnota 0×004f v případě, že byl režim korektně nastaven:
Vstup: AH = 4Fh Služby SVGA AL = 02h Podslužba pro nastavení grafického nebo textového režimu BX = číslo režimu (nejvyšší bit řídí, zda se má video paměť vymazat či nikoli) 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
V praxi tedy může nastavení textového režimu číslo 0×108 (80×60 znaků) vypadat následovně:
mov bx, 0x108 ; cislo rezimu mov ax, 0x4f02 ; nastaveni grafickeho rezimu int 0x10 cmp ax, 0x004f ; test, zda bylo volani funkce BIOSu uspesne jne failed success: ; v pořádku failed: ; nějaká chyba
10. Třetí demonstrační příklad: přepnutí do vybraného textového režimu
V dnešním třetím demonstračním příkladu se pokusíme o přepnutí grafické karty SVGA (prakticky jakékoli karty podporované rozšířením BIOSu VBE) do vybraného textového režimu. Konkrétně se bude jednat o režim číslo 0×108, což je v oblasti SVGA de facto standardní textový režim s osmdesáti znaky na řádku a šedesáti textovými řádky. Následně použijeme službu DOSu (tedy vlastně vysokoúrovňovou službu) pro tisk zprávy, abychom si ověřili, že vše pracuje podle očekávání:
;----------------------------------------------------------------------------- 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 mov bx, 0x108 ; cislo rezimu mov ax, 0x4f02 ; nastaveni grafickeho rezimu 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, "$"
Výsledek by mohl vypadat následovně:
Po přiblížení zjistíme, jak vypadají masky jednotlivých znaků na obrazovce:
11. Text a atributy – standard, který přežil až do dnešní doby
Již u pradávných karet CGA a MDA byl stanoven standard pro to, jak je organizována video paměť v textových režimech. V sudém bajtu (číslujeme od nuly) je uložen ASCII kód zobrazovaného znaku a v bajtu lichém jeho atribut. Struktura video paměti v textových režimech tedy vypadá takto (ukázka pro režim 80×25 znaků):
0 1 ║ 2 3 ║ 4 5 ║ ... ║158 159 ┌───┼───╫───┼───╫───┼───╫─────╫───┼───╖ 0│chr│atr║chr│atr║chr│atr║ ... ║chr│atr║ řádek 0 ├───┼───╫───┼───╫───┼───╫─────╫───┼───╢ 160│chr│atr║chr│atr║chr│atr║ ... ║chr│atr║ řádek 1 ├───┼───╫───┼───╫───┼───╫─────╫───┼───╢ 320│chr│atr║chr│atr║chr│atr║ ... ║chr│atr║ řádek 2 ├───┼───╫───┼───╫───┼───╫─────╫───┼───╢ 480│chr│atr║chr│atr║chr│atr║ ... ║chr│atr║ ├───┼───╫───┼───╫───┼───╫─────╫───┼───╢ . . ├───┼───╫───┼───╫───┼───╫─────╫───┼───╢ 3840│chr│atr║chr│atr║chr│atr║ ... ║chr│atr║ řádek 24 └───┴───╨───┴───╨───┴───╨─────╨───┴───╜
Samotný atributový bajt (samostatný pro každý znak) má tuto strukturu:
╓7┬6┬5┬4┬3┬2┬1┬0╖ ║ │bkgnd│ frgnd ║ ╙─┴─┴─┴─┴─┴─┴─┴─╜ bity ║ ╚═╦═╝ ╚═════╩═► 0-3: barva popředí 0-15 ║ ╚═══════════► 4-6: barva pozadí 0-7 ╚═══════════════► 7: povolení blikání
Pokud je blikání vypnuto (viz další text), význam se nepatrně změní:
╓7┬6┬5┬4┬3┬2┬1┬0╖ ║ bkgnd │ frgnd ║ ╙─┴─┴─┴─┴─┴─┴─┴─╜ bity ╚══╦══╝ ╚═════╩═► 0-3: barva popředí 0-15 ╚════════════► 4-6: barva pozadí 0-15
Tento způsob organizace video paměti v textových režimech zůstal zachován až do doby grafických karet SVGA. Došlo pouze k rozšíření celkového počtu znaků na obrazovce a taktéž nově existuje možnost mapovat barvy přes DAC (barvovou paletu), takže se nutně nemusí používat základní sada šestnácti barev.
12. Vyplnění části obrazovky přepnuté do textového režimu
Ukažme si nyní, jak vypadá obrazovka nějakého textového režimu. Obrazovku vyplníme různými kombinacemi atributů a znaků. Pokud bude atribut pozadí vyšší než hodnota 7, bude text blikat (což známe například ze ZX Spectra atd.):
13. Čtvrtý demonstrační příklad: vyplnění části obrazové paměti znaky a jejich atributy
Vyzkoušejme si nyní, jak bude vypadat obsah obrazovky (ať již reálné nebo emulované) v případě, že vyplníme její část (konkrétně blok 40×25×2 bajtů) nějakým obsahem. Výše zmíněný počet bajtů nebyl zvolen náhodně, protože přesně odpovídá původnímu textovému režimu grafické karty CGA, konkrétně textovému režimu zobrazujícího na monitoru 40×25 znaků se dvěma bajty na znak (kód znaku+atribut). Opět nejdříve vyzkoušíme režim číslo 0×108, tedy textový režim s osmdesáti znaky na řádku a šedesáti textovými řádky:
;----------------------------------------------------------------------------- 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 mov bx, 0x108 ; cislo rezimu mov ax, 0x4f02 ; nastaveni grafickeho rezimu int 0x10 cmp ax, 0x004f ; test, zda bylo volani funkce BIOSu uspesne jne failed success: mov ax, 0xb800 mov es, ax mov di, 0 ; nyni ES:DI obsahuje adresu prvniho znaku ve video RAM mov cx, 40*25 ; pocet zapisovanych znaku mov al, 0 ; kod zapisovaneho znaku opak: stosb ; zapis znaku + atributu stosb inc al ; dalsi znak/atribut loop opak ; opakujeme CX-krat 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, "$"
Výsledek by měl vypadat následovně:
14. Pátý demonstrační příklad: tatáž operace, ovšem provedená v odlišném textovém režimu
Největší počet znaků je možné zobrazit v textovém režimu s číslem 0×10c, který nabízí šedesát textových řádků a celých 132 znaků na řádku (tedy skoro osm tisíc znaků!) Vyzkoušejme si tedy, jakým způsobem se změní obsah obrazovky po přepnutí do tohoto textového režimu a nastavení prvních 40×25 znaků i jejich atributů:
;----------------------------------------------------------------------------- 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 mov bx, 0x10c ; cislo rezimu mov ax, 0x4f02 ; nastaveni grafickeho rezimu int 0x10 cmp ax, 0x004f ; test, zda bylo volani funkce BIOSu uspesne jne failed success: mov ax, 0xb800 mov es, ax mov di, 0 ; nyni ES:DI obsahuje adresu prvniho znaku ve video RAM mov cx, 40*25 ; pocet zapisovanych znaku mov al, 0 ; kod zapisovaneho znaku opak: stosb ; zapis znaku + atributu stosb inc al ; dalsi znak/atribut loop opak ; opakujeme CX-krat 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, "$"
Nyní by obrazovka měla vypadat takto:
15. Textový kurzor
Všechny skutečné (nikoli emulované) textové režimy mají na platformě IBM PC společné vlastnosti:
- První stránka textového režimu ve výchozím nastavení začíná na segmentu B800
- Každá pozice znaku je uložena ve dvou bajtech; jeden bajt obsahuje kód znaku, druhý bajt jeho atributy
- Textový kurzor je řízen hardwarem (nemusí se například vykreslovat jako inverzní znak, pouze se nastavuje jeho pozice)
- Blikání kurzoru je řízeno hardwarem (kurzor bude blikat, i když se CPU zcela „zasekne“)
- Tvar kurzoru je řízen hardwarem (lze ovlivnit jen začátek a konec kurzoru ve vertikálním směru)
Zaměřme se nyní na způsob řízení tvaru textového kurzoru. Většina SVGA karet se v tomto ohledu snaží o plnohodnotnou kompatibilitu s původní grafickou kartou CGA(!) a MDA. A připomeňme si, že srdcem grafické karty CGA (ale i mnoha dalších grafických video subsystémů té doby) je čip Motorola 6845, zkráceně MC6845. SVGA karty se tedy snaží o emulaci činnosti tohoto čipu, aby bylo možné textové režimy ovládat stále stejným způsobem. A tato vlastnost platí i pro nové textové režimy s větším počtem textových řádků a/nebo sloupců.
16. Řídicí registry čipu MC6845
Nastavení resp. přesněji řečeno konfigurace grafického řadiče MC6845 se provádělo přes celkem osmnáct osmibitových řídicích registrů. Některé z těchto registrů byly určeny pro zápis (například registr s počtem znaků na řádek atd.), jiné zase pro čtení (pozice světelného pera). Číselné hodnoty, které mohly být větší než 28 (což je počáteční adresa obrazové paměti, adresa kurzoru a adresa světelného pera), se musely ukládat do dvou sousedních osmibitových registrů.
Registry byly programátorům přístupné nepřímo, konkrétně přes dvojici adres – zápis do první adresy vybíral příslušný řídicí registr, čtení či zápis do druhé adresy (o jedničku vyšší) již vedl ke čtení či zápisu do příslušného řídicího registru. Díky tomu bylo možné MC6845 použít v prakticky jakémkoli počítačovém systému, a to i v případě, kdy je počet I/O portů zásadně omezen (teoreticky lze tak zkombinovat MC6845 například s osmibitovým mikrořadičem 8051). O které adresy oněch dvou registrů se konkrétně jedná záleželo na zapojení konkrétní grafické karty. Například u grafické karty CGA se jedná o I/O porty na adresách 0×3d4 a 0×3d5 a u grafické karty Hercules (taktéž IBM PC) se naopak jednalo o I/O porty 0×3b4 a 0×3b5. Moderní SVGA karty emulují CGA.
Význam jednotlivých řídicích registrů čipu 6845 je uveden v následující tabulce. Povšimněte si, že jednotkami při udávání horizontálních velikostí jsou vždy znaky a nikoli pixely – přesné časování je odvozeno od externího hodinového signálu řízeného krystalem:
Číslo registru | Šířka (b) | Význam |
---|---|---|
0 | 8 | celkový počet znaků horizontálně – 1, včetně okrajů (tedy nezobrazených znaků) |
1 | 8 | počet horizontálně zobrazených znaků (typicky 40 či 80) |
2 | 8 | horizontální pozice synchronizačního signálu (lze tedy posouvat obrazem na monitoru, ovšem omezeně) |
3 | 8 | šířka horizontálního synchronizačního signálu (záleží na konkrétním monitoru, řádkové frekvenci atd.) |
4 | 7 | celkový počet textových řádků, včetně okrajů (například 27, maximálně však 128) |
5 | 5 | mikroposun textových řádků po jednotlivých obrazových řádcích |
6 | 7 | zobrazený počet textových řádků (například 25) |
7 | 7 | vertikální pozice synchronizačního signálu (lze posouvat obrazem, opět omezeně) |
8 | 8 | režim prokládání (interlace) a posunutí |
9 | 5 | počet obrazových řádků pro jeden textový řádek – 1 – výška znaku (většinou 8 či 14) |
10 | 5+2 | začátek hardwarového kurzoru (většinou výška_znaku-3) |
11 | 5 | konec hardwarového kurzoru (kurzor může mít například výšku dvou obrazových řádků) |
12 | 6 | počáteční adresa obrazové paměti (vyšší bajt) |
13 | 8 | počáteční adresa obrazové paměti (nižší bajt) |
14 | 6 | adresa kurzoru – vyšší bajt (klasický posun hardwarového kurzoru) |
15 | 8 | adresa kurzoru – nižší bajt |
16 | 6 | adresa světelného pera – vyšší bajt |
17 | 8 | adresa světelného pera – nižší bajt |
17. Změna tvaru textového kurzoru modifikací HW registrů
Čip 6845, který je srdcem grafické karty MDA, CGA i Herculesu (a je emulován moderními SVGA), dokáže posílat signál o tom, že se má zobrazit textový kurzor. Toto je velmi zajímavá a možná i unikátní funkce, která je ovšem interně řešena velmi jednoduše. Adresu znaku, na kterém je textový kurzor, je nutné zapsat do dvou řídicích registrů, konkrétně do registrů R14 a R15. Dále se v registrech R10 a R11 nachází číslo mikrořádku (v rámci textového řádku), na kterém se má kurzor zobrazit – ten je totiž tvořen obdélníkem, který začíná (v rámci znaku) právě na řádku v R10 a končí na řádku uloženého v R11 (řekneme, že se jedná o hodnoty 12 a 14 pro znaky vysoké šestnáct mikrořádků).
Podívejme se nyní na způsob, jakým lze modifikovat tvar textového kurzoru. Nastavit lze počáteční obrazový řádek (v rámci výšky znaku, takže typicky v rozsahu 0 až 7 nebo 0 až 15) a koncový obrazový řádek. Oficiálně platí, že pokud je počáteční řádek větší, než řádek koncový, není kurzor zobrazen, ovšem existují neoficiální klony CGA, které v tomto případě zobrazí rozpůlený kurzor (první polovina začíná na řádku 0, druhá polovina končí na posledním znakovém řádku). Nastavení kurzoru bude vypadat následovně:
mov dx, 0x3d4 mov al, 0x0a ; registr s ovladanim tvaru textoveho kurzoru out dx, al mov dx, 0x3d5 mov al, 0 ; scanline, kde kurzor zacina out dx, al mov dx, 0x3d4 mov al, 0x0b ; registr s ovladanim tvaru textoveho kurzoru out dx, al mov dx, 0x3d5 mov al, 5 ; scanline, kde kurzor konci out dx, al
18. Šestý demonstrační příklad: změna tvaru textového kurzoru
V dnešním posledním demonstračním příkladu je ukázáno, jakým způsobem je možné přímou modifikací registrů (dnes již emulovaného) čipu MC6845 dosáhnout změny tvaru textového kurzoru. Nejdříve je provedeno přepnutí do textového režimu s vyšším počtem znaků, počká se na stisk klávesy, a posléze se tvar kurzoru změní:
;----------------------------------------------------------------------------- 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 mov bx, 0x108 ; cislo rezimu mov ax, 0x4f02 ; nastaveni grafickeho rezimu int 0x10 cmp ax, 0x004f ; test, zda bylo volani funkce BIOSu uspesne jne failed success: print_string success_msg wait_key mov dx, 0x3d4 mov al, 0x0a ; registr s ovladanim tvaru textoveho kurzoru out dx, al mov dx, 0x3d5 mov al, 0 ; scanline, kde kurzor zacina out dx, al mov dx, 0x3d4 mov al, 0x0b ; registr s ovladanim tvaru textoveho kurzoru out dx, al mov dx, 0x3d5 mov al, 5 ; scanline, kde kurzor konci out dx, al 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, "$"
Screenshoty pořízené před změnou textového kurzoru a po této změně:
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_movsb_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_movsb_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_movsb_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_mode286.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_mode386.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 |
212 | svga_info7.asm | informace o oknech podporovaných grafickým režimem | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_info7.asm |
213 | svga_mode0.asm | přepnutí do zvoleného grafického režimu | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_mode0.asm |
214 | svga_mode1.asm | vyplnění jediného okna barvami | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_mode1.asm |
215 | svga_mode2.asm | vyplnění čtyř banků barvami | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_mode2.asm |
216 | svga_mode3.asm | otestování, jakým způsobem jsou uloženy pixely v režimu s bitovou hloubkou 24/32 bitů | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_mode3.asm |
217 | svga_pixel_formats1.asm | zjištění formátu uložení pixelů v grafickém režimu s bitovou hloubkou 15 bitů | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_pixel_formats1.asm |
218 | svga_pixel_formats2.asm | zjištění formátu uložení pixelů v grafickém režimu s bitovou hloubkou 16 bitů | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_pixel_formats2.asm |
219 | svga_pixel_formats3.asm | zjištění formátu uložení pixelů v grafickém režimu s bitovou hloubkou 24 nebo 32 bitů | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_pixel_formats3.asm |
220 | svga_palette.asm | nastavení barvové palety v režimu s 256 barvami | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_palette.asm |
221 | svga_640×480_image1.asm | vykreslení rastrového obrázku bez modifikace offsetů na řádcích | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_640×480_image1.asm |
222 | svga_640×480_image2.asm | vykreslení rastrového obrázku s modifikací offsetů na řádcích | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_640×480_image2.asm |
223 | svga_640×480_image3.asm | první realizace subrutiny typu BitBLT | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_640×480_image3.asm |
224 | svga_640×480_image4.asm | vykreslení všech 200 řádků rastrového obrázku | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_640×480_image4.asm |
225 | svga_640×480_image5.asm | vycentrování rastrového obrázku | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_640×480_image5.asm |
226 | svga_640×480_image6.asm | změna počtu pixelů na obrazovém řádku | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_640×480_image6.asm |
227 | svga_text_mode1.asm | nastavení rozšířeného textového režimu | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_text_mode1.asm |
228 | svga_text_mode2.asm | přímý přístup do paměti rozšířeného textového režimu | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_text_mode2.asm |
229 | svga_text_mode3.asm | nastavení odlišného rozšířeného textového režimu | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_text_mode3.asm |
230 | svga_text_mode4.asm | změna tvaru kurzoru v rozšířeném textovém režimu | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_text_mode4.asm |
231 | svga_text_mode_info.asm | získání základních informací o textovém režimu | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_text_mode_info.asm |
232 | svga_text_modes.asm | tisk všech dostupných textových režimů karet SVGA | https://github.com/tisnik/8bit-fame/blob/master/pc-dos/svga_text_modes.asm |
20. Odkazy na Internetu
- VESA BIOS Extensions
https://en.wikipedia.org/wiki/VESA_BIOS_Extensions - Video Electronics Standards Association
https://en.wikipedia.org/wiki/Video_Electronics_Standards_Association - DJGPP (Wikipedia)
https://cs.wikipedia.org/wiki/DJGPP - DJGPP home page
http://www.delorie.com/djgpp/ - DJGPP Zip File Picker
http://www.delorie.com/djgpp/zip-picker.html - The Intel 8088 Architecture and Instruction Set
https://people.ece.ubc.ca/~edc/464/lectures/lec4.pdf - x86 Opcode Structure and Instruction Overview
https://pnx.tf/files/x86_opcode_structure_and_instruction_overview.pdf - x86 instruction listings (Wikipedia)
https://en.wikipedia.org/wiki/X86_instruction_listings - x86 assembly language (Wikipedia)
https://en.wikipedia.org/wiki/X86_assembly_language - Intel Assembler (Cheat sheet)
http://www.jegerlehner.ch/intel/IntelCodeTable.pdf - 25 Microchips That Shook the World
https://spectrum.ieee.org/tech-history/silicon-revolution/25-microchips-that-shook-the-world - Chip Hall of Fame: MOS Technology 6502 Microprocessor
https://spectrum.ieee.org/tech-history/silicon-revolution/chip-hall-of-fame-mos-technology-6502-microprocessor - Chip Hall of Fame: Intel 8088 Microprocessor
https://spectrum.ieee.org/tech-history/silicon-revolution/chip-hall-of-fame-intel-8088-microprocessor - Jak se zrodil procesor?
https://www.root.cz/clanky/jak-se-zrodil-procesor/ - Apple II History Home
http://apple2history.org/ - The 8086/8088 Primer
https://www.stevemorse.org/8086/index.html - flat assembler: Assembly language resources
https://flatassembler.net/ - FASM na Wikipedii
https://en.wikipedia.org/wiki/FASM - Fresh IDE FASM inside
https://fresh.flatassembler.net/ - MS-DOS Version 4.0 Programmer's Reference
https://www.pcjs.org/documents/books/mspl13/msdos/dosref40/ - DOS API (Wikipedia)
https://en.wikipedia.org/wiki/DOS_API - Bit banging
https://en.wikipedia.org/wiki/Bit_banging - IBM Basic assembly language and successors (Wikipedia)
https://en.wikipedia.org/wiki/IBM_Basic_assembly_language_and_successors - X86 Assembly/Bootloaders
https://en.wikibooks.org/wiki/X86_Assembly/Bootloaders - Počátky grafiky na PC: grafické karty CGA a Hercules
https://www.root.cz/clanky/pocatky-grafiky-na-pc-graficke-karty-cga-a-hercules/ - 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/ - Karta EGA: první použitelná barevná grafika na PC
https://www.root.cz/clanky/karta-ega-prvni-pouzitelna-barevna-grafika-na-pc/ - RGB Classic Games
https://www.classicdosgames.com/ - Turbo Assembler (Wikipedia)
https://en.wikipedia.org/wiki/Turbo_Assembler - Microsoft Macro Assembler
https://en.wikipedia.org/wiki/Microsoft_Macro_Assembler - IBM Personal Computer (Wikipedia)
https://en.wikipedia.org/wiki/IBM_Personal_Computer - Intel 8251
https://en.wikipedia.org/wiki/Intel_8251 - Intel 8253
https://en.wikipedia.org/wiki/Intel_8253 - Intel 8255
https://en.wikipedia.org/wiki/Intel_8255 - Intel 8257
https://en.wikipedia.org/wiki/Intel_8257 - Intel 8259
https://en.wikipedia.org/wiki/Intel_8259 - Support/peripheral/other chips – 6800 family
http://www.cpu-world.com/Support/6800.html - Motorola 6845
http://en.wikipedia.org/wiki/Motorola_6845 - The 6845 Cathode Ray Tube Controller (CRTC)
http://www.tinyvga.com/6845 - CRTC operation
http://www.6502.org/users/andre/hwinfo/crtc/crtc.html - The 6845 Cathode Ray Tube Controller (CRTC)
http://www.tinyvga.com/6845 - Motorola 6845 and bitwise graphics
https://retrocomputing.stackexchange.com/questions/10996/motorola-6845-and-bitwise-graphics - IBM Monochrome Display Adapter
http://en.wikipedia.org/wiki/Monochrome_Display_Adapter - Color Graphics Adapter
http://en.wikipedia.org/wiki/Color_Graphics_Adapter - Color Graphics Adapter and the Brown color in IBM 5153 Color Display
https://www.aceinnova.com/en/electronics/cga-and-the-brown-color-in-ibm-5153-color-display/ - The Modern Retrocomputer: An Arduino Driven 6845 CRT Controller
https://hackaday.com/2017/05/14/the-modern-retrocomputer-an-arduino-driven-6845-crt-controller/ - flat assembler: Assembly language resources
https://flatassembler.net/ - FASM na Wikipedii
https://en.wikipedia.org/wiki/FASM - Fresh IDE FASM inside
https://fresh.flatassembler.net/ - MS-DOS Version 4.0 Programmer's Reference
https://www.pcjs.org/documents/books/mspl13/msdos/dosref40/ - DOS API (Wikipedia)
https://en.wikipedia.org/wiki/DOS_API - IBM Basic assembly language and successors (Wikipedia)
https://en.wikipedia.org/wiki/IBM_Basic_assembly_language_and_successors - X86 Assembly/Arithmetic
https://en.wikibooks.org/wiki/X86_Assembly/Arithmetic - Art of Assembly – Arithmetic Instructions
http://oopweb.com/Assembly/Documents/ArtOfAssembly/Volume/Chapter6/CH06–2.html - ASM Flags
http://www.cavestory.org/guides/csasm/guide/asm_flags.html - Status Register
https://en.wikipedia.org/wiki/Status_register - Linux assemblers: A comparison of GAS and NASM
http://www.ibm.com/developerworks/library/l-gas-nasm/index.html - Programovani v assembleru na OS Linux
http://www.cs.vsb.cz/grygarek/asm/asmlinux.html - Is it worthwhile to learn x86 assembly language today?
https://www.quora.com/Is-it-worthwhile-to-learn-x86-assembly-language-today?share=1 - Why Learn Assembly Language?
http://www.codeproject.com/Articles/89460/Why-Learn-Assembly-Language - Is Assembly still relevant?
http://programmers.stackexchange.com/questions/95836/is-assembly-still-relevant - Why Learning Assembly Language Is Still a Good Idea
http://www.onlamp.com/pub/a/onlamp/2004/05/06/writegreatcode.html - Assembly language today
http://beust.com/weblog/2004/06/23/assembly-language-today/ - Assembler: Význam assembleru dnes
http://www.builder.cz/rubriky/assembler/vyznam-assembleru-dnes-155960cz - Programming from the Ground Up Book – Summary
http://savannah.nongnu.org/projects/pgubook/ - DOSBox
https://www.dosbox.com/ - The C Programming Language
https://en.wikipedia.org/wiki/The_C_Programming_Language - Hercules Graphics Card (HCG)
https://en.wikipedia.org/wiki/Hercules_Graphics_Card - Complete 8086 instruction set
https://content.ctcd.edu/courses/cosc2325/m22/docs/emu8086ins.pdf - Complete 8086 instruction set
https://yassinebridi.github.io/asm-docs/8086_instruction_set.html - 8088 MPH by Hornet + CRTC + DESiRE (final version)
https://www.youtube.com/watch?v=hNRO7lno_DM - Area 5150 by CRTC & Hornet (Party Version) / IBM PC+CGA Demo, Hardware Capture
https://www.youtube.com/watch?v=fWDxdoRTZPc - 80×86 Integer Instruction Set Timings (8088 – Pentium)
http://aturing.umcs.maine.edu/~meadow/courses/cos335/80×86-Integer-Instruction-Set-Clocks.pdf - Colour Graphics Adapter: Notes
https://www.seasip.info/VintagePC/cga.html - Restoring A Vintage CGA Card With Homebrew HASL
https://hackaday.com/2024/06/12/restoring-a-vintage-cga-card-with-homebrew-hasl/ - Demoing An 8088
https://hackaday.com/2015/04/10/demoing-an-8088/ - Video Memory Layouts
http://www.techhelpmanual.com/89-video_memory_layouts.html - Screen Attributes
http://www.techhelpmanual.com/87-screen_attributes.html - IBM PC Family – BIOS Video Modes
https://www.minuszerodegrees.net/video/bios_video_modes.htm - EGA Functions
https://cosmodoc.org/topics/ega-functions/#the-hierarchy-of-the-ega - 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/ - How 16 colors saved PC gaming – the story of EGA graphics
https://www.custompc.com/retro-tech/ega-graphics - List of 16-bit computer color palettes
https://en.wikipedia.org/wiki/List_of16-bit_computer_color_palettes - Why were those colors chosen to be the default palette for 256-color VGA?
https://retrocomputing.stackexchange.com/questions/27994/why-were-those-colors-chosen-to-be-the-default-palette-for-256-color-vga - VGA Color Palettes
https://www.fountainware.com/EXPL/vga_color_palettes.htm - Hardware Level VGA and SVGA Video Programming Information Page
http://www.osdever.net/FreeVGA/vga/vga.htm - Hardware Level VGA and SVGA Video Programming Information Page – sequencer
http://www.osdever.net/FreeVGA/vga/seqreg.htm - VGA Basics
http://www.brackeen.com/vga/basics.html - Introduction to VGA Mode ‚X‘
https://web.archive.org/web/20160414072210/http://fly.srk.fer.hr/GDM/articles/vgamodex/vgamx1.html - VGA Mode-X
https://web.archive.org/web/20070123192523/http://www.gamedev.net/reference/articles/article356.asp - Mode-X: 256-Color VGA Magic
https://downloads.gamedev.net/pdf/gpbb/gpbb47.pdf - Instruction Format in 8086 Microprocessor
https://www.includehelp.com/embedded-system/instruction-format-in-8086-microprocessor.aspx - How to use „AND,“ „OR,“ and „XOR“ modes for VGA Drawing
https://retrocomputing.stackexchange.com/questions/21936/how-to-use-and-or-and-xor-modes-for-vga-drawing - VGA Hardware
https://wiki.osdev.org/VGA_Hardware - Programmer's Guide to Yamaha YMF 262/OPL3 FM Music Synthesizer
https://moddingwiki.shikadi.net/wiki/OPL_chip - Does anybody understand how OPL2 percussion mode works?
https://forum.vcfed.org/index.php?threads/does-anybody-understand-how-opl2-percussion-mode-works.60925/ - Yamaha YMF262 OPL3 music – MoonDriver for OPL3 DEMO [Oscilloscope View]
https://www.youtube.com/watch?v=a7I-QmrkAak - Yamaha OPL vs OPL2 vs OPL3 comparison
https://www.youtube.com/watch?v=5knetge5Gs0 - OPL3 Music Crockett's Theme
https://www.youtube.com/watch?v=HXS008pkgSQ - Bad Apple (Adlib Tracker – OPL3)
https://www.youtube.com/watch?v=2lEPH6Y3Luo - FM Synthesis Chips, Codecs and DACs
https://www.dosdays.co.uk/topics/fm_synthesizers.php - The Zen Challenge – YMF262 OPL3 Original (For an upcoming game)
https://www.youtube.com/watch?v=6JlFIFz1CFY - [adlib tracker II techno music – opl3] orbit around alpha andromedae I
https://www.youtube.com/watch?v=YqxJCu_WFuA - [adlib tracker 2 music – opl3 techno] hybridisation process on procyon-ii
https://www.youtube.com/watch?v=daSV5mN0sJ4 - Hyper Duel – Black Rain (YMF262 OPL3 Cover)
https://www.youtube.com/watch?v=pu_mzRRq8Ho - IBM 5155–5160 Technical Reference
https://www.minuszerodegrees.net/manuals/IBM/IBM_5155_5160_Technical_Reference_6280089_MAR86.pdf - a ymf262/opl3+pc speaker thing i made
https://www.youtube.com/watch?v=E-Mx0lEmnZ0 - [OPL3] Like a Thunder
https://www.youtube.com/watch?v=MHf06AGr8SU - (PC SPEAKER) bad apple
https://www.youtube.com/watch?v=LezmKIIHyUg - Powering devices from PC parallel port
http://www.epanorama.net/circuits/lptpower.html - Magic Mushroom (demo pro PC s DOSem)
http://www.crossfire-designs.de/download/articles/soundcards//mushroom.rar - Píseň Magic Mushroom – originál
http://www.crossfire-designs.de/download/articles/soundcards/speaker_mushroom_converted.mp3 - Píseň Magic Mushroom – hráno na PC Speakeru
http://www.crossfire-designs.de/download/articles/soundcards/speaker_mushroom_speaker.mp3 - Pulse Width Modulation (PWM) Simulation Example
http://decibel.ni.com/content/docs/DOC-4599 - Resistor/Pulse Width Modulation DAC
http://www.k9spud.com/traxmod/pwmdac.php - Class D Amplifier
http://en.wikipedia.org/wiki/Electronic_amplifier#Class_D - Covox Speech Thing / Disney Sound Source (1986)
http://www.crossfire-designs.de/index.php?lang=en&what=articles&name=showarticle.htm&article=soundcards/&page=5 - Covox Digital-Analog Converter (Rusky, obsahuje schémata)
http://phantom.sannata.ru/konkurs/netskater002.shtml - PC-GPE on the Web
http://bespin.org/~qz/pc-gpe/ - Keyboard Synthesizer
http://www.solarnavigator.net/music/instruments/keyboards.htm - FMS – Fully Modular Synthesizer
http://fmsynth.sourceforge.net/ - Javasynth
http://javasynth.sourceforge.net/ - Software Sound Synthesis & Music Composition Packages
http://www.linux-sound.org/swss.html - Mx44.1 Download Page (software synthesizer for linux)
http://hem.passagen.se/ja_linux/ - Software synthesizer
http://en.wikipedia.org/wiki/Software_synthesizer - Frequency modulation synthesis
http://en.wikipedia.org/wiki/Frequency_modulation_synthesis - Yamaha DX7
http://en.wikipedia.org/wiki/Yamaha_DX7 - Wave of the Future
http://www.wired.com/wired/archive/2.03/waveguides_pr.html - Analog synthesizer
http://en.wikipedia.org/wiki/Analog_synthesizer - Minimoog
http://en.wikipedia.org/wiki/Minimoog - Moog synthesizer
http://en.wikipedia.org/wiki/Moog_synthesizer - Tutorial for Frequency Modulation Synthesis
http://www.sfu.ca/~truax/fmtut.html - An Introduction To FM
http://ccrma.stanford.edu/software/snd/snd/fm.html - John Chowning
http://en.wikipedia.org/wiki/John_Chowning - I'm Impressed, Adlib Music is AMAZING!
https://www.youtube.com/watch?v=PJNjQYp1ras - Milinda- Diode Milliampere ( OPL3 )
https://www.youtube.com/watch?v=oNhazT5HG0E - Dune 2 – Roland MT-32 Soundtrack
https://www.youtube.com/watch?v=kQADZeB-z8M - Interrupts
https://wiki.osdev.org/Interrupts#Types_of_Interrupts - Assembly8086SoundBlasterDmaSingleCycleMode
https://github.com/leonardo-ono/Assembly8086SoundBlasterDmaSingleCycleMode/blob/master/sbsc.asm - Interrupts in 8086 microprocessor
https://www.geeksforgeeks.org/interrupts-in-8086-microprocessor/ - Interrupt Structure of 8086
https://www.eeeguide.com/interrupt-structure-of-8086/ - A20 line
https://en.wikipedia.org/wiki/A20_line - Extended memory
https://en.wikipedia.org/wiki/Extended_memory#eXtended_Memory_Specification_(XMS) - Expanded memory
https://en.wikipedia.org/wiki/Expanded_memory - Protected mode
https://en.wikipedia.org/wiki/Protected_mode - Virtual 8086 mode
https://en.wikipedia.org/wiki/Virtual_8086_mode - Unreal mode
https://en.wikipedia.org/wiki/Unreal_mode - DOS memory management
https://en.wikipedia.org/wiki/DOS_memory_management - Upper memory area
https://en.wikipedia.org/wiki/Upper_memory_area - Removing the Mystery from SEGMENT : OFFSET Addressing
https://thestarman.pcministry.com/asm/debug/Segments.html - Segment descriptor
https://en.wikipedia.org/wiki/Segment_descriptor - 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/questions/45094696/when-using-a-32-bit-register-to-address-memory-in-the-real-mode-contents-of-the - A Brief History of Unreal Mode
https://www.os2museum.com/wp/a-brief-history-of-unreal-mode/ - Segment Limits
https://wiki.osdev.org/Segment_Limits - How do 32 bit addresses in real mode work?
https://forum.osdev.org/viewtopic.php?t=30642 - The LOADALL Instruction by Robert Collins
https://www.rcollins.org/articles/loadall/tspec_a3_doc.html - How do you put a 286 in Protected Mode?
https://retrocomputing.stackexchange.com/questions/7683/how-do-you-put-a-286-in-protected-mode - Control register
https://en.wikipedia.org/wiki/Control_register - CPU Registers x86
https://wiki.osdev.org/CPU_Registers_x86 - x86 Assembly/Protected Mode
https://en.wikibooks.org/wiki/X86_Assembly/Protected_Mode - MSW: Machine Status Word
https://web.itu.edu.tr/kesgin/mul06/intel/intel_msw.html - 80×87 Floating Point Opcodes
http://www.techhelpmanual.com/876–80×87_floating_point_opcodes.html - Page Translation
https://pdos.csail.mit.edu/6.828/2005/readings/i386/s05_02.htm - 80386 Paging and Segmenation
https://stackoverflow.com/questions/38229741/80386-paging-and-segmenation - 80386 Memory Management
https://tldp.org/LDP/khg/HyperNews/get/memory/80386mm.html - DOSEMU
http://www.dosemu.org/ - Intel 80386, a revolutionary CPU
https://www.xtof.info/intel80386.html - PAI Unit 3 Paging in 80386 Microporcessor
https://www.slideshare.net/KanchanPatil34/pai-unit-3-paging-in-80386-microporcessor - 64 Terabytes of virtual memory for 32-bit x86 using segmentation: how?
https://stackoverflow.com/questions/5444984/64-terabytes-of-virtual-memory-for-32-bit-x86-using-segmentation-how - Pi in the Pentium: reverse-engineering the constants in its floating-point unit
http://www.righto.com/2025/01/pentium-floating-point-ROM.html - Simply FPU
http://www.website.masmforum.com/tutorials/fptute/ - Art of Assembly language programming: The 80×87 Floating Point Coprocessors
https://courses.engr.illinois.edu/ece390/books/artofasm/CH14/CH14–3.html - Art of Assembly language programming: The FPU Instruction Set
https://courses.engr.illinois.edu/ece390/books/artofasm/CH14/CH14–4.html - INTEL 80387 PROGRAMMER'S REFERENCE MANUAL
http://www.ragestorm.net/downloads/387intel.txt - x86 Instruction Set Reference: FLD
http://x86.renejeschke.de/html/file_module_x86_id100.html - x86 Instruction Set Reference: FLD1/FLDL2T/FLDL2E/FLDPI/FLDLG2/FLDLN2/FLDZ
http://x86.renejeschke.de/html/file_module_x86_id101.html - X86 Assembly/Arithmetic
https://en.wikibooks.org/wiki/X86_Assembly/Arithmetic - 8087 Numeric Data Processor
https://www.eeeguide.com/8087-numeric-data-processor/ - Data Types and Instruction Set of 8087 co-processor
https://www.eeeguide.com/data-types-and-instruction-set-of-8087-co-processor/ - 8087 instruction set and examples
https://studylib.net/doc/5625221/8087-instruction-set-and-examples - GCC documentation: Extensions to the C Language Family
https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions - GCC documentation: Using Vector Instructions through Built-in Functions
https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html - SSE (Streaming SIMD Extentions)
http://www.songho.ca/misc/sse/sse.html - Timothy A. Chagnon: SSE and SSE2
http://www.cs.drexel.edu/~tc365/mpi-wht/sse.pdf - Intel corporation: Extending the Worldr's Most Popular Processor Architecture
http://download.intel.com/technology/architecture/new-instructions-paper.pdf - SIMD architectures:
http://arstechnica.com/old/content/2000/03/simd.ars/ - Tour of the Black Holes of Computing!: Floating Point
http://www.cs.hmc.edu/~geoff/classes/hmc.cs105…/slides/class02_floats.ppt - 3Dnow! Technology Manual
AMD Inc., 2000 - Intel MMXTM Technology Overview
Intel corporation, 1996 - MultiMedia eXtensions
http://softpixel.com/~cwright/programming/simd/mmx.phpi - AMD K5 („K5“ / „5k86“)
http://www.pcguide.com/ref/cpu/fam/g5K5-c.html - Sixth Generation Processors
http://www.pcguide.com/ref/cpu/fam/g6.htm - Great Microprocessors of the Past and Present
http://www.cpushack.com/CPU/cpu1.html - Very long instruction word (Wikipedia)
http://en.wikipedia.org/wiki/Very_long_instruction_word - CPU design (Wikipedia)
http://en.wikipedia.org/wiki/CPU_design - Grafické karty a grafické akcelerátory (14)
https://www.root.cz/clanky/graficke-karty-a-graficke-akceleratory-14/ - Grafické karty a grafické akcelerátory (15)
https://www.root.cz/clanky/graficke-karty-a-graficke-akceleratory-15/ - Grafické karty a grafické akcelerátory (16)
https://www.root.cz/clanky/graficke-karty-a-graficke-akceleratory-16/ - VESA Video Modes
https://wiki.osdev.org/VESA_Video_Modes - Introduction to VESA programming
http://www.monstersoft.com/tutorial1/VESA_intro.html - Guide: VBE 2.0 graphics modes
https://delorie.com/djgpp/doc/ug/graphics/vbe20.html - NASM instruction list
https://userpages.cs.umbc.edu/chang/cs313/nasmdoc/html/nasmdocb.html - BitBlt function (wingdi.h)
https://learn.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-bitblt - SetDIBitsToDevice function (wingdi.h)
https://learn.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-setdibitstodevice - Why did line printers have 132 columns?
https://retrocomputing.stackexchange.com/questions/7838/why-did-line-printers-have-132-columns - Tabulating machine
https://en.wikipedia.org/wiki/Tabulating_machine - Why do printers print 132 columns on 14 7/8″ paper? It’s history
https://blog.adafruit.com/2019/01/22/why-do-printers-print-132-columns-on-14–7–8-paper-its-history-vintagecomputing-kenshirriff-ibm/ - IBM 1403 (Wikipedia)
https://en.wikipedia.org/wiki/IBM_1403