gdzie skacze 6502 po uruchomieniu, nie mam na myśli wektora RESET-u, tylko adres bodaj $C.... ?
ktoś z elektroników orientuje się ?
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
Nowa obudowa dla 800XL - zostało 36 dni Niewiele ponad miesiąc do końca kampanii.
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.
atari.area forum » Sprzęt - 8bit » skad startuje 6502 ?
Zaloguj się lub zarejestruj by napisać odpowiedź
gdzie skacze 6502 po uruchomieniu, nie mam na myśli wektora RESET-u, tylko adres bodaj $C.... ?
ktoś z elektroników orientuje się ?
Stawiam, ze bedzie to dosc losowy adres zalezny od aktualnego obciazenia linii adresowych (a moze i danych) i stanow ktore sie na nich pojawiaja w chwili startu procesora (moze to byc zalezne od konkretnego ukladu w ktorym jest zainstalowany. Ale na pewno to Kopernik byla kobieta ;)
gdzie skacze 6502 po uruchomieniu, nie mam na myśli wektora RESET-u, tylko adres bodaj $C.... ?
Dziwne pytanie. Po uruchomieniu 6502 skacze pod adres wskazywany wektorem RESET ($FFFC/D).
Hej!
Po resecie 6502 ustawia swój PC na wartość znajdującą się pod adresem $FFFC,$FFFD (to właśnie wektor reset, który Cię nie interesuje). Ale wystarczy przecież że zobaczysz sobie co jest w tych komórkach lub wykonasz jmp ($fffc). No chyba że chodzi Ci jeszcze o coś innego :) Napisz może dokładniej o co chodzi to postaramy się pomóc :)
Pecuś: nie za bardzo rozumiem o co Ci chodzi :) przecież to 6502 steruje szyną adresową i właśnie w chwili startu pierwsze co robi to ustala magistralę adresową na adres $FFFC aby odczytać pierwszy bajt tam znajdujący się, potem $FFFD ma już drugi bajt. Potem zapisuje odczytane wartości do rej. PC i rozpoczyna się szaleńcze wykonywanie programu :)
pozdrawiam
Seban
Tebemu zmąciła głowę któraś z książek pana Zientary chyba .... Zawsze tylko i wyłącznie wektor reset 0xfffc ;-)
Ok :)
macie racje panowie, 6502 rusza bezapelacyjnie spod adresu $FFFC..$FFFD, byłem już zdesperowany i szukałem dziury w całym
ogólnie odpalam kod dla a7800 poprzez zapisanie biosu w obszar $c000..$fffff, kod ktory działał na emulu wieszał MARIE, przyjrzałem się oryginalnemu biosowi z gra Asteroids i wyszło na to że Maria była źle inicjowana
było
lda #$07
sta INPTCTRL ; Lock into 7800 mode
a powinno być i taką wartość wpisuje bios z gra Asteroids:
lda #$02
sta INPTCTRL ; Lock into 7800 mode
No ale nie pamietam (stad moja odpowiedz), czy przerwania Reset nie wymusza sie z zewnatrz bezposrednio po starcie procesora. Nie pamietam czy nie jest tak w przypadku 6502, bo jesli po wlaczeniu wewnetrznie sam wywoluje sobie przerwanie Reset to faktycznie, ale wiele jest procesowow, w ktorych Reset przy wlaczaniu zasilania wywoluje uklad R/C , w takich przypadkach, bez tego ukladu procesor startuje calkowicie losowo.
Ze schematu Atari 800XL wynika ze tu tez bezposrednio po starcie sygnal Reset dla procesora jest wystawiany przez zewnetrzny uklad R/C , tak wiec faktycznie (bez zastosowania tego ukladu) 6502 moze startowac ze stanow nieustalonych.... trzeba by sprawdzic, tyle ze to i tak nie ma znaczenia jak widac po rozwoju dyskusji :)
A w 130XE jest nawet uklad czasowy na 555 zrobiony (wyzsza technika ;) ) wystawiajacy procesorowi Reset ulamek sekundy po wlaczeniu zasilania.
możemy być juz pewni że w XE/XL i 7800 CPU6502 startuje przez wektor RESET-u :)
A pamietacie stare 800XL, ktore czesto nieresetowaly sie po wlaczeniu (to znaczy po wylaczeniu na krocej niz 10-15s.) ?? Pewnie kondensator sie nie rozladowywal (dosc pojemy tam siedzi) :)
No i wtedy po wlaczeniu zasilania nie byl podawany sygnal Reset na procka i startowal losowo!!!
Pecuś: nie za bardzo rozumiem o co Ci chodzi :) przecież to 6502 steruje szyną adresową i właśnie w chwili startu pierwsze co robi to ustala magistralę adresową na adres $FFFC
A kto mu powie, ze wlasnie wystartowal?? Dla procesora wlaczenie zasilania niczym sie nie rozni od pracy od paru godzin. Sa jakos ustawione rejestry (przypadkowo), dziala zegar, wiec procesor pobiera nastepny rozkaz i stara sie go wykonac - po wlaczeniu zasilania trzeba go wiec szybko zresetowac by mial szanse wystartowac od wektora Reset.
ztcp pierwsze modele apple po starcie trzeba bylo recznie resetowac, bo nie mialy wspomnianego po starcie autoresetu i "sieka mode on". po resecie odpalany byl monitor, pozwalajacy np. na wklepanie heksami interpretera integer basica, ktory woz wklepywal z pamieci w 15min. ;)
btw. ów monitor ztcp miescil sie w jednej stronie pamieci, a mial calkiem sporo funkcji (edytowanie/wyswietlanie pamieci, wywolanie procedury)
generalnie 6502 startuje od stanow nieustalonych, tak jak wiekszosc starych prockow (nie wiem czy i nie nowych rowniez). to uklad "opoznionego resetu" powoduje skok do procedury inicjujacej...
Hej!
Proces startu wygląda tak, iż wspominany przez ciebie układ RC. W serii XE wspomagany przez układ 555, ma za zadanie utrzymać linię reset w stanie niskim jakiś czas po włączeniu zasilania. Ten czas jest przeznaczony na to aby wszystkie układy zaczęły poprawnie działać po włączeniu zasilania (chociażby kwarcowy generator sygnału zegarowego, potrzebuje chwili aby osiągnąć swoją częstotliwość pracy). Po tej chwili określonej przez stałą wspominanego układu RC, stan linii reset zmienia się na wysoki co powoduje iż 6502 startuje właśnie z pod adresu umieszczonego w pod $FFFC,$FFFD.
Co do twierdzenia że 6502 nie robi różnicy czy pracuje pięć godzin czy właśnie został włączony, masz zupełną tu 100% rację. Z punktu widzenia 6502 wszystko mu jedno czy pracował parę godzin czy ktoś właśnie wcisnął reset, czy został przed chwilą włączony.... 6502 nie widzi różnicy, próbuje ją natomiast dostrzec program zawarty w ROMie naszego ATARI, ale o tym poniżej, przy okazji dziwnego zachowania 800XL :)
Co do dziwnych efektów w 800XL, które nota bene zdarzały się również w serii XE. To że komputer nie wykonywał poprawcie zimnego startu jest swego rodzaju wadą (uproszczeniem w kodzie systemy operacyjnego). Otóż z tego co pamiętam procedura startu komputera zawarta w systemie operacyjnym próbuje sie zorientować czy jest to pierwsze włączenie komputera czy też zwykłe wciśnięcie reset po zawartości paru komórek pamięci... jeżeli wyłączyliśmy i włączyliśmy szybko nasze ATARI a zawartość pamięci RAM nie uległa całkowitemu wykasowaniu (a przez przypadek zawartość odpowiednich komórek RAM po których OS patrzy czy ma doczynienia z COLD/WARM START, została niezmieniona) to nasz OS spróbuje wykonać normalny RESET i uruchomić coś co było wcześniej w pamięci... a zawartość pamięci RAM po zaniku zasilania została na pewno częściowo uszkodzona... 6502 po prostu w którymś momencie się wiesza, próbując wykonać to co pozostało np. po wcześniej załadowanym DOS-sie lub jakiejś grze :)
ufff.... ale się nastukałem... to oto moja skromna teoria dotycząca włączania się naszych ATARI. Na potwierdzenie tej tezy może posłużyć Alexowe rozszerzenie pamięci oparte o kości statyczne kości RAM podtrzymywane litową baterią :) Jego ATARI z tą modyfikacją po wyłączeniu i włączeniu wykonywała za każdym razem poprawny start :) np. jeżeli był załadowany DOS, OS ATARI wykonywał poprawny WARM START. Wyglądało to tak jakbyś przed momentem wcisnął po prostu reset :)
Zauważyłem iż zachowanie się poszczególnych komputerów po krótkim wyłączeniu zasilania, jest zależne od zastosowanych kostek DRAM. Niektóre tracą zapisane w nich dane błyskawicznie, a niektóre potrafią zachować informację zapisaną w nich przez jakiś czas po odłączeniu zasilania (o dziwo mimo braku odświeżania jak i zasilania) ;-) niektóre kostki po takim zdarzeniu pozostawiają w sobie informację szczątkową, ale na tyle właściwą z punktu widzenia ATARI OS iż myśli że ma wykonać WARM START :)
pozdrawiam
Seban
oto moja skromna teoria dotycząca włączania się naszych ATARI
Dokładnie tak jest, procedura wskazywana wektorem RESET sprawdza, czy komórki $033d-$033f zawierają kolejno $5c, $93, $25 i jeśli tak jest, OS wybiera procedurę ciepłego startu, a w przeciwnym wypadku zimnego. Dodatkowo jeszcze potem, jeśil OS wybrał już ciepły start, a pod $0244 jest wartość różna od zera, następuje przejście do startu zimnego.
Metoda jest tyleż prosta, co skuteczna, pod warunkiem jak wyżej, że wyłączenie zasilania powoduje skasowanie zawartości RAM-u...
Hej!
generalnie 6502 startuje od stanow nieustalonych, tak jak wiekszosc starych prockow (nie wiem czy i nie nowych rowniez). to uklad "opoznionego resetu" powoduje skok do procedury inicjujacej...
nie..nie...nie... 6502 zawsze startuje od $FFFC,$FFFD. Opóźnienie jest potrzebne np. po to aby reszta układów się pozbierała (np. generator sygnału zegarowego), czeka się również po to aby napięcie zasilania się ustabilizowało. 6502 po podaniu podaniu sygnału RESET zawsze, ale to zawsze wystartuje spod wektora RESET-u. Nie ma innej możliwości :D To późniejsze zachowania systemu operacyjnego ma znaczenie :)
Owszem jeżeli by włączyć 6502, a nogę ~RESET podpiąć na stałe do +5V to mogły by się dziać cuda ze względu np. na powolny start generatora zegarowego. Ale poprawnie zaprojektowany system zawsze poprawnie wystartuje! nie ma innej możliwości. Obecne mikro-kontrolery maja wbudowane układy zapewniające start, dopiero w momencie gdy napięcie zasilania osiągnie odpowiednią wartość i do tego generator sygnału zegarowego wygeneruje np. 1024 poprawne takty :)
pozdrawiam
Seban
seban: nadal uwazam ze 6502 startuje DOPIERO PO RESECIE z adresu $FFFC, $FFFD, bo (tak jak to opisal pecus) po wlaczeniu zasilania rejestry (w tym i PC) maja stany nieustalone!
btw. apple I uwazasz za "nie poprawnie zaprojektowany system"? polecam Apple I Operational Manual w ktorym to opis procedury testowej zaczyna sie mniej wiecej tak (strona druga):
FIRST: Hit the RESET button to enter the system monitor.
3 kolejne strony nizej to dump romu appla ktory konczy sie:
FFFC: 00 FF (RESET)
FFFE: 00 00 (IRQ)
gdyby odpalal sie od adresu FFFC to po kiego trzeba by bylo rozpoczynac od wciskania RESET button?
jellonek: widać w Apple włączenie zasilania nie powoduje podania procesorowi sygnału RESET. Ergo: nie jest to poprawnie zaprojektowany system :)
draco030: :D no ten wozniak to jakis leszczu pewnie byl ;)
btw. za tym linkczersem:
Uruchomienie systemu
Jedną z pierwszych czynności przed uruchomieniem Apple II powinno być podłączenie odbiornika tv do modulatora RF (lub podłączenie monitora), paddles oraz magnetofonu kasetowego. Po włączeniu zasilania, na ekranie pojawiały się z reguły różne "śmieci" (znaki alfanumeryczne lub kolorowe bloki grafiki lo-res). Po wciśnięciu klawisza RESET (z prawej strony na górze), rozlegał się beep i pojawiała "gwiazdka" (*) oraz migający kursor w formie bloku - czyli prompt Monitora.
jell: no sam widzisz :P
Cytuję: "Konieczność istnienia i używania tego sygnału (RST) stanie się oczywista, gdy sobie uświadomić, że po włączeniu zasilania zawartość wszystkich rejestrów mikroprocesora może być (i jest) przypadkowa. (...) Napięcie Vcc rośnie (...) do 5 V. Układ zegara zaczyna działać jeszcze przed osiągnięciem 5 V, a na pewno działa poprawnie przy 4,75 V. Tak samo mikroprocesor: przy 4,75 V jest juz gotów do normalnej działalności. Od tej chwili powinien jeszcze co najmniej przez dwa takty dostawać sygnał zerowania (tj. RST = 0)".
Wozniakowi pewnie nie chciało się robić układu opóźniającego start do momentu "pozbierania się", jak to ujął Seban, wszystkich układów po włączeniu zasilania. W rzeczy samej, dużo łatwiej jest napisać w manualu "Hit RESET first" :P
seban: nadal uwazam ze 6502 startuje DOPIERO PO RESECIE z adresu $FFFC, $FFFD, bo (tak jak to opisal pecus) po wlaczeniu zasilania rejestry (w tym i PC) maja stany nieustalone!
Ok... ale weź po uwagę iż przy włączaniu systemu linia RESET ma stan niski, wiec powinno 6502 i tak wchodzi w stan resetu :D Także nawet jak 6502 ma po włączeniu chaos w swoich rejestrach i tak zostają one wyzerowane :) Są procki i systemy które linie reset maja po prostu podpiętą na sztywno do +5V przez rezystor np. 1K :) Jedynym warunkiem do poprawnego startu w takim wypadku jest odpowiednio szybki start zasilacza (określony jako parametr zostaje max. czas narastania napięcia z poziomu 0 do 5V)
btw. apple I uwazasz za "nie poprawnie zaprojektowany system"? polecam Apple I Operational Manual w ktorym to opis procedury testowej zaczyna sie mniej wiecej tak (strona druga): FIRST: Hit the RESET button to enter the system monitor.
no bubel totalny :D nie wiedziałem że taka lipę wypuścili :) Układ za $0.5 rozwiązał by im sprawę :) Albo 3 elementy (rezytor,kondensator i dioda).
3 kolejne strony nizej to dump romu appla ktory konczy sie:
FFFC: 00 FF (RESET) FFFE: 00 00 (IRQ)
gdyby odpalal sie od adresu FFFC to po kiego trzeba by bylo rozpoczynac od wciskania RESET button?
Jell: 6502 nie startuje spod $FFFC tylko pobiera bajty z lokacji $FFFC,$FFFD a potem wykonuje skok pod adres tam zawarty :) Wiec procesor powinien ustawić swój PC na adres $F000 i tam zacząć wykonywać program... dlaczego się tak nie dzieje... być może dlatego że właśnie generator sygnału zegarowego zaczyna działać wcześniej powiedzmy od 2V... procek przy tym napięciu nic poprawnego nie zdziała a jednak zaczyna być już taktowany przez sygnał zegarowy, do tego wszystkiego Linia reset nie jest wyzerowana, bo konstruktor tego kompa np. podpiął ją tylko do przycisku reset nie zapewniając odpowiedniego opóźnienia... wiec zaczynają sie dziać cuda... i po prostu następuje zwis procka który nie działa poprawnie jeszcze bo napięcie mamy dopiero np. 3V...
Inna teoria może być to iż 6502 działa zupełnie poprawnie ale reszta układów potrzebuje dłuższej chwili na start, czego twórcy Apple I nie zapewnili i poszli na łatwiznę... weź se stary wciśnij reset jak się wszystko rozbuja i nie truj :)
pozdrawiam
Seban
Jell: 6502 nie startuje spod $FFFC tylko pobiera bajty z lokacji $FFFC,$FFFD a potem wykonuje skok pod adres tam zawarty
mam sie obrazic? ;) wyzej inni rowniez uzywali tego skrotu myslowego ze niby "startuje od adresu FFFC" w miejscu "startuje od adresu wskazywanego przez FFFC".
ps. nie mam apple i wcale nie jestem stary ;)
ps2. jak juz to z powyzszego wynika ze powinien skoczyc pod $FF00 a nie $F000 :D
hej!
nie no.... żadnych obrażań proszę mi tu nie robić :) ja tak mam... palnę zanim zdążę pomyśleć :)
ad ps) to było tylko takie moje pierniczenie co mógł powiedzieć innym Woźniak jak powiedzieli że im nie startuje :)
ad ps2) no 100% racja... latka już nie te ślepota i problemy z trafianiem w odpowiednie klawisze :)
pozdr
Seban
Nie sadzilem ze takie pytanie padnie z ust znanego kodera :)
Na to pytanie znakomicie odpowiadaja dwie pozycje:
'6502 Datasheet' ze strony WDC
oraz
'Mikroprocesor 6502 i jego rodzina' Kulpa, WŁT,
Prawidłowa odpowiedz jak juz koledzy podpowiadaja to zawsze i wszedzie wektor $FFFC.
Bardzo dobrze na to pytanie odpowiada również Ruszczyc. A TeBe swoimi ostatnimi pytaniami na forum to chyba się zgrywa.
Epi: gadasz jakbys pierwszy raz na forum byl...
Zaloguj się lub zarejestruj by napisać odpowiedź
atari.area forum » Sprzęt - 8bit » skad startuje 6502 ?
Wygenerowano w 0.028 sekund, wykonano 70 zapytań