Motorola 68000

A Wikipédiából, a szabad enciklopédiából

A Motorola 68000 egy 16/32 bites[1] CISC mikroprocesszor mag (és konkrét processzor), amelyet a Freescale Semiconductor, azaz a Motorola korábbi félvezetőgyártó üzemága (Semiconductor Products Sector) tervezett és gyártott. Az 1979-ben bemutatott HMOS technológiájú processzor az első tagja volt a sikeres 32 bites m68k processzorcsaládnak, amely előre-kompatibilis volt a sorozat későbbi tagjaival, a 16 bites szélességű külső busz korlátai ellenére. 30 évvel később a 68000-es architektúra még mindig használatban van.

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

Történet[szerkesztés | forrásszöveg szerkesztése]

Motorola MC68000 (CLCC tokozással)
Motorola MC68000 (PLCC tokozással)

A 68000-es a MACSS (Motorola Advanced Computer System on Silicon) projektből született, amely 1976-ban kezdődött egy teljesen új architektúra kifejlesztése céljából, a visszafelé kompatibilitás teljes mellőzésével. Ez inkább a már létező, 8 bites 6800-as vonal nagyobb teljesítményű testvére, kiegészítője lett volna, mint kompatibilis utódja. Végül a 68000-es megtartotta a busz-protokoll kompatibilis üzemmódját a létező 6800-as eszközökhöz, és elkészült egy 8 bites adatbusszal rendelkező verzió. Azonban a tervezők a jövőbe, az előre-kompatibilitásra koncentráltak, ami előnyt jelentett az M68K platformnak a későbbi 32 bites architektúrákkal szemben. Így pl. a CPU regiszterei mind 32 bit szélességűek voltak, még akkor is, ha a processzor belső adatstruktúrái ritkán működtek egyszerre mind a 32 biten. A MACSS fejlesztőcsapatot erősen befolyásolta a miniszámítógépek, azaz pl. a PDP-11 és VAX rendszerek processzorainak felépítése, amelyek mikrokódja hasonlóan működött.

Az 1970-es évek közepén a 8 bites processzorgyártók versenybe kezdtek a 16 bites generáció bevezetéséért. A National Semiconductor volt az első az IMP-16 és PACE processzorokkal 1973-1975-ben, de ezeknek sebességi problémáik voltak. 1977-ben az Intel 8086 nagy népszerűségre tett szert. A Motorola a konkurencia megelőzése érdekében döntött a hibrid 16/32 bites felépítés bevezetéséről és ezt következetesen véghez is vitte. A késői belépés a 16 bites arénába előnyökkel is járt: a processzorokba több tranzisztor került – kb. 40 000 aktív elem, szemben a 8086-os 20 000-es számával –, 32 bites makroutasítások és a beharangozott könnyű használat.

Az eredeti MC68000 3.5-mikronos csíkszélességű HMOS technológiával készült. Hivatalosan 1979 szeptemberében jelentették be,[2] az első minták 1980 februárjában készültek el, a forgalmazás ugyanazon év novemberében kezdődött.[3] Kezdetben 4, 6, és 8 MHz-es órajelű chipek készültek, a 10 MHz-es változat 1981-ben, a 12.5 MHz-es chipek 1982 júniusában[3] jelentek meg. Az MC68000 16.67 MHz-es "12F" jelű változata volt a leggyorsabb eredeti HMOS chip, 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 chip a 68010 jelet kapta. Ennek egy továbbfejlesztett változata, a kisebb példányszámban gyártott 68012 31 bitre növelt 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[szerkesztés | forrásszöveg szerkesztése]

Hitachi HD68000
Thomson TS68000

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

CMOS változatok[szerkesztés | forrásszöveg szerkesztése]

A 68HC000 volt az első CMOS technológiával készült 680000-as. Ezt a Hitachi tervezte és a két cég közösen vezette be 1985-ben.[4] A Motorola változat jele MC68HC000, a Hitachié HD68HC000 volt. A 68HC000 verzió 8-tól 20 MHz-ig terjedő órajellel készült. A CMOS-alapú felépítéstől eltekintve ez a chip teljesen azonos a HMOS verzióval, de az áramfelvétele jóval kisebb. Az eredeti HMOS MC68000 teljesítményfelvétele kb. 1.35 watt körül volt, 25 °C környezeti hőmérsékleten, órajeltől függetlenül, míg a MC68HC000 fogyasztása csak 0.13 watt 8 MHz-en és 0.38 watt 20 MHz-en. (A CMOS áramkörökkel ellentétben a HMOS akkor is áramot fogyaszt, mikor nem csinál semmit, és az áramfelvétel csak kicsit változik az órajeltől függően). Az Apple a 68HC000 chipet választotta Macintosh Portable gépe processzorának.

A Motorola a MC68008-ast a MC68HC001-es chippel váltotta fel 1990-ben.[5] Ez a chip sok tekintetben a 68HC000-ra hasonlított, azonban az adatbusza képes volt mind 16-, mind 8 bites üzemmódban működni; az üzemmódot egy bemeneti lábon lehetett kapcsolni processzor-resetnél, így ez a processzor olcsóbb 8 bites memóriákkal is működhetett.

A 68000-as fejlesztése a későbbiekben a modern beágyazott vezérlőalkalmazások és a chipre integrált perifériák felé mozdult el. A 68EC000 chipben és SCM68000 magban a címbuszt 32 bitre terjesztették ki, megszüntették az M6800 perifériabuszt, és letiltották a MOVE from SR (adatmozgatás az állapotregiszterből) utasítás használatát a felhasználói módú programokban.[6] 1996-ban a Motorola a különálló magot egy teljesen statikus áramkörrel váltotta fel, amely mindössze 2 µW-ot fogyasztott alacsony áramfelvételű üzemmódban, ez volt a MC68SEC000 jelű chip.[7]

A Motorola 1996-ban beszüntette a MC68000 és MC68008 HMOS változatainak gyártását,[8] viszont a Motorolából kivált Freescale Semiconductor továbbra is gyártja a MC68HC000, MC68HC001, MC68EC000 és MC68SEC000 chipeket valamint a MC68302, MC68306 és a DragonBall mikrovezérlők különféle változatait. A 68000-es architektúra leszármazottai, a 680x0, a CPU32, és a ColdFire családok még mindig gyártásban vannak.

Mikrovezérlő mag szerepében[szerkesztés | forrásszöveg szerkesztése]

Miután bevált az "igazi" 32 bites mikroprocesszorok körében, a 68000-et különféle mikrovezérlők magjaként kezdték használni. 1989-ben a Motorola bemutatta az MC68302 jelű kommunikációs processzort,[9] ami elnevezése szerint egy ipari kommunikációs feladatokra, pl. ISDN hálózatokba szánt "integrált multiprotokoll processzor" (integrated multiprotocol processor, azaz IMP).[10]

68EC000[szerkesztés | forrásszöveg szerkesztése]

Motorola 68EC000 kontroller

Az 68EC000 a 68000 olcsó változata, beágyazott vezérlő alkalmazásokhoz tervezték. Az 68EC000 8- vagy 16 bites adatbuszt képes használni, és ezek között váltani is tud, egy reset segítségével.[11]

Különböző órajelen működő változatai vannak, közöttük a 8 és 16 MHz-es konfigurációk, melyek 2,100 és 4,376 Dhrystone-os teljesítmény nyújtanak. Ezekben a processzorokban nincs lebegőpontos egység és nehezen megoldható a koprocesszor (MC68881/2) illesztése, ugyanis az EC sorozatból hiányoznak a szükséges koprocesszor-utasítások.

Az 68EC000 audioalkalmazásokban került felhasználásra kontrollerként, pl. Ensoniq hangszerekben és hangkártyákban, ahol a MIDI szintézer része.[12] Az Ensoniq hangvezérlőkben a kontroller számos előnyt nyújtott, összehasonlítva más gyártók CPU nélküli eszközeivel. A processzor lehetővé tette, hogy a hangvezérlő különböző audiofeladatokat végezzen, mint pl. MPU-401 MIDI szintézis vagy MT-32 emuláció, mindezt külső tárrezidens (terminate and stay resident, TSR) program nélkül. Ez javította a szoftverkompatibilitást, csökkentette a CPU használatot és szükségtelenné tette a gazdagép memóriájának használatát.

Az 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[szerkesztés | forrásszöveg szerkesztése]

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ós mikroszámítógépekben, mint a WICAT 150 [3], 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 videojáték-gyártók több 68000-es processzorra épülő játéktermi gépet, otthoni játékgépet és videojá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-ast 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-et 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[szerkesztés | forrásszöveg szerkesztése]

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[szerkesztés | forrásszöveg szerkesztése]

A 68000 processzor elméletileg 24 bites címzést használt, de a 24 bites címet 23 bemeneti címvonal (A1-A23) és két vezérlőjel (UDS, LDS) segítségével határozta meg, amelyek az A0 értékét állították, így állt elő a 24 bites cím (A0-A23). Ezzel 16 MiB fizikai memóriát tudott megcímezni byte-os felbontásban. A címszámítás és tárolás minden esetben 32-bitet használt, csak a legfelső helyiértékű byte-ot nem vette figyelembe, a címvonalak fizikai hiánya miatt. Ez lehetővé tette a folytonos 32 bites címteret használó programok futtatását. A Motorola ezzel a belső 32 bites címtér előre-kompatibilitását igyekezett biztosítani, lehetővé téve a teljes 32 bites címzés használatát, amikor azt később megvalósítják.[13]

Ez azonban nem tartotta vissza a programozókat az előre-inkompatibilis kód írásától. A 24 bites szoftver, amely elhanyagolta a legfelső címbájtot vagy más célokra használta azt, hibát okozhatott a 32 bites 68k hardveren. Például a korai, 7.0 előtti Apple Mac OS verziók a memóriablokk fő pointereinek felső bájtját jelzőbitek tárolására használták (pl. 'zárt' v. 'törölhető'). A későbbi verziókban a jelzőbitek máshova kerültek és az Apple a Mac IIci 1989-es megjelenésével elkezdett "tisztán 32 bites" ROM-okkal ellátott gépeket szállítani.

A 68000 regiszterei[szerkesztés | forrásszöveg szerkesztése]

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 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[szerkesztés | forrásszöveg szerkesztése]

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ásszöveg szerkesztése]

A Motorola 68000 regiszterei felhasználói üzemmódban:
31 16 15 8 7 0 – bitek
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ D0 NYOLC
ADAT-
REGISZTER
 
 
 
    D1
    D2
    D3
    D4
    D5
    D6
    D7
31 16 15 8 7 0 – bitek
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ A0 HÉT
CÍM-
REGISZTER
 
 
 
    A1
    A2
    A3
    A4
    A5
    A6
    A7 USER
STACK POINTER
  (USP)
  PC PROGRAM
COUNTER
 
CCR STATUS
REGISTER
7 0 – bitek
A Motorola 68000 regiszterei felügyelői (supervisor) üzemmódban:
A D0–D7 és A0–A6 regiszterek szerepe nem változik.
31 16 15 8 7 0 – bitek
    A7' SUPERVISOR
STACK POINTER
  (SSP)
  CCR SR STATUS
REGISTER
15 8 7 0 – bitek

Forrás: [14]

Ez a modell a 68000 és a 68008 processzorokra érvényes, a 68010-nél már megváltozott, pl. megjelent a Vector Base Register (VBR) és egyéb regiszterek.

Utasításkészlet[szerkesztés | forrásszöveg szerkesztése]

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[szerkesztés | forrásszöveg szerkesztése]

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

jelölés elnevezés példák
Regiszter direkt címzés
Dn adatregiszter CLR.B D0
An címregiszter MOVEA.W A0,A1
Abszolút adatcímzés
(xxx).W 16 bites abszolút memóriacím (absolute short) CLR.B ($8000).W
(xxx).L 32 bites abszolút memóriacím (absolute long) CLR.B ($11008000).L
PC-relatív címzés
d16(PC) PC-relatív 16 bites címeltolással CLR.B 22(PC)
d8(PC,Rn.s) PC-relatív 8 bites címeltolással és index-regiszterrel CLR.B 10(PC,A1.W)
Regiszter indirekt címzés
(An) regiszter indirekt CLR.B (A0)
(An)+ regiszter indirekt automatikus növeléssel (poszt-inkrementális) CLR.B (A0)+
-(An) regiszter indirekt automatikus csökkentéssel (pre-dekrementális) CLR.B -(A0)
d16(An) regiszter indirekt 16 bites címeltolással (offset) CLR.B 255(A0)
d8(An,Rn.s) regiszter indirekt cím 8 bites címeltolással és index-regiszterrel CLR.B $44(A0,D0.L)
Közvetlen címzés (immediate)
#xxx közvetlen (immediate, egy állandó érték) MOVE.L #15,D0
#d8 gyors közvetlen (quick immediate) MOVEQ.L #$80,D0
Beleértett címzés (implied)
nincs beleértett regiszter (pl. SR, USP, SSP, PC, VBR, SFC, DFC) PEA ; RTS

Ahol

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

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[szerkesztés | forrásszöveg szerkesztése]

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[szerkesztés | forrásszöveg szerkesztése]

Privilégium-szintek[szerkesztés | forrásszöveg szerkesztése]

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[szerkesztés | forrásszöveg szerkesztése]

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[szerkesztés | forrásszöveg szerkesztése]

Az MC68000, MC68008, MC68010 nem tartalmaz koprocesszor-interfészt, azonban mégis lehetőség van a Motorola 68881 matematikai koprocesszor használatára.[16] Ezeknél a processzoroknál a koprocesszor egy perifériavezérlő processzorként illeszthető a rendszerbe, amelynél a (lebegőpontos) regiszterek a memóriába vannak leképezve, és a koprocesszor interfész szoftveresen emulálható. Erre a célra rendelkezésre áll az "1111 kód emulátor" csapda,[17] amely minden hexadecimális F kóddal kezdődő opkód észlelésekor végrehajtja a megszakítást. A megszakításkezelőben emulálható a teljes lebegőpontos utasításkészlet, vagy meghajtható a fizikailag jelenlevő matematikai koprocesszor.

Jegyzetek[szerkesztés | forrásszöveg szerkesztése]

  1. Motorola Literature Distribution, Phonenix, AZ. M68000 Family Programmer's Reference Manual. [motorola], 1–1. o (1992). ISBN 0-13-723289-6 
  2. [1]
  3. ^ a b c [2] DTACK GROUNDED, The Journal of Simple 68000/16081 Systems Issue # 29 - March 1984 p9
  4. "Company Briefs", The New York Times, September 21, 1985, available from TimesSelect (subscription).
  5. "68HC001 obsoletes 68008.", 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.", 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
  11. Boys, Robert. M68k Frequently Asked Questions (FAQ), comp.sys.m68k, October 19, 1994.
  12. Soundscape Elite Specs. from Fax Sheet, Google Groups, April 25, 1995.
  13. http://www.freescale.com/webapp/search/Serp.jsp?QueryText=68020
  14. Motorola: M68000 8-/16-/32-Bit Microprocessors User’s Manual / Ninth Edition (angol nyelven) (PDF) pp. 2–2. Motorola, 1993
  15. MOTOROLA M68000 FAMILY / Programmer’s Reference Manual (angol nyelven) (pdf). Motorola 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 Notes pp. 1-37. Motorola, 1987
  17. Starnes, Thomas W.: Design Philosophy Behind Motorola's MC68000 (angol nyelven) pp. Table 2. EASy68K.com, 1983. June line 1111 emulator : attempt to execute an op code that starts with "1111"

Források[szerkesztés | forrásszöveg szerkesztése]

Hivatkozások[szerkesztés | forrásszöveg szerkesztése]

Commons
A Wikimédia Commons tartalmaz Motorola 68000 témájú médiaállományokat.

Kapcsolódó szócikkek[szerkesztés | forrásszöveg szerkesztése]