Motorola 68000 - Motorola 68000


z Wikipedie, otevřené encyklopedie
Motorola 68000 architektura
Návrhář Motorola
bity 16/32 bitů
zavedla 1979 ; Před 39 lety ( 1979 )
Design CISC
větvení stavový kód
endianness Velký
registry
obecný účel 8 x 32-bit + 7 adresové registry také použitelný pro většinu operací + ukazatel zásobníku
Motorola 68000 CPU
Instrukce 56
šířka dat 16
šířka adresa 24

Motorola 68000 ( „‚šedesát osm tisíc‘“, nazývaný také m68k nebo Motorola 68k , „ šedesát osm-Kay “) je 16/32 bitů CISC mikroprocesor , který implementuje 32-bitové instrukční sadu , s 32-bitové registry a 32-bit interní datovou sběrnici , ale s 16-bitovým datovým ALU a dvě 16bitové aritmetický alus a 16bitové externí datovou sběrnicí , navržený a prodávaný firmou Motorola Semiconductor Products Sector. Představený v roce 1979 HMO technologií jako první člen úspěšného 32bitové Motorola řady 68000 , to je obecně software dopředu kompatibilní se zbytkem linky přesto, že je omezen na 16-bitové celé externí sběrnice. Po 39 letech ve výrobě , 68000 architektura je stále v provozu.

Pre-release XC68000 čip vyroben v roce 1979
Die Motorola 68000

Dějiny

Motorola MC68000 ( CLCC balíček)
Motorola MC68000 ( PLCC balení)

68000 vyrostl z MACSS (Motorola Advanced Computer System v Silicon) projekt, začal v roce 1976 vyvinout zcela novou architekturu bez zpětné kompatibility . Jednalo by se o vyšší moc sourozenec doplnit stávající 8-bit 6800 linii spíše než kompatibilního nástupce. Na konci, 68000 udělal zachovat sběrnicovým protokolem režim kompatibility pro stávající 6800 periferních zařízení, a také v provedení s 8-bitová datová sběrnice byl vyroben. Nicméně, konstruktéři zaměřili hlavně na budoucnost, nebo dopředné kompatibility , který dal 68000 navrhnout náskok proti pozdější 32-bitové instrukční sady architektury . Například registry CPU je 32 bitů široká, i když jen málo ucelené struktury v procesoru sám fungovat na 32 bitů najednou. MACSS tým čerpal silně na vliv minipočítač konstrukce procesoru, jako jsou PDP-11 a VAX systémů, které byly podobně mikrokódu bázi.

V polovině 1970, jsou 8-bitové výrobci mikroprocesoru závodil představit generace 16bitové. National Semiconductor byl poprvé se svými IMP-16 a PACE procesorů v letech 1973-1975, ale tito měli problémy s rychlostí. Intel pracoval na jejich pokročilý 16/32-bit Intel iAPX 432 (alias 8800) od roku 1975 a jejich Intel 8086 od roku 1976 (to bylo představeno v roce 1978, ale stal opravdu rozšířené v podobě téměř totožné 8088 v IBM PC nemnoho roky později). Pozdní příchod do 16-bitového arény se získá nový procesor více tranzistorů (zhruba 40000 aktivní proti 20000 aktivní v 8086), 32-bitové makroinstrukce a uznávaný obecně snadnost použití.

Původní MC68000 byla vyrobena za použití HMOS procesu s 3,5  um velikosti prvku. Oficiálně představen v září 1979, počáteční vzorky byl propuštěn v únoru 1980, s výrobními čipy jsou k dispozici přes pult v listopadu. Stupně počáteční rychlost se 4, 6, a 8  MHz . 10 MHz čipy byly k dispozici v průběhu roku 1981, a 12,5 MHz čipy od června 1982. 16,67 MHz „12F“ verze MC68000, nejrychlejší verze původní HMO čipu, byl vyroben až pozdní 1980.

