Hlavní navigace

Vývoj her a grafických dem pro oslavovanou i nenáviděnou platformu PC (první kroky)

2. 7. 2024
Doba čtení: 19 minut

Sdílet

 Autor: Depositphotos
Již poněkolikáté se vrátíme na do 80. let minulého století. V novém seriálu si ukážeme tvorbu aplikací pro IBM PC. Platformu, která byla mnoha programátory nenáviděna, ovšem viděno zpětně: měla něco do sebe.

Obsah

1. Vývoj her a grafických dem pro oslavovanou i nenáviděnou platformu PC (úvod)

2. Vznik konceptu IBM PC

3. Osmibitový či šestnáctibitový počítač?

4. Počítač bez specializovaných zákaznických obvodů

5. IBM PC z pohledu programátora

6. Co je zapotřebí k vývoji? Editor, assembler, Sysman a dostatek kafe

7. DOSBox – emulátor IBM PC

8. Assembler vhodný pro vývoj pro IBM PC

9. Netwide Assembler (NASM)

10. Flat Assembler (FASM)

11. Instalace Netwide Assembleru

12. První program pro IBM PC v assembleru: Hello world!

13. Úplný zdrojový kód programu typu „Hello, world!“

14. Výsledný program, jeho spuštění v DOSBoxu

15. Zkrácené řešení ukončení procesu

16. Čekání na stisk klávesy

17. Úplný zdrojový kód programu, který čeká na stisk klávesy

18. Obsah navazujícího článku

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

20. Odkazy na Internetu

1. Vývoj her a grafických dem pro oslavovanou i nenáviděnou platformu PC (úvod)

V srpnu roku 1981, tedy před 43 lety, se začal prodávat šestnáctibitový osobní mikropočítač IBM PC. Z dnešního pohledu se sice jednalo o velmi málo výkonný stroj, ovšem v době vzniku IBM PC patřil tento mikropočítač v oblasti osobních mikropočítačů mezi špičku, alespoň co se týká hrubého výpočetního výkonu. Obsahoval šestnáctibitový mikroprocesor Intel 8088 (s vnější sběrnicí zůženou na osm bitů) taktovaný na 4,77 MHz.

Kapacita operační paměti se pohybovala od 16 kB do 256 kB (takže se ani zdaleka nedotýkala tehdy teoretické hranice 640 kB, na kterou se narazilo sice později, ale o to tvrději), pro grafiku se používala grafická karta CGA, pro profesionální textové aplikace pak karta MDA s odlišným monitorem. Zvukový výstup obstarával nechvalně známý PC

Důležité byly dva fakty – IBM PC vyráběla společnost IBM, která byla pro mnoho korporací známým a dlouhodobým partnerem. A navíc IBM PC byla do určité míry otevřená architektura se standardizovanou sběrnicí umožňující modulární design (což se ukázalo již na možnosti výběru video karty – obě nabízené karty sice byly špatné, ale ne stejně špatné).

Základní deska z IBM PC

Obrázek 1: Na tomto obrázku s motherboardem IBM PC je možná nejdůležitější sběrnice se sloty, které zde nejsou popsány.

2. Vznik konceptu IBM PC

Na přelomu let 1980 a 1981 již byly splněny všechny podmínky, které umožnily nejenom vznik konceptu PC, ale i jeho komerční úspěch, což je o to důležitější, když si uvědomíme, jak problematické a mnohdy krátkodobé byly mnohé další projekty v oblasti osmibitových domácích či 16/32bitových osobních mikropočítačů (máme totiž tendenci si pamatovat úspěšné projekty, těch neúspěšných však bylo mnohem více). Koncept osobního počítače už v té době existoval (takto se označovala například celá řada Apple II), takže v tomto ohledu firma IBM vlastně nevymyslela nic nového. Taktéž již existovaly mikroprocesory odpovídající požadavkům IBM (muselo se jedna o nezávislé výrobce – to splňovaly čipy řady 86).

Obrázek 2: Pohled do nitra počítače Apple II. V zadní části můžeme vidět sloty určené pro připojení přídavných karet.

