Кіріспе

6502 отбасындағы CMOS микропроцессоры. Батыс Дизайн Орталығының (WDC) 65C02 микропроцессоры – танымал nMOS негізіндегі 8 биттік MOS Technology 6502 микропроцессорының CMOS нұсқасының жетілдірілген түрі. Ол бастапқы 6502-ге қарағанда аз қуатты пайдаланады, бірнеше мәселені шешеді және жаңа командаларды қосады. Қуатты пайдалану бастапқы 6502-нің сол жылдамдықтағы қуатты пайдалануынан 10-20 есе аз; оның төмен қуатты тұтынуы оны портативті компьютерлер мен өнеркәсіптік микробасқару жүйелерінде пайдалы етті. 65C02 сонымен қатар кейбір үй компьютерлерінде, сондай-ақ медициналық имплантацияланатын құрылғыларды қоса алғанда, кіріктірілген қолданбаларда қолданылды. WDC 65C02-нің әзірлеу жұмысы 1981 жылы басталды, ал 1983 жылдың басында үлгілер шығарылды. 65C02 көп ұзамай ресми түрде шығарылды. WDC дизайнды Synertek, NCR, GTE Microcircuits және Rockwell Semiconductor компанияларына лицензиялады. Rockwell-дің басты қызығушылығы кіріктірілген нарықта болды және осы мақсатта бірнеше жаңа командаларды қосуды сұрады. Бұл командалар кейіннен бастапқы нұсқаға көшірілді, содан кейін WDC W65C02 құру үшін өзінің екі жаңа командасын қосты. Кейіннен Sanyo да дизайнды лицензиялады, ал Seiko Epson HuC6280 ретінде одан әрі өзгертілген нұсқасын жасады. Алғашқы нұсқалар 40 контактілі DIP корпусында шығарылды және 1, 2 және 4 МГц жиіліктерінде қол жетімді болды, бұл бастапқы nMOS нұсқаларының жылдамдықтарымен сәйкес келді. Кейінгі нұсқалар PLCC және QFP, сондай-ақ PDIP корпустарында және әлдеқайда жоғары сағат жиіліктерімен шығарылды. WDC-нің қазіргі нұсқасы, W65C02S 14 толыққанды статикалық ядроға ие және 5 вольттан қуат алғанда ресми түрде 14 МГц жылдамдықпен жұмыс істейді.

Сағаттық белгілері

W65C02S 1,8 және 5 вольт аралығындағы (±5%) кез келген қолайлы қуат кернеуімен (VDD) жұмыс істей алады. Деректер парағындағы AC сипаттамалар кестесі 14 МГц жиілікте 5 В, 8 МГц жиілікте 3,3 В немесе 3 В, 4 МГц жиілікте 2,5 В және 2 МГц жиілікте 1,8 В кезіндегі жұмыс сипаттамаларын көрсетеді. Бұл ақпарат бұрынғы деректер парағының нәтижесі болуы мүмкін, себебі график көрсеткендей, типтік құрылғылар AC сипаттамалар кестесінде көрсетілгеннен жоғары жылдамдықпен жұмыс істей алады, және қолдау аппараттық құралдары жеткілікті болса, 5 вольт VDD кезінде 20 МГц жиілікте сенімді жұмыс істеуге оңай қол жеткізуге болады. W65C02S кез келген сағаттық жиілікті қолдау арқасында, жүйедегі басқа бөліктер үшін, мысалы 13,5 МГц (цифрлық SDTV luma үлгілеу жиілігі), 14,31818 МГц (NTSC түстік тасымалдаушы жиілігі × 4), 14,75 МГц (PAL квадрат пиксельдері), 14,7456 (бод жылдамдығы кристаллы) сияқты, идеалды жиілікте жұмыс істейтін сағатты пайдалануға мүмкіндік береді, егер VDD жиілікті қолдау үшін жеткілікті болса. Дизайнер Билл Мэнш FMAX микропроцессордың қосылымдарындағы сыйымдылық жүктемесі сияқты чиптен тыс факторларға тәуелді екенін атап өтті. Қысқа сигнал жолдары мен мүмкіндігінше аз құрылғыларды пайдалану арқылы жүктемені азайту FMAX-ты арттыруға көмектеседі. PLCC және QFP корпустары PDIP корпусына қарағанда қосылымдар арасындағы сыйымдылығы аз және баспалы схемалық тақтадағы орынды үнемдеуге мүмкіндік береді. WDC W65C02S-тің FPGA нұсқасы 200 МГц жиілікте сәтті жұмыс істегенін хабарлады.

