Motorola 68000 - Motorola 68000

Motorola 68000 mimarisi
tasarımcı Motorola'nın
bitler 16/32-bit
tanıtıldı 1979 ; 42 yıl önce ( 1979 )
Tasarım CISC
Dallanma Koşul kodu
endianness Büyük
Kayıtlar
Motorola 68000 işlemci
Genel bilgi
başlatıldı 1979
Tarafından tasarlandı Motorola'nın
Verim
veri genişliği 16 bit
Adres genişliği 24 bit
Mimari ve sınıflandırma
Komut seti Motorola 68000 serisi
Fiziksel Özellikler
transistörler
Paket(ler)
Tarih
Varis Motorola 68010

Motorola 68000 ( altmış sekiz bin ; da adlandırılan m68k , Motorola 68k , altmış sekiz-kay ) 16/32-bit olan karmaşık komut setli bilgisayar (CISC) mikroişlemci tarafından 1979 yılında tanıtılan, Motorola Semiconductor Ürünleri Sektörü.

Tasarım , 32-bit kayıtlar ve 16-bit dahili veri yolu ile 32-bit komut seti uygular . Adres yolu 24 bit ve kullanmayan bellek segmentasyon için programa kolay hale. Dahili olarak, 16 bitlik bir veri aritmetik mantık birimi (ALU) ve çoğunlukla adresler için kullanılan iki adet 16 bitlik ALU daha kullanır ve 16 bitlik bir harici veri yoluna sahiptir . Bu nedenle Motorola ona 16/32 bit işlemci adını verdi.

32-bit komut setine sahip ve o dönem için nispeten yüksek hızlarda çalışan, yaygın olarak bulunan ilk işlemcilerden biri olan 68k, 1980'ler boyunca popüler bir tasarımdı. Bu yaygın yeni nesil kullanıldı kişisel bilgisayarlar ile grafik kullanıcı arayüzleri de dahil olmak üzere, Macintosh , Amiga , Atari ST ve X68000 . 1988 Mega Drive konsolu da 68000 tarafından desteklenmektedir.

68k yakında daha fazla aile üyesiyle genişletildi ve büyüyen Motorola 68000 serisinin bir parçası olarak tam 32-bit ALU'lar uygulandı . Orijinal 68k, 16 bit genişliğinde bir harici veri yolu ile sınırlı olmasına rağmen , genellikle hattın geri kalanıyla ileriye dönük yazılım uyumludur .

1979'da yapılan ön sürüm XC68000 yongası
Motorola 68000'in Ölümü

42 yıllık üretimin ardından 68000 mimarisi halen kullanılmaktadır.

Tarih

Motorola MC68000 ( kurşunsuz çip taşıyıcı (CLCC) paketi)
Motorola MC68000 ( plastik kurşunlu çip taşıyıcı (PLCC) paketi)

Motorola'nın yaygın olarak üretilen ilk CPU'su Motorola 6800 idi . Yetenekli bir tasarım olmasına rağmen, Zilog Z80 gibi daha güçlü tasarımlar ve MOS Technology 6502 (MOS 6502) gibi daha ucuz tasarımlar tarafından gölgede bırakıldı . 6800'ün satış beklentileri azaldıkça, Motorola onun yerini alacak yeni bir tasarıma başladı. Bu, 1976'da başlatılan Silikon üzerine Motorola Gelişmiş Bilgisayar Sistemi veya MACSS projesi oldu.

MACSS , 6800 ile geriye dönük uyumluluk olmadan tamamen yeni bir mimari geliştirmeyi amaçladı. Sonuç olarak, mevcut 6800 çevre aygıtları için bir veri yolu protokolü uyumluluk modunu koruyor ve 8 bit veri yoluna sahip bir sürüm üretildi. Bununla birlikte, tasarımcılar esas olarak geleceğe veya ileriye dönük uyumluluğa odaklandılar , bu da 68000 tasarımına daha sonraki 32-bit komut seti mimarilerine (ISA'lar) karşı bir başlangıç ​​sağlıyor . Örneğin, CPU kayıtları 32 bit genişliğindedir, ancak işlemcinin kendisinde birkaç bağımsız yapı aynı anda 32 bit üzerinde çalışır. MACSS ekibi , benzer şekilde mikrokod tabanlı olan PDP-11 ve VAX sistemleri gibi mini bilgisayar işlemci tasarımının etkisinden büyük ölçüde yararlandı .

1970'lerin ortalarında, 8-bit mikroişlemci üreticileri 16-bit nesli tanıtmak için yarıştı. National Semiconductor onun ilk olmuştu IMP-16 ve AKPM 1973-1975 yılında işlemciler, ancak bu hız ile sorunları vardı. Intel onların ileri 16/32 bit üzerinde çalışmış Intel iAPX 432 1975 yılından bu yana (takma ad 8800) ve bunların Intel 8086 1976 yılından bu yana (1978 yılında başlatılmış ancak içinde 8088 hemen hemen aynı şeklinde yaygınlaştı IBM PC birkaç yıl sonra). 16-bit alana geç gelmek, yeni işlemciye daha fazla transistör (8086'da 20.000 aktife karşılık kabaca 40.000 aktif), 32-bit makro komutlar ve beğenilen genel kullanım kolaylığı sağlıyor.

