Zilog Z80 - Zilog Z80

Zilog Z80
Zilog Z80.jpg
Tarih damgasına göre Haziran 1976'da üretilmiş bir Z80
Genel bilgi
başlatıldı Mart 1976
Tarafından tasarlandı Federico Faggin, Masatoshi Shima
Ortak üretici(ler)
Verim
Maks. CPU saat hızı 2.5, 4, 6, 8 MHz ila 10 MHz, 20 MHz'e kadar CMOS varyantı ve 33 ve 50 MHz'e kadar ikili uyumlu türevler (Zilog'dan).
veri genişliği 8 bit
Adres genişliği 16 bit
Fiziksel Özellikler
transistörler
Paket(ler)
Soket(ler)
Z80'in orijinal DIP40 çip paketi pin çıkışı

Z80 bir bir 8 bitlik mikro-işlemci tarafından ortaya Zilog olarak başlangıç şirket ilk ürün. Z80, 1974'ün sonlarında Federico Faggin tarafından tasarlandı ve kendisi ve 11 çalışanı tarafından 1975'in başlarından itibaren geliştirildi. İlk çalışma örnekleri Mart 1976'da teslim edildi ve resmi olarak Temmuz 1976'da piyasaya sürüldü. Z80, şirket kendi çip fabrikalarını kurdu ve takip eden iki yıl içinde binin üzerinde çalışana ulaştı.

Zilog Z80, Intel 8080'in yazılım uyumlu bir uzantısı ve geliştirmesidir ve onun gibi, esas olarak gömülü sistemlere yöneliktir . Role kullanılan rağmen, Z80 aynı zamanda en yaygın kullanılan biri haline geldi CPU'lar içinde masaüstü bilgisayar ve ev bilgisayarları ortalarında 1970'lerden 1980'lere gelinirken. Ayrıca askeri uygulamalarda, synthesizer gibi müzik ekipmanlarında ( Roland Jupiter-8 gibi ) ve 1970'lerin sonlarında ve Pac-Man dahil 1980'lerin başında jetonla çalışan atari oyunlarında da yaygındı .

BirZilog ABD merkezli için Z80 lisanslı Synertek ve Mostek yanı sıra Avrupa için, ilk üretime onları yardım etmiş, ikinci kaynak üreticisi, SGS . Tasarım ayrıca çeşitli Japonca, Doğu Avrupa ve Sovyetler üreticileri tarafından kopyalandı. NEC , Toshiba , Sharp ve Hitachi gibi büyük şirketler cihazı (veya kendi Z80 uyumlu klonlarını veya tasarımlarını) üretmeye başladığından bu, dünya pazarında Z80 kabulünü kazandı .

Son yıllarda Zilog, gömülü sistemler için sürekli büyüyen pazara yeniden odaklandı ve en yeni Z80 uyumlu mikro denetleyici ailesi, lineer 16  MB adres aralığına sahip tamamen ardışık düzene sahip 24 bit eZ80 , daha basit Z80 ve Z180 ile birlikte başarıyla tanıtıldı. Ürün:% s.

Tarih

Zilog Z-80 8-bit mikroişlemci için bir Mayıs 1976 reklamı
Tükenme yükü nMOS'ta orijinal Zilog Z80 mikroişlemci tasarımının fotoğrafı. Toplam kalıp boyutu 3545×3350 μm'dir. (1990'da üretilen bu gerçek çip.)
Bir CMOS bir de Z80 Quad Flat Paketi

Z80, fizikçi ve mühendis Federico Faggin'in 1974'ün sonunda Ralph Ungermann  [ o ] ile Zilog'u kurmak için Intel'den ayrılmasıyla ortaya çıktı . At Fairchild Semiconductor , daha sonra Intel'de, Faggin temel çalışma olmuştu transistörü ve yarı iletken üretim teknolojisi. Ayrıca Intel'de bellekler ve mikroişlemciler için kullanılan temel tasarım metodolojisini geliştirdi ve Intel 4004 , 8080 ve diğer birçok IC'deki çalışmaları yönetti . Faggin'in gözetiminde 4004 ve 8080'in ana mantık ve transistör seviye tasarımcısı Masatoshi Shima , Zilog ekibine katıldı.

Tasarımcılara göre, Z80 CPU (ve isteğe bağlı desteği ve çevresel IC'leri) için birincil hedefler, akıllı terminaller , üst düzey yazıcılar ve gelişmiş yazar kasalar gibi ürünlerin yanı sıra telekom ekipmanları, endüstriyel robotlar ve diğer otomasyon ekipmanı türleriydi .

Mart 1976'ya kadar Zilog, Z80'i ve beraberindeki bir montajcı tabanlı geliştirme sistemini müşterileri için geliştirdi ve Temmuz 1976'da bu resmen piyasaya sürüldü. Z80 desteği ve çevresel IC'lerden bazıları bu noktada geliştirme aşamasındaydı ve birçoğu sonraki yıl piyasaya sürüldü.

İlk Z80'ler, 1976'nın sonlarında Zilog'un kendi üretim fabrikasını hazırlamadan önce Synertek ve Mostek tarafından üretildi. Bu şirketler seçildi çünkü Z80 tasarımının yük transistörleri olarak kullandığı tükenme modlu MOSFET'leri oluşturmak için gereken iyon implantasyonunu yapabildiler . Tek bir 5 Volt güç kaynağı ile başa çıkmak için.

Faggin, komut setini Intel 8080 ile ikili uyumlu olacak şekilde tasarladı, böylece çoğu 8080 kodu, özellikle CP/M işletim sistemi ve Intel'in 8080 için PL/M derleyicisi (ve onun oluşturulan kodu) yeni Z80'de değiştirilmeden çalışacaktı. İŞLEMCİ. Masatoshi Shima , Z80 CPU'nun kapı ve transistör seviyelerinin yanı sıra mikromimarinin çoğunu az sayıda mühendis ve düzen personeli tarafından desteklenerek tasarladı . CEO Federico Faggin, iki özel düzen çalışanı ile birlikte çip düzeni çalışmasına yoğun bir şekilde dahil oldu. Faggin'e göre, finansal yatırımcılar tarafından verilen sıkı programı karşılamak için haftada 80 saat çalıştı.

Z80, 8080'e göre birçok iyileştirme sundu:

  • Aşağıdakileri içeren gelişmiş bir talimat seti :
    • Daha mantıklı, anlaşılır ve okunabilir bir montajcı talimat anımsatıcı sistemi
    • daha esnek 16 bit veri hareketi (yük veya LD) talimatları, çok önemli bir şekilde yığın işaretçisi SP dahil
    • harici çevresel bağlantı noktalarına giriş/çıkış için daha esnek adresleme modları
    • bit testi dahil tüm kayıtların ve belleğin tek bit adreslenmesi
    • bellekte kayar/döner ve akümülatör dışındakileri kaydeder
    • geliştirilmiş ve daha doğru (önceki 8080'den) BCD aritmetiği
    • bellekteki BCD sayı dizileri için talimatları döndür
    • 16 bit çıkarma ve 8 bit olumsuzlama
    • program döngüsü
    • Program Sayacı göreli atlamalar
    • blok kopyalama , blok giriş/çıkış (G/Ç) ve bayt arama talimatları.
  • İmzalı 8 ve 16 bit aritmetik için daha iyi desteğe sahip bir taşma bayrağı .
  • Doğrudan temel + ofset adresleme için talimatlar içeren yeni IX ve IY dizin kayıtları
  • Daha iyi bir kesme sistemi:
    • Daha otomatik ve genel vektörleştirilmiş bir kesme sistemi , mod 2 , öncelikle Zilog'un sayaç/zamanlayıcılar, DMA ve iletişim kontrolörleri için tasarlanmıştır ve ayrıca minimum donanıma sahip basit sistemler için sabit bir vektör kesme sistemi, mod 1 ( mod 0 olmak üzere). 8080 uyumlu mod).
    • Güç kesintisi durumlarına veya diğer yüksek öncelikli olaylara yanıt vermek için kullanılabilen (ve minimalist bir Z80 sisteminin mod 1'de iki seviyeli bir kesme şemasını kolayca uygulamasına izin veren) maskelenemeyen bir kesme (NMI ).
  • Hızlı eşzamansız olay işleyicileri veya çoklu görev dağıtıcısı gibi kesintilere yanıtı hızlandırmak için hızla değiştirilebilen eksiksiz bir yinelenen kayıt dosyası . Genel kod için ekstra kayıtlar olarak tasarlanmamalarına rağmen, yine de bazı uygulamalarda bu şekilde kullanıldılar.
  • Güç kaynağı , saat üretimi ve bellek ve G/Ç arabirimi için daha az donanım gerekir
  • Tek 5 voltluk güç kaynağı ( 8080 gerekli -5 V/+5 V/+12 V ).
  • Tek fazlı 5 voltluk saat ( 8080, yüksek genlikli (9 ila 12 volt) örtüşmeyen iki fazlı bir saate ihtiyaç duyuyordu ).
  • Dahili DRAM yenileme SRAM, daha pahalı ve daha az yoğun (ama daha hızlı) kullanıldı aksi dış devreyi gerektirecektir.
  • Çoğullanmamış veriyolları (8080, veri yoluna çoğullanmış durum sinyallerine sahipti).
  • Devre içi öykünücü gibi bir geliştirme sisteminde tek bir Z80 CPU'nun kullanılabilmesi için yalnızca program sayacını temizleyen özel bir sıfırlama işlevi .

Z80 8080 ve yavrularına, devraldı 8085 işlemci pazarında, ve en popüler 8-bit CPU biri oldu. British Telecom gibi bazı kuruluşlar, 8085'e aşinalıkları ve çip üzerindeki seri arabirimi ve kesme mimarisi nedeniyle gömülü uygulamalar için 8085'e sadık kaldılar. Intel , Nisan 1983'te Tandy ( TRS-80 Model 100 olarak ), Olivetti ve NEC tarafından çeşitli varyasyonlarda satılan Kyocera tasarımlı dizüstü bilgisayar gibi pille çalışan taşınabilir bilgisayarlarda görülen düşük güçlü bir CMOS 8085 (80C85) üretti . Ancak ilerleyen yıllarda Z80'in CMOS sürümleri (hem Zilog hem de Japon üreticilerinden) bu pazara da hakim olacaktı.

Belki de Z80'in ilk başarısının anahtarı, en azından CP/M ve diğer ofis ve ev bilgisayarları gibi pazarlarda yerleşik DRAM yenilemesiydi . (Çoğu Z80 gömülü sistem , yenileme gerektirmeyen statik RAM kullanır .) Ayrıca, minimalist iki seviyeli kesme sistemi veya tersine, çoklu Z80 IO-yongalarına hizmet vermede yararlı olan genel çok seviyeli zincirleme kesme sistemi olabilir. Sistemlerin daha az destek donanımı ve daha basit devre kartı düzeni ile oluşturulmasına izin veren tüm özellikler. Bununla birlikte, diğerleri, popülaritesinin, daha az kayıt içeren 8 bit CPU'lara kıyasla, hızlı bağlam anahtarlarına veya kayan nokta matematiği gibi şeylerin daha verimli işlenmesine izin veren çoğaltılmış kayıtlardan kaynaklandığını iddia ediyor. (Z80, HL'HL, DE'DE ve BC'BC'yi 32 bitlik kayıtlar olarak kullanarak, hesaplama sırasında bunlara daha yavaş RAM'den erişmek zorunda kalmadan, bu tür birkaç sayıyı dahili olarak tutabilir.)

Orijinal NMOS tasarımı için, belirtilen üst saat frekansı sınırı , iyi bilinen 4 MHz (Z80A), 6 (Z80B) ve 8 MHz'e (Z80H) kadar giriş 2,5 MHz'den art arda arttı  . NMOS versiyonu, 1980'lerin sonlarından beri 10 MHz'lik bir parça olarak üretilmiştir. CMOS versiyonları, bugün satılan versiyon için 4 MHz'den 20 MHz'e kadar belirlenmiş üst frekans limitleri ile geliştirilmiştir. CMOS sürümleri, düşük frekans sınırı olmaksızın dahili durum korunarak düşük güçte beklemeye izin verdi . Tam uyumlu HD64180 / Z180 ve eZ80 türevleri şu anda sırasıyla 33 ve 50 MHz'e kadar belirtilmiştir.

Tasarım

Programlama modeli ve kayıt seti

Z80'in yaklaşık bir blok şeması. Ofsetler için özel bir toplayıcı veya R için ayrı bir artırıcı yoktur ve tek bir 16 bitlik geçici kayıt WZ'den fazlasına gerek yoktur (her ne kadar artırıcı mandalları diğer bağlamlarda 16 bitlik geçici kayıt olarak da kullanılsa da). Ana kayıt bankasına paralel olarak bu kayıtların güncellenmesine izin vermek için ayrılabilir bir veri yolu segmenti ile ayrı bir gruba yerleştirilen PC ve IR kayıtlarıdır.

Z80'in programlama modeli ve kayıt seti, nihai olarak Datapoint 2200'ün kayıt yapısına dayalı olarak oldukça gelenekseldir . Z80, aynı mühendisler tarafından oluşturulan Intel 8080'in bir uzantısı olarak tasarlandı ve bu da 8008'in bir uzantısıydı . 8008, temel olarak Datapoint 2200'ün TTL tabanlı CPU'sunun bir PMOS uygulamasıydı.

2200 tasarımı, 8 bitlik H ve L (Yüksek ve Düşük) kayıtlarının 16 bitlik bir adres kaydı HL ile eşleştirilmesine izin verdi. 8080'de bu eşleştirme BC ve DE çiftlerine de eklenirken, HL yalnızca bir adres kaydı değil, 16 bitlik bir akümülatör olarak kullanıma izin verecek şekilde genelleştirildi. 8080 ayrıca akümülatör işlemleri için önemli 8 bitlik anında veri modunu ve HL, BC ve DE yükleri için anında 16 bitlik verileri tanıttı. Ayrıca, doğrudan bir adres kullanarak HL ve bellek arasında doğrudan 16 bit kopyalama artık mümkündü.

Z80 dikeyleştirilmiş IX ve IY, daha genel amaçlı dahil olmak üzere tüm 16-bit kayıt çiftleri, yapım ve aynı zamanda, 16-bit, bu çiftlerin her için ve doğrudan bellek kopyalama izin vererek bu daha. Z80'deki 16-bit IX ve IY kayıtları, temel olarak, belirli bir talimatın önceki değerlere eklenen sabit bir ofset sağladığı, ancak diğer şeylerin yanı sıra 16-bit akümülatörler olarak da kullanılabildiği temel adres kayıtları olarak tasarlanmıştır. . Bir sınırlama, IX veya IY'yi içeren tüm işlenen referanslarının, bunun yerine HL kullanan bir talimatın zamanlamasına en az dört saat döngüsü ekleyerek fazladan bir talimat öneki baytı gerektirmesidir; bu bazen IX veya IY'yi yalnızca 8080 model kayıtlarını kullanan bir yöntemden daha az verimli hale getirir. Z80 ayrıca yeni bir imzalı taşma bayrağı tanıttı ve 8080'in oldukça basit 16-bit aritmetiğini, imzalı 16-bit aritmetik için özel talimatlarla tamamladı .

8080 uyumlu kayıtlar AF, BC, DE, HL, işlemcinin hızlı bir şekilde (dört
t-durumu, herhangi bir Z80 komutu için mümkün olan en düşük yürütme süresi) bir bankadan diğerine geçebildiği Z80'de ayrı bir kayıt dosyası olarak çoğaltılır . başka; tek seviyeli, yüksek öncelikli kesintilere verilen yanıtları hızlandırmak için kullanışlı bir özellik. Benzer bir özellik 2200'de mevcuttu, ancak Intel'de hiçbir zaman uygulanmadı. İkili kayıt kümesi, kesme işleme performansını iyileştirdiği için gömülü rolde çok yararlıdır, ancak kayan nokta aritmetiği veya ev bilgisayar oyunları gibi karmaşık kodlar için ek bir genel kayıt kümesi olarak kişisel bilgisayar rolünde yaygın bir kullanım bulmuştur .

Yinelenen kayıt dosyasına genellikle "alternatif kayıt kümesi" denir (bazıları tarafından kesme işareti karakteri, bunları derleyici kaynak kodunda ve Zilog belgelerinde belirtmek için kullanıldığından "astarlanmış" kayıt dosyası). Bu, herhangi bir zamanda yalnızca bir kümenin adreslenebilir olduğunu vurgular. Bununla birlikte, 8 bitlik akü A, bayrak kaydı F ile birlikte "genel amaçlı" kayıt çiftleri HL, DE ve BC'den çatallanır. Bu, erişilebilirliklerini değiştirmek için kullanılan iki ayrı komutla gerçekleştirilir: EX AF,AF'yalnızca AF kayıt çiftini AF' ile EXXdeğiştirirken, talimat üç genel amaçlı kayıt çifti HL, DE ve BC'yi alternatifleri HL', DE' ve BC' ile değiştirir. Böylece akümülatör A, alternatif (veya prime edilmiş) kayıt dosyasındaki genel amaçlı 8 bitlik kayıtlardan herhangi biri ile bağımsız olarak etkileşime girebilir veya HL' belleğe bir işaretçi içeriyorsa, orada bir miktar bayt (DE' ve BC' de aktarabilir) Bellek ve akü A) arasındaki 8 bit veri.

Bu, programcılar için kafa karıştırıcı hale gelebilir, çünkü yürütüldükten sonra EX AF,AF'veya EXXdaha önce alternatif (astarlanmış) kayıtlar artık ana kayıtlardır ve bunun tersi de geçerlidir. Programcının hangi kümenin/kümelerin bağlamda olduğunu söylemesinin tek yolu (birleştirici kaynak metnini incelerken "bilgisayar çalarken" veya daha kötüsü, bir hata ayıklayıcıyla kodu gözden geçirirken) her bir kayıt takasının her birinde nerede yapıldığını izlemektir. programda nokta. Açıkçası, bu kod bölümleri içinde birçok atlama ve çağrı yapılırsa, dikkatli bir şekilde yorumlanmadıkça hangi kayıt dosyasının bağlamda olduğunu söylemek hızla zorlaşabilir. Bu nedenle, değişim talimatlarının doğrudan ve kısa ayrık kod bölümlerinde kullanılması tavsiye edilir. Zilog Z280 komut seti , alternatif kayıtlar bağlam içindeyse (böylece bu programlama karmaşıklığını resmen tanıyarak) bir hedef adrese atlayan talimatları JAFve JARtalimatları içerir .

Kayıtlar

Zilog Z80 kayıtları
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)
Ana kayıtlar
A Bayraklar AF (8 bit akümülatör ve bayraklar)
B C BC (veri ve adres kaydı)
NS E DE (veri ve adres kaydı)
H L HL (16 bit akümülatör ve adres kaydedici)
Alternatif kayıtlar
A' Bayraklar AF ' (8 bit akümülatör ve bayraklar)
B' C' BC ' (veri ve adres kaydı)
NS' E' DE ' (veri ve adres kaydı)
H' L' HL ' (16 bit akümülatör ve adres kaydedici)
Dizin kayıtları
IX Ben nDex X
IY Ben nDex Y
SP S yapışmayan P ointer
Diğer kayıtlar
  ben Ben nterrupt vektör
  r R Efresh karşı
Program sayıcı
bilgisayar P rogram Sayaç
Durum kaydı
  S Z - H - P / V n C F gecikme

8080'de olduğu gibi, 8 bitlik kayıtlar tipik olarak 16 bitlik sürümler sağlamak için eşleştirilir. 8080 uyumlu kayıtlar şunlardır:

  • AF: 8 bitlik akümülatör (A) ve bayrak bitleri (F) taşıma, sıfır, eksi, eşlik/taşma, yarım taşıma ( BCD için kullanılır ) ve BCD için de Ekle/Çıkar bayrağı (genellikle N olarak adlandırılır)
  • BC: 16 bitlik veri/adres kaydı veya iki adet 8 bitlik kayıt
  • DE: 16 bitlik veri/adres kaydı veya iki adet 8 bitlik kayıt
  • HL: 16 bitlik akümülatör/adres kaydı veya iki adet 8 bitlik kayıt
  • SP: yığın işaretçisi , 16 bit
  • PC: program sayacı, 16 bit

Z80 ile tanıtılan yeni kayıtlar şunlardır:

  • IX: 8 bitlik anlık ofsetler için 16 bitlik dizin veya temel kayıt
  • IY: 8 bitlik anlık ofsetler için 16 bitlik dizin veya temel kayıt
  • I: kesme vektör taban kaydı, 8 bit
  • R: DRAM yenileme sayacı, 8 bit ( msb sayılmaz)
  • AF': alternatif (veya gölge) akümülatör ve bayraklar ( EX AF,AF' ile açılıp kapatılır )
  • BC', DE've HL': alternatif (veya gölge) kayıtlar ( EXX ile açılır ve kapanır )
  • Dört bit kesinti durumu ve kesinti modu durumu

Yenileme yazmacı , R, ilerleme işlemci bir işlem kodu (ya da dahili olarak 1 baytlık bir talimatı gibi yürütür bir işlem kodu öneki) ve program uygulaması ile basit bir ilişki vardır getirir her zaman. Bu bazen oyunlarda ve ayrıca yazılım koruma şemalarında sözde rasgele sayılar oluşturmak için kullanılmıştır . Bazı tasarımlarda "donanım" sayacı olarak da kullanılmıştır; Bu bir örnektir ZX81 o olursa kesme tetikleyerek TV ekranında karakter pozisyonların izleyebilirsiniz, sarma, etrafımızda (A6 için INT bağlayarak).

Kesme vektörü yazmacı , I(seçtiği Z80 özel mod 2 kesmeler için kullanılan IM 2talimat). Bir kesme kabul döngüsü sırasında CPU'ya gönderilen bir dizin aracılığıyla seçilen 128 girişli servis rutini adresleri tablosu için temel adresin yüksek baytını sağlar ; bu dizin, hizmet yordamına işaret eden tablolu dolaylı adrese yönelik işaretçinin düşük bayt kısmıdır. İşaretçi, belirli bir çevresel yongayı veya çevresel işlevi veya olayı tanımlar; burada yongalar, öncelik çözünürlüğü için normalde sözde bir papatya zincirine bağlanır . Yenileme kaydı gibi, bu kayıt da bazen yaratıcı bir şekilde kullanılmıştır; 0 ve 1 kesme modlarında (veya kesme kullanmayan bir sistemde) başka bir 8 bitlik veri kaydı olarak kullanılabilir.

Talimatlar LD A,Rve LD A,Idiğer tüm LD(yük) talimatların aksine Z80 bayrakları kaydını etkiler . Sign (bit 7) ve Zero (bit 6) bayrakları, Refresh veya Interrupt kaynak kayıtlarından yüklenen verilere göre ayarlanır. Her iki komut için, Parite/Taşma bayrağı (bit 2), IFF2 flip-flop'un mevcut durumuna göre ayarlanır.

Z80 derleme dili

Veri noktası 2200 ve Intel 8008

İlk Intel 8008 derleme dili , Datapoint 2200 tasarımından devralınan çok basit (ancak sistematik) bir sözdizimine dayanıyordu. Bu orijinal sözdizimi daha sonra aynı orijinal 8008 yongası için yeni, biraz daha geleneksel bir montaj dili formuna dönüştürüldü. Aynı zamanda, yeni montaj dili de daha gelişmiş Intel 8080 yongasındaki ek adresleme modlarını barındıracak şekilde genişletildi (8008 ve 8080, ikili uyumlu olmadan bir dil alt kümesini paylaştı ; ancak 8008, Datapoint ile ikili uyumluydu. 2200).

Bu süreçte, LOADL için olan anımsatıcı , diğer sembolik harflerle karıştırılmış LOAD , STORE ve MOVE kelimelerinin çeşitli kısaltmaları ile değiştirildi . Bellek için anımsatıcı harf (HL tarafından atıfta bulunulur), sözdizimsel olarak bağımsız bir işlenen haline gelmek için komut anımsatıcısının içinden kaldırılırken , kayıtlar ve kayıt kombinasyonları çok tutarsız bir şekilde belirtilir; ya kısaltılmış işlenenlerle (MVI D, LXI H ve benzeri), komut anımsatıcısının kendisinde (LDA, LHLD vb.) veya her ikisi de aynı anda (LDAX B, STAX D vb.). M

Intel 8008
Veri Noktası 2200
Intel 8080
Intel 8085
Zilog Z80 Intel 8086/
Intel 8088
ca önce 1973 CA. 1974 1976 1978
LBC MOV B,C LD B,C MOV BL,CL
-- LDAX B LD A,(BC) MOV AL,[BX]
LAM MOV A,M LD A,(HL) MOV AL,[BP]
LBM MOV B,M LD B,(HL) MOV BL,[BP]
-- STAX D LD (DE),A MOV [DX],AL
LMA MOV M,A LD (HL),A MOV [BP],AL
LMC MOV M,C LD (HL),C MOV [BP],CL
LDI 56 MVI D,56 LD D,56 MOV DL,56
LMI 56 MVI M,56 LD (HL),56 MOV byte ptr [BP],56
-- LDA 1234 LD A,(1234) MOV AL,[1234]
-- STA 1234 LD (1234),A MOV [1234],AL
-- -- LD B,(IX+56) MOV BL,[SI+56]
-- -- LD (IX+56),C MOV [SI+56],CL
-- -- LD (IY+56),78 MOV byte ptr [DI+56],78
-- LXI B,1234 LD BC,1234 MOV BX,1234
-- LXI H,1234 LD HL,1234 MOV BP,1234
-- SHLD 1234 LD (1234),HL MOV [1234],BP
-- LHLD 1234 LD HL,(1234) MOV BP,[1234]
-- -- LD BC,(1234) MOV BX,[1234]
-- -- LD IX,(1234) MOV SI,[1234]

Eşdeğer veya (8086 için) çok benzer yükleme ve saklama talimatlarının kullanıldığı dört sözdiziminin gösterimi. Z80 sözdizimi, değerin (aşağıda belirtildiği gibi) bir bellek adresi olarak kullanılması gerektiğini belirtmek için bir ifadenin etrafında parantezler kullanırken, 8086 sözdizimi bu amaç için normal parantezler yerine parantezler kullanır. Hem Z80 hem de 8086, bir adres oluşturmak için bir temel kayıt defterine bir sabitin eklendiğini belirtmek için + işaretini kullanır.

Yeni sözdizimi

Intel, derleme anımsatıcıları üzerinde bir telif hakkı talep ettiğinden, Z80 için yeni bir derleme sözdizimi geliştirilmesi gerekiyordu. Bu sefer daha sistematik bir yaklaşım kullanıldı:

  • Tüm kayıtlar ve kayıt çiftleri, tam adlarıyla açıkça belirtilir.
  • Parantezler, bir atlama talimatı JP (HL) dışında, sürekli olarak "bellek içeriğini" (sabit adres veya değişken işaretçi referansını kaldırma) belirtmek için kullanılır. JP (XY), yeni PC adresini yükleyen JP (HL)'nin yalnızca bir çeşididir.
  • Tüm yükleme ve depolama talimatları, LOAD için aynı anımsatıcı adı, LD'yi kullanır (basit Datapoint 2200 sözlüğüne geri dönüş); ADD ve INC gibi diğer yaygın komutlar, adresleme modu veya işlenen boyutundan bağımsız olarak aynı anımsatıcıyı kullanır. Bu mümkündür çünkü işlenenlerin kendileri yeterli bilgi taşır.

Bu ilkeler, tüm yeni Z80 komutlarının yanı sıra eski komutların ortogonalizasyonlarını , örneğin LD BC,(1234).

Adlandırma farklılıklarının yanı sıra ve temel kayıt yapısındaki belirli bir tutarsızlığa rağmen, Z80 ve 8086 sözdizimi , talimatların büyük bir kısmı için neredeyse eşbiçimlidir . 8080 ve 8086 montaj dilleri arasında yalnızca oldukça yüzeysel benzerlikler (MOV kelimesi veya genişletilmiş kayıt için X harfi gibi) vardır, ancak 8080 programları çevirmen programları tarafından 8086 montaj diline çevrilebilir .

Komut seti ve kodlama

Z80, mevcut 256 koddan 252'sini tek baytlık işlem kodları olarak kullanır ("tümü 8080'den miras alınan "kök talimatı"); kalan dört kod, opcode önekleri olarak yaygın olarak kullanılır : CB ve ED, ekstra komutları etkinleştirir ve DD veya FD, HL yerine sırasıyla IX+d veya IY+d'yi (bazı durumlarda d yer değiştirme olmadan) seçer. Bu şema Z80'e çok sayıda talimat ve kayıt permütasyonu sağlar; Zilog, bunları 78'i Intel 8080'inkilerle aynı olan (bir Z80'de tüm 8080 programlarının çalışmasına izin veren) 158 farklı "talimat tipine" ayırır. Zilog belgeleri ayrıca talimatları aşağıdaki kategorilere ayırır (çoğu 8080'den, diğerleri Blok ve Bit talimatları gibi tamamen yeni ve diğerleri 16 bit yükler, G/Ç, döndürmeler/kaydırmalar gibi daha çok yönlü adresleme modlarına sahip 8080 komutları) ve göreceli sıçramalar):

  • Yük ve Değişim
  • Transferi ve Aramayı Engelle
  • Aritmetik ve Mantıksal
  • Döndür ve Kaydır
  • Bit Manipülasyonu (set, reset, test)
  • Zıpla, Çağır ve Geri Dön
  • Giriş çıkış
  • Temel CPU Kontrolü

Orijinal Z80'de hiçbir açık çarpma talimatı mevcut değildir, ancak A ve HL kayıtları ADD A,A ve ADD HL,HL komutlarıyla (aynı zamanda IX ve IY'de benzer şekilde) ikinin kuvvetleriyle çarpılabilir. Shift komutları da ikiye bölünebilir veya çarpılabilir.

8080'in bayrak değiştirme özelliklerinin çoğu kopyalandığından, farklı boyutlar ve eklemeler, kaydırmalar ve döndürmeler bayraklar üzerinde biraz farklı etkilere sahiptir. Bununla birlikte, 8080'in (bit 2) eşlik bayrağı biti P'ye, 8080'de bulunmayan bir özellik olan ikişerli tamamlayıcı taşma göstergesinin ek amacına hizmet ettiği için Z80'de P/V (eşlik/taşma) adı verilir. Z80, bunu parite yerine taşmayı gösterecek şekilde ayarlarken, bit düzeyindeki talimatlar hala bir parite bayrağı olarak kullanıyor. (Bu, Z80'in 8080 için yazılmış kodla ince bir uyumsuzluğunu ortaya çıkarır, çünkü Z80 bazen 8080'in pariteyi gösterdiği ve muhtemelen bazı pratik 8080 yazılımlarının mantığının Z80'de başarısız olmasına neden olan imzalı taşma gösterir.) Bu yeni taşma bayrağı tüm yeni Z80'e özgü 16 bitlik işlemler ( ADC, SBC) ve 8 bitlik aritmetik işlemler için kullanılırken, 8080'den ( ADD, INC, DEC) devralınan 16 bitlik işlemler onu etkilemez. Ayrıca, bayrak kaydının bit 1'i (8080'de yedek bir bit), yürütülen son aritmetik talimatın bir çıkarma mı yoksa toplama mı olduğunu gösteren bir bayrak, N olarak kullanılır. DAATalimatın Z80 versiyonu ( BCD aritmetiği için Ondalık Ayarlı Biriktirici) N bayrağını kontrol eder ve buna göre davranır, bu nedenle daha sonra takip edilen (varsayımsal) bir çıkarma DAA, eski bir 8080'de Z80'dekinden farklı bir sonuç verecektir. Ancak, bu, DAAyalnızca bu işlemcide ekleme için tanımlandığı gibi , 8080'de muhtemelen hatalı kod olacaktır .

Z80, LDDE, BC ve SP kayıt çiftlerini bellekten yükleyebilen ve 8080'den farklı olarak bu üç kayıt çiftinden bellek yükleyebilen altı yeni komuta sahiptir. özel amaçlı I ve R kayıt yükleri). Normal kodlamanın bir sonucu (8080 ile ortak), 8 bitlik kayıtların her birinin kendilerinden yüklenebilmesidir (örn. LD A,A). Bu, etkili bir şekilde bir NOP.

Yeni blok aktarım talimatları, bellekten belleğe veya bellek ile G/Ç çevresel bağlantı noktaları arasında 64 kilobayta kadar hareket edebilir. Komutları blokla LDIRve LDDR(Yükle, Arttır/Azalt, Tekrarla) kaynak adrese işaret etmek için HL'yi, hedef adrese DE'yi ve bir bayt sayacı olarak BC'yi kullanın. Baytlar kaynaktan hedefe kopyalanır, işaretçiler artırılır veya azaltılır ve bayt sayacı BC sıfıra ulaşana kadar azaltılır. Tekrarlanmayan sürümler LDIve LDDtek bir baytı hareket ettirin ve işaretçileri ve bayt sayacını çarpın; bu, sıfır olursa P/V bayrağını sıfırlar. Bir bellek için I / O talimatları karşılık gelen INIR, INDR, OTIR, OTDR, INI, IND, OUTIve OUTDfaaliyet Benzer. Z80, bağlantı noktasını belirlemek için C kaydı kullanarak herhangi bir kaydı bir G/Ç bağlantı noktasına girebilir ve çıkarabilir. (8080, talimatta belirtilen doğrudan bağlantı noktası adresini kullanarak yalnızca akümülatör A üzerinden G/Ç gerçekleştirir; değişken bir 8080 bağlantı noktası adresi kullanmak için kendi kendini değiştiren bir kod tekniği gerekir.)

