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

„NO SYSTEM“ programování

Radim Ballner

Již po třetí se setkáváme u seriálu o nesystémovém programování. V tomto pokračování si povíme o BLITTERu a SPRITECH.

Před tím než se vrhneme na blitter, tak bych se rád ještě zmínil o tom, že do modul bitplanů je možno zapsat i záporná čísla (záporná moduly). To znamená, že pokud v normálním LORESu dáte modulo -40, tak se bude pořád opakovat jeden řádek. Tohoto se dá využít pro různé efekty.

BLITTER
Blitter je obvod, který dokáže zpracovávat pravoúhlé oblasti paměti, což není vlastně nic jiného než obrázky. Můžeme ho použít nejen pro kopírování obrázků (přičemž lze provádět logické operace), ale i pro kreslení čar a vyplňování oblastí. Blitter má přidělen jeden DMA kanál a jako jediný z DMA procesů může mít nižší prioritu než hlavní mikroprocesor (samozřejmě v CHIP paměti). Tuto prioritu lze nastavovat 10. bitem (BLTPRI) v registru DMACON ($DFF096) - jednička znamená, že blitter má vyšší prioritu než mikroprocesor. Nejdříve se podíváme na to, jak se dají pomocí blitteru kopírovat obrázky. Abychom mohli blitter používat musíme opět nastavit řadu registrů. Musíme určit, kde se data nalézají, kam se mají kopírovat a co s nimi má blitter během přenosu udělat. Jedna z nejdůležitějších věcí, kterou musíte udělat ještě před tím, než začnete zapisovat do registrů blitteru, je počkat až blitter dokončí svou práci. Toto zjistíte, pokud se podíváte na BBYSY bit registru DMACON (to je 14. bit na adrese $DFF002). Pokud byste začali přepisovat registry a blitter by zrovna pracoval došlo by ke kolizi a blitter by mohl kopírovat data na nesprávná místa. Blitter má tři zdrojové registry a jeden výstupní registr. Co to pro nás znamená? Znamená to, že blitter umí zpracovávat data až ze tří zdrojů, s těmito daty provede námi určené logické operace a data pošle na cílový registr. Pro určení adres zdrojů (značí se A, B a C) a cíle (označuje se D) se používají tyto registry:

BLTCPTH a BLTCPTL ($DFF048,$DFF04A) - adresa zdroje C
BLTBPTH a BLTBPTL ($DFF04C,$DFF04E) - adresa zdroje B
BLTAPTH a BLTAPTL ($DFF050,$DFF052) - adresa zdroje A
BLTDPTH a BLTDPTL ($DFF054,$DFF056) - adresa cíle D

Ke každému zdroji (samozřejmě i k cíli) je určen jeden modulo registr. Tyto modulo registry mají stejnou funkci jako modulo registry pro bitplany. To znamená, že se jejich obsah, vždy po provedení řádku, přičte k danému zdrojovému (cílovému) registru. Tato činnost nám umožňuje zpracovávat z každého zdroje výřez o různé velikosti. Adresy modulo registrů jsou:

BLTCMOD ($DFF060) - modulo pro zdroj
C BLTCMOD ($DFF062) - modulo pro zdroj
B BLTCMOD ($DFF064) - modulo pro zdroj
A BLTCMOD ($DFF066) - modulo pro cíl D

Protože blitter zpracovává postupně vždy word (to znamená dva byty = 16 bitů) musí adresy zdrojů (i cíle) být dělitelné dvěma (zarovnané na word) a taktéž moduly musí být sudá čísla (lze použít i záporná moduly). Dalšími registry pro ovládání blitteru jsou BLTCON0 ($DFF040) a BLTCON1 ($DFF042). Tyto dva registry jsou řídící a určují, jak se bude blitter chovat.

BLTCONO $DFF040 zápis

Bit Název Funkce    
15 ASH3
14 ASH2 - Posun zdroje A
13 ASH1 -
12 ASH0 /
11 USEA
10 LISEB - Určení které zdroje blitteru budou použity
9 USEC - ( l = použit. 0 = nepoužit)
8 USED /
7 LF7  
6 LF6  
5 LF5  
4 LF4  
3 LF3  
2 LF2  
1 LFI  
0 LF0  

LF0-LF7 - Logic Function - těchto sedm bitu určuje co se s daty, které do blitteru přicházejí, má dělat (jakou logickou operaci) - tak zvaný MINTERM.

BLTCON 1 $DFF042 zápis

Bit Název Funkce
15 BSH3
14 BSH2 - Posun zdroje B
13 BSH1 -
12 BSH0 /
11 0  
10 0  
9 0  
8 0  
7 0  
6 0  
5 0  
4 EFE Exclusive Fill enable
3 IFE Inclusive Fill enable - Používá se v módu vyplňování
2 FCI Fill carry Input /
1 DESC Pokud je nastaven, tak blitter pracuje pozpátku
0 LINE Pokud je nastaven, pak blitter kreslí čáry

Další registry pro práci s blitterem jsou BLTAFWM ($DFF044 = Blitter Bource A First Word Mask) a BLTALWM ($DFF046 = Blitter Bource A Las Word Mask). Tyto registry jsou „přiandovány“ k prvnímu (BLTAFWM) a poslednímu wordu zdroje A. Posledním registrem je registr BLTSIZE ($DFF058).
Do tohoto registru se zapisuje velikost přenášené oblasti. Zároveň je to strobe registr, takže zápisem do něj odstartujeme práci blitteru.

BLTSIZE $DFF058 zápis

bity 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
význam H9 8 7 6 5 4 3 2 1 0 W5 4 3 2 1 0

H9-H0 = počet řádků (10 bitů => maximálně 1024 řádků)
W5-W0 = počet přenášených wordů (6 bitů = 64*2*8 = maximálně 1024 pixelů)