Orijinal MC68000'de El Sıkışmalı edildi imal bir kullanarak HMOs 3.5 ile işlem  um özelliği boyutu. Resmi olarak Eylül 1979'da tanıtılan ilk numuneler Şubat 1980'de piyasaya sürüldü ve üretim çipleri Kasım ayında tezgahta mevcuttu. İlk hız dereceleri 4, 6 ve 8  MHz'dir . 1981'de 10 MHz'lik çipler ve Haziran 1982'de 12.5 MHz'lik çipler kullanıma sunuldu. Orijinal HMOS çipinin en hızlı versiyonu olan MC68000'in 16.67 MHz "12F" versiyonu 1980'lerin sonlarına kadar üretilmedi.

IBM, IBM PC için 68000'i düşündü, ancak 68000 hazır olmadığı için Intel 8088'i seçti ; Walden C. Rhines , böylece "Motorola, üstün teknolojisi ile son 50 yılın en önemli tasarım yarışmasını kaybetti" diye yazdı. (IBM Instruments kısaca 68000 tabanlı satılan IBM System 9000 68k komut kümesi özellikle Unix uygulamak için uygundur. Laboratuvar bilgisayar sistemleri) ve 68000 ve ardılları Unix tabanlı baskın CPU'lar haline iş istasyonları dahil Güneş iş istasyonları ve Apollo / Etki alanı iş istasyonları. 68000 ayrıca Apple Lisa , Macintosh , Amiga ve Atari ST gibi kitlesel pazar bilgisayarları için de kullanılır . 68000, Microsoft Xenix sistemlerinde ve aynı zamanda eski bir NetWare Unix tabanlı Sunucuda kullanılır. 68000, orijinal Apple Inc. LaserWriter ve HP LaserJet dahil olmak üzere ilk nesil masaüstü lazer yazıcılarda kullanılır .

1981'de Motorola , eğitim ve öğretim amaçlı tek kartlı bir bilgisayar olan ve 68000'in kendisine ek olarak bellek, G/Ç aygıtları, programlanabilir zamanlayıcı ve özel devreler için kablo sarma alanı içeren Motorola 68000 Eğitim Bilgisayar Kartı'nı tanıttı . Kurul, 1990'ların başına kadar ABD kolejlerinde montaj programlamayı öğrenmek için bir araç olarak kullanılmaya devam etti.

1982'de 68000, sanal belleği desteklemek ve Popek ve Goldberg sanallaştırma gereksinimlerine uymak için komut seti mimarisinde (ISA) küçük bir güncelleme aldı . Güncellenen çipin adı 68010 . Ayrıca, küçük döngüleri hızlandıran ve aynı saat hızlarında genel performansı yaklaşık %10 artıran yeni bir "döngü modu" ekler. Adres yolunun 31 bitini açığa çıkaran bir başka genişletilmiş versiyon da 68012 olarak küçük miktarlarda üretildi .

Düşük maliyetli sistemleri ve daha küçük bellek boyutlarına sahip kontrol uygulamalarını desteklemek için Motorola , yine 1982'de 8-bit uyumlu MC68008'i piyasaya sürdü . Bu, 8-bit veri yoluna ve daha küçük (20-bit) adres yoluna sahip bir 68000'dir . 1982'den sonra Motorola, 68020 ve 88000 projelerine daha fazla ilgi gösterdi .

İkinci kaynak

Hitachi HD68000
Thomson TS68000

Diğer birkaç şirket HMOS 68000'in ikinci kaynak üreticileriydi. Bunlar arasında 12,5 MHz sürümü için özellik boyutunu 2,7 µm'ye indiren Hitachi (HD68000), Mostek (MK68000), Rockwell (R68000), Signetics (SCN68000), Thomson vardı. / SGS-Thomson (başlangıçta EF68000 ve sonrası TS68000) ve Toshiba (TMP68000). Toshiba ayrıca CMOS 68HC000'in (TMP68HC000) ikinci kaynak üreticisiydi.

68000'in şifreli çeşitleri, Hitachi FD1089 ve FD1094 olmak üzere, işlem kodları ve işlem kodu verileri için şifre çözme anahtarlarını pil destekli bellekte saklar ve korsanlığı ve yasadışı kaçak oyunları önlemek için Sistem 16 dahil olmak üzere belirli Sega arcade sistemlerinde kullanıldı .

CMOS sürümleri

Motorola MC68HC000LC8

68000'in ilk CMOS versiyonu olan 68HC000, Hitachi tarafından tasarlandı ve 1985'te ortak olarak tanıtıldı. Motorola'nın versiyonuna MC68HC000, Hitachi'nin versiyonuna ise HD68HC000 adı verildi. 68HC000, 8–20 MHz hızları sunar. CMOS devresini kullanmak dışında, HMOS MC68000 ile aynı şekilde davrandı, ancak CMOS'a yapılan değişiklik güç tüketimini büyük ölçüde azalttı. Orijinal HMOS MC68000 , saat hızından bağımsız olarak 25 °C ortam sıcaklığında  yaklaşık 1,35  watt tüketirken, MC68HC000 8 MHz'de yalnızca 0,13 watt ve 20 MHz'de 0,38 watt tüketiyordu. (CMOS devrelerinden farklı olarak, HMOS boştayken hala güç çeker, bu nedenle güç tüketimi saat hızına göre çok az değişir.) Apple, Macintosh Portable'da kullanım için 68HC000'i seçti .

Motorola, MC68008'i 1990'da MC68HC001 ile değiştirdi. Bu çip birçok açıdan 68HC000'e benziyor, ancak veri yolu, sıfırlama sırasındaki bir giriş pininin değerine bağlı olarak 16 bit veya 8 bit modunda çalışabilir. Böylece, 68008 gibi, daha ucuz 8 bit bellekli sistemlerde kullanılabilir.

68000'in sonraki evrimi, daha modern gömülü kontrol uygulamalarına ve çip üzerindeki çevre birimlerine odaklandı . 68EC000 çip ve SCM68000 çekirdek kullanıcı modunda çalıştırın önceki 68000 CPU ile uyumlu 68EC000 ve 68SEC000 sadece 68000 CPU% 100 nesne kodu yapma, kullanıcı modu programlarından SR talimat Hareket'i M6800 periferik otobüsü kaldırmak ve dahil değildir. Süpervizör Modunda çalıştırıldığında hiçbir fark yoktur. 1996'da Motorola, bağımsız çekirdeği tamamen statik devre ile güncelledi ve düşük güç modunda sadece 2 µW çekerek  buna MC68SEC000 adını verdi.

Motorola, HMOS MC68000 ve MC68008'in üretimini 1996'da durdurdu, ancak yan şirketi Freescale Semiconductor , MC68HC000, MC68HC001, MC68EC000 ve MC68SEC000'in yanı sıra MC68302 ve MC68306 mikro denetleyicilerini ve DragonBall ailesinin sonraki sürümlerini üretmeye devam ediyordu . 68000'in mimari torunları, 680x0 , CPU32 ve Coldfire aileleri de hala üretimdeydi. Daha yakın zamanlarda, Sendai fabrika kapatma ile, tüm 68HC000, 68020, 68030 ve 68882 parçalarının üretimi durduruldu ve yalnızca 68SEC000 üretimde kaldı.

Mikrodenetleyici çekirdeği olarak

"Gerçek" 32 bit mikroişlemciler tarafından başarıldığından, 68000 birçok mikro denetleyicinin çekirdeği olarak kullanılır . 1989'da Motorola, MC68302 iletişim işlemcisini tanıttı.

Uygulamalar

Bir arcade oyunu PCB'sinde kullanılan iki Hitachi 68HC000 CPU

68000 ilk kez piyasaya sunulduğunda, WICAT 150, erken Alpha Microsystems bilgisayarları, Sage II/IV , Tandy 6000/ TRS-80 Model 16 ve Fortune 32:16 gibi çok kullanıcılı mikrobilgisayarlar dahil olmak üzere yüksek fiyatlı sistemlerde kullanıldı ; Tek kullanıcılı iş istasyonları gibi Hewlett-Packard 'ın HP 9000 Serisi 200 sistemleri, ilk Apollo / Alan sistemleri, Sun Microsystems ' Sun-1 ve Corvus Konsept ; ve grafik terminalleri gibi Digital Equipment Corporation, 'ın VAXstation 100 ve Silicon Graphics ' IRIS 1000 1200. Unix sistemleri hızla 1980'ler boyunca bu pazarda popüler kalmıştır 68k hattının daha yetenekli sonraki nesillere taşınmıştır.

1980'lerin ortalarına gelindiğinde, düşen üretim maliyeti , 68000'i , Apple Lisa ve Macintosh ile başlayarak ve ardından Commodore Amiga , Atari ST ve Sharp X68000 ile kişisel ve ev bilgisayarlarında kullanım için uygun hale getirdi . Öte yandan, Sinclair QL mikrobilgisayar, ICL One Per Desk iş terminali gibi türevleriyle birlikte 68008'in ticari açıdan en önemli kullanımıydı . Helix Systems (Missouri, Amerika Birleşik Devletleri'nde) SWTPC SS-50 veriyoluna , SS-64'e bir uzantı tasarladı ve 68008 işlemci etrafında inşa edilmiş sistemler üretti.

RISC ve x86'nın benimsenmesi, masaüstü/iş istasyonu CPU'su olarak 68000 serisinin yerini alırken, işlemci gömülü uygulamalarda önemli bir kullanım alanı buldu . 1990'ların başında, parça başına 30 USD'den daha düşük bir fiyata 68000 CPU satın alınabiliyordu  .

Video oyunu üreticileri 68000'i birçok atari oyununun ve ev oyun konsolunun bel kemiği olarak kullandılar : Atari'nin 1982'deki Food Fight oyunu , 68000 tabanlı ilk atari oyunlarından biriydi. Diğerleri dahil Sega 'nın Sistemi 16 , Capcom ' ın CP sistem ve CPS-2 ve SNK 'ın Neo Geo . 1980'lerin sonunda, 68000, Sega'nın Mega Drive/Genesis konsolu gibi ev oyun konsollarına ve ayrıca Mega CD eklentisine güç sağlamak için yeterince ucuzdu (Bir Mega CD sisteminde ikisi 68000 olmak üzere üç CPU vardır). 1993 çok işlemcili Atari Jaguar konsolu, bazı geliştiriciler aşinalık nedeniyle birincil işlemci olarak kullansa da, destek yongası olarak 68000 kullandı. 1994 çok işlemcili Sega Saturn konsolu, 68000'i bir ses yardımcı işlemcisi olarak kullandı (tıpkı Mega Drive/Genesis'in ses ve/veya başka amaçlar için bir yardımcı işlemci olarak Z80'i kullanması gibi). 1995'te 68000 , ana işlemcisi olarak Sega'nın Genesis Nomad'ı olan el tipi bir oyun konsolu haline getirdi .

Bazı atari oyunları ( Steel Gunner ve Namco System 2 tabanlı diğerleri gibi ) çift 68000 CPU yapılandırması kullanır ve üçlü 68000 CPU yapılandırmasına sahip sistemler de mevcuttur ( Galaxy Force ve Sega Y Board tabanlı diğerleri gibi ), Jaleco tarafından kullanılan dörtlü 68000 CPU yapılandırması (ses için bir 68000, diğer 68000 CPU'lara kıyasla daha düşük saat hızına sahiptir) Big Run ve Cisco Heat gibi oyunlar için ; Başka bir (diğer 68000 CPU farklı bir saat hızında) beşinci 68000 Jaleco bir oyun kullanılan vahşi Pilot için giriş / çıkış (I / O) işlem.

68000, yerleşik bir denetleyici olarak da büyük başarı elde etti. 1981'de Imagen Imprint-10 gibi lazer yazıcılar 68000 ile donatılmış harici kartlarla kontrol ediliyordu . 1984'te piyasaya sürülen ilk HP LaserJet , yerleşik 8 MHz 68000 ile geldi. Diğer yazıcı üreticileri 68000'i benimsedi, Apple'ın 1985'te ilk PostScript lazer yazıcı olan LaserWriter'ı piyasaya sürmesi dahil . 68000, 1980'lerin geri kalanında yazıcılarda yaygın olarak kullanılmaya devam etti ve 1990'larda düşük kaliteli yazıcılarda varlığını sürdürdü.

68000, endüstriyel kontrol sistemleri alanında da başarı elde etti. Mikroişlemci olarak bir 68000 veya türevine sahip olmaktan yararlanan sistemler arasında, Allen-Bradley , Texas Instruments tarafından üretilen ve daha sonra TI'nin bu bölümünün Siemens tarafından satın alınmasının ardından üretilen programlanabilir mantık denetleyicileri (PLC'ler) aileleri vardı . Bu tür sistemlerin kullanıcıları, ürün eskimesini ev kullanıcıları ile aynı oranda kabul etmez ve 20 yıldan fazla bir süre önce kurulmuş olmasına rağmen, 68000 tabanlı birçok kontrol cihazının 21. yüzyıla kadar güvenilir hizmet vermeye devam etmesi tamamen muhtemeldir.

80'lerden kalma bir dizi dijital osiloskopta , 68000 bir dalga biçimi görüntü işlemcisi olarak kullanılmıştır; LeCroy 9400/9400A dahil bazı modeller 68000'i dalga biçimi matematik işlemcisi (toplama, çıkarma, çarpma ve iki dalga biçimi/referans/dalga biçimi belleğinin bölünmesi dahil) ve 68000'i kullanan bazı dijital osiloskoplar (9400/9400A dahil) olarak kullanır. ) ayrıca bir dalga biçiminde hızlı Fourier dönüşümü işlevlerini de gerçekleştirebilir .

683XX 68000 mimarisine dayanan mikroişlemcisi, ağ ve telekom ekipmanları, televizyon set üstü kutular, laboratuvar ve tıbbi aletler ve hatta el hesap makineleri kullanılmaktadır. MC68302 ve türevleri Cisco, 3com, Ascend, Marconi, Cyclades ve diğerlerinden birçok telekom ürününde kullanılmıştır. Geçmiş modellerinin Palmiye PDA'lar ve Handspring Visor kullanılan DragonBall , 68000'e bir türevi AlphaSmart onun taşınabilir kelime işlemciler sonraki sürümlerinde DRAGONBALL ailesini kullandı. Texas Instruments , 68000'i üst düzey grafik hesaplayıcılarında, TI-89 ve TI-92 serisinde ve Voyage 200'de kullandı .

68000'in değiştirilmiş bir versiyonu , System 370 işlemcisinin IBM XT/370 donanım öykünücüsünün temelini oluşturdu .

Mimari

Motorola 68000 kayıtları
3 1 ... 2 3 ... 1 5 ... 0 7 ... 0 0 (bit konumu)
Veri kayıtları
D0 Veri 0
D1 Veri 1
D2 Veri 2
D3 Veri 3
D4 Veri 4
D5 Veri 5
D6 Veri 6
D7 Veri 7
Adres kayıtları
  A0                           Adres 0
  A1                           adres 1
  A2                           Adres 2
  A3                           Adres 3
  A4                           Adres 4
  A5                           Adres 5
  A6                           Adres 6
Yığın işaretçileri
  A7 / USP                        Yığın İşaretçisi (kullanıcı)
  A7' / SSP                        Yığın İşaretçisi (gözetmen)
Program sayıcı
  bilgisayar                           Program sayıcı
Durum Kodu Kayıt
  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 (bit konumu)
  T S m 0 ben 0 0 0 x n Z V C CCR

Adres veri yolu

68000, 24 bitlik bir harici adres veriyoluna ve A0 "değiştirilmiş" iki bayt seçim sinyaline sahiptir. Bu 24 satır, bu nedenle, bayt çözünürlüğü ile 16 MB fiziksel belleğe hitap edebilir. Adres depolama ve hesaplama dahili olarak 32 bit kullanır; ancak, cihaz pinlerinin fiziksel eksikliği nedeniyle 8 yüksek dereceli adres biti yoksayılır. Bu, yalnızca 24 bitlik bir fiziksel adres alanına erişirken mantıksal olarak düz bir 32 bit adres alanı için yazılmış yazılımı çalıştırmasını sağlar . Motorola'nın dahili 32-bit adres alanı ile amacı, ileri uyumluluktu ve 68000 komut setinin daha sonraki 32-bit uygulamalarından tam olarak yararlanacak 68000 yazılımı yazmayı mümkün kıldı.

Ancak bu, programcıların uyumsuz yazılımları ileriye doğru yazmalarını engellemedi. Üst adres baytını atan veya adresleme dışındaki amaçlar için kullanan "24-bit" yazılım, 32-bit 68000 uygulamalarında başarısız olabilir. Örneğin, Apple'ın Mac OS'sinin erken (7.0 öncesi) sürümleri, kilitli ve temizlenebilir gibi bayrakları tutmak için yüksek bayt bellek bloğu ana işaretçilerini kullandı . İşletim sisteminin sonraki sürümleri, bayrakları yakındaki bir konuma taşıdı ve Apple , 1989 Mac IIci'nin piyasaya sürülmesinden itibaren " 32-bit temiz " ROM'lara sahip bilgisayarları göndermeye başladı.

68000 ailesi, çok baytlı tam sayıları bellekte büyük endian düzende saklar .

Dahili kayıtlar

İşlemci , sekiz 32-bit genel amaçlı veri sahip kayıtları (D0-D7) ve sekiz adres kayıt birimini (A0-A7). Son adres kaydı yığın işaretçisidir ve montajcılar SP etiketini A7'ye eşdeğer olarak kabul eder. Bu, o zamanlar birçok yönden iyi bir kayıt sayısıydı. 68000'in kesintilere hızlı bir şekilde yanıt vermesine izin verecek kadar küçüktü (en kötü durumda bile D0–D7 8 veri kaydının ve A0–A6 7 adres kaydının kaydedilmesi gerektiği, toplamda 15 kayıt) ve yine de yeterince büyüktü. çoğu hesaplamayı hızlı yapın, çünkü bunlar, herhangi bir kısmi sonucu bellekte tutmadan tamamen işlemci içinde yapılabilir. (Yönetici modundaki bir istisna rutininin, toplam 8 adres kaydı olacak olan kullanıcı yığın işaretçisi A7'yi de kaydedebileceğini unutmayın. Bununla birlikte, 68000'in ikili yığın işaretçisi (A7 ve gözetmen modu A7') tasarımı, aşağıdakiler dışında normalde bunu gereksiz kılar. çoklu görev sisteminde bir görev anahtarı gerçekleştirildiğinde.)

İki tür kaydediciye sahip olmak, aynı anda bir 32 bitlik adres ve bir 16 bitlik veri hesaplamasının yapılmasına izin verir. Bu, adresler ve veriler paralel olarak işlenebildiğinden komut yürütme süresinin azalmasına neden olur.

Durum kaydı

68000, 16 bitlik bir durum kaydına sahiptir. Üst 8 bit sistem baytıdır ve bunun değiştirilmesi ayrıcalıklıdır. Alttaki 8 bit, durum kodu kaydı (CCR) olarak da bilinen kullanıcı baytıdır ve bunun değiştirilmesi ayrıcalıklı değildir. 68000 karşılaştırma, aritmetik ve mantık işlemleri, daha sonraki koşullu atlamalarda kullanılmak üzere sonuçlarını kaydetmek için koşul kodlarını değiştirir. Koşul kodu bitleri "sıfır" (Z), "taşıma" (C), "taşma" (V), "uzatma" (X) ve "negatif" (N). "Genişlet" (X) bayrağı, taşıma bayrağından ayrı olduğu için özel olarak anılmayı hak ediyor . Bu, aritmetik, mantık ve kaydırma işlemlerinden elde edilen ekstra bitin, kontrol akışı ve bağlantı için taşımadan ayrılmasına izin verir.

Komut seti

Tasarımcılar, montaj dilini ortogonal hale getirmeye çalıştı . Yani komutlar işlemlere ve adres modlarına bölünmüştür ve hemen hemen tüm adres modları hemen hemen tüm talimatlar için kullanılabilir. 56 komut ve minimum komut boyutu 16 bittir. Birçok talimat ve adresleme modu, daha fazla adres veya mod biti içerecek şekilde daha uzundur.

Ayrıcalık seviyeleri

CPU ve daha sonra tüm aile, iki ayrıcalık düzeyi uygular. Kullanıcı modu, kesinti seviyesi kontrolleri gibi ayrıcalıklı talimatlar dışında her şeye erişim sağlar. Süpervizör ayrıcalığı her şeye erişim sağlar. Bir kesme her zaman denetleyici olur. Süpervizör biti durum kaydında saklanır ve kullanıcı programları tarafından görülebilir.

Bu sistemin bir avantajı, süpervizör seviyesinin ayrı bir yığın işaretçisine sahip olmasıdır. Bu, çok görevli bir sistemin görevler için çok küçük yığınlar kullanmasına izin verir , çünkü tasarımcılar maksimum kesme yığınının yığın çerçevelerini tutmak için gereken belleği tahsis etmek zorunda kalmazlar.

kesintiler

CPU yedi kesme seviyesini tanır . 1'den 5'e kadar olan seviyelere kesinlikle öncelik verilir. Yani, daha yüksek numaralı bir kesme, her zaman daha düşük numaralı bir kesmeyi kesebilir. Durum kaydında, ayrıcalıklı bir talimat, daha düşük veya eşit öncelikli kesmeleri engelleyerek mevcut minimum kesme seviyesinin ayarlanmasına izin verir. Örneğin, durum kaydındaki kesme seviyesi 3'e ayarlanırsa, 4'ten 7'ye kadar olan daha yüksek seviyeler bir istisnaya neden olabilir. Seviye 7, seviye tetiklemeli maskelenemeyen bir kesintidir (NMI). Seviye 1, herhangi bir üst seviye tarafından kesintiye uğratılabilir. Seviye 0, kesinti olmadığı anlamına gelir. Seviye, durum kaydında saklanır ve kullanıcı seviyesindeki programlar tarafından görülebilir.

Donanım kesintileri, bekleyen en yüksek kesinti önceliğini kodlayan üç giriş kullanılarak CPU'ya bildirilir. Kesintileri kodlamak için genellikle ayrı bir Kodlayıcı gerekir, ancak üçten fazla donanım kesintisi gerektirmeyen sistemler için kesinti sinyallerini daha fazla yazılım karmaşıklığı pahasına doğrudan kodlanmış girişlere bağlamak mümkündür. Kesinti denetleyicisi, 74LS148 öncelikli kodlayıcı kadar basit olabilir veya MC68901 Çok İşlevli Çevre Birimi ( Atari ST serisi bilgisayarlarda ve Sharp X68000'de kullanılır ) gibi Çok Büyük Ölçekli Entegrasyon (VLSI) çevre birimi yongasının parçası olabilir. ayrıca bir UART , zamanlayıcı ve paralel G/Ç sağladı .

"İstisna tablosu" ( kesme vektör tablosu kesinti vektör adresleri), 256 32-bit vektöre izin vererek 0 ila 1023 arasındaki adreslerde sabitlenmiştir. İlk vektör (RESET), başlangıç ​​yığın adresi ve başlangıç ​​kodu adresi olmak üzere iki vektörden oluşur. 3 ile 15 arasındaki vektörler çeşitli hataları bildirmek için kullanılır: veri yolu hatası , adres hatası, geçersiz talimat , sıfır bölme , CHK ve CHK2 vektörü, ayrıcalık ihlali ( ayrıcalık artışını engellemek için ) ve satır 1010 öykünücüsü, satır 1111 öykünücüsü haline gelen bazı ayrılmış vektörler , ve donanım kesme noktası . Vektör 24, gerçek kesintileri başlatır : sahte kesinti (donanım onayı yok) ve seviye 1 ila seviye 7 otovektörleri, ardından 16 TRAP vektörü, sonra biraz daha ayrılmış vektör, ardından kullanıcı tanımlı vektörler.

Başlangıç ​​kodu adres vektörünün en azından sıfırlamada her zaman geçerli olması gerektiğinden, sistemler genellikle vektörleri ve önyükleme kodunu içerecek şekilde sıfır adresinden başlayan bazı kalıcı bellek (örneğin ROM ) içeriyordu . Ancak genel amaçlı bir sistem için işletim sisteminin vektörleri çalışma zamanında değiştirebilmesi arzu edilir. Bu genellikle bir ROM vektörleri işaret ya ile gerçekleştirilmiştir atlama tablo olarak RAM ya da kullanımı ile banka anahtarlama ROM zamanında RAM ile ikame izin vermek.

68000, tam işlemci sanallaştırması için Popek ve Goldberg sanallaştırma gereksinimlerini karşılamaz, çünkü kullanıcı modu yazılımının az miktarda ayrıcalıklı duruma salt okunur erişimine izin veren "MOVE from SR" adlı tek bir ayrıcalıksız talimata sahiptir. 68000'in sonraki türevleri olan 68EC000 ve 68SEC000, "MOVE from SR" komutu ayrıcalıklı olduğu için gereksinimleri karşılar. Aynı değişiklik 68010 ve sonraki CPU'larda tanıtıldı.

68000 aynı zamanda sanal belleği kolayca destekleyemez , bu da başarısız bir bellek erişiminden yakalama ve kurtarma yeteneği gerektirir. 68000, yakalamak için kullanılabilecek bir veri yolu hatası istisnası sağlar, ancak işletim sistemi istisnayı ele aldığında hatalı talimatı sürdürmek için yeterli işlemci durumunu kaydetmez. Birkaç şirket, farklı aşamalı saatlerde paralel olarak çalışan iki 68000 yonga kullanarak çalışan sanal belleğe sahip 68000 tabanlı Unix iş istasyonları yapmayı başardı. "Öncü" 68000 hatalı bir bellek erişimiyle karşılaştığında, ek donanım "ana" 68000'i kesintiye uğratarak kötü bellek erişimiyle de karşılaşmasını engeller. Bu kesme rutini, sanal bellek işlevlerini idare edecek ve "ana" 68000 kesmeden döndüğünde düzgün şekilde senkronize çalışmaya devam etmek için "önde gelen" 68000'i doğru durumda yeniden başlatacaktır.

Bu sorunlar, 68k mimarisinin bir sonraki büyük revizyonunda, MC68010'un piyasaya sürülmesiyle giderildi. Bus Error ve Address Error istisnaları, kurtarmayı kolaylaştırmak için süpervizör yığınına büyük miktarda dahili durum gönderir ve "MOVE from SR" komutu ayrıcalıklı hale getirildi. Kullanıcı modu yazılımı tarafından yerine kullanılmak üzere yeni bir ayrıcalıksız "MOVE from CCR" talimatı sağlanmıştır; bir işletim sistemi, istenirse kullanıcı modu "MOVE from SR" talimatlarını yakalayabilir ve taklit edebilir.

Komut seti ayrıntıları

Standart adresleme modları şunlardır:

  • Doğrudan kayıt olun
    • veri kaydı, örneğin "D0"
    • adres kaydı, örneğin "A0"
  • Dolaylı kayıt
    • Basit adres, örneğin (A0)
    • Artış sonrası adres, örn. (A0)+
    • Ön eksiltmeli adres, örneğin −(A0)
    • 16 bitlik işaretli ofsetli adres, örn. 16(A0)
    • İndeks kaydı ve 8 bitlik işaretli ofset ile dolaylı kayıt yapın, örneğin 8(A0,D0) veya 8(A0,A1)
    (A0)+ ve −(A0) için gerçek artış veya azalma değerinin işlenen boyutuna bağlı olduğunu unutmayın: bir bayt erişimi adres kaydını 1, bir kelimeyi 2 ve bir uzunu 4'e ayarlar.
  • PC (program sayacı) göreli yer değiştirme
    • Göreceli 16-bit işaretli ofset, örneğin 16(PC). Bu mod, pozisyondan bağımsız kod için çok kullanışlıydı.
    • İndeksli 8 bit işaretli ofset ile göreli, örneğin 8(PC,D2)
  • Mutlak hafıza konumu
    • Ya bir sayı, örneğin "4000$" ya da montajcı tarafından çevrilen sembolik bir isim
    • Çoğu 68000 montajcı , "0x" veya sondaki H yerine onaltılık için "$" sembolünü kullandı.
    • Bu adresleme modunun 16 ve 32 bit sürümleri vardı
  • Acil mod
    • Talimatta saklanan veriler, örneğin "#400"
  • Hızlı acil mod
    • Opcode'da saklanan değerle 3 bit işaretsiz (veya moveq ile imzalanmış 8 bit)
    • addq ve subq'da 0, 8'e eşittir
    • örneğin moveq #0,d0 clr.l d0'dan daha hızlıydı (her ikisi de D0'ı 0'a eşit yapsa da)

Artı: durum kaydına ve sonraki modellerde diğer özel kayıtlara erişim.

Komutların çoğu, işlemlerin 8 bitlik bayt (".b"), 16 bitlik sözcükler (".w") ve 32 bitlik uzun sözcükler (".l") üzerinde gerçekleşmesine izin veren nokta harfli soneklere sahiptir.

Döneminin pek çok CPU'su gibi, bazı talimatların döngü zamanlaması, kaynak işlenene/işlenenlere bağlı olarak değişiyordu. Örneğin, işaretsiz çarpma talimatının tamamlanması (38+2n) saat döngüsü sürer; burada 'n' işlenende ayarlanan bit sayısına eşittir. Sabit bir döngü sayısı alan bir fonksiyon yaratmak için çarpma komutundan sonra fazladan kodun eklenmesi gerekiyordu. Bu, genellikle orijinal çarpma işleneninde ayarlanmayan her bit için fazladan döngü tüketir.

Komutların çoğu dyadic , yani işlemin bir kaynağı ve bir hedefi vardır ve hedef değiştirilir. Önemli talimatlar şunlardı:

  • Aritmetik: ADD, SUB, MULU (işaretsiz çarpma), MULS (işaretli çarpma), DIVU, DIVS, NEG (toplamsal olumsuzlama) ve CMP (argümanları çıkararak ve durum bitlerini ayarlayarak yapılan bir tür karşılaştırma, ancak kaydetmedi. sonuç)
  • İkili kodlu ondalık aritmetik: ABCD, NBCD ve SBCD
  • Mantık: EOR (özel veya), VE, DEĞİL (mantıksal değil), VEYA (dahil veya)
  • Shifting: (mantıksal, yani sağa kaymalar en anlamlı bitte sıfırı koyar) LSL, LSR, ( aritmetik kaydırmalar , yani en anlamlı biti işaret-uzantı) ASR, ASL, (eXtend ile döner ve değil) ROXL, ROXR, ROL, ROR
  • Bellekte veya veri kaydında bit testi ve manipülasyon : BSET (1'e ayarlı), BCLR (0'a net), BCHG (ters çevir) ve BTST (değişiklik yok). Bu komutların tümü önce hedef biti test eder ve sırasıyla hedef bit 0 (1) ise CCR Z bitini ayarlar (temizler).
  • Çoklu işlem kontrolü: TAS, test ve ayarla , bölünmez bir veri yolu işlemi gerçekleştirerek, tek bir belleği paylaşan birkaç işlemciyi senkronize etmek için semaforların kullanılmasına izin verdi
  • Kontrol akışı: JMP (atlama), JSR (alt rutine atlama), BSR (alt rutine göreli adres atlama), RTS ( alt rutinden dönüş), RTE ( istisnadan dönüş , yani bir kesme), TRAP (benzer bir yazılım istisnasını tetikler) yazılım kesintisine), CHK (koşullu bir yazılım istisnası)
  • Dal: Bcc ("cc", durum kaydındaki koşul kodlarının 14 testinden birini belirtir: eşittir, büyüktür, küçüktür, taşır ve durum kaydından elde edilebilen çoğu kombinasyon ve mantıksal ters çevirme). Kalan iki olası koşul (her zaman doğru ve her zaman yanlış) ayrı talimat anımsatıcılarına, BRA (dal her zaman) ve BSR'ye (daldan alt programa) sahiptir.
  • Azaltma ve dal: DBcc (burada "cc", dal yönergeleri içindi), koşulun false olması koşuluyla, bir D kaydının düşük Word'ünü azalttı ve sonuç -1 değilse ($FFFF) , bir hedefe dallanmış. Sonlandırma değeri olarak 0 yerine -1'in bu kullanımı, sayım 0 olduğunda hiçbir şey yapmak zorunda olmayan ve döngüye girmeden önce başka bir kontrole gerek kalmadan döngülerin kolay kodlanmasına izin verdi. Bu aynı zamanda DBcc'nin yuvalanmasını da kolaylaştırdı.

68EC000

Motorola 68EC000 denetleyici

68EC000, gömülü denetleyici uygulamaları için tasarlanmış, biraz farklı bir pin çıkışına sahip 68000'in düşük maliyetli bir versiyonudur. 68EC000 , sıfırlama sırasında değiştirilebilen 8 bit veya 16 bit veri yoluna sahip olabilir .

İşlemciler, her biri 2.100 ve 4.376 Dhrystone üreten 8 ve 16 MHz konfigürasyonları  dahil olmak üzere çeşitli hızlarda mevcuttur  . Bu işlemcilerde kayan nokta birimi yoktur ve EC serisinde gerekli yardımcı işlemci yönergeleri bulunmadığından, bir FPU yardımcı işlemcisinin ( MC68881/2 ) tek bir işlemciyle uygulanması zordur .

68EC000, MIDI sentezleyicinin bir parçası olduğu Ensoniq müzik aletleri ve ses kartları da dahil olmak üzere birçok ses uygulamasında kontrolör olarak kullanıldı . Ensoniq ses kartlarında, kontrolör, kartta CPU olmayan rakiplere kıyasla çeşitli avantajlar sağladı. İşlemci, anakartın MPU-401 MIDI sentezi veya MT-32 öykünmesi gibi çeşitli ses görevlerini bir TSR programı kullanmadan gerçekleştirecek şekilde yapılandırılmasına izin verdi . Bu geliştirilmiş yazılım uyumluluğu, CPU kullanımını azalttı ve ana sistem bellek kullanımını ortadan kaldırdı.