Son blok komut grubu CP, (HL)'deki bayt ile akümülatör A arasında bir karşılaştırma işlemi gerçekleştirir . DE kayıt çifti kullanılmaz. Yinelenen sürümler CPIRve CPDRyalnızca BC sıfıra giderse veya bir eşleşme bulunursa sonlandırılır. HL, eşleşen bayttan sonra ( CPIR) veya önce ( CPDR) baytı gösterecek şekilde bırakılır . Eşleşme bulunamazsa Z bayrağı sıfırlanır. Tekrarlanmayan sürümler vardır CPIve CPD.

8080'den farklı olarak, Z80, işaretli 8 bitlik bir yer değiştirme kullanarak göreli bir adrese ( JRyerine JP) atlayabilir . Bu yeni iki baytlık JRtalimatlar için yalnızca Sıfır ve Taşıma bayrakları test edilebilir . (Koşullu olsun ya da olmasın tüm 8080 atlamaları ve çağrıları üç baytlık komutlardır.) Program döngüsü için özelleşmiş iki baytlık bir komut da Z80'de yenidir: DJNZ(Sıfır Değilse Azaltma Atlaması) işaretli 8 bitlik bir yer değiştirmeyi şu şekilde alır: acil bir işlenen. B kaydı azaltılır ve sonuç sıfır değilse, program yürütme PC'ye göre atlar; bayraklar değişmeden kalır. Bir DEC8080'de eşdeğer bir döngü gerçekleştirmek için ayrı kayıt ve koşullu atlama (iki baytlık bir mutlak adrese) komutları (toplam dört bayt) gerekir ve DECbayrak kaydını değiştirir.

İndeks kaydı (IX/IY, genellikle kısaltılmış XY) talimatları, sabit heterojen yapılarda ( kayıtlar gibi ) veya değişken bir temel adrese göre sabit ofsetlerde ( özyinelemeli yığın çerçevelerinde olduğu gibi ) düzenlenen verilere erişmek için yararlı olabilir ve ayrıca kodu azaltabilir indekslenmemiş kayıtları kullanarak birden çok kısa talimat ihtiyacını ortadan kaldırarak boyut. Bazı bağlamlarda hızını kaydetmek rağmen Ancak, uzun karşılaştırıldığında / basit operasyonların kompleksi "eşdeğer" dizileri, bunlar (ek işlemci çok zaman tabi mesela , 19 T devletler erişmek için tek endeksli bellek konumu VS. 11 kadar az HL kullanarak aynı belleğe erişmek ve bir INCsonrakine işaret etmek için). Bu nedenle, verilerin basit veya doğrusal erişimleri için, IX ve IY kullanımı daha yavaş olma ve daha fazla bellek işgal etme eğilimindedir. Yine de, 'ana' kayıtların tümünün meşgul olduğu durumlarda, kayıtları kaydetme/geri yükleme ihtiyacını ortadan kaldırarak faydalı olabilirler. Resmi olarak belgelenmemiş 8-bitlik yarıları (aşağıya bakınız) bu bağlamda özellikle yararlı olabilir, çünkü 16-bit ebeveynlerinden daha az yavaşlamaya maruz kalırlar. Benzer şekilde, orijinal Z80'de (8080/8085'tekinden 1 saat daha yavaştır) 16 bitlik eklemeler için talimatlar özellikle hızlı değildir (11 saat); bununla birlikte, aynı hesaplamaları 8 bitlik işlemler kullanarak yapmaktan yaklaşık iki kat daha hızlıdırlar ve eşit derecede önemli olarak, kayıt kullanımını azaltırlar. Programcıların (tipik olarak dinamik olarak hesaplanan) farklı ofset yer değiştirme baytlarını indekslenmiş talimatlara "poke etmeleri" alışılmadık bir durum değildi; bu, ardışık düzenlenmemiş yürütme birimlerine sahip hemen hemen tüm eski 8 bitlik işlemcilerde düzenli uygulama olan kendi kendini değiştiren kodun bir örneğidir .

İndeks kayıtlarının , için paralel bir talimatı JP (HL)vardır JP (XY). Bu genellikle , her Forth kelimesinin sonunda (dili oluşturan atomik alt rutinler) koşulsuz olarak iş parçacığı yorumlayıcı rutinlerine geri atlaması gereken Forth gibi yığın yönelimli dillerde görülür . Tipik olarak bu atlama talimatı bir uygulamada yüzlerce kez görünür ve kullanmak JP (XY)yerine kullanmak JP THREAD, her oluşum için bir bayt ve iki T durumu kaydeder. Bu, doğal olarak dizin kaydının başka herhangi bir kullanım için kullanılamamasına neden olur, yoksa sürekli olarak yeniden yükleme ihtiyacı, verimliliğini olumsuz etkiler.

10 yıllık daha yeni mikro kodlu Z180 tasarımı, başlangıçta biraz daha verimli bir uygulamaya izin vererek ( diğer şeylerin yanı sıra daha geniş bir ALU kullanarak) daha fazla "yonga alanı" sağlayabilir ; benzer şeyler Z800 , Z280 ve Z380 için de söylenebilir . Ancak, 2001 yılında tamamen ardışık düzene sahip eZ80 piyasaya sürülünceye kadar, bu talimatların nihayet yaklaşık olarak döngü açısından verimli hale gelmesi, teknik olarak mümkün olduğu kadar, yani Z80 kodlamalarının 8 bitlik okuma veya her saat döngüsünü yaz.

Belgelenmemiş talimatlar

İndeks yazmaçları, IX ve IY, bellek, yığın çerçeveleri ve veri yapılarını manipüle etme yeteneğini geliştiren esnek 16 bit işaretçiler olarak tasarlandı. Resmi olarak, yalnızca 16 bit olarak kabul edildiler. Gerçekte bu 16 bit olarak ya da ayrı ayrı olarak ya da erişilebilir HL kayıt, aynı şekilde, 8-bitlik bir çift kayda girdi olarak uygulanmıştır H IGH ve L kayıt akış. İkili işlem kodları (makine dili) aynıydı, ancak öncesinde yeni bir işlem kodu öneki vardı. Zilog, amaçlanan işlevler için işlem kodlarını ve ilgili anımsatıcıları yayınladı, ancak H ve L yazmaçlarının manipülasyonuna izin veren her işlem kodunun, IX ve IY yazmaçlarının 8 bit bölümleri için eşit derecede geçerli olduğu gerçeğini belgelemedi. Örneğin, işlem kodu 26h ve ardından hemen bir bayt değeri (LD H,n), bu değeri H kaydına yükleyecektir. Bu iki baytlık talimattan önce IX kaydının işlem kodu öneki DD, bunun yerine IX kaydının en önemli 8 bitinin aynı değerle yüklenmesine neden olur. Bunun dikkate değer bir istisnası LD H,(IX+d), aynı komutta hem HL hem de IX veya IY kayıtlarını kullanan benzer komutlardır; bu durumda DD öneki sadece komutun (IX+d) kısmına uygulanır. XY yazmaçlarının yarısı, 8 bitlik aritmetik, mantıksal ve karşılaştırma talimatları için işlenenleri de tutabilir ve normal 8 bitlik yazmaçları başka kullanımlar için ayırabilir. Bir dizin kaydının üst yarısını artırma ve azaltma konusundaki belgelenmemiş yeteneği, belgelenmiş ADD/SBC XY,DEveya ADD/SBC XY,BC.

Belgelenmemiş birkaç talimat daha var. Belgelenmemiş veya yasa dışı işlem kodları Z80 tarafından algılanmaz ve bazıları yararlı olan çeşitli etkilere sahiptir. Ancak, talimat setinin resmi tanımının bir parçası olmadıkları için, Z80'in farklı uygulamalarının her belgelenmemiş işlem kodu için aynı şekilde çalışması garanti edilmez (veya özellikle muhtemeldir).

Hatalar

OTDRTalimat Z80 belgelerine uymuyor. Hem OTDRve OTIRtalimatların, taşıma (C) bayrağını değiştirilmeden bırakması gerekir. OTIRTalimat düzgün çalışır; ancak, OTDRkomutun yürütülmesi sırasında, taşıma bayrağı, akümülatör (A) ile OTDRtalimatın son çıktısı arasında sahte bir karşılaştırmanın sonuçlarını alır .

Örnek kod

ÖRNEK 1: Aşağıdaki Z80 derleyici kaynak kodu, HELLO_WORLD adlı bir alt yordam içindir. Evrensel olarak bilindiği gibi, bu, video ekranına bir mesaj yazdıracak ve ardından çıkacak bir tanıtım programıdır. Basit olmasına rağmen, bir derleyici kaynak kodunun nasıl biçimlendirildiğini ve bir bilgisayar işletim sistemi aracılığıyla ekran donanımıyla nasıl etkileşime girdiğini gösterir. Bu mutlaka belirli bir bilgisayar donanımına, işletim sistemine ve montajcı yazılımına özgüdür. Kullanılan örnek , Tandy/Radio Shack and Logical Systems tarafından üretilen ve çoğu birleştiricinin Radio Shack veya Misosys Inc. tarafından satıldığı TRSDOS/LS-DOS 6.x çalıştıran
TRS-80 Model 4'tür. -GC anahtarlı EDAS veya MRAS). Bu konfigürasyonun temel özellikleri, CP/M altında bile Z80 montajcılar için evrenseldir.

            
            
            
            
            
            
            
            
            
    
  
  
  
  
  
3000 3E 69
3002 EF 
3003 21 14 30
3006 3E 0A
3008 EF
3009 0E 0D
300B 3E 02
300D EF
300E 21 00 00
3011 3E 16
3013 EF
3014 48 65 6C 6C
3018 6F 2C 20 77
301C 6F 72 6C 64
3020 21 0D 0D
3023
 ; hello_world_TRS-80 Model 4
 ; Print "Hello, world!" then exit to TRSDOS Ready
 ;
 ; Entry registers: none
 ; Return registers: none
 ;
 ; values below are decimal unless suffixed by H
 ; the term "pseudo-op" means same as "assembler directive", is not Z80 code
 ;
 @CLS         EQU     105                 ; EQU pseudo-op sets @CLS text label = TRSDOS Supervisor Code
 @DSP         EQU     2                   ; set @DSP text label = TRSDOS SVC to send char to display
 @DSPLY       EQU     10                  ; set @DSPLY text label = SVC for text string display
 @EXIT        EQU     22                  ; set @EXIT text label = SVC for returning to TRSDOS Ready
;
              ORG     3000H               ; ORG pseudo-op sets standard start address under TRSDOS 6.x
START         LD      A,@CLS              ; CLS = Clear Screen, erase display and home cursor
              RST     40                  ; Z80 Restart instruction for system SVC processor, execute @CLS
              LD      HL,MSG              ; point to message string with HL (required by @DSPLY SVC)
              LD      A,@DSPLY            ; send text string to *DO Display Output device (video screen)
              RST     40                  ; execute @DSPLY SVC (13d byte needed to terminate string)
              LD      C,13                ; now send another carriage return, needed in reg C 
              LD      A,@DSP              ; to set off Hello message from TRSDOS Ready prompt
              RST     40                  ; once we exit to system
              LD      HL,0                ; indicate no error condition to Command Interpreter
              LD      A,@EXIT             ; return to TRSDOS Ready
              RST     40                  ; (stack integrity maintained, could as well have used a RET!)
 MSG          DB      'Hello, world!',13  ; DB = Define Byte pseudo-op assembles ASCII string to Z80 memory
 CR           DB      13                  ; 13d byte is ASCII carriage return char, moves cursor down
              END     START               ; END pseudo-op required by assembler 
                                          ; to produce transfer record to program entry point

ÖRNEK 2: Aşağıdaki Z80 derleme kaynak kodu, memcpybelirli bir boyuttaki bir veri baytı bloğunu bir konumdan diğerine kopyalayan adlı bir alt yordam içindir . Önemli: örnek kod, hedef bloğun kaynakla çakıştığı durumu ele almaz; ciddi bir sınırlama, ancak bazı uygulamalar için alakasız bir sınırlamadır - özellikle kaynak ROM'da ve hedef RAM'de olduğunda, bu nedenle asla örtüşmezler. Örnek kod, hız için en iyi uygulamalardan ziyade çeşitli talimat türlerini göstermeyi amaçlayan son derece verimsizdir. Veri bloğu her seferinde bir bayt kopyalanır ve veri hareketi ve döngü mantığı 16 bitlik işlemleri kullanır. Ayrıca, Z80'in tüm döngüyü ( LDIR) yürütecek tek bir talimatı vardır . Birleştirilmiş kodun Intel 8080 ve 8085 CPU'larla ikili uyumlu olduğunu unutmayın.

                     
                     
                     
                     
        
             
                     
             
                     
                     
                     
 1000            
 1000            
 1000 78         
 1001 B1         
 1002 C8         
 1003 1A         
 1004 77         
 1005 13         
 1006 23         
 1007 0B         
 1008 C3 00 10   
 100B
 ; memcpy --
 ; Copy a block of memory from one location to another.
 ;
 ; Entry registers
 ;      BC - Number of bytes to copy
 ;      DE - Address of source data block
 ;      HL - Address of target data block
 ;
 ; Return registers
 ;      BC - Zero

             org     1000h       ;Origin at 1000h
 memcpy      public
 loop        ld      a,b         ;Test BC,
             or      c           ;If BC = 0,
             ret     z           ;Return
             ld      a,(de)      ;Load A from (DE)
             ld      (hl),a      ;Store A into (HL)
             inc     de          ;Increment DE
             inc     hl          ;Increment HL
             dec     bc          ;Decrement BC
             jp      loop        ;Repeat the loop
             end

Talimat yürütme

Her komut, genellikle makine döngüleri (M-döngüleri) olarak adlandırılan ve her biri üç ila altı saat periyodu (T-döngüleri) alabilen adımlarda yürütülür . Her M-döngüsü kabaca bir bellek erişimine veya dahili işleme karşılık gelir. Birçok komut, bir sonraki komutun M1'i sırasında sona erer ve bu, bir getirme/yürütme çakışması olarak bilinir .

Tipik komut örnekleri (R=oku, W=yaz)
Toplam

M-döngüleri

talimat M1 M2 M3 M4 M5 M6
1 INC BC işlem kodu
2 ADD A,n işlem kodu n
3 ADD HL,DE işlem kodu dahili dahili
4 SET b,(HL) önek işlem kodu R(HL), ayar W(HL)
5 LD (IX+d),n önek işlem kodu NS n,ekle W(IX+d)
6 INC (IY+d) önek işlem kodu NS Ekle R(IY+d),inc W(IY+d)

Z80 makine döngüleri , bağlama bağlı olarak her bir M-döngüsünü 3, 4, 5 veya 6 T-döngüsünden oluşturan bir dahili durum makinesi tarafından sıralanır . Bu, hantal asenkron mantığı önler ve kontrol sinyallerinin çok çeşitli saat frekanslarında tutarlı davranmasını sağlar. Bu aynı zamanda, makine çevrimlerinin bu alt bölümü olmadan (yaklaşık 2-3 kat daha yüksek) daha yüksek frekanslı bir kristal kullanılması gerektiği anlamına gelir. Yüksek çözünürlüklü bir saat, bellek zamanlamalarının daha hassas kontrolüne izin verdiğinden ve böylece bellek, CPU ile daha büyük ölçüde paralel olarak etkinleşerek, mevcut bellek bant genişliğinin daha verimli kullanımına izin verdiğinden, bellek erişim sürelerinde daha sıkı gereksinimler anlamına gelmez .

Bunun merkezi bir örneği, opcode fetch için Z80'in iki tam saat döngüsünü bir bellek erişim periyodunda (M1 sinyali) birleştirmesidir. Z80'de bu sinyal, tipik talimat yürütme süresinin, 6800 , 6502 veya benzeri gibi bir tasarımda olduğundan nispeten daha büyük bir kısmı için sürer ; burada bu süre tipik olarak bir saat döngüsünün tipik olarak %30-40'ı kadar sürer. Tipik olarak mümkün olan en hızlı erişim süresini belirleyen bellek yongası satın alınabilirliği (yani 1980'lerde 450-250 ns civarında erişim süreleri) ile bu, bu tür tasarımların Z80'den önemli ölçüde daha uzun bir saat döngüsüne (yani daha düşük dahili saat hızına) kilitlendiği anlamına geliyordu.

Bellek, çağdaş mikroişlemcilerde kullanılan durum makinesi alt döngülerine (saat döngüleri) kıyasla genellikle yavaştı. Gömülü tasarımlarda güvenle kullanılabilecek en kısa makine döngüsü, bu nedenle, maksimum CPU frekansıyla değil (özellikle ev bilgisayarı çağında) genellikle bellek erişim süreleriyle sınırlandırılmıştır. Ancak bu ilişki, özellikle SRAM ile ilgili olarak son on yılda yavaş yavaş değişti ; eZ80 gibi önbelleksiz, tek döngülü tasarımlar bu nedenle son zamanlarda çok daha anlamlı hale geldi.

Yenileme kaydının R içeriği, CPU kodu çözerken ve getirilen talimatı yürütürken bir yenileme kontrol sinyali ile birlikte adres yolunun alt yarısında gönderilir. Yenileme sırasında Interrupt register I'in içeriği adres yolunun üst yarısında gönderilir.

Uyumlu çevre birimleri

Zilog, Z80 için tümü Z80'in kesme işleme sistemini ve G/Ç adres alanını destekleyen bir dizi çevre birimini tanıttı. Bunlara Sayaç/Zamanlayıcı Kanalı (CTC), SIO (Seri Giriş Çıkışı), DMA (Doğrudan Bellek Erişimi), PIO (Paralel Giriş-Çıkış) ve DART (Çift Asenkron Alıcı Verici) dahildir. Ürün yelpazesi geliştikçe bu çiplerin düşük güçlü, yüksek hızlı ve CMOS versiyonları tanıtıldı.

8080, 8085 ve 8086 işlemciler gibi, ancak Motorola 6800 ve MOS Technology 6502 gibi işlemcilerin aksine, Z80 ve 8080 G/Ç talimatları için ayrı bir kontrol hattına ve adres alanına sahiptir. Osborne 1 gibi bazı Z80 tabanlı bilgisayarlar "Motorola tarzı" bellek eşlemeli giriş/çıkış aygıtları kullanırken, genellikle G/Ç alanı Z80 ile uyumlu birçok Zilog çevre birimi yongasından birini adreslemek için kullanılırdı. Zilog I/O yongaları, Z80'in çok sayıda çevre birimi için kesme işlemeyi basitleştiren yeni mod 2 kesmelerini destekledi.

Z80, resmi olarak 16-bit (64 KB) bellek adreslemeyi ve 8-bit (256 port) G/Ç adreslemeyi destekliyor olarak tanımlandı. Tüm G/Ç komutları aslında 16 bitlik adres yolunun tamamını onaylar. OUT (C),reg ve IN reg,(C) tüm 16 bit BC kaydının içeriğini adres yoluna yerleştirir; OUT (n),A ve IN A,(n) A kaydının içeriğini adres yolunun b8-b15'ine ve n'yi adres yolunun b0-b7'sine yerleştirir. Bir tasarımcı, bu özellikten yararlanmak için G/Ç işlemlerinde 16 bitlik adres yolunun tamamının kodunu çözmeyi seçebilir veya G/Ç cihazının alt özelliklerini seçmek için adres yolunun üst yarısını kullanabilir. Bu özellik aynı zamanda Amstrad CPC / PCW ve ZX81'de olduğu gibi kod çözme donanım gereksinimlerini en aza indirmek için de kullanılmıştır .

İkinci kaynaklar ve türevler

İkinci kaynaklar

Zilog için ilk Z80'i üreten Mostek, onu MK3880 olarak ikinci kaynak olarak sundu. SGS-Thomson (şimdi STMicroelectronics ) de Z8400 ile ikinci bir kaynaktı. Sharp ve NEC , sırasıyla NMOS Z80, LH0080 ve μPD780C için ikinci kaynaklar geliştirdi . LH0080, Sharp ve Sony MSX bilgisayarlar da dahil olmak üzere diğer Japon üreticiler tarafından yapılan çeşitli ev bilgisayarlarında ve kişisel bilgisayarlarda ve Sharp MZ serisindeki bir dizi bilgisayarda kullanıldı .

Toshiba, Zilog tarafından kendi CMOS Z84C00 için kullanılan tasarımla aynı olduğuna inanılan (ancak doğrulanmayan) TMPZ84C00 adlı bir CMOS sürümü yaptı. Ayrıca GoldStar (şimdi LG ) tarafından yapılan Z80 çipleri ve ROHM Electronics tarafından yapılan NMOS ve CMOS'ta Z80 klonlarının BU18400 serisi (DMA, PIO, CTC, DART ve SIO dahil) vardı .

In Doğu Almanya olarak bilinen Z80, bir ruhsatsız klon U880 , imal edildi. Çok popülerdi ve Robotron ve VEB Mikroelektronik Mühlhausen'in bilgisayar sistemlerinde ( KC85 - serisi gibi) ve ayrıca birçok kendi kendine yapılan bilgisayar sistemlerinde kullanıldı. In Romanya başka lisanssız klon seçildi, bulunamadı MMN80CPU ve ürettiği Microelectronica TIM-S, HC, COBRA gibi ev bilgisayarlarda kullanılan,.

Ayrıca, Sovyetler Birliği'nde Z80'in birkaç klonu oluşturuldu , dikkate değer olanlar КР1858ВМ1 olarak da adlandırılan T34BM1'dir (Sovyet 8080-klonu KR580VM80A'ya paralel ). İlk işaretleme üretim öncesi serilerde kullanılırken, ikincisi daha büyük bir üretim için kullanılmalıydı. 1980'lerin sonlarında Sovyet mikro elektroniğinin çöküşü nedeniyle, КР1858ВМ1'lerden çok daha fazla T34BM1 var.

türevler

Orijinal Z80 ile uyumlu
  • Hitachi , çip üzerinde çevre birimleri ve 1 MB adres alanı sağlayan basit bir MMU ile CMOS'ta mikro kodlu ve kısmen dinamik bir Z80  olan HD64180'i geliştirdi . Daha sonra ikinci olarak Zilog tarafından, başlangıçta Z64180 olarak ve daha sonra veri yolu protokolüne ve Z80 çevre yongalarına daha iyi uyarlanmış zamanlamalara sahip hafifçe değiştirilmiş Z180 biçiminde kaynaklandı . Z180, Zilog adı altında korundu ve daha da geliştirildi; en yeni sürümler, çok düşük güç çekişli ve EMI (gürültü) ile tamamen statik S180/L180 çekirdeğini temel alıyor.
  • Toshiba , 84 pinli Z84013 / Z84C13 ve 100 pinli Z84015 / Z84C15 serisi "akıllı çevresel kontrolörleri", temelde sıradan NMOS ve CMOS Z80 çekirdeklerini, Z80 çevre birimleri, watchdog zamanlayıcısı , açılışta sıfırlama ve bekleme durumu üretecini aynı çip üzerinde geliştirdi. Sharp ve Toshiba tarafından üretilmiştir . Bu ürünler bugün ikinci kez Zilog tarafından tedarik edilmektedir.
  • 1994 yılında piyasaya sürülen 32-bit Z80 uyumlu Zilog Z380 , esas olarak telekom ekipmanlarında kullanılmaktadır.
  • Zilog'un 8/16/24-bit kelime uzunluğuna ve lineer 16 MB adres alanına sahip tamamen ardışık düzene sahip Z80 uyumlu eZ80'i 2001'de piyasaya sürüldü. Çip üzerinde SRAM veya flash bellek ve ayrıca entegre çevre birimleri olan sürümlerde bulunur . Bir varyantta çip üzerinde MAC (medya erişim denetleyicisi) bulunur ve mevcut yazılım bir TCP/IP yığını içerir . Z800 ve Z280 ile aksine, sadece birkaç ilave talimatlar (öncelikle vardır LEA'lar , PEA ve değişken adres 16/24 bit yükler) ama talimatlar yerine üzerinde olabildiğince verimli saat döngüsü olarak 2 ve 11 katı arasında yürütülür orijinal Z80 (ortalama değeri 3-5 kat civarındadır). Şu anda 50 MHz'e kadar olan saat frekansları için belirtilmiştir.
  • Kawasaki , orijinal Z80'den yaklaşık 1.2-1.3 kat daha verimli olan ve 33 MHz'e kadar saat hızı uygulanabilen ikili uyumlu KL5C8400'ü geliştirdi. Kawasaki ayrıca çevre birimlerine ve çip üzerinde küçük bir RAM'e sahip olan KL5C80A1x ailesini de üretiyor; yaklaşık olarak eZ80 kadar verimli bir saat döngüsüne sahiptir ve 10 MHz'e kadar saat hızına sahip olabilir (2006).
  • NEC μPD9002, hem Z80 hem de x86 aileleriyle uyumlu hibrit bir CPU idi .
  • Çinli Eylemler yongalarının Semiconductor'ın ses işlemcisi ailesi (ATJ2085 ve diğerleri) bir Z80 uyumlu içeren MCUs 24 bit adanmış DSP işlemcisi ile birlikte. Bu çipler birçok MP3 ve medya oynatıcı ürününde kullanılmaktadır.
  • T80 (VHDL) ve TV80 (Verilog) sentezlenebilir yumuşak çekirdekler OpenCores.org'dan temin edilebilir.
  • 1980 yılında duyurulan National Semiconductor NSC800, birçok TeleSecurity Timmann (TST) elektronik şifreleme makinesinde ve Canon X-07'de kullanılmaktadır . NSC 800, Z-80 komut seti ile tamamen uyumludur. NSC800, 8085 gibi çoğullanmış bir veri yolu kullanır ancak Z80'den farklı bir pin çıkışına sahiptir.
uyumlu değil
  • Toshiba TLCS yüksek hacimli 900 serisi (çoğunlukla OTP ) mikro denetleyici Z80 dayanmaktadır; aynı temel BC,DE,HL,IX,IY kayıt yapısını ve büyük ölçüde aynı talimatları paylaşırlar, ancak ikili uyumlu değildirler, önceki TLCS 90 ise Z80 uyumludur.
  • NEC 78K serisi mikrodenetleyiciler Z80 dayanmaktadır; aynı temel BC,DE,HL kayıt yapısını paylaşırlar ve benzer (ancak farklı adlandırılmış) talimatlara sahiptirler; ikili uyumlu değil.
Kısmen uyumlu
Artık üretilmiyor
  • ASCII Corporation, R800 MSX kullanılan hızlı bir 16 bit işlemci olduğu Turbor bilgisayar; yazılımdı, ancak Z80 ile uyumlu donanım değildi (sinyal zamanlaması, pin çıkışı ve pinlerin işlevi Z80'den farklıdır).
  • Zilog'un NMOS Z800 ve CMOS Z280'i , 16 MB disk belleği MMU adres alanına sahip 16 bitlik Z80 uygulamalarıydı ( HD64180 / Z180'den önce ); Z80 komut setine birçok ortogonalizasyon ve adresleme modu eklediler. Kullanıcı ve sistem modları, çoklu işlemci desteği, çip MMU, çip talimatı ve veri önbelleği ve benzeri gibi mini bilgisayar özellikleri, (genellikle elektronik odaklı) gömülü sistem tasarımcısı için işlevsellik ve destekten daha karmaşık olarak görülüyordu. ayrıca talimat yürütme sürelerini tahmin etmeyi çok zorlaştırdı.
  • Pang / Buster Bros gibi bazı atari oyunları , korsanlığı ve yasadışı kaçak oyunlardan kaçınmak için , şifre çözme anahtarlarının dahili pil destekli belleğinde saklandığı VLSI Technology tarafından üretilen şifreli bir "Kabuki" Z80 CPU kullanır .

Önemli kullanımlar

Masaüstü bilgisayarlar

Z80A, bu ColecoVision gibi bir dizi oyun konsolunda CPU olarak kullanıldı .

1970'lerin sonlarında ve 1980'lerin başında, Z80, o zamanlar piyasaya hakim olan bir kombinasyon olan CP/M işletim sistemine sahip çok sayıda oldukça anonim iş odaklı makinede kullanıldı . CP/M çalıştıran Z80 iş bilgisayarlarının iyi bilinen dört örneği, Heathkit H89 , taşınabilir Osborne 1 , Kaypro serisi ve Epson QX-10'dur . Daha az bilinen, pahalı üst düzey Otrona Ataşesi idi. Bazı sistemler , bir işlemciyi birkaç eşzamanlı kullanıcı arasında paylaşmak için çok görevli işletim sistemi yazılımı ( MP/M veya Morrow 's Micronix gibi) kullandı .

Bir Sinclair ZX Spectrum 3.5 MHz'de bir Z80 hızına sahip kullanılan

Z80'i ana işlemci olarak veya Z80 için yazılmış yazılıma erişime izin vermek için bir eklenti seçeneği olarak kullanan birden fazla ev bilgisayarı tanıtıldı. Orijinal model (daha sonra "Model I" olarak adlandırılacak), Model II , Model III ve Ana işlemci olarak bir Z80 ile donatılmış Model 4 ve bazıları (hepsi değil) dahil olmak üzere TRS-80 serisi dikkate değerdir. Z80'i ana veya ikincil işlemci olarak kullanan TRS-80 modelleri. Dikkate değer diğer makineler , Z80 üzerinde çalışan 8-bit CP/M-80 uygulamalarını veya özel bir MS-DOS'u desteklemek için her ikisi de hem Intel 8088 hem de Z80 CPU özellikli DEC Rainbow 100 ve Seequa Chameleon idi. 8088'de çalışan PC DOS uygulamalarıyla tam uyumlu değildi .

1981'de Multitech (daha sonra Acer olacak ) , Z80 mikroişlemci için basit ve ucuz bir eğitim sistemi olan Microprofessor I'i tanıttı . Halen, Southampton, İngiltere'deki Flite Electronics International Limited tarafından üretilmekte ve satılmaktadır .

Taşınabilir ve el bilgisayarları

Z80'in daha hafif, pille çalışan cihazlarda kullanımı, işlemcinin CMOS sürümlerinin kullanıma sunulmasıyla daha da yaygınlaştı. Ayrıca Sharp'tan LH5801 gibi diğer CMOS tabanlı işlemcilerin geliştirilmesine de ilham verdi. Keskin PC-1500 , bir BASIC -Programlanabilir cep bilgisayarı geliştirilmiş tarafından, 1981 yılında yayımlanan izledi Keskin PC-1600 1986 yılında ve Sharp PC-E220 1991 Daha sonra modellerinde Sharp Sihirbazı ayrıca kişisel organizatörlerinden dizi Z80 tabanlı edildi . 1984 yılında Epson PX-8 Geneva ve 1985 yılında Epson PX-4 ve Bondwell-2 ile takip edilen masaüstü makineler gibi CP/M işletim sistemini çalıştırabilen dizüstü bilgisayarlar . Sonraki yıllarda dizüstü bilgisayar pazarı daha güçlü Intel 8086 işlemcilere ve MS-DOS işletim sistemine geçerken , 1988'de Cambridge Z88 ve Amstrad NC100 gibi daha uzun pil ömrüne sahip hafif Z80 tabanlı sistemler hala piyasaya sürülüyordu. Z80'den türetilen Z8S180 , 1993'te erken kalemle çalışan kişisel dijital asistan olan Amstrad PenPad PDA600'e de girdi. Hong Kong merkezli VTech , Z80'e dayalı 'Lazerler' adlı bir dizi küçük dizüstü bilgisayar üretti. Son ikisi Laser PC5 ve PC6 idi. CIDCO MailStation ilk olarak 1999 yılında piyasaya Mivo 100, bir Z80 tabanlı mikrodenetleyici ile, tek başına bir taşınabilir e-posta cihaz oldu. Texas Instruments, bir Z80 çekirdeği etrafında inşa edilmiş Toshiba işlemcileri kullanarak bir dizi cep düzenleyici üretti (2000'de sona erdi); Bunlardan ilki TI PS-6200 idi ve uzun bir üretim sürecinden sonra bir düzine modelin PocketMate serisinde doruğa ulaştı.

Gömülü sistemler ve tüketici elektroniği

Z80 tabanlı PABX . Z80, üzerinde elle yazılmış beyaz etiket bulunan çipin soldan, sağından üçüncü çiptir.

Zilog Z80, gömülü sistemlerde ve mikrodenetleyici çekirdeklerinde uzun zamandır popüler bir mikroişlemci olmuştur ve günümüzde yaygın olarak kullanılmaya devam etmektedir. Z80'in uygulamaları, tüketici elektroniği , endüstriyel ürünler ve elektronik müzik aletlerindeki kullanımları içerir. Örneğin, çığır açan müzik synthesizer Prophet-5'te ve ilk MIDI synthesizer Prophet 600'de Z80 kullanıldı . Casio , PV-1000 video oyun konsolunda Z80A'yı kullandı .

Atari oyunu Pac-Man dahil olmak üzere, 1980'lerin başlarındaki çok sayıda atari video oyunu, Z80 CPU'ları içerir.

Z80, Sega Master System ve Sega Game Gear konsollarında kullanıldı. Sega Genesis, Z80, MC68000'de El Sıkışmalı ana CPU ile paralel olarak çalışır RAM kendi 8 KB ile, sistemin ses yongaları ve I / O (kontrol) bağlantı noktalarına doğrudan erişim içerir ve veri yolu geçilmiştir 68000'in ana bellek veri yolu (64 KB ana RAM'e, yazılım kartuşuna ve tüm video çipine erişim sağlar); Ana Sistem oyunlarıyla geriye dönük uyumluluk sağlamanın yanı sıra, Z80 genellikle Genesis yazılımındaki sesi kontrol etmek için kullanılır.

Z80 CPU'lar ayrıca çığır açan ve popüler kullanılmıştır hesap grafiklerini TI-8x serisi dan Texas Instruments ile 1990 yılında başlayan, TI-81 , Z80 2 MHz hızında sahiptir. TI-82 ve TI-85 ile başlayan serideki çoğu üst düzey hesap makinesi , Z80 CPU'larını 6 MHz veya daha yüksek hızda çalıştırır. (TI-8x adlarına sahip birkaç model, M68000 gibi diğer CPU'ları kullanır, ancak büyük çoğunluğu Z80 tabanlıdır. Bunlarda, birleştirilmiş veya derlenmiş kullanıcı programlarını Z80 makine dili kodu biçiminde çalıştırmak mümkündür. ) 2004 yılında tanıtılan TI-84 Plus serisi , 2020 yılı itibari ile üretime devam etmektedir . 2015 yılında tanıtılan TI-84 Plus CE serisi , Z80 türevi Zilog eZ80 işlemci kullanmaktadır ve yine 2020 yılı itibari ile üretime devam etmektedir.

1980'lerin sonlarında, "AON" adlı bir dizi Sovyet sabit telefon serisi Z80'i içeriyordu; bu telefonlar, arayan kimliği , arayana göre farklı zil sesleri , hızlı arama vb. ile sabit hattın özellik setini genişletti . Doksanların ikinci yarısında bu telefonların üreticileri, güç tüketimini azaltmak ve kompakt duvar siğillerinin aşırı ısınmasını önlemek için 8051 uyumlu MCU'lara geçti.

Ayrıca bakınız

Dipnotlar

Referanslar

daha fazla okuma

Veri sayfaları ve kılavuzlar
Donanım kitapları
Yazılım kitapları
  • Z80'in Programlanması ; 3. Baskı; Rodnay Zaks; Sybex; 630 sayfa; 1980; ISBN  978-0895880949 . (Arşiv)
  • Z80 Assembly Dili Programlama ; 1. Baskı; Lance Leventhal; Osborne/McGraw-Hill; 642 sayfa; 1979; ISBN  978-0931988219 . (Arşiv)
  • 8080/Z80 Assembly Dili - Gelişmiş Programlama Teknikleri ; 1. Baskı; Alan Miller; John Wiley ve Oğulları; 332 sayfa; 1981; ISBN  978-0471081241 . (Arşiv)
  • Z80 ve 8080 Assembly Dili Programlama ; 1. Baskı; Kathe Spracklen; Hayden; 180 sayfa; 1979; ISBN  978-0810451674 . (Arşiv)
  • Pratik Mikrobilgisayar Programlama - Z80 - Yerleşik Birleştirici ve Hata Ayıklama İzleyicisi için Kaynak dahil ; 1. Baskı; Walter Weller; Kuzey Teknolojisi; 501 sayfa; 1978; ISBN  978-0930594053 . (Arşiv)
  • Z80 Assembly Dili Alt Programları ; 1. Baskı; Lance Leventhal ve Winthrop Saville; Osborne/McGraw-Hill; 512 sayfa; 1983; ISBN  978-0931988912 . (Arşiv)
  • Belgelenmemiş Z80 Belgeli ; Sean Genç; v0.91; 52 sayfa; 2005. (arşiv)
Referans kartları
  • Z80 Mikroişlemci için Referans Kartı ; Shirley ve Nanolar; Nano Sistemler; 16 sayfa; 1981. (arşiv)
  • Z80 Mikroişlemci Anında Referans Kartı ; James Lewis; Mikro Mantık; 2 sayfa; 1981. (arşiv)

Dış bağlantılar