Негізгі архитектура

65C02 көбінесе қуаттылығы төмен 6502 ретінде қарастырылғанымен, ол түпнұсқадағы бірнеше қателерді жойтады және бағдарламашыға кішірек және жылдам орындалатын бағдарламалар жазуға көмектесетін жаңа нұсқаулар, адрестеу режимдері мен мүмкіндіктерді қосады. Есептеулерге сүйенсек, орташа 6502 тілінде жазылған бағдарлама 65C02-де 10-15 пайызға дейін кішіретіп, орындалу жылдамдығын да сол деңгейде арттыруға болады. Бұл, ең алдымен, бір міндетті орындау үшін қолданылатын нұсқаулар санын азайту арқылы жадқа жиі кірудің алдын алу есебінен мүмкін болады.

Құжатталмаған нұсқаулар алынып тасталды

6502 түпнұсқасы 56 нұсқауға ие, олар әртүрлі адрестеу режимдерімен біріктірілгенде, мүмкін болатын 256 8 биттік опкод үлгілерінің ішінде 151 опкодты құрайды. Қалған 105 пайдаланылмаған опкодтар белгісіз, төменгі 4 біті 3, 7, B немесе F цифрларымен болатын кодтар толығымен қолданылмайды, ал төменгі 2 біті тек бір опкодқа ие. 6502 процесорында кейбір осы кодтар есептеулерді орындайды. 6502 нұсқаулық декодерінің жұмыс принципіне байланысты, опкодтың белгілі бір биттерін орнату нұсқауды өңдеудің кейбір бөліктерін іске қосады. Кейбір опкодтар процессорды дереу құлатады, ал басқалары пайдалы функцияларды орындайды және тіпті кейбір бағдарламашылар оларға ресми емес асемблерлік белгілеулер берген. 65C02 бұрын құжатталмаған нұсқау орындарындан кейбіреуін пайдаланатын жаңа опкодтарды қосады. Мысалы, $FF жаңа BBS нұсқауы үшін қолданылады. Нақты қолданылмаған опкодтар NOP-қа тең. 6502 бағдарламалары осы опкодтарды қолданса, олар 65C02 процесорында жұмыс істемейді.

Қателерді түзету

Бастапқы 6502 іске қосылғанда бірнеше қателіктер анықталды. Процессордың алғашқы нұсқаларында ROR (оңға жылжыту) нұсқаулары болмады және MOS Technology нұсқаулықтарында да олар сипатталмаған. ROR өндіріс барысында өте ерте енгізілді және процессорды қолданатын көптеген машиналар осы нұсқауды қолдайды. 6502-нің барлық NMOS нұсқаларында жанама адрестеуді пайдаланған кезде қателік кездеседі. Бұл адрестеу режимінде JMP нұсқаулығының мақсатты мекенжайы жадтан, секіру векторынан алынады, ал емес JMP нұсқаулығының операндысы. Мысалы, JMP ($1234) жад орындарындағы мәнді (кем маңызды байт) және (көп маңызды байт) алып, осы мәндерді бағдарламалық тіркеуішке жазады, содан кейін процессор векторда сақталған мекенжайда орындалуын жалғастырады. Бұл қателік векторлық мекенжай жад бетінің шегімен аяқталғанда пайда болады. Бұл жағдайда JMP мақсатты мекенжайдың көп маңызды байтын жаңа беттен емес, бастапқы беттен алады. Сондықтан JMP ($12FF) мақсатты мекенжайдың кем маңызды байтын және мақсатты мекенжайдың көп маңызды байтын емес, одан алады. 65C02 осы мәселені шешті. Көбінесе қателік емес, кемшілік ретінде қарастырылатын NMOS 6502-нің күй тіркеуішіндегі (D) ондық белгісінің күйі қалпына келтіру немесе үзілістен кейін белгісіз болады. Бұл бағдарламашылар арифметикалық операциялармен байланысты қателерді болдырмау үшін осы белгіні белгілі бір мәнге орнатуы керек дегенді білдіреді. Сондықтан, 6502 үзіліс өңдеушілерінің барлығында CLD (Clear Decimal) нұсқаулығы және қалпына келтіру кодын бастапқыда табуға болады. 65C02 кез келген үзіліске немесе аппараттық қалпына келтіруге жауап ретінде күй тіркеуішін стекке итеріп, осы белгіні автоматты түрде тазалайды, осылайша процессорды екілік арифметикалық режимге қайтарады. INC addr сияқты оқу-өзгерту-жазу (RMW) нұсқауларын орындаған кезде барлық NMOS нұсқалары addr-ге екі рет жазады, алдымен addr-де табылған ағымдағы мәнді қайта жазады, содан кейін өзгертілген мәнді жазады. Егер addr аппараттық тіркеуіш болса, бұл мінез-құлық қателерді анықтауды қиындатады. Бұл аппараттық жүйе тіркеуіштегі мәннің өзгеруін бақылап, содан кейін әрекет жасаса, болуы мүмкін. Бұл жағдайда ол екі әрекет жасайды, біреуі бастапқы мәнмен, екіншісі жаңа мәнмен. 65C02 керісінше, addr-ді екі рет оқып, содан кейін бір рет жазады. Индекстелген адрестеуді орындаған кезде, егер индекстеу беттің шекарасын кесіп өтсе, барлық NMOS нұсқалары дұрыс мекенжайға қол жеткізбей, жарамсыз мекенжайдан оқиды. RMW нұсқаулары сияқты, бұл мінез-құлық индекстеу арқылы аппараттық тіркеуіштерге қол жеткізу кезінде проблемалар тудыруы мүмкін. 65C02 осы мәселені шешу үшін индекстеу беттің шекарасын кесіп өткен кезде нұсқаулық опкодын оқуды жүзеге асырады. Алайда, бұл түзету базалық мекенжай жұп беттің шекарасында болған кезде пайда болатын жаңа қателікке әкелді (бұл индекстеу келесі бетке ешқашан өтпейді дегенді білдіреді). Жаңа қателікпен, индекстеуден бұрын базалық мекенжайда жалған оқу орындалады, мысалы, LDA $1200,X X-тің мәні қосылғанға дейін жалған оқуды жасайды. Егер аппараттық тіркеуіш мекенжайларында индекстеу болса, бұл қателік белгісіз мінез-құлыққа әкелуі мүмкін. Егер NMOS 6502 BRK (бағдарламалық үзіліс) опкодын аппараттық үзіліс пайда болған кезде оқып жатса, BRK процессор аппараттық үзіліске жауап берген кезде елемей қалдырылады. 65C02 осы жағдайды дұрыс шешеді, үзіліске қызмет көрсетеді және содан кейін BRK-ны орындайды.