Motorola 68EC000 çekirdeği daha sonra Motorola/ Freescale'in m68k tabanlı DragonBall işlemcilerinde kullanıldı .

Aynı zamanda Sega Saturn oyun konsolunda bir ses denetleyicisi ve 1990'ların ortalarında HP LaserJet yazıcılar için HP JetDirect Ethernet denetleyici kartları için bir denetleyici olarak kullanıldı .

Örnek kod

Aşağıdaki 68000 derleme kodu strtolower, tüm alfabetik karakterleri küçük harfe dönüştürerek, boş sonlandırılmış 8 bitlik karakterlerden oluşan bir dizeyi bir hedef dizeye kopyalayan adlı bir alt yordam içindir .

                     
                     
                     
                     
        
             
                     
                     
                     
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

Alt program , çerçeve işaretçisi olarak A6 kaydını kullanarak bir çağrı çerçevesi oluşturur. Bu tür bir çağrı kuralı , yeniden girişli ve özyinelemeli kodu destekler ve genellikle C ve C++ gibi diller tarafından kullanılır . Altyordam daha sonra kendisine iletilen parametreleri ( srcve dst) yığından alır. Daha sonra döngüye srcgirer , dizeden bir ASCII karakteri (bir bayt) okur , bunun büyük bir alfabetik karakter olup olmadığını kontrol eder ve eğer öyleyse, onu küçük harfli bir karaktere dönüştürür, aksi takdirde olduğu gibi bırakır, sonra karakteri içine yazar. dstdize. Son olarak, karakterin boş karakter olup olmadığını kontrol eder ; değilse, döngüyü tekrarlar, aksi takdirde önceki yığın çerçevesini (ve A6 kaydını) geri yükler ve geri döner. Dize işaretçilerinin (A0 ve A1 kayıtları) döngünün her yinelemesinde otomatik olarak artırıldığını unutmayın.

Buna karşılık, aşağıdaki kod, TI-89 serisi hesap makineleri için AMS'nin en kısıtlayıcı sürümünde bile bağımsız bir işlev içindir, çekirdekten bağımsızdır, yürütülürken tablolarda, dosyalarda veya kitaplıklarda hiçbir değer aranmaz, sistem çağrısı yok, istisna işleme yok, kullanılacak minimum kayıtlar veya herhangi birini kaydetme ihtiyacı yok. 1 Mart 1 Mart tarihi Jülyen tarihleri ​​veya Gregoryen olanlar için geçerlidir. İki düzineden daha az işlemde , ilgili KONUMlarında saklanan üç girişle çağrıldığında ISO 8601 ile uyumlu bir gün numarası hesaplar :

;
;  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
;

Ayrıca bakınız

Referanslar

daha fazla okuma

Veri sayfaları ve kılavuzlar
Kitabın
  • 68000, 68010, 68020 Astar ; 1. Baskı; Stan Kelly-Bootle ve Bob Fowler; Howard Sams & Co; 370 sayfa; 1985; ISBN  978-0672224058 . (Arşiv)
  • 68000 Mikroişlemcide Ustalaşmak ; 1. Baskı; Phillip Robinson; Sekme Kitapları; 244 sayfa; 1985; ISBN  978-0830608867 . (Arşiv)
  • 68000 Serisi için Cep Kılavuzu Montaj Dili ; 1. Baskı; Robert Erskine; Pitman Yayıncılık; 70 sayfa; 1984; ISBN  978-0273021520 . (Arşiv)
  • Motorola M68000 kalıp şemaları [1]
  • 68000 Makine Kodu Programlama (68000, 68008, 68010 ve 68020 İşlemciler); 1. Baskı; David Barrow; Collins Profesyonel ve Teknik Kitapları; 234 sayfa; 1985; ISBN  0-00-383163-9 .

Dış bağlantılar