K dispozici navíc byly i obvody nutné pro realizaci video systému (k tomu se samozřejmě ještě vrátíme, to je totiž jedna ze špatných věcí PC), DRAM s požadovanou kapacitou (začínalo se na 16kB a pokračovalo až do 64kB, teprve později se kapacita zdesateronásobila). A navíc již měla firma IBM zkušenosti z vývoje univerzálních sběrnic, protože právě existence standardizované sběrnice je fakt, který počítač IBM PC odlišoval od dalších dobových do značné míry uzavřených systémů. Možnost rozšiřování PC přes standardizovanou sběrnici byla velmi dobrou myšlenkou, která tuto platformu pomohla rozšířit.

Obrázek 3: Cesta ke konceptu IBM PC.

3. Osmibitový či šestnáctibitový počítač?

Osobní mikropočítače IBM PC byly oficiálně postaveny na mikroprocesorové architektuře Intel 8086, díky čemž je tato architektura vlastně stále živá (16bitový reálný režim zde totiž stále existuje kvůli bootstrapingu). Jednalo se o plně šestnáctibitovou architekturu, která však ideově navazovala na předchozí dvě generace osmibitových mikroprocesorů společnosti Intel, tj. na řadu Intel 8008 a především pak úspěšný Intel 8080, který se na určitou dobu stal průmyslovým standardem.

Nicméně samotné IBM PC (tedy vůbec první počítač z této rodiny) nepoužívalo mikroprocesor Intel 8086, ale jeho „osekanou“ a levnější variantu nazvanou Intel 8088. Ona osmička na konci číselného označení čipu naznačuje, že i když se interně jednalo o šestnáctibitový mikroprocesor, externí datová sběrnice byla pouze osmibitová. Interně byl ovšem Intel 8088 prakticky totožný s Intelem 8086, a to včetně aritmeticko-logické jednotky (ALU) i execution unit (EU). Odlišovala se jen jediná komponenta, a to konkrétně bus interface unit (BIU).

Otázkou zůstává, jak se na mikroprocesor Intel 8088 dívat – jedná se o osmibitový či šestnáctibitový čip? Z pohledu aritmeticko-logické jednotky a interní datové sběrnice jde o šestnáctibitový čip, z pohledu externího pak o čip osmibitový. A programátoři vlastně ani nerozliší mezi plnohodnotným čipem Intel 8086 a jeho „shrouhnutou“ variantou Intel 8088 (až na pomalejší běh programů).

Poznámka: podobné nejasnosti panují okolo konkurenční Motoroly 68000, která je považována za 16/32 bitový čip, i když většina ALU operací je ve skutečnosti plně 32bitová.

4. Počítač bez specializovaných zákaznických obvodů

Použití z vnějšího pohledu „pouze“ osmibitového mikroprocesoru Intel 8088 bylo ve skutečnosti velmi dobrým inženýrským rozhodnutím, které určilo základní vlastnosti IBM PC. Znamenalo totiž, že na úkor výpočetní rychlosti (pomalejší načítání instrukcí a dat) bylo možné celé IBM PC postavit na bázi osmibitových čipů, konkrétně čipů Intel 8251 (UART), Intel 8253 (programovatelný časovač), Intel 8237/8257 (programovatelný řadič DMA), Intel 8255 (paralelní rozhraní) a konečně Intel 8259 (programovatelný řadič přerušení). K tomu připočtěme grafický subsystém, který je postaven na čipu Motorola 6845, nezávisle na tom, zda se použila karta MDA či CGA.

Důležité přitom je, že všechny výše zmíněné čipy byly běžně dostupné na trhu, dobře zdokumentované a IBM PC vůbec nepoužívalo specializované zákaznické obvody. To je v poměrně ostrém kontrastu s mnoha tehdejšími osmibitovými domácími počítači, jejichž součástí většinou zákaznické obvody byly (ULA na ZX Spectru, ANTIC, GTIA a POKEY na Atari, VIC-II a SID na Commodore C64), nemluvě o počítačích řady Atari ST a především Amiga. Počítač IBM PC tak bylo možné relativně snadno „naklonovat“ a skutečně – postupně vzniklo mnoho firem, které nabízely vlastní varianty PC, mnohdy prakticky zcela kompatibilní s originálem, někdy s nekompatibilními změnami a vylepšeními.

5. IBM PC z pohledu programátora

Z dnešního pohledu je IBM PC minimalisticky pojatým počítačem, kde mezi programátorem a vlastním hardwarem nejsou umístěny žádné další mezivrstvy, a to dokonce většinou ani drivery – většinu zařízení je totiž možné ovládat přímo pomocí řídicích registrů a popř. namapované paměti. Některé operace nabízel systém BIOS umístěný v EPROM, ovšem těchto operací je relativně málo a například pro grafický výstup jsou nedostačující či pomalé. 

Navíc ani systém DOS vlastně programátorům moc nepomáhal, protože umožňoval jen práci na úrovni logických zařízení (disket, disků, tiskáren atd.), práci s adresáři, práci se soubory a základní podporu pro spouštění procesů, pro vytvoření rezidentních procesů a pro jejich ukončení (DOS je sice jednoúlohový systém, ovšem rezidentní programy mohly být spuštěny souběžně s jiným programem).

Poznámka: pro nás je tento minimalismus výhodou, protože lze začít programovat bez nutnosti nastudovat si mnoho materiálů.

Obrázek 4: První PC skutečně mohly mít jen 16kB RAM. Ovšem tento screenshot je důležitý z jiného důvodu – ukazuje, jak nekoncepčně jsou některé části PC navrženy. Zde konkrétně služba BIOSu, která se musela jedenkrát změnit a posléze zcela ztratila význam (kapacitu RAM je nutno zjistit jinak). Podobných nutností udržení zpětné kompatibility je v oblasti PC mnoho (asi nejznámější je tzv. A20 line, což je „technologie“, která nás straší dodnes).

6. Co je zapotřebí k vývoji? Editor, assembler, Sysman a dostatek kafe

Podobně minimalisticky jako hardware je pojato i potřebné softwarové vybavení. V podstatě postačovalo jen minimum programových prostředků, konkrétně programátorský textový editor, nějaký assembler (například dobový Turbo Assembler nebo Macroassembler), linker a program typu Sysman s popisem hardware, jeho řídicích registrů, systémových volání BIOSu a systémových volání DOSu. Namísto Sysmana (český produkt, v češtině) je možné využít i další zdroje informací, například známý Ralf Brown's Interrupt List.

Poznámka: toto SW vybavení se i se základním systémem vešlo na jedinou disketu.

Náš „setup“ bude odlišný, a to:

  1. DOSBox pro emulaci IBM PC i systému DOS
  2. Libovolný programátorský editor běžící přímo ve vašem systému
  3. Netwide assembler nebo Flat assembler běžící přímo ve vašem systému
  4. Namísto Sysmana budou použity informace z tohoto článku i z článků navazujících

7. DOSBox – emulátor IBM PC

Pravděpodobně jen málo čtenářů má přístup k reálnému IBM PC (i když například pozdější XTčka se ještě dají najít, a to i ve funkčním stavu). Z tohoto důvodu budeme potřebovat vhodný emulátor PC. Tím je DOSBox, který dokáže velmi dobře emulovat jak vlastní PC, tak i mnoho video adaptérů, různých zvukových karet apod. Výhodou DOSBoxu je možnost jeho instalace jak v Linuxu, tak i ve Windows. Programy, které budeme vytvářet, budou překládány do spustitelných souborů typu COM a ty budeme spouštět triviálně takto:

$ dosbox název_programu.com

DOSBox v tomto případě interně „nabootuje“ virtuální PC, nahraje do něj obdobu systému DOS a následně náš program v tomto emulovaném prostředí spustí.

Poznámka: pro spouštění her a dalších programů, které se skládají z více souborů, je práce s DOSBoxem nepatrně složitější, neboť je nutné připojit adresář se hrou tak, aby se z pohledu emulovaného systému DOS jednalo o nějaký disk (C:, D: apod.). Toto řešení však prozatím nebude v našem případě zapotřebí.

8. Assembler vhodný pro vývoj pro IBM PC

V rámci dalšího textu i navazujících článků si tvorbu aplikací pro IBM PC prakticky vyzkoušíme. Budeme k tomu ovšem potřebovat vhodný assembler. Vzhledem k tomu, že dobové assemblery, což vlastně znamená Turbo Assembler či Microsoft Macroassembler, stále nebyly uvolněny pod vhodnou licencí (i když se na internetu dají najít), použijeme některý moderní assembler, a to konkrétně takový assembler, který podporuje instrukční sadu šestnáctibitových mikroprocesorů Intel 8086/Intel 8088 a současně podporuje i vygenerování spustitelných souborů určených pro operační systém DOS. Mezi takové assemblery patří Netwide Assembler neboli NASM a taktéž Flat Assembler neboli FASM.

Poznámka: vlastně se jedná o cross assemblery, tedy o takové nástroje, které nám umožní na platformě x86–64 (a operačním systému Linux či Microsoft Widnows) přeložit programy pro šestnáctibitovou platformu 8086 a operační systém DOS.

9. Netwide Assembler (NASM)

Jedním z volně dostupných assemblerů, které bude možné použít i pro vývoj na IBM PC, je známý Netwide Assembler (NASM). Tento assembler vznikl v době, kdy začali na operační systém Linux přecházet programátoři znající a používající operační systémy DOS a (16/32bit) Windows. Tito programátoři byli většinou dobře seznámeni s možnostmi assemblerů, které se na těchto platformách používaly nejčastěji – Turbo Assembleru (TASM) společnosti Borland i Microsoft Macro Assembleru (MASM) a tak jim možnosti na Linuxu standardního GNU Assembleru (který má své kořeny na odlišných architekturách) příliš nevyhovovaly.

Výsledkem snah o vytvoření nástroje podobnému TASMu či MASMu byl právě projekt pojmenovaný NASM, který podporuje stejný způsob zápisu operandů instrukcí a navíc ještě zjednodušuje zápis těch instrukcí, u nichž je jeden operand tvořen nepřímou adresou. NASM byl následován projektem Yasm (fork+přepis), ovšem základní vlastnosti a především pak vazba na platformu i386 a x86_64 zůstaly zachovány (to mj. znamená, že například na Raspberry Pi možnosti těchto dvou nástrojů plně nevyužijeme, což je určitě škoda, protože zrovna tento mikropočítač se poměrně dobře hodí pro výuku assembleru). Nicméně pro DOS a IBM PC nám bude tento assembler plně vyhovovat.

10. Flat Assembler (FASM)

Dalším vhodným assemblerem je FASM neboli flat assembler (nikoli fast assembler, i když i toto jméno by v tomto případě bylo poměrně příhodné). FASM má poměrně velké množství zajímavých vlastností. Jedná se o assembler určený pro platformy x86, IA-32 i x86–64. Pod těmito zkratkami se skrývá původní šestnáctibitová instrukční sada procesorů řady 8086 (což nás přesně zajímá), dále 32bitové rozšíření této instrukční sady (někdy označované i386, i686 atd. podle konkrétní varianty, dostupných pracovních registrů atd.) a konečně 64bitové rozšíření této instrukční sady.

Dále FASM podporuje generování výstupu v různých formátech, včetně „plochého“ binárního formátu (pouze kódy instrukcí a případná statická data), souborů COM z DOSu (dtto to samé, ovšem s posunutou základní adresou), formátů ELF, COFF, PE, MZ atd. K této důležité problematice se ještě vrátíme v dalším textu.

Zajímavé je, že způsob překladu či formát výstupního souboru, který assembler generuje, se nezadává přepínači zadávanými na příkazové řádce ani s využitím konfiguračních souborů. Tyto informace jsou totiž přímo součástí zdrojových kódů a navíc je zaručeno, že FASM pro stejné vstupní zdrojové kódy vždy vygeneruje bitově naprosto totožný výstup (což je poněkud paradoxně problematika, ke které se v IT zase vracíme). Samozřejmě ovšem můžeme tento koncept „ohnout“, například tak, že vstupní zdrojový soubor bude obsahovat informace o výstupním formátu, ale bude direktivou include při překladu vkládat například obecné knihovní subrutiny atd.

A navíc je samotný FASM naprogramován přímo ve FASM, tedy sám v sobě (viz jeho zdrojové kódy), což znamená, že dnes již (bez bootstrapingu, viz též Můžeme věřit překladačům? Projekty řešící schéma „důvěřivé důvěry“) může přeložit sám sebe. Díky podpoře různých platforem (16bitová, 32bitová, 64bitová) i různých výstupních formátů lze FASM přeložit (cross překladem) na různé platformy (DOS, Windows, Linux, MenuetOS…) a přitom budou výsledné spustitelné binární soubory s assemblerem naprosto totožné se soubory získanými instalací FASM například z repositářů nějaké distribuce.

11. Instalace Netwide Assembleru

V současných distribucích Linuxu nalezneme většinou právě Netwide Assembler, takže prozatím využijeme tento užitečný nástroj. Jeho instalace je většinou jednoduchá, protože nemá prakticky žádné závislosti. Příkladem může být instalace ne Fedoře 38:

$ sudo dnf install nasm
 
Last metadata expiration check: 0:46:41 ago on Fri 28 Jun 2024 03:20:33 PM CEST.
Dependencies resolved.
============================================================================================
 Package                 Architecture        Version              Repository           Size
============================================================================================
Installing:
 nasm                    x86_64              2.16.01-3.fc38       fedora              455 k
 
Transaction Summary
============================================================================================
Install  1 Package
 
Total download size: 455 k
Installed size: 3.3 M
Is this ok [y/N]:

Po instalaci si ověříme, že je Netwide Assembler spustitelný:

$ nasm -version
 
NASM version 2.16.01 compiled on Jan 19 2023

12. První program pro IBM PC v assembleru: Hello world!

Nás úplně první program pro IBM PC sice bude psaný v assembleru, ale bude dodržovat zvyklosti zavedené ve slavné knize The C Programming Language. Bude se tedy jednat o program, který po svém spuštění vypíše na obrazovku zprávu „Hello, world!“ a následně se ukončí. To znamená, že budeme potřebovat realizovat dvě operace:

  1. Výpis zprávy na terminál (tedy na STDOUT)
  2. Ukončení procesu

Pro obě operace prozatím použijeme služby DOSu. Ty se volají vyvoláním softwarového přerušení 0×21, tj. instrukcí:

int 0x21

Do osmibitového registru AH se vkládá číslo operace, což v našem případě znamená:

Operace Název Číslo v AH
výpis řetězce Print string 9
ukončení procesu Terminate process with return code 4c

Pro tisk zprávy použijeme funkci DOSu číslo 9, které se v šestnáctibitovém registru DX předá adresa zprávy. Délku není zapotřebí uvádět, protože zpráva musí být ukončena znakem „$“ (nikoli nulou!), což ovšem není pouze specifikum DOSu (ostatně tato služba byla „převzata“ ze CP/M):

        ; tisk retezce na obrazovku
        mov     dx, message
        mov     ah, 9
        int     0x21

Pro ukončení procesu se obvykle používá funkce 0×4c, přičemž v registru AL lze předat návratovou hodnotu:

        ; ukonceni procesu a navrat do DOSu
        mov     ah, 0x4c
        int     0x21

13. Úplný zdrojový kód programu typu „Hello, world!“

; Program typu "Hello, world!" urceny pro DOS a prelozitelny assemblerem NASM
;
; preklad pomoci:
;     nasm -f bin -o hello.com hello.asm
;
; nebo pouze:
;     nasm -o hello.com hello.asm
 
 
;-----------------------------------------------------------------------------
org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
 
start:
        ; tisk retezce na obrazovku
        mov     dx, message
        mov     ah, 9
        int     0x21
 
        ; ukonceni procesu a navrat do DOSu
        mov     ah, 0x4c
        int     0x21
 
        ; retezec ukonceny znakem $
message db "Hello, world!", 0x0d, 0x0a, "$"

14. Výsledný program, jeho spuštění v DOSBoxu

Překlad výše popsaného programu provedeme příkazem:

$ nasm -o hello.com hello.asm 

Výsledkem by měl být soubor o délce pouze 27 bajtů:

$ ls -la hello.com
 
-rw-r--r--. 1 ptisnovs ptisnovs 27 Jun 30 20:13 hello.com

Systém Linux dokonce rozpozná jeho typ:

$ file hello.com 
 
hello.com: COM executable for DOS

Podívat se můžeme i na obsah tohoto souboru, který bude za všech předpokladů stejný (nezávisle na assembleru, jeho verzi, verzi Linuxu, verzi DOSu atd.):

$ od -tx1 hello.com
 
0000000 ba 0b 01 b4 09 cd 21 b4 4c cd 21 48 65 6c 6c 6f
0000020 2c 20 77 6f 72 6c 64 21 0d 0a 24
0000033

Program spustíme v DOSBoxu takto:

$ dosbox hello.com

Výsledek:

Obrázek 5: Obrazovka DOSboxu po spuštění našeho programu, výpisu zprávy a jeho následného ukončení (druhá zpráva je vypsána samotným DOSBoxem).

15. Zkrácené řešení ukončení procesu

Ukončení programu nemusí být realizováno funkcí DOSu 0×4c, ale pouze instrukcí retn (near return) s předáním návratového kódu v AX (tím ušetříme několik taktů a několik bajtů):

        xor     ax, ax       ; navratovy kod
        retn                 ; navrat do DOSu

Program se tedy změní následovně:

; Program typu "Hello, world!" urceny pro DOS a prelozitelny assemblerem NASM
;
; preklad pomoci:
;     nasm -f bin -o hello.com hello_shorter.asm
;
; nebo pouze:
;     nasm -o hello.com hello_shorter.asm
 
  
;-----------------------------------------------------------------------------
org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
 
start:
        ; tisk retezce na obrazovku
        mov     dx, message
        mov     ah, 9
        int     0x21
 
        ; ukonceni procesu a navrat do DOSu
        ret
 
        ; retezec ukonceny znakem $
message db "Hello, world!", 0x0d, 0x0a, "$"

Po překladu se délka zkrátí na pouhých 24 bajtů.

16. Čekání na stisk klávesy

Do našeho programu ještě přidáme čekání na stisk klávesy po výpisu zprávy. Tentokrát ovšem nevyužijeme služeb DOSu, ale přímo BIOSu. Tyto služby se vyvolávají několika SW přerušeními (zkráceně 0×00 až 0×20), protože služby BIOSu jsou rozděleny do několika skupin. Pro práci s klávesnicí jsou určeny služby volané přes přerušení 0×16, konkrétně hned první služba s AH=0. Tato služba čeká na stisk libovolné klávesy (a vrací kód této klávesy), takže její použití je triviální:

        ; vyprazdneni bufferu klavesnice a cekani na klavesu
        xor     ax, ax
        int     0x16

Obrázek 6: Náš program je nyní propracovanější – čeká na stisk klávesy.

CS24_early

17. Úplný zdrojový kód programu, který čeká na stisk klávesy

; Program typu "Hello, world!" urceny pro DOS a prelozitelny assemblerem NASM
;
; preklad pomoci:
;     nasm -f bin -o hello.com hello_wait.asm
;
; nebo pouze:
;     nasm -o hello.com hello_wait.asm
 
 
;-----------------------------------------------------------------------------
org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
 
start:
        ; tisk retezce na obrazovku
        mov     dx, message
        mov     ah, 9
        int     0x21
 
        ; vyprazdneni bufferu klavesnice a cekani na klavesu
        xor     ax, ax
        int     0x16
 
        ; ukonceni procesu a navrat do DOSu
        mov     ah, 0x4c
        int     0x21
 
        ; retezec ukonceny znakem $
message db "Hello, world!", 0x0d, 0x0a, "$"

18. Obsah navazujícího článku

Příště si již ukážeme zajímavější programátorské techniky, konkrétně práci s textovými i grafickými režimu (ne)slavné grafické karty CGA. I přes značná omezení pro tuto grafickou kartu vznikly stovky her.

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

