OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 28.03.2024, 23:39

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 30 ]  Přejít na stránku 1, 2  Další
Autor Zpráva
 Předmět příspěvku: Amiga Assembler - práce s grafikou
PříspěvekNapsal: 01.10.2021, 11:49 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
Z jedné polské a druhé italské příručky jsem si dal zdrojové kódy do počítače. Jednodušší polský program se mi nepodařilo rozběhat, kromě kopírování jsem něco přepisoval i ručně. Italský delší kód se mi rozběhat podařilo. Tam bylo čisté kopírování a pouze úprava názvů, aby seděli velikosti písmen v návěstích a jménech proměnných a udělání odstavců. Zajímá mně práce s pixelovou grafikou, to jsou nějaké BOBy. Tak uvidím, jestli mne to bude bavit, jako blbnutí s hudebním čipem Paula.

Oba zdrojové kódy v příloze. Zatím jsem to nijak nestudoval. Posledně jsem si jenom ty příklady vybral a dnes je testnul.

Po spuštění polského kódu jde Amiga i do guru.

U italského kódu je dokonce i animace jednoduché rybky. To jsem ani teď nepotřeboval ale ok.


Přílohy:
stawanieBoba.zip [2.14 KiB]
228 krát

_________________
Amiga - PMD 85
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler - práce s grafikou
PříspěvekNapsal: 01.10.2021, 19:39 
Offline
Site Admin
Uživatelský avatar

Registrován: 11.05.2013, 23:48
Příspěvky: 10111
Bydliště: Praha
Has thanked: 1953 times
Been thanked: 1517 times
No je otázka, jak moc chceš tu pixelovou grafiku rychlou. BlitterObjekty jsou, co do možností, rozevláté, ale pokud se chceš soustředit na rychlost, tak jedině sprity.

_________________
Amiga/Amstrad/Atari/Commodore/Mac/Nintendo/PS/PC/Sega/Tandy/ZX


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler - práce s grafikou
PříspěvekNapsal: 01.10.2021, 19:58 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
A BOBy jsou není sprity? Mně zajímá právě nejrychlejší způsob zobrazení pixelové grafiky.

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler - práce s grafikou
PříspěvekNapsal: 01.10.2021, 21:26 
Offline
Site Admin
Uživatelský avatar

Registrován: 11.05.2013, 23:48
Příspěvky: 10111
Bydliště: Praha
Has thanked: 1953 times
Been thanked: 1517 times
Nene, BOBy nejsou sprity. Zajímá tě nejrychlější v pohybu, nebo jako vykreslení obrazovky? Na to první jsou sprity, na druhé doublebuffering :-)

_________________
Amiga/Amstrad/Atari/Commodore/Mac/Nintendo/PS/PC/Sega/Tandy/ZX


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler - práce s grafikou
PříspěvekNapsal: 01.10.2021, 22:03 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
Máš recht, tohle je kreslení pomocí blitteru. A to by mohlo být fajn na vektorovou grafiku...

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler - práce s grafikou
PříspěvekNapsal: 11.10.2021, 13:06 
Offline
Kecka