Sada 68k pokyn byl zvláště dobře hodí pro realizaci Unix, a 68000 a jeho následníků stal dominantním procesory pro unixové pracovní stanice , včetně Sun pracovním stanicím a Apollo / doménových stanic. 68000 byla také použita pro masový trh počítačů, jako je například Apple Lisa , Macintosh , Amigu a Atari ST . 68000 byl použit v Microsoft Xenix systémů, stejně jako časný NetWare Server Unix-založený. 68000 byl použit v první generaci desktop laserových tiskáren , včetně originálu Apple Inc. LaserWriter a HP LaserJet . V roce 1982, 68000 obdrželi aktualizaci svého standardu , který umožňuje, že k podpoře virtuální paměti a aby odpovídal požadavkům Popek a Goldberg virtualization . Aktualizovaná čip byl nazýván 68010 . Další rozšířená verze, která vystaví 31 bitů adresovou sběrnici, byl také produkován v malých množstvích jako 68012 .

K podpoře levnějších systémů a řídicích aplikací s menšími velikostmi paměti, Motorola představila 8-bit kompatibilní MC68008 , rovněž v roce 1982. Jednalo se o 68000 s 8-bitovou sběrnici a menší (20-bit) adresové sběrnice. Po roce 1982, Motorola věnována větší pozornost 68020 a 88000 projekty.

Second-sourcing

Hitachi HD68000
Thomson TS68000

Několik dalších společností byla druhá-source výrobci těchto HMOS 68000. Zahrnovaly Hitachi (HD68000), který se snížil o velikosti rys 2,7 um pro jejich verze 12.5 MHz, Mostek (MK68000), Rockwell (R68000), Signetics (SCN68000), Thomson / SGS-Thomson (původně EF68000 a později TS68000), a Toshiba (TMP68000). Toshiba byla také druhá-source výrobce CMOS 68HC000 (TMP68HC000).

Šifrované varianty 68000, přičemž tyto Hitachi FD1089 a FD1094 store dešifrovací klíče pro operační kódy a data operačního kódu v paměti, se záložní baterií, byl použit v některých arkádových systémů včetně Sega System 16 , aby se zabránilo pirátství a nelegální ilegální hry.

verze CMOS

Motorola MC68HC000LC8

68HC000, první CMOS verze 68000, byl navržen tak, Hitachi a společně představený v roce 1985. verze Motoroly byl nazýván MC68HC000, zatímco Hitachi byl HD68HC000. 68HC000 byl nakonec určen rychlostí 8-20 MHz. S výjimkou použití CMOS obvodů, choval identicky hmos MC68000, ale změna CMOS výrazně snižuje spotřebu energie. Původní HMOS MC68000 spotřebuje asi 1,35  W při okolní teplotě 25  ° C , bez ohledu na rychlost hodiny, zatímco MC68HC000 spotřebuje pouze 0,13 wattů na 8 MHz a 0,38 wattů na 20 MHz. (Na rozdíl od obvodů CMOS, HMOS stále odebírá energii při nečinnosti, takže spotřeba energie se liší jen málo s taktovací frekvencí.) Apple vybrali 68HC000 pro použití v systému Macintosh Portable .

Motorola nahradil MC68008 s MC68HC001 v roce 1990. Tento čip se podobal 68HC000 v mnoha ohledech, ale jeho datová sběrnice mohl působit buď 16-bit nebo 8-bitovém režimu, v závislosti na hodnotě vstupního kolíku při resetu. Tak, jako je 68008, by mohl být použit v systémech s levnějšími 8-bitové paměti.

Pozdější vývoj 68000 zaměřila na více moderních vestavěných řídicích aplikací a on-chip periferie. 68EC000 čip a SCM68000 jádro rozšířil adresovou sběrnici na 32 bitů, odstranil periferní sběrnice, M6800, a vyloučen přechod od SR instrukce z programů uživatelském režimu. V roce 1996, Motorola aktualizovaný samostatný jádro s plně statickou obvodů, kreslení pouze 2  μW v režimu s nízkou spotřebou, volat to MC68SEC000.

Motorola ukončila výrobu HMOS MC68000 a MC68008 v roce 1996, ale jeho spin-off firma Freescale Semiconductor stále produkovat MC68HC000, MC68HC001, MC68EC000 a MC68SEC000, stejně jako MC68302 a MC68306 mikroprocesory a novější verze DragonBall rodiny. 68000 architektonické potomci, že 680x0 , CPU32 a COLDFIRE rodiny, byl také stále ve výrobě. Více nedávno, s Sendai fab uzávěru, všechny 68HC000, 68020, 68030 a 68882 dílů byly zrušeny, odcházející jediný 68SEC000 ve výrobě.

