[#1] horizontal blanking
Interesuje mnie zmiana kolorów na A500.

Pierwsza kategoria to zmiana kolorów w trakcie wyświetlania ala atarowskie spectrum512 czy photochrome. Tu myślę, że wystarczy sam copper, ale dla pewności dopytam.
Lores do 4 bitplanów- 1 coper move zajmuje 8 pikseli? 5 bitplanów - 12, 6-16? Poza obrazem 8 bez względu na ilość?

Druga kategoria to zmiana palety co linię, ale z użyciem CPU. Interesuje mnie jak policzyć cykle, bo jak mniemam CPU jest 2x szybszy od coppera, jeśli DMA nie kradnie dostępu. Czyli jak move.w #xxx,(a0)+ zajmuje 8 cykli to będzie to 4 cykle coloru?

Kolejna rzecz związana z poprzednią to stabilizacja przerwań horizontal blank. Tu użyłbym wywołania copperem, ale czas przerwania jest różny, więc na Atari używa się komendy stop. Coś ktoś kojarzy?
[#2] Re: horizontal blanking

@cholok, post #1

Druga kategoria to zmiana palety co linię, ale z użyciem CPU. Interesuje mnie jak policzyć cykle, bo jak mniemam CPU jest 2x szybszy od coppera, jeśli DMA nie kradnie dostępu. Czyli jak move.w #xxx,(a0)+ zajmuje 8 cykli to będzie to 4 cykle coloru?

Moim zdaniem najlepiej wykorzystać Copper, który naturalnie może zmieniać rejestry sprzętowe - to jego przeznaczenie. Jeśli chcesz wykorzystać CPU to może warto wykorzystać przerwanie Coppera, które instalujesz w wybranych miejscach obrazu?
[#3] Re: horizontal blanking

@Hexmage960, post #2

Copper zmieni max 15 kolorów, a będzie większa potrzeba. Poza tym jest jeszcze overscan. Dlatego musi być CPU.
[#4] Re: horizontal blanking

@cholok, post #3

Dobrze, a zamierzasz wykorzystać przerwanie Coppera? To była moja sugestia. Czy jakoś inaczej chcesz to zsynchronizować?

Ostatnia aktualizacja: 19.08.2018 20:46:18 przez Hexmage960
[#5] Re: horizontal blanking

@Hexmage960, post #4

Tak (ostatni akapit z pierwszego postu), ale to nie wystarczy od pełnej synchronizacji. Ja wiem to zrobić, interesują mnie timingi oraz co robi poniższy kod:
move	#$2100,sr
stop	#$2100
move	#$2700,sr
[#6] Re: horizontal blanking

@cholok, post #5

Polecenie MOVE #$2100,SR kopiuje tą wartość do rejestru stanu.

Polecenie STOP #$2100 kopiuje wartość do rejestru stanu i wstrzymuje pracę procesora. Procesor można wybudzić za pomocą polecenia RESET lub przerwania.

Tyle wiem na podstawie książki Wojciecha Czyża. Mogę podać więcej szczegółów np. co znaczą poszczególne znaczniki rejestru stanu, ale pewnie sam znajdziesz w jakimś źródle.
[#7] Re: horizontal blanking

@Hexmage960, post #6

Ksiązki to ja mam. Stop jest w procedurze przerwania.
[#8] Re: horizontal blanking

@cholok, post #7

Tak sobie spytam. Na jakiej podstawie twierdzisz, że procesor będzie szybciej zmieniał rejestry koloru od coppera?
[#9] Re: horizontal blanking

@cholok, post #7

Stop jest w procedurze przerwania.

STOP generalnie przygotowuje procesor do obsługi przerwania.

Procesor może być obudzony przez przerwanie o wyższym priorytecie, aniżeli załadowane do rejestru SR przez polecenie STOP.

Tyle wiem.
[#10] Re: horizontal blanking

@*y, post #8

Pewien, "nieznany" koder tak napisał. Jednak chodzi tylko o przypadek nr 2, czyli CPU jest 2x szybszy podczas HBL.
[#11] Re: horizontal blanking

@cholok, post #1

@cholok
Co do pierwszej kategorii to na ADA piszą że przy 4 planach to 8 pikseli. Przy 5 planach to 12. Ja do końca nie wiem dlaczego 12 pikseli. Ja rozumuje w ten sposób: copper potrzebuje 4 slotów gdy wykonuje data move a przy 5 planach mamy 3 sloty wolne. Czyli już 8 pikseli poszło a potem kradnie czas 68000 i zabiera jeden slot, to tak na mój rozum 2 piksele i pewnie jakoś to jest zaokrąglane do 4 pikseli, ale dlaczego to nie wiem - trzeba by poczytać coś gdzieś.

Co do drugiej kategorii to w tym wątku mc6809e tłumaczy jak on rozumie CPU Timing i slot usage. link. Ja jeszcze tego nie przetrawiłem.

A Jeśli chodzi o stabilizację to myślę, że to pomoże.
link .
[#12] Re: horizontal blanking

@asman, post #11

Zrobiłem całkiem sporo testów. Dziwnie jest przy 5 planach, bo cop move zajmuje piksele w cyklu 12,12,8, a nie czyste 12. Druga rzecz to pewne zaburzenia przy początku i końcu pobierania danych obrazu, co robi problem przy zmianach kolorów w trakcie wyświetlania. Jednak z copperem można sobie poradzić, zawsze działa identycznie.

Odnośnie zmiany kolorów z użyciem CPU. Zmiana kolorów w HBL jest jak najbardziej możliwa (32 kolory na raz) i to niezależnie od rodzaju CPU. Użyłem tu przerwań coppera i synchronizacji z vhposr.

Jeśli chodzi o zmiany kolorów w czasie wyświetlania, to tu jest gorzej. Metoda ze stopem odpada. Metoda z vhposr jest zbyt niedokładna. Wymyśliłem więc metodę synchronizacji poprzez blokadę dostępu cpu do chip (DMA). No i myślałem, że dostęp cpu do chip jest identyczny dla wszystkich Amig.

Czy w Amidze 1200 wykonywanie komend typu movem z i do pamięci chip (oczywiście fmode=0) będzie nieco szybsze niż w A500?
[#13] Re: horizontal blanking

@cholok, post #12

To by miało sens. ;)



Na mojej grafice zajęte cykle przez display ciemne, wolne dla cpu/blit/cop jasne. Jedna kratka to jeden cykl dostępu do pamięci, szeroki na 2 loresowe piksele.

Załóżmy że chcemy sobie na custom.color[0] rzucać naprzemiennie kolory: czerwony i niebieski. MOVE potrzebuje pobrać dwa WORDy z pamięci, więc kradnie je CPU i blitterowi bo ma priorytet. Tyle że przy 5BPP pattern jest x3x1x240, więc się nierównomiernie rozkładają. To kiedy wypadają pobrania WORDów zaznaczyłem na żółto i zielono. Wychodzi na to że Copper wysyła informację o kolorze do Denise w tym samym cyklu co fetch pierwszego WORDa kolejnej swojej instrukcji, bo w sumie czemu nie - przecież do samego ustawienia koloru nie potrzebny jest dostęp do RAMu. Cykl z ustawieniem koloru w Denise zaznaczyłem kolorem... tym powyżej czerwonych i niebieskich kresek. ;)

Zmianę kolorów kiedyś miałem przećwiczoną i na 5bpp da radę z przerwaniem, o ile zrobisz to po prostu przypisaniami na twardo a nie jakąś pętlą. Chyba nawet nie było czasu żeby to brać z tablicy, musiały to być rozkazy które same w sobie miały wpisany kolor. Ale tu mnie nie cytuj, dawno temu to było i nieprawda. ;)

Co do AGA to nic Ci nie podpowiem bo na tym nie siedzę.

EDYT: Zaznaczyłem jeszcze to i owo na grafice.

Ostatnia aktualizacja: 10.10.2018 09:24:06 przez teh_KaiN
[#14] Re: horizontal blanking

@teh_KaiN, post #13

strach
[#15] Re: horizontal blanking

@teh_KaiN, post #13

Nie chodzi tutaj o AGA, a o pamięć chip, która jest 32-bitowa. Wynikało by z tego, że chipset ma dostęp regulowany poprzez fmode, ale cpu ma pełen dostęp 32-bit.
[#16] Re: horizontal blanking

@cholok, post #15

Ile to się trzeba namęczyć by wyświetlać na Amidze obraz jak na Atari ST.
Na Amidze od zawsze jest tryb HAM gdzie są tysiące kolorów, a od 1992 czyli od prawie zawsze jest HAM8 i też gdzieś od tego czasu karty graficzne 24 bit.
Jak ktoś już bardzo nie chce używać karty graficznej na Amidze, to HAM to o wiele lepszy sposób na grafikę niż takie na siłę robienie z Amigi Atari ST.
Robi się obrazek w 24 bit, a potem bierze się stary dobry HamLab, i jest, mamy piękny obrazek w HAM. W przypadku HAM8 wybór jest większy i jest np Image Studio. To wszystko pięknie ładnie działa.
A to? Osobna apka do każdego obrazka. Naprawdę, szkoda czasu.
[#17] Re: horizontal blanking

@swinkamor12, post #16

Problem polega tylko na tym, ze jak juz Atari ST wyswietli ten przepiekny obrazek, to na cokolwiek innego nie ma juz mocy obliczeniowej
[#18] Re: horizontal blanking

@cholok, post #12

"Zlamiłem" te testy z cpu. Źle policzyłem kolory, a jeszcze Photon mnie zmanipulował. Nijak w hbl nie da się zmienić 32 kolorów na raz. Na pewno nie na A500. Można zmienić więcej niż 16, ale potrzebny jest fast, szybszy cpu i cache.
[#19] Re: horizontal blanking

@cholok, post #18

Jeśli liczę dobrze to między ostatnim a pierwszym pikselem masz używalnych 39 cykli dla CPU, więc faktycznie nie starczy. Jak wykorzystasz jeszcze pierwszy lub ostatni wolny dla CPU cykl w linii to masz ich 40, więc 20 kolorów. Faktycznie masz rację że się nie da, popierdzieliło mi się bo liczyłem to faktycznie dla 16 kolorów, bo to było przy okazji rozkmin na temat copperchunky a ono ma tylko sens dla max 16 kolorów bo inaczej copper zwalnia.

Dzisiaj prowadziłem wykład na RK właśnie o cyklach, slajdy będą w necie jutro, nagranie na jutubie trochę później. Pogadałem też trochę z KK po wykładzie i podpowiedział mi, że jest jakaś magiczna kombinacja do wciśnięcia w UAE by na ekranie pokazywał zajęte sloty w danej klatce.
[#20] Re: horizontal blanking

@teh_KaiN, post #19

[#21] Re: horizontal blanking

@makarsky, post #20

@Makarsky, do czego konkretnie z tym się odnosisz? Z tym ile kolorów da radę zmienić?

Czytanie o cyklach i układanie sobie tego w głowie to jest jakaś rzeźnia. Popełniłem takie coś, o którym gadałem na RK. Sterownaie - rolka zoomuje, myszą można sobie dragować widoczne pole. Z prawej można ustawić bitplane'y - kliknij "enable" i "apply" żeby coś zobaczyć. Jeśli ktokolwiek z Was znajdzie tam jakieś błędy to bardzo proszę o wytknięcie.
[#22] Re: horizontal blanking

@teh_KaiN, post #21

Tylko odnośnie skrótu klawiszowego, bo to raczej jest parametr w konfiguracji (FMODE), nic więcej. Dzięki za zwrócenie uwagi na to co przy porannym czytaniu wydało mi się oczywiste.
[#23] Re: horizontal blanking

@teh_KaiN, post #19

Problem w tym, że na gołej A500 obsługa przerwań przy 6 planach jest zbyt długa. Wtedy należałoby wywoływać 1 przerwanie, a resztę idealnie docyklować, co nie ma sensu, zwłaszcza, że i tak nie da rady. Zostaje tylko opcja copper.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem