6502
From Atariki
Wersja z dnia 17:42, 8 gru 2005 Piotrv (Dyskusja | wkład) (Dodana kategoria) ← 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]] | * [[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]] | [[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)