Кіріспе

8 бит микропроцессор

National Semiconductor компаниясының SC/MP (Simple Cost effective Micro Processor) – 1976 жылдың сәуір айында қолжетімді болған 8 бит микропроцессор. Ол жүйелерді мүмкіндігінше аз қосымша қолдау микросхемаларымен іске асыруға мүмкіндік беру үшін жасалған. SC/MP құрамында бірнеше SC/MP процессорларына (көптеген жүйелерде үш процессорға дейін) бір ғана негізгі жадты пайдалану арқылы мультипроцессорлық жүйе құруға немесе басқа негізгі орталық процессор (CPU) бар жүйеде контроллер ретінде жұмыс істеуге мүмкіндік беретін тізбектелген басқару сызығы болды. Оның өмірлік циклында SCMP 1-ден 3-ке дейін үш нұсқасы шығарылды, соңғы екеуі INS8060 және INS8070 деп те белгілі болды. Құныны төмендету үшін жүйе біттік тізбекті арифметикалық-логикалық құрылғыны (ALU) қолданды, сондықтан Intel 8080 немесе MOS 6502 сияқты параллельді ALU-ы бар заманауи процессорлардан айтарлықтай баяу болды. Тағы бір ерекшелігі – бағдарламалық тізілім 16 биттік адрестің төменгі 12 битіне ғана қол жеткізе алатындығы, ал жоғарғы 4 битін арнайы командаларды пайдаланып орнату қажет болды. Соның салдарынан командалар негізгі жадқа 4 кБ көлеміндегі 16 «бет» арқылы қол жеткізе алды, ал осы беттерден тыс жадқа қол жеткізу үшін бірнеше командалар қажет болды. Баяу жылдамдық пен беттік жадтың үйлесімі оның мақсатталған нарықтан тыс тартымдылығын шектеді, және бұл нарықта ол бірқатар пайдалы қосымша мүмкіндіктері бар Fairchild F8 процессорымен бәсекелесті. Жүйе салыстырмалы түрде аз қолданылды.

ALU және негізгі тіркелімдер

Арифметикалық логикалық құрылғы (ALU) бір ғана 8 биттік аккумулятор, AC негізінде құрылды. Екінші 8 биттік тіркегіш, "Extension" немесе E, AC-нің қосалқы көшірмесі ретінде пайдаланылуы мүмкін. Көптеген нұсқаулар E-ге тікелей қол жеткізе алмады; мысалы, деректерді жадтан тікелей E-ге жүктеу мүмкін емес. Оның орнына, AC-дегі мәнді E-ден оқуға болады немесе AC мен E-ні алмастыруға болады. E сондай-ақ ALU қолдайтын жеті логикалық/арифметикалық операциялар үшін бастапқы мән ретінде де пайдаланылуы мүмкін. Егер E басқа операциялар үшін қолданылмаса, оны Zilog Z80 сияқты конструкциялардағы көлденең тіркегіштерге ұқсас түрде қолдануға болады, бұл E-ні үзіліс кезінде AC мәнін сақтаудың жылдам тәсілі ретінде қызмет етеді. E-нің басты мақсаты сериялық I/O жүйесі үшін буфер ретінде жұмыс істеу болды. Бұл SIO нұсқаулығымен басқарылды, ол E-дегі ең кіші маңызды битті процессордағы SOUT тірегіне қосылған құлыпқа жылдырды. SIO нұсқаулығына бірнеше рет шақыру арқылы 8 биттік E мәнінің біттері біртіндеп шығысқа жіберілді немесе SIN тірегінен оқу үшін кері операция орындалды. 8 биттік мән толығымен оқылғаннан немесе жазылғаннан кейін, мәнді A-мен алмастыру арқылы және содан кейін A-ны жадқа жүктеу немесе сақтау арқылы жадқа жіберуге болады. E сондай-ақ AC-дегі логикалық операциялардың көзі ретінде пайдаланылуы мүмкін, мысалы, сериялық порттан күй байтын оқып, содан кейін AC-дегі маскамен оны АНД (AND) операциясынан өткізуге болады, бұл сыртқы құрылғыдан оқылған әртүрлі күй биттерін тексеру үшін. Жеке Күй тіркегіші 8 биттен тұрады. Ең кіші үш бит, 0-ден 2-ге дейін, тікелей тіреулерге қосылған, бұл сыртқы құрылғының күйін тексерудің оңай жолын қамтамасыз етеді. Тағы екі тіреу, Sense A және B, 4 және 5 биттерге қосылған. Sense A әдетте үзілістерге қызмет ету үшін қолданылады (төмендегі егжей-тегжейлі қараңыз). Үзілістерді 3-ші битті 0-ге орнату арқылы, Үзіліске рұқсат ету (IE) арқылы, DINT нұсқаулығымен немесе IEN нұсқаулығымен өшіруге болады, немесе мәнді A-ға және одан жылжыту арқылы және оны сол жерде өңдеу арқылы қосуға болады. 6 және 7-ші биттер әдеттегідей ағып кету және көшіру тулары болып табылады, көптеген процессорларда көрінеді.

