CSG65CE02
Informacje ogólne | |
---|---|
Wystrzelony | 1988 |
Przerwane | 1988 |
Wspólni producenci | |
Wydajność | |
Maks. Częstotliwość taktowania procesora | 2 MHz do 10 MHz |
Architektura i klasyfikacja | |
Zestaw instrukcji | 6502 |
Specyfikacje fizyczne | |
pakiet(y) |
|
CSG 65CE02 to 8/16-bitowy mikroprocesor opracowany przez Commodore Semiconductor Group w 1988 roku. Jest członkiem rodziny MOS Technology 6502 , opracowanej na podstawie CMOS WDC 65C02 wydanego przez Western Design Center w 1983 roku.
Podobnie jak 65C02, 65CE02 został zbudowany w oparciu o proces 2 µm CMOS zamiast oryginalnej technologii 8 µm NMOS 6502 , dzięki czemu chip jest mniejszy (a tym samym tańszy), a także zużywa znacznie mniej energii. Oprócz zmian wprowadzonych w 65C02, 65CE02 zawierał również ulepszenia potoku procesora , aby umożliwić wykonanie jednobajtowych instrukcji w 1 cyklu, zamiast 6502 (i większości wariantów) co najmniej 2 cykli. Usunięto również opóźnienia o 1 cykl podczas przekraczania strony . Zmiany te poprawiły wydajność aż o 25% przy tej samej szybkości zegara.
Inne zmiany obejmowały dodanie trzeciego rejestru indeksowego , Z, wraz z dodaniem i modyfikacją szeregu instrukcji korzystania z tego rejestru. Strona zerowa, pierwsze 256 bajtów pamięci, które były używane jako pseudorejestry, można było teraz przenieść na dowolną stronę w pamięci głównej za pomocą rejestru B (strona ase). Rejestr stosu został poszerzony z 8 do 16 bitów przy użyciu podobnego rejestru stron, SPH (wysoki wskaźnik stosu), umożliwiając przeniesienie stosu ze strony pierwszej i rozrost do większych rozmiarów.
65CE02 był podstawą systemu na chipie CSG 4510 , który został opracowany dla niewydanego Commodore 65 . 65CE02 był później używany jako portu szeregowego A2232 do komputera Amiga . Wygląda na to, że nie widział innego zastosowania.
Opis
Rejestry CSG 65CE02 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Tło
Pod koniec lat 70. pierwotny zespół MOS Technology , który zaprojektował 6502, rozpadł się. Bill Mensch przeprowadził się do Arizony i założył Western Design Center (WDC), aby świadczyć usługi projektowe oparte na 6502. Około 1981 roku główni licencjobiorcy projektu 6502, firmy Rockwell Semiconductor , GTE i Signetics , rozpoczęli wraz z firmą Mensch prace nad przeprojektowaniem, które doprowadziły do powstania WDC 65C02 . Była to głównie CMOS oryginalnego NMOS 6502, która zużywała od 10 do 20 razy mniej energii, ale zawierała również szereg nowych instrukcji pomagających poprawić gęstość kodu w niektórych aplikacjach. Nowe instrukcje obejmowały INA/DEA
do zwiększania i zmniejszania wartości akumulatora , STZ
do zapisywania zera w komórce pamięci oraz BRA
, który był skokiem z 1-bajtowym adresem względnym w stylu rozgałęzienia . 65C02 naprawił również szereg drobnych błędów w oryginalnym projekcie 6502.
Oryginalny 6502 został zaprojektowany w erze przed pojawieniem się mikrokomputerów , kiedy mikroprocesory były używane jako podstawa prostszych systemów, takich jak inteligentne terminale , kalkulatory biurkowe i wiele różnych przemysłowych systemów sterowania. Była to również epoka, w której urządzenia pamięci były na ogół oparte na statycznej pamięci RAM , która była bardzo droga i miała małą gęstość pamięci . Z obu tych powodów zdolność do obsługi „dużych” ilości pamięci nie była wymagana, a wiele procesorów miało tryby operacyjne, które działały z małymi porcjami większej przestrzeni adresowej, aby zapewnić wyższą wydajność. Tak było w przypadku 6502, który wykorzystywał pierwszą stronę pamięci lub „stronę zerową”, aby zapewnić szybszy dostęp, a drugą stronę, „stronę pierwszą”, do przechowywania 256-bajtowego stosu .
W latach 80. te założenia nie były już aktualne, wiele maszyn opartych na tych procesorach było teraz dostarczanych z maksymalnymi 64 kB, które mógł adresować 6502, przy użyciu znacznie tańszej i gęstszej dynamicznej pamięci RAM . Zalety szybkości trybu adresowania strony zerowej pozostały, ale teraz istniały w znacznie większej przestrzeni pamięci. Podobnie, jednostronicowy stos wywołań był teraz marnym groszem w całej pamięci, a języki wysokiego poziomu , które niesamowicie wykorzystywały przestrzeń stosu, nie mogły łatwo działać na 6502.
Nowe funkcje
65CE02 to kolejna ulepszona wersja 65C02, która rozszerza model pamięci, aby był bardziej odpowiedni dla systemu z dużą ilością pamięci głównej. W tym celu dodaje następujące nowe funkcje:
- 65CE02 dodaje 8-bitowy rejestr B dla strony bazowej, który przesuwa stronę zerową do dowolnego miejsca w pamięci. B jest ustawiany na zero przy włączaniu lub resetowaniu, więc 65CE02 początkowo działa dokładnie tak, jak 6502. Jeśli wartość zostanie umieszczona w rejestrze B za pomocą TAB (Transfer
A
to B), strona zerowa zostanie przeniesiona do nowej lokalizacji. Znaczącym zastosowaniem tej funkcji jest umożliwienie małym procedurom, które mogą zmieścić się w 256 bajtach strony, używanie adresowania strony zerowej (obecnie znanego jako adresowanie strony podstawowej), co zmniejsza kod, ponieważ adresy nie mają już drugiego bajtu, co sprawia również, że kod działa szybciej, ponieważ drugi bajt nie musi być pobierany z pamięci.
- 65CE02 rozszerza również stos z oryginalnych 256 bajtów pierwszej strony do, teoretycznie, całej przestrzeni adresowej. Robi to, dodając kolejny 8-bitowy rejestr, SPH, dla Stack Pointer High. Zwykle działa to jak B, przesuwając adres bazowy stosu ze strony pierwszej na dowolną wybraną stronę. Poza tym nadal działa jak poprzednio, mając maksymalny rozmiar jednej strony, 256 bajtów. Podobnie jak B, podczas uruchamiania lub resetowania SPH jest ustawiany na 01, dzięki czemu działa dokładnie tak, jak 65C02.
- Po ustawieniu nowego bitu „rozszerzenia stosu” w rejestrze stanu , przy użyciu nowych instrukcji
CLE/SEE
, wskaźnik stosu staje się rzeczywistą wartością 16-bitową. Wartość w SPH jest dodawana do wartości w oryginalnym SP, obecnie znanym jako SPL dla Stack Pointer Low, w celu utworzenia 16-bitowego wskaźnika na dół stosu. Dzięki temu stos może urosnąć znacznie większy niż oryginalne 256 bajtów, które były zbyt małe dla języków wysokiego poziomu.
- Oznacza to, że istnieją dwa rodzaje stosów, 256-bajtowy, który może znajdować się w dowolnym miejscu, lub 16-bitowy obejmujący pamięć. Chociaż ta ostatnia jest bardziej elastyczna, oznacza to, że dostęp do stosu musi konstruować 16-bitowy adres z dwóch rejestrów, zajmując dodatkowy cykl, a tym samym spowalniając ogólną wydajność. Używanie mniejszego stosu tam, gdzie to możliwe, zapewnia lepszą wydajność.
- 65CE02 dodaje również nowy rejestr indeksowy , Z. Jest on ustawiany na zero podczas uruchamiania lub resetowania, co oznacza, że jego instrukcja przechowywania Z w pamięci,
STZ
, działa tak samo jak w 65C02, gdzie ta sama instrukcja oznacza przechowywanie od zera do pamięci. Pozwala to na uruchomienie niezmodyfikowanego kodu 65C02 na 65CE02. Dodano lub zmodyfikowano szereg innych instrukcji, aby umożliwić dostęp do rejestru Z. Wśród nich sąLDZ
do ładowania wartości z pamięci,TZA/TAZ
do przesyłania wartości do lub z akumulatora,PHZ/PLZ
do pchania i ściągania Z na stos,INZ/DEZ
do zwiększania i zmniejszania orazCPZ
do porównywania wartość w Z na wartość w pamięci.
- 65C02 dodał
BRA
, Branch Always, który był zasadniczoJMP
, który używał 8-bitowego adresu względnego w stylu rozgałęzienia zamiast bezwzględnego adresu 16-bitowego. Z nieznanych przyczyn 65CE02 zmienił mnemonik naBRU
. Dodali takżeBSR
, Branch to SubRoutine, która wykorzystuje ten sam względny tryb adresowania co JSR,
Jump to SubRoutine.
- Ponadto CE dodał adresowanie 16-bitowe lub „względne słowo” do wszystkich istniejących instrukcji rozgałęzień. Wcześniej gałęzie mogły przesuwać się tylko o 128 miejsc do tyłu lub do przodu o 127, w oparciu o podpisaną 8-bitową wartość, „adres względny”. W 65CE02 mogą to być lokalizacje -32768 lub +32767, podążając za gałęzią z wartością 16-bitową. Wcześniej, aby wykonać „długie rozgałęzienie”, zwykle trzeba było użyć
JMP
do 16-bitowego celu, a następnie rozgałęzić się na te trzy bajty, gdy nie chciałeś tego robić. Na przykład, jeśli ktoś chciałby rozgałęzić adres 1234 $, jeśli akumulator wynosi zero, zrobiłbyCMP #$00/BNE +3/JMP $1234
, co oznacza, że chcesz pominąć 3-bajtowy adresJMP ,
jeśli akumulator nie jest równy zeru . W 65CE02 można to zredukować do czegoś w rodzajuCMP #$00/BEQ $0123
, czyniąc w ten sposób kod bardziej oczywistym, usuwając dwa bajty instrukcji i eliminując potrzebę pobierania utraconych cykli i uruchamiania gałęzi. Ponieważ jednak nadal wykorzystuje adresowanie względne, adres względny musi zostać obliczony na podstawie etykiety przez programistę lub asemblera podczas konwersji na kod maszynowy.
- Kolejnym dodatkiem do systemu było szereg instrukcji „word”, które wykonywały operacje na danych 16-bitowych. Obejmowało to
INW/DEW
do zwiększania i zmniejszania wartości w pamięci orazASW/ROW
do wykonywania arytmetycznego przesunięcia (lewego) słowa lub obrócenia (lewego) słowa.
- Bardziej pomniejsze zmiany obejmują dodanie
ASR
w celu wykonania arytmetycznego (ze znakiem) przesunięcia w prawo (6502 miał tylko logiczne lub bez znaku przesunięcie w prawo), instrukcjęNEG A
, która wykonuje negację dopełnienia do dwóch na akumulatorze, orazRTN
, wariacja naRTS
(ReTurn from Subroutine), który powraca do adresu przesuniętego do stosu zamiast na górze, unikając potrzeby jawnegowyłączania
wszystkiego, co procedura dodała podczas działania. System dodał również nowy tryb adresowania, który wykorzystywał adres bazowy na stosie jako podstawę adresowania pośredniego.
- dodano nową czterobajtową instrukcję
AUG do przyszłej rozbudowy.
Chociaż arkusz danych nie jest jasny co do jego ostatecznego celu, wydaje się, że jest to element zastępczy, który ma umożliwić przekazywanie instrukcji do jednostek koprocesora, takich jak jednostka zarządzania pamięcią .
Ulepszenia potoku
Główną osobliwością oryginalnego 6502 było to, że instrukcje jednobajtowe, takie jak INX
, nadal wymagały dwóch cykli. Pozwoliło to na uproszczenia w rurociągów ; następny bajt z pamięci był pobierany podczas dekodowania operacji, co oznaczało, że następny bajt był pobierany bez względu na wszystko. W przypadku większości instrukcji ten bajt byłby częścią (lub całością) operandu, który można by następnie natychmiast wprowadzić do zdekodowanej instrukcji.
Jeśli instrukcja wymagała tylko jednego bajtu, procesor nadal odczytywał następny bajt podczas dekodowania pierwszego. W tym przypadku następny bajt był następującą instrukcją, ale nie miał możliwości wprowadzenia go z powrotem do pierwszego etapu potoku w celu jego zdekodowania. Zamiast tego pobrana instrukcja została odrzucona i ponownie odczytana w celu wprowadzenia jej do dekodera. To marnuje cykl. Chociaż doprowadziło to do tego, że wiele instrukcji było wolniejszych niż mogłoby być, ta „cecha” została zachowana w 65C02, chociaż w dostępnych źródłach nie wyjaśniono, czy miało to na celu zachowanie prostoty potoku, czy też synchronizację cyklu.
Zachowanie kompatybilności cykli nie było wymogiem dla 65CE02, a nowe procesy produkcyjne sprawiły, że dodatkowe obwody w potoku nie stanowiły problemu, więc potok został ponownie ustawiony, aby poprawnie obsługiwał jednobajtowe instrukcje w jednym cyklu. Dzięki tym ulepszeniom model 65CE02 może wykonywać kod nawet o 25% szybciej niż poprzednie modele 65xx.
Dalsze ulepszenie dotyczy problemu związanego z instrukcjami adresowania, które dodają wartości w celu uzyskania końcowego adresu. Przykłady obejmują „indeksowane pośrednie”, w których wartość w jednym z rejestrów indeksowych jest dodawana do adresu bazowego, a następnie stosuje instrukcję do wynikowego adresu. W oryginalnym 6502, jeśli dodanie dwóch wartości przekraczało granicę strony, co 256 miejsc, potrzebny był dodatkowy cykl, aby uzyskać ostateczną wartość adresu. 65CE02 usunął to ograniczenie, poprawiając w ten sposób wydajność tych powszechnie używanych trybów.
Szczegóły fizyczne
Jest wytwarzany przy użyciu technologii CMOS 2 µm , co pozwala na pracę z mniejszym poborem mocy w porównaniu z poprzednimi wersjami NMOS i HMOS rodziny 65xx. Jest umieszczony w 40-pinowym DIP-ie , który jest kompatybilny pinowo z 6502.
CSG4510
Model 4510 to wariant systemu w pakiecie (SiP) modelu 65CE02, który zawiera dwa kontrolery portów we/wy 6526 CIA i niestandardową jednostkę MMU w celu rozszerzenia przestrzeni adresowej do 20 bitów (1 megabajt). Jest umieszczony w 84-pinowym sterowniku PLCC .
Model 4510 był używany w niewydanym komputerze domowym Commodore 65 i niewydanej obniżonej cenie wersji Commodore CDTV .
Aplikacje
65CE02 był używany w karcie portu szeregowego Commodore A2232 dla komputera Amiga .