Jako mikrokontroléru jádro

Poté, co byl následován „pravých“ 32-bitových mikroprocesorů, 68000 byl použit jako jádro mnoha mikroprocesory . V roce 1989, Motorola představila MC68302 komunikační procesor.

Aplikace

Dva Hitachi 68HC000 procesory používají na pasáž-game PCB

Na svém úvodu, 68000 byl poprvé použit v nákladných systémů, včetně víceuživatelské mikropočítačů , jako je WICAT 150, časných Alpha Microsystems počítače, Sage II / IV , Tandy TRS-80 Model 16 , a Fortune 32:16 ; single-uživatelské pracovní stanice , jako je Hewlett-Packard 's HP 9000 200 systémů Series, první Apollo / Domain systémů, Sun Microsystems ' Sun-1 , a Corvus Concept ; a grafické terminály jako Digital Equipment Corporation je VAXstation 100 a Silicon Graphics "IRIS 1000 a 1200. unixových systémů rychle se stěhoval do více schopných pozdějších generací 68k linie, které zůstaly populární v tomto trhu v průběhu 1980.

V polovině-1980, klesající výrobní náklady dělal 68000 únosné pro použití v osobních a domácích počítačů , počínaje Apple Lisa a Macintosh , a následuje Commodore Amiga , Atari ST a Sharp Sharp X68000 . Na druhou stranu, Sinclair QL mikropočítač byl nejvíce komerčně důležité využití 68008, spolu s jeho deriváty, jako je například ICL One Per Desk obchodního terminálu. Helix Systems (v Missouri, Spojené státy) navrhl prodloužení na SWTPC SS-50 sběrnice , SS-64, a produkoval systémy postavené kolem 68008 procesoru.

Zatímco přijetí RISC a x86 posunut série 68000 jako stolní / pracovní stanice CPU, procesor nalezeno značné využití v zabudovaných aplikacích. Na počátku 1980, množství 68000 procesorů, kterou lze zakoupit za méně než 30  dolarů na jeden díl.

Videohry výrobci používali 68000 jako páteř mnoha arkádových her a domácí herní konzole : Atari Food Fight , od roku 1982, byl jedním z prvních 68000 bázi arkádové hry. Jiní zahrnovali Sega 's System 16 , Capcom je systém CP a CPS-2 a SNK je Neo Geo . Na konci 1980, 68000 stačilo levná energie domácí herní konzole, jako Sega hrozně řídit (Genesis) konzole a také CD Sega upevnění pro něj (systém Sega CD má tři procesory, dvě z nich 68000s). 1993 víceprocesorových Atari Jaguar konzola používá 68000 jako nosič čipu, i když někteří vývojáři použil jako primární procesoru kvůli známosti. 1994 víceprocesorových Sega Saturn konzola používá 68000 jako zvukový koprocesoru (stejně jako Mega řídit / Genesis využívá Z80 jako ko-procesor pro zvuk a / nebo jiné účely).

Určité arkádové hry (například oceli Gunner a další založené na Namco System 2 ) použít duální konfiguraci 68000 CPU, a systémy s trojitým konfiguraci 68000 CPU také existují (například Galaxy Force a další na základě Sega Y rady), spolu s konfigurace quad 68000 CPU, který byl používán Jaleco (jedna 68000 pro zvuk má nižší taktovací frekvencí v porovnání s ostatními 68000 CPU) pro hry, jako je Big Run a Cisco Heat ; pátá 68000 (v jiném rychlosti hodin v porovnání s ostatními 68000 CPU) byla dodatečně použita v Jaleco arkáda Wild Pilot pro I / O zpracování.

68000 také viděl velký úspěch jako vložený řadič. Již v roce 1981, laserové tiskárny , jako je IMAGEN Otisk-10 byl řízen vnějšími deskami vybavených 68000. První HP LaserJet -introduced v roce 1984, přišel s vestavěnými 8 MHz 68000. Jiné výrobců tiskáren přijal 68000, včetně Apple s jeho zavedením LaserWriter v roce 1985, první PostScript laserovou tiskárnu. 68000 pokračoval být široce používán v tiskárnách po zbytek roku 1980, přetrvávající až do 1990 v low-end tiskáren.

68000 také viděl úspěch v oblasti průmyslových řídicích systémů. Mezi systémy příjemci mající 68000 nebo derivát jako jejich mikroprocesor byly rodiny programovatelných automatů (PLC) vyrobené Allen-Bradley , Texas Instruments a následně, po pořízení tohoto rozdělení TI, od firmy Siemens . Uživatelé takových systémů nepřijímají produktu zastaralost ve stejné výši jako u domácích uživatelů, a to je zcela pravděpodobné, že navzdory tomu, že bylo instalováno před více než 20 lety, mnoho regulátorů 68000 bázi bude pokračovat ve spolehlivém provozu až do 21. století.

V řadě digitálních osciloskopů z 80. let, 68000 byl použit jako zpracovatel displeje průběh; Některé modely včetně LeCroy 9400 / 9400A také použít 68000 jako průběh matematický procesor (včetně sčítání, odčítání, násobení a dělení dvou průběhů / Reference / průběhů pamětí), a některé digitální osciloskopy s použitím 68000 (včetně 9400 / 9400A ) může také provádět FFT funkce na křivky.

Tyto 683XX mikrořadiče, založené na 68000 architektuře, se používají v síťových a telekomunikačních zařízení, televizní set-top boxy, laboratorní a lékařské přístroje, a dokonce i kapesních kalkulaček. MC68302 a jeho deriváty se používají v mnoha telecom produkty od Cisco, 3Com, stoupat, Marconi, Kyklady a další. Minulé modely Palm PDA a Handspring Visor používá DragonBall , derivát 68000. AlphaSmart používá rodinu Dragonball novějších verzích svých přenosných textových procesorů. Texas Instruments využívá 68000 ve svých high-end grafických kalkulaček, je TI-89 a TI-92 série a Voyage 200 . Brzy verze nich používá specializovaný mikroprocesor se statickým 68EC000 jádra; novější verze použít standardní MC68SEC000 procesor.

Modifikovaná verze 68000 tvořil základ IBM XT / 370 hardware emulátoru System 370 procesoru.

Architektura

Motorola 68000 registry
3 1 ... 2 3 ... 1 5 ... 0 7 ... 0 0 (Bitová pozice)
datové registry
D0 Data 0
D1 Data 1
D2 Data 2
D3 Data 3
D4 Data 4
D5 Data 5
D6 Data 6
D7 Data 7
Adresa registry
  A0                           adresa 0
  A1                           Adresa 1
  A2                           Adresa 2
  A3                           adresa 3
  A4                           adresa 4
  A5                           adresa 5
  A6                           adresa 6
ukazatele Stack
  A7 / USP                        Stack Pointer (uživatel)
  A7' / SSP                        Stack Pointer (garant)
programový čítač
  PC                           Program Counter
Stavový kód Register
  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

adresovou sběrnici

68000 má 24-bitovou externí adresovou sběrnici a dvě bajt-select signály „vyměnit“ A0. Tyto linky 24 se proto může adresovat 16 MB fyzické paměti s rozlišením byte. Skladování adresa a výpočet používá interně 32 bitů; nicméně, 8 high-order adresových bitů jsou ignorovány kvůli fyzickému nedostatku pinů zařízení. To umožňuje spustit software napsaný pro logicky rovnou 32bitového adresního prostoru , při přístupu pouze 24-bitový fyzický adresní prostor. Motorola záměr s vnitřním adresní prostor 32-bit byl dopředu kompatibilitu, takže je možné zapsat 68000 software, který by plně využít pozdějších 32bitové implementacích sady 68000 instrukcí.

To však nebrání tomu, aby programátorům od psaní dopředu nekompatibilní software. „24-bit“ software, který odloží vrchní adresní bajt, nebo používat jej pro jiné účely než účely adresování, může selhat na 32-bit 68000 implementací. Například, brzy (pre-7.0) verze Apple Mac OS používají vysoké bajt mistrovských ukazatelů paměti bloku držet vlajky, jako jsou zamčené a purgeable . Novější verze OS přesunul vlajky na blízkém místě a Apple začala dodávat počítače, který měl „ 32-bit čisté “ ROM začínat s vydáním z roku 1989 Mac IIci.