Адрестік және индекстік регистрлер

Сол дәуірдегі 8 биттік микропроцессорлар сияқты, SC/MP 16 биттік адреске және 8 биттік дерек шинасына негізделген. Пин санының азайтуы үшін сыртқы адрестік шинада тек 12 пин болды, дерек шинасынан 4 пинді бөлісіп, толық 16 биттік адресті құрайды. Ішкі бағдарлама санағы он екі биттен тұрады, ал жоғарғы төрт битті орнату үшін жоғары байтқа 8 биттік мәнді көшіруге арналған жеке нұсқаулар бар. Бұл он алты 4 килобайттық беттен тұратын жад картасын ұсынады, ал бағдарлама коды өз бетінен тыс кодқа немесе PC-ге қатысты деректерге сілтеме жасай алмайды. Осылайша, жад әрқайсысы 4 кБ болатын 16 бетке бөлінген. Бұл дизайнның ерекшелігіне әкеледі: бағдарлама санағы бір беттің соңына жеткенде, ол келесі бетке өтудің орнына, ағымдағы беттің басына оралады. Бұл екі байттық нұсқау форматымен шектелген, ол опкод үшін бір байтты және 128-ден +127-ге дейінгі ауытқуды көрсету үшін екінші байтты пайдаланды, ол процессор тіркелімдеріндегі мәнге қосылып, толық 16 биттік адресті құрады. Мысалы, адрестің жадыдағы орны +10 орын бағдарлама санағындағы мәннен немесе +10 16 биттік индекс тіркелімдерінің біріндегі мәннен екенін көрсетуге болады. Бұл диапазоннан тыс жерге кіру үшін мекенжай индекс тіркелімдерінің бірінде сақталуы керек, содан кейін ауытқу нөлге орнатылады. Тіркелімдер 16 биттік болғандықтан, ал мәндерді жүктеуге арналған аккумулятор 8 биттік болғандықтан, толық адресті орнату бірнеше нұсқауды қажет етеді. Индекстер адрестеу моделі үшін маңызды болғандықтан, SC/MP төрт индекс тіркелімін, PR0-ден PR3-ке дейінгі «Пойнтер тіркелімдерін» қамтыды. PR0 бағдарлама санағы болды және әдетте пайдаланушы бағдарламаларымен өңделмейді. Келісім бойынша, PR1 әдетте ROM-ға, PR2 RAM-ға сілтеме ретінде пайдаланылды, ал PR3 үзілістер мен қосалқы шақырулар кезінде мекенжайды сақтау үшін қолданылды. SC/MP-де стек болмады, онда қайтару мәндері әдетте заманауи дизайнмен сақталады. Бағдарламалар қайтару адрестерін нақты кодпен сақтау керек еді. Төрт негізгі адрестеу режимі болды: PC-ге қатысты, индекстелген, дереу (нұсқаудың екінші байтындағы тұрақты, ауытқу емес) және автоматты индекстелген. PC-ге қатысты адрестеу индекстелгенмен бірдей болды, PR0 индекс тіркелімі ретінде таңдалды. Автоматты индекстеу циклдарды құруға көмектеседі. Егер ауытқу нөлден кем болса, Pointer Register мазмұны тиімді мекенжайдың мазмұны алынбастан немесе сақталмастан бұрын ауытқуға сәйкес азайтылады. Егер ауытқу нөлге тең немесе одан жоғары болса, Pointer Register мазмұны тиімді мекенжай ретінде қолданылады, ал тиімді мекенжайдың мазмұны алынғаннан немесе сақталғаннан кейін Pointer Register мазмұны ауытқуға сәйкес ұлғаяды. Бұл тіркелімдегі мәнді өзгерту үшін жеке нұсқаудың қажеттілігін жояды, сондықтан деректер блогының бастапқы мәнін PR-де жадқа сақтап, содан кейін бір нұсқауды шақыру арқылы барлық деректерді итерациялауға болады. Егер ауытқу теріс болса, ол соңғы мәнге қол жеткізбейінше азайтуды орындайды, егер ол оң болса, ол кейіннен ұлғайтады.

Қолдануды тоқтату

Жүйе Sense A желісіндегі үзілістерді автоматты түрде өңдеуді қамтиды. Үзіліс қабылданғанда және IE жоғары (қосулы) болса, келесі нұсқауды алуды бастамас бұрын жүйе басқа үзіліс болдырмау үшін IE-ді нөлдейді, содан кейін PC және PS3-тегі мәндерді ауыстырады. Бұл PR3-те қайтару мекенжайын сақтап, келесі нұсқауды PR3-те бұрын сақталған үзіліс өңдеушісінің кіру нүктесіне жіберуге әкеледі. Жүйе үзілістен қайтаруға тең келетін нұсқауды қамтымайды. Бұл басқа XPPC нұсқаусымен орындалуы мүмкін, PR3-те бұрын сақталған мекенжайды PC-ге көшіріп, орындалу тоқтаған жерден жалғасады. Дегенмен, бұл PR3-те дұрыс емес мекенжайды қалдырады, үзіліс өңдеушісінің басы емес, соңы. Бұл мәселені шешу үшін, негізгі кодқа қайта оралатын XPPC нұсқауын кіру нүктесінен бір нұсқау жоғары орналастыру қалыпты жағдай. Өңдеуші аяқталған кезде, ол осы нұсқауға қайта секіреді, сондықтан XPPC шақырылғанда PC дұрыс кіру нүктесінен бір позиция бұрын бағытталады. Жүйе нұсқауды шақырудан бұрын PC-ді арттыратындықтан, бұл келесі үзіліс дұрыс кіру нүктесінен басталатынын білдіреді. Бұл "шығу өңдеушісі" әдетте IE-ді 1-ге қайта орнатып, үзілістерді қайта қосады.

Автобус басқару

SC/MP-нің ерекшелігі – бірнеше SC/MP немесе, көбінесе, бір SC/MP және байланысты тікелей жадқа қол жеткізу (DMA) контроллерлеріне бір ортақ жадқа қол жеткізуді бөлісуге мүмкіндік беретін тізбекте жалғанған ортақ басқару желісі болды. Егер автобустағы чиптердің бірі жадқа қол жеткізе алса, ол ENOUT пинін жоғары деңгейге көтеріп, басқа чиптердің ENIN пиндеріне автобусты босату қажеттігін хабарлайтын. Көптеген басқа процессорларда мұндай жағдайда тақта дизайнерлері CPU-ны тоқтату үшін сыртқы логиканы қолдану қажет болатын, бұл ішкі нұсқаулардың уақытына байланысты кейбір қиындықтарға алып келгенімен, бұл сыртқы схемаларға көрінбейтін. SC/MP-де бұл функция толығымен ішкі құрылымында жүзеге асырылды, сондықтан осы мүмкіндікті іске асыру үшін схема тақтасында тек бір желі ғана қажет болды. Бастапқы мақсат – SC/MP, бір немесе бірнеше DMA контроллерлері және ортақ жадтан тұратын микробақылаушы сияқты қосымшаларды жасауды жеңілдету еді. Жүйенің жалпы құнының төмендеуіне бағытталған SC/MP-нің өзінің құнын азайту ниеті біттік сериялық ALU және жеке UART қажеттілігін жою үшін сериялық кіріс/шығыс желілерін енгізу туралы шешімдерге әкелді (бұл мүмкіндік кейінірек SC/MP III үлгісінде алынып тасталды). Осборн жүйенің шолуында оны "көп процессорлы қолданбалар үшін таңдаулы микропроцессоры" деп атады, бірақ бұл нарық күшті болған жоқ және шектеулі болды.

Әдеттегі емес ерекшеліктері

SC/MP-де подпрограммаға шақыру нұсқаулы болған жоқ. Оның орнына, құрастыру тілінде осы мүмкіндікті іске асыру үшін нұсқаулар тізбегін жасайтын JS макросы болды. Макрос адрестің жоғарғы байтын AC-ге жүктеді, содан кейін XPAH-ты шақырып, оны таңдалған сілтеме тіркегішінің жоғарғы байтына көшірді. Содан кейін XPAL-ды пайдаланып, төменгі байт үшін осы әрекетті қайталады. Одан кейін XPPC-ге PR-ден PC-ге 16 биттік мәнді беру үшін шақыру жасады. XPPC екі мәнді алмастыратындықтан, PC-нің ағымдағы мәні таңдалған PR-ге сақталады, ал подпрограммадан қайту бір XPPC арқылы мәнді кері көшіру арқылы іске асырылуы мүмкін. SC/MP нұсқауды алу алдында бағдарлама санағышын (PC) арттырады, сондықтан қайта орналастыру кезінде ол 0001 мекенжайынан нұсқауларды орындауды бастайды. Бұл да ауытқуларды есептеу кезінде ескерілуі керек, себебі ауытқу келесі нұсқаудың орнына, ауытқудың өзінің орнына қосылады. Жүйеде бір параметрді, P-ні қабылдайтын DLY (кешіктіру) нұсқаулы болды. Ол 13 + (2 x P) + (2^9 x P) + (2 x AC) микроциклдерге дейін жұмысты тоқтатты, бұл AC-дегі мәнді нөлге дейін үнемі кеміту арқылы жасалды. Бұл 13 мен 131,593 цикл аралығында кешіктіру жасауға мүмкіндік берді. Бұл көбінесе тізбектік порттармен қолданылды; бағдарлама AC-дегі мәнді белгілі бір жылдамдықпен бір битті жіберуге кеткен уақытқа орнатуы мүмкін, содан кейін келесіге дайын екенін тексеру үшін флаг тізбегінің бірінің мәнін тексеруі мүмкін. Процессор уақытты қатаң сақтауды талап етпеді, және төмен жылдамдықты қолданбаларда кристалл осцилляторын пайдалану қажет болмады, оны қарапайым конденсатормен алмастыруға болады.

Қолданылуы

SC/MP сонымен қатар, Кембридж ғылымы (кейін Sinclair Research Ltd) компаниясы шығарған MK14 деп аталатын бір тақталы микробасқарушының негізі ретінде де пайдаланылды. Montgomery Elevator Co (Moline IL, кейін KONE, Inc сатып алды) компаниясы 1975 жылы шығарған алғашқы микропроцессорлық лифт контроллері үшін SC/MP-ді негіз ретінде қолданды. Осы құрылғылардың көптегені бүгінгі күнге дейін АҚШ-тың әртүрлі ғимараттарында жұмыс істеп келеді.