CISC mikroprocesszor From Wikipedia, the free encyclopedia
A Motorola 68000 egy 16/32 bites[1] CISC mikroprocesszor mag (és konkrét processzor), amelyet a Freescale Semiconductor, azaz a Motorola korábbi félvezetőgyártó üzemága (Semiconductor Products Sector) tervezett és gyártott. Az 1979-ben bemutatott HMOS technológiájú processzor az első tagja volt a sikeres 32 bites m68k processzorcsaládnak, amely előre-kompatibilis volt a sorozat későbbi tagjaival, a 16 bites szélességű külső busz korlátai ellenére. 30 évvel később a 68000-es architektúra még mindig használatban van.
A 68000-es a MACSS (Motorola Advanced Computer System on Silicon) projektből született, amely 1976-ban kezdődött egy teljesen új architektúra kifejlesztése céljából, a visszafelé kompatibilitás teljes mellőzésével. Ez inkább a már létező, 8 bites 6800-as vonal nagyobb teljesítményű testvére, kiegészítője lett volna, mint kompatibilis utódja. Végül a 68000-es megtartotta a busz-protokoll kompatibilis üzemmódját a létező 6800-as eszközökhöz, és elkészült egy 8 bites adatbusszal rendelkező verzió. Azonban a tervezők a jövőbe, az előre-kompatibilitásra koncentráltak, ami előnyt jelentett az M68K platformnak a későbbi 32 bites architektúrákkal szemben. Így pl. a CPU regiszterei mind 32 bit szélességűek voltak, még akkor is, ha a processzor belső adatstruktúrái ritkán működtek egyszerre mind a 32 biten. A MACSS fejlesztőcsapatot erősen befolyásolta a miniszámítógépek, azaz pl. a PDP-11 és VAX rendszerek processzorainak felépítése, amelyek mikrokódja hasonlóan működött.
Az 1970-es évek közepén a 8 bites processzorgyártók versenybe kezdtek a 16 bites generáció bevezetéséért. A National Semiconductor volt az első az IMP-16 és PACE processzorokkal 1973–1975-ben, de ezeknek sebességi problémáik voltak. 1977-ben az Intel 8086 nagy népszerűségre tett szert. A Motorola a konkurencia megelőzése érdekében döntött a hibrid 16/32 bites felépítés bevezetéséről és ezt következetesen véghez is vitte. A késői belépés a 16 bites arénába előnyökkel is járt: a processzorokba több tranzisztor került – kb. 40 000 aktív elem, szemben a 8086-os 20 000-es számával –, 32 bites makroutasítások és a beharangozott könnyű használat.
Az eredeti MC68000 3,5 mikronos csíkszélességű HMOS technológiával készült. Hivatalosan 1979 szeptemberében jelentették be,[2] az első minták 1980 februárjában készültek el, a forgalmazás ugyanazon év novemberében kezdődött.[3] Kezdetben 4, 6 és 8 MHz-es órajelű chipek készültek, a 10 MHz-es változat 1981-ben, a 12,5 MHz-es csipek 1982 júniusában[3] jelentek meg. Az MC68000 16,67 MHz-es „12F” jelű változata volt a leggyorsabb eredeti HMOS csip, ez az 1980-as évek végén jelent meg. Thomas Guntert, a Motorola visszavonult alelnökét a 68000-es atyjaként is emlegetik.
A 68000-es vált a Unix munkaállomások domináns processzorává. Ezek között voltak a Sun és az Apollo/Domain munkaállomások. Az asztali és mikrogépek területén is előretört, az Amiga, Atari ST, Apple Lisa és Macintosh gépek is 68000-es CPU-val készültek. Az első asztali lézernyomtatókat is ezzel a processzorral szerelték, beleértve az eredeti Apple Inc. LaserWriter és HP LaserJet nyomtatókat. 1982-ben a 68000-es új utasításkészlet-architektúrát kapott, amely lehetővé tette a virtuális memóriakezelést és megfelelt a Popek és Goldberg-féle virtualizációs követelményeknek. A korszerűsített csip a 68010 jelet kapta. Ennek egy továbbfejlesztett változata, a kisebb példányszámban gyártott 68012 31 bitre növelt címsínt (címbuszt) tartalmazott.
Olcsó rendszerek és kisebb memóriaigényű vezérlőalkalmazások számára a Motorola ugyancsak 1982-ben bevezette a 8 bites rendszerekkel kompatibilis MC68008 processzort: ez egy 68000-es mag 8 bites adatbusszal és keskenyebb, 20 bites címbusszal. 1982 után a cég a 68020 és 88000 projektekre helyezte a hangsúlyt.
A Motorolán kívül a HMOS 68000 processzort gyártotta még a Hitachi: ez volt a HD68000 jelű chip, amely 2.7 mikronos csíkszélességgel készült és 12.5 MHz órajelet használt,[3] ezen kívül a Mostek (MK68000), Rockwell (R68000), Signetics (SCN68000), Thomson/SGS-Thomson (eredetileg EF68000, majd később TS68000 jelöléssel), és a Toshiba (TMP68000). A Toshiba gyártotta még a CMOS 68HC000 (TMP68HC000) változatot is.
A 68HC000 volt az első CMOS technológiával készült 68000-es. Ezt a Hitachi tervezte és a két cég közösen vezette be 1985-ben.[4] A Motorola változat jele MC68HC000, a Hitachié HD68HC000 volt. A 68HC000 verzió 8-tól 20 MHz-ig terjedő órajellel készült. A CMOS-alapú felépítéstől eltekintve ez a chip teljesen azonos a HMOS verzióval, de az áramfelvétele jóval kisebb. Az eredeti HMOS MC68000 teljesítményfelvétele kb. 1.35 watt körül volt, 25 °C környezeti hőmérsékleten, órajeltől függetlenül, míg a MC68HC000 fogyasztása csak 0.13 watt 8 MHz-en és 0.38 watt 20 MHz-en. (A CMOS áramkörökkel ellentétben a HMOS akkor is áramot fogyaszt, mikor nem csinál semmit, és az áramfelvétel csak kicsit változik az órajeltől függően). Az Apple a 68HC000 chipet választotta Macintosh Portable gépe processzorának.
A Motorola a MC68008-ast a MC68HC001-es chippel váltotta fel 1990-ben.[5] Ez a chip sok tekintetben a 68HC000-ra hasonlított, azonban az adatbusza képes volt mind 16-, mind 8 bites üzemmódban működni; az üzemmódot egy bemeneti lábon lehetett kapcsolni processzor-resetnél, így ez a processzor olcsóbb 8 bites memóriákkal is működhetett.
A 68000-es fejlesztése a későbbiekben a modern beágyazott vezérlőalkalmazások és a chipre integrált perifériák felé mozdult el. A 68EC000 chipben és SCM68000 magban a címbuszt 32 bitre terjesztették ki, megszüntették az M6800 perifériabuszt, és letiltották a MOVE from SR (adatmozgatás az állapotregiszterből) utasítás használatát a felhasználói módú programokban.[6] 1996-ban a Motorola a különálló magot egy teljesen statikus áramkörrel váltotta fel, amely mindössze 2 µW-ot fogyasztott alacsony áramfelvételű üzemmódban, ez volt a MC68SEC000 jelű chip.[7]
A Motorola 1996-ban beszüntette a MC68000 és MC68008 HMOS változatainak gyártását,[8] viszont a Motorolából kivált Freescale Semiconductor továbbra is gyártja a MC68HC000, MC68HC001, MC68EC000 és MC68SEC000 chipeket valamint a MC68302, MC68306 és a DragonBall mikrovezérlők különféle változatait. A 68000-es architektúra leszármazottai, a 680x0, a CPU32, és a ColdFire családok még mindig gyártásban vannak.
Miután bevált az „igazi” 32 bites mikroprocesszorok körében, a 68000-et különféle mikrovezérlők magjaként kezdték használni. 1989-ben a Motorola bemutatta az MC68302 jelű kommunikációs processzort,[9] ami elnevezése szerint egy ipari kommunikációs feladatokra, pl. ISDN hálózatokba szánt „integrált multiprotokoll processzor” (integrated multiprotocol processor, azaz IMP).[10]
A 68EC000 a 68000 olcsó változata, beágyazott vezérlő alkalmazásokhoz tervezték. A 68EC000 8- vagy 16 bites adatbuszt képes használni, és ezek között váltani is tud, egy reset segítségével.[11]
Különböző órajelen működő változatai vannak, közöttük a 8 és 16 MHz-es konfigurációk, melyek 2,100 és 4,376 Dhrystone-os teljesítmény nyújtanak. Ezekben a processzorokban nincs lebegőpontos egység és nehezen megoldható a koprocesszor (MC68881/2) illesztése, ugyanis az EC sorozatból hiányoznak a szükséges koprocesszor-utasítások.
A 68EC000 audioalkalmazásokban került felhasználásra kontrollerként, pl. Ensoniq hangszerekben és hangkártyákban, ahol a MIDI szintézer része.[12] Az Ensoniq hangvezérlőkben a kontroller számos előnyt nyújtott, összehasonlítva más gyártók CPU nélküli eszközeivel. A processzor lehetővé tette, hogy a hangvezérlő különböző audiofeladatokat végezzen, mint pl. MPU-401 MIDI szintézis vagy MT-32 emuláció, mindezt külső tárrezidens (terminate and stay resident, TSR) program nélkül. Ez javította a szoftverkompatibilitást, csökkentette a CPU használatot és szükségtelenné tette a gazdagép memóriájának használatát.
A 68EC000 magot később a Motorola/Freescale m68k-alapú DragonBall processzoraiba építették be. Ilyen a processzor volt a Sega Saturn játékkonzol hangvezérlőjében is, és a HP JetDirect LaserJet printerek Ethernet-vezérlőjében is az 1990-es években.
A bevezetésekor a 68000-et eleinte drágább rendszerekben használták, pl. olyan többfelhasználós mikroszámítógépekben, mint a WICAT 150 , a korai Alpha Microsystems, Sage II / IV számítógépekben, Tandy TRS-80 Model 16-ban, és a Fortune 32:16-ban; ezen kívül egyfelhasználós munkaállomásokban mint pl. a Hewlett-Packard HP 9000 Series 200 rendszereiben, az első Apollo/Domain rendszerekben, a Sun Microsystems Sun-1 modelljében, és a Corvus Concept asztali gépben (ami egy vastag pizzás doboz méretű volt egy monitorral a tetején); továbbá grafikus terminálokban mint a DEC VAXstation 100 és Silicon Graphics IRIS 1000 and 1200 gépeiben. A Unix rendszerek rövidesen a 68k család későbbi, nagyobb teljesítményű tagjait kezdték alkalmazni, és ezek végig megőrizték népszerűségüket a piacon az 1980-as években.
Az 1980-as évek közepére a csökkenő termelési költségek miatt megnyílt az út a 68000-es személyi- és otthoni (mikro-) számítógépekben (home computer) történő felhasználása előtt, kezdve az Apple Lisa és Macintosh gépeivel, amelyeket a Commodore Amiga, Atari ST, és a Sharp X68000 követett. A 68008-at azonban viszonylag kevés mikrogépben használták. Ezek közül a Sinclair QL volt a kereskedelmileg legjelentősebb (bár a QL az ICL One Per Desk testvérgépe volt, amely szintén 68008-ast használt). A Helix Systems (USA, Missouri) az SWTPC SS-50 rendszerbusz általa tervezett kiterjesztése, az SS-64 alapján 68008-alapú rendszerek gyártásába kezdett.
Miközben a számítógépes fejlődés üteme miatt a 68000 CPU rövidesen elavulttá vált az asztali gépek és munkaállomások körében, a processzor tekintélyes helyet szerzett a beágyazott rendszerek terén. Az 1980-as évek elején a 68000-es processzorok már 30 USD alatt beszerezhetőek voltak. A videójáték-gyártók több 68000-es processzorra épülő játéktermi gépet, otthoni játékgépet és videójáték-konzolt készítettek, ilyen volt pl. az Ataritól az 1982-es Food Fight, az egyik első 68000-alapú játéktermi (arcade) gép. Ezt továbbiak követték: a Sega System 16, Capcom CP System és CPS-2, és a Neo Geo az SNK-tól. Az 1980-as évek végére a processzor ára annyira lecsökkent, hogy megérte az otthoni játékgépekbe beépíteni; így született a Sega Mega Drive (Genesis) konzol. 1993-ban a multiprocesszoros Atari Jaguar konzol 68000-es processzort használt támogató/kiegészítő chip szerepében, de a fejlesztők a 68000-est elsődleges processzorként kezdték használni a programokban, közismertsége miatt.
A 68000 nagy sikert ért el beágyazott vezérlőként. Már 1981-ben megjelent a 68k vezérlésű Imagen Imprint-10 lézernyomtató. Az 1984-ben megjelent HP LaserJet nyomtatót 8 MHz-es Motorola 68000 processzor vezérelte. Más gyártók is követték a példát, így az Apple az 1985-ös LaserWriter-rel, amely az első PostScript lézernyomtató volt. A 68000-et az 1980-as évek során széles körben használták lézernyomtatókban, és később az 1990-es években olcsóbb nyomtatókban.
A 68000 sikeres volt az ipari vezérlés területén is. A sikeres 68k alapú PLC vezérlőrendszerek gyártói: az Allen-Bradley, a Texas Instruments és a TI részlegének felvásárlása után a Siemens. A vezérlőrendszerek felhasználói nem engedhetik meg azt a gyors elavulási tempót, ami a fogyasztói elektronikában megfigyelhető, ezért teljesen valószínű, hogy a 20 évvel ezelőtt telepített ilyen rendszerek megbízhatóan működnek még a 21. században is.
A 68000-es architektúrán alapuló 683XX mikrovezérlőket hálózati és telekommunikációs berendezésekben is használnak, továbbá tévékben, set-top boxokban, laboratóriumi műszerekben és orvosi berendezésekben, még kézi számológépekben is. Az MC68302 chip és származékai Cisco, 3com, Ascend, Marconi, Cyclades és más cégek telekommunikációs berendezéseiben működnek. A letűnt Palm PDA-k és a Handspring Visor DragonBall processzorra épültek, ami szintén a 68000 egy származéka. A Texas Instruments csúcskategóriás grafikus kalkulátorait, a TI-89, TI-92 sorozat tagjait és a Voyage 200-at szintén 68000 processzor vezérli. A korai verziók specializált mikrovezérlőt használtak statikus 68EC000 maggal; a későbbiek standard MC68SEC000 processzort használnak.
A 68000 egy módosított változata képezte a magját az IBM System/370 processzor PC-alapú IBM-kompatibilis hardver-emulátorának, az IBM XT/370-nek.
Az m68k architektúra igen fejlett jellemzőkkel rendelkezett, amelyek más felépítésekben csak sokkal később jelentek meg. Ilyenek például a privilégiumszintek vagy a fejlett kivételkezelés. Az m68k egy belsőleg 32 bites architektúra, amely azonban mindig tartalmazta a 16 bites rendszerekhez való illesztés lehetőségét.
Az MC68000 főbb jellemzői:
A 68000 család bájtsorrendje big-endian. A big-endian bájtsorrendnél az egy word/dwordben tárolt bájtok logikai és fizikai sorrendje megegyezik, hasonlóan a hálózati bájtsorrendhez.
Az alapvető adattípusok: bitek, BCD számjegyek, bájt (8 bit), szó (16 bit), duplaszó (v. long, 32 bit).
A 68000 processzor elméletileg 24 bites címzést használt, de a 24 bites címet 23 bemeneti címvonal (A1-A23) és két vezérlőjel (UDS, LDS) segítségével határozta meg, amelyek az A0 értékét állították, így állt elő a 24 bites cím (A0-A23). Ezzel 16 MiB fizikai memóriát tudott megcímezni byte-os felbontásban. A címszámítás és tárolás minden esetben 32-bitet használt, csak a legfelső helyiértékű byte-ot nem vette figyelembe, a címvonalak fizikai hiánya miatt. Ez lehetővé tette a folytonos 32 bites címteret használó programok futtatását. A Motorola ezzel a belső 32 bites címtér előre-kompatibilitását igyekezett biztosítani, lehetővé téve a teljes 32 bites címzés használatát, amikor azt később megvalósítják.[13]
Ez azonban nem tartotta vissza a programozókat az előre-inkompatibilis kód írásától. A 24 bites szoftver, amely elhanyagolta a legfelső címbájtot vagy más célokra használta azt, hibát okozhatott a 32 bites 68k hardveren. Például a korai, 7.0 előtti Apple Mac OS verziók a memóriablokk fő pointereinek felső bájtját jelzőbitek tárolására használták (pl. 'zárt' v. 'törölhető'). A későbbi verziókban a jelzőbitek máshova kerültek és az Apple a Mac IIci 1989-es megjelenésével elkezdett "tisztán 32 bites" ROM-okkal ellátott gépeket szállítani.
A 68000 processzorban a regiszterek 32 bitesek (néhány kivételtől eltekintve), az adat- és a címregiszterek külön vannak választva. Az adatregiszterek abban különböznek a címregiszterektől, hogy lehetővé teszik a 8- és 16 bites adatok írását úgy, hogy a magasabb helyiértéken lévő bitek értéke nem változik, míg a címregiszterek írásakor mind a 32 bit megváltozik, és azokba nem is megengedett a 8 bites írás. A regiszterkészlet:
A programszámláló belsőleg 32 bites, de a 68000 processzor 24 bites címbusza miatt a legfelső bájtot nem használja, így a PC értéke a 24 bites címtéren belül marad.
A regiszterek száma lehetővé teszi, hogy a processzor gyorsan reagáljon a megszakításokra, ilyenkor ugyanis a 8 adatregisztert (D0–D7) és 7 címregisztert (A0–A6) kell elmenteni, összesen 15-öt, viszont a normál működéshez is megfelelő a regiszterek száma. (Az A7 regiszter is menthető szupervizor módban).
A processzor állapotregisztere 16 bites és két bájtra osztható. Az alsó bájt, azaz a 0-7 bitek alkotják a "felhasználói bájt"-ot, amelyben a 68000 összehasonlító, számtani és logikai műveletei különböző biteket állítanak, amiket később feltételes utasításokban (pl. ugrásoknál) lehet felhasználni. Ezek: "zéró" (Z), "carry" (C), "túlcsordulás"/"overflow" (V), "extend" (X), és "negatív" (N) jelzőbitek. Az "extend" (X) jelző különbözik a "carry" átvitelbittől, a nem túlcsordulás okozta kilépő bitet tárolja. A 8-15 bitek alkotják a "rendszer bájt"-ot, ebben egyéb vezérlőbitek vannak, pl. a megszakítási maszk, szupervizor állapotjelző és a trace bit.
A Motorola 68000 regiszterei felhasználói üzemmódban: | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
31 | 16 | 15 | 8 | 7 | 0 | – bitek | |||||||||||||||||||||||||||
_ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | D0 | NYOLC ADAT- REGISZTER |
D1 | |||||||||||||||||||||||||||||||||
D2 | |||||||||||||||||||||||||||||||||
D3 | |||||||||||||||||||||||||||||||||
D4 | |||||||||||||||||||||||||||||||||
D5 | |||||||||||||||||||||||||||||||||
D6 | |||||||||||||||||||||||||||||||||
D7 | |||||||||||||||||||||||||||||||||
31 | 16 | 15 | 8 | 7 | 0 | – bitek | |||||||||||||||||||||||||||
_ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | A0 | HÉT CÍM- REGISZTER |
A1 | |||||||||||||||||||||||||||||||||
A2 | |||||||||||||||||||||||||||||||||
A3 | |||||||||||||||||||||||||||||||||
A4 | |||||||||||||||||||||||||||||||||
A5 | |||||||||||||||||||||||||||||||||
A6 | |||||||||||||||||||||||||||||||||
A7 | USER STACK POINTER | ||||||||||||||||||||||||||||||||
(USP) | |||||||||||||||||||||||||||||||||
PC | PROGRAM COUNTER | ||||||||||||||||||||||||||||||||
CCR | STATUS REGISTER | ||||||||||||||||||||||||||||||||
7 | 0 | – bitek | |||||||||||||||||||||||||||||||
A Motorola 68000 regiszterei felügyelői (supervisor) üzemmódban: | |||||||||||||||||||||||||||||||||
A D0–D7 és A0–A6 regiszterek szerepe nem változik. | |||||||||||||||||||||||||||||||||
31 | 16 | 15 | 8 | 7 | 0 | – bitek | |||||||||||||||||||||||||||
A7' | SUPERVISOR STACK POINTER | ||||||||||||||||||||||||||||||||
(SSP) | |||||||||||||||||||||||||||||||||
CCR | SR | STATUS REGISTER | |||||||||||||||||||||||||||||||
15 | 8 | 7 | 0 | – bitek |
Forrás:[14]
Ez a modell a 68000 és a 68008 processzorokra érvényes, a 68010-nél már megváltozott, pl. megjelent a Vector Base Register (VBR) és egyéb regiszterek.
A 68000 processzorcsalád egyik jellegzetes vonása a nagymértékben ortogonális utasításkészlet: majdnem mindegyik gépi utasítás használhat minden típusú címzést. Az utasítások 0, 1 vagy kétoperandusúak lehetnek. Egy kétoperandusú utasítás a következő alakú:
CMD.S src, dst
ahol az CMD az utasítás mnemonikja, .S az adattípus utótagja, az src és dst az operandusok. Az .S utótag azt jelzi, hogy az utasítás milyen méretű adaton dolgozik: S helyett { B, W, L } állhat: a .B 8 bites (bájt), .W 16 bites (szó), .L 32 bites (long) adatot jelent. A kétoperandusú utasításoknál az src a forrásoperandust, az dst a céloperandust határozza meg.
Az utasításokat az utasításkód és címzési mód határozza meg, a minimális utasításméret 16 bit (2 bájt). Sok utasítás és címzéskombináció hossza ezt meghaladja, ekkor a teljes utasítás kiegészítő szavakat tartalmaz: az utasítások hossza egytől öt szóig terjedhet.
Az operandusokban az alábbi 14 címzési mód használható (a 68000, 68008, 68010 processzoroknál):[15]
jelölés | elnevezés | példák |
---|---|---|
Regiszter direkt címzés | ||
Dn | adatregiszter | CLR.B D0 |
An | címregiszter | MOVEA.W A0,A1 |
Abszolút adatcímzés | ||
(xxx).W | 16 bites abszolút memóriacím (absolute short) | CLR.B ($8000).W |
(xxx).L | 32 bites abszolút memóriacím (absolute long) | CLR.B ($11008000).L |
PC-relatív címzés | ||
d16(PC) | PC-relatív 16 bites címeltolással | CLR.B 22(PC) |
d8(PC,Rn.s) | PC-relatív 8 bites címeltolással és index-regiszterrel | CLR.B 10(PC,A1.W) |
Regiszter indirekt címzés | ||
(An) | regiszter indirekt | CLR.B (A0) |
(An)+ | regiszter indirekt automatikus növeléssel (poszt-inkrementális) | CLR.B (A0)+ |
-(An) | regiszter indirekt automatikus csökkentéssel (pre-dekrementális) | CLR.B -(A0) |
d16(An) | regiszter indirekt 16 bites címeltolással (offset) | CLR.B 255(A0) |
d8(An,Rn.s) | regiszter indirekt cím 8 bites címeltolással és index-regiszterrel | CLR.B $44(A0,D0.L) |
Közvetlen címzés (immediate) | ||
#xxx | közvetlen (immediate, egy állandó érték) | MOVE.L #15,D0 |
#d8 | gyors közvetlen (quick immediate) | MOVEQ.L #$80,D0 |
Beleértett címzés (implied) | ||
nincs | beleértett regiszter (pl. SR, USP, SSP, PC, VBR, SFC, DFC) | PEA ; RTS |
Ahol
A 68000 assemblerek többsége a "$" jelet használja a hexadecimális számok jelölésére.
Abszolút vagy közvetlen címzésnél szimbolikus nevek is használhatók (ezt az assemblerek lehetővé teszik).
A csökkentés és növelés (pl. (A0)+ és -(A0) esetén) értéke függ az operandus méretétől: byte címnél 1, word esetén 2, long adatnál 4.
A PC-relatív címzés pozíciófüggetlen kód esetén hasznos.
A gyors közvetlen módú címzésnél az érték magában az utasításkódban tárolt 8 biten van megadva, és előjelkiterjesztéssel lesz 32 bites értékre alakítva. A MOVEQ #0,D0 pl. gyorsabb, mint a CLR.L D0 (mindkettő nullázza a D0 regisztert). Az ADDQ, SUBQ utasításokban az érték csak 3 biten tárolódik, és a 0 8-nak felel meg.
Az m68k család fejlettebb processzoraiban – a 68020-tól kezdve – újabb, bonyolultabb címzési módok is megjelentek (pl. indirekt indexelt, PC-relatív indirekt indexelt).
A 68000 processzornak 56 utasítása van. Az utasítások az alábbi csoportokba oszthatók:
A felsorolás nem teljes. Az utasításkészletet részletesen leírják a 68000 programozói kézikönyvek.
A 68k processzoroknak nincsenek külön veremkezelő utasításai, az általános adatmozgatásra használt MOVE utasítás, megfelelő operandusokkal történő használata nyújtja a megoldást erre a feladatra. Például az x86 architektúra PUSH <regiszter> utasításának itt a MOVE.L Rn,-(SP) utasítás felel meg, amely csökkenti a veremmutatót a mozgatott adat mennyiségével (itt 4-gyel: ezt a .L utótag jelzi; adattípus long), majd a veremmutatóban tárolt címre beírja a megadott regiszter tartalmát. Az alkalmazott pre-dekrementált címzésmód bármely címregiszter esetén használható, nem csak a veremmutató esetében.
A CPU és később az egész processzorcsalád két privilégium-szintet valósított meg. A felhasználói mód (user mode) mindenhez hozzáférést adott a megszakítási szintek vezérlését kivéve. A szupervizor privilégium szint mindent megengedett. A megszakítások végrehajtása mindig szupervizor módban történt. A szupevizor módot a szupervizor bit jelezte a státuszregiszterben, ami látható volt a felhasználói módú programok számára is.
Az előnye ennek a rendszernek, hogy a szupervizor szint egy külön veremmutatóval (stack pointer) rendelkezett. Ez lehetővé tette a többfeladatos (multitasking) rendszereknek, hogy igen kicsi vermeket foglaljanak a feladatok (taszkok) számára, tehát a tervezőknek nem kellett külön nagyméretű memóriaterületet lefoglalni, amely képes befogadni az összes veremkeretet maximális számú megszakítás kiszolgálása esetén.
A CPU 7 megszakítási szintet ismer. A szintek 1-től 7-ig szigorúan priorizáltak, tehát a magasabb szintű/számú megszakítás mindig meg tudja szakítani az alacsonyabb számú megszakítás kiszolgálását. Egy privilegizált utasítás szolgál az aktuális minimum megszakítási szint beállítására az állapotregiszterben, így blokkolhatók az alacsonyabb prioritású megszakítások. A 7. szint a nem maszkolható megszakítás (non-maskable interrupt, NMI). Az 1. szintet bármely magasabb szint képes megszakítani. A 0. szint azt jelenti, hogy nincs megszakítás. A megszakítási szint értéke az állapotregiszterben van tárolva és a felhasználói szintű programok számára látható.
A hardvermegszakítások kérésére a CPU felé három bemeneti vonal (láb) szolgál, amelyek kódolják a legmagasabb függőben lévő megszakítási prioritást. A megszakítások kódolására általában egy külön megszakításkezelő szükséges, bár azok a rendszerek, amelyeknek nincs szükségük háromnál több hardvermegszakításra, közvetlenül csatlakoztathatók a megszakításvezérlő bemenetekre, kissé komplexebb megszakításkezelő szoftver árán. A megszakításvezérlő lehet akár egy egyszerű 74LS148 prioritáskódoló, vagy a VLSI perifériacsip része lehet, mint pl. a MC68901 multifunkciós perifériában, amit az Atari TT030-ban használtak, és amelyben volt UART, timer, és párhuzamos I/O is.
A "kivétel-táblázat", azaz a megszakítási vektorok (megszakításkezelők által használt címek) helye rögzített a 0-tól 1023-ig terjedő memóriaterületen, ez 256 db. 32 bites címet biztosít a megszakítások számára. Az első vektor a kezdő veremcímet, a második az indítókód kezdőcímét tartalmazza. A 3-tól 15-ig terjedő vektorok különböző hibák kezelőire mutatnak: buszhiba, címhiba, illegális utasítás, nullával való osztás, CHK és CHK2 vektor, privilégiumsértés; néhány fenntartott vektor a "1010 kód emulátor" és "1111 kód emulátor" számára (ezek a hexadecimális A és F kódokkal kezdődő, később bevezetendő utasítások, pl. koprocesszor-utasítások emulálására szolgálnak), és hardveres töréspont vektora. A 24-es vektor kezdte a valódi megszakítások sorát: hamis megszakítás (amikor nincs hardveres nyugtázás), az 1-től a 7. szintig terjedő autovektorok, ezek után 16 db. TRAP (csapda) vektor, ezek után néhány fenntartott, végül a felhasználói vektorok találhatók.
Mivel induláskor vagy resetkor legalább a kezdőkód címvektornak érvényesnek kell lennie, a rendszerek általában valamilyen állandó memóriát (pl. ROM) alkalmaztak a 0. címen, amelyek tartalmazták a vektorokat és az kezdeti indítókódot (bootstrap code). Azonban az általános célú rendszerekben kívánatos, hogy az operációs rendszer képes legyen változtatni a vektorokat futási időben. Ezt vagy úgy érik el, hogy a ROM-ban lévő vektorok egy már a RAM-ban lévő ugrási táblázatra mutatnak, vagy valamilyen memóriaváltási mechanizmust alkalmaznak, amely a ROM-bankot egy RAM-memóriabankra váltja futási időben.
A 68000 nem felelt meg a Popek és Goldberg-féle virtualizációs követelményeknek a teljes processzor virtualizáció tekintetében, mert tartalmazott egy MOVE from SR utasítást, amely lehetővé tette a felhasználói módú szoftverek számára a csak-olvasható hozzáférést a privilegizált állapot egy kis részletéhez.
A 68000 nem volt képes a virtuális memória egyszerű támogatására, amelynél szükség van a hibás memóriahozzáférések elfogására és az ez utáni helyreállításra. A 68000-nál van ugyan buszhiba kivétel, ami használható a hiba elfogásához, de ez nem ment el elég információt a processzor állapotáról, ami lehetővé tenné a program folytatását a hibát okozó utasítás után, miután az operációs rendszer lekezelte a kivételt. Több cég is készített 68000-alapú virtuális memóriát használó Unix munkaállomásokat, amelyekben két párhuzamosan, de eltérő fázisú órajellel futó 68000 processzorral oldották meg ezt a problémát. Mikor a "vezető" 68000 hibás memóriahozzáféréssel találkozott, egy külön hardver megszakította a "fő" 68000 futását, megakadályozva ezzel, hogy az a memóriahibával találkozzon. Ez a megszakítási rutin kezelte a virtuális memóriafunkciókat és indította újra megfelelő állapotban a "vezető" processzort, hogy folytassa a megfelelően szinkronizált végrehajtást mikor a "fő" processzor visszatér a megszakításból.
Ezeket a problémákat kijavították a 68k architektúra következő nagyobb revíziójában, amely az MC68010 megjelenésével indult. A buszhiba és címhiba kivételek elég állapot-adatot helyeztek a szupervizor-verembe, lehetővé téve a helyreállítást, és a MOVE from SR utasítás privilegizált lett. Helyette a felhasználói módú szoftverek egy új nem-privilegizált MOVE from CCR utasítást használhattak, és az operációs rendszer elfoghatta és emulálhatta a felhasználói módú MOVE from SR utasítást, amennyiben erre szükség volt.
Az MC68000, MC68008, MC68010 nem tartalmaz koprocesszor-interfészt, azonban mégis lehetőség van a Motorola 68881 matematikai koprocesszor használatára.[16] Ezeknél a processzoroknál a koprocesszor egy perifériavezérlő processzorként illeszthető a rendszerbe, amelynél a (lebegőpontos) regiszterek a memóriába vannak leképezve, és a koprocesszor interfész szoftveresen emulálható. Erre a célra rendelkezésre áll az "1111 kód emulátor" csapda,[17] amely minden hexadecimális F kóddal kezdődő opkód észlelésekor végrehajtja a megszakítást. A megszakításkezelőben emulálható a teljes lebegőpontos utasításkészlet, vagy meghajtható a fizikailag jelenlevő matematikai koprocesszor.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.