WDC 65C816
Allmän information | |
---|---|
Lanserades | 1985 |
Vanliga tillverkare |
|
Prestanda | |
Max. CPU klockfrekvens | 1 MHz till 20 MHz |
Databredd |
|
Adressbredd | 24 |
Arkitektur och klassificering | |
Instruktionsuppsättning | 6502 |
Instruktioner | 92 |
Fysiska specifikationer | |
Paket(er) | |
Historia | |
Företrädare |
|
W65C816S (även 65C816 eller 65816 ) är en 8/16-bitars mikroprocessor (MPU) utvecklad och såld av Western Design Center ( WDC). W65C816S introducerades 1983 och är en förbättrad version av WDC 65C02 8-bitars MPU, i sig en CMOS -förbättring av den ärevördiga MOS Technology 6502 NMOS MPU. 65C816 var CPU för Apple IIGS och, i modifierad form, Super Nintendo Entertainment System .
65 : an i delens beteckning kommer från dess 65C02-kompatibilitetsläge, och 816 betyder att MPU:n har valbara 8- och 16-bitars registerstorlekar . Förutom tillgången till 16-bitars register har W65C816S utökad minnesadressering till 24 bitar , stöder upp till 16 megabyte slumpmässigt minne , en förbättrad instruktionsuppsättning och en 16-bitars stackpekare , samt flera nya elektriska signaler för förbättrad systemhårdvaruhantering.
Även om 65816 har 24-bitars adressering, är det inte en riktig 24-bitars dator. Program fungerar fortfarande i 64K-bitar eftersom register är 16 bitar. För att komma åt andra delar av internminnet behövs en teknik som liknar bankväxling . Apple, Atari och Commodore valde alla Motorola 68000- processoralternativet som erbjöd en helt 32-bitars programmeringsmodell när det gällde att ersätta deras 6502-baserade rader av 8-bitars datorer, trots att 65816 är snabbare cykel för cykel.
Vid återställning startar W65C816S i "emuleringsläge", vilket betyder att den i huvudsak beter sig som en 65C02. Därefter kan W65C816S växlas till "native mode" med en tvåinstruktionssekvens, vilket gör att den aktiverar alla förbättrade funktioner, men ändå bibehåller en betydande grad av bakåtkompatibilitet med de flesta 65C02-program. Men till skillnad från PDIP40- versionen av 65C02, som är en pin-kompatibel ersättning för dess NMOS-förfader, är PDIP40 W65C816S inte pin-kompatibel med någon annan 6502-familj MPU.
Relaterad till W65C816S är W65C802 , som hade samma interna struktur och 16-bitars stöd, men som använde en 40-stifts layout kompatibel med den ursprungliga 6502. Detta gjorde att den kunde användas som en drop-in ersättare i vissa roller. 65C802 kunde dock inte avge en fullständig 24-bitars adress, vilket begränsade den till 64 KB minne. 65C802 och dess släktingar tillverkas inte längre.
Historia
1981 började Bill Mensch , grundare och VD för WDC, utvecklingen av 65C02 med sina produktionspartners, främst Rockwell Semiconductor och Synertek . Det primära målet med 65C02-ansträngningen var att gå från den ursprungliga 6502:ans NMOS-process till 65C02:s CMOS, vilket skulle göra det möjligt för den att köras med mycket lägre effektnivåer, någonstans mellan 1 ⁄ 10 och 1 ⁄ 20 när den kördes med samma klockhastigheter. Ett antal nya opkoder och buggfixar arbetades också in i designen.
Utvecklingen av W65C816S påbörjades 1982 efter att Mensch rådfrågat Apple Computer om en ny version av Apple II - serien av persondatorer som bland annat skulle ha förbättrat grafik och ljud. Apple ville ha en MPU som skulle vara mjukvarukompatibel med 6502 som då användes i Apple II men med förmågan att adressera mer minne och att ladda och lagra 16 bitars ord. Resultatet blev 65C816, färdig i mars 1984, med prover som gavs till både Apple och Atari under andra halvåret och full release 1985. Mensch fick hjälp under designprocessen av sin syster Kathryn, som var ansvarig för en del av enhetens layout.
Samma process ledde också till 65C802, som var identisk inuti 65C816. Båda tillverkades på samma tillverkningslinjer och divergerade endast under de sista metalliseringsstegen när chippet anslutits till de externa stiften. I 65C802 hade dessa stift samma layout som den ursprungliga 6502, vilket gjorde att den kunde användas som en drop-in-ersättning samtidigt som 16-bitars bearbetning av CPU:n kunde användas. Men eftersom den använde den ursprungliga pinouten hade den bara 16 adresseringsstift och kunde därför bara komma åt 64 KB externt minne. Vanligtvis när hårdvarutillverkare designade ett projekt från grunden använde de 65C816 istället för 65C802, vilket resulterade i att den senare drogs ur produktion.
Apple integrerade därefter 65C816 i Apple IIGS -datorn. Den grundläggande 65C816-designen kom från GTE , Sanyo och andra från mitten till slutet av 1980-talet till början av 1990-talet.
På 1990-talet konverterades både 65C816 och 65C02 till en helt statisk kärna , vilket gjorde det möjligt att helt stoppa processorns Ø2-klocka utan att registerinnehållet förlorades. Den här funktionen, tillsammans med användningen av asynkront statiskt RAM , gjorde det möjligt att producera design som använde minimal ström i standby-läge.
Från och med 2021 är W65C816S tillgänglig från WDC i 40-stifts PDIP- , PLCC44- eller 44-stifts TQFP -förpackningar, såväl som en kärna för ASIC -integration (till exempel Winbonds W55V9x-serie av TV Edutainment IC ). WDC, som i sig är ett fabulerande halvledarföretag , arbetar med olika gjuterier för att producera W65C816S, såväl som andra kompatibla produkter. Diskreta processorer är tillgängliga via ett antal elektronikdistributörer. För designers som vill inkludera W65C816S-funktionalitet i en anpassad ASIC , erbjuder WDC RTL-kod ( register-transfer level) i Verilog .
Funktioner
|
WDC 65c816 funktioner:
- Helt statisk CMOS- design erbjuder låg strömförbrukning (300 µA vid 1 MHz ) och ökad brusimmunitet .
- Brett driftspänningsområde : 1,8 V till 5,0 V ± 5 %.
- Brett driftsfrekvensområde , officiellt 14 MHz maximalt vid 5 volt (20Mhz i SuperCPU ), med en enfasig klockkälla (hobbyister har framgångsrikt kört 65C816 över 20 MHz).
- Emuleringsläget tillåter betydande programvarukompatibilitet med NMOS 6502 och CMOS 65C02, förutom odokumenterade opkoder . Alla 256 opcodes i 65C816 är funktionella i båda driftlägena.
- 24-bitars minnesadressering ger tillgång till 16 MB minnesutrymme .
- 16-bitars ALU , ackumulator (
C
), stackpekare (S
) och indexregister (X
ochY
). - 16-bitars Direct Page (aka noll sida) register (
D
). - 8-bitars databank (
DB
) och programbank (PB
) register, genererar bitar 16–23 av 24-bitars kod och dataadresser. Separata program- och databanksregister tillåter programsegmentering och 16 MB linjär dataadressering. - Giltig dataadress (
VDA
) och giltig programadress (VPA
) styr utgångar för minneskvalificering, dubbel cache och cyklisk stjäl DMA -implementering. - Vector pull (
VPB
) styrutgång för att indikera när en avbrottsvektor hämtas. - Avbryt (
ABORTB
)-ingång och tillhörande vektor stöder processorreparationer av busfeltillstånd, såsom sidfel och minnesåtkomstbrott. - Direkt sidregister och stackrelativ adressering ger möjlighet till återinträde , rekursiv och omlokaliserbar programmering.
- 24 adresseringslägen —13 ursprungliga 6502-lägen med 92 instruktioner med 256 op-koder , inklusive de flesta nya op-koder implementerade i 65C02.
- Blockkopieringsinstruktioner som möjliggör snabb kopiering av datastrukturer från ett område av RAM till ett annat med minimal kod.
- för Wait-for-Interrupt (
WAI
) och Stop-the-Clock (STP )
minskar strömförbrukningen ytterligare , minskar avbrottslatens och tillåter synkronisering med externa händelser. -
Co-Processor (
COP
) instruktion med tillhörande vektor stöder co-processor konfigurationer, t.ex. flyttalsprocessorer . - Reserverad "escape" (
WDM
) instruktion för framtida två-byte opkoder och en länk till framtida design (WDM är initialerna för W65C816S designer William D. Mensch ).
Jämförelse med tidigare modeller
Två lägen
65C816 har två driftlägen: "emuleringsläge", där 16-bitars operationerna är osynliga – indexregistren tvingas till åtta bitar – och chippet verkar vara mycket likt 6502:an, med samma cykeltider för opkoder; och "native mode", som exponerar alla nya funktioner. CPU:n går automatiskt in i emuleringsläge när den slås på eller återställs, vilket gör att den kan ersätta en 65(C)02, förutsatt att man gör de nödvändiga kretsändringarna för att passa de olika stiftlayouterna.
16-bitars register
Den mest uppenbara förändringen av 65C816 när den körs i inbyggt läge är utbyggnaden av de olika registren från 8-bitars till 16-bitars storlekar. Denna förbättring påverkar ackumulatorn ( A
), X-
och Y
-indexregistren och stackpekaren ( S
). Det påverkar inte programräknaren ( PC
), som alltid har varit 16-bitars.
När du kör i inbyggt läge ändrar två bitar i statusregistret sin betydelse. I den ursprungliga 6502 användes inte bitarna 4 och 5, även om bit 4 hänvisas till som break( b
)-flaggan. I ursprungligt läge blir bit 4 x
-flaggan och bit 5 blir m
-flaggan. Dessa bitar styr huruvida indexregistren ( x )
och/eller ackumulator/minne ( m
) är 8-bitars eller 16-bitars stora. Nollor i dessa bitar anger 16-bitarsstorlekar, ettor anger 8-bitarsstorlekar. Dessa bitar är fixerade till ettor när processorn slås på eller återställs, men kan ändras när processorn växlas till inbyggt läge.
Det är kanske inte direkt uppenbart varför man skulle vilja använda de nu 16-bitars registren i 8-bitarsläge. Att byta till 8-bitars läge med de nya instruktionerna SEP
(SEt Processor status bit) och REP
(RESet Processor status bit) innebär att alla efterföljande instruktioner som kommer åt dessa register bara kommer att läsa eller skriva en enda byte istället för två. Till exempel, om m-
biten sätts till 1 när en LDA $1234
-instruktion exekveras, kommer endast en enda byte på adressen $1234
att läsas, vilket minskar antalet cykler som behövs för att exekvera instruktionen. Detta är särskilt användbart när man hanterar 8-bitars teckendata, till exempel.
När registerstorlekar är inställda på 16 bitar kommer minnesåtkomsten åtkomst till två sammanhängande byte av minne, till priset av en extra klockcykel. Dessutom kommer en läs-modifiera-skrivinstruktion, såsom ROR <addr>
, när den används medan ackumulatorn är inställd på 16 bitar, att påverka två sammanhängande byte av minne, inte en. På samma sätt kommer alla aritmetiska och logiska operationer att vara 16-bitars operationer.
24-bitars adressering
Den andra stora förändringen av systemet när det körs i inbyggt läge är att minnesmodellen utökas till ett 24-bitars format från det ursprungliga 16-bitarsformatet på 6502. 65c816 genererar 24-bitars adresser och använder två register, databankregistret ( DB
) och programbankregistret ( PB
), för att sätta bitarna 16-23 i den effektiva adressen. I båda fallen hänvisar 'bank' till ett sammanhängande 64 KB-segment av minne som är begränsat av adressintervallet $xx0000-$xxFFFF ,
där xx
är bankadressen, det vill säga bitarna 16-23 i den effektiva adressen. Både DB
och PB
initieras till $00
vid start eller återställning.
Under en opkod- eller operandhämtningscykel läggs PB till
programräknaren ( PC
) för att bilda den 24-bitars effektiva adressen. Skulle PC
"linda" (återgå till noll), kommer PB
inte att ökas. Därför är ett program begränsat av gränserna för banken där det körs. Underförstått av denna minnesmodell är att gren- och subrutinmål måste vara i samma bank som instruktionen som gör grenen eller anropet, såvida inte "långa" hopp eller subrutinanrop används för att exekvera kod i en annan bank. Det finns inga programmatiska medel genom vilka PB
direkt kan ändras.
Under en datahämtnings- eller lagringscykel läggs DB till en 16-bitars dataadress för att bilda den 24-bitars effektiva adress vid vilken data kommer att nås.
Denna processorkarakteristik gör det möjligt att på ett förnuftigt sätt exekvera 6502- eller 65c02-kod som använder 16-bitars adresser för att referera till dataelement. Till skillnad från PB kan
DB
ändras under programkontroll, något som kan göras för att komma åt data utöver gränserna för 16-bitars adressering . Dessutom kommer DB
tillfälligt att öka om en adress indexeras utöver gränserna för banken som för närvarande finns i DB
. DB
ignoreras om en 24-bitars adress specificeras som operanden till en datahämtning/lagringsinstruktion, eller om den effektiva adressen är på direkt (noll) sida eller hårdvarustacken . I det senare fallet används en underförstådd bank $00 för att generera den effektiva adressen.
Ytterligare ett tillägg till registeruppsättningen är det 16-bitars direkta sidregistret ( D
), som ställer in basadressen för vad som tidigare kallades nollsidan, men som nu kallas direktsida . Direkt sidadressering använder en 8-bitars adress, vilket resulterar i snabbare åtkomst än när en 16- eller 24-bitars adress används. Vissa adresseringslägen som erbjuder indirektion är också endast möjliga på direktsida. I 65(c)02 är den direkta sidan alltid de första 256 byten i minnet, därav "noll sida". I inbyggt läge kan 65c816 flytta direkt (noll) sida var som helst i bank $00
(de första 64 KB minne) genom att skriva 16-bitars startadressen till D
. Det finns en en-cykels åtkomststraff om D
inte är satt till en jämn sidas gräns.
Växla mellan lägen
Det aktuella driftsättet lagras i emuleringsbiten ( e
). Efter att redan ha lagt till de nya x-
och m
-bitarna till den tidigare uppsättningen av sex flaggor i statusregistret ( P
), fanns det inte tillräckligt med bitar kvar för att hålla den nya modbiten. Istället användes en unik lösning där lägesbiten lämnades "osynlig", utan att kunna nås direkt. Den nya XCE
-instruktionen (eXchange Carry with Emulation) byter ut värdet på emuleringsbiten med carry ( c
)-biten, bit 0 i statusregistret. Till exempel, om man vill gå in i ursprungligt läge efter att processorn har startat, skulle man använda CLC
för att rensa bärbiten och sedan XCE
för att skriva den till emuleringsbiten. Återgå till 65c02 emuleringsläge använder SEC
följt av XCE
.
Internt är 65c816 en helt 16-bitars design. M- och x
-bitarna i P
bestämmer hur användarregistren (ackumulator och index) ser ut för resten av systemet .
Vid återställning startar 65c816 i 6502-emuleringsläge, där m
och x
är inställda på 1 och kan inte ändras. Därför visas registren för resten av systemet som 8 bitar. Den mest signifikanta byten (MSB) i ackumulatorn ( B
-ackumulatorn) är inte direkt tillgänglig men kan bytas ut mot den minst signifikanta byten (LSB) i ackumulatorn (A -
ackumulatorn) genom att använda XBA -
instruktionen. Det finns ingen motsvarande operation för indexregistren ( X
och Y
).
Vid omkoppling till naturligt läge kommer MSB för X
och Y
att vara noll, och B
-ackumulatorn kommer att vara oförändrad. Om m
-biten i P
nollställs, "gängas" B -ackumulatorn till
A
-ackumulatorn för att bilda ett 16-bitars register (kallad C
-ackumulator). En laddning/lagring eller aritmetisk/logisk operation som involverar ackumulatorn och/eller minnet kommer att vara en 16-bitars operation – två busscykler krävs för att hämta/lagra ett 16-bitars värde.
Om x
-biten i P
rensas kommer båda indexregistren att ställas in på 16 bitar. Om det används för att indexera en adress, t.ex. LDA SOMEWHERE,X
, kommer 16-bitarsvärdet i indexregistret att läggas till basadressen för att bilda den effektiva adressen.
Om m-
biten i P
är inställd kommer ackumulatorn att återgå till att vara ett 8-bitars register och efterföljande operationer på ackumulatorn, med några få undantag, kommer att vara 8-bitars operationer. B -
ackumulatorn kommer att behålla det värde den hade när ackumulatorn arbetade i 16-bitarsläge. Undantagen är instruktionerna som överför det direkta sidregistret ( D
) och stackpekaren ( S
) till/från ackumulatorn. Dessa operationer är alltid 16 bitar breda i naturligt läge, oavsett tillståndet för m
-biten i statusregistret.
Om x-
biten i P
är inställd kommer inte bara indexregistren att återgå till 8 bitar, det som fanns i MSB medan det var i 16-bitarsläge kommer att gå förlorat, något en assemblerspråksprogrammerare inte har råd att glömma.
Ansökningar
System baserade på 65c816-varianter:
- Acorn Communicator
- Apple IIGS
- C-One och SuperCPU- förbättringar för Commodore 64
-
Super Nintendo Entertainment System : konsolens Ricoh 5A22 CPU är baserad på 65c816 .
- Dessutom inkluderar 30+ Super NES-spel Nintendo SA1 , ett 65c816-baserat co-processor-chip, i varje patron.
Se även
Citat
Bibliografi
- Ögon, David; Lichty, Ron (1986). Programmering av 65816 - inklusive 6502, 65C02, 65802 . Prentice Hall. ISBN 978-0893037895 .
Vidare läsning
- 65C816 Datablad ; Western Design Center; 55 sidor; 2018.
externa länkar
- 65C816 webbsida - Western Design Center
- 6502/65C02/65C816 Instruktionsuppsättning avkodad
- 65816/65C816 tekniska dokument - zophar.net
- A 6502 Programmer's Introduction to the 65816 – A Commodore World- artikel av Brett Tabke; innehåller CMD :s instruktionsuppsättningssammanfattning
- Undersöka 65C816-avbrott – En omfattande diskussion om avbrottsbehandling på 65C816