Do tohoto registru tedy zapisujte až jsou všechny ukazovátka a data nastaveny. Teď si uvedeme na příkladu, jak blitter funguje a jak určíme správně všechny hodnoty. Mějme malý obrázek autíčka (velikost 80*20) - viz obrázek - nakreslený ve čtyřech barvách. Tento obrázek chceme nakopírovat na pozadí, které má velikost 160* 140 a je také ve čtyřech barvách. Všechny grafická data (auto i pozadí) jsou v RAW formátu. Nejdříve zapíšeme ukazatel na autíčko do zdroje A, potom zapíšeme adresu kam chceme autíčko nakopírovat do cíle D. Jak již sem řekl musí být adresy sudé. To znamená, že do zdroje D napíšeme adresu začátku+48/8+(160/8)*90= začátek+1806. Tuto samou adresu napíšeme do zdroje C. Do zdroje B napíšeme adresu ukazující na masku. Teď se jistě ptáte, jak zajistit, aby bylo auto na pozici 53 a ne na 48. To je jednoduché, v registrech BLTCON0 a BLTCON1 nastavíte rotaci zdroje A a B na (53-48) 5. Toto zajistí, že se data ze zdroje A a B posunou o pět bitů. Právě z tohoto důvodu je za obrázkem autíčka vynecháno 16 bitů, protože při rotaci se automaticky to co vylézá vpravo dává doleva. A protože se může rotovat maximálně o 16 bitů, tak máme za obrázkem právě šestnáct volných bitů. Do modulo registru zdroje A a B zapíšeme nulu (protože pracujeme s celým obrázkem). Do modulo registrů C a D zapíšeme 10 ((počet bytů na řádek pozadí)-(počet bytů na řádek autíčka = 160/8-80/8 = 20-10 = 10). Nyní zapíšeme do BLTAFWM a BLTALFWM $FFFF (nechceme nic maskovat). Teď nastavíme registry BLTCON0 a BLTCON1. Do registru BLTCON0 zapíšeme $5FE2 a do BLTCON1 zapíšeme $5000.
Jistě se ptáte, jak jsem na ta čísla přišel. Číslo $5FE2 znamená - rotace zdroje A o pět bitů (5=%0101), použity všechny zdroje ($F=%1111), a MINTERM=$E2. Na určení MINTERMu použijeme pravdivostní tabulku. Víme, že zdroj A ukazuje na autíčko a B na jeho masku, zdroj C pak na pozadí (stejně tak výstup D). Pokud je maska rovna 1, pak se kopírují data z autíčka, pokud je maska rovna 0, pak se kopírují data z pozadí. Tímto způsobem vyplníme tabulku pro výstup D a toto číslo se zapíše, jak je naznačeno, do LF0-LF7. Na obrázku je i detail výsledku a z tohoto detailu by mělo být zřejmé proč-je nutné použít masku. Teď povolíme, pokud jsem to již neudělali někdy předtím, DMA blitteru v DMACON. Nakonec zapíšeme velikost do registru BLTSIZE (to je (počet wordů)+počet řádků*64= 5+64*20 = 1285), čímž odstartujeme práci blitteru. Celou tuto činnost musíme provést celkem dvakrát, protože náš obrázek má 2 bitplany (4 barvy). Při druhém průchodu nezapomeňte posunout ukazovátka na druhé bitplany (ukazovátko na data autíčka - pro nás to je BLTATP – zvedneme o (80/8)*20=200 a ukazovátka BPLCPT a BPLDPT zvedneme o (160/8)*140=2800, ukazovátko na masku ukazuje pořád na stejné místo, protože maska je stejná pro všechny bitplany).

Určení MINTERMu - bity LF7-LF0

zdroj cíl  
A B C D  
0 0 0 0 LF0
0 0 1 1 LF1
0 1 0 0 LF2
0 1 1 0 LF3
1 0 0 0 LF4
1 0 1 1 LF5
1 1 0 1 LF6
1 1 1 1 LF7

Jak jste jistě všimli, tak ukazovátka zdrojů a cíle ukazují na levý vrchní roh pracovní oblasti. Ukazatele lze používat i tak, že ukazují na pravý dolní roh pracovní oblasti, ale pak je nutno nastavit bit DESC (2.bit) v registru BLTCON1. V tomto případě pracuje vlastně blitter odzadu a moduly se nepřičítají, ale odčítají. Blitter lze použít i ke zjišťování kolizí objektů. Toto se dělá s pomocí bitu BZERO (13. bit) v registru DMACON (zde budeme číst, takže adresa je $DFF002). Nastavíme např. zdroje A a B tak, aby ukazovaly na masky objektů, které testujeme na kolizi a miniterm uděláme, tak aby se výstup D rovnal jedné jen tehdy, bude-li A i B rovno jedné (překrývají se => kolize). Pak zpustíme blitter (výstup D může být vypnut). Pokud by byl výsledek (cíl D) někdy během práce blitteru roven jedna, pak bude vynulován bit BZERO.

BLITTER a vyplňování oblastí
Jak jsem již dříve podotkl, blitter lze používat pro vyplňování oblastí. Oblast musí být ohraničená zvláštním typem čáry - linka má na každém řádku jen jeden pixel. Tyto čáry umí blitter kreslit, takže není problém je nakreslit. Jak blitter vyplňuje? K vyplňování je potřeba jeden zdroj a cíl D. Oba ukazatele nastavíme na pravý dolní roh a nastavíme bit DESC (toto je velmi důležité neboť vyplňování pracuje správně pouze v tomto režimu).Zapíšeme správná moduly (velikost obrázku-velikost vyplňované oblasti) a určíme jakým způsobem se má vyplňovat pomocí bitu EFE nebo IFE (IFE znamená, že se vyplní vnitřek oblasti a okraje se nechají, EFE znamená, že vnitřek oblasti se vyplní a úsečky, které ohraničují oblast zleva se vyjmou). Další důležitý bit je bit FCI - určuje jestli budeme vyplňovat oblast vně ohraničené oblasti, nebo oblast uvnitř. Teď se podívejme, jaký algoritmus blitter používá pro vyplňování a jaký vliv na to má FCI bit. Nejdříve se blitter podívá jestli je bod, na který ukazuje zdroj roven, jedné, jestliže ano, pak zneguje bit FCI. Je-li zdroj roven nule, pak kopíruje bit FCI na adresu cíle (ten je v tomto případě roven adrese zdroje). A takto se pokračuje přes celou oblast. Z tohoto je také zřejmé, jak je nutno nastavit bit FCI. Poněvadž má blitter tři zdroje, tak lze zbylé dva zdroje při vyplňování použít ke kopírování. Záleží jen na tom, jak nastavíte minterm. Celou operaci odstartujeme opět zápisem velikosti pravoúhlé oblasti do registru BLTSIZE.

BLITTER a kreslení čar
Tento režim aktivujeme nastavením bitu LINE (0.bit) v BLTCON1. Nastavením tohoto bitu dojde k předefinování některých bitů v registrech BLTCON0, BLTCON1 a některých registrů vůbec. Jak se změní význam registrů ukazuje tabulka.

Registry BLITTERU v režimu kreslení čar

Registr bity stav význam      
BLTCON0 15,14,13,12   určuje vzdálenost prvního bitu od adresy dělitelné dvěma (vlastně obdoba rotace)
BLTCON0 11,10,9,8 1011 požadováno pro kreslení čar
BLTCON1 15,14.13,12 z start vzorku linky na bitu z (z=0-15) - udává od kterého bitu vzorku se má začínat
BLTCON1 5   rezervován
BLTCON1 4,3,2   zde zapíšeme kód oktantu
BLTCON1 1 1/0 typ čáry - 0 normální / 1 na jeden řádek 1 bod (viz vyplňování oblastí)
BLTCON1 0   aktivuje mód kreslení čar
BLTADAT všechny $8000 index požadovaný pro kreslení čar
BLTBDAT všechny 0-$FFFF vzorek čáry
BLTSIZE 5-0 2 požadováno pro kreslení čar
BLTSIZE 15-6   délka čáry (dX)
BLTAMOD všechny   2(2dY-2dX)
BLTBMOD všechny   2dY
BLTCMOD všechny   šířka obrazovky v bytech
BLTDMOD všechny   šířka obrazovky v bytech
BLTCPT všechny počáteční adresa čáry  
BLTDPT všechny počáteční adresa čáry  
BLTADAT = $DFF074 BLTBDAT = $DFF072 BLTCDAT = $DFF070  

V tabulce se vyskytují výrazy dX a dY. Máme-li bod o souřadnicích X1,Y1 a chceme-li ho spojit s bodem o souřadnicích X2,Y2, pak dX=X2-X 1 a dY=Y2-Y1. Proč se zrovna počítají tyto čísla a zapisují do registrů? Je to dáno tím, jaký používá blitter algoritmus na kreslení čáry - používá Bressenhamův algoritmus. Tento algoritmus je dostupný v literatuře, takže se jím zde nebudu zabývat. Do registru BLTCON1 na bity 4, 3 a 2 je nutno zapsat číslo oktantu, toto číslo vlastně udává jaký sklon linka bude mít. Očíslování oktantů je na obrázku. Kompletní rutinu na kreslení čar pomocí blitteru naleznete na APD disku.

RAW formát vs BLITTER formát
Jak jste si zajisté všimli, tak veškeré obrázky, které jsme doposud používali byly v RAW formátu. To znamená, že v paměti je uložen celý první bitplan, pak celý druhý atd. Naproti tomu v BITTER formátu je uložen 1. řádek 1. bitplanu, pak 1. řádek 2. bitplanu atd (viz obrázek). Jako by byly bitplany ne za sebou, ale vedle sebe. Tento formát lze díky modul nejen zobrazit, ale také se s ním velmi dobře pracuje pomocí blitteru (odtud název). Pokud jsme chtěli kopírovat obrázek, který byl ve více bitplanech, tak jsme museli postupně kopírovat bitplan za bitplánem. V BLITTER formátu stačí kopírovat jen jednou a navíc nemusíme nechávat prázdných šestnáct bitů (ale musíme potom maskovat pomocí BLTAFWM A BLTALWM). Chceme-li pracovat s daty v BLITTER formátu musíme mít také bitplany, které zobrazujeme v blitter formátu (což lze díky modul provést velmi jednoduše). Jak naplnit registry pro blitter si ukážeme na příkladu. Mějme obrázek o velikosti X SIZE*Y SIZE ve dvou bitplanech (viz obrázek). Tento obrázek chceme podobně jako autíčko přidat před pozadí. Zdroj A opět nastavíme opět na obrázek, zdroj B na masku (která tam teď musí být 2 krát) a zdroj C a cíl D nastavíme opět na pozadí. Do modulo registrů pro zdroj C a D zapíšeme hodnotu MODULO (viz obrázek) a do modulo registrů pro zdroj A a B zapíšeme opět nulu. Do BLTSIZE zapíšeme SIZEX/16+SIZEY*n*64 (kde n je počet bitplanů, v našem případě 2). Tímto odstartujeme přenos a blitter přenese všechny bitplany. Pokud chcete získat data v BLITTER formátu, tak použijte nějaký IFF konvertor (IFF konvertor na minulém APD disku tento formát podporuje).

SPRITES
SPRITy jsou objekty, které jsou zobrazovány nezávisle na bitplanech. Pro sprity je vyhrazen DMA kanál, takže chcete-li je používat, nezapomeňte nastavit příslušný bit v DMACON. Jde zvolit prioritu vůči bitplanům (zobrazovat před nebo za bitplany). Priorita spritů mezi sebou je dána jejich číslem (sprite 0 má nejvyšší prioritu). Celkem máme k dispozici osm spritů. Velikost spritu je 16 bodů. Velikost jednoho bodu odpovídá velikosti bodu v módu LORES a tato velikost není závislá na režimu, ve kterém sprite zobrazujeme). Výška spritu není omezena. Každý jednoduchý sprite má tři barvy a jednu barvu průhlednou. Pokud se nám tři barvy zdají málo můžeme sprity slučovat, což nám počet spritů sníží na čtyři, ale každý sprite má 15 barev plus jednu průhlednou. Přiřazení barvových registrů jednotlivým spritům - jednoduché sprity:

COLOR16-COLOR18 sprite0 a sprite1
COLOR20-COLOR23 sprite2 a sprite3
COLOR25-COLOR27 sprite4 a sprite5
COLOR29-COLOR31 sprite6 a sprite7

Pro sloučené sprity se barva vybírá z registrů COLOR17-COLOR31. Chceme-li použít sprite musíme vyplnit strukturu, která popisuje jeho tvar a pozici. Adresu této struktury poté zapíšeme do registru, který je přidělen danému spritu. Zde je nutno poznamenat, že jestliže používáme byt jen jeden sprite, tak musíme všechny nepoužité sprity (resp. jejich registry, které ukazují na popis sprite) nastavit na falešný sprite, protože jinak se nám budou přes obrazovku míhat podivné věci. Je to dáno tím, že máme jen jeden bit pro povolení DMA spritu a ten povolí všechny sprity. Přidělení registrů pro jednotlivé sprity:

SPR0PTH ($DFF020) a SPR0PTL ($DFF022) - adresa spritu 0
SPR1PTH ($DFF024) a SPR1PTL ($DFF026) - adresa spritu 1
SPR2PTH ($DFF028) a SPR2PTL ($DFF02A) - adresa spritu 2
SPR3PTH ($DFF02C) a SPR3PTL ($DFF02E) - adresa spritu 3
SPR4PTH ($DFF030) a SPR4PTL ($DFF032) - adresa spritu 4
SPR5PTH ($DFF034) a SPR5PTL ($DFF036) - adresa spritu 5
SPR6PTH ($DFF038) a SPR6PTL ($DFF03A) - adresa spritu 6
SPR7PTH ($DFF03C) a SPR7PTL ($DFF03E) - adresa spritu 7

