6502

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 16:15, 9 sty 2011
KMK (Dyskusja | wkład)
(Błędy w 6502)
← Previous diff
Aktualna wersja
KMK (Dyskusja | wkład)
(Parametry)
Linia 14: Linia 14:
W przestrzeni adresowej 6502 jest wyróżniony obszar przeznaczony na stos - jest to obszar od $0100 do $01FF. W przestrzeni adresowej 6502 jest wyróżniony obszar przeznaczony na stos - jest to obszar od $0100 do $01FF.
 +
 +Różne źródła różnie oceniają liczbę tranzystorów, z której składa się procesor: od [http://visual6502.org/wiki/index.php?title=Chips_in_our_collection 3510], poprzez [http://www.righto.com/2013/09/intel-x86-documentation-has-more-pages.html 6630] aż do około 9000.
== Błędy w 6502 == == Błędy w 6502 ==
-* dodawanie i odejmowanie w trybie dziesiętnym ustawia znaczniki N i Z nieodpowiednio dla uzyskanego wyniku dziesiętnego (odzwierciedlają one cząstkowy wynik binarny operacji, przed korekcją dziesiętną)+* dodawanie i odejmowanie w trybie dziesiętnym ustawia znaczniki N, V i Z nieodpowiednio dla uzyskanego wyniku dziesiętnego (odzwierciedlają one cząstkowy wynik binarny operacji, przed korekcją dziesiętną)
* rozkaz JMP ($xxFF) pobierze adres skoku z komórek $xxFF/$xx00 zamiast z $xxFF/$xy00. * rozkaz JMP ($xxFF) pobierze adres skoku z komórek $xxFF/$xx00 zamiast z $xxFF/$xy00.
* rejestr znaczników zapisany na stos przez PHP ma zawsze ustawiony bit B * rejestr znaczników zapisany na stos przez PHP ma zawsze ustawiony bit B
Linia 23: Linia 25:
* wystąpienie przerwania nie wyłącza trybu dziesiętnego ALU * wystąpienie przerwania nie wyłącza trybu dziesiętnego ALU
* wystąpienie przerwania podczas wykonywania rozkazu BRK spowoduje, że zostanie on zignorowany. * wystąpienie przerwania podczas wykonywania rozkazu BRK spowoduje, że zostanie on zignorowany.
-* jednoczesne wystąpienie przerwania [[NMI]] oraz [[IRQ]] powoduje, że to pierwsze zostanie zignorowane (jest to w zasadzie błąd w oryginalnej dokumentacji 6502, który spowodował, że sygnał NMI podawany przez układy specjalizowane zbudowane na jej podstawie - np. [[ANTIC]] - jest za krótki w stosunku do rzeczywistych wymagań procesora).+* jednoczesne wystąpienie przerwania [[NMI]] oraz [[IRQ]] powoduje, że to pierwsze zostanie zignorowane (jest to w zasadzie błąd w oryginalnej dokumentacji 6502, który spowodował, że sygnał NMI podawany przez układy specjalizowane zbudowane na jej podstawie - np. [[ANTIC (układ)|ANTIC]] - jest za krótki w stosunku do rzeczywistych wymagań procesora). Ten błąd [http://atariage.com/forums/topic/148595-how-can-pokey-irq-timers-mess-up-nmi-timing/page-8#entry1822388 można poprawić].
* obsługa przerwania NMI, które wystąpiło podczas wykonywania odgałęzienia ("wykonany" rozkaz Bxx), jest opóźniona do chwili zakończenia wykonywania rozkazu następnego po odgałęzieniu, zamiast rozpoczynać się w chwili zakończenia samego rozkazu odgałęzienia ([http://www.atariage.com/forums/topic/168550-a-taken-branch-before-nmi-delays-nmi-execution-by-one-full-instruction/ źródło]). * obsługa przerwania NMI, które wystąpiło podczas wykonywania odgałęzienia ("wykonany" rozkaz Bxx), jest opóźniona do chwili zakończenia wykonywania rozkazu następnego po odgałęzieniu, zamiast rozpoczynać się w chwili zakończenia samego rozkazu odgałęzienia ([http://www.atariage.com/forums/topic/168550-a-taken-branch-before-nmi-delays-nmi-execution-by-one-full-instruction/ źródło]).
 +
=== "Zbędne" odczyty i zapisy === === "Zbędne" odczyty i zapisy ===
* rozkazy typu ''read-modify-write'' (ASL, DEC, INC, LSR, ROL, ROR) wykonują dwa zapisy do modyfikowanej komórki pamięci, z czego za pierwszym razem procesor zapisuje odczytaną z komórki wartość. * rozkazy typu ''read-modify-write'' (ASL, DEC, INC, LSR, ROL, ROR) wykonują dwa zapisy do modyfikowanej komórki pamięci, z czego za pierwszym razem procesor zapisuje odczytaną z komórki wartość.
* rozkazy w indeksowanym trybie adresowania (abs,X i abs,Y) dokonują dodatkowego odczytu spod niewłaściwego adresu, jeśli dodanie adresu bazowego i indeksu powoduje zwiększenie starszego bajtu adresu efektywnego (czyli jego "przejście" na następną stronę). * rozkazy w indeksowanym trybie adresowania (abs,X i abs,Y) dokonują dodatkowego odczytu spod niewłaściwego adresu, jeśli dodanie adresu bazowego i indeksu powoduje zwiększenie starszego bajtu adresu efektywnego (czyli jego "przejście" na następną stronę).
* wykonany rozkaz odgałęzienia (Bxx) powoduje dodatkowy odczyt spod niewłaściwego adresu, jeśli przeskok jest na sąsiednią stronę. * wykonany rozkaz odgałęzienia (Bxx) powoduje dodatkowy odczyt spod niewłaściwego adresu, jeśli przeskok jest na sąsiednią stronę.
 +* występuje zbędny odczyt następnej po rozkazach BRK, RTS, RTI komórki pamięci.
Błędów tych pozbawione są późniejsze wersje procesora, tj. [[65C02]] oraz [[65C816]]. Błędów tych pozbawione są późniejsze wersje procesora, tj. [[65C02]] oraz [[65C816]].
== Ciekawostki == == Ciekawostki ==
-* Procesor ma pewną liczbę nieudokumentowanych rozkazów. Szczegóły działania części z nich zależą od konkretnej wersji procesora. Dlatego, mimo że zastępują one w niektórych przypadkach kilka rozkazów standardowych, nie jest zalecane ich używanie.+* Procesor ma pewną liczbę [[Nieudokumentowane rozkazy 6502C|nieudokumentowanych rozkazów]]. Szczegóły działania części z nich zależą od konkretnej wersji procesora. Dlatego, mimo że zastępują one w niektórych przypadkach kilka rozkazów standardowych, nie jest zalecane ich używanie.
* Listing programu przeznaczony dla procesora 6502 był wykorzystany w filmie "The Terminator" (1984, pol. '''Elektroniczny Morderca''') przy wyświetlaniu obrazu z kamery Terminatora T800 Model 101. Jest to listing programu dla komputera Apple II. * Listing programu przeznaczony dla procesora 6502 był wykorzystany w filmie "The Terminator" (1984, pol. '''Elektroniczny Morderca''') przy wyświetlaniu obrazu z kamery Terminatora T800 Model 101. Jest to listing programu dla komputera Apple II.
* Robot Bender, bohater serialu animowanego ''Futurama'', będącego jedną z głównych atrakcji czwartego [[Sztab Małopolska|Sztabu Małopolska]], ma "mózg" zbudowany na procesorze 6502, o czym dowiadujemy się z odcinka pod tytułem "Fry & the Slurm Factory". * Robot Bender, bohater serialu animowanego ''Futurama'', będącego jedną z głównych atrakcji czwartego [[Sztab Małopolska|Sztabu Małopolska]], ma "mózg" zbudowany na procesorze 6502, o czym dowiadujemy się z odcinka pod tytułem "Fry & the Slurm Factory".
Linia 39: Linia 43:
== 6502 w Atari == == 6502 w Atari ==
-Komputery serii [[400/800]] są wyposażone w układ 6502A lub 6502B. Są to "szybsze", czyli przystosowane do pracy z szybszym zegarem, wersje 6502. Zwykły 6502 może działać z częstotliwością do 1 MHz, wersja A do 2 MHz, a wersja B do 3 MHz.+Komputery serii [[400/800]] są wyposażone w układ 6502A lub 6502B. Są to "szybsze", czyli przystosowane do pracy z szybszym zegarem, wersje 6502. Zwykły 6502 może działać z częstotliwością do 1 MHz, wersja A do 2 MHz, a wersja B do 3 MHz (zob. H. Kruszyński, K. Kulpa, ''Mikroprocesor 6502 i jego rodzina'', NOT, Warszawa 1989, str. 43).
Serie [[XL]] i [[XE]] mają jeszcze nieco zmodyfikowany procesor, znany jako [[6502C]]. Zmiana w stosunku do oryginału polega na dodaniu linii HALT, której uaktywnienie powoduje zatrzymanie procesora i odłączenie go od magistrali. W modelach 400/800 robił to oddzielny obwód złożony z elementów dyskretnych. Serie [[XL]] i [[XE]] mają jeszcze nieco zmodyfikowany procesor, znany jako [[6502C]]. Zmiana w stosunku do oryginału polega na dodaniu linii HALT, której uaktywnienie powoduje zatrzymanie procesora i odłączenie go od magistrali. W modelach 400/800 robił to oddzielny obwód złożony z elementów dyskretnych.
 +
 +Numery katalogowe Atari:
 +
 +* 6502A: ?
 +* 6502B: '''C014377'''
 +* 6502C: '''C014806'''
Szybkość taktowania procesora w Atari zależy od tego, do jakiego systemu telewizji przystosowany jest komputer: Szybkość taktowania procesora w Atari zależy od tego, do jakiego systemu telewizji przystosowany jest komputer:
Linia 52: Linia 62:
* [[6502C]] * [[6502C]]
* [[65C02]] * [[65C02]]
 +* [[65C802]]
* [[65C816]] * [[65C816]]
* [[6507]] * [[6507]]

Aktualna wersja

Procesor produkowany przez MOS Technology. Pierwszy raz wprowadzony do produkcji we wrześniu 1975 roku, wytwarzany przy wykorzystaniu technologii NMOS. Procesor w odróżnieniu od innych rówieśników nie był budowany w oparciu o mikrokod, był wewnętrznie prostszy i mógł pracować z mniejszymi częstotliwościami zewnętrznymi (zwykle pomiędzy 1 a 2 MHz), osiągając przy tym porównywalną wydajność. Obniżało to koszt układów z nim współpracujących, wykorzystywanych w komputerze.

Spis treści

Parametry

  • ośmiobitowa szyna danych
  • szesnastobitowe adresowanie
  • 56 udokumentowanych rozkazów
  • 13 trybów adresowania
  • jeden ośmiobitowy rejestr ogólnego przeznaczenia (A - akumulator)
  • dwa ośmiobitowe rejestry indeksujące (X i Y)
  • ośmiobitowy rejestr statusu - P
  • ośmiobitowy wskaźnik stosu - S
  • szesnastobitowy licznik programu - PC

W przestrzeni adresowej 6502 jest wyróżniony obszar przeznaczony na stos - jest to obszar od $0100 do $01FF.

Różne źródła różnie oceniają liczbę tranzystorów, z której składa się procesor: od 3510, poprzez 6630 aż do około 9000.

Błędy w 6502

  • dodawanie i odejmowanie w trybie dziesiętnym ustawia znaczniki N, V i Z nieodpowiednio dla uzyskanego wyniku dziesiętnego (odzwierciedlają one cząstkowy wynik binarny operacji, przed korekcją dziesiętną)
  • rozkaz JMP ($xxFF) pobierze adres skoku z komórek $xxFF/$xx00 zamiast z $xxFF/$xy00.
  • rejestr znaczników zapisany na stos przez PHP ma zawsze ustawiony bit B

Błędy związane z przerwaniami

  • znaczniki są nieustalone po RESET
  • wystąpienie przerwania nie wyłącza trybu dziesiętnego ALU
  • wystąpienie przerwania podczas wykonywania rozkazu BRK spowoduje, że zostanie on zignorowany.
  • jednoczesne wystąpienie przerwania NMI oraz IRQ powoduje, że to pierwsze zostanie zignorowane (jest to w zasadzie błąd w oryginalnej dokumentacji 6502, który spowodował, że sygnał NMI podawany przez układy specjalizowane zbudowane na jej podstawie - np. ANTIC - jest za krótki w stosunku do rzeczywistych wymagań procesora). Ten błąd można poprawić.
  • obsługa przerwania NMI, które wystąpiło podczas wykonywania odgałęzienia ("wykonany" rozkaz Bxx), jest opóźniona do chwili zakończenia wykonywania rozkazu następnego po odgałęzieniu, zamiast rozpoczynać się w chwili zakończenia samego rozkazu odgałęzienia (źródło).

"Zbędne" odczyty i zapisy

  • rozkazy typu read-modify-write (ASL, DEC, INC, LSR, ROL, ROR) wykonują dwa zapisy do modyfikowanej komórki pamięci, z czego za pierwszym razem procesor zapisuje odczytaną z komórki wartość.
  • rozkazy w indeksowanym trybie adresowania (abs,X i abs,Y) dokonują dodatkowego odczytu spod niewłaściwego adresu, jeśli dodanie adresu bazowego i indeksu powoduje zwiększenie starszego bajtu adresu efektywnego (czyli jego "przejście" na następną stronę).
  • wykonany rozkaz odgałęzienia (Bxx) powoduje dodatkowy odczyt spod niewłaściwego adresu, jeśli przeskok jest na sąsiednią stronę.
  • występuje zbędny odczyt następnej po rozkazach BRK, RTS, RTI komórki pamięci.

Błędów tych pozbawione są późniejsze wersje procesora, tj. 65C02 oraz 65C816.

Ciekawostki

  • Procesor ma pewną liczbę nieudokumentowanych rozkazów. Szczegóły działania części z nich zależą od konkretnej wersji procesora. Dlatego, mimo że zastępują one w niektórych przypadkach kilka rozkazów standardowych, nie jest zalecane ich używanie.
  • Listing programu przeznaczony dla procesora 6502 był wykorzystany w filmie "The Terminator" (1984, pol. Elektroniczny Morderca) przy wyświetlaniu obrazu z kamery Terminatora T800 Model 101. Jest to listing programu dla komputera Apple II.
  • Robot Bender, bohater serialu animowanego Futurama, będącego jedną z głównych atrakcji czwartego Sztabu Małopolska, ma "mózg" zbudowany na procesorze 6502, o czym dowiadujemy się z odcinka pod tytułem "Fry & the Slurm Factory".

6502 w Atari

Komputery serii 400/800 są wyposażone w układ 6502A lub 6502B. Są to "szybsze", czyli przystosowane do pracy z szybszym zegarem, wersje 6502. Zwykły 6502 może działać z częstotliwością do 1 MHz, wersja A do 2 MHz, a wersja B do 3 MHz (zob. H. Kruszyński, K. Kulpa, Mikroprocesor 6502 i jego rodzina, NOT, Warszawa 1989, str. 43).

Serie XL i XE mają jeszcze nieco zmodyfikowany procesor, znany jako 6502C. Zmiana w stosunku do oryginału polega na dodaniu linii HALT, której uaktywnienie powoduje zatrzymanie procesora i odłączenie go od magistrali. W modelach 400/800 robił to oddzielny obwód złożony z elementów dyskretnych.

Numery katalogowe Atari:

  • 6502A: ?
  • 6502B: C014377
  • 6502C: C014806

Szybkość taktowania procesora w Atari zależy od tego, do jakiego systemu telewizji przystosowany jest komputer:

  • wersja NTSC: 1,789790 MHz lub (w XE) 1,7897725 MHz
  • wersja PAL: 1,773447 MHz
  • wersja SECAM: 1,7815 MHz (tylko XL i XE)

Zobacz także

Personal tools