AMIGA REVIEW obsah časopisu online!
  Domov     Software     Hry     Obaly     Download  

„No system“ programování

Radim Ballner

V této již čtvrté části našeho seriálu si řekneme základní věci o přerušeních a jak je lze využívat, dále o audio kanálech a DMA disku.

Mnozí z vás jistě ví, že přerušení (interupts) patří mezi výjimky - EXCECTIONs. Výjimky jsou vlastně programy, které se mají vykonat při nějaké neobvyklé činnosti mikroprocesoru např. použití privilegované instrukce v USER módu procesoru, dělení nulou, chyba adresace, chybná instrukce, trasování, přerušení atd. Každá výjimka má své číslo. Toto číslo určuje vlastně pozici v tabulce vektorů výjimek. Na této pozici se nachází adresa programu (nebo chcete-li podprogramu), který se má vykonat pro danou výjimku. Vektorů je celkem 255 a zabírají celkem jeden kilobyte (255*4=1020+4=1024, přičtení čtyřky je z důvodu výjimky čilo nula - viz dále).
Výjimka s číslem nula odpovídá speciální akci a to je inicializace mikroprocesorn (např. po zapnutí počítače). Tento vektor je zvláštní tím, že obsahuje dvě dlouhá slova (LONGy) – ostatní vektory obsahují pouze jeden LONG. Tyto dva longy obsahují adresu zásobníku a adresu inicializačního programu. U vyšších mikroprocesorů 680x0 (a to od 68010) existuje registr VBR - Vector Base Register. Což je třicetidvou bitový registr, který obsahuje adresu začátku vektorů výjimek. Pokud mikroprocesor nemá VBR, tak se pole vektorů výjimek nachází na začátku paměti (od adresy 0 ) - na PDéčku je program. který vám ukáže, jak lze zjisti přítomnost VBR a jak ho přečíst či pozměnit. V dalším textu budu předpokládat, že VBR=0.