Adresa ukazující na sprite musí být opět dělitelné dvěma. Nyní se podíváme na to, jak je každý sprite popsán. Jak již sem řekl každý sprite má jeden registr (resp. dvojici registrů), ve kterých je uložena adresa na jistou strukturu. Tato struktura má následující tvar.

0. word – SPRxPOS
2. word - SPRxCTL
4. word - data obrázku spritu
.
.
n. word - konec spritu (x je číslo spritu)

Do nultého wordu (SPRxPOS) se zapisuje počáteční pozice spritu a to takto - bity 15-8 obsahují nižších 8 bitů vertikální pozice (VSTART), bity 7-0 obsahují nižších 8 bitů horizontální pozice (HSTART). Ve druhém wordu od začátku je druhé řídící slovo spritu (SPRxCTL). Význam jednotlivých bitů:

Význam bitů 2. řídícího slova spritu

bit význam
15-8 nižších osm bitů koncové vertikální pozice (VSTOP)
7 ATTACH bit - povoluje sloučení spritů
6-3 nevyužity (měly by být rovny nule)
2 nejvyšší bit začátku vertikální pozice (VSTART)
1 nejvyšší bit konce vertikální pozice (VSTUP)
0 nejnižší bit začátku horizontální pozice (HSTART)

Od čtvrtého bitu začínají informace o tvaru spritu (informace o barvách jednotlivých bodů). Barvy jsou kódovány stejně jako barvy v bitplanech. Například mějme první řádek spritu ve kterém jsou za sebou tyto barvy:
0011112222333300
pak hodnoty zapsané v paměti budou:
0011110000111100 0000001111111100
V prvním řádku je vyšší (významnější) slovo popisu barev a v druhém řádku je nižší (méně významné) slovo popisu barev spritu. Barva nula (kombinace 00) je barva transparentní. Pokud je celý sprite zobrazen, tak následují dva wordy, které sprite mohou ukončit (jsou to wordy 0,0). Nemusí tomu tak však být, protože sprite může být zobrazen i několikrát na obrazovce. Pak místo dvou nulových wordů napíšeme znovu SPRxPOS a SPRxCTL (samozřejmě s novými souřadnicemi). Samozřejmě není možné dávat do VSTART souřadnici, která by byla menší než VSTOP z předešlého spritu. Navíc platí omezení, že mezi jednotlivými sprity musí být volný minimálně jeden horizontální řádek. Toto je dáno konstrukcí hardwaru (pro každý sprite jsou během zobrazování řádku vyhrazeny jen dva cykly, takže chceme-li zobrazit sprite ještě jednou, tak je nutno načíst dvě řídící slova, což zabere právě ony dva cykly). Chceme-li používat šestnácti barevné sprity, pak musíme v datové struktuře nastavit ATTACH bit. Pokud toto provedeme, tak se nám sloučí vždy dva sprity do jednoho a to takto:

sprite 1 se spritem 0
sprite 3 se spritem 2
sprite 5 se spritem 4
sprite 7 se spritem 6

Aby bylo vše v pořádku, tak musíme nastavit vždy dva sloučené sprity na stejnou pozici a zajistit, aby měly stejnou velikost. Barva se z datových slov získá stejným způsobem, jako pro jednoduché sprity až na to, že místo dvou slov máme slova čtyři (tyto slova se zapisují vždy po dvou do datových struktur dvou sloučených spritů). Poněvadž ukazatelé na sprity jsou dynamické (podobně jako ukazatelé na bitplany), je nutné zajistit aby, po každém zobrazení, byly znovu obnoveny. K tomuto účelu se přímo nabízí použití COPPERu. Toto lze však udělat i v přerušení. Pokud máte k dispozici nějaký obrázek ve formátu IFF a chcete si z něj udělat sprite, pak použijte nějaký IFF konvertor, který to umožňuje (na minulý PD disk jsem jeden takový nahrál). Chcete-li se spritem pohybovat, tak jen přepisujte hodnoty v řídících slovech spritu (nezapomeňte, že při vertikálním pohybu musíte přepsat dvě hodnoty VSTART a VSTUP). Tyto změny do struktury spritu byste měli dělat je v okamžiku, když jste si jisti, že DMA na tyto data zrovna nepřistupuje.

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 )