Dlaczego w Atari używana jest linia RDY?
Czy nie prościej byłoby wstrzymywać CPU linią HALT?
Próbuję zrozumieć, dlaczego między ANTICiem i 6502 biegną te dwie linie, zamiast jedna.
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
Zmarł twórca języka BASIC Zmarł Thomas E. Kurtz twórca języka BASIC
Zmiana serwera atari.area Serwis przeszedł właśnie ważną aktualizację infrastruktury
4th Atari ASCII Compo - wyniki Dostępne są już wyniki tegorocznego ATASCII Compo.
thing neo 1.60 Olivier Landemarre wydał nową wersję desktopu Thing.
VIII. Basque Tournament of Atari 2600 Kolejna relacja, wśród otrzymywanych od naszego przyjaciela Egoitza z Kraju Basków.
atari.area forum » Sprzęt - 8bit » RDY vs HALT
Zaloguj się lub zarejestruj by napisać odpowiedź
Dlaczego w Atari używana jest linia RDY?
Czy nie prościej byłoby wstrzymywać CPU linią HALT?
Próbuję zrozumieć, dlaczego między ANTICiem i 6502 biegną te dwie linie, zamiast jedna.
-> Fox - nie analizowałem tego (jakoś nie miałem dotychczas potrzeby), ale wydaje mi się z naciskiem na to słowo, że RDY powoduje zapętlenie CPU na rozkazie (i w ten sposób jego zatrzymanie), a HALT z pewnością ODŁĄCZA magistrale Sally od szyn aby procesor nie miał kompletnie wpływu na system (przeszkadzałby Anticowi oczywiście w dostępie do pamięci)
Nie wiem dokładnie jak działa HALT w takim sensie jak RDY odnośnie zatrzymania CPU. Niestety - nie ma dokumentacji. Można ewentualnie posiłkować się informacjami dot. MC6800 gdzie HALT kompletnie zatrzymuje CPU włącznie z wyłączeniem przerwań. MC6800 nie ma linii RDY...
No właśnie. W pierwszej skanlinii trybów ANTIC 2-5 ANTIC wstrzymuje 6502 HALTem na jakieś 80 cykli. Dlaczego nie zrobiono tak samo z WSYNC, tylko użyto RDY ?
a może po to, by ANTIC (HALT) odwalił robotę z odświeżaniem pamięci DRAM...?
skłaniam się do wniosku pancio.net
edit:
Trzeba by wziąć analizator, stanąć na liniach adresowych i popatrzeć co wyrabia Antic względem /HALT. Jeżeli zatrzymuje CPU a pojawiają się adresy na szynie - to jednoznacznie pokazuje, że Antic wystawia adresy ponieważ nic innego w systemie Atari nie może tego zrobić.
o ile pamiętam to RDY "mrozi" stan magistrali na czas wstrzymywania procka, przykładowo wykorzystuje się to do odczytu np pamięci o większym czasie dostępu gdzie wydłuża się czas o 1 cykl ale przy "zamrożonej" magistrali, wersja sally o ile pamiętam da się zatrzymać tylko w cyklu odczytu,jak dobrze pamiętam HALT wstrzymuje procesor oraz odłącza go od magistrali dzięki czemu inny układ może działać jako DMA , przy RDY tego nie da się zrobić.
Prawdopodobnie przedmówcy mają rację że pewnie chodzi o odświeżanie pamięci , musiałbym popatrzyć na schemat atari
Tak mi się przynajmniej wydaje bawiąc się prockami, raz używałem lini RDY do wstrzymywania procka na 1 cykl przy wolnym ADC ale to było przy 12Mhz
Część odpowiedzi jest nielogiczna albo wynikająca z niezrozumienia pytania. Przecież rezygnacja z RDY i zatrzymywanie CPU tylko HALTem nie przeszkadza w żaden sposób w odświeżaniu pamięci w dotychczasowy sposób.
Wiele wskazuje, że prawidłowa odpowiedź na to pytanie brzmi - bo tak. W każdym razie jeśli odepnie sie wejście RDY procesora od ANTIC, podłączy je na stałe do +5V, a sygnały HALT i RDY z ANTIC przepuści przez bramkę AND i poda na HALT CPU to komputer, wyglada na to, pracuje poprawnie. Jeśli zmieni się kolor linii zaraz po WSYNC, to charakterystyczny schodek pojawia się tam, gdzie powinien. Nie wchodziłem głęboko w testy, ale zapuściłem kilka gier, Sys Info i demo NEAR, w którym znajdują się liczne odwołania do WSYNC - nie widzę różnicy. Obrazki z Rasta Converter (parę zapisów do WSYNC co ramkę) też wyglądają prawidłowo.
Z drugiej strony - Acid800 wiesza się na ciemno przy drugiej linii (test znaczników), ale to specyficzny program, odbiegający od typowych zastosowań. W każdym razie zasadniczy cel istnienia WSYNC - możliwość wstrzymania CPU do końca linii np. dla synchronizacji kreślenia grafiki, jest osiągniety.
Z tego wynika, że HALT odłączając szyny działa również jak RDY powodując powstrzymanie CPU od dalszego wykonywania rozkazów - ponieważ i tak za bardzo by nie miał jak tego zrobić. Brak dokumentacji niestety powoduje takie "dziury" w rozumieniu.
Ale był układ, który to implementował. Na tej samej zasadzie są robione konwertery, żeby zwykłe 6502 udawało Sally.
Jako, że jestem w fazie poszukiwania CPU - nie ma ktoś płytki takiego konwertera 6502 na 6502C? Szczytem marzeń była by płytka dip (smd mi średnio wychodzi :|). Chyba, że ktoś ma na stanie za dużo oryginałów i nie za miliardy, to też chętnie bym zanabył.
Simius, dzięki za zrozumienie i za test!
nie ma ktoś płytki takiego konwertera 6502 na 6502C?
Zapytaj Mq - robił swego czasu dla mnie. od razu powiem, że nie z każdym komputerem działa prawidłowo, więc może być różnie.
Jeśli Mq nie ma, a chciałby załóżmy się dogadać - jakąś serię płytek można wykonać, ale cudów nie należy się spodziewać.
jakby co ja mam... mam też 65c02 na 6502c
Dzięki Sikor za info.
panicio.net - wysłałem PW.
Swoją drogą, NMOS-owe 6502 nie powinny być HALTowane na tak długo - najdłuższy ciągły HALT w pierwszej linii szerokiego trybu tekstowego to ok. 54μs, podczas gdy w datasheecie 6502 Rockwella maksymalny czas cyklu to 10μs, u Synerteka 40μs (w praktyce pewnie ze sporym marginesem). W przypadku wstrzymania sygnału zegara na dłuższy czas, istnieje ryzyko rozładowania pojemności tranzystorów i "zgubienia" części stanu procesora w nich przechowywanego. 0 na linii RDY nie wstrzymuje zegara, dlatego procesor może pozostawać w tym stanie dowolnie długo, a najdłuższy WSYNC to ok. 64μs. Być może wywałka Acid800 to właśnie skutek przekroczenia fizycznego limitu czasu cyklu i rozładowania którychś pojemności z powodu zbyt długiego HALT.
to może prościej zapytać Avery Lee :)
epi, halt nie zatrzymuje zegara, więc nie ma to znaczenia
fox, rdy działa w nmosowych procesorach tylko przy odczycie, nie ma wpływu na zapis, stąd też nie można "dosynchronizować" przez rdy wolniejszego (w rozumieniu zapisu) urządzenia na magistrali do szybszego procesora - przy odczycie, procesor po prostu ponawia odczyt w kolejnym cyklu, ale zapis odbywa się tylko raz
halt jak już to napisano zdejmuje procesor z magistrali, umożliwiając antikowi adresacje pamięci - tego rdy nie zrobi (tak jak napisał już święty)
cmosowy cpu ponawia tak zapis jak i odczyt
Candle, byłoby to bez sensu, bo z włączonym zegarem i odłączoną magistralą adresową 6502 chodziłby dalej, łykając dane z czegokolwiek, co ANTIC zaadresuje, a czasami powodowałby konflikt na szynie danych.
Zobacz schemat. HALT zatrzymuje Φ0 i to celowo w stanie niskim, kiedy CPU dodatkowo sam odłącza magistralę danych.
przy odczycie, procesor po prostu ponawia odczyt w kolejnym cyklu, ale zapis odbywa się tylko raz
ale to oznacza ze rozkaz odczytu ktory ma np. 4 cykle moze miec 5? wydawalo mi sie ze NMOS podczas wykonywania rozkazu moze miec cykle zapisu falszywymi danycmi ale nigdy odczytu (stad trik na procesorach NMOS z resetowaniem przerwan jednym rozkazem ktore nie dziala na CMOS)... czy to nie o tych cyklach mowa.
cmosowy cpu ponawia tak zapis jak i odczyt
To by oznaczało, że I/O wrażliwe na zapis (np. port z autoinkrementacją adresu przez który przepycha się dane do urządzenia) z 65Cxx(x) będzie działał źle? Ładne rzeczy.
mono, nie. RDY w zamierzeniu powinno być kontrolowane przez to urządzenie lub pamięć, do którego odnosi się adres. Jeżeli port z autoinkrementacją nie wystawia !RDY, to problem nie istnieje. A jeżeli chce wystawiać !RDY przy zapisie, to tylko w celu zasygnalizowania, że chwilowo nie może przyjmować więcej danych i nie będzie sobie inkrementował adresu.
Mnie chodzi o sytuację kiedy CPU jest chwilowo wstrzymywany przez ANTIC-a - a przecież ja (program) nie wiem czy nie zostałem zablokowany właśnie na zapisie do I/O. I/O (będące np na cartridge-u, bo przecież nie wszystko musi być zaraz wmontowane do komputra) samo z siebie nie wystawia nic przecież, a tylko obsługuje zapis.
Edit: Ja Program.
Edit 2: Aaaaa, RDY jest wystawiane tylko w reakcji na zapis WSYNC. To już wszystko jasne.
Zaloguj się lub zarejestruj by napisać odpowiedź
atari.area forum » Sprzęt - 8bit » RDY vs HALT
Wygenerowano w 0.022 sekund, wykonano 66 zapytań