Co se stane při vyvolání výjimky
Závisí to samozřejmě na výjimce, která byla vyvolána, ale vždy se provede toto: Nejprve se uloží stavový registr SR do interního registru, který je jinak nepřístupný, mikroprocesor se přepne do režimu SUPERVISOR a vynuluje se pole TRACE (t.j. bity T0 a T1, používá se při trasování -ladění- programů). Potom mikroprocesor zjistí číslo výjimky. V dalším kroku se uloží momentální stav mikroprocesoru (při vyjíme nula se neukládá nic, ostatní výjimky ukládají minimálně stavový registr, čítač instrukcí a offset vektoru na zásobník). Jako poslední krok se provede předání řízení na adresu, kterou získal mikroprocesor z tabulky vektoru. Různé typy výjimek navíc ukládají další informace. Teď již přibližně víme, jak pracuje systém výjimek a můžeme se podívat na vlastní přerušení. Přerušení je zvláštní typ výjimky a je to vlastně žádost VNĚJŠÍHO obvodu o pozornost.
Mikroprocesory Motorola 680x0 jsou schopny zpracovávat sedm úrovní přerušení (jedna až sedm, nula znamená žádné přerušení). Nejvyšší prioritu má přerušení s číslem sedm. Jednotlivé přerušení lze maskovat t.j. zakázat mikroprocesoru jejich provedení. Maskování se uskutečňuje pomocí tří bitového pole ve stavovém registru SR (toto pole je samozřejmě přístupné pouze v režimu supervisor). Pokud je toto pole nastaveno na nulu, tak se akceptují všechna přerušení, pokud je nastaveno např. na trojku, tak se akceptují přerušení s prioritou čtyři a výše. Výsadní postavení má přerušení s prioritou sedm, protože se nedá maskovat (pokud nastavíte pole Interrupt na sedmičku, tak se mikroprocesor chová stejně, jako by bylo pole nastaveno na šestku). Toto přerušení se nazývá také NMI - No Mask Interrupt. Pokud přijde požadavek na přerušení a jeho úroveň je vyšší než hodnota v Interrupt v SR, tak mikroprocesor počká na dokončení právě probíhající instrukce a přejde k zpracování přerušení. Nejprve uloží do pole Interrupt v SR číslo právě přijatého přerušení (čímž zakáže přerušení stejné nebo nižší úrovně) a postupuje jako při výjimce (uloží SR do pomocného interního registru, nastaví bit S a vynuluje bity T0 a T1).
Dalším krokem je zjištění vektoru, který obsahuje adresu přerušení. My se zde budeme zabývat pouze tzv. autovektory přerušení. To znamená, že vektor přerušení získá mikroprocesor přičtením úrovně přerušení k výjimce 24 (to znamená, že adresu programu přerušení vybere z adresy (24+úroveň)*4. z toho vyplývá adresu začátku vektorů pro přerušení na adrese $60. Adresa $60 odpovídá tzv. falešnému přerušení, které nejde normálně vyvolat, protože se jedná vlastně o úroveň nula. Toto přerušení se vyvolá dojde-li k chybě na sběrnici během zpracování přerušení). Pak mikroprocesor uloží m zásobník původní SR, PC (program counter - který ukazuje na instrukci, která by se provedla, kdyby nedošlo k přerušení) a offset použitého vektoru. Po zpracování výjimky se musí obnovit běh původního programu. K tomuto účelu slouží instrukce RTE (ReTurn from Exception). Při návratu z přerušení se provede toto: ze zásobníku se vyzvedne SR a PC a k ukazateli na zásobník se přičte osm (což zruší záznam v zásobníku, protože SR má délku dva byty, PC má délku čtyři byty a offset na vektor přerušení má délku dva byty = celkem osm bitů).
Doposud jsme se zabývali tím, co dělá mikroprocesor při požadavku na přerušení. Nyní se podíváme na to, jak dáme mikroprocesoru vědět, že chceme vyvolat přerušení. Jak již bylo řečeno, přerušení je žádost vnějších obvodů o pozornost. Nejprve, aby mohlo k přerušení dojít, musíme vnějším obvodům (vnějšími obvody zde myslíme obvody mimo mikroprocesor např. časovače, DMA řadič atd.) přerušení povolit. K tomuto účelu slouží registr INTENA (zápis $DFF09A, pro čtení INTENAR $DFF01C).
Pokud má dojít k přerušení, tak vnější obvod nastaví daný bit v registru pro požadavek přerušení (t.j. INTREQ $DFF09C zápis a INTREQ $DFF01E čtení) a pokud je toto přerušení povoleno a není maskováno (pomocí SR mikroprocesoru), tak dojde k jeho vyvolání. Do registru pro požadavek přerušení INTREQ může zapisovat i mikroprocesor a tím vyvolat přerušení. Před ukončením přerušení instrukcí RTE je nutné ještě vynulovat příslušný bit v registru INTREQ, abychom jsme se mohli vůbec z přerušení vrátit. Pojďme se nyní podívat podrobněji na přerušení VERTB a SOFT. Přerušení VERTB je generováno při začátku vertical blanku, což je přechod elektronového paprsku z pravého dolního rohu do levého horního rohu (snímkové zatemnění). Toto se dá dobře využít, protože změníte-li data, která se mají zobrazit, právě v této době, tak vše bude probíhat plynule a nebude docházet k problikávání. Samozřejmě si musíte dávat pozor, aby vaše změny nebyly natolik časově náročné, aby přesahovaly snímkové zatemnění (pak by docházelo k problikávání apod.). Zvláštní postavení zaujímá mezi přerušeními SOFT přerušení. Toto přerušení vyvolá pouze program. Možná se vám to zdá zbytečné, ale zamysleme se nad použitím tohoto přerušení v copper listu. Zde nám vzniká skvělá možnost, jak spouštět přerušení na jakémkoliv řádku pomocí copperu. Příklady použití obou přerušení naleznete na PDéčku. Ještě poznámka k návratu z přerušení.
Používáte-li několik přerušení stejné priority, tak byste si měli zjistit z registru INTREQR od čeho toto přerušení je a po té vynulovat příslušné bity před RTE. Neuděláte-li toto, pak se může stát, že se z přerušení nevrátíte. Uveďme příklad: máme povoleno přerušení SOFT a DSKBLK (obě přerušení priority 1). Pokud dojde k vyvolání přerušení od DSKBLK a my budeme na konci přerušení nulovat pouze bit SOFT, tak po instrukci RTE dojde opět k vyvolání přerušení od DSKBLK (protože stále trvá požadavek) a my se zde zacyklíme.

AUDIO kanály
Amiga má čtyři audio kanály. Každý z nich lze ovládat samostatně a každý má vlastní DMA kanál. Přenos dat z paměti lze zase dělat buď mikroprocesorem, nebo pomocí DMA kanálu. My si zde ukážeme, jak se dá přehrát jednoduchý sampl pomocí DMA. Jako u každého DMA přenosu i zde musíme určit odkud se mají data přenášet. K tomuto účelu slouží těchto osm registrů (jeden kanál má dva registry - podobně tomu bylo u bitplanů):
AUD0LCH a AUD0LCL ($DFF0A0 a $DFF0A2) - adresa umístnění kanálu 0
AUD1LCH a AUD1LCL ($DFF0B0 a $DFF0B2) - adresa umístnění kanálu 1
AUD2LCH a AUD2LCL ($DFF0C0 a $DFF0C2) - adresa umístnění kanálu 2
AUD3LCH u AUD3LCL ($DFF0D0 a $DFF0D2) - adresa umístnění kanálu 3
Dále je potřeba určit délku přenášených dat. Tato délka se určuje ve wordech (to znamená počet wordů, 1 word = 2 byty). Tuto délku zapíšeme do příslušného registru pro daný kanál. Jsou to tyto registry:
AUD0LEN ($DFF0A4) - délka samplu pro kanál 0 (ve wordech)
AUD1LEN ($DFF0B4) - délka samplu pro kanál 1 (ve wordech)
AUD2LEN ($DFF0C4) - délka samplu pro kanál 2 (ve wordech)
AUD3LEN ($DFF0D4) - délka samplu pro kanál 3 (ve wordech)
Jako další musíme určit, jak rychle se mají data z paměti přenášet. To je musíme určit periodu (což je převrácená hodnota frekvence). Minimální číslo, které můžeme do registru zapsat je 124 (omezení je dáno rychlostí hardwaru a rozdělením cyklů přístupu do paměti). Periodu zapisujeme do těchto registrů:
AUD0PER ($DFF0A6) - perioda pro kanál 0
AUD1PER ($DFF0B6) - perioda pro kanál 1
AUD2PER ($DFF0C6) - perioda pro kanál 2
AUD3PER ($DFF0D6) - perioda pro kanál 3
Poté zbývá určit jen hlasitost. Což provedeme zápisem do registrů pro hlasitost. Jsou to:
AUD0VOL ($DFF0A8) - hlasitost pro kanál 0
AUD1VOL ($DFF0B8) - hlasitost pro kanál 1
AUD2VOL ($DFF0C8) - hlasitost pro kanál 2
AUD3VOL ($DFF0D8) - hlasitost pro kanál 3
Maximální číslo, které určuje maximální hlasitost je 64. To znamená, že bity 15-7 jsou nevyužity. Nyní už jen stačí povolit DMA příslušného AUDIO kanálu a sampl se začne přehrávat. Pokud je celý sampl přehrán (AUDxLEN se stále snižuje až do nuly), pak se záložních registrů obnoví AUDxLEN a AUDxLC a sampl se začne přehrávat znovu od začátku. Zajímavým registrem je registr ADKCON. Tento registr slouží k ovládání zvukového hardware a diskového hardwaru:

ADKCON $DFF09E zápis, ADKCONR $dff010 čtení