Қуаттылығы аз режимдер

Жоғарыда аталған жаңа командалардан басқа, WDC сондай-ақ төмен қуат режимдерін қолдау үшін STP және WAI нұсқауларын қосты. STP процессорды тоқтатып, аппараттық қайта орнату (reset) берілгенге дейін барлық өңдеуді тоқтатты. Бұл жүйені «ұйықтатуға» және қайта орнату арқылы оны жылдам оятуға пайдалануға болатын еді. Әдетте, бұл үшін негізгі жадты сақтау үшін сыртқы жүйе қажет болатын, сондықтан ол кеңінен қолданылмады. WAI да ұқсас әсер етті, төмен қуат режиміне кірді, бірақ бұл нұсқау үзіліс келгенде процессорды қайта оятты. Бұрын үзілісті басқару, үзіліс келді ме жоқ па дегенді тексеру үшін циклді қайта-қайта орындауды (кейде «айналу» деп атайды), келген жағдайда оның түрін тексеруді және содан кейін өңдеу кодына секіруді қамтитын. Бұл процессордың үзіліс болмаған кезде де, процестің барлық кезеңінде жұмыс істеп тұрғанын білдіреді. 65C02-де үзіліс кодына код жазу үшін бірден немесе нұсқаудан кейін үзіліс векторын (interrupt vector) орналастыру қажет болатын. Бұл нұсқау кездескенде өңдеу тоқтатылып, процессор төмен қуат режиміне ауысатын. Үзіліс келгенде, ол дереу үзіліс векторын өңдеп, сұранысты орындайтын. Бұл өнімділікті сәл жақсартты. «Айналу» жағдайында үзіліс циклдің нұсқауларының ортасында келсе, оны басқарушыдан қайтып келгеннен кейін қайта іске қосуға мүмкіндік беру үшін процессор өзінің орнын сақтау үшін бір цикл жұмсайтын. Ал STP нұсқауын пайдаланғанда, процессор барлық нұсқаулардың толық орындалуы кепілдендірілген белгілі бір жерде төмен қуат күйіне кіреді, сондықтан үзіліс келгенде ол ешқандай нұсқауды үзіп тастамайды және процессор күйін сақтау үшін цикл жұмсамай қауіпсіз жалғастыра алады.

65SC02

65SC02 – биттік нұсқаулары жоқ WDC 65C02 процессордың бір түрі.