6502

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 17:34, 8 gru 2005
Piotrv (Dyskusja | wkład)

← Previous diff
Aktualna wersja
KMK (Dyskusja | wkład)
(Parametry)
Linia 1: Linia 1:
-[[6502]] to [[procesor]] produkowany przez [[MOS Technology]]. Pierwszy raz wprowadzony do produkcji we wrześniu 1975 roku.+[[Procesor]] produkowany przez [http://en.wikipedia.org/wiki/MOS_Technology MOS Technology]. Pierwszy raz wprowadzony do produkcji we wrześniu 1975 roku, wytwarzany przy wykorzystaniu technologii [http://en.wikipedia.org/wiki/MOSFET 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.
-'''Parametry'''+== Parametry ==
* ośmiobitowa szyna danych * ośmiobitowa szyna danych
* szesnastobitowe adresowanie * szesnastobitowe adresowanie
* 56 udokumentowanych rozkazów * 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 [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 ==
 +* 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 (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]).
 +
 +=== "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 == == Ciekawostki ==
-* Procesor posiada kilka nieudokumentowanych rozkazów. Ich lista mocno zależy od konkretnej wersji procesora. Mimo, że zastępują one czasami kilka zwykłych rozkazów standardowych, to 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 klasy 6502 był wykorzystany w filmie "The Terminator" (1984, pol. '''Elektroniczny Morderca''') przy wyświetlaniu obrazu z kamery Terminatora T800 Model 101.+* 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".
 + 
 +== 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 == == Zobacz także ==
* [[6502C]] * [[6502C]]
* [[65C02]] * [[65C02]]
 +* [[65C802]]
 +* [[65C816]]
 +* [[6507]]
 +* [[Przerwania]]
 +* [[NTSC vs PAL]]
 +* [http://oldcomputers.net/kim1.html Pierwszy mikrokomputer z 6502]
 +* [http://www.6502.org 6502.org]
 +* [http://www.cpu-collection.de/?tn=1&l0=cl&l1=650x Zdjęcia i specyfikacja na stronie cpu-collection.de]
 +* [http://krap.pl/mirrorz/atari/www.howell1964.freeserve.co.uk/parts/6502_CPU.htm 6502 CPU and variants]
 +
 +[[Kategoria:Atari 8-bit]]

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