bit jméno funkce
15 SET/CLR bity s hodnotou jedna nastavit/nulovat
14 PRECOMP0 vyšší bit předkompenzace pro MFM 00
13 PRECOMP1 nižší bit předkompenzace pro MFM 00
12 MFMPREC 0=GCR/1=MFM kódovaní dat
11 UARTBRK UART BREAK - TXD =0; signál pro RS-232
10 WORDSYNC povolení synchronizace a spuštění DMA
9 MSBSYNC povolení synchronizace na nejvyšší bit (pro GCR)
8 FAST 1= 2 us na bit (MFM), 0= 4 us na bit (GCR)
7 USE3PN použij 3. kanál k modulaci periody ničeho
6 USE2P3 použij 2. kanál k modulaci periody 3. kanálu
5 USE1P2 použij 1. kanál k modulaci periody 2. kanálu
4 USE0P1 použij 0. kanál k modulaci periody 1. kanálu
3 USE3VN použij 3. kanál k modulaci hlasitosti ničeho
2 USE2V3 použij 2. kanál k modulaci hlasitosti 3. kanálu
1 USE1V2 použij 1. kanál k modulaci hlasitosti 2. kanálu
0 USE0V1 použij 0. kanál k modulaci hlasitosti 1. kanálu

FLOPPY DISK
Než se pustíme do vlastního popisu hardwarových registrů Amigy, tak si řekneme něco obecného o disketách. Disketa je rozdělena na soustředná mezikruží - zvané stopy (angl. track). Tyto stopy se nacházejí na obou stranách diskety. Vždy dvě stopy proti sobě (nahoře a dole) tvoří cylindr. V mechanice se disketa otáčí a čtecí/zápisová hlava je nad stopou ze které chceme data číst/zapisovat. A protože má disketa dvě strany (a aby nebylo nutné disketu otáčet) má mechanika dvě čtecí/zápisové hlavy (pro každý povrch jednu). Hlavičky jsou poháněny jedním krokovým motorkem a jsou tedy vždy nad stejnou stopou - jejich polohu lze tedy určit cylindrem. Amiga DOS formátuje disketu na 80 cylindrů (0-79, nultá stopa se nachází na vnějším okraji diskety) to je tedy 160 stop. Liché stopy jsou umístněné na spodní straně diskety a sudé na horní. Každá stopa je rozdělena na sektory (u Amiga DOS je to na jedenáct) a každý sektor obsahuje 512 bytů dat. Z toho vyplývá kapacita diskety 160 stop * 11 sektorů * 512 bytů = 901 120 bytů = 880 kbytů. V praxi se častěji setkáváme s pojmem blok než sektor/stopa/strana. Blokům můžeme také jinak říkat logické sektory. Jedná se v podstatě o to, že každému místu určenému sektorem/stopou/stranou přiřadíme jedno číslo - tj. číslo bloku. Tím získáme rozsah 0 až 1759. Ve skutečnosti nejsou na stopě umístněny pouze sektory obsahující data. Každý sektor obsahuje kromě dat také informace o sektoru (synchronizační značka, číslo stopy, číslo bloku, dav kontrolní součty - uložených dat a informací o sektoru). Navíc je ještě na stopě umístněna nevyužitá mezera. Je to z důvodů bezpečnosti dat (protože stopa je kruhová a navíc na stopu nepadne přesně daný počet sektorů). Tato mezera bývá zhruba 696 bytů dlouhá.
Nyní se dostáváme k problému zápisu/čtení dat na/z diskety. Není možné data umístnit na disketu přímo tak, jak jsou. Toto vyplývá z principu uložení dat na magnetickém povrchu disku. Data se na médium zaznamenávají změnou magnetizace tzv. magnetickou reversací. Změna magnetizace znamená jedničku, nezměněná znamená nulu. Z toho plyne problém, protože v případě, kdy za sebou následuje hodně nul, se nemění magnetizace a řadič diskety vypadne ze synchronizace (vlivem fluktuací v otáčkách). Kromě tohoto problému je také nutné zajistit, aby řadič poznal, kde data začínají. Proto se před data klade synchronizační značka (je sestavena z takové posloupnosti 0 a 1, která se nemůže v zakódovaných datech vyskytovat). Z předchozího vyplývá, že se data musí zakódovat. Amiga má možnost volby mezi MFM kódováním a GCR kódováním. Amiga DOS používá MFM kódováni a proto se na něj podíváme. MFM je zkratka pro Modified Frequency Modulation tj. záznam pomocí modifikované frekvenční modulace. Podstata spočívá v tom, že se za každý datový bit vloží jeden hodinový bit, což není z paměťového hlediska moc efektivní (počet zapsaných bitů se zdvojnásobí). Hodnota hodinového bitu se určí celkem jednoduše: následují-li dva nulové bity za sebou, pak vložený hodinový bit bude jedničkový, jinak bude nulový. Uveďme si příklad:

data, která chceme vložit:
1 0 1 1 0 0 0 1 1 0 0 0 0 1 0 1
hodinové bity:
0 0 0 0 0 1 1 0 0 0 1 1 1 0 0 0
výsledná posloupnost:
01000101001010010100101010010001

Toto kódováni zabraňuje výskytu větší skupiny nulových bitů za sebou a zároveň výskytu dvou nebo více jedniček za sebou, což je důležité pro řadič (aby stihl zaznamenat rychlé změny magnetizace). Pokud zakódujeme data pomocí MFM, tak nikdy nedostaneme např. posloupnost $4489 (binárně 0100010010001001). Tuto posloupnost používá DOS jako synchronizační značku. Nyní se již můžeme podívat na to, jak vlastně obsluhovat mechaniku přímo.
Výběr jednotky, řízení a detekce - disketová jednotka má přiřazeny dva 8520 porty plus jeden bit portu na řízení přerušení. Brána CIA A (na adrese $BFE001) je vstupní a brána CIA B (na adrese $BFE000) je výstupní. Pomocí těchto bran vybereme jednotku, zjistíme, zda-li se nachází hlavičky nad stopou nula atd. Význam jednotlivých bitů je zřejmý z tabulek. Jen poznámka ke krokování motorku. Před každou operací byste si měli najet nad stopu nula a pak si udělat počitadlo, kde si budete pamatovat nad kterou stopou se nacházíte.
Dalšími registry jsou registry pro řízení DMA. Opět musíme určit, kde v paměti máme data (v případě zápisu na disk), nebo kam chceme data dát (v případě čtení z disku). DSKPTH a DSKPTL ($DFF020, $DFF022) - určení odkud/kam má DMA zapisovat/číst. Dalším registrem je registr DSKLEN ($DEF024), který obsahuje informace o délce přenášených dat, směru přenosu a povolení DMA (DMA musí být povoleno v DSKLEN i v DMACON!).

DSKLEN $DFF024

bit jméno funkce
15 DMAEN povolení DMA disku
14 WRITE 1 = z RAM na DISK
13-0 LENGHT počet přesouvaných slov (to znamená ve wordech)

Aby DMA disku pracovalo musíte nastavit bit DMAEN v DSKLEN dvakrát (toto je kvůli bezpečnosti). Průběh zápisu do DMA registrů by mohl vypadat přibližně takto:
1. zákaz DMA ($4000 do DSKLEN)
2. uložit požadovanou hodnotu do DSKLEN
3. uložit znovu požadovanou hodnotu do DSKLEN
4. po skončení přenosu nastavit DSKLEN opět na $4000
Při konstrukci hardwaru vznikla chyba, která způsobuje že při zápisu na disketu se ztrácejí poslední tři přenášené bity a při čtení z diskety se poslední slovo nepřenese (je tedy nutné přenášet o slovo navíc). Registr DSKBYTR ($DFF01A) slouží jako vyrovnávací paměť pro přenos mikroprocesor-disk. Při čtení z diskety jsou data z diskety posílána po bytech do tohoto registru. Po každém přenosu se nastaví bit BYTEREADY (bit se vynuluje přečtením DSKBYTR). Tento registr se používá obvykle pro synchronizaci, než se předá řízení DMA.
Elegantně se dá synchronizace vyřešit pomocí DMA a registru DSKSYNC ($DFF07E). Pokud je nastaven bit WORDSYNC v registru ADKCON ($DFF09E), nenastane přenos až do doby, kdy je nalezeno slovo shodné se slovem v registru DSKSYNC (navíc dojde nezávisle na nastavení WORDSYNC k nastavení bitu DSKSYNC v registru INTREQ - což může způsobit přerušení úrovně 6).

