Hmm.. opet Amiga vs. Atari diskusija :whip:
Ne znam puno o Amigi. HAM je 'Hold and modify' - sto bi bilo neshto kao : ne davati direktno boju (ili index boje), vec razliku u odnosu na prethodni px. Ili tako neshto u principu. Ovo svakako mozhe puno boja sa malo RAM-a, ali ima i ogranichenja.
Kod Atari ST(E)-a nema tako neshto. Za vishe od 16 boja odjednom na ekranu se koristi brza promena registara palete. To zahteva precizno sinhronizovan kod i komplikovan proces konverzije. Uobichajeno mozhe max. 48-54 boja u jednoj hor. liniji - to je najvece ogranichenje zapravo.
Prvi program, koji je koristio metodu je Spectrum 512 . Kasnije su se pojavile verzije sa podrshkom za STE (4096 boja), te tehnike sa alternacijom - 2 polja (field) za jednu sliku, sa blago razlichitim bojama, shto oko vidi kao prosechnu - tako je moguce imati skoro 30000 boja, uz manje-vishe treperenja. Ja sam krenuo sa ovim nakon shto je Douglas Little reaktivirao rad na Photochrome. Konvertovati animacije, sa hiljadama slika, na ST-u je presporo, chak i ako to radimo sa ubrzanim emulatorom. PC SW isto radi bar 200x brzhe. + Jednostavna batch konverzija.
Hi-color (da nazovemo tako) slika u Photochrom modu zauzima 50-100KB (320x200px) - 100KB je sa alternacijom. Ochito da je to previshe za animaciju. Ali i 50KB je previshe. 25x50KB je 1250 KB/sek - za technu animaciju - shto je za mene minimalni zahtev za kvalitetnu reprodukciju.
I 1250KB/sec je i moguce ostvariti sa najbrzhim adapterima/diskovima. Ali ovde imamo problem: disk load nije moguc tokom ispisivanja slike - a to je oko 66% vremena kod 320x200. Tako da imamo samo max. 33% vremena - a to je premalo. DMA ? Nije moguce koristiti, jer usporava procesor, shto unishtava precizan timing koda za promenu paleta. Tako da sam skoro odbacio ideju.
Tada sam se setio da nisam isprobao sve sa mojim cartridge port IDE adapterom. Tamo sam vec ranije postigao najvece brzine na STE sa nekim specijalnim trikovima. Kao sto se zna, na 68000 najbrzi transfer je sa movem ... instrukcijama. Ipak, niko to ne koristi kod IDE hard disk driver-a. Razlog je bug u procesoru - manje poznat: kod movem iz memorije u registre uvek postoji jedan + ciklus chitanja iz RAM-a, koji ne ide nigde. Ali trigeruje IDE chitanje, te se gube 2 bajta. Obrnuti movem nema taj bug - to bi znachilo pisanje u +2 bajta vishe u RAM, shto mozhe unishtiti podatke ako je kod tesan. Sada dolazi najinteresantniji deo: kako sam postigao preko 3MB/sek chitanje, kada je max. ispod 2MB/sek sa IDE. i to sa blitterom. Stvar je u izbegavanju nebotrebnih operacija. Chitanje sa IDE diska radi kao uobichajeno kopiranje sadrzhaja RAM-a - prvo CPU uchita u neki svoj interni reg izvornu adresu, te pishe to u cilj. Isto radi i blitter, samo malo brzhe - nema uchitavanja operacionog koda kod svakih 2 ili 4 bajta. To je i razlog zashto je movem najbrzhi - operacioni kod se uchitava samo jednom, za chak 64 bajta.
Ceo fazon je da se kod pristupa IDE disku koristi sledeca instrukcija: move.l (a0)+,d0 - ovo je za pisanje na disk. Pre toga, logika nameshta adapter u specijalan mode, interrupti su zabanjeni, i naravno nema DMA ili blitter operacija. Tada se podatak iz memorije (a0) pojavluje na data bus-a, i IDE to upisuje, te prelazi na sledecu adresu - tako sa mi treba da brinemo samo o izvornij adresi. Sa ovim se postizhe preko 2.2 MB/sek brzina pisanja na disk. Naravno, josh bolje je imati tako brzo chitanje sa diska. Ali ne postoji takva CPU instrukcija - to bi bilo kao: adresiraj RAM, i upishi tamo shta je na data bus - CPU kod pisanja u RAM uvek sam izbacuje podatke na data bus.
Tu je potreban mali zahvat u STE: preseci liniju R/W izmedju CPU i MMU. te sprovesti na adapter, koji ce po potrebi invertovati taj signal. i tada imamo zheljeno: move.l (a0)+,d0 ce zapravo upisati u RAM podatak sa bus-a (i naravno, CPU reg d0 - shto je nebitno). Tako sam ostvario i chitanje sa preko 2.2 MB/sek. Da dodam, da cela stvar radi tako da se kod izvrhava iz cartridge ROM-a - tada logika zna kada treba aktivirati IDE port.
Medjutim. i 2.2MB/sek nije dovoljno za hi-color video playback. Tada sam se setio movem . Poshto koristim reverziju R/W kod chitanja sa diska, to bi znachilo da ce movem.l (a0)+,d0-d7/a0-a7 pisati u RAM, 4x16 +2 = 66 bajta. 2+ zbog buga. Pitanje je bilo samo, da li ce zadnja 2 bajta (overshot) biti pisana no koretkno mesto. Testovi su potvrdili da da. Tako da samo treba dodati addq.l #2,a0 prethodnome, ponoviti ovo nekoliko puta, dodati sekvencu za kompletiranje od 512 bajta - i sektor je uchitan nevidjenom brzinom - peak oko 3.5 MB/sek. Ovo chak radi i pouzdano - ali samo sa STE. Na ST nece - a objasnjenje je u vecim kasnjenjima signala na cart portu kod ST - oko 65 nS umesto 25 nS . Poshto ST ionako nije interesantan za video playback, nisam se trudio da ostvarim taj superbrzi mod na ST.
ST nije dobar i zato shto nema DMA zvuk. Uraditi iole kvalitetan zvuk sa Yamaha chipom za semplovan audio, bez jacheg opterecenja procesora je skoro nemoguce - a ovde imamo ionako preopterecen procesor. Zatim, samo 512 boja znachi losiju sliku. Mada bi sa posebnom konverzijom za ST moglo postici dosta bolje - ali to je dupli posao za najsporiji deo u kreiranju AV fajla. Tako da nema podrshke za ST. Mozda ce biti, ako se bacim na 12.5 fps 320x160 mod, koji be trebalo da radi sa brzhim diskovima - kao UltraSatan. Ali nece biti zvuka na ST.
Ovo je duuug tekst, ali moram josh dodati dosta toga:
Sa uchitavanjem u tamnom (blank) periodu, i to sa vrlo brzim prenosom mozhe max 320x176px. Tada ima manje podataka, a vishe % za disk pristup. Za 320x200 treba neshto novo: a to je sinhro chitanje sa IDE diska za vreme iscrtavanja linija - kada treba brzo menjati boje.
Poshto imam veoma brzo disk chitanje, mogu osvehiti chak 80 boja, umesto uobichajenih 48-56. I to sa border bojom nezavisnom.
U tamnim periodima se uchitava samo bitmap deo. Onda je doshla ideja od Cyg-a (koji takodje radi SW za hi-color slike) da, poshto ionako moram da uchitavam iste boje 2x zaredom, zashto ne uraditi dualnu paletu, te imati 30K boja umesto 4096. Tu smo stigli do, ja mislim maximalnog moguceg kvaliteta na STE:
http://atari.8bitchip.info/movpst.php
Ima dosta novih videa. Nece ici na YouTube - tamo ne dozvoljavaju takve. Chak sam i za trailere dobio upozorenje da je Sony owner CR-a.
Bilo be dobro snimiti i sa kamerom, ali nemam kameru. Inache, nije uopshte jednostavno ovo uraditi sa TV karticom. Zapravo, samo 2 su uradjena stvarno dobro (mislim na capture in knverziju u AVI) - kod ostalih se josh vide malo linije - kao rezultat STE-ovog ne bash sasvim standardnog PAL signala.
Za kraj: kljuch kvaliteta je u preprocesiranju. Koristim Virtual Dub, razne filtere (najvazniji je error diffusion with color reduction). Trebalo je dosta vremena da se izeksprimentishe shta izgleda zaista dobro. Sve se mora pripremiti i multiplexovati u krajnji format - Atari nema vremena ni za kakvo raspakivanji ili bilo shta. Samo direktno uchitavanje na ciljne lokacije je dovoljno brzo.
Sada radim na Overscan. Bice 416x231 px ako sve ide po planu. Ali nema mesta za 80 boja po liniji, te ce kvalitet biti malo loshiji, barom kod materijala sa puno boja.