Obsah
1. Vývoj zvukových karet pro platformu IBM PC po vydání karty AdLib
3. Modely zvukových karet Sound Blaster určené pro sběrnici ISA
5. Sound Blaster 1.0, 1.5 a 2.0
6. Sound Blaster Pro a Sound Blaster 16
10. Vlastnosti D/A a A/D převodníků jednotlivých variant Sound Blasterů
11. Podpora OPL2 nebo OPL3 v jednotlivých variantách Sound Blasterů
12. Zvukové karty kompatibilní se Sound Blastery
13. Další zvukové karty využívající čipy pro FM syntézu
14. Pro Audio Spectrum 16 (PAS)
16. Sound Bird – emulace OPL3 zvukovým procesorem
19. Repositář s demonstračními příklady
1. Vývoj zvukových karet pro platformu IBM PC po vydání karty AdLib
Na předchozí tři články o tvorbě zvuků a hudby pro platformu PC [1], [2], [3] dnes navážeme. Prozatím jsme si popsali a na několika programech psaných v assembleru otestovali základní možnosti čipu OPL2, jenž byl použit ve zvukové kartě AdLib.
Obrázek 1: Původní zvuková karta AdLib s čipem OPL2.
Ovšem zvuk byl na kartě Adlib generován pouze pomocí předminule a minule popsaného čipu Yamaha YM 3812 (OPL2), který je určen převážně pro relativně snadnou tvorbu vícehlasé hudby, nikoli vzorkovaných (samplovaných) zvuků, například řeči či (neharmonických) šumů a zvuků ve hrách (hudba pro hru Duna 2 je sice skvělá, ale bez samplovaných hlášení typu „Warning – Harkonnen unit approaching… … Harkonnen unit destroyed… … Your mission is completed“ by hra ztratila něco ze svého dodnes nepřekonaného kouzla). Tento nedostatek FM syntézy si uvědomil i Sim Wong Hoo ze Singapuru, který založil firmu Creative Technology. Mezi první produkty této firmy patřily zvukové karty Game Blaster a především Sound Blaster použitelné v prakticky všech typech osobních počítačů kompatibilních s IBM PC.
Obrázek 2: Hra Duna 2 využívala pro přehrávání hudby čip OPL2/OPL3, ostatní zvuky ve hře (hlášení, střelba, výbuchy atd.) byly samplované a vyžadovaly tedy zvukovou kartu s D/A převodníkem.
2. Sound Blaster
„Sim had a clear vision of digitized sound, to enable the PC to produce sound effect and speech“
– Tom Rettig, Broderbund
Právě Sound Blaster, jehož první verze byla na trh dodána již v roce 1989, se stal (nejen mezi hráči) velmi populární a to hned ze tří příčin. Prvním důvodem bylo, že Sound Blaster obsahoval digitálně-analogový i analogově digitální převodník, což umožňovalo zvuky přehrávat i nahrávat; na rozdíl od Covoxu a od něj odvozených řešení. Dále tato zvuková karta obsahovala výše zmíněný čip Yamaha YM 3812 (OPL2) zajišťující takřka dokonalou kompatibilitu s AdLibem, k čemuž se ještě vrátíme v části věnované programování. A nakonec nesmíme zapomenout, na to, že na kartě byl přítomen i gameport (kterým se taktéž budeme později zabývat z pohledu programátora).
Obrázek 3: Zvuková karta Sound Blaster 2.0. Napravo jsou vidět vstupní a výstupní konektory určené pro audio signál, ovladač hlasitosti a taktéž gameport (nejširší konektor). Označení čipu OPL2 je zvýrazněno.
Tento „multimediální“ komplet byl zpočátku dostupný za cenu 299 dolarů, posléze pouze za 70 dolarů (k tomu je nutné dodat, že v té době pouze samostatný gameport umístěný na zvláštní kartě stál 50 dolarů). Nelze se tedy divit, že už v prvním roce se prodalo neuvěřitelné množství Sound Blasterů – celkem 100 000 karet (jednalo se dokonce o nejprodávanější rozšiřující kartu pro IBM PC), i když pro samotnou samplovanou hudbu zpočátku neexistovaly prakticky použitelné aplikace ani hry – Sound Blaster tedy bylo zpočátku možné použít jako náhradu za AdLib.
Obrázek 4: Prince of Persia – jedna z prvních her podporujících rodící se de-facto standard Sound Blaster.
Sim Wong Hoo věděl, že úspěch či neúspěch Sound Blasteru bude ve velké míře záviset na tom, zda pro něj budou připraveny vhodné aplikace, pochopitelně především hry. Firma Creative Technology tedy začala spolupracovat přímo s výrobci her, které (alespoň zpočátku) aktivně podporovala. Z této spolupráce nakonec profitovaly obě strany – Creative Technology prodejem zvukových karet (pro které díky hrám již existoval vhodný software), producenti her pak konkurenční výhodou v podobě samplovaného zvuku. Mezi první hry podporující Sound Blaster patřil slavný Prince of Persia a Where in the World is Carmen Sandiego?. Traduje se, že Sim Wong Hoo umně využíval rozdílu v časových pásmech USA a Singapuru, takže připomínky programátorů her byly (z jejich pohledu) již druhý den ráno vyřešeny.
Obrázek 5: Golden Axe, který přehrával jak hudbu (OPL), tak i samplované zvuky.
3. Modely zvukových karet Sound Blaster určené pro sběrnici ISA
Zvukové karty SoundBlaster se postupně vyvíjely a vylepšovaly: zvyšovala se nejvyšší podporovaná samplovací frekvence, přecházelo se od osmibitových samplů k samplům 16bitovým, začal být podporován stereo zvuk, postupně se objevilo i rozhraní IDE pro připojení jednotky CD-ROM a taktéž zvukového výstupu z CD-ROM. Seznam všech oficiálních modelů zvukových karet Sound Blaster určených pro sběrnici PC BUS či ISA, je uveden v následující tabulce. K této tabulce je ovšem nutné dodat, že některé dále vypsané zvukové karty byly prodávány v různých baleních či OEM verzích, ovšem jejich základní označení by mělo být neměnné:
Označení zvukové karty |
---|
SB 1.0 |
SB 1.5 |
SB 2.0 |
SB MCV (MCA) |
SB Pro |
SB Pro 2 |
SB Pro Value Edition |
SB Pro MCV (MCA) |
SB 16 |
SB 16 Basic Edition |
SB 16 Value Edition |
SB 16 ASP |
SB 16 MultiCD |
SB 16 MultiCD ASP |
SB 16 SCSI-2 |
SB 16 SCSI-2 ASP |
SB AWE32 |
SB AWE32 Value Edition |
SB AWE64 |
SB AWE64 Gold |
Obrázek 6: Slavná (a pro mnohé cenově nedostupná) zvuková karta SB AWE32 s osazenými paměťmi pro uložení samplů. Šťastným majitelem této karty je Vít Kavan, kterému tímto děkuji za poskytnutí fotek.
4. Game Blaster
První zvukovou kartou nabízenou již v roce 1988 firmou Creative Technology byl ve skutečnosti nikoli Sound Blaster, ale Game Blaster, původně označovaný jako Creative Music System (C/MS). Tato karta obsahovala dva čipy Philips SAA 1099. Jednalo se o čipy s proprietární technologií pro syntézu hudby a řeči, která však, i přes prvotní nadšení, nikdy nebyla příliš úspěšná, což se později projevilo tak, že tyto čipy již nebyly v novějších Sound Blasterech přítomny.
Obrázek 7: Game Blaster se i přes svoji nižší cenu nikdy nestal tak úspěšný jako Sound Blaster.
5. Sound Blaster 1.0, 1.5 a 2.0
Mnohem důležitější je karta Sound Blaster 1.0. Tato zvuková karta obsahovala, jak jsme si již ostatně řekli v předchozích kapitolách, čip Yamaha YM 3812, který zajišťoval devítihlasou (melodické kanály), popř. jedenáctihlasou (melodické a perkusní kanály) zvukovou syntézu (již relativně dobře známe). Dále byl na kartě přítomný čip, jenž byl označovaný akronymem DSP, což však v tomto případě neznamená Digital Signal Processor ale Digital Sound Processor. Ve skutečnosti se jednalo o osmibitový mikrořadič z rodiny populárních mikrořadičů Intel MCS-51 (Intel 8051) s pevně naprogramovanými funkcemi (je docela škoda, že nebylo možné tento řadič přeprogramovat, nebyl by například větší problém přidat podporu pro vícehlasé samply apod.).
Na tento čip byl napojený osmibitový digitálně–analogový převodník (D/A) a taktéž osmibitový analogově–digitální převodník (A/D); přičemž první převodník sloužil pro přehrávání samplovaných zvuků (čtených z operační paměti počítače, většinou pomocí DMA, tedy přímého přístupu do paměti) a druhý převodník naopak sloužil pro sampling externího zvukového signálu s jeho ukládáním do operační paměti. Mezní samplovací frekvence D/A i A/D jsou uvedeny v navazujícím textu. Čip DSP taktéž umožňoval kompresi a dekompresi samplovaného zvuku pomocí ADPCM, i když algoritmus komprese neodpovídal zcela přesně standardu CCITT.
Další verze Sound Blasteru, která byla veřejnosti představena v roce 1990, nesla číslo 1.5. V mnoha ohledech se vlastně jednalo kartu totožnou se Sound Blasterem 1.0, ovšem čip C/MS již nebyl přítomen přímo na kartě, ale bylo ho v případě zájmu možné dokoupit a vložit do připravené patice (což jsem ovšem nikdy v reálu neviděl). Vlastnosti D/A převodníku i A/D převodníku byly shodné se Sound Blasteruem 1.0, stejně jako čip OPL2, takže naprostou většinu aplikací nebylo nutné pro tuto verzi upravovat (na druhou stranu ani posluchači se nedočkali vyšší kvality zvuků).
První „slyšitelné“ vylepšení bylo patrné až u Sound Blasteru 2.0, ve kterém se zvýšila maximální samplovací frekvence na dvojnásobek oproti verzi 1.0 a 1.5. Taktéž se v této verzi objevila podpora pro automaticky inicializované DMA (přímý přístup do paměti), což značně ulehčilo práci všem programátorům přehrávacích rutin (ukážeme si v praxi). Při použití DMA se pouze do řídicích registrů nastavila samplovací frekvence, délka navzorkovaného zvuku a umístění vzorků v operační paměti (počáteční adresa). O vlastní načítání samplů z operační paměti se postarala samotná karta (pomocí DMA) a po dokončení přehrávání se vygenerovalo přerušení, v jehož obsluze se mohl buffer naplnit novými daty.
Aby se zabránilo slyšitelnému lupání v době tohoto přerušení (kdy bylo zapotřebí připravit nová data), rozděloval se celý buffer se samplovanými zvuky na dvě části, přičemž se pro přehrávání nastavila pouze poloviční délka bufferu (jeho první či druhá část) a přerušovací rutina pouze přenastavila počáteční adresu přehrávání – to znamená, že programátor měl více času na přípravu dalších zvukových dat (toto chování vlastně svým principem poměrně dobře odpovídá double bufferingu používanému například na grafických kartách). Starší verze Sound Blasterů bylo možné rozšířit o automaticky inicializované DMA výměnou DSP čipu V1.0 na V2.0 (DSP čip byl umístěn v patici, takže výměna čipů byla jednoduchá).
6. Sound Blaster Pro a Sound Blaster 16
Sound Blaster Pro, který byl uveden na trh v roce 1991, nabídl programátorům i uživatelům oproti předchozím modelům několik dalších rozšíření. Zejména se jednalo o zvýšení (zdvojnásobení) maximální samplovací frekvence a podporu stereo zvuku, tj. dvou na sobě nezávislých zvukových kanálů (nebylo však umožněno provádět panning, tj. plynulý přesun zvuku z jednoho kanálu mezi pravým a levým reproduktorem). Navíc bylo možné pomocí jednoduchého mixéru měnit hlasitost jednotlivých zdrojů zvuku a povolit či zakázat zabudované filtry – horní a dolní propust. Jak D/A převodník, tak i A/D převodník však zůstaly osmibitové, tj. dynamický rozsah zvuku dosahoval 48 dB.
První verze Sound Blasteru Pro (1.0) používala pro FM syntézu dvojici čipů Yamaha YM 3812, přičemž každý čip byl zapojen do jednoho zvukového kanálu. Pokud byl požadovaný monofonní výstup (například z důvodu zpětné kompatibility), musely se buď oba čipy programovat se stejnými hodnotami řídicích registrů, nebo bylo možné použít adresu společnou pro oba čipy (adresní logika na kartě sama zařídila, že se hodnoty registrů zapsaly na oba čipy současně). V novější verzi Sound Blasteru Pro (2.0) se místo dvojice čipů YM 3812 používal čip Yamaha YMF 262 (OPL 3), který již podporoval stereo výstup a opět bylo možné oba zvukové kanály ovládat buď samostatně nebo využít adresu pro zpětnou kompatibilitu s AdLibem (jedná se o I/O adresu 0×388 namísto 0×220 či 0×240; opět si ukážeme v praktických příkladech).
Taktéž byl rozšířen port určený pro připojení MIDI zařízení, který umožňoval oboustrannou plněduplexní komunikaci. Na zvukové kartě Sound Blaster Pro byl většinou umístěn i konektor pro připojení mechanik CD-ROM. Podle varianty karty se buď jednalo o konektor využívající proprietární protokol (Mitsumi, Panasonic, Sony atd.), později pak i o karty s plnohodnotným rozhraním IDE (ovšem bez DMA) – tím bylo umožněno připojení CD-ROM i do počítačů vybavených pouze jedním IDE kanálem, který byl plně obsazený dalšími zařízeními, například dvojicí pevných disků či pevným diskem a jednotkou ZIP.
Obrázek 8: Zvuková karta Sound Blaster Pro 2.0
7. Konkurence Sound Blasterů
Po uvedení zvukové karty Sound Blaster Pro začal její výrobce firma Creative Technology do jisté míry ztrácet svoje výsadní postavení na trhu se zvukovými kartami, a to především z toho důvodu, že nenabízela žádnou kartu se šestnáctibitovými D/A a A/D převodníky, která by byla využitelná i v (polo)profesionální sféře. Tam totiž měly své místo karty Turtle Beach. Z tohoto důvodu byl v roce 1992 uveden na trh Sound Blaster 16, který ve své podstatě završil celou vývojovou řadu postavenou na FM syntéze a D/A+A/D převodníku (další karty Sound Blaster se totiž od FM syntézy již odklonily ve prospěch wavetable syntézy, což odpovídalo rozšířeným možnostem hardware).
Z uživatelského pohledu byla největší novinkou, kterou Sound Blaster 16 přinesl, právě podpora pro přehrávání a nahrávání šestnáctibitových samplů, čímž se dynamický rozsah zvuku zvýšil ze 48 dB na 96 dB, tj. dosahoval kvality CD. Pro FM syntézu byl použitý stejný čip, jako tomu bylo u Sound Blasteru Pro 2.0, tj. Yamaha YMF 262. Na zvukovou kartu však bylo možné připojit i modul pro wavetable syntézu (Wave Blaster), který byl řízen MIDI příkazy – každá aplikace využívající MIDI tedy mohla přehrávat hudbu pomocí Wave Blasteru bez nutnosti její úpravy. Podobně jako dřívější Sound Blaster Pro, i Sound Blaster 16 obsahoval konektor IDE pro připojení mechanik CD-ROM.
Obrázek 9: Zvuková karta Sound Blaster 16
8. Sound Blaster 32 a AWE 32
Významné rozšíření funkčnosti Sound Blasterů přinesla verze Sound Blaster AWE32 (Advanced Wave Effects), která byla předvedena v roce 1994. Tuto dnes již klasickou zvukovou kartu „zlaté éry DOSu“ bylo velmi snadné poznat, protože se jednalo o ISA kartu plné délky, která mnohdy přesahovala i délku základní desky a její konec byl držen až v zásuvných ližinách na přední straně počítačové skříně (někdy byl problém kartu vůbec do základní desky zasunout kvůli dalším součástkám na desce, které překážely; ovšem rekord drží jedná karta pro digitalizaci videa s hardwarovou implementaci MPEG-1, která zabrala dva sloty ISA plné délky). Důležitým rozšířením Sound Blasteru 32 byla podpora pro wavetable syntézu založená na čipu EMU8000, efektovém procesoru EMU8011 (s vlastní ROM o kapacitě 1MB) a paměti typu DRAM, do které se ukládaly nasamplované zvuky hudebních nástrojů.
Kapacitu této paměti bylo možné rozšířit z původních 0,5 MB až na 28 MB pomocí v té době zcela běžných „krátkých“ třicetipinových paměťových modulů SIMM. Pro ilustraci: v době uvedení AWE32 na trh v našich zemích platil vztah: 1MB = 1000 Kč. Čipy EMU8000 a EMU8011 dokázaly emulovat MIDI zařízení bez výraznějšího zatížení vlastního počítače – o dekódování MIDI, převzorkování a mixování se postarala přímo zvuková karta.
Sound Blaster 32 je levnější variantou Sound Blasteru AWE 32. Aby bylo možné cenu této karty snížit, nebyla přímo na kartě nainstalována žádná paměť pro samply – wavetable syntéza tedy byla možná až po dokoupení paměťových modulů SIMM. Taktéž vlastní zvukový čip (zde Vibra) byl jednodušší, než v případě AWE 32 – například nebylo možné nastavovat zesílení či úrovně výšek a hloubek. V ostatních ohledech nebyl mezi Sound Blasterem 32 a AWE 32 žádný významnější rozdíl.
9. Sound Blaster AWE 64
Posledním modelem, kterým se v dnešním článku budeme zabývat, je zvuková karta nazvaná Sound Blaster AWE 64, který celou sérii zvukových karet firmy Creative Technology určených pro sběrnici ISA uzavírá. Tato karta, která začala být prodávána na konci roku 1996, již měla pouze dvoutřetinovou délku oproti svému předchůdci AWE 32. Oproti AWE 32 se změnil typ podporovaných pamětí – místo relativně levných modulů SIMM se používaly paměti dodávané přímo firmou Creative, které byly (ostatně jako prakticky všechny proprietární paměťové moduly) dražší než SIMM.
Zlepšila se však kompatibilita se staršími modely Sound Blasterů a také se zvýšil odstup signálu od šumu. Tato zvuková karta byla dostupná ve třech variantách: AWE 64 Value Edition s 512 kB DRAM (samplované zvuky některých nástrojů se však do této kapacity nevešly), AWE 64 Standard Edition s 1 MB DRAM a konečně AWE 64 Gold s celými čtyřmi megabajty DRAM a separátními výstupy S/PDIF (právě kvůli této variantě karty AWE 64 mnozí lidé ještě dlouho po přestupu na sběrnici PCI sháněli základní desky s ISA sběrnicí – a kombinace PCI + ISA se skutečně nabízely a v oblasti průmyslových PC pravděpodobně ještě nabízí).
Obrázek 10: Zvuková karta Sound Blaster AWE 64 Gold je skutečně zlatá.
10. Vlastnosti D/A a A/D převodníků jednotlivých variant Sound Blasterů
V následujících čtyřech tabulkách jsou vypsány základní vlastnosti digitálně–analogových a analogově–digitálních převodníků použitých ve zvukových kartách Sound Blaster. Víme již, že starší typy těchto karet byly vybaveny pouze osmibitovými převodníky (či dokonce jen jedním převodníkem – mono), u dalších karet je patrné, že při stereo výstupu se maximální samplovací frekvence snižovala na polovinu oproti monofonímu výstupu, což patrně souvisí s omezeným výpočetním výkonem použitého DSP čipu.
U novějších modelů zvukových karet se maximální samplovací frekvence ustálila na hodnotě 45454 Hz, což je nepatrně více, než standardních 44100 Hz (mimochodem, tato hodnota je odvozena od maximální slyšitelné frekvence 20000 Hz vynásobené dvěma kvůli Nyquistovu vzorkovacímu teorému, k níž je přidáno 10% z důvodu přítomnosti rekonstrukčního filtru při D/A převodu; výsledek, tj. 44000 Hz je upraven na 44100 Hz tak, aby byl dělitelný padesáti a šedesáti, což souvisí se zpracováním zvuku v televizích – viz norma PAL s padesáti půlsnímky za sekundu a NTSC s šedesáti půlsnímky):
Norma | PAL | NTSC |
---|---|---|
řádků | 294 | 245 |
snímků/sec | 50 | 60 |
samplů/řádek | 3 | 3 |
výsledek | 44100 | 44100 |
Nicméně se vraťme ke slíbeným vlastnostem D/A a A/D převodníků:
Model | 8bitové D/A mono | 16bitové D/A mono |
---|---|---|
SB 1.x | 4000–22222 | × |
SB 2.x | 4000–45454 | × |
SB Pro | 4000–45454 | × |
SB 16 | 4000–45454 | 4000–45454 |
SB AWE 32 | 5000–45454 | 5000–45454 |
Model | 8bitové D/A stereo | 16bitové D/A stereo |
---|---|---|
SB 1.x | × | × |
SB 2.x | × | × |
SB Pro | 4000–22727 | × |
SB 16 | 4000–45454 | 4000–45454 |
SB AWE 32 | 5000–45454 | 5000–45454 |
Model | 8bitové A/D mono | 16bitové A/D mono |
---|---|---|
SB 1.x | 4000–11111 | × |
SB 2.x | 4000–15151 | × |
SB Pro | 4000–45454 | × |
SB 16 | 4000–45454 | 4000–45454 |
SB AWE 32 | 5000–45454 | 5000–45454 |
Model | 8bitové A/D stereo | 16bitové A/D stereo |
---|---|---|
SB 1.x | × | × |
SB 2.x | × | × |
SB Pro | 4000–22727 | × |
SB 16 | 4000–45454 | 4000–45454 |
SB AWE 32 | 5000–45454 | 5000–45454 |
11. Podpora OPL2 nebo OPL3 v jednotlivých variantách Sound Blasterů
Pro nás je v tuto chvíli důležité zjistit i další vlastnost, a to jaký čip či jaké čipy OPL jednotlivé verze zvukových karet Sound Blaster podporovaly:
Model | Typ OPL | Poznámka |
---|---|---|
SB 1.0 | OPL2 | mono výstup |
SB 1.5 | OPL2 | mono výstup |
SB 2.0 | OPL2 | mono výstup |
SB Pro | 2×OPL2 | každý čip pro jeden kanál |
SB Pro 2 | OPL3 | OPL3 podporuje stereo výstup |
SB 16 | OPL3 | OPL3 podporuje stereo výstup |
SB AWE 32 | OPL3 | OPL3 podporuje stereo výstup |
12. Zvukové karty kompatibilní se Sound Blastery
V další tabulce jsou vypsány některé (ve své době známé) zvukové karty, jež jsou z větší či menší části kompatibilní se zvukovými kartami Sound Blaster. V současnosti již není plná hardwarová kompatibilita vyžadována, jelikož je mezi aplikací a vlastní kartou mezivrstva ve formě ovladače a popř. i multimediální knihovny, ale v dobách DOSu všechny programy musely z důvodu co největší rychlosti ovládat přímo zvukovou kartu, tj. podpora pro ni musela být zabudována přímo do aplikace.
Označení karty | Kompatibilní s: |
---|---|
Midia Sound 50 (Magic Music) | kopie Adlib (zde jen pro úplnost) |
Midia Sound 200 (Magic Music) | kopie SB 2.0 |
Sound Galaxy BX II (Aztech) | kopie SB 2.0 |
Sound Galaxy NX II (Aztech) | kopie SB 2.0 s rozhraním pro CD-ROM |
Sound Galaxy NX Pro (Aztech) | kopie SB Pro |
Audio Spectrum 16 (Thunder Media) | kopie SB Pro |
Art Media Sound Card (Art Media) | kopie SB Pro |
Audio Blaster Junior (CPS) | kopie SB 2.0 |
Audio Blaster 2.5 (CPS) | kopie SB 2.0 s rozhraním pro CD-ROM |
Audio Blaster Pro (CPS) | kopie SB Pro |
13. Další zvukové karty využívající čipy pro FM syntézu
Kromě původního AdLibu i většiny „klasických“ SoundBlasterů byla FM syntéza realizovaná v čipech OPL2 a OPL3 použita i v některých dalších zvukových kartách, z nichž některé budou zmíněny v navazujících kapitolách. Určitou výjimkou v tomto seznamu je Sound Bird, která původní čipy pro FM syntézu více či méně dokonale emuluje, ale přímo je neobsahuje.
14. Pro Audio Spectrum 16 (PAS)
Další zvukovou kartou, kterou si v dnešním článku představíme, je karta firmy Media Vision nazvaná Pro Audio Spectrum 16, zkráceně PAS. Tato poměrně úspěšná a často používaná zvuková karta, která byla dodána na trh v roce 1992, konkurovala Sound Blasteru Pro (dodáván od roku 1991) i Sound Blasteru 16 (na trhu se objevil takřka současně s Pro Audio Spectrum 16), je vybavena šestnáctibitovým digitálně-analogovým převodníkem, programovatelným mixerem, čipem pro syntézu hudby Yamaha YMF 262 (OPL 3) a MIDI rozhraním.
PAS je taktéž (alespoň v některých variantách) poněkud překvapivě vybavena i SCSI rozhraním, které bylo možné použít například pro připojení některých mechanik CD-ROM – v počátcích CD-ROM na osobních počítačích se totiž používalo buď standardní interní rozhraní SCSI nebo proprietární rozhraní samotných výrobců mechanik; ATAPI a IDE se rozšířilo až po několika letech. Na rozdíl od Sound Blasterů však nebylo možné ke kartě Pro Audio Spectrum připojit rozšiřující desku pro wavetable syntézu (Sound Blastery obsahovaly, jak jsme si již řekli v předchozích kapitolách, konektor pro připojení tohoto rozšíření).
Základní technické údaje této karty jsou vypsány v následující tabulce:
Název zvukové karty: | Pro Audio Spectrum |
---|---|
Bitová hloubka vzorků: | 8 či 16 bitů |
Rozsah vzorkovací frekvence: | 4–44 kHz |
Zvukové kanály: | 2 (stereo) |
Podpora ADPCM: | ano |
FM syntéza: | Yamaha YMF 262 (OPL3) |
Další vybavení: | mixer, MIDI, SCSI rozhraní (některé verze) |
Kompatibilita se SB: | ano, osmibitové vzorky |
Obrázek 11: Zvuková karta Media Vision Pro Audio Spectrum 16.
15. AdLib Gold 1000
Ve výčtu zvukových karet nekompatibilních se Sound Blastery nesmíme zapomenout ani na kartu AdLib Gold 1000 určenou pro osmibitovou sběrnici PC BUS (tato sběrnice je dopředně kompatibilní se šestnáctibitovou sběrnicí ISA, tj. zvukovou kartu bylo možné použít i v „dlouhém“ ISA konektoru). Firma Adlib z Quebecu, kterou již v roce 1988 založil Martin Prevel, se uvedením této karty na trh snažila navázat na popularitu původní legendární zvukové karty AdLib, jejíž parametry jsme si popsali v předchozích částech tohoto seriálu.
Zatímco se však původní AdLib prodával v době, kdy k němu prakticky neexistovala žádná srovnatelná konkurence, bylo tomu v případě jejího následovníka AdLib Gold 1000 zcela naopak, protože se na trhu vyskytovaly jak všeobecně známé a široce podporované Sound Blastery (především verze Sound Blaster Pro a o rok později Sound Blaster 16) a jejich více či méně kompatibilní klony, tak i relativně úspěšné zvukové karty Pro Audio Spectrum, které jsme si popsali v předchozí kapitole.
Obrázek 12: Zvuková karta AdLib Gold 1000 (taktéž ve zlaté variantě). Povšimněte si, že většina součástek používá technologii SMD, což je oproti původnímu AdLibu, který vypadal tak, jakoby ho výrobce ručně spájel v garáži, veliký pokrok. Čip OPL3 a.k.a. Yamaha YMF 262 je umístěn vlevo těsně pod krystalem.
I když byla zvuková karta AdLib Gold 1000 po technické stránce se Sound Blasterem Pro či Pro Audio Spectrem zhruba srovnatelná (digitálně-analogový a analogově-digitální převodník s maximální vzorkovací frekvencí 44 kHz a poměrně nestandardní dvanáctibitovou hloubkou samplů, což odpovídá dynamickému rozsahu 72 dB, plná podpora pro OPL3 atd.), nenabízela plnou kompatibilitu se svou konkurencí a i její poměrně vysoká cena (v porovnání s vybavením) zapříčinila, že se toužebně očekávaný obchodní úspěch nedostavil, karta z tohoto důvodu nebyla zpočátku příliš podporovaná ani ve hrách a firma Adlib poměrně záhy – již v roce 1992 – zanikla.
Přívlastek „Gold“ tato karta dostala díky zlatavému plošnému spoji (traduje se, že se skutečně jedná o rozprášené zlato); tuto techniku později použili i další výrobci (naproti tomu například zvukové karty GUS používaly pro ně typický červený podklad plošného spoje). V následující tabulce jsou vypsány základní technické parametry AdLib Gold 1000, která je dnes žádaným sběratelským kouskem, už jen kvůli svému osudu:
Název zvukové karty: | AdLib Gold 1000 |
---|---|
Bitová hloubka vzorků D/A převodníku: | 12 bitů |
Bitová hloubka vzorků A/D převodníku: | 12 bitů |
Rozsah vzorkovací frekvence: | 4–44 kHz |
Podpora ADPCM: | ano |
FM syntéza: | Yamaha YMF 262 (OPL3) |
Použité čipy: | GOLD CTRL, Yamaha YMZ263-F, 2×Yamaha YAC512 |
Možnosti rozšíření: | MIDI box (za příplatek) |
16. Sound Bird – emulace OPL3 zvukovým procesorem
Taktéž tvůrci (polo)profesionální zvukové karty Sound Bird vsadili na wave table syntézu namísto dříve populární syntézy založené na hudebních čipech OPL2 a OPL3. Tato zvuková karta firmy X Technology podporuje 32hlasou polyfonii, ovšem vzorky hudebních nástrojů nemusí být uloženy pouze v nemodifikovatelné paměti ROM, ale i v DRAM, kterou bylo možné na kartu jednoduše přidat – obsahovala totiž konektory pro paměťové moduly SIMM, které se v té době používaly i ve funkci operační paměti počítačů PC.
Přehrávané tóny bylo možné ovlivnit pomocí obálky (envelope) a zvukových filtrů. Zajímavé je, že celá zvuková syntéza není řízena specializovaným čipem, ale mikroprocesorem Motorola 68000 taktovaným na 8 MHz, což již nabízí spoustu možností, neboť výpočetní výkon tohoto mikroprocesoru je dostatečný i pro tvorbu složitějších filtrů (srovnejme například s prvními Sound Blastery, které byly vybaveny osmibitovým mikrořadičem Intel 8051). Karta sice přímo neobsahovala čip OPL2 či OPL3, ale vestavěný mikroprocesor dokázal poměrně úspěšně emulovat čip Yamaha YM 3812, tj. OPL2.
Následuje tabulka se základními parametry těchto zvukových karet:
Název zvukové karty: | Sound Bird |
---|---|
Bitová hloubka vzorků: | 8 či 16 bitů |
Rozsah vzorkovací frekvence: | 11025, 22050, 44100 Hz |
Zvukové kanály: | 1× stereo či 2× mono |
Podpora ADPCM: | ano |
Podpora DMA: | ano |
Polyfonie: | 32 hlasů |
FM syntéza: | emulace Yamaha 3812 |
Použité čipy: | Motorola 68000 |
Další vybavení: | 8MB ROM/RAM (SIMM) s uloženými vzorky nástrojů |
17. Od OPL2 k OPL3
Z předchozího textu je patrné, že čipy OPL2 a OPL3 se využívaly poměrně dlouho. Způsob jejich použití je možné shrnout takto:
- Jediný čip OPL2 v první a druhé generaci zvukových karet
- Dva čipy OPL2 pro realizaci určité formy stereo výstupu (bez panningu)
- Čip OPL3, který opět do určité míry umožňuje stereo výstup
- (Speciality typu dvojice OPL3 se čtyřmi výstupními kanály atd.)
Pojďme si nyní říci základní informace o čipu OPL3, kterému se budeme blíže věnovat v navazujících článcích.
Hudební čip Yamaha YMF 262, známý též pod označením OPL 3, představuje další generaci zvukových obvodů založených na frekvenční (fázové) modulaci. Oproti výše popsanému čipu YM 3812 došlo k několika podstatným úpravám. Především se zvýšil celkový počet operátorů z osmnácti na 36, do jednoho kanálu je možné zapojit až čtyři operátory, místo čtyř typů signálů na vstupech operátorů je k dispozici osm typů (včetně obdélníkového signálu a logaritmicky zkresleného signálu pilového) a na výstup čipu je možné zapojit dvojici D/A převodníků (viz další obrázek) a vytvářet tak stereo hudbu – ve skutečnosti však není možné plynule nastavovat přechod mezi levým a pravým reproduktorem (panning), lze pouze zvolit, zda je výstup z nějakého hudebního kanálu přehráván na levém, pravém či obou reproduktorech.
Obrázek 13: Připojení čipu OPL 3 na dvojici D/A převodníků.
18. Programování OPL3
Vzhledem ke zvýšenému počtu operátorů se ovšem zvýšil i počet interních registrů. Z tohoto důvodu jsou místo jedné registrové sady použity sady dvě, což znamená, že místo dvou adres mapovaných do I/O prostoru (index a data) jsou použity adresy čtyři. Teoreticky je tedy možné nastavit 512 interních registrů OPL3, ve skutečnosti je jich ovšem menší množství.
Současně byla do značné míry zachována zpětná kompatibilita s OPL 2, což je důležité, protože zvukové karty založené na OPL 3 mohly být stále kompatibilní s původním Adlibem. Podrobný popis možností OPL 3 najdete v dokumentu Programmer's Guide to Yamaha YMF 262/OPL3 FM Music Synthesizer, který napsal spolužák z VUT Vladimír Arnošt, kterého tímto zdravím :-)
Obrázek 14: Tvary vln, které lze použít na čipu OPL 3. První čtyři průběhy jsou zpětně kompatibilní s OPL 2.
Zpětná kompatibilita zajištěná většinou zvukových karet znamená, že i OPL3 dokáže beze změny adres či registrů přehrávat například modulované zvuky založené na kombinaci dvou operátorů. Tj. i náš prozatím nejsložitější příklad (vypsaný níže) bude možné přehrát například na SoundBlasteru 16 (což jsem si právě ověřil), s monofonním výstupem (resp. výstupem totožným pro oba výstupní kanály). V praxi se navíc mohou snížit časové pauzy mezi zápisy do registrů OPL (k tomu se ještě taktéž vrátíme):
; Prehrani zakladniho tonu na kartach s cipem OPL2. ; Pojmenovani registru OPL2. ; Ovladani KEY ON mezernikem ; Frekvence modulatoru rizena klavesami 1 az 0 ; Ukonceni aplikace stiskem ESC ; ; ; preklad pomoci: ; nasm -f bin -o sound_modulation.com sound_modulation.asm ; ; nebo pouze: ; nasm -o sound_modulation.com sound_modulation.asm ;----------------------------------------------------------------------------- BITS 16 ; 16bitovy vystup pro DOS CPU 8086 ; specifikace pouziteho instrukcniho souboru ;----------------------------------------------------------------------------- ; registry karet s cipem OPL2 OPL_ADDRESS equ 0x388 OPL_DATA equ 0x389 ; ridici registry OPL2 OPL_TEST_LSI equ 0x01 OPL_TIMER_1 equ 0x02 OPL_TIMER_2 equ 0x03 OPL_TIMER_CTRL equ 0x04 OPL_KBSPLIT equ 0x08 OPL_AMP_VIBRATO_EG equ 0x20 OPL_LEVEL equ 0x40 OPL_ATTACK_DECAY equ 0x60 OPL_SUSTAIN_RELEASE equ 0x80 OPL_FREQUENCY_LOW equ 0xa0 OPL_KEY_ON equ 0xb0 OPL_AM_VIBRATO_RHYTHM equ 0xbd OPL_FEEDBACK equ 0xc0 OPL_WAVE_SELECT equ 0xe0 ; indexy kanalu CHANNEL_1 equ 0 CHANNEL_2 equ 1 CHANNEL_3 equ 2 CHANNEL_4 equ 3 CHANNEL_5 equ 4 CHANNEL_6 equ 5 CHANNEL_7 equ 6 CHANNEL_8 equ 7 CHANNEL_9 equ 8 ; offsety pro jednotlive operatory ; -------------------------------------------------- ; Channel 1 2 3 4 5 6 7 8 9 ; Operator 1 00 01 02 08 09 0A 10 11 12 ; Operator 2 03 04 05 0B 0C 0D 13 14 15 ; -------------------------------------------------- ; Channel 1 2 3 4 5 6 7 8 9 CHANNEL_1_OPERATOR_1 equ 0x00 CHANNEL_1_OPERATOR_2 equ 0x03 CHANNEL_2_OPERATOR_1 equ 0x01 CHANNEL_2_OPERATOR_2 equ 0x04 CHANNEL_3_OPERATOR_1 equ 0x02 CHANNEL_3_OPERATOR_2 equ 0x05 CHANNEL_4_OPERATOR_1 equ 0x08 CHANNEL_4_OPERATOR_2 equ 0x0b CHANNEL_5_OPERATOR_1 equ 0x09 CHANNEL_5_OPERATOR_2 equ 0x0c CHANNEL_6_OPERATOR_1 equ 0x0a CHANNEL_6_OPERATOR_2 equ 0x0d CHANNEL_7_OPERATOR_1 equ 0x10 CHANNEL_7_OPERATOR_2 equ 0x13 CHANNEL_8_OPERATOR_1 equ 0x11 CHANNEL_8_OPERATOR_2 equ 0x14 CHANNEL_9_OPERATOR_1 equ 0x12 CHANNEL_9_OPERATOR_2 equ 0x15 ; registry PPI PPI_PORT_A equ 0x60 PPI_PORT_B equ 0x61 ; kody klaves KEY_ESC equ 0x01 KEY_SPACE equ 0x39 KEY_RELEASE equ 0x80 KEY_1 equ 0x02 KEY_0 equ KEY_1 + 9 ;----------------------------------------------------------------------------- ; ukonceni procesu a navrat do DOSu %macro exit 0 ret %endmacro ; makro pro zapis do registru OPL2 %macro write_opl_register 2 mov al, %1 mov ah, %2 call perform_write_to_opl_register %endmacro ;----------------------------------------------------------------------------- org 0x100 ; zacatek kodu pro programy typu COM (vzdy se zacina na 256) start: push cs pop ds ; DS==CS mov si, tone1 ; zacatek tabulky call write_table_to_opl2 ; zapis obsahu tabulky do OPL2 in al, PPI_PORT_B ; port B s rizenim zarizeni or al, 0b1000000 ; nastaveni bitu cislo 7 na jednicku out PPI_PORT_B, al ; zapis zpet na port B .opak: in al, PPI_PORT_A ; cteni stisknute klavesy cmp al, KEY_SPACE ; test na stisk mezerniku jne .next_test_1 ; neni stisknut -> preskok write_opl_register CHANNEL_1 + OPL_KEY_ON, 0x32 ; povoleni KEY ON bitu jmp .opak .next_test_1: cmp al, KEY_SPACE + KEY_RELEASE ; test na pusteni mezerniku jne .next_test_2 ; neni pusten -> dalsi test write_opl_register CHANNEL_1 + OPL_KEY_ON, 0x12 ; zakaz KEY ON bitu jmp .opak .next_test_2: cmp al, KEY_1 ; test na numericke klavesy jb .next_test_3 ; hodnota "pod" kodem klavesy 1 cmp al, KEY_0 ja .next_test_3 ; hodnota "nad" kodem klavesy 0 mov bl, al ; makro prepisue AL -> nemuzeme ho primo pouzit write_opl_register CHANNEL_1_OPERATOR_1 + OPL_LEVEL, bl .next_test_3: cmp al, KEY_ESC ; test stisknute klavesy ESC jne .opak ; neni stisknuta? -> zkusme znovu exit write_table_to_opl2: lodsb ; nacist bajt z tabulky (cislo registru) or al, al ; test na nulu jnz .write_register ret ; dosahli jsme konce tabulky .write_register: mov ah, al lodsb ; nacist dalsi bajt z tabulky (hodnota registru) xchg al, ah ; podprogram vyzaduje opacne poradi AL, AH call perform_write_to_opl_register jmp write_table_to_opl2 ; muzeme prejit na dalsi registr tone1: ; tabulka s tonem pro prvni kanal db CHANNEL_1_OPERATOR_1 + OPL_AMP_VIBRATO_EG, 0x01 ; nastaveni modulatoru: nasobeni frekvence jednickou db CHANNEL_1_OPERATOR_1 + OPL_LEVEL, 0x00 ; uroven vystupu 40 dB db CHANNEL_1_OPERATOR_1 + OPL_ATTACK_DECAY, 0x41 ; modulator: pomaly nastup zvuku + pomale doznivani db CHANNEL_1_OPERATOR_1 + OPL_SUSTAIN_RELEASE, 0x7f ; urovne sustain a release pro modulator db CHANNEL_1_OPERATOR_1 + OPL_FREQUENCY_LOW, 0x41 ; frekvence zvuku (komorni A = 440 Hz) db CHANNEL_1_OPERATOR_2 + OPL_AMP_VIBRATO_EG, 0x01 ; nastaveni nosne: nasobeni frekvence jednickou db CHANNEL_1_OPERATOR_2 + OPL_LEVEL, 0x00 ; nastaveni urovne vystupu nosne na 47 dB db CHANNEL_1_OPERATOR_2 + OPL_ATTACK_DECAY, 0xa2 ; nosna: rychly nastup + pomale doznivani db CHANNEL_1_OPERATOR_2 + OPL_SUSTAIN_RELEASE, 0x77 ; urovne sustain a release pro nosnou db CHANNEL_1 + OPL_KEY_ON, 0x12 ; zapnuti/povoleni zvuku + nastaveni oktavy a vyssich bitu frekvence db 0, 0 ; zarazka perform_write_to_opl_register: ; zapis do vybraneho registru OPL2 ; AL - registr ; AH - hodnota mov dx, OPL_ADDRESS ; vyber registru pro modifikaci out dx, al ; cekani priblizne 3.3 mikrosekundy mov cl, 6 .delay1: in al, dx loop .delay1 mov al, ah ; zapis hodnoty do vybraneho registru mov dx, OPL_DATA out dx, al ; cekani priblizne 23 mikrosekund mov cl, 35 .delay2: in al, dx loop .delay2 ret
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 |
20. Odkazy na Internetu
- 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/ - INT 21 – DOS Function Dispatcher (DOS)
https://www.stanislavs.org/helppc/int21.html - 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 - 6845 – Motorola CRT Controller
https://stanislavs.org/helppc/6845.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/ - INT 21 – DOS Function Dispatcher (DOS)
https://www.stanislavs.org/helppc/int21.html - 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