„NO SYSTEM“ programování aneb jak si vše udělat sámRadim Ballner
Mnozí z vás jistě už tuší, o čem tento článek (resp. seriál) bude. Přesto bych
trochu vysvětlil o co jde, proč se tím budeme zabývat a co za informace zde
naleznete.
Na úvod bych chtěl ještě podotknout, že příklady budou psány v assembleru
(AsmOne nebo TrashmOne) a tudíž aspoň základní znalosti tohoto jazyka budou
nutností (nebudeme se zde zabývat objasňováním, co která instrukce dělá). Co je to?
Takže co to je to „NO SYSTEM“ programování? Jedná se o programování bez
použití systému, všechny věci si musíte udělat sami. To znamená, chcete-li
například zobrazit něco na obrazovce, tak nepoužijete grafickou knihovnu (popř.
intuition), ale naprogramujete přímo registry pro zobrazování (viz obrázek). Co v tomto seriálu naleznete?
V tomto čísle si povíme něco na úvod a objasníme si některé důležité pojmy
(vše zatím jen teoreticky). V dalších číslech se budeme zabývat Copperem. hracím
polem, Blitterem, Sprity, Interrupty a nakonec se podíváme nu to, jak se pracuje
s AGA čipy (ke každému tématu bude vždy zveřejněn nějaký program na Cover disku
v adresáři NO SYSTEM). Pokud budete mít nějaké dotazy či nejasnosti, pak se
nestyďte, s chutí napište do redakce, a já na nejčastější otázky odpovím v
článku (pokud budu odpověď znát). Zákaznické obvody
Mnozí z vás jistě už slyšeli o tom, že Amiga má v sobě zákaznické obvody
(angl. CUSTOM CHIP SET). Co to jsou ony zákaznické čipy? Jsou to integrované
obvody, které byly speciálně vyvinuty pro Amigu, a starají se o různé druhy
činnosti a tím ulehčují práci mikroprocesoru. Mezi jejich funkce např. patří
přehrávání samplů, zobrazování, práce s disketovými jednotkami, ovládání portů
pro joystick, sériové rozhraní... Jak se to všechno děje si teď stručně povíme.
Nejdříve se podívejme na paměť. Na Amigách se vyskytují dva druhy RAM paměti:
CHIP RAM a FAST RAM (na A500 to byla ještě navíc tzv. FAKE-FAST, která se
zastrkovala zespodu do počítače a většinou měla velikost 0.5 MB). Čím se od sebe
liší? CHIP RAM je základní paměť se kterou už počítač koupíte (na A1200 2MB, na
starých A500 to bylo 0.5 MB). Do této 24-bitové paměti mají přístup právě ony
zákaznické obvody a samozřejmě také mikroprocesor. A protože v této paměti má
mikroprocesor menší prioritu (např. aby nedocházelo k chybám, při zobrazování či
přehrávání samplů), tak zde pracuje pomaleji než ve FAST RAM (asi 2-3 krát).
Velikost této paměti je omezena typem zákaznických obvodů. Ve starých A500
dokázaly čipy adresovat pouze 0.5 MB, novější pak 1 MB (pokud jste tento typ
měli v A500, pak šlo celkem jednoduše předělat 0.5 FAKE-FAST na CHIP a tím mít 1
MB CHIP RAM). U AGA čipů se používá 2MB CHIP. Tato paměť je adresovaná od adresy
0 a tvoří celistvý úsek. Ve FAST RAM naopak nemůžou fungovat zákaznické obvody a
tudíž zde mikroprocesor nemusí čekat a může pracovat rychleji.
Bohužel do normálních A1200 se nedá tato paměť dát přímo, ale je potřeba
jakéhosi „interfejsu“ - např. na turbokartách je většinou vyhrazena patice pro
simm(y). Teď se dostáváme k tomu, proč zákaznické obvody ulehčují práci
mikroprocesoru. Je to tím, že skoro všechny operace zákaznických obvodů jsou
dělány pomocí DMA (zkratka z anglického Direct Memory Acces = přímý přístup do
paměti). Co to znamená? Jednoduše řečeno - pomocí mikroprocesoru řekneme
zákaznickým obvodům, co mají dělat a ony začnou pracovat a mikroprocesor můžeme
použít na něco jiného. V tom právě spočívá velká výhoda používání DMA -
mikroprocesor a zákaznické obvody pracují současně. Obecně pro používání DMA
platí tento postup:
1. zjištění neprobíhá-li na našem DMA kanálu přenos (pokud ano, měli bychom
počkat dokud neskoná)
2. nastavení ukazovátek pro DMA přenos
3. specifikace přenosu
4. povolení DMA
5. odstartování DMA
Na Amigách nemáme pouze jeden DMA kanál, ale hned několik - pro BIPLANY, COPPER,
4*AUDIO CHANNEL, BLITTER, SPRITES, DISK. Všechny tyto kanály mohou běžet
nezávisle, což např. znamená, že vidíme obraz k tomu nám hraje hudba a
kopírujeme data z diskety. Toto vše lze dělat zároveň a přitom mít mikroprocesor
volný pro sebe (berte to samozřejmě s rezervou, protože toto by platilo pouze v
tom případě, když byste si přehrávali sampl a z diskety byste četli
nerozkódované duta). Ještě malá poznámka k bodu 5. Často se setkáte s pojmem
STROBE registr. V podstatě je to obyčejný registr, ale pokud na něj přistoupíte
(čtení/zápis závisí na daném registru), tak odstartujete určitou dávku (např.
DMA přenos). Pokud se někomu DMA nelíbí může dělat většinu věcí pomocí
mikroprocesoru. Řízení DMA a zákaznických obvodů se děje pomocí registrů, které
začínají na adrese CUSTOM=$dff000. Co který registr znamená a jak ho použít si u
těch nejdůležitějších řekneme později.
Ke všem těmto vyjmenovaným oblastem se ještě vrátím v dalších číslech, kde si je
rozebereme podrobněji, popíšeme jejich činnost a ukážeme si, jak je použít v
praxi. Všechny dále uvedené informace se budou (pokud nebude uvedeno jinak)
týkat původních OCS čipů (ze staré dobré A500), poněvadž AGA čipy jsou pouze
vylepšené a rozšířené verze OCS. To znamená, že to co napíšete pro staré čipy
bude fungovat i na Amize s AGA sadou.
Tak to bychom zdárně zvládli úvod a příště se podíváme, jak zobrazit na
obrazovce nějaký obrázek. Toto je kratičké vysvětlení pojmů, se kterými jste se v tomto textu mohli
setkat, ale většinu si probereme v následujících dílech ještě podrobněji.
COPPER - je koprocesor, který může zapisovat pouze do oblasti CUSTOM a tím např.
obnovovat registry pro zobrazování. Má pouze tři instrukce: MOVE, SKIP, WAIT.
Popisem copperu (instrukce, použití) se budeme zabývat později.
AUDIO CHANNEL - Amiga má čtyři 8-mi bitové zvukové kanály, které jsou po
dvojicích vyvedeny i na zadní straně počítače. Lze dosáhnout přehrávací
frekvence až kvality CD.
BLIITER - je výkonná součástka, která umí pracovat z pravoúhlými oblastmi
paměti. To není nic jiného než obrázky. Umí kopírovat a při tom provádět logické
operace, kreslit čáry a vyplňovat oblasti. Díky němu patří (patřila) Amiga mezi
špičky v oblasti počítačových her, protože blitter umožnil pracovat poměrně
rychle s grafickými daty (dnes je to poněkud horší, poněvadž se používají
texturované vektory a tuto činnost blitter neumí. Navíc blitter nebyl
zrychlován, takže pracuje stejně rychle na A1200 i na A500, a proto také i s
turbo kartou trvá překreslení oken ve workbenchi stejně dlouho jako bez ní).
BITPLAN - neboli bitová plocha. Jejich počet určuje počet použitelných barev na
obrazovce (počet barev = 2^n, kde n je počet bitplánů). Bitplány musí být
uloženy v CHIP RAM a udávají vlastně, co je právě na obrazovce. Data jsou v nich
organizována následovně (viz. obr. - na 0. pozici v bitplánu 0 je nula (je to
vlastně 7. bit 0. bytu 0. bit, na 0. pozici 1. bitplanu je jednička atd. Podle
počtu bitplanu dostaneme binární číslo, které určuje barvu. Na našem obrázku to
je kombinace 101 tj. číslo 5, takže máme jeden bod barvy pět).
DISK DMA - kanál pro disketové jednotky (musíme nejdříve zvolit jakou). Tímto
tématem se budeme pravděpodobně zabývat až úplně na konci našeho seriálu a při
té příležitosti si řekneme něco o MFM kódování.
SPRITE - Sprites jsou malé grafické objekty, které se zobrazují ještě před
bitplany (např. myš je sprite) - samozřejmě lze nastavit prioritu, takže nemusí
být před bitplany. Šířka spritu je 16 bitů a výška neomezená. Těchto spritů je 8
a mají 4 barvy. Později si řekneme, jak udělat 16-ti barevný sprite a jak
zobrazit jeden sprite několikrát na obrazovce. Vytlačiť článok
Pozn.: články boli naskenované ako text a preto obsahujú aj zopár chýb. Taktiež neručíme za zdrojové kódy (Asm, C, Arexx, AmigaGuide, Html) a odkazy na web. Dúfame, že napriek tomu vám táto databáza dobre poslúži.
Žiadna časť nesmie byť reprodukovaná alebo inak šírená bez písomného povolenia vydavatela © ATLANTIDA Publishing
none
|