Demonstrační příklady napsané v assembleru, které jsou určené pro překlad pomocí assembleru NASM, byly uložen 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

20. Odkazy na Internetu

  1. The Intel 8088 Architecture and Instruction Set
    https://people.ece.ubc.ca/~ed­c/464/lectures/lec4.pdf
  2. x86 Opcode Structure and Instruction Overview
    https://pnx.tf/files/x86_op­code_structure_and_instruc­tion_overview.pdf
  3. x86 instruction listings (Wikipedia)
    https://en.wikipedia.org/wi­ki/X86_instruction_listin­gs
  4. x86 assembly language (Wikipedia)
    https://en.wikipedia.org/wi­ki/X86_assembly_language
  5. Intel Assembler (Cheat sheet)
    http://www.jegerlehner.ch/in­tel/IntelCodeTable.pdf
  6. 25 Microchips That Shook the World
    https://spectrum.ieee.org/tech-history/silicon-revolution/25-microchips-that-shook-the-world
  7. Chip Hall of Fame: MOS Technology 6502 Microprocessor
    https://spectrum.ieee.org/tech-history/silicon-revolution/chip-hall-of-fame-mos-technology-6502-microprocessor
  8. Chip Hall of Fame: Intel 8088 Microprocessor
    https://spectrum.ieee.org/tech-history/silicon-revolution/chip-hall-of-fame-intel-8088-microprocessor
  9. Jak se zrodil procesor?
    https://www.root.cz/clanky/jak-se-zrodil-procesor/
  10. Apple II History Home
    http://apple2history.org/
  11. The 8086/8088 Primer
    https://www.stevemorse.or­g/8086/index.html
  12. flat assembler: Assembly language resources
    https://flatassembler.net/
  13. FASM na Wikipedii
    https://en.wikipedia.org/wiki/FASM
  14. Fresh IDE FASM inside
    https://fresh.flatassembler.net/
  15. MS-DOS Version 4.0 Programmer's Reference
    https://www.pcjs.org/docu­ments/books/mspl13/msdos/dos­ref40/
  16. INT 21 – DOS Function Dispatcher (DOS)
    https://www.stanislavs.or­g/helppc/int21.html
  17. DOS API (Wikipedia)
    https://en.wikipedia.org/wiki/DOS_API
  18. Bit banging
    https://en.wikipedia.org/wi­ki/Bit_banging
  19. IBM Basic assembly language and successors (Wikipedia)
    https://en.wikipedia.org/wi­ki/IBM_Basic_assembly_lan­guage_and_successors
  20. X86 Assembly/Bootloaders
    https://en.wikibooks.org/wi­ki/X86_Assembly/Bootloaders
  21. Počátky grafiky na PC: grafické karty CGA a Hercules
    https://www.root.cz/clanky/pocatky-grafiky-na-pc-graficke-karty-cga-a-hercules/
  22. 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/
  23. Karta EGA: první použitelná barevná grafika na PC
    https://www.root.cz/clanky/karta-ega-prvni-pouzitelna-barevna-grafika-na-pc/
  24. RGB Classic Games
    https://www.classicdosgames.com/
  25. Turbo Assembler (Wikipedia)
    https://en.wikipedia.org/wi­ki/Turbo_Assembler
  26. Microsoft Macro Assembler
    https://en.wikipedia.org/wi­ki/Microsoft_Macro_Assembler
  27. IBM Personal Computer (Wikipedia)
    https://en.wikipedia.org/wi­ki/IBM_Personal_Computer
  28. Intel 8251
    https://en.wikipedia.org/wi­ki/Intel_8251
  29. Intel 8253
    https://en.wikipedia.org/wi­ki/Intel_8253
  30. Intel 8255
    https://en.wikipedia.org/wi­ki/Intel_8255
  31. Intel 8257
    https://en.wikipedia.org/wi­ki/Intel_8257
  32. Intel 8259
    https://en.wikipedia.org/wi­ki/Intel_8259
  33. Support/peripheral/other chips – 6800 family
    http://www.cpu-world.com/Support/6800.html
  34. Motorola 6845
    http://en.wikipedia.org/wi­ki/Motorola_6845
  35. The 6845 Cathode Ray Tube Controller (CRTC)
    http://www.tinyvga.com/6845
  36. CRTC operation
    http://www.6502.org/users/an­dre/hwinfo/crtc/crtc.html
  37. 6845 – Motorola CRT Controller
    https://stanislavs.org/hel­ppc/6845.html
  38. The 6845 Cathode Ray Tube Controller (CRTC)
    http://www.tinyvga.com/6845
  39. Motorola 6845 and bitwise graphics
    https://retrocomputing.stac­kexchange.com/questions/10996/mo­torola-6845-and-bitwise-graphics
  40. IBM Monochrome Display Adapter
    http://en.wikipedia.org/wi­ki/Monochrome_Display_Adap­ter
  41. Color Graphics Adapter
    http://en.wikipedia.org/wi­ki/Color_Graphics_Adapter
  42. Color Graphics Adapter and the Brown color in IBM 5153 Color Display
    https://www.aceinnova.com/en/e­lectronics/cga-and-the-brown-color-in-ibm-5153-color-display/
  43. The Modern Retrocomputer: An Arduino Driven 6845 CRT Controller
    https://hackaday.com/2017/05/14/the-modern-retrocomputer-an-arduino-driven-6845-crt-controller/
  44. flat assembler: Assembly language resources
    https://flatassembler.net/
  45. FASM na Wikipedii
    https://en.wikipedia.org/wiki/FASM
  46. Fresh IDE FASM inside
    https://fresh.flatassembler.net/
  47. MS-DOS Version 4.0 Programmer's Reference
    https://www.pcjs.org/docu­ments/books/mspl13/msdos/dos­ref40/
  48. INT 21 – DOS Function Dispatcher (DOS)
    https://www.stanislavs.or­g/helppc/int21.html
  49. DOS API (Wikipedia)
    https://en.wikipedia.org/wiki/DOS_API
  50. IBM Basic assembly language and successors (Wikipedia)
    https://en.wikipedia.org/wi­ki/IBM_Basic_assembly_lan­guage_and_successors
  51. X86 Assembly/Arithmetic
    https://en.wikibooks.org/wi­ki/X86_Assembly/Arithmetic
  52. Art of Assembly – Arithmetic Instructions
    http://oopweb.com/Assembly/Do­cuments/ArtOfAssembly/Volu­me/Chapter6/CH06–2.html
  53. ASM Flags
    http://www.cavestory.org/gu­ides/csasm/guide/asm_flag­s.html
  54. Status Register
    https://en.wikipedia.org/wi­ki/Status_register
  55. Linux assemblers: A comparison of GAS and NASM
    http://www.ibm.com/develo­perworks/library/l-gas-nasm/index.html
  56. Programovani v assembleru na OS Linux
    http://www.cs.vsb.cz/gryga­rek/asm/asmlinux.html
  57. Is it worthwhile to learn x86 assembly language today?
    https://www.quora.com/Is-it-worthwhile-to-learn-x86-assembly-language-today?share=1
  58. Why Learn Assembly Language?
    http://www.codeproject.com/Ar­ticles/89460/Why-Learn-Assembly-Language
  59. Is Assembly still relevant?
    http://programmers.stackex­change.com/questions/95836/is-assembly-still-relevant
  60. Why Learning Assembly Language Is Still a Good Idea
    http://www.onlamp.com/pub/a/on­lamp/2004/05/06/writegreat­code.html
  61. Assembly language today
    http://beust.com/weblog/2004/06/23/as­sembly-language-today/
  62. Assembler: Význam assembleru dnes
    http://www.builder.cz/rubri­ky/assembler/vyznam-assembleru-dnes-155960cz
  63. Programming from the Ground Up Book – Summary
    http://savannah.nongnu.or­g/projects/pgubook/
  64. DOSBox
    https://www.dosbox.com/
  65. The C Programming Language
    https://en.wikipedia.org/wi­ki/The_C_Programming_Langu­age

Byl pro vás článek přínosný?

Autor článku

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