Registrován: 11.01.2021, 11:47
Příspěvky: 48
Has thanked: 0 time
Been thanked: 39 times
Ahoj. BOBs jsou "Blitter OBjects". Je to něco zcela jiného než Amiga sprajty. Vše je velmi dobře popsáno v AHRM (sekce "Sprite Hardware" a "Blitter Hardware").
Sprajty jsou v Amize implementovány v grafickém generátoru čipu Denise. Zjednodušeně řečeno jsou sprajty další zdroj dat (až osm nezávislých dat ve dvou bitových rovinách) společně s daty z bitových rovin (bitplanes, těch je až šest), které se na každém řádku kombinují a generuje se výsledný obrazový signál. I proto se jim někdy a někde říká "hardware sprites". Aby Denise dostala na každém řádku data sprajtů, tak se k tomu obvykle používá DMA systém čipu Agnus (ta umí z paměti ve správný čas automaticky číst data a nastavovat je Denise do registrů SPRxDATA a SPRxDATB). (Poznámka: Podobnou službu dělá Agnus i v případě dat bitplánů.) Ale může to dělat i CPU nebo Copper (to první se ale dělo/děje jen zcela výjimečně, osobně jsem se s tím nikdy nesetkal).
BOBy jsou něco úplně jiného a fakt, že bývají takto pojmenované, je podle mne trochu zavádějící. Evokuje to nějakou jasně definovanou vlastnost Amiga hardware.
V Agnus je implementován blitter - malý "procesor" který umí manipulovat s daty a provádět s nimi bitové logické operace. Ve své době to nebylo něco až tak objevného (existovaly i v jiných systémech), ale ten v Amize byl na svou dobu rychlý, měl až tři vstupní zdroje dat (+ jeden výstup), logická operace nad zdroji byla plně nastavitelná, uměl posouvat s bity, a navíc uměl dvě ne-až-tak-obvyklé věci: vyplňovat po řádcích (tzv. xor-fill) a kreslit čáry. Ale hlavně byl standardní součástí všech modelů (tímto zdravím STčkaře :) ). V Amize byl Blitter nejčastěji používám pro kopírování obrazových dat. Někde v paměti byl uložen zdrojový obraz a Blitterem se kopíroval na jiné místo v paměti (odkud Agnus pro Denisu čte data bitplánů), na vhodně spočtenou pozici, aby se obrázek vykreslil. Do značné míry to mělo nahradit ony výše zmíněné sprajty (nebo alespoň vykompenzovat jejich omezení na osm).

P.S.: Ten polský zdroják, tak jak jsi ho poslal, ti přece ani nemůže fungovat. Evidentně předpokládá nastavení nějakých vstupních hodnot v registrech (minimálně v d0, d1, a0, a1, a2).

P.P.S.: Manipulace se sprajty je výrazně rychlejší než kreslení pomocí Blitteru. V prvním případě obvykle stačí jen nastavení vertikální a horizontální pozice, kde na obrazovce se má sprite vykreslit, a zbytek se děje "automaticky" (V praxi to může být trochu komplikovanější, ale vše je dobře popsáno v AHRM). Tzv. Boby se musí nechat zobrazit (zkopírovat) Blitterem, což vyžaduje nejen víc času CPU k nastavení, ale hlavně volné DMA sloty pro Blitter (opět je vhodné si o tom přečíst víc v AHRM).


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler - práce s grafikou
PříspěvekNapsal: 11.10.2021, 16:48 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
Manipulace se sprajty je rychlejší i při použití jednoduché vektorové grafiky vůči vykreslování pomocí blitteru?

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler - práce s grafikou
PříspěvekNapsal: 11.10.2021, 18:55 
Offline
Kecka

Registrován: 11.01.2021, 11:47
Příspěvky: 48
Has thanked: 0 time
Been thanked: 39 times
Lisiak4 píše:
Manipulace se sprajty je rychlejší i při použití jednoduché vektorové grafiky vůči vykreslování pomocí blitteru?

Pokud za "vektorovou grafiku" považuješ to, co se na Amize pod tímto názvem obvykle objevovalo, tedy 3D objekty vykreslené buď pomocí čar nebo polygonů (vyplněných jednou barvou nebo vzorkem), tak s tímto vykreslováním ti sprajty vůbec nepomůžou.
Amiga má sprite systém vlastně velmi omezený ve srovnání například s arkádovými systémy nebo i s konkurenčními herními konzolemi, např. PC Engine, Mega Drive, SNES a dokonce i s NES. Denise umí zpracovat na jednom televizním řádku data z maximálně osmi zdrojů - tedy osmi sprajtů (a i tady jsou některá omezení!). Jeden má šířku 16 bitů a maximálně 3 barvy (kombinace bitů 0/0 znamená, že je sprajt v tom místě transparentní). To myslím bylo zklamání už v roce 1985, natož později. Trochu to může zachránit fakt, že se určitou technikou (pomocí Copperu) dají sprajty horizontálně kopírovat a tím je Denise na řádku zobrazí opakovaně. Bohužel ale stále stejných 16 bitů. Sprajty taky nejsou omezeny výškou -- zobrazují se dokud Denise generuje obraz. Dvojice sprajtů se taky dají sloučit, takže jsou ve výsledku jen čtyři, ale mají až 15 barev (ale všechny sdílejí stejnou paletu COLOR17-COLOR31). Ale to je vše -- nic víc se z toho systému vyrazit prostě nedá :(
Snad je z popisu zřejmější, že na nějakou "vektorovou grafiku" tohle dělané nebylo.
Vektorová grafika se na OCS bez FAST-RAM a s pomalým CPU dělala pomocí Blitteru. Ten umí celkem rychle kreslit čáru - rozhodně rychleji než by to udělalo CPU. Když se obrys polygonu správně nakreslí, dá se vyplnit opět Blitterem. Ve své době to stačilo na rozumnou 3D grafiku. Podle složitosti toho, co se vykreslovalo (a při daném rozlišení, počtu barev atd.) to některé hry nebo aplikace stihly třeba i za 3 frejmy (16 FPS). Nenechal bych se zmást demáči, kde se točí objekty třeba i v 50 FPS -- jsou to často různé triky, finty apod. (např. tzv. HAM-fill).


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler - práce s grafikou
PříspěvekNapsal: 11.10.2021, 19:14 
Offline
Radil

Registrován: 18.10.2014, 23:10
Příspěvky: 377
Has thanked: 28 times
Been thanked: 120 times
defor píše:
Aby Denise dostala na každém řádku data sprajtů, tak se k tomu obvykle používá DMA systém čipu Agnus (ta umí z paměti ve správný čas automaticky číst data a nastavovat je Denise do registrů SPRxDATA a SPRxDATB).

Nedávno ma napadlo ako to funguje na AGA Amige, keď je nastavená šírka sprajtu 32 alebo 64 pixlov?
Veď SPRxDATA a SPRxDATB sú len 16 bitové, tak kde sú zvyšné data?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler - práce s grafikou
PříspěvekNapsal: 12.10.2021, 09:04 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
Jen poznámka jak vypočíst velikost bitplanu v bytech.
Citace:
If you want to know how many bytes a line takes in a bitplane use this formula:

size of one line within a bitplane ScreenWidth / 8
size of one bitplane ScreenWidth / 8 * ScreenHeight
Size of full picture ScreenWidth / 8 * ScreenHeight * AmountOfBitplanes


_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler - práce s grafikou
PříspěvekNapsal: 12.10.2021, 15:27 
Offline
Kecka

Registrován: 11.01.2021, 11:47
Příspěvky: 48
Has thanked: 0 time
Been thanked: 39 times
Antony/DTA píše:
defor píše:
Aby Denise dostala na každém řádku data sprajtů, tak se k tomu obvykle používá DMA systém čipu Agnus (ta umí z paměti ve správný čas automaticky číst data a nastavovat je Denise do registrů SPRxDATA a SPRxDATB).

Nedávno ma napadlo ako to funguje na AGA Amige, keď je nastavená šírka sprajtu 32 alebo 64 pixlov?
Veď SPRxDATA a SPRxDATB sú len 16 bitové, tak kde sú zvyšné data?

Je to stejné jako u registrů pro bitplány (BPLxDAT), které jsou taky jen šestnáctibitové. Prostá odpověď je, že pouze DMA systém Amigy (čip Alice) využívá dvojnásobný nebo čtyřnásobný fetch-mode, kdy v jednom taktu sběrnice umí přečíst z paměti 32 nebo 64 bitů dat a ty předat čipu Lisa. Bohužel CPU (nebo Copper) takovou možnost nemá :(
P.S.: Pro doplnění, pokud bude u sprajtů zapnutý 2x nebo 4x fetch (32/64 width), tak CPU/Copper zápis do SPRxDATA/SPRxDATAB ovlivňuje jen prvních 16 bodů sprajtu.


Naposledy upravil defor dne 12.10.2021, 15:42, celkově upraveno 2

Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler - práce s grafikou
PříspěvekNapsal: 12.10.2021, 15:35 
Offline
Kecka

Registrován: 11.01.2021, 11:47
Příspěvky: 48
Has thanked: 0 time
Been thanked: 39 times
Lisiak4 píše:
Jen poznámka jak vypočíst velikost bitplanu v bytech.
Citace:
If you want to know how many bytes a line takes in a bitplane use this formula:

size of one line within a bitplane ScreenWidth / 8
size of one bitplane ScreenWidth / 8 * ScreenHeight
Size of full picture ScreenWidth / 8 * ScreenHeight * AmountOfBitplanes


Ještě bych doplnil, že kvůli tomu jak funguje OCS DMA systém Amigy, musí být jeden řádek obrazu násobkem 16 pixelů, protože data se vždy čtou po wordech. Adresa začátku dat pro čtení řádku musí začínat na sudé adrese (registry BPLxPT). To ale neznamená, že se musí takový počet pixelů reálně zobrazovat (pozice a šířka/výška zobrazení se určuje hodnotami v registrech DIWSTRT/DIWSTOP).


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler - práce s grafikou
PříspěvekNapsal: 12.10.2021, 16:43 
Offline
Site Admin
Uživatelský avatar

Registrován: 11.05.2013, 23:48
Příspěvky: 10111
Bydliště: Praha
Has thanked: 1953 times
Been thanked: 1517 times
"HAM fill" je moc pěkná věc. Ani ty artefakty mi nevadí.
pro L4 např. tady: https://www.youtube.com/watch?v=1dDWg2VYSxw&t=42s
A tady už tedy bez artefaktů:
https://www.youtube.com/watch?v=gVxHNYALrFg&t=6s

_________________
Amiga/Amstrad/Atari/Commodore/Mac/Nintendo/PS/PC/Sega/Tandy/ZX


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler - práce s grafikou
PříspěvekNapsal: 12.10.2021, 17:05 
Offline
Kecka

Registrován: 11.01.2021, 11:47
Příspěvky: 48
Has thanked: 0 time
Been thanked: 39 times
misticjoe píše:
"HAM fill" je moc pěkná věc. Ani ty artefakty mi nevadí.
pro L4 např. tady: https://www.youtube.com/watch?v=1dDWg2VYSxw&t=42s

Ad video: Ty horizontální čáry jsou nějakou chybou implementace. Dá se to udělat i správně. Např.
https://youtu.be/c_CI0gUTF28?t=130
https://youtu.be/rz7DQuJEc4A?t=60
Zajímavost: Skoro vždy jsou objekty vytvořené HAM-fill technikou jen v odstínech vzniklých z červené a zelené barvy. Protože modrá složka se modifikuje při kombinaci 0/1 šestého a pátého bitu bitplánů, a protože se HAM mód dá zapnout i při pouhých 5 bitplánech (šestý bit je automaticky nastaven na nulu), umožňuje to bohužel rychle používat jen barevné kanály R/G. Pokud by chtěl autor mít přítomnou modrou barvu, musel by zapnout i DMA pro 6. bitplane = míň DMA slotů pro CPU = pomalejší kreslení pixelů :(


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler - práce s grafikou
PříspěvekNapsal: 12.10.2021, 18:07 
Offline
Site Admin
Uživatelský avatar

Registrován: 11.05.2013, 23:48
Příspěvky: 10111
Bydliště: Praha
Has thanked: 1953 times
Been thanked: 1517 times
Ale tady modrá je a jedná se taky o HAM fill (podle toho, co píše v greetings):
https://youtu.be/RIjuOjdHtfY?t=233

_________________
Amiga/Amstrad/Atari/Commodore/Mac/Nintendo/PS/PC/Sega/Tandy/ZX


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 30 ]  Přejít na stránku 1, 2  Další

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz