Ugrás a tartalomhoz

Motorola 68000

Ellenőrzött
A Wikipédiából, a szabad enciklopédiából

AMotorola68000egy16/32 bites[1]CISCmikroprocesszormag (és konkrét processzor), amelyet aFreescale Semiconductor,azaz aMotorolakorábbi félvezetőgyártó üzemága(Semiconductor Products Sector)tervezett és gyártott. Az1979-ben bemutatottHMOStechnológiájú processzor az első tagja volt a sikeres 32 bitesm68kprocesszorcsaládnak, amelyelőre-kompatibilisvolt 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.

Kibocsátás előtti XC68000 chip, 1979-ből

Történet

[szerkesztés]
Motorola MC68000 (CLCCtokozással)
Motorola MC68000 (PLCCtokozással)

A 68000-es aMACSS(Motorola Advanced Computer System on Silicon)projektből született, amely1976-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 bites6800-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, azelőre-kompatibilitásrakoncentrá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 aminiszámítógépek,azaz pl. aPDP-11ésVAXrendszerek processzorainak felépítése, amelyek mikrokódja hasonlóan működött.

Az1970-es évekközepén a 8 bites processzorgyártók versenybe kezdtek a 16 bites generáció bevezetéséért. ANational Semiconductorvolt az első azIMP-16ésPACEprocesszorokkal 1973–1975-ben, de ezeknek sebességi problémáik voltak. 1977-ben azIntel 8086nagy 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öbbtranzisztorkerü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,5mikronoscsíkszélességűHMOStechnológiával készült. Hivatalosan1979szeptemberében jelentették be,[2]az első minták1980februárjában készültek el, a forgalmazás ugyanazon év novemberében kezdődött.[3]Kezdetben 4, 6 és 8MHz-es órajelű chipek készültek, a 10 MHz-es változat 1981-ben, a 12,5 MHz-es csipek1982júniusában[3]jelentek meg. Az MC68000 16,67 MHz-es „12F” jelű változata volt a leggyorsabb eredetiHMOScsip, ez az 1980-as évek végén jelent meg. Thomas Guntert, a Motorola visszavonult alelnökét a68000-es atyjaként is emlegetik.

A 68000-es vált a Unix munkaállomások domináns processzorává. Ezek között voltak aSunés azApollo/Domainmunkaállomások. Az asztali és mikrogépek területén is előretört, azAmiga,Atari ST,Apple LisaésMacintoshgépek is 68000-es CPU-val készültek. Az első asztalilézernyomtatókatis ezzel a processzorral szerelték, beleértve az eredetiApple Inc.LaserWriterésHP LaserJetnyomtatókat. 1982-ben a 68000-es újutasításkészlet-architektúrátkapott, amely lehetővé tette avirtuális memóriakezeléstés megfelelt aPopek és Goldberg-féle virtualizációs követelményeknek.A korszerűsített csip a68010jelet kapta. Ennek egy továbbfejlesztett változata, a kisebb példányszámban gyártott6801231 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 ugyancsak1982-ben bevezette a 8 bites rendszerekkel kompatibilisMC68008processzort: ez egy 68000-es mag 8 bites adatbusszal és keskenyebb, 20 bites címbusszal. 1982 után a cég a68020és88000projektekre helyezte a hangsúlyt.

Egyéb gyártók

[szerkesztés]
HitachiHD68000
Thomson TS68000

A Motorolán kívül a HMOS 68000 processzort gyártotta még aHitachi:ez volt aHD68000jelű chip, amely 2.7 mikronos csíkszélességgel készült és 12.5 MHz órajelet használt,[3]ezen kívül aMostek(MK68000),Rockwell(R68000),Signetics(SCN68000),Thomson/SGS-Thomson(eredetileg EF68000, majd később TS68000 jelöléssel), és aToshiba(TMP68000). A Toshiba gyártotta még a CMOS 68HC000 (TMP68HC000) változatot is.

CMOS változatok

[szerkesztés]

A 68HC000 volt az elsőCMOStechnológiával készült 68000-es. Ezt a Hitachi tervezte és a két cég közösen vezette be1985-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.35wattkörül volt, 25°Ckö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álasztottaMacintosh Portablegépe processzorának.

A Motorola a MC68008-ast a MC68HC001-es chippel váltotta fel1990-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. A68EC000chipben és SCM68000 magban a címbuszt 32 bitre terjesztették ki, megszüntették az M6800 perifériabuszt, és letiltották aMOVE 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 aMC68SEC000jelű chip.[7]

A Motorola1996-ban beszüntette a MC68000 és MC68008 HMOS változatainak gyártását,[8]viszont a Motorolából kiváltFreescale Semiconductortovábbra is gyártja a MC68HC000, MC68HC001, MC68EC000 és MC68SEC000 chipeket valamint a MC68302, MC68306 és aDragonBallmikrovezérlők különféle változatait. A 68000-es architektúra leszármazottai, a680x0,aCPU32,és aColdFirecsaládok még mindig gyártásban vannak.

Mikrovezérlő mag szerepében

[szerkesztés]

Miután bevált az „igazi” 32 bites mikroprocesszorok körében, a 68000-et különfélemikrovezérlőkmagjaként kezdték használni.1989-ben a Motorola bemutatta azMC68302jelű 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,azazIMP).[10]

68EC000

[szerkesztés]
Motorola 68EC000 kontroller

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 16MHz-es konfigurációk, melyek 2,100 és 4,376Dhrystone-os teljesítmény nyújtanak. Ezekben a processzorokban nincslebegő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.Ensoniqhangszerekben éshangkártyákban,ahol aMIDIszinté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-401MIDI szintézis vagyMT-32emulá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 aMotorola/Freescalem68k-alapúDragonBallprocesszoraiba építették be. Ilyen a processzor volt aSega Saturnjátékkonzol hangvezérlőjében is, és aHPJetDirectLaserJetprinterekEthernet-vezérlőjében is az1990-es években.

Alkalmazás

[szerkesztés]
Két Hitachi 68HC000 CPU egy játékgép alaplapján

A bevezetésekor a 68000-et eleinte drágább rendszerekben használták, pl. olyan többfelhasználósmikroszámítógépekben,mint a WICAT 150[2],a koraiAlpha Microsystems,Sage II / IVszámítógépekben,TandyTRS-80Model 16-ban, és aFortune 32:16-ban; ezen kívül egyfelhasználósmunkaállomásokbanmint pl. aHewlett-PackardHP 9000Series 200 rendszereiben, az elsőApollo/Domainrendszerekben, aSun MicrosystemsSun-1modelljében, és aCorvus Conceptasztali gépben (ami egy vastag pizzás doboz méretű volt egy monitorral a tetején); továbbá grafikusterminálokbanmint aDECVAXstation100 ésSilicon GraphicsIRIS 1000 and 1200 gépeiben. AUnixrendszerek 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.

Az1980-as évekközepére a csökkenő termelési költségek miatt megnyílt az út a 68000-esszemélyi- és otthoni (mikro-) számítógépekben(home computer)történő felhasználása előtt, kezdve azAppleLisaésMacintoshgépeivel, amelyeket aCommodoreAmiga,AtariST,és aSharpX68000követett. A 68008-at azonban viszonylag kevésmikrogépbenhasználták. Ezek közül aSinclair QLvolt a kereskedelmileg legjelentősebb (bár a QL az ICLOne Per Desktestvérgépe volt, amely szintén 68008-ast használt). A Helix Systems (USA, Missouri) azSWTPCSS-50rendszerbusz á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 abeágyazott rendszerekteré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 ésvideójáték-konzoltkészítettek, ilyen volt pl. az Ataritól az 1982-esFood Fight,az egyik első 68000-alapú játéktermi(arcade)gép. Ezt továbbiak követték: aSegaSystem 16,CapcomCP SystemésCPS-2,és aNeo GeoazSNK-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 aSega Mega Drive(Genesis) konzol. 1993-ban a multiprocesszorosAtari Jaguarkonzol 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-10lézernyomtató.Az1984-ben megjelentHP LaserJetnyomtató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-ösLaserWriter-rel, amely az elsőPostScriptlé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úPLCvezérlőrendszerek gyártói: azAllen-Bradley,aTexas Instrumentsés a TI részlegének felvásárlása után aSiemens.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éziszámológépekbenis. 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űntPalmPDA-k és aHandspring VisorDragonBallprocesszorra épültek, ami szintén a 68000 egy származéka. ATexas Instrumentscsúcskategóriás grafikus kalkulátorait, aTI-89,TI-92sorozat 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 azIBM System/370processzor PC-alapú IBM-kompatibilis hardver-emulátorának, azIBM XT/370-nek.

Architektúra

[szerkesztés]

Azm68karchitektúraigen fejlett jellemzőkkel rendelkezett, amelyek más felépítésekben csak sokkal később jelentek meg. Ilyenek például aprivilégiumszintekvagy a fejlettkivé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ájtsorrendjebig-endian. Abig-endianbájtsorrendnél az egy word/dwordben tárolt bájtok logikai és fizikai sorrendje megegyezik, hasonlóan ahá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

[szerkesztés]

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 AppleMac OSverzió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

[szerkesztés]

A 68000 processzorban aregiszterek32 bitesek (néhány kivételtől eltekintve), az adat- és a címregiszterek külön vannak választva. Azadatregiszterekabban 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 ací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 averemmutató(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

Aprogramszá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 amegszakí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

[szerkesztés]

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

[szerkesztés]
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 aVector Base Register(VBR) és egyéb regiszterek.

Utasításkészlet

[szerkesztés]

A 68000 processzorcsalád egyik jellegzetes vonása a nagymértékbenortogoná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 azCMDaz utasításmnemonikja,.Saz adattípus utótagja, azsrcésdstaz operandusok. Az.Sutótag azt jelzi, hogy az utasítás milyen méretű adaton dolgozik:Shelyett { 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 azsrca forrásoperandust, azdsta 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

[szerkesztés]

Az operandusokban az alábbi14 címzési módhaszná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

  • 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 68000assemblerektöbbsége a "$" jelet használja ahexadecimális számokjelö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). AzADDQ,SUBQutasításokban az érték csak 3 biten tárolódik, és a 0 8-nak felel meg.

Az m68k család fejlettebb processzoraiban – a68020-tól kezdve – újabb, bonyolultabb címzési módok is megjelentek (pl. indirekt indexelt, PC-relatív indirekt indexelt).

Utasítások

[szerkesztés]

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óriá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.
  • BCDaritmetika: 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ésszubrutinbó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ésa 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áltMOVEutasítás, megfelelő operandusokkal történő használata nyújtja a megoldást erre a feladatra. Például azx86architektúraPUSH <regiszter>utasításának itt aMOVE.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.Lutótag jelzi; adattípus long), majd a veremmutatóban tárolt címre beírja a megadott regiszter tartalmát. Az alkalmazottpre-dekrementáltcímzésmód bármely címregiszter esetén használható, nem csak a veremmutató esetében.

Működés

[szerkesztés]

Privilégiumszintek

[szerkesztés]

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 atö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

[szerkesztés]

A CPU 7megszakításiszintet 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 anem 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 azAtari TT030-ban használtak, és amelyben voltUART,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 avalódimegszakí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 aRAM-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 aPopek és Goldberg-féle virtualizációs követelményekneka teljes processzor virtualizáció tekintetében, mert tartalmazott egyMOVE from SRutasí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 avirtuális memóriaegyszerű 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 azMC68010megjelené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 aMOVE from SRutasítás privilegizált lett. Helyette a felhasználói módú szoftverek egy új nem-privilegizáltMOVE from CCRutasítást használhattak, és az operációs rendszer elfoghatta és emulálhatta a felhasználói módúMOVE from SRutasítást, amennyiben erre szükség volt.

Koprocesszor használata

[szerkesztés]

Az MC68000, MC68008, MC68010 nem tartalmaz koprocesszor-interfészt, azonban mégis lehetőség van aMotorola 68881matematikai koprocesszorhaszná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.

Jegyzetek

[szerkesztés]
  1. Motorola Literature Distribution, Phonenix, AZ.M68000 Family Programmer's Reference Manual.[motorola], 1–1. o. (1992).ISBN 0-13-723289-6.Hozzáférés ideje: 2012. augusztus 20.
  2. Archivált másolat.[2012. augusztus 19-i dátummal azeredetibőlarchiválva]. (Hozzáférés: 2012. augusztus 21.)
  3. abc[1]DTACK GROUNDED, The Journal of Simple 68000/16081 Systems Issue # 29 - March 1984 p9
  4. "Company Briefs"Archiválva2007. november 14-idátummal aWayback Machine-ben, The New York Times, September 21, 1985, available from TimesSelect (subscription).
  5. "68HC001 obsoletes 68008."[halott link],Microprocessor Report, June 20, 1990; available from HighBeam Research (subscription).
  6. "Motorola streamlines 68000 family;" EC "versions of 68000, '020, '030, and '040, plus low-end 68300 chip."[halott link],Microprocessor Report, April 17, 1991; available from HighBeam Research (subscription).
  7. "Motorola reveals MC68SEC000 processor for low power embedded applications",Motorola press release, November 18, 1996; archived by Internet Archive on March 28, 1997.
  8. comp.sys.m68k Usenet posting,May 16, 1995; also see other posts in thread. The end-of-life announcement was in late 1994; according to standard Motorola end-of-life practice, final orders would have been in 1995, with final shipments in 1996.
  9. "Multiprotocol processor marries 68000 and RISC.",ESD: The Electronic System Design Magazine, November 1, 1989; available from AccessMyLibrary.
  10. Motorola:MC68302 / Integrated Multiprotocol Processor User’s Manual(angol nyelven) (pdf) pp. SECTION 1. Motorola, 1995. (Hozzáférés: 2012)
  11. Boys, Robert.M68k Frequently Asked Questions (FAQ)Archiválva2009. január 13-idátummal aWayback Machine-ben, comp.sys.m68k, October 19, 1994.
  12. Soundscape Elite Specs. from Fax Sheet,Google Groups, April 25, 1995.
  13. Archivált másolat.[2012. március 2-i dátummal azeredetibőlarchiválva]. (Hozzáférés: 2012. augusztus 20.)
  14. Motorola:M68000 8-/16-/32-Bit Microprocessors User’s Manual / Ninth Edition(angol nyelven) (PDF) pp. 2–2. Motorola, 1993. [2012. február 5-i dátummal azeredetibőlarchiválva]. (Hozzáférés: 2013)
  15. MOTOROLA M68000 FAMILY / Programmer’s Reference Manual(angol nyelven) (pdf). Motorola. [2015. szeptember 24-i dátummal azeredetibőlarchiválva]. (Hozzáférés: 2012)A.1.2 MC68000, MC68008, and MC68010 Addressing Modes; pg. A-16; "The MC68000, MC68008, and MC68010 support 14 addressing modes as shown in Table A-5."
  16. Motorola:MC68881 Floating-point Coprocessor as a Peripherial in an M68000 System(angol nyelven) (pdf).Application Notespp. 1-37. Motorola, 1987. (Hozzáférés: 2012)[halott link]
  17. Starnes, Thomas W.:Design Philosophy Behind Motorola's MC68000(angol nyelven) pp. Table 2. EASy68K.com, 1983. June. (Hozzáférés: 2012)line 1111 emulator: attempt to execute an op code that starts with "1111"

Fordítás

[szerkesztés]
  • Ez a szócikk részben vagy egészben aMotorola 68000című angol Wikipédia-szócikkezen változatánakfordításán alapul.Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.

Források

[szerkesztés]

Hivatkozások

[szerkesztés]
Commons:Category:Motorola 68000
AWikimédia CommonstartalmazMotorola 68000témájú médiaállományokat.

Kapcsolódó szócikkek

[szerkesztés]