To nie jest w 100% do tego dzialu, ale jedziemy:

Pracuje aktualnie nad programem monitorujacym Pasiowe rozszerzenia opartne na procu 65c816. Potrzebowalem procedury mierzacej czestotliwosc taktowania procesora, aby porownac jak w pamieci podstawowej tudziez dodatkowej (a propos: ma ktos jakies propozycje jak nazwac dodatkowa pamiec liniowa 816-tki w odroznieniu od pamieci bankowanej PORTem Be? Przydal by sie jakis standard co do tego). No to napisalem procke inkrementujaca rejestry miedzy dwoma VBL-ami, z czego moglem obliczyc ile taktow prockowi to zajelo. Ale wynik wychodzil mi jakis za maly. Pomyslalem, ze moze ANTIC jest troche niepewny co do tej 1/50 sekundy i napisalem inna procke wykorzystujaca liczniki POKEYa: ustawiam go na te 15 kHz i licze ile to cykli procka mija pomiedzy dwoma odliczeniami od 255 i naliczylem ich tyle, ze po paru przeksztalceniach wyszlo mi (jak w morde strzelil), ze procek chodzi z czestotliwoscia 1.6692 MHz.
   Wydaje mi sie, ze o wszystko zadbalem (wylaczylem wszystkie inne przerwania i DMA ANTICA: z DMA 8-liniowa DL-ka w GR.0 zjada dodatkowo 9%).
   Czy moglby ktos zatem:
a) podpowiedziec co moglem zrobic zle
b) wymyslic co jeszcze zjada te 6%
c) napisac, ze jestem gupi buc, bo wszyscy juz od dawna to wiedza

Jedyny fakt, jakiego jeszcze nie sprawdzile, to to, ze obliczenia przeprowadzilem w kodzie natywnym 65c816 i nie wykonywalem jeszcze testow na zwyklym 6502c ani na Atari800Win. Nie mysle jednak, ze cokolwiek moze to zmieniac (a moze sie myle?)

2

Przerwania VBL Antica są chyba najbardziej stabline - chodzą z małą częstotliwością i dodatkowo muszą być bardzo dokładne - bo przecież od tego układu zależy obraz na monitorze , więc nie może być sytuacji żeby wszystko sie rozjeżdżało !
2 sprawa to to że jest bardzo duży podział z 1.79 Mhz na 50 Hz co dodatkowo stablizuje 50Hz .

Co do procedurek to spróbuj ich w trybie emulacji - z tym że jeżeli stosujesz rozkazy skoków warunkowych to nie zapominaj że zawsze masz różnicę 1 cyklu gdy rozkaz jest wykonywany , nie jest wykonywany !
Co w przypadku liczenia na pełnym speedzie może wprowadzić duże różnice w obliczeniach.
przykładowo:
tu:
inc $fe     <-5 cykli 
bne tu   <2 lub 3 cykle
inc $ff      < 5 cykli
jmp tu   < 3 cykle

Teraz tak przy liczeniu tylko młodszego adresu procedurka wykonuje sie w 7 cykli ale juz przy obliczaniu starszego bajtu zajmuje 8 + 8 cykli !

3

Czy moglby ktos zatem:
a) podpowiedziec co moglem zrobic zle
b) wymyslic co jeszcze zjada te 6%
c) napisac, ze jestem gupi buc, bo wszyscy juz od dawna to wiedza

ANTIC kilka razy w czasie wyswietlania 1 linii wysyla impuls odswiezajacy pamieci dynamiczne i w tym czasie wysyla dla 6502 HALT-a i tego czynnika nie da sie wyeliminowac. Zauwaz, ze wedlug teoretycznych obliczen dzielac ok. 1,77 MHz przez 15625 (50 ramek * 312.5 linii) uzyskujesz w przyblizeniu liczbe 114, czyli tyle taktow powinienes miec w jednej linii przy wylaczonym ekranie, jednak w rzeczywistosci uzyskujesz 105 taktow. Te 9 taktow to wlasnie odswiezanie pamieci RAM. Wystarczy teraz pomnozyc owe 105 razy 15625 i wychodzi ci rzeczywista predkosc okolo 1,64 MHz. Gdzies kiedys uslyszalem, ze odswiezanie pamieci przez ANTIC nie jest zsynchronizowane z wyswietlaniem obrazu i czasami w jednej linii wypada (a moze przepada ;>) 8 taktow CPU, czyli wychodzi na to, ze Twoje wyniki sa jaknajbardziej poprawne.

4

Dzieki MacGyver. O tym odswierzaniu pamieci przez ANTICA nie pomyslalem. To by sie zgadzalo.  :)

Co do swietego: Dzieki za uwage. bralem to pod uwage (zreszta w moje procedurze cos takiego sie nie dzialo, bo inkrementowalem jeden 16-bitowy rejestr). Wzialem nawet pod uwage to, ze rozkaz WAI zatrzymuje sie na 2. cyklu i po przerwaniu konczy sie po nastepnych 2 cyklach :)

Dzieki i pozdrawiam,

5

Wzialem nawet pod uwage to, ze rozkaz WAI zatrzymuje sie na 2. cyklu i po przerwaniu konczy sie po nastepnych 2 cyklach :)

WAI ? To jakas zmieniona nazwa mnemonika dla NOP ?

6

Zegar jest 1773447 Hz, a ramka nie jest 50 Hz (bzdury pisałem w Syzygy). Linii jest 312, cykli w linii 114 (max. 105 dla procka). Można policzyć, że odświeżanie jest 1773447/312/114 czyli poniżej 50 Hz. WAI to rozkaz 816 "czekaj na przerwanie".

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

