Motorola 68000
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.
Történet
[szerkesztés]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]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]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]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]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]- ↑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.
- ↑Archivált másolat.[2012. augusztus 19-i dátummal azeredetibőlarchiválva]. (Hozzáférés: 2012. augusztus 21.)
- ↑abc[1]DTACK GROUNDED, The Journal of Simple 68000/16081 Systems Issue # 29 - March 1984 p9
- ↑"Company Briefs"Archiválva2007. november 14-idátummal aWayback Machine-ben, The New York Times, September 21, 1985, available from TimesSelect (subscription).
- ↑"68HC001 obsoletes 68008."[halott link],Microprocessor Report, June 20, 1990; available from HighBeam Research (subscription).
- ↑"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).
- ↑"Motorola reveals MC68SEC000 processor for low power embedded applications",Motorola press release, November 18, 1996; archived by Internet Archive on March 28, 1997.
- ↑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.
- ↑"Multiprotocol processor marries 68000 and RISC.",ESD: The Electronic System Design Magazine, November 1, 1989; available from AccessMyLibrary.
- ↑Motorola:MC68302 / Integrated Multiprotocol Processor User’s Manual(angol nyelven) (pdf) pp. SECTION 1. Motorola, 1995. (Hozzáférés: 2012)
- ↑Boys, Robert.M68k Frequently Asked Questions (FAQ)Archiválva2009. január 13-idátummal aWayback Machine-ben, comp.sys.m68k, October 19, 1994.
- ↑Soundscape Elite Specs. from Fax Sheet,Google Groups, April 25, 1995.
- ↑Archivált másolat.[2012. március 2-i dátummal azeredetibőlarchiválva]. (Hozzáférés: 2012. augusztus 20.)
- ↑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)
- ↑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."
- ↑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]
- ↑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]- Motorola MC68000 Family Programmer's Reference ManualArchiválva2015. szeptember 24-idátummal aWayback Machine-ben (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,ISBN 963-02-4538-8
- Makra Ernőné, Kiss Klára: 68000 mikroprocesszorok; Ipari Információs Központ, Budapest, 1985,ISBN 963-02-40742
Hivatkozások
[szerkesztés]- 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)