Motorola 68000 - Motorola 68000

Architektura Motorola 68000
Návrhář Motorola
Bity 16/32 bitů
Představeno 1979 ; Před 42 lety ( 1979 )
Design CISC
Větvení Kód podmínky
Endianness Velký
Registry
CPU Motorola 68000
Obecná informace
Spuštěno 1979
Navrhl Motorola
Výkon
Šířka dat 16 bitů
Šířka adresy 24 bitů
Architektura a klasifikace
Instrukční sada Motorola řady 68000
Fyzické specifikace
Tranzistory
Balíčky
Dějiny
Nástupce Motorola 68010

Motorola 68000 ( šedesát osm tisíc , také volal m68k , Motorola 68k , šedesát osm-Kay ) je 16/32-bit komplexní instrukční sadu počítače (CISC) mikroprocesor , který byl zaveden v roce 1979 Motorola Semiconductor Products Sector.

Konstrukce implementuje 32bitovou instrukční sadu s 32bitovými registry a 16bitovou interní datovou sběrnicí . Adresovou sběrnici je 24 bitů a nevyužívá segmentaci paměti , který dělal to jednodušší programu. Interně používá 16bitovou datovou aritmetickou logickou jednotku (ALU) a další dvě 16bitové ALU používané převážně pro adresy a má 16bitovou externí datovou sběrnici . Z tohoto důvodu jej Motorola nazval 16/32bitovým procesorem.

Jako jeden z prvních široce dostupných procesorů s 32bitovou sadou instrukcí a běžících v té době relativně vysokými rychlostmi byl 68k populární design v 80. letech minulého století. Byl široce používán v nové generaci osobních počítačů s grafickými uživatelskými rozhraními , včetně počítačů Macintosh , Amiga , Atari ST a X68000 . Konzolu Mega Drive 1988 pohání také 68 000.

68k byl brzy rozšířen o další členy rodiny a implementoval plné 32bitové ALU jako součást rostoucí řady Motorola 68000 . Původní 68k je obecně softwarově dopředu kompatibilní se zbytkem linky, přestože je omezen na 16bitovou širokou externí sběrnici.

Předběžný čip XC68000 vyrobený v roce 1979
Zemřít Motorola 68000

Po 42 letech výroby se architektura 68000 stále používá.

Dějiny

Motorola MC68000 (balíček bezolovnatého čipového nosiče (CLCC))
Motorola MC68000 ( balíček s olověným čipovým nosičem (PLCC))

Prvním široce vyráběným CPU společnosti Motorola byla Motorola 6800 . Ačkoli schopný design, to bylo zastíněno výkonnějšími konstrukcemi, jako je Zilog Z80 , a méně nákladnými designy, jako je MOS Technology 6502 (MOS 6502). Vzhledem k tomu, že se prodejní vyhlídky modelu 6800 zhoršily, Motorola zahájila nový design, který jej nahradí. Tím se stal projekt Motorola Advanced Computer System on Silicon, neboli MACSS, započatý v roce 1976.

Cílem MACSS bylo vyvinout zcela novou architekturu bez zpětné kompatibility s 6800. V konečném důsledku zachovává režim kompatibility sběrnicového protokolu pro stávající 6800 periferní zařízení a byla vytvořena verze s 8bitovou datovou sběrnicí. Konstruktéři se však zaměřili hlavně na budoucnost nebo dopřednou kompatibilitu , což dává návrhu 68000 náskok před pozdějšími architekturami 32bitových instrukčních sad (ISA). Registry CPU jsou například široké 32 bitů, ačkoli několik samostatných struktur v samotném procesoru pracuje na 32 bitech najednou. Tým MACSS těžil z vlivu designu procesorů minipočítačů , jako jsou systémy PDP -11 a VAX , které jsou podobně založeny na mikrokódu .

V polovině 70. let se výrobci 8bitových mikroprocesorů předháněli v představení 16bitové generace. Společnost National Semiconductor byla první se svými procesory IMP-16 a PACE v letech 1973–1975, ale ty měly problémy s rychlostí. Intel pracoval na svých pokročilých 16/32 bitových Intel iAPX 432 (alias 8800) od roku 1975 a jejich Intel 8086 od roku 1976 (byl představen v roce 1978, ale několik let se rozšířil v podobě téměř identického 8088 v počítači IBM později). Pozdní příjezd do 16bitové arény poskytuje novému procesoru více tranzistorů (zhruba 40 000 aktivních oproti 20 000 aktivních v 8086), 32bitové makroinstrukce a uznávané obecné snadné použití.

Původní MC68000 byl vyroben pomocí procesu HMOS s velikostí prvku 3,5  µm . Formálně zavedeny v září 1979, počáteční vzorky byly uvolněny v únoru 1980, přičemž výrobní čipy byly k dispozici na přepážce v listopadu. Počáteční rychlostní stupně jsou 4, 6 a 8  MHz . 10 MHz čipy byly k dispozici v průběhu roku 1981 a 12,5 MHz čipy do června 1982. 16,67 MHz „12F“ verze MC68000, nejrychlejší verze původního čipu HMOS, byla vyrobena až koncem 80. let minulého století.

IBM zvažovala 68000 pro IBM PC, ale zvolila Intel 8088, protože 68000 nebylo připraveno; Walden C. Rhines napsal, že „Motorola díky své špičkové technologii prohrála nejdůležitější soutěž návrhů za posledních 50 let“. (IBM Instruments krátce prodal laboratorní počítačové systémy IBM System 9000 na bázi 68000. ) Instrukční sada 68k je obzvláště vhodná pro implementaci Unixu a 68000 a její nástupci se stali dominantními CPU pro unixové pracovní stanice včetně pracovních stanic Sun a Apollo/ Doménové pracovní stanice. 68000 se také používá pro počítače s masovým prodejem, jako jsou Apple Lisa , Macintosh , Amiga a Atari ST . 68000 se používá v systémech Microsoft Xenix a v raném serveru založeném na NetWare Unix. 68000 se používá v první generaci stolních laserových tiskáren , včetně původního LaserWriter Apple Inc. a HP LaserJet .

V roce 1981 představila Motorola Educational Computer Board Motorola 68000 , jednodeskový počítač pro vzdělávací a školicí účely, který kromě samotného 68000 obsahoval paměť, I/O zařízení, programovatelný časovač a oblast omotávání vodičů pro vlastní obvody. Deska zůstala v použití na amerických vysokých školách jako nástroj pro učení programování montáží až do začátku 90. let minulého století.

V roce 1982 obdržel 68000 menší aktualizaci své architektury instrukčních sad (ISA), aby podporoval virtuální paměť a vyhověl požadavkům virtualizace Popek a Goldberg . Aktualizovaný čip se nazývá 68010 . Přidává také nový „režim smyčky“, který zrychluje malé smyčky a zvyšuje celkový výkon přibližně o 10% při stejných rychlostech hodin. Další rozšířená verze, která odhaluje 31 bitů adresové sběrnice, byla také vyráběna v malých množstvích jako 68012 .

Pro podporu levnějších systémů a řídicích aplikací s menší velikostí paměti představila Motorola 8bitový kompatibilní MC68008 , také v roce 1982. Jedná se o 68000 s 8bitovou datovou sběrnicí a menší ( 20bitovou ) adresovou sběrnicí. Po roce 1982 věnovala Motorola větší pozornost projektům 68020 a 88000 .

Druhé získávání zdrojů

Hitachi HD68000
Thomson TS68000

Několik dalších společností bylo výrobci druhého zdroje HMOS 68000. Patřilo mezi ně Hitachi (HD68000), kteří zmenšili velikost funkce na 2,7 µm u verze 12,5 MHz, Mostek (MK68000), Rockwell (R68000), Signetics (SCN68000), Thomson / SGS-Thomson (původně EF68000 a novější TS68000) a Toshiba (TMP68000). Toshiba byl také druhým výrobcem CMOS 68HC000 (TMP68HC000).

Šifrované varianty 68000, jako Hitachi FD1089 a FD1094, ukládají dešifrovací klíče pro operační kódy a data operačních kódů do paměti zálohované baterií a byly použity v některých arkádových systémech Sega, včetně systému 16, aby se zabránilo pirátství a nelegálním bootlegům.

Verze CMOS

Motorola MC68HC000LC8

68HC000, první CMOS verze 68000, byla navržena společností Hitachi a společně představena v roce 1985. Verze Motorola se nazývá MC68HC000, zatímco Hitachi je HD68HC000. 68HC000 nabízí rychlosti 8–20 MHz. Kromě použití obvodů CMOS se choval stejně jako HMOS MC68000, ale změna CMOS výrazně snížila jeho spotřebu energie. Původní HMOS MC68000 spotřeboval kolem 1,35  W při okolní teplotě 25  ° C , bez ohledu na rychlost hodin, zatímco MC68HC000 spotřeboval pouze 0,13 W při 8 MHz a 0,38 W při 20 MHz. (Na rozdíl od obvodů CMOS HMOS stále odebírá energii, když je nečinný, takže spotřeba energie se s taktovací frekvencí liší jen málo.) Apple vybral 68HC000 pro použití v přenosném počítači Macintosh .

Motorola nahradila MC68008 MC68HC001 v roce 1990. Tento čip se ve většině ohledů podobá 68HC000, ale jeho datová sběrnice může pracovat buď v 16bitovém nebo 8bitovém režimu, v závislosti na hodnotě vstupního pinu při resetu. Stejně jako 68008 tedy může být použit v systémech s levnějšími 8bitovými paměťmi.

Pozdější evoluce 68000 se zaměřila na modernější integrované řídicí aplikace a periferie na čipu. 68EC000 čip a SCM68000 jádro odstranit M6800 periferní sběrnice, a vyloučit přechod od SR instrukce před programy uživatelského režimu, dělat 68EC000 a 68SEC000 jediné 68000 CPU není 100% předmětem kódu kompatibilní s předchozími 68000 CPU, když běží v uživatelském režimu. Při spuštění v režimu supervizora není žádný rozdíl. V roce 1996 společnost Motorola aktualizovala samostatné jádro o plně statické obvody, přičemž v režimu nízké spotřeby odebírala pouze 2  µW a nazývala jej MC68SEC000.

Motorola ukončila výrobu HMOS MC68000 a MC68008 v roce 1996, ale její spin-off společnost Freescale Semiconductor stále vyráběla MC68HC000, MC68HC001, MC68EC000 a MC68SEC000, stejně jako MC68302 a MC68306 mikrořadiče a novější verze rodiny DragonBall . 68000 architektonických potomků, rodin 680x0 , CPU32 a Coldfire , bylo také stále ve výrobě. V nedávné době, s uzavřením fabie Sendai, byly všechny díly 68HC000, 68020, 68030 a 68882 ukončeny, takže ve výrobě zůstal pouze 68SEC000.

Jako jádro mikrokontroléru

68 000 je využíváno jako jádro mnoha mikrokontrolérů, protože je následováno „skutečnými“ 32bitovými mikroprocesory . V roce 1989 představila Motorola komunikační procesor MC68302 .

Aplikace

Dva procesory Hitachi 68HC000 používané na PCB arkádové hry

Při svém uvedení byl 68000 poprvé použit v drahých systémech, včetně víceuživatelských mikropočítačů, jako je WICAT 150, raných počítačů Alpha Microsystems , Sage II / IV , Tandy 6000 / TRS-80 Model 16 a Fortune 32:16 ; single-uživatelské pracovní stanice , jako je Hewlett-Packard 's HP 9000 Series 200 systémů, prvních Apollo / Domain systémů, Sun Microsystems ' Sun-1 , a Corvus Concept ; a grafické terminály, jako jsou VAXstation 100 společnosti Digital Equipment Corporation a IRIS 1000 a 1200 společnosti Silicon Graphics. Unixové systémy se rychle přesunuly k schopnějším pozdějším generacím řady 68k, které na tomto trhu zůstávaly populární po celá osmdesátá léta.

V polovině osmdesátých let klesající výrobní náklady učinily 68 000 životaschopnými pro použití v osobních a domácích počítačích , počínaje Apple Lisa a Macintosh , po nichž následovaly Commodore Amiga , Atari ST a Sharp X68000 . Na druhé straně byl mikropočítač Sinclair QL komerčně nejdůležitějším využitím 68008 spolu s jeho deriváty, jako je obchodní terminál ICL One Per Desk . Společnost Helix Systems (v Missouri, Spojené státy) navrhla rozšíření sběrnice SWTPC SS-50 , SS-64, a vyrobila systémy postavené kolem procesoru 68008.

Zatímco přijetí RISC a x86 vytlačilo řadu 68000 jako CPU pro stolní počítače/pracovní stanice, procesor našel značné využití ve vestavěných aplikacích. Na počátku devadesátých let bylo možné zakoupit 68 000 CPU za méně než 30  USD za součást.

Výrobci videoher použili 68000 jako páteř mnoha arkádových her a domácích herních konzolí : Atari's Food Fight , od roku 1982, byla jednou z prvních 68000 arkádových her. Jiní zahrnovali Sega 's System 16 , Capcom ' s systém CP a CPS-2 a SNK je Neo Geo . Na konci 1980, 68000 byla levná dost energie domácí herní konzole, jako Sega Mega Drive / Genesis konzoly a také CD Mega nástavec pro něj (přenosový systém Mega CD má tři procesory, dva z nich 68000s). 1993 multi-procesorová Atari Jaguar konzole používala 68000 jako podpůrný čip, ačkoli někteří vývojáři používali to jako primární procesor kvůli známosti. Konzole Sega Saturn 1994 s více procesory používala 68000 jako zvukový koprocesor (podobně jako Mega Drive/Genesis používá Z80 jako koprocesor pro zvuk a/nebo jiné účely). Do roku 1995 se 68000 dostalo jako hlavní CPU do ruční herní konzole , Sega's Genesis Nomad .

Některé arkádové hry (například Steel Gunner a další založené na systému Namco System 2 ) používají duální konfiguraci 68000 CPU a existují také systémy s trojí konfigurací 68000 CPU (například Galaxy Force a další založené na desce Sega Y), spolu s konfigurace CPU Quad 68000, kterou používalo Jaleco (jeden 68000 pro zvuk má nižší takt ve srovnání s ostatními 68000 CPU) pro hry jako Big Run a Cisco Heat ; dalších, pátých 68 000 (s jiným taktem než ostatní 68 000 CPU) bylo použito v arkádové hře Jaleco Wild Pilot pro zpracování vstupů/výstupů (I/O).

68000 také zaznamenal velký úspěch jako integrovaný ovladač. Již v roce 1981 byly laserové tiskárny , jako je Imagen Imprint-10, ovládány externími deskami vybavenými 68000. První HP LaserJet , představený v roce 1984, měl vestavěný 68 MHz 68000. Ostatní výrobci tiskáren přijali 68000, včetně Apple s uvedením LaserWriter v roce 1985, první laserové tiskárny PostScript . 68000 bylo i nadále široce používáno v tiskárnách po zbytek 80. let minulého století a přetrvávalo až do 90. let v tiskárnách nižší třídy.

68 000 také zaznamenalo úspěch v oblasti průmyslových řídicích systémů. Mezi systémy, které těžily z toho, že mají jako mikroprocesor 68 000 nebo derivát, byly rodiny programovatelných logických automatů (PLC) vyráběných společností Allen-Bradley , Texas Instruments a následně po akvizici této divize TI společností Siemens . Uživatelé takových systémů neakceptují zastarávání produktů stejným tempem jako domácí uživatelé a je zcela pravděpodobné, že navzdory tomu, že byly nainstalovány před více než 20 lety, bude mnoho 68 000 ovladačů se spolehlivou službou pokračovat i do 21. století.

V řadě digitálních osciloskopů z 80. let byl 68000 použit jako zobrazovací procesor průběhů; některé modely včetně LeCroy 9400/9400A také používají 68000 jako matematický procesor průběhů (včetně sčítání, odčítání, násobení a dělení dvou průběhů/referencí/pamětí průběhů) a některé digitální osciloskopy využívající 68000 (včetně 9400/9400A ) může také provádět rychlé Fourierovy transformační funkce na křivce.

Tyto 683XX mikrořadiče, založené na 68000 architektuře, jsou používány v oblasti síťových a telekomunikačních zařízení, televizní set-top boxy, laboratorní a lékařské nástroje a dokonce i kapesní kalkulačky. MC68302 a jeho deriváty byly použity v mnoha telekomunikačních produktech od společností Cisco, 3com, Ascend, Marconi, Cyclades a dalších. Dřívější modely Palm PDA a Handspring Visor používaly DragonBall , derivát 68000. AlphaSmart používal rodinu DragonBall v novějších verzích svých přenosných textových procesorů. Texas Instruments použil 68000 ve svých špičkových grafických kalkulačkách, řadách TI-89 a TI-92 a Voyage 200 .

Upravená verze 68000 byla základem hardwarového emulátoru IBM XT/ 370 procesoru System 370.

Architektura

Motorola 68000 registrů
3 1 ... 2 3 ... 1 5 ... 0 7 ... 0 0 (bitová pozice)
Datové registry
D0 Data 0
D1 Údaje 1
D2 Údaje 2
D3 Data 3
D4 Údaje 4
D5 Údaje 5
D6 Údaje 6
D7 Data 7
Registry adres
  A0                           Adresa 0
  A1                           Adresa 1
  A2                           Adresa 2
  A3                           Adresa 3
  A4                           Adresa 4
  A5                           Adresa 5
  A6                           Adresa 6
Ukazatele zásobníku
  A7 / USP                        Ukazatel zásobníku (uživatel)
  A7 ' / SSP                        Ukazatel zásobníku (supervizor)
Počitadlo programů
  PC                           Počitadlo programů
Podmínka Kód Registrace
  1 5 1 4 1 3 1 2 1 1 1 0 0 9 0 8 0 7 0 6 0 5 0 4 0 3 0 2 0 1 0 0 (bitová pozice)
  T S M 0 0 0 0 X N. Z PROTI C CCR

Adresní sběrnice

68000 má 24bitovou externí adresovou sběrnici a dva signály pro výběr bajtů „nahrazené“ A0. Těchto 24 řádků tedy může adresovat 16 MB fyzické paměti s rozlišením bajtů. Ukládání a výpočet adres využívá interně 32 bitů; 8 bitů adresy vyššího řádu je však ignorováno z důvodu fyzického nedostatku pinů zařízení. To mu umožňuje spouštět software napsaný pro logicky plochý 32bitový adresní prostor , přičemž má přístup pouze k 24bitovému fyzickému adresnímu prostoru. Záměrem společnosti Motorola s interním 32bitovým adresním prostorem byla dopředná kompatibilita, díky čemuž bylo možné zapsat software 68000, který by plně využil pozdější 32bitové implementace 68000 instrukční sady.

To však nebránilo programátorům psát nekompatibilní software dopředu. „24bitový“ software, který zahodil bajt horní adresy nebo jej použil k jiným účelům než k adresování, mohl u 32bitových implementací 68000 selhat. Například rané (před 7.0) verze systému Mac OS společnosti Apple používaly vysoký bajt hlavních ukazatelů bloků paměti k uchovávání příznaků, jako jsou zamčené a čistitelné . Pozdější verze OS přesunuly vlajky na blízké místo a Apple začal dodávat počítače, které měly „ 32bitové čisté “ ROM, počínaje vydáním Mac IIci z roku 1989.

Řada 68000 ukládá vícebajtová celá čísla do paměti v pořadí big-endian .

Interní registry

CPU má osm 32bitových univerzálních datových registrů (D0-D7) a osm adresových registrů (A0-A7). Poslední registr adres je ukazatel zásobníku a montéři akceptují označení SP jako ekvivalent A7. V té době to byl v mnoha ohledech dobrý počet registrů. Bylo to dost malé na to, aby to 68000 mohlo rychle reagovat na přerušení (dokonce i v nejhorším případě, kdy bylo potřeba uložit všech 8 datových registrů D0 – D7 a 7 adresních registrů A0 – A6, celkem 15 registrů), a přesto dostatečně velké na to, většinu výpočtů proveďte rychle, protože je lze provádět zcela v procesoru, aniž by byly v paměti uchovávány jakékoli dílčí výsledky. (Všimněte si toho, že rutina výjimky v režimu supervizora může také uložit ukazatel A7 zásobníku uživatele, což by znamenalo celkem 8 adresních registrů. Nicméně konstrukce 68000 ukazatele duálního zásobníku (A7 a režim dohledu A7 ') to běžně dělá zbytečným, kromě když je přepínání úloh prováděno ve víceúlohovém systému.)

Díky dvěma typům registrů může současně probíhat jedna 32bitová adresa a jeden 16bitový výpočet dat. Výsledkem je zkrácení doby provádění instrukcí, protože adresy a data lze zpracovávat paralelně.

Stavový registr

68000 má 16bitový stavový registr. Horní 8 bitů je systémový bajt a jeho modifikace je privilegovaná. Dolních 8 bitů je uživatelský bajt, známý také jako registr kódů podmínek (CCR), a jeho modifikace není privilegovaná. Porovnávací, aritmetické a logické operace 68000 upravují kódy podmínek tak, aby zaznamenávaly jejich výsledky pro použití při pozdějších podmíněných skocích. Bity kódu podmínky jsou „nula“ (Z), „nést“ (C), „přetečení“ (V), „roztažení“ (X) a „záporné“ (N). Zvláštní zmínku si zaslouží příznak „extend“ (X), protože je oddělený od vlajky carry . To umožňuje, aby extra bit z aritmetických, logických a posunových operací byl oddělen od přenosu pro tok řízení a propojení.

Instrukční sada

Konstruktéři se pokusili, aby byl jazyk sestavy ortogonální . To znamená, že pokyny jsou rozděleny na operace a režimy adres a téměř všechny režimy adres jsou k dispozici pro téměř všechny instrukce. Existuje 56 instrukcí a minimální velikost instrukce je 16 bitů. Mnoho instrukcí a režimů adresování je delší, aby zahrnovalo více bitů adresy nebo režimu.

Úrovně oprávnění

CPU a později celá rodina implementuje dvě úrovně oprávnění. Uživatelský režim poskytuje přístup ke všemu kromě privilegovaných pokynů, jako je ovládání úrovně přerušení. Oprávnění správce umožňuje přístup ke všemu. Přerušení se vždy stane supervizorem. Bit dohledu je uložen ve stavovém registru a je viditelný pro uživatelské programy.

Výhodou tohoto systému je, že úroveň supervizora má samostatný ukazatel zásobníku. To umožňuje víceúlohovému systému používat pro úkoly velmi malé zásobníky, protože konstruktéři nemusí alokovat paměť potřebnou k uložení rámců zásobníku pro maximální hromadění přerušení.

Přerušení

CPU rozpozná sedm úrovní přerušení . Úrovně 1 až 5 jsou přísně prioritní. To znamená, že přerušení s vyšším číslem může vždy přerušit přerušení s nižším číslem. Ve stavovém registru privilegovaná instrukce umožňuje nastavit aktuální minimální úroveň přerušení, blokovat přerušení s nižší nebo stejnou prioritou. Pokud je například úroveň přerušení ve stavovém registru nastavena na 3, vyšší úrovně od 4 do 7 mohou způsobit výjimku. Úroveň 7 je nemaskovatelné přerušení (NMI) spuštěné na úrovni . Úroveň 1 může být přerušena jakoukoli vyšší úrovní. Úroveň 0 znamená žádné přerušení. Úroveň je uložena ve stavovém registru a je viditelná pro programy na úrovni uživatele.

Hardwarová přerušení jsou signalizována CPU pomocí tří vstupů, které kódují nejvyšší prioritu čekajícího přerušení. Ke kódování přerušení je obvykle vyžadován samostatný kodér, ačkoli u systémů, které nevyžadují více než tři hardwarová přerušení, je možné připojit signály přerušení přímo ke kódovaným vstupům za cenu větší softwarové složitosti. Řadič přerušení může být jednoduchý jako kodér priority 74LS148 nebo může být součástí periferního čipu VLSI ( Very Large Scale Integration ), jako je multifunkční periferie MC68901 (používá se v řadě počítačů Atari ST a Sharp X68000 ), který také poskytoval UART , časovač a paralelní I/O.

"Tabulka výjimek" ( adresy vektorů přerušení tabulky vektorů přerušení) jsou pevně nastaveny na adresy 0 až 1023, což umožňuje 256 32bitových vektorů. První vektor (RESET) se skládá ze dvou vektorů, konkrétně adresy počátečního zásobníku a adresy počátečního kódu. Vektory 3 až 15 se používají k hlášení různých chyb: chyba sběrnice, chyba adresy, nelegální instrukce , nulové dělení , vektor CHK a CHK2, narušení oprávnění (pro zablokování eskalace oprávnění ) a některé vyhrazené vektory, které se staly emulátorem linky 1010, emulátorem linky 1111 a hardwarový bod zlomu . Vektor 24 spouští skutečná přerušení: falešné přerušení (bez hardwarového potvrzení) a autovektory úrovně 1 až úrovně 7, poté 16 vektorů TRAP, potom některé rezervovanější vektory a poté vektory definované uživatelem.

Protože při resetu musí být vždy minimálně počátek vektoru adresního kódu platný, systémy běžně obsahovaly nějakou energeticky nezávislou paměť (např. ROM ) začínající na adrese nula, aby obsahovaly vektory a kód bootstrapu . Pro systém pro obecné účely je však žádoucí, aby operační systém mohl měnit vektory za běhu. Toho bylo často dosaženo buď nasměrováním vektorů v paměti ROM na skokovou tabulku v paměti RAM , nebo pomocí přepínání bank, které umožnilo nahrazení paměti ROM pamětí RAM za běhu.

68000 nesplňuje požadavky na virtualizaci Popek a Goldberg pro plnou virtualizaci procesoru, protože má jedinou neprivilegovanou instrukci „MOVE from SR“, která umožňuje softwaru v uživatelském režimu přístup pouze pro čtení k malému množství privilegovaného stavu. 68EC000 a 68SEC000, které jsou pozdějšími deriváty 68000, však požadavky splňují, protože instrukce „MOVE from SR“ je privilegovaná. Stejná změna byla zavedena na procesorech 68010 a novějších.

68000 také nedokáže snadno podporovat virtuální paměť , což vyžaduje schopnost zachytit a obnovit se z neúspěšného přístupu do paměti. 68000 poskytuje výjimku chyby sběrnice, kterou lze použít k zachycení, ale neuloží dostatečný stav procesoru k obnovení chybné instrukce, jakmile operační systém zvládne výjimku. Několik společností uspělo ve výrobě 68 000 unixových pracovních stanic s virtuální pamětí, které fungovaly pomocí dvou 68 000 čipů běžících souběžně na různých fázovaných hodinách. Když "vedoucí" 68000 narazí na špatný přístup k paměti, další hardware přeruší "hlavní" 68000, aby zabránil tomu, aby také narazil na špatný přístup do paměti. Tato rutina přerušení by zvládla funkce virtuální paměti a restartovala „vedoucí“ 68000 ve správném stavu, aby pokračovala ve správně synchronizované operaci, když se „hlavní“ 68000 vrátila z přerušení.

Tyto problémy byly opraveny v další velké revizi 68k architektury, s vydáním MC68010. Výjimky Chyba sběrnice a Chyba adresy tlačí velké množství interního stavu do zásobníku supervizora, aby se usnadnilo obnovení, a instrukce „MOVE from SR“ byla nastavena jako privilegovaná. Nový neprivilegovaný pokyn „MOVE from CCR“ je poskytován pro použití místo něj softwarem uživatelského režimu; operační systém může v případě potřeby zachytit a emulovat pokyny „MOVE from SR“ v uživatelském režimu.

Podrobnosti sady instrukcí

Standardní režimy adresování jsou:

  • Zaregistrujte se přímo
    • datový registr, např. "D0"
    • registr adres, např. "A0"
  • Zaregistrujte se nepřímo
    • Jednoduchá adresa, např. (A0)
    • Adresa s dodatečným přírůstkem, např. (A0)+
    • Adresa s předběžným snížením, např.-(A0)
    • Adresa s 16bitovým podepsaným ofsetem, např. 16 (A0)
    • Registrace nepřímá pomocí indexového registru a 8bitového podepsaného posunu, např. 8 (A0, D0) nebo 8 (A0, A1)
    Všimněte si, že pro (A0)+ a - (A0) je skutečná hodnota přírůstku nebo úbytku závislá na velikosti operandu: bajtový přístup upravuje registr adres o 1, slovo o 2 a dlouhý o 4.
  • PC (programový čítač) relativní s posunem
    • Relativní 16bitový podepsaný offset, např. 16 (PC). Tento režim byl velmi užitečný pro kód nezávislý na poloze.
    • Relativní s 8bitovým podepsaným ofsetem s indexem, např. 8 (PC, D2)
  • Absolutní umístění paměti
    • Buď číslo, např. „4000 $“, nebo symbolické jméno přeložené assemblerem
    • Většina 68 000 montérů použila symbol „$“ pro hexadecimální namísto „0x“ nebo koncové H.
    • Existovalo 16 a 32bitové verze tohoto režimu adresování
  • Okamžitý režim
    • Data uložená v instrukci, např. „#400“
  • Rychlý okamžitý režim
    • 3bitové bez znaménka (nebo 8bitové podepsané pomocí moveq) s hodnotou uloženou v operačním kódu
    • V addq a subq je 0 ekvivalentní 8
    • např. moveq #0, d0 bylo rychlejší než clr.l d0 (i když obě dělaly D0 rovno 0)

Plus: přístup do stavového registru a v novějších modelech k dalším speciálním registrům.

Většina pokynů má přípony s tečkami a písmeny, což umožňuje operace na 8bitových bajtech („.b“), 16bitových slovech („.w“) a 32bitových délkách („.l“).

Jako mnoho CPU své doby se časování cyklu některých instrukcí lišilo v závislosti na zdrojových operandech. Například instrukce násobení bez znaménka trvá (38+2n) hodinových cyklů, kde 'n' se rovná počtu bitů nastavených v operandu. K vytvoření funkce, která vyžadovala počet pevných cyklů, bylo nutné po instrukci násobení přidat další kód. To by obvykle spotřebovalo další cykly pro každý bit, který nebyl nastaven v původním multiplikačním operandu.

Většina pokynů je dyadická , to znamená, že operace má zdroj a cíl a cíl se změní. Pozoruhodné pokyny byly:

  • Aritmetika: ADD, SUB, MULU (násobení bez znaménka), MULS (násobení se znaménkem), DIVU, DIVS, NEG (aditivní negace) a CMP (druh srovnání provedeného odečtením argumentů a nastavením stavových bitů, ale neuloženo výsledek)
  • Binární kódovaná desítková aritmetika: ABCD, NBCD a SBCD
  • Logika: EOR (exkluzivní nebo), AND, NOT (logické ne), NEBO (včetně nebo)
  • Řazení: (logické, tj. Posuny doprava dávají nulu do nejvýznamnějšího bitu) LSL, LSR, ( aritmetické posuny , tj. Znaménko prodlužuje nejvýznamnější bit) ASR, ASL, (rotuje přes eXtend a ne) ROXL, ROXR, ROL, ROR
  • Bitový test a manipulace v paměti nebo datovém registru: BSET (nastaveno na 1), BCLR (vymazáno na 0), BCHG (invertováno) a BTST (beze změny). Všechny tyto instrukce nejprve otestují cílový bit a nastaví (zruší) bit CCR Z, pokud je cílový bit 0 (1).
  • Řízení více procesů : TAS, test-and-set , provedl nedělitelnou operaci sběrnice, což umožňuje použití semaforů k synchronizaci několika procesorů sdílejících jednu paměť
  • Tok řízení: JMP (skok), JSR (skok na podprogram), BSR (skok na relativní adresu na podprogram), RTS (návrat z podprogramu ), RTE (návrat z výjimky , tj. Přerušení), TRAP (spuštění softwarové výjimky podobné k přerušení softwaru), CHK (podmíněná softwarová výjimka)
  • Obor: Skrytá kopie (kde "kopie" specifikovalo jeden ze 14 testů stavových kódů ve stavovém registru: stejné, větší než, menší než, přenos a většina kombinací a logických inverzí, dostupné ze stavového registru). Zbývající dvě možné podmínky (vždy pravdivé a vždy nepravdivé) mají oddělené instrukční mnemotechnické pomůcky, BRA (větev vždy) a BSR (větev na podprogram).
  • Decrement-and-branch: DBcc (where "cc" was as for the branch instructions), which, if the condition was false , decrement the low word of a D-register and, if the result was not -1 ($ FFFF) , rozvětvený na místo určení. Toto použití −1 místo 0 jako ukončovací hodnoty umožnilo snadné kódování smyček, které neměly co dělat, pokud počet začínal 0, bez nutnosti další kontroly před vstupem do smyčky. To také usnadnilo vnoření DBcc.

68EC000

Ovladač Motorola 68EC000

68EC000 je levná verze 68000 s mírně odlišným vývodem, navržená pro aplikace s integrovanými řadiči. 68EC000 může mít buď 8bitovou, nebo 16bitovou datovou sběrnici , přepínatelnou při resetu.

Procesory jsou k dispozici v různých rychlostech, včetně konfigurací 8 a 16  MHz , přičemž každý produkuje 2100 a 4376  Dhrystones . Tyto procesory nemají jednotku s plovoucí desetinnou čárkou a je obtížné implementovat koprocesor FPU ( MC68881/2 ) s jedním, protože řada EC postrádá potřebné pokyny pro koprocesor.

68EC000 byl použit jako řadič v mnoha zvukových aplikacích, včetně hudebních nástrojů Ensoniq a zvukových karet, kde byl součástí MIDI syntezátoru. Na zvukových deskách Ensoniq poskytoval řadič několik výhod ve srovnání s konkurenty bez integrovaného procesoru. Procesor umožňoval desce konfigurovat provádění různých zvukových úkolů, jako je MPU-401 MIDI syntéza nebo emulace MT-32 , bez použití programu TSR . To zlepšilo kompatibilitu softwaru, snížilo využití procesoru a eliminovalo využití paměti hostitelského systému.

Jádro Motorola 68EC000 bylo později použito v m68k procesorech DragonBall od společnosti Motorola/ Freescale .

Byl také použit jako ovladač zvuku v herní konzoli Sega Saturn a jako ovladač pro desky řadiče HP JetDirect Ethernet pro tiskárny HP LaserJet v polovině 90. let .

Příklad kódu

Níže uvedený kód sestavy 68000 je pro podprogram pojmenovaný strtolower, který zkopíruje řetězec 8bitových znaků zakončený nulou do cílového řetězce a převede všechny abecední znaky na malá písmena.

                     
                     
                     
                     
        
             
                     
                     
                     
00100000          
00100000  4E56 0000
00100004  306E 0008
00100008  326E 000C
0010000C  1018
0010000E  0C40 0041
00100012  6500 000E
00100016  0C40 005A
0010001A  6200 0006
0010001E  0640 0020
00100022  12C0
00100024  66E6
00100026  4E5E
00100028  4E75
0010002A
; strtolower:
; Copy a null-terminated ASCII string, converting
; all alphabetic characters to lower case.
;
; Entry parameters:
;   (SP+0): Source string address
;   (SP+4): Target string address

                org     $00100000       ;Start at 00100000
strtolower      public
                link    a6,#0           ;Set up stack frame
                movea   8(a6),a0        ;A0 = src, from stack
                movea   12(a6),a1       ;A1 = dst, from stack
loop            move.b  (a0)+,d0        ;Load D0 from (src), incr src
                cmpi    #'A',d0         ;If D0 < 'A',
                blo     copy            ;skip
                cmpi    #'Z',d0         ;If D0 > 'Z',
                bhi     copy            ;skip
                addi    #'a'-'A',d0     ;D0 = lowercase(D0)
copy            move.b  d0,(a1)+        ;Store D0 to (dst), incr dst
                bne     loop            ;Repeat while D0 <> NUL
                unlk    a6              ;Restore stack frame
                rts                     ;Return
                end

Podprogram vytvoří rámec volání pomocí registru A6 jako ukazatele rámce. Tento druh konvence volání podporuje reentrantní a rekurzivní kód a obvykle jej používají jazyky jako C a C ++ . Podprogram pak načte parametry, které mu byly předány ( srca dst) ze zásobníku. Poté se smyčka načte z srcřetězce znakem ASCII (jeden bajt) , zkontroluje, zda se jedná o velký abecední znak, a pokud ano, převede jej na malá písmena, jinak jej ponechá tak, jak je, pak zapíše znak do dstřetězec. Nakonec zkontroluje, zda byl znak nulovým znakem ; pokud ne, opakuje smyčku, jinak obnoví předchozí rámec zásobníku (a registr A6) a vrátí se. Ukazatele řetězců (registry A0 a A1) se automaticky zvyšují v každé iteraci smyčky.

Naproti tomu níže uvedený kód je pro samostatnou funkci, dokonce i pro nejpřísnější verzi AMS pro řadu kalkulaček TI-89 , která je nezávislá na jádře a při provádění se v tabulkách, souborech nebo knihovnách nehledají žádné hodnoty, žádná systémová volání, žádné zpracování výjimek, minimální registry, které mají být použity, ani potřeba žádné ukládat. Platí pro historické juliánské termíny od 1. března 1. n. L. Nebo pro gregoriánské . Za méně než dvě desítky operací vypočítá číslo dne kompatibilní s ISO 8601 při volání se třemi vstupy uloženými na jejich odpovídajících LOKALITÁCH:

;
;  WDN, an address - for storing result d0
; FLAG, 0 or 2 - to choose between Julian or Gregorian, respectively
; DATE, year0mda - date stamp as binary word&byte&byte in basic ISO-format
;(YEAR, year ~ YEAR=DATE due to big-[[Endianness#Current_architectures|endianness]])
;
     move.l DATE,d0
     move.l d0,d1
;
; Apply step 1 - [[SuperBASIC#Example|Lachman's congruence]]
     andi.l #$f00,d0
     divu #100,d0
     addi.w #193,d0
     andi.l #$ff,d0
     divu #100,d0 ; d0 has the month index i in the upper word (mod 100)
;
; Apply step 2 - Using spqr as the Julian year of the leap day preceding DATE
     swap d0
     andi.l #$ffff,d0
     add.b d1,d0
     add.w YEAR,d0
     subi.l #$300,d1
     lsr  #2,d1
     swap d1
     add.w d1,d0 ; spqr/4 + year + i + da}}
;
; (Apply step 0 - Gregorian adjustment)
     mulu FLAG,d1
     divu #50,d1
     mulu #25,d1
     lsr  #2,d1
     add.w d1,d0
     add.w FLAG,d0 ; (sp32div16) + spqr/4 + year + i + da
;
     divu #7,d0
     swap d0  ;  d0.w becomes the day number
;
     move.w d0,WDN ; returns the day number to address WDN
     rts
;
; Days of the week correspond to day numbers of the week as:
; Sun=0  Mon=1  Tue=2  Wed=3  Thu=4  Fri=5  Sat=6
;

Viz také

Reference

Další čtení

Katalogové listy a manuály
Knihy
  • 68000, 68010, 68020 Primer ; 1. vydání; Stan Kelly-Bootle a Bob Fowler; Howard Sams & Co; 370 stran; 1985; ISBN  978-0672224058 . (archiv)
  • Zvládnutí mikroprocesoru 68000 ; 1. vydání; Phillip Robinson; Záložkové knihy; 244 stran; 1985; ISBN  978-0830608867 . (archiv)
  • Pocket Guide Assembly Language pro řadu 68000 ; 1. vydání; Robert Erskine; Vydavatelství Pitman; 70 stran; 1984; ISBN  978-0273021520 . (archiv)
  • Schémata zápustky Motorola M68000 [1]
  • 68000 Programování strojového kódu (procesory 68000, 68008, 68010, & 68020); 1. vydání; David Barrow; Collins odborné a technické knihy; 234 stran; 1985; ISBN  0-00-383163-9 .

externí odkazy