Přehled výjimek

vektor adresa obsah
0 $0000 ukazatel na zásobník po inicializaci
(1) $0004 adresa na inicializační program
2 $0008 chyba sběrnice
3 $000C lichá adresa
4 $0010 neexistující instrukce
5 $0014 dělení nulou
6 $0018 instrukce CHK s CHK2 (test mezí)
7 $001C instrukce TRAPV,TRAPcc a cpTRAPcc
8 $0020 privilegovaná instrukce
9 $0024 trasování
10 $0028 instrukce LineA
11 $002C instrukce LineF
12 $0030 rezervováno
13 $0034 chybná komunikace s koprocesorem
14 $0038 chybný formát pro RTE nebo cpRESTORE
15 $003C neinicializovaný vektor
16-23 $0040 rezervováno
24 $0060 falešné přerušení
25-31 $0064 autovektory přerušení 1-7
32-47 $0080 instrukce TRAP #0-15
48-55 $00C0 rezervováno (aritmetický koprocesor)
56 $00E0 chybná konfigurace jednotky řízení paměti
57-63 $00E4 rezervováno
64-255 $0100 rezervováno pro uživatele

Poznámka: tento přehled výjimek je pro mikroprocesor Motorola 68030, takže pro nižší verze řady 680x0 některé vektory nemají význam, jinak je samozřejmě tabulka kompatibilní.

Povolení přerušení
INTENA $DFF09A zápis, INTENAR $DFF01C čteni

bit jméno úroveň popis
15 SET/CLR   bity s hodnotou jedna nastavit/nulovat
14 INTEN   povolení všech přerušení
13 EXTER 6 externí přerušení (CIAB)
12 DSKSYN 5 přečtena synchronizační data
11 RBF 5 přijímací buffer sériového portu plný
10 AUD3 4 audio kanál 3 dokončil přenos bloku
9 AUD2 4 audio kanál 2 dokončil přenos bloku
8 AUD1 4 audio kanál 1 dokončil přenos bloku
7 AUD0 4 audio kanál 0 dokončil přenos bloku
6 BLIT 3 blitter dokončil práci
5 VERTB 3 začal Vertical Blank (přechod el. paprsku)
4 COPER 3 přerušení od copperu
3 PORTS 2 přerušení od I/O portů a časovačů (CIAA)
2 SOFT 1 softwarově vyvolané přerušení
1 DSKBLK 1 přenos diskového bloku ukončen
0 TBE 1 přenosový buffer sériového portu je prázdný

Žádost o přerušení
INTREQ $DFF09C zápis, INTREQR $DFF07E čteni

INTREQ $DFF09C zápis, INTREQR $DFF07E čteni
bit jméno úroveň popis
15 SET/CLR   bity s hodnotou jedna nastavit/nulovat
14 -    
13 EXTER 8 externí přerušeni (CIAB)
12 DSKSYN 5 přečtena synchronizační data
11 RBF 5 přijímací buffer sériového portu plný
10 AUD3 4 audio kanál 3 dokončil přenos bloku
9 AUD2 4 audio kanál 2 dokončil přenos bloku
8 AUD1 4 audio kanál 1 dokončil přenos bloku
7 AUD0 4 audio kanál 0 dokončil přenos bloku
6 BLIT 3 blitter dokončil práci
5 VERTB 3 začal VERTical Blank (přechod el. paprsku)
4 COPER 3 přerušení od copperu
3 PORTS 2 přerušení od I/O portů a časovačů (CIAA)
2 SOFT 1 softwarově vyvolané přerušení
1 DSKBLK 1 přenos diskového bloku ukončen
0 TBE 1 přenosový buffer sériového portu je prázdný

