65C816

From Atariki

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

← Previous diff
Wersja z dnia 18:03, 9 paź 2017
KMK (Dyskusja | wkład)
(Architektura)
Next diff →
Linia 1: Linia 1:
-[[65C816]] to 16-bitowy następca układu MOS 6502, można nim zastąpić zastosowany w Atari procesor [[6502C]]. [[65C816]] zaprojektowany został przez [[William D. Mensch|Williama D. Menscha]] jako wersja rozwojowa i następca procesora [[65C02]]. Produkowany jest przez [http://wdesignc.com Western Design Center].+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 [http://en.wikipedia.org/wiki/Bill_Mensch Williama D. Menscha] jako wersja rozwojowa i następca procesora [[65C02]]. Produkowany jest przez [http://wdesignc.com Western Design Center].
- +
-Architektura:+
 +== Architektura ==
 +{{grafr|65c816.gif}}
* ośmiobitowa szyna danych * ośmiobitowa szyna danych
-* 24-bitowa szyna adresowa+* 24-bitowa (multipleksowana) szyna adresowa
* 92 rozkazy * 92 rozkazy
* 22 tryby adresowania * 22 tryby adresowania
-* jeden 16-bitowy rejestr ogólne przeznaczenia (akumulator)+* 16-bitowe ALU
 +* jeden 16-bitowy rejestr ogólnego przeznaczenia (akumulator A/B, czyli C)
* dwa szesnastobitowe rejestry indeksowe (X i Y) * dwa szesnastobitowe rejestry indeksowe (X i Y)
-* szesnastobitowy wskaźnik strony zerowej+* szesnastobitowy wskaźnik strony zerowej - D
-* szesnastobitowy wskaźnik stosu+* szesnastobitowy wskaźnik stosu - S
-* dziewięć bitów statusu+* dziewięciobitowy rejestr statusu - P
-* dwa ośmiobitowe rejestry adresowe banku programu i danych+* dwa ośmiobitowe rejestry adresowe banku programu i danych (K i B)
-* szesnastobitowy licznik programu (razem z rejestrem banku programu stanowi 24-bitowy adres)+* 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)
 + 
 +Procesor składa się z 22000 tranzystorów.
 + 
 +== 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 ulega on rozłączeniu 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 (lecz 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, który na 6502 pozostaje niezauważony), albo sprzętowo powielając stronę zerową w obszarze $010000-$0100FF. To drugie zaimplementowano w karcie [[Rapidus Accelerator]].
 + 
 +== Rozszerzenia oparte na 65C816 ==
 + 
 +* [[Antonia 4 MB]], [[F7]], [[HyperSpeed XL/XE]], [[Rapidus Accelerator]], [[Sweet 16]], [[Turbo-816]], [[Warp4]], [[XL7]], [[XL14]]
-Jeśli jesteś szczęśliwym posiadaczem procesora 65C816, możesz go w prosty sposób podłączyć do naszej ukochanej Atarki zastępując procek 6502C. Jest to jednak najprostsze rozwiązanie umożliwiające tylko korzystanie z większej liczby rozkazów. Rozwiązanie to nie pozwala na dołączenie większej ilości pamięci liniowej (jak wiadomo 65C816 może zaadresować do 16MB pamięci). Szczegóły montażu w stołówce [http://hardware.atari8.info/65816.php Simple 65C816 Processor Adapter]. Na takiej samej zasadzie dzialało rozszerzenie [[Sweet16]].+== Programy ze wsparciem dla 65C816 ==
-Bardziej zaawansowane rozszerzenie to [[Warp4]], autorstwa [[Pasiu|Pasia]]/SSG - schematy i opis montażu już w stołówce.+* OS-y: [[DracOS]], [[Turbo-816 OS]]
 +* DOS-y: [[SpartaDOS X]]
 +* Programy narzędziowe: [[EYE]], RAMD816.SYS (ramdysk dla [[SpartaDOS X]], w późniejszych wersjach moduł do RAMDISK.SYS), RAMD816L.SYS (ramdysk dla SpartaDOS X używający pamięci tzw. [[pamięć liniowa|liniowej]]), [[Turbo 816 Monitor]]
 +* Programy użytkowe: [[CC65]], [[MAE]], [[MultiBASIC]], [[SD-Load]], [[SysInfo]], [[Turbo-Assembler/16]], [[Let's Emu!]]
-Pasiu pracuje również nad kolejnym typem rozszerzenia, 65C816 pracujący razem z 6502c. Rozszerzenie zainspirowane projektem [[Hyperspeed XL-XE|Hyperspeed XL/XE]], z danych ujawnionych do tej pory wynika iż będzie ono zapewniało 64K taktowanej 14MHz pamięci cache umożliwiającej szybki odczyt także obszaru poniżej 0x010000. +== Emulatory ==
-Poniżej screenshot z [[SysInfo]] pokazujący parametry prototypowej instalacji:+* [[Altirra]] - emuluje 65C816 z zegarem do 21,28 MHz (NTSC 21,48 MHz) i do 4 MB pamięci liniowej.
 +== Inne ==
-[[Grafika:Si-65816.png]]+* [http://atariage.com/forums/topic/194253-turbobasicxl-problem/page-6#entry2477246 Poprawki do MyDOS-a]
-Zobacz też:+==Zobacz też==
 +* [http://www.westerndesigncenter.com/wdc/datasheets/w65c816s.pdf 65C816 Microprocessor Data Sheet (po angielsku)]
 +* [http://wiki.nesdev.com/w/images/7/76/Programmanual.pdf 6502/65C02/65C816 Programming Manual (po angielsku)]
 +* [http://www.cs.xu.edu/~ryanr/atari/65816.html Programming notes for 65C816] by John Harris (po angielsku)
 +* [http://energy.scene.pl/index.php?page=slodka-szestnastka artykuł KMK zamieszczony w "ENERGY" #1]
 +==Inne==
 +* [[Przerwania]]
 +* [[65C802]]
* [[65C832]] * [[65C832]]
[[Kategoria:Atari 8-bit]] [[Kategoria:Atari 8-bit]]

Wersja z dnia 18:03, 9 paź 2017

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 (multipleksowana) 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)

Procesor składa się z 22000 tranzystorów.

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 ulega on rozłączeniu 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 (lecz 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, który na 6502 pozostaje niezauważony), albo sprzętowo powielając stronę zerową w obszarze $010000-$0100FF. To drugie zaimplementowano w karcie Rapidus Accelerator.

Rozszerzenia oparte na 65C816

Programy ze wsparciem dla 65C816

Emulatory

  • Altirra - emuluje 65C816 z zegarem do 21,28 MHz (NTSC 21,48 MHz) i do 4 MB pamięci liniowej.

Inne

Zobacz też

Inne

Personal tools