1 Ostatnio edytowany przez nosty (2012-03-14 07:34:20)

Nie mogę znaleźć odpowiedzi na dwa pytania:

1. Czy Antic czyta tylko DL i pamięć ekranu?
Jeśli inne obszary pamięci, to jakie konkretnie?

3. Czy są takie momenty kiedy Antic NA PEWNO nic nie czyta z pamięci?
Zaznaczam że nie chodzi mi o haltowanie 6502, bo jak gdzieś wyczytałem procek jest haltowany przez Antic również przy wysyłaniu sygnału odswieżającego pamięc dynamiczną. Chodzi mi o dostęp Antica do pamięci.

Na logikę biorąc Antic nie powinien nic czytać od wejścia do VBL aż do rozpoczęcia rysowania następnej ramki (tzw. powrót plamki).
Dodatkowo: w systemie PAL generowanych jest 312 lilnii scaningowych, a wyświetlanych przez antic max 240. Czyli przez okres (312-240)/312 = 23% ramki też Antic nie powinien się dobierać do pamięci?

Jak teraz wyznaczyć z poziomu programu te okresy kiedy pamięć jest "Antic free"? :)

2 Ostatnio edytowany przez mono (2012-03-14 08:24:45)

ad.1. Jeszcze generator znaków w trybie tekstowym, no i sprajty (bo ma DMA - GTIA nie ma, więc tego nie robi). Zajmuje się jeszcze odświeżaniem pamięci (9 cykli na linię).
ad.3. Wszystkie te miejsca w lini, w których widać działania CPU. Dostęp do pamięci uskuteczniany jest głównie po lewej stronie ekranu (stąd wszelkie spowolnienia przy zmianach kolorów w rejestrach hardwarowych w tym obszarze).
W tym wątku była mapa linii i linki do odpowiednich artykułów w Seriousach.

Edit: Eeee.. w Syzygy.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

3 Ostatnio edytowany przez nosty (2012-03-14 08:35:48)

@mono, dzieki zapomnialem o duszkac i fontach. Artka zaraz przeczytam.

Co do 3. - Chodzi mi jednak o jakies czasowo dluzsze wolne od Antica okresy niz "po prawej stronie ekranu" w kazdej linii. Stad moje pytanie o DLI i okresy kiedy kresone sa (na monitorze) niewyswietlane przez Antic linie scaningowe.
Jakies 1000 - 2000 cykli to juz by bylo cos.

I jeszcze jedno wazne pytanie:

Czy dobrze rozumiem ze Antic czyta dane z pamięci ekranu tylko kolejno tak jak je wyświetla? Tzn. jesli wiem (np na podstawie DLI) ze n-ta linia zostala juz narysowana w tej ramce, to mam pewnosc ze az do nastepnej ramki Antic na pewno nie sięgnie już do pamięci obrazu tej linii no bo nie ma po co?

4

http://spiflash.org/atari/DMAV.zip
http://spiflash.org/atari/antic-dma.zip

wnioski wyciagnij sam

przechodze na tumiwisizm

5

nosty napisał/a:

Czy dobrze rozumiem ze Antic czyta dane z pamięci ekranu tylko kolejno tak jak je wyświetla? Tzn. jesli wiem (np na podstawie DLI) ze n-ta linia zostala juz narysowana w tej ramce, to mam pewnosc ze az do nastepnej ramki Antic na pewno nie sięgnie już do pamięci obrazu tej linii no bo nie ma po co?

...na podstawie DL. Nie sięgnie, bo nie ma po co.
Dla trybów tekstowych Antic sięga do pamięci generatora znaków podczas malowania kolejnych linii wiersza tekstu, natomiast do pamięci ekranu sięga wtedy oiw w pierwszej linii wiersza dzięki czemu blokuje na_ten_czas (Wojski) działalność CPU.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

6 Ostatnio edytowany przez epi (2012-03-14 12:49:38)

Nie ma okresów kiedy ANTIC nie czyta przez 1000 cykli. Linia ma 114 cykli i w każdej linii (nawet pustej, nawet poza wyświetlanym obrazem) ANTIC czyta pamięć co najmniej 9 razy (co się równa zabraniu 9 cykli).

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

7 Ostatnio edytowany przez syscall (2012-03-14 14:36:35)

nosty napisał/a:

Na logikę biorąc Antic nie powinien nic czytać od wejścia do VBL aż do rozpoczęcia rysowania następnej ramki (tzw. powrót plamki).

A co w tym czasie wg ciebie dzialo by sie z odswiezaniem pamieci?
Ogolnie nosty z twoich pytan wynika ze jakby  traktujesz antic jako sluge 6502,, a tak naprawde jest odwrotnie. To antic rzadzi szyna.

"Was powinny uzbrojone służby wyciągać z domów do punktów szczepień, a potem zamykać do pi* za rozpowszechnianie zagrożenia epidemicznego" - Epi 2021
"Powinno się pałować tylko tych co tego nie rozumieją. No i nie szmatki i nie chirurgiczne tylko min FFP3, to by miało jakiś sens. U mnie we firmie, to jak przychodzi bezmaskowiec, to stoi w deszczu przed firmą" - Pin 2021

8 Ostatnio edytowany przez nosty (2012-03-14 18:35:10)

@epi, @syscall - chyba obaj macie na mysli odswiezanie pamieci dynamicznej 9 razy na linie jak to pokazal Candle na załączonych logach (swoją drogą znakomitych, dzieki!), tak?

Wiem ze w tym celu Antic haltuje CPU, ale co to wlasciwie znaczy "memory refresh"?
Antic adresuje całą pamięć Atari? Po kolei czy jak? Nawet otworzylem PDF'a kosci 4164, ale przyznam ze mimo ze kiedys odebralem wyksztalcenie elektroniczne nie rozumiem dalej jak to odswieżanie jest realizowane w Atari.

Zresztą moze nie musze wiedziec, a po prostu zle zadalem pytanie...

Bo mnie konkretnie obchodzi czy Antic w ramach tego "odswiezania" 9 razy na linię, bedzie adresowal szynę cartridga I JEDNOCZESNIE wpływał na sygnały S4 i/lub S5, jesli do Atari przypięty jest cart (czyli kiedy sygnaly R4 i/lub R5 są w stanie wysokim)?
Bo jesli linie adresowe na zlaczu carta będą sie zmieniac w cyklach kiedy jest odswiezanie wewnętrznej pamieci dynamicznej, ale Antic nie bedzie ustawial S4 i S5 w stan niski to dla mnie tez ok.

9 Ostatnio edytowany przez syscall (2012-03-14 19:20:54)

No odswiezanie pamieci w skrocie polega na wygenerowaniu adresu i odczycie pamieci.
Jak antic przejmie magistrale to czyta wszystko co leci na magistrali, bez wzgledu na to co to jest.
Wydaje sie ze S4 i S5 sa niezagrozone, ale to juz musi sie wypowiedziec ktos z oscyloskopem :)

ps. Nosty moze powiedz wprost co chcesz osiągnąć. Chcesz zachować reżim czasowy w trakcie kiedy Antic pracuje?

"Was powinny uzbrojone służby wyciągać z domów do punktów szczepień, a potem zamykać do pi* za rozpowszechnianie zagrożenia epidemicznego" - Epi 2021
"Powinno się pałować tylko tych co tego nie rozumieją. No i nie szmatki i nie chirurgiczne tylko min FFP3, to by miało jakiś sens. U mnie we firmie, to jak przychodzi bezmaskowiec, to stoi w deszczu przed firmą" - Pin 2021

10 Ostatnio edytowany przez seban (2012-03-14 20:11:15)

Hej!

Ależ oczywiście że S4 lub S5 mogą zostać uaktywnione z przez ANTIC.

Refresh jest brany pod uwagę przez MMU i wtedy sygnały S4 oraz S5 są nieaktywne:

S4      = !A13 & !A14 & A15 & RD4 & REF;/* RD4 and addresses $8000-$9FFF */
S5      = A13 & !A14 & A15 & RD5 & REF;    /* RD5 and addresses $A000-$BFFF */

W każdym innym przypadku gdy RD4 lub RD5 będą aktywne i na szynie adresowej pojawi się odpowiedni adres, to MMU wygeneruje S4 lub S5. Jak widać MMU nie patrzy czy szynę adresuje CPU czy ANTIC, dla niego jest to nie istotne. Ważne że na szynie pojawił się odpowiedni adres i spełniony został warunek z równania powyżej. (legenda: ! - NOT, & AND, # OR )

W żadnym wypadku nie możesz założyć że ANTIC takiego adresy nie wygeneruje. Może stać się to nawet przez przypadek jak komputer się zawiesi, jakiś program popsuje się tak iż zapisze losowe śmieci do rej. ANTIC-a, sam sobie wyobraź co się stanie jak adres DLIST wpiszą się jakieś dowolne wartości. Często można to zaobserwować w przypadku niektórych programów, np. po wciśnięciu RESET. Program leci w krzaki na ekranie również śmieci, ANTIC wyświetla co chce i jak che :)

Wystarczą również niefortunne zapisy do HSCROLL i mamy piękny bug ANTIC-a, który doskonale widać na logach od electrona i candle. Na ekranie dzieją się wtedy różne ciekawe rzeczy a co się dzieje na magistrali? ;) Myślę iż wszystko co można sobie wyobrazić ;P

11

@Seban - wielkie dzieki, o to mi chodzilo. Chcialem miec po prostu pewnosc ze w czasie odswiezania DRAM przez Antic nogi S4 i S5 nie bedą sygnalizowaly na zewnątrz, ze Atari probuje czytac/pisac cos z obszaru pamieci mapowanej na carta. To mi wystarczy.

Jasne jest dla mnie ze Antic moze "legalnie" czytac z pamieci carta (ustawiajac celowo S4/S5 w stan niski) jesli jest w tym obszarze DL lub pamiec ekranu/duchow/fontow oraz ze moze odczytac cos stamtad jesli program sie wykrzaczy. Ale to jest "awaria" ktorej mozliwosc zawsze trzeba miec na względzie.

12

Hej!

Gwoli ścisłości to nie ANTIC ustawi S4/S5 tylko MMU. MMU uaktywni S4,S5 w momencie kiedy na szynie adresowej pojawi się adres z odpowiedniego zakresu, nie będzie to odświeżanie (REF) i odpowiednio RD4, RD5 będą aktywne.

ANTIC tak jak CPU może sobie jedynie wygenerować adres na szynie i ew. dokonać cyklu odczytu (CPU także zapisu). To co zostanie podpięte do szyny w danym momencie zależy właśnie np. od MMU.

13

Co leci na szynę adresową w trakcie odświeżania pamięci?
Co jest na szynach w trakcie STA WSYNC ?

https://www.youtube.com/watch?v=jofNR_WkoCE

14

@Fox:

ad1) a to już Electron chyba dobrze wie, nie wiem czy dobrze pamiętam ale chyba kiedyś analizował. Ja mogę bredzić ale chyba lecą sekwencyjnie adresy wszystkich kolumn. Nie pamiętam czy nie było to $00xx,$01xx,$02xx,$03xx,$04xx, itd. aż do $FFxx. Ale nie bierz tej informacji zbyt dosłownie, ja tego nie sprawdzałem.

ad2) nigdy się nad tym nie zastanawiałem i również nie bardzo wiem :( Teraz nawet nie mam możliwości sprawdzenia.  Ale wydaje mi się że leci wszystko to co normalnie robi Antic, tylko CPU nie ma szans dostać się do szyny bo ma ustawiony HALT.

15

Ad.1. Starsze 8 bitów adresu mają wartość $FF, na młodszych wysyłany jest numer aktualnie odświeżanego wiersza (kolejno od $00 do $FF)
Ad.2. W trakcie realizacji rozkazu adr: STA WSYNC na magistrali adresowej pojawiają się kolejno wartości adr, adr+1, adr+2, a na magistrali danych kolejno $8D, $0A, $D4  Czasem przetykane wartościami wysyłanymi i odczytywanymi przez ANTIC :)

Ceterum censeo Germaniam esse delendam.

16

<prywata>
@Seban, czy Twoj adres gmailowy jest nadal aktualny?
Odezwij sie do mnie na prv jak znajdziesz chwile plis.
</prywata>

17

Hej!

Aktualny, odpisałem :)

pozdrawiam
Sebastian

18

Simius napisał/a:

Ad.2. W trakcie realizacji rozkazu adr: STA WSYNC na magistrali adresowej pojawiają się kolejno wartości adr, adr+1, adr+2, a na magistrali danych kolejno $8D, $0A, $D4  Czasem przetykane wartościami wysyłanymi i odczytywanymi przez ANTIC :)

Wyraziłem się nieprecyzyjnie - co jest na szynach po wykonaniu STA WSYNC, gdy 6502 jest wstrzymany, a ANTIC nie pobiera danych?

https://www.youtube.com/watch?v=jofNR_WkoCE

19

Tak podejrzewałem. :)
Po wykonaniu zapisu do WSYNC, ANTIC ustawia linię RDY w stan niski, co sprawia, że (kiedy ANTIC nie odwołuje się do pamięci) na szynie adresowej jest adres następnego rozkazu, a na szynie danych (z uwzględnieniem zależności czasowych cyklu odczytu) - jego kod.

Ceterum censeo Germaniam esse delendam.