Motorola 68000

A Motorola 68000 egy 16/32 bites 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.

Történet 

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.  aktív elem, szemben a 8086-os -es számával –, 32 bites makroutasítások és a beharangozott könnyű használat.

Az eredeti MC68000 os csíkszélességű HMOS technológiával készült. Hivatalosan 1979 szeptemberében jelentették be, az első minták 1980 februárjában készültek el, a forgalmazás ugyanazon év novemberében kezdődött. Kezdetben 4, 6 és  órajelű chipek készültek, a 
 változat 1981-ben, a  csipek 1982 júniusában jelentek meg. Az MC68000  „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.

Egyéb gyártók 

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, 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.

CMOS változatok 
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. 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. 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.
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.

A Motorola 1996-ban beszüntette a MC68000 és MC68008 HMOS változatainak gyártását, 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.

Mikrovezérlő mag szerepében 
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, 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).

68EC000 

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.

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. 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.

Alkalmazás 

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.

Architektúra 
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:
32 bites adat- és címregiszterek
16 MiB lineárisan címezhető memória (24 bites címbusz)
56 utasítástípus
öt alapvető adattípus
memóriába leképezett I/O (nincsenek külön I/O portok)
14 címzési mód

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).

Címbusz 
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.

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 regiszterei 
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:

 8 db 32 bites adatregiszter:
 D0, D1, D2, D3, D4, D5, D6, D7
 7 db 32 bites címregiszter:
 A0, A1, A2, A3, A4, A5, A6
 Az A7 regiszter egyben a veremmutató (stack pointer), jele SP: az assemblerek ilyen néven is hivatkozhatnak rá. Az A7 felhasználói módban az USP, szupervizor módban a SSP regisztert címzi.
 4 speciális regiszter:
 PC – 32 bites programszámláló (a 68000 processzorban 24 bites)
 SR – 16 bites állapotregiszter, az alsó bájtjára CCR néven lehet hivatkozni (condition code register, feltételkód regiszter)
 USP – 32 bites felhasználói stack pointer
 SSP – 32 bites szupervizor stack pointer

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).

Az állapotregiszter 
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.

Regiszterek, összefoglaló táblázat 
 Forrás:

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.

Utasításkészlet 
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.

Címzési módok 
Az operandusokban az alábbi 14 címzési mód használható (a 68000, 68008, 68010 processzoroknál):

 Ahol
 n : regiszter száma, 0...7; Rn : valamilyen A vagy D regiszter
 d8: 8 bites adat
 d16: 16 bites adat
 xxx: 16 v. 32 bites adat, az utasítástól függően

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).

Utasítások 
A 68000 processzornak 56 utasítása van. Az utasítások az alábbi csoportokba oszthatók:

Adatmozgató utasítások: adatok mozgatására az univerzális MOVE utasítás szolgál, amely lehetővé teszi tetszőleges típusú adat mozgatását (másolását) a memóriában, memórából regiszterbe és fordítva, és regiszterek között. A címmozgató utasítások szavas és duplaszavas adatok átvitelét teszik lehetővé. Az általános adatmozgató utasításokon kívül speciális változatai is léteznek: MOVEM (több regiszter mozgatása), MOVEP (perifériás adat mozgatása), EXG (regiszterek cseréje), SWAP (bájt-csere regiszterben), LEA, PEA (effektív cím betöltése, tárolása), LINK (verem előkészítése paraméterátadáshoz), UNLK (verem felszabadítása), MOVEQ (gyors adatmozgatás). A veremkezelés is MOVE utasításokkal végezhető.
Aritmetikai műveletek: ADD, ADDX, SUB, SUBX, MULU (előjel nélküli szorzás), MULS (előjeles szorzás), DIVU, DIVS, CLR (törlés), NEG, NEGX (additív negáció), és CMP (összehasonlítás, amely a kivonáshoz hasonlóan állítja az állapotbiteket, de az eredményt nem tárolja), EXT (előjel-kiterjesztés), TAS, TST (tesztek). Ide tartoznak a gyors ADDQ, SUBQ utasítások is.
BCD aritmetika: ABCD, SBCD, NBCD (BCD negálás)
Logikai: AND, OR, NOT (logikai tagadás, invertálás), EOR (kizáró vagy)
Léptető/eltoló és rotáló utasítások: (logikai, azaz pl. a jobbra tolásnál a felső bitre 0 kerül) LSL, LSR, (aritmetikai eltolások, azaz előjelkiterjesztéssel a felső bitre) ASR, ASL, (körkörös eltolás ill. rotálás kiterjesztéssel (X) és anélkül) ROXL, ROXR, ROL, ROR
Bitkezelő utasítások a memóriában: BSET (1-re állít), BCLR (0-ra állít), BCHG (bit ellentettje) és BTST (ellenőrzés: az állapotregiszter Z bitjét 1-re állítja, ha a vizsgált bit 0)
Multiprocesszoros üzemmódot támogató utasítás: TAS, test-and-set: ez egy nem megszakítható buszművelet, amely lehetővé teszi szemaforok használatát szinkronizációhoz, közös memóriát használó processzorok számára.
Folyamatvezérlő utasítások: JMP (ugrás), JSR (szubrutinhívás), BSR (relatív című szubrutinhívás), RTS (visszatérés szubrutinból), RTE (visszatérés kivételkezelőből, azaz megszakításból), TRAP (szoftveres kivétel kezdeményezése, szoftvermegszakításhoz hasonló), CHK (feltételes szoftveres kivétel).
Elágazások: BRA (feltétlen elágazás, PC-relatív "goto"), Bcc (feltételes elágazások, branch, ahol a "cc" 16 különböző feltétel ellenőrzését jelölő kód lehet, a feltételek az állapotregiszter bitjeire és azok kombinációira vonatkoznak, ilyenek: BCC, BCS, BEQ, BGE, BGT, BHI, BLE, BLS, BLT, BMI, BNE, BPL, BVC, BVS; a BHS a BCC, a BLO a BCS szinonimája. A feltételes elágazások nincsenek hatással a feltételbitekre.)
Csökkentés-és-elágazás: DBcc (ahol a "cc" ugyanaz mint a feltételes elágazásoknál): ez az utasítás csökkenti egy adatregiszter értékét, ezután elugrik, ha a feltétel értéke még igaz és a regiszter tartalma még nem érte el a -1-et. A -1 használata megkönnyítette olyan ciklusok írását, amelyeket egyszer sem kellett végrehajtani, ha a ciklusszámláló kezdőértéke 0, ezzel a ciklus kezdete előtti ellenőrzést ki lehetett hagyni. A DBcc ciklusok könnyen egymásba ágyazhatók.
Rendszervezérlő műveletek: privilegizált utasítások (RESET, RTE, STOP, ORI to SR, MOVE USP, ANDI to SR, EORI to SR, MOVE EA to SR), csapda-generáló utasítások (TRAP, TRAPV, CHK) és állapotregisztert használó utasítások (ANDI to CCR, EORI to CCR, MOVE EA to CCR, ORI to CCR, MOVE SR to EA) tartoznak ide.

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.

Működés

Privilégiumszintek 
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.

Megszakítások 
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.

Koprocesszor használata 
Az MC68000, MC68008, MC68010 nem tartalmaz koprocesszor-interfészt, azonban mégis lehetőség van a Motorola 68881 matematikai koprocesszor használatára. 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, 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.

Jegyzetek

Fordítás

Források 
Motorola MC68000 Family Programmer's Reference Manual  (architektúra szakasz)
 https://web.archive.org/web/20130524134432/http://archive.computerhistory.org/resources/text/Oral_History/Motorola_68000/102658164.05.01.acc.pdf – interjú az eredeti Motorola fejlesztőcsapattal
 Grohmann, Eichler: A 68000-es mikroprocesszor / Technika és programozás; Data Becker - Novotrade, Budapest, 1985, 
 Makra Ernőné, Kiss Klára: 68000 mikroprocesszorok; Ipari Információs Központ, Budapest, 1985,

Hivatkozások

Freescale, MC68000 termékoldal (angol)
cpu-collection.de, 68000 processzor információk és képek (angol)
comp.sys.m68k FAQ
CAST, Inc. (68000 IP provider)

Kapcsolódó szócikkek 
 CISC
 Motorola 68000 processzorcsalád
 Assembly

Motorola mikroprocesszorok
32 bites mikroprocesszorok