7

Zgadza sie - czestotliwosc zegara w systemie PAL powinna wynosic 1,773447 MHz i prawie wszystkie Atarki tyle maja. No wlasnie, prawie. Ale po kolei.

W komputerach Atari 800XL bez ukladu FREDDIE czestotliwosc taktujaca CPU byla tworzona za pomoca rezonatora kwarcowego, ktorego czestotliwosc rezonansowa byla dwukrotnie wyzsza. I tak dla systemu PAL jest to "kwarc" o czestotliwosci 3,546894 MHz, dla systemu NTSC 3,579545 MHz. Analogicznie posiadamy czestotliwosc 1,773447 MHz, a dla systemu NTSC 1,7897725 MHz (slynne zaokraglenie 1,79 MHz).

W atarynkach z ukladem FREDDIE jest to realizowane w ten sposob, ze czestotliwosc taktowania uzyskuje sie poprzez podzielenie przez 8 czestotliwosci podlaczonego "kwarca": 14,187576 MHz dla PAL i 14,31818 MHz dla systemu NTSC. 

I teraz pragne powrocic do owego "prawie" z poczatku - w czasach kiedy zajmowalem sie elektronika (montowalem rozszerzenia RAM i inne cuda) pamietam, ze zetknalem sie z kilkoma egzemplarzami atarynek serii XE (a wiec z ukladem FREDDIE), ktore pomimo, ze pracowaly z systemem PAL posiadaly kwarc 14,31818 MHz (czyli pracuja z zegarem 1,7897725 MHz!) - czyzby Atari wypuscilo to omylkowo ? W sumie roznica rzedu okolo 1% nie powinna byc praktycznie zauwazalna (chyba, ze przy testach pomiaru pojedynczych cykli). Osobom zainteresowanym polecam zajrzec "pod maske" swojego Atari (info dla posiadaczy emulator-a: nie zagladac do wnetrza grzybow, emulacja nie zapewnia bowiem 100% zgodnosci z oryginalem ;P ).

Natomiast jezeli chodzi o czestotliwosc odswiezania pionowego - nie musi to byc idealne 50 Hz (PAL) - od tego sa wlasnie impulsy synchronizacji poziomej i pionowej aby monitor dopasowal sie do parametrow wysylanych przez nadajnik (w tym przypadku Atari), oczywiscie w okreslonym przedziale czestotliwosci.

8

Odkopuję, bo mam pytanie w druga stronę :) Odpowiedź chyba znam, ale chcę się upewnić, czy się nie mylę. Wiadomo, że ANTIC kradnie CPU minimalnie 9 cykli na linię odświeżając pamięć. A ile potrafi ukraść maksymalnie? Dokładniej interesuje mnie, jak długo może być maksymalnie zatrzymany CPU. W atariki jest coś takiego jak Antic Timings, ale dobrze odczytuję ten diagram, że np. w pierwszej linii trybu $2 (GR.0) ANTIC bez przerwy czyta z pamięć od 24 do 210 cyklu koloru, a więc zatrzymując CPU na 94 cykle?

9

w trybach znakowych ANTIC w każdej pierwszej linii każdego wiersza kradnie tyle cykli że na pewno nie są to 114 cykle

zapisz obrazek w G2F jako GED+ (tryb znakowy) i zobaczysz ile cykli przychodzi na co 8 linie a ile na pozostałe, w trybie bitmapy (GED--) ANTIC już tyle nie kradnie, co najwyżej ustawienie nowego adresu pamięci w DLIST-ie kradnie parę cykli, wtedy obejrzyj źródło dla obrazka zapisanego jako GED-- (co 8 linie znowu jest parę cykli mniej, dla reszty już full, program DLIST-y dla GED-- ustawia nowy adres obrazu co 8 linii)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

10

co do nazwy pamieci - skoro w obszarze >64k antic juz nie kradnie, to mozna ja nazwac podobnie jak w innych sprzetach fast-ram
patrzac w oscyloskop antic zatrzymuje cpu 9 razy na linie, ale na ile cykli nie umiem powiedziec
te zatrzymania cpu widac na ekranie jako szersze pionowe pasy - szczegolnie dobrze to widac na monitorach
byl tez taki fajny scroll...

przechodze na tumiwisizm

11

Candle napisał/a:

co do nazwy pamieci - skoro w obszarze >64k antic juz nie kradnie, to mozna ja nazwac podobnie jak w innych sprzetach fast-ram

Toteż właśnie tak ją nazywamy.

KMK
? HEX$(6670358)

12

autor tematu pytal, a odpowiedz nie padla - przynajmniej w tym temacie :]
co prawda pytal w 2003 i do dzis to mogla mu sie ta nazwa nawet w zaparowanej lazience objawic, ale pytal

przechodze na tumiwisizm

13 Ostatnio edytowany przez epi (2009-02-17 19:29:21)

laoo/ng napisał/a:

ale dobrze odczytuję ten diagram, że np. w pierwszej linii trybu $2 (GR.0) ANTIC bez przerwy czyta z pamięć od 24 do 210 cyklu koloru, a więc zatrzymując CPU na 94 cykle?

Rozumiem, że chodzi o szeroki ekran? Z obrazka wynika, że do 213 cyklu koloru, czyli 95 cykli CPU. W sumie i tak za dużo skoro pierwszych trzech znaków nie wyświetla.

Heh, jakoś mi umknęło to opracowanie, teraz sobie zazakładkuję. :)

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