DSKBYTR $DFF01A

bit jméno funkce
15 BYTEREADY registr obsahuje platná data
14 DMAON DMA je povoleno (nastaveny bity v DMACON a DSKLEN)
13 DISKWRITE povolen zápis (nastaven bit WRITE v DSKLEN)
12 WORDEQUAL obsah DISKSYNC se rovná sekvenci bito čtených z diskety (nastaveno pokud se sekvence rovná t.j. asi 2us)
11-8   nevyužito
7-0   jeden byte dat

CIA A

bit jméno funkce
_5 DSKRDY disketa připravena
_4 DSKTRACK0 hlavičky jsou právě na stopou nula
_3 GSKPROT disketa je chráněna proti zápisu
_2 DSKCHANGE disketa vyjmuta z jednotky (aktivní až do posunu hlav)

CIA B

bit jméno funkce
_7 DSKMOTOR každá jednotka si zapamatuje stav tohoto signálu v okamžiku sestupné hrany signálu DSKSELx a řídí se jím běh motoru až do další sestupné hrany DSKSELx
_6 DSKSEL3 vybere jednotku 3
_5 DSKSEL2 vybere jednotku 2
_4 DSKSEL1 vybere jednotku 1
_3 DSKSEL0 vybere jednotku 0
_2 DSKSIDE 0 = horní hlava,1 = dolní hlava
_1 DSKDIREC směr pohybu hlav, 0 = směr do středu
_0 DSKSTEP krokování motorku; měl by se používat jako impuls; nastavit nejdříve do 0 a pak hned zpět do 1

CIA B ($BFDD00)

bit jméno funkce
_4 FLAG impuls Indexu (generace přerušení úrovně šest)
Poznámka: bity značené _ jsou aktivní v NULE.

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

AMIGA REVIEW

57 ( 11-12 / 2000 )
56 ( 9-10 / 2000 )
55 ( 7-8 / 2000 )
54 ( 5-6 / 2000 )
53 ( 3-4 / 2000 )
52 ( 1-2 / 2000 )
 
51 ( 12 / 1999 )
50 ( 11 / 1999 )
49 ( 10 / 1999 )
48 ( 9 / 1999 )
46-47 ( 7-8 / 1999 )
45 ( 6 / 1999 )
44 ( 5 / 1999 )
43 ( 4 / 1999 )
42 ( 3 / 1999 )
41 ( 2 / 1999 )
40 ( 1 / 1999 )
 
39 ( 12 / 1998 )
38 ( 11 / 1998 )
37 ( 10 / 1998 )
36 ( 9 / 1998 )
35 ( x / 1998 )
34 ( x / 1998 )
33 ( 1-2 / 1998 )
 
32 ( 11-12 / 1997 )
31 ( 9-10 / 1997 )
30 ( 7-8 / 1997 )
29 ( 6 / 1997 )
28 ( 5 / 1997 )
27 ( 4 / 1997 )
26 ( 3 / 1997 )
25 ( 2 / 1997 )
24 ( 1 / 1997 )
 
23 ( 12 / 1996 )
22 ( 11 / 1996 )
21 ( 10 / 1996 )
20 ( 9 / 1996 )
18-19 ( 7-8 / 1996 )
17 ( 6 / 1996 )
16 ( 5 / 1996 )
15 ( 4 / 1996 )
14 ( 3 / 1996 )
13 ( 2 / 1996 )
12 ( 1 / 1996 )
 
11 ( 12 / 1995 )
10 ( 11 / 1995 )
9 ( 10 / 1995 )
8 ( 9 / 1995 )
7 ( 7 / 1995 )
6 ( 5 / 1995 )

ATLANTIDA NEWS

5 ( 3 / 1995 )
4 ( 1 / 1995 )
 
3 ( 11 / 1994 )
2 ( 9 / 1994 )
1 ( 7 / 1994 )
0 ( 5 / 1994 )