68000 rodina uloží vícebajtové celá čísla v paměti v big-endian pořadí.

vnitřní registry

CPU má osm 32bitových univerzálních datových registrů (D0-D7) a osm adresových registrů (A0-A7). Poslední adresa registru je ukazatel zásobníku a montéři přijmout popisku SP jako ekvivalent k A7. To byl dobrý počet registrů v té době v mnoha ohledech. Bylo to dost malý, aby umožnil 68000 rychle reagovat na přerušení (a to i v nejhorším případě, kdy všichni 8 datových registrů D0-D7 a 7 adresa registrů A0-A6 potřeboval být uložen, 15 registrů celkem), a přesto dostatečně velká, aby aby většina výpočtů rychle, protože by mohlo být provedeno zcela uvnitř procesoru bez toho, aby žádné dílčí výsledky v paměti. (Všimněte si, že výjimka rutina v režimu Supervisor může také uložit uživatel ukazatel zásobníku A7, což by celkem 8 adresových registrů. Avšak dvojí ukazatel zásobníku (A7 a supervizor režim A7' ) Design 68000 dělá to obvykle zbytečné, s výjimkou když je přepínač úkol provést v multitasking systému.)

Mít dva typy registrů bylo mírně nepříjemné občas, ale není těžké používat v praxi. Údajně to dovolilo návrháři CPU k dosažení vyššího stupně podobnosti, pomocí pomocného prováděcí jednotku pro registry adres.

stavový registr

68000 srovnávání, aritmetické a logické operace stanovené bitové příznaky ve stavovém registru zaznamenávat své výsledky za použití později podmíněných skoků. Bitové příznaky jsou "nulová" (Z), "přenášení" (C), "přetečení" (V), "prodloužení" (X), a "negativní" (N). Dále jen „rozšíření“ (X) flag si zaslouží zvláštní zmínku, protože je oddělen od vlajky carry . To umožňuje navíc trochu z aritmetiky, logiky a operací směny, které mají být odděleny od carry pro tok-of-ovládání a propojení.

instrukční sada

Konstruktéři se pokusili učinit assembleru kolmý . To znamená, že instrukce jsou rozděleny do operací a způsobů adresy , a téměř všechny druhy adres jsou k dispozici pro téměř všechny pokyny. Existuje 56 pokyny a minimální velikost pokyn 16 bitů. Mnoho instrukce a adresování režimy jsou již zahrnout další adresy nebo režimu bitů.

hladiny Privilege

CPU, a později i celá rodina, implementuje dvě úrovně oprávnění. Uživatelský režim umožňuje přístup ke všemu, kromě privilegovaných instrukcí, jako jsou ovládací prvky přerušení úrovně. Supervisor privilegium umožňuje přístup ke všemu. Přerušení vždy stává dohledu. Orgán dohledu bit je uložen ve stavovém registru, a je viditelný pro uživatelské programy.

Výhodou tohoto systému je, že úroveň dohledu má samostatný ukazatel zásobníku. To umožňuje multitasking systém používat velmi malé hromádky pro úkoly, protože konstruktéři nemají alokovat paměť potřebnou k držení stohu rámy maximální stack-up přerušení.

přerušení

CPU rozpozná sedm přerušení úrovně. Úrovně 1 až 5 jsou striktně přednost. To znamená, že s vyšším číslem přerušení můžete vždy přerušit nižší číslované přerušení. Ve stavovém registru, privilegovaná instrukce dovoluje nastavit aktuální minimální úroveň přerušení, blokování nižší nebo stejnou prioritu přerušení. Například, pokud je hladina přerušení ve stavovém registru je nastavena na hodnotu 3, vyšší úrovně od 4-7 může způsobit výjimku. Úroveň 7 je na úrovni spuštěno NMI (NMI). Úroveň 1 může být přerušena jakýmkoli vyšší úrovni. Úroveň 0 znamená bez přerušení. Hladina je uložen ve stavovém registru, a je viditelný na programy na úrovni uživatele.

Hardwarové přerušení jsou signalizovány na CPU při použití tří vstupů, které kódují nejvyšší čekající prioritu přerušení. Samostatnou Encoder je obvykle nutné kódovat přerušení, i když pro systémy, které nevyžadují více než tři hardwarová přerušení je možné připojit signály přerušení přímo na kódovaných vstupů za cenu dodatečného složitosti softwaru. Regulátor přerušení může být tak jednoduché, jako 74LS148 prioritní kodéru , nebo může být součástí obvodového čipu VLSI, jako je například MC68901 Multi-Function Peripheral (použité v Atari ST řady počítačů a Sharp Sharp X68000 ), který také poskytoval UART , časovač, a paralelní i / O.

Dále jen „výjimka stůl“ ( vektor přerušení tabulky vektor přerušení adresy) se nastaví na adresách 0 až 1023, což umožňuje 256 32-bitových vektorů. První vektor (RESET) se skládá ze dvou vektorů, a to počáteční zásobníku adresu a výchozí kódu adresu. Vektory 3 až 15 se používají hlásit různé chyby: chyba sběrnice , chyba adresa, neplatné instrukce , nula dělení , CHK a CHK2 Vektor, privilegium narušení (blokování zvýšení úrovně oprávnění ), a některé vyhrazené vektorů, které se staly čára 1010 emulátoru, linka 1111 emulátoru a hardware bod zlomu . Vektor 24 spustí skutečné přerušení: falešný přerušení (žádný hardware potvrzení), a úroveň 1 prostřednictvím úrovni 7 autovectors, pak 16 TRAP vektorů přes některé více vyhrazených vektorů, uživatel definováno vektorů.

Vzhledem k tomu, minimálně počáteční kód adresy vektor musí být vždy platné k resetu, systém běžně zahrnuty některé energeticky nezávislou paměť (např ROM ) začíná na adrese nula obsahovat vektorů a bootstrap kód. Nicméně, pro všeobecné použití systému, je žádoucí, aby operační systém, aby bylo možné změnit vektorů za běhu. To se často provádí buď ukázal vektorů v ROM ke skoku tabulky v paměti RAM , nebo prostřednictvím využití přepínání bank dovolit ROM, které mají být nahrazeny paměti za běhu.

68000 nesplňuje požadavky Popek a Goldberg virtualization pro plnou virtualizaci procesoru, protože má jedinou neoprávněnému instrukce „Přechod od SR“, který umožňuje uživateli režimu software read-only přístup k malým množstvím privilegovaného státu.

68000 je také schopen snadno podporu virtuální paměti , která vyžaduje schopnost pasti a zotavit se z neúspěšného přístupu do paměti. 68000 má poskytnout výjimku chyby sběrnice, která může být použita k pasti, ale to neukládá dostatek procesoru stav obnovit porušené instrukce, jakmile operační systém ovládal výjimku. Několik společností se podaří přimět 68000 bázi Unix s virtuální paměti, který pracoval pomocí dvou 68000 čipy běží paralelně na různých zrušených hodin. Když se „vedoucí“ 68000 setkal špatný přístup do paměti, další hardware by přerušit „hlavní“ 68000, aby mu zabránil také setkání s špatný přístup k paměti. Toto přerušení rutina by zvládnout paměťové funkce virtuální a restartovat „vedoucí“ 68000 ve správném stavu, aby i nadále správně synchronizované operace, kdy „hlavní“ 68000 vrátil z přerušení.

Tyto problémy byly opraveny v dalším zásadní revizi 68k architektuře, s vydáním MC68010. The Bus Error a Address Error výjimky tlačit velké množství vnitřní stav na supervizora stohu, aby se usnadnilo obnovu a přechod od SR výuky byla provedena privilegované. Nový neprivilegované „MOVE z CCR“ instrukce je určena pro použití na svém místě pomocí uživatelského režimu softwaru; operační systém může past a emulovat uživatelského režimu pohybovat z SR instrukce, pokud je to žádoucí.

Instrukční sada detaily

Standardní adresování režimy jsou:

  • registrovat přímý
    • datový registr, například „D0“
    • adresový registr, například „A0“
  • registrovat nepřímé
    • Jednoduchá adresa, například (A0)
    • Řešit s post-přírůstek, např (A0) +
    • Adresa s pre-úbytku, například - (A0)
    • Adresa s 16bitové kompenzovat, například 16 (A0)
    • Registrovat nepřímé s indexem rejstříku a 8-bitové ofsetového např 8 (A0, D0) nebo 8 (A0, A1)
    Všimněte si, že pro (A0) + a - (A0), skutečné zvýšení nebo snížení hodnoty je závislá na velikosti operandu: v krocích po přístupové byte adresového registru 1, slova o 2 a dlouhá 4.
  • PC (program counter) relativní s posunem
    • Relativní 16bitové znaménkem, například 16 (PC). Tento režim byl velmi užitečný pro pozici nezávislé kódu.
    • Příbuzný s 8-bitů se znaménkem s indexem, např 8 (PC, D2)
  • Absolutní umístění v paměti
    • Buď číslo, například „$ 4000“, nebo symbolický název přeložený do assembleru
    • Většina 68000 montéry používá symbol „$“ pro hexadecimální namísto „0x“ nebo koncové H.
    • Tam bylo 16 a 32bitové verze tohoto adresování režimu
  • okamžitý režim
    • Data uložená v instrukci, například „# 400“
  • Quick bezprostřední mód
    • 3-bit znaménka (nebo 8-bitové s moveq) s hodnotou uloženou v opcode
    • V addq a subq, 0 je ekvivalentní 8
    • např moveq # 0, d0 byl rychlejší než clr.l d0 (ačkoli oba dělali d0 rovna 0)

Plus: přístup do stavového registru , a v pozdějších modelů, ostatní speciálními registry.

Většina instrukce mají dot-písmeno přípony, která umožňuje operace nastat na 8-bitových bytů ( ".B "), 16-bitová slova (" .w ") a 32-bitové touží (" .l").

Stejně jako mnoho jiných CPU své doby načasování cyklu některých instrukcí měnit v závislosti na zdrojovém operandu (y). Například, bez znaménka instrukce násobení trvá (38 + 2n) hodinových cyklů na dokončení, kde ‚n‘ je rovno počtu bitů nastavených v operandu. Chcete-li vytvořit funkci, která vzala počet Pevný cyklus vyžaduje přidání kódu navíc po násobení instrukcí. To by obvykle spotřebuje další cykly pro každý bit, který nebyl nastaven v původní násobení operandu.

Většina pokyny jsou dvojčlenný , to znamená, že tato činnost má zdroj a cíl a cíl se změnil. Pozoruhodné instrukce byly:

  • Aritmetika: ADD, SUB, Mulu (unsigned multiply), MULS (podepsané násobit), divu, divs, NEG (aditivní negace) a CMP (jakési srovnání provedeno odečtením argumenty a nastavení bitů stavu, ale neměl uchovávat výsledek)
  • BCD aritmetika: ABCD a SBCD
  • Logic: EOR (výhradní nebo), AND, NOT (logický ne), OR (včetně nebo)
  • Shifting: (logické, tedy pravé posuny dát nulu nejvýznamnějšího bitu) LSL, LSR ( aritmetické směny , tedy označení, prodloužit nejvíce významný bit) ASR, ASL, (otočí přes rozšíření a ne) ROXL, ROXR, ROL, ROR
  • Bit test a manipulace v paměti: BSET (až 1), BCLR (na 0 ° C), BCHG (invertní bit) a BTST (nastavit nulový bit, jestliže testovaný bit je 0)
  • Multi- kontrola: TAS, TSL , provedl nedělitelný provozu sběrnice, umožňující semafory , které mají být použity k synchronizaci několik procesorů sdílí jednu paměť
  • Tok řízení: JMP (skok), JSR (skok na podprogram), BSR (relativní adresu skok do podprogramu), RTS (návrat z podprogramu ), RTE (návrat z výjimky , tedy přerušení), TRAP (vyvolat výjimku software podobný softwarového přerušení), CHK (podmíněný software výjimka)
  • Obor: Skrytá (kde „cc“ upřesnil jeden z 16 testů Stav kódů v stavového registru: rovno, větší než, menší než, nést, a většina kombinací a logická inverze, dostupné ze stavového registru).
  • Odečíst-and-branch: dbcc (kde „cc“ Byl jako u instrukce větvení), který sníží D-registrovat a rozvětvených do místa určení za předpokladu, že stav byl stále platí, a registr nebyl snížen na hodnotu -1. Toto použití -1 namísto 0 jako hodnotu ukončující umožnila snadné kódování smyček, které měly dělat nic, pokud počet 0 začít, aniž by bylo nutné dodatečné kontroly před vstupem do smyčky. To také usnadněno vnoření dbcc.

68EC000

řadič Motorola 68EC000

68EC000 je low-cost verze A 68000, určený pro embedded aplikace řadiče. 68EC000 může mít buď 8-bit nebo 16-bitovou datovou sběrnici , lze přepnout na reset.

Procesory jsou k dispozici v různých rychlostech, včetně 8 a 16  MHz konfigurací, produkovat 2,100 a 4,376  Dhrystones každý. Tyto procesory nemají matematický koprocesor a je obtížné realizovat FPU koprocesor ( MC68881 / 2 ) s jedním, protože řada EC postrádá potřebné instrukce koprocesor.

68EC000 byl používán jako správce v mnoha zvukových aplikací, včetně Ensoniq hudebních nástrojů a zvukové karty, kde byla součástí MIDI syntezátoru. Na zvukových deskách Ensoniq regulátor poskytuje několik výhod oproti konkurenci bez CPU na palubě. Procesor nechá deska musí být nakonfigurován tak, aby vykonávat různé zvukové úkoly, například MPU-401 MIDI syntézu nebo MT-32 emulace, a to bez použití TSR program. Tato vylepšená kompatibilita softwaru, snižuje zatížení procesoru, a eliminovat využití systémové paměti hostitele.

Motorola 68EC000 jádro bylo později použit v m68k bázi dragonball procesorů od společnosti Motorola / Freescale .

To také byl použit jako zvukový řadič v Sega Saturn herní konzole a jako regulátor pro HP JetDirect Ethernet řadič desky pro střední-1990 LaserJet tiskárny.

Příklad kódu

68000 assembler kód níže je pro podprogram s názvem strtolower, který kopíruje nulový ukončovací řetězec 8bitové znaky do cílového řetězce, přestavovat všechna písmena 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 stanovuje rámec volání pomocí zaregistrovat A6 jako ukazatel rámu. Tento druh konvence volání podporuje řetězit a rekurzivního kódu a obvykle se používají jazyky, jako je C a C ++ . Podprogram pak načte parametry, které jí ( srca dst) od stohu. To pak smyčky, čtení ASCII znak (jeden bajt) z srcřetězce, ověření, zda se jedná o písmeno abecedy, a pokud ano, přeměnil ho na malými písmeny znak, pak psaní znak do dstřetězce. Nakonec se zkontroluje, zda je charakter byl znak null ; Pokud tomu tak není, opakuje smyčku, jinak se obnoví předchozí zásobníku rám (a A6 registr) a návrat. Všimněte si, že řetězec ukazatele (registruje A0 a A1) je auto-zvýšen v každé iteraci smyčky.

Na rozdíl od toho je kód níže je pro funkci stand-alone, a to i na nejvíce omezující verzi AMS pro řady TI-89 kalkulaček, být kernel-nezávislý, s žádné hodnoty vzhlédl tabulek, souborů nebo knihoven, kdy vykonávají, žádná systémová volání, žádné zpracování výjimek, minimální registry, které mají být použity, ani že je třeba uložit žádné. To platí i pro historické Julian se datuje od 1. března 1 inzerátu, nebo pro Gregorian ty. 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é na svých odpovídajících místech:

;
;  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)
;
     move.l DATE,d0
     move.l d0,d1
;
; Apply step 1 - Lachman's method of congruence
     andi.l #$f00,d0
     divu #100,d0
     addi.w #193,d0
     andi.l #$ff,d0
     divu #100,d0 ; d0 contains the month index in the upper word
;
; Apply step 2 - Using spqr as the Julian year of the last leap day
     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 + mi + 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 + mi + 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 též

Reference

Další čtení

externí odkazy