<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://mirror.atariki.pl/w/index.php?action=history&amp;feed=atom&amp;title=65C816</id>
	<title>65C816 - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="https://mirror.atariki.pl/w/index.php?action=history&amp;feed=atom&amp;title=65C816"/>
	<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=65C816&amp;action=history"/>
	<updated>2026-10-02T22:26:48Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://mirror.atariki.pl/w/index.php?title=65C816&amp;diff=76&amp;oldid=prev</id>
		<title>imported&gt;Atariki recovery: Reconstructed from archived HTML; see provenance manifest</title>
		<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=65C816&amp;diff=76&amp;oldid=prev"/>
		<updated>2026-10-01T08:51:48Z</updated>

		<summary type="html">&lt;p&gt;Reconstructed from archived HTML; see provenance manifest&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;16-bitowy następca układu MOS [[6502]], można nim zastąpić zastosowany w Atari [[Procesor|procesor]] [[6502C]]. &amp;#039;&amp;#039;&amp;#039;65C816&amp;#039;&amp;#039;&amp;#039; 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].&lt;br /&gt;
&lt;br /&gt;
== Architektura ==&lt;br /&gt;
&lt;br /&gt;
[[File:65c816.gif]]&lt;br /&gt;
&lt;br /&gt;
* ośmiobitowa szyna danych&lt;br /&gt;
* 24-bitowa (multipleksowana) szyna adresowa&lt;br /&gt;
* 92 rozkazy&lt;br /&gt;
* 22 tryby adresowania&lt;br /&gt;
* 16-bitowe ALU&lt;br /&gt;
* jeden 16-bitowy rejestr ogólnego przeznaczenia (akumulator A/B, czyli C)&lt;br /&gt;
* dwa szesnastobitowe rejestry indeksowe (X i Y)&lt;br /&gt;
* szesnastobitowy wskaźnik strony zerowej - D&lt;br /&gt;
* szesnastobitowy wskaźnik stosu - S&lt;br /&gt;
* dziewięciobitowy rejestr statusu - P&lt;br /&gt;
* dwa ośmiobitowe rejestry adresowe banku programu i danych (K i B)&lt;br /&gt;
* szesnastobitowy licznik programu - PC (razem z rejestrem banku programu stanowi 24-bitowy adres)&lt;br /&gt;
* wsparcie dla zewnętrznego MMU&lt;br /&gt;
* rozkazy przesłań blokowych&lt;br /&gt;
* dwa tryby pracy: natywny oraz tryb emulacji [[6502]] (w tym ostanim procesor się &amp;quot;budzi&amp;quot; po włączeniu zasilania i resecie)&lt;br /&gt;
&lt;br /&gt;
Procesor składa się z 22000 tranzystorów.&lt;br /&gt;
&lt;br /&gt;
== Osobliwości ==&lt;br /&gt;
&lt;br /&gt;
=== Rejestry ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;akumulator B&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Tryb emulacji 6502 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;zawija się&amp;quot; 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).&lt;br /&gt;
&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
== Rozszerzenia oparte na 65C816 ==&lt;br /&gt;
&lt;br /&gt;
* [[Antonia 4 MB]], [[F7]], [[HyperSpeed XL/XE]], [[Rapidus Accelerator]], [[Sweet 16]], [[Turbo-816]], [[Warp4]], [[XL7]], [[XL14]]&lt;br /&gt;
&lt;br /&gt;
== Programy ze wsparciem dla 65C816 ==&lt;br /&gt;
&lt;br /&gt;
* OS-y: [[DracOS]], [[Turbo-816 OS]]&lt;br /&gt;
* DOS-y: [[SpartaDOS X]]&lt;br /&gt;
* 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]]&lt;br /&gt;
* Programy użytkowe: [[CC65]], [[MAE]], [[MultiBASIC]], [[SD-Load]], [[SysInfo]], [[Turbo-Assembler/16]], [[Let&amp;#039;s Emu!]]&lt;br /&gt;
&lt;br /&gt;
== Emulatory ==&lt;br /&gt;
&lt;br /&gt;
* [[Altirra]] - emuluje 65C816 z zegarem do 21,28 MHz (NTSC 21,48 MHz) i do 4 MB pamięci liniowej.&lt;br /&gt;
&lt;br /&gt;
== Inne ==&lt;br /&gt;
&lt;br /&gt;
* [http://atariage.com/forums/topic/194253-turbobasicxl-problem/page-6#entry2477246 Poprawki do MyDOS-a]&lt;br /&gt;
&lt;br /&gt;
== Zobacz też ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.westerndesigncenter.com/wdc/datasheets/w65c816s.pdf 65C816 Microprocessor Data Sheet (po angielsku)]&lt;br /&gt;
* [http://wiki.nesdev.com/w/images/7/76/Programmanual.pdf 6502/65C02/65C816 Programming Manual (po angielsku)]&lt;br /&gt;
* [http://www.cs.xu.edu/~ryanr/atari/65816.html Programming notes for 65C816] by John Harris (po angielsku)&lt;br /&gt;
* [http://energy.scene.pl/index.php?page=slodka-szestnastka artykuł KMK zamieszczony w &amp;quot;ENERGY&amp;quot; #1]&lt;br /&gt;
&lt;br /&gt;
== Inne ==&lt;br /&gt;
&lt;br /&gt;
* [[Przerwania]]&lt;br /&gt;
* [[65C802]]&lt;br /&gt;
* [[65C832]]&lt;br /&gt;
&lt;br /&gt;
[[Kategoria:Atari 8-bit]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Atariki recovery</name></author>
	</entry>
</feed>