65C816

From Atariki

Revision as of 13:56, 20 mar 2016; view current revision
←Older revision | Newer revision→
Jump to: navigation, search

16-bitowy następca układu MOS 6502, można nim zastąpić zastosowany w Atari procesor 6502C. 65C816 został zaprojektowany w latach 1982-84 przez Williama D. Menscha jako wersja rozwojowa i następca procesora 65C02. Produkowany jest przez Western Design Center.

Spis treści

Architektura

Grafika:65c816.gif

  • ośmiobitowa szyna danych
  • 24-bitowa szyna adresowa
  • 92 rozkazy
  • 22 tryby adresowania
  • 16-bitowe ALU
  • jeden 16-bitowy rejestr ogólnego przeznaczenia (akumulator A/B, czyli C)
  • dwa szesnastobitowe rejestry indeksowe (X i Y)
  • szesnastobitowy wskaźnik strony zerowej - D
  • szesnastobitowy wskaźnik stosu - S
  • dziewięciobitowy rejestr statusu - P
  • dwa ośmiobitowe rejestry adresowe banku programu i danych (K i B)
  • szesnastobitowy licznik programu - PC (razem z rejestrem banku programu stanowi 24-bitowy adres)
  • wsparcie dla zewnętrznego MMU
  • rozkazy przesłań blokowych
  • dwa tryby pracy: natywny oraz tryb emulacji 6502 (w tym ostanim procesor się "budzi" po włączeniu zasilania i resecie)

Osobliwości

Rejestry

Osobliwością procesora jest działanie rejestrów C, X i Y: są one 16-bitowe, ale żeby skorzystać z ich pełnego rozmiaru, trzeba oddzielnym rozkazem dokonać przełączenia dodatkowych bitów rejestru statusu. Jeden z nich, zwany M, wybiera rozmiar akumulatora oraz operacji na pamięci (1 - ośmiobitowe, 0 - szesnastobitowe), drugi zwany X ma analogiczne znaczenie dla obydwu rejestrów indeksowych.

Dodatkowo rejestry indeksowe i akumulator zachowują się nieco odmiennie przy manipulacji bitami M i X. Mianowicie przełączenie rejestrów X i Y z szesnastu na osiem bitów zeruje ich starsze bajty, natomiast przełączenie akumulatora na osiem bitów powoduje, że "rozpada się" on na dwie połówki, ale zawartość starszej jest w dalszym ciągu dostępna jako "akumulator B".

Szesnastobitowe rejestry C, X, Y są dostępne tylko w trybie natywnym 65C816, natomiast w trybie emulacji 6502 istnieje dostęp do akumulatora B - obydwie połówki rejestru C można zamienić miejscami.

Tryb emulacji 6502

W trybie emulacji 6502 działają wszystkie rozkazy i tryby adresowania 65C816, nie da się jedynie, jak napisano powyżej, skorzystać z 16-bitowych rejestrów.

Dodatkową różnicą jest działanie trybów adresowania indeksowanych strony zerowej: jeśli adres wynikający z dodania adresu bazowego i rejestru indeksowego jest większy niż 255, w trybie emulacji 6502 "zawija się" on do początku strony zerowej, natomiast w trybie natywnym adres efektywny wskaże obszar poza stroną zerową. Żeby było dowcipniej, zachowanie takie w trybie emulacji dotyczy tylko rozkazów 6502, ale nie 65C02 - dlatego w trybie emulacji 6502, gdy rejestr X ma wartość $FF, rozkaz STZ $FF,X zapisze daną pod zupełnie inny adres ($01FE) niż rozkaz STA $FF,X ($00FE).

Do osobliwości (jeśli nie błędów w konstrukcji CPU) można też zaliczyć działanie indeksowanych trybów adresowania absolutnego: jeśli adres wynikający z dodania adresu bazowego i rejestru indeksowego jest większy niż 65535, dochodzi do przekroczenia granicy segmentu 64k. Np. załadowanie do rejestru X wartości $FF i wykonanie rozkazu LDA $FFFF,X sprawi, że procesor dokona odczytu spod adresu $0100FE. Dzieje się tak nie tylko w trybie natywnym (co naturalne), ale również w trybie emulacji, a to powoduje problemy z kompatybilnością z oprogramowaniem pisanym dla 6502, jeśli dostępy nie są wykonywane zawsze w ten sam sposób (np. zapisy trybami adresowania strony zerowej, a odczyty jak powyżej lub odwrotnie). Ten problem ma np. MyDOS. Można to rozwiązać w dwojaki sposób: albo poprawiając program (niekiedy zresztą tego typu działanie jest po prostu błędem w programie, który na 6502 pozostaje niezauważony), albo sprzętowo mirrorując stronę zerową w obszarze $010000-$0100FF. To drugie zaimplementowano w karcie [Rapidus Accelerator]].

Rozszerzenia oparte na 65C816

Programy ze wsparciem dla 65C816

Zobacz też

Inne

Personal tools