ZILOG Z80
The
Z80 Zilog adalah 8-bit
mikroprosesor
yang dirancang dan dijual oleh Zilog
dari Juli 1976 dan seterusnya. Ia banyak digunakan baik di desktop dan embedded komputer
desain serta untuk keperluan militer. The Z80 dan turunannya dan klon membentuk
salah satu yang paling umum digunakan CPU
keluarga sepanjang masa, dan, bersama dengan Teknologi MOS
6502
keluarga, mendominasi pasar-bit microcomputer 8 dari akhir 1970-an ke
pertengahan 1980-an.
Walaupun
Zilog melakukan upaya-upaya awal dengan maju komputer mini-
seperti versi arsitektur-Z80 ( Z800
dan Z280
), chip ini tidak pernah tertangkap. Perusahaan ini juga berusaha keras di workstation
pasar dengan perusahaan Z8000
dan 32-bit
Z80000
(keduanya tidak terkait dengan Z80). Dalam beberapa dekade terakhir Zilog
kembali memfokuskan pada pasar yang terus berkembang untuk embedded system
(untuk yang asli dan Z80 Z180
dirancang) dan yang paling baru Z80-kompatibel mikrokontroler
keluarga, sepenuhnya pipelined 24-bit
eZ80
dengan linear
16 MB
address kisaran, telah berhasil diperkenalkan samping Z180 sederhana dan produk
Z80.
Zilog
Z80 lisensi desain untuk setiap perusahaan ingin membuat perangkat bebas royalti meskipun banyak produsen Eropa Timur dan
Rusia membuat salinan yang tidak berlisensi. Hal ini memungkinkan perusahaan
kecil itu produk untuk mendapatkan penerimaan di pasar dunia sejak sumber kedua
dari perusahaan jauh lebih besar seperti Toshiba
mulai memproduksi perangkat. Akibatnya, Zilog telah membuat kurang dari 50%
dari Z80s sejak konsepsi.
Sejarah Singkat dan ikhtisar
Z80
itu muncul ketika Federico Faggin
, setelah bekerja pada 8080
, meninggalkan Intel
pada akhir tahun 1974 untuk Zilog ditemukan dengan Ralph Ungermann , dan dengan Juli 1976 mereka memiliki Z80 di pasar. Hal
ini dirancang untuk menjadi biner kompatibel dengan Intel 8080 sehingga
sebagian kode 8080, terutama CP / M sistem operasi , akan berjalan tidak dimodifikasi di atasnya. Masatoshi Shima
, co-desainer dari 4004
dan 8080 juga memberikan kontribusi terhadap perkembangan Z80 yang .
Z80
menawarkan perbaikan nyata banyak selama 8080:
- Sebuah ditingkatkan instruksi set termasuk manipulasi bit, pindah blok, blok I / O, dan instruksi pencarian byte
- Baru IX dan IY register indeks dengan instruksi untuk dasar langsung + offset pengalamatan
- Sebuah sistem yang lebih baik mengganggu
- Yang lebih otomatis dan umum sistem mengganggu vektoralisasi , modus 2, serta vektor tetap sistem interrupt, modus 1, untuk sistem sederhana dengan hardware minimal (mode 0 sebagai modus 8080-kompatibel).
- Sebuah non maskable interrupt (NMI) yang dapat digunakan untuk merespon untuk mematikan situasi dan / atau peristiwa prioritas tinggi lainnya (dan memungkinkan sistem Z80 minimalis dengan mudah menerapkan tingkat mengganggu skema-dua dalam mode 1).
- Dua terpisah file mendaftar , yang dapat cepat diaktifkan, untuk mempercepat respon terhadap interupsi
- Kurang hardware yang dibutuhkan untuk catu daya, pembangkit jam dan interface ke memori dan I / O
- Single 5 Volt power supply (yang dibutuhkan-5V 8080 / +5 V / +12 V)
- Fasa-tunggal 5 jam V (8080 diperlukan -fase tinggi-amplitudo jam dua generator)
- Built-in DRAM refresh mekanisme yang seharusnya harus disediakan oleh sirkuit eksternal
- Non-multiplexing bus (yang 8080 telah negara-sinyal multiplexing ke data bus)
Z80
mengambil alih dari 8080 dan keturunannya, yang 8085
, di pasar prosesor, dan menjadi salah satu bit CPU 8-yang
paling populer. Mungkin kunci keberhasilan awal yang Z80 adalah built-in
refresh DRAM, dan fitur lainnya yang memungkinkan sistem akan dibangun dengan
dukungan chip lebih sedikit (di kemudian hari, sistem Z80 sebagian besar telah embedded system
, yang biasanya menggunakan RAM statis
dan karenanya tidak membutuhkan refresh ini).
Untuk
yang asli NMOS
desain, frekuensi clock ditentukan batas atas berturut-turut meningkat dari 2,5
pengantar MHz
, melalui terkenal 4 MHz (Z80A), sampai dengan 6 (Z80B) dan 8 MHz (Z80H). A CMOS
versi juga dikembangkan dengan batas frekuensi tertentu berkisar dari 4 MHz
hingga 20 MHz untuk versi yang dijual hari ini. Versi CMOS juga memungkinkan
sebuah-daya tidur rendah dengan keadaan internal saldo (tidak memiliki batas
frekuensi yang lebih rendah). The derivatif sepenuhnya kompatibel HD64180
/ Z180
dan eZ80
saat ini ditentukan untuk sampai dengan 33 dan 50 MHz masing.
Deskripsi
Teknis
model Programming dan register set
Model
pemrograman dan register set yang konvensional dan mirip dengan yang
berhubungan x86
keluarga. The 8080
register kompatibel AF, BC, DE, HL merupakan duplikasi sebagai dua bank
terpisah dalam Z80, di mana prosesor dapat dengan cepat beralih dari satu bank
ke bank yang lain, fitur berguna untuk mempercepat tanggapan untuk tunggal
tingkat prioritas tinggi menyela. Fitur ini hadir dalam Datapoint 2200
tetapi tidak dilaksanakan oleh Intel pada 8008. The-register set dual masuk
akal sebagai Z80 (seperti kebanyakan mikroprosesor pada waktu itu) benar-benar
ditujukan untuk tertanam
digunakan, bukan untuk komputer pribadi, atau belum-to-be diciptakan komputer rumah
. Hal ini juga ternyata cukup berguna untuk manual assembly
sangat dioptimalkan coding. Beberapa perangkat lunak, terutama game untuk MSX
, Sinclair ZX Spectrum dan berdasarkan Z80 perakitan komputer lain mengambil
optimasi Z80 untuk tingkat yang agak ekstrim, menggunakan register digandakan
antara lain.
Arsitektur Z80.
Register
Seperti
pada 8080, 8-bit register biasanya digabungkan untuk menyediakan versi 16-bit. 8080
register yang kompatibel adalah:
- AF - 8-bit akumulator (A) dan bit bendera (F) membawa, nol, minus, paritas / overflow, setengah membawa (digunakan untuk BCD ), dan sebuah Tambah / Kurangi bendera (biasanya disebut N) juga untuk BCD
- SM - 16-bit data / alamat mendaftar atau dua register 8-bit
- DE - 16-bit data / alamat mendaftar atau dua register 8-bit
- HL - 16-bit akumulator / alamat mendaftar atau dua register 8-bit
- SP - stack pointer, 16 bit
- PC - program counter, 16 bit
Register
baru yang diperkenalkan dengan Z80 adalah:
- IX - indeks 16-bit atau register dasar untuk kompensasi langsung 8-bit
- IY - indeks 16-bit atau register dasar untuk kompensasi langsung 8-bit
- I - vektor base register interupsi, 8 bit
- R - DRAM refresh counter, 8 bit ( MSB tidak masuk hitungan)
- AF '- alternatif (atau bayangan) akumulator dan bendera (toggle dalam dan keluar dengan EX AF, AF')
- BC, DE, dan HL '- alternatif (atau bayangan) register (toggle masuk dan keluar dengan EXX)
- Empat bit status mengganggu dan status modus interrupt
Tidak
ada akses langsung ke register alternatif, melainkan dua instruksi
khusus, EX AF, AF
'dan EXX,setiap matikan salah satu dari dua
multiplexer flip-flop
; ini memungkinkan switch konteks cepat untuk rutin layanan interupsi: EX AF, AF 'mungkin digunakan sendiri (untuk dan cepat mengganggu rutinitas
sederhana benar-benar) atau bersama-sama dengan EXX untuk menukar seluruh AF, BC, DE,
HL disusun; masih jauh lebih cepat daripada menekan register yang sama pada
lebih lambat (, lebih rendah prioritas stack, atau multi level interrupts
biasanya menggunakan stack untuk register toko).
Register
refresh, R, kenaikan setiap kali CPU mengambil
suatu opcode (atau opcode prefix) dan karena itu tidak ada hubungan sederhana
dengan pelaksanaan program. Ini kadang-kadang digunakan untuk menghasilkan pseudorandom
nomor dalam permainan, dan juga dalam skema perlindungan perangkat lunak. Ini
juga telah digunakan sebagai "perangkat keras" counter di beberapa
desain, sebuah contoh yang terkenal dari hal ini adalah ZX81
, yang memungkinkan itu melacak posisi karakter pada layar TV dengan memicu
interrupt pada membungkus di sekitar (dengan menghubungkan INT untuk A6) .
Register
vektor interupsi, saya, digunakan
untuk mode 2 Z80 spesifik interupsi (dipilih oleh IM 2
instruksi). Ini pasokan byte tinggi dari alamat dasar untuk masuk meja 128 dari
service rutin
alamat yang dipilih melalui pointer yang dikirim ke CPU dalam suatu interupsi
mengakui siklus; rendah byte dasar alamat tetap nol. itu pointer ini mengidentifikasi chip perifer tertentu dan /
atau fungsi perifer atau peristiwa, di mana chip biasanya terhubung dalam
disebut rantai daisy untuk resolusi prioritas. Seperti register refresh,
register ini juga kadang digunakan kreatif, dalam mode mengganggu 0 dan 1 dapat
digunakan sebagai data lain hanya 8-bit register.
Bahasa assembly Z80
Latar Belakang - yang Datapoint 2200 dan Intel 8008
Yang
pertama Intel 8008
bahasa assembly didasarkan pada a) sintaks sederhana (namun sistematis sangat
diwarisi dari 2200 Datapoint
desain. Ini sintaks asli kemudian berubah menjadi bentuk baru yang agak lebih
tradisional, bahasa assembly untuk chip yang asli yang sama 8008. Pada waktu
yang sama, bahasa assembly baru ini juga diperluas untuk mengakomodasi
mengatasi kemungkinan ditambahkan dalam Intel 8080 chip lebih maju (yang 8008
dan 8080 sama-sama memiliki subset bahasa tanpa biner yang kompatibel,
sedangkan 8008 sebenarnya kompatibel biner dengan Datapoint 2200 Namun).
Dalam
proses ini, L mnemonik, untuk LOAD, digantikan oleh berbagai
singkatan dari kata-kata LOAD, STORE dan PINDAHKAN, bercampur
dengan huruf simbolik lainnya. Huruf M mnemonic, untuk memori
(direferensikan oleh HL), diangkat keluar dari dalam instruksi mnemonic untuk
menjadi sintaksis berdiri bebas operan, sedangkan register dan kombinasi
dari register menjadi sangat tidak konsisten dinotasikan; baik oleh operan
disingkat (MVI D, LXI H dll ),. dalam instruksi mnemonic itu sendiri (LDA, LHLD
dll), atau keduanya pada waktu yang sama (LDAX B, Stax D dll).
Datapoint
2200
&
i8008
|
i8080
|
Z80
|
i8086/i8088
|
ca -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 LBM
|
MOV
B,M
|
LD
B,(HL)
|
MOV
BL,[BP]
|
-- -
|
STAX
D
|
LD
(DE),A
|
-- -
|
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] MOV
|
-- -
|
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]
|
Ilustrasi
dari empat sintaks, menggunakan sampel setara, atau (untuk 8086), beban dan
menyimpan instruksi serupa sangat.
[23]
Sintaks baru
Intel telah mengklaim hak cipta pada mnemonik
perakitan mereka. Namun lain sintaks perakitan Oleh karena itu dikembangkan,
namun kali ini dengan pendekatan yang lebih sistematis:
- Semua register dan pasangan mendaftar secara eksplisit dinotasikan dengan nama lengkap mereka
- kurung Round secara konsisten digunakan untuk menunjukkan "isi memori di" (tipuan, atau dereferencing pointer) dengan perkecualian beberapa instruksi lompat.
- Semua instruksi load dan store menggunakan nama mnemonic yang sama, LD, untuk LOAD (kembali ke kosa kata sederhana Datapoint 2200); instruksi umum lainnya, seperti ADD, INC dll, menggunakan mnemonic yang sama tanpa memandang mode pengalamatan atau ukuran operan. \Hal ini dimungkinkan karena operan sendiri membawa informasi yang cukup.
Prinsip-prinsip
ini membuat mudah untuk menemukan nama dan bentuk untuk semua instruksi Z80
baru, serta orthogonalizations dari yang lama, seperti LD SM, (1234) di atas.
Ini
adalah untuk melihat kemiripan antara Z80 dan 8086
sintaks, seperti yang digambarkan oleh meja. Selain perbedaan penamaan, dan
meskipun perbedaan tertentu dalam struktur register dasar, keduanya hampir
isomorf untuk sebagian besar instruksi. Apakah hal ini disebabkan beberapa
pengaruh yang umum pada kedua tim desain (di atas 8080
, seperti PDP-11
), sifat kompetitif dari relasi antara dua desain, atau mungkin hanya soal
selera, adalah, sejauh ini, tidak menentu.
Instruksi set dan pengkodean
Z80
menggunakan 252 dari 256 kode yang tersedia sebagai opcode byte tunggal
("root instruksi"); empat kode yang tersisa digunakan secara luas
sebagai prefiks opcode: CB dan ED memungkinkan instruksi tambahan dan DD atau
FD memilih IX + d atau IY + d masing-masing (dalam beberapa kasus tanpa
perpindahan d) di tempat HL. Skema ini memberikan Z80 dengan sejumlah besar
permutasi dari instruksi dan register; Zilog mengkategorikan ini ke dalam 158
berbeda "jenis instruksi", 78 yang sama dengan orang-orang dari Intel
8080 (memungkinkan pengoperasian 8080 program pada sebuah Z80 ). Dokumentasi
Zilog kelompok instruksi lebih lanjut ke dalam kategori berikut:
- 8-bit aritmatika dan operasi logika
- 16-bit aritmatika
- 8-bit beban
- 16-bit beban
- Bit set, reset, dan uji
- Panggil, kembali, dan restart
- Pertukaran, transfer blok, dan mencari
- Tujuan umum aritmatika dan kontrol CPU
- Input dan output
- Langsung
- Putar dan shift
Tidak
ada instruksi biak tersedia di Z80 asli. ukuran berbeda dan varian penambahan,
pergeseran, dan berputar agak berbeda memiliki efek pada bendera karena
mempengaruhi sifat-bendera 8080 disalin. Load instruksi tidak mempengaruhi
bendera (kecuali untuk tujuan khusus I dan beban mendaftar R). Indeks register
instruksi yang berguna untuk mengurangi ukuran kode, dan, sementara beberapa
dari mereka tidak jauh lebih cepat daripada "setara" urutan operasi
sederhana, mereka juga menghemat waktu pelaksanaan tidak langsung dengan
mengurangi kebutuhan untuk menyimpan dan memulihkan register. [28] Demikian pula , instruksi untuk penambahan 16-bit tidak
terlalu cepat (11 jam) di Z80 asli, tetap saja, mereka sekitar dua kali lebih
cepat melakukan perhitungan yang sama dengan menggunakan operasi 8-bit, dan tak
kalah penting, mereka mengurangi penggunaan mendaftar.
petunjuk berdokumen
register
indeks, IX dan IY, yang dimaksudkan sebagai fleksibel pointer 16 bit,
meningkatkan kemampuan untuk memanipulasi memori, stack frame dan struktur
data. Secara resmi, mereka diperlakukan sebagai 16-bit saja. Pada kenyataannya,
mereka diimplementasikan sebagai sepasang pasangan bit register-8, dalam cara
yang sama seperti register HL, yang dapat diakses baik sebagai 16 bit atau
secara terpisah sebagai igh register H dan L ow. Bahkan opcode
biner (bahasa mesin) itu identik, tetapi didahului dengan kode opcode baru.
Zilog menerbitkan opcode dan mnemonik terkait untuk fungsi dimaksud, tapi tidak
dokumen fakta bahwa setiap opcode yang memungkinkan manipulasi H dan register L
juga sama berlaku untuk bagian 8 bit dari register IX dan IY. Sebagai contoh,
26h opcode diikuti oleh nilai byte segera (LD H, n) akan memuat bahwa nilai ke
dalam register H. Sebelumnya instruksi ini dua-byte dengan register IX awalan
opcode DD, malah akan menghasilkan 8 bit paling signifikan dari register IX
yang sarat dengan nilai yang sama. Sebuah pengecualian untuk ini akan instruksi
sama dengan LD H, (IX + d) yang menggunakan kedua HL dan IX atau register IY
dalam instruksi yang sama; [30] dalam hal ini awalan DD hanya diterapkan pada ( IX + d)
bagian instruksi.
Ada
beberapa petunjuk lain juga tidak tercatat.
eksekusi Instruksi
Setiap
instruksi dilaksanakan di langkah-langkah yang biasanya disebut siklus mesin
(M-siklus), yang masing-masing dapat mengambil antara tiga dan enam periode
waktu (T-siklus). [32] Setiap M-siklus sesuai kira-kira untuk satu akses memori
dan / atau internal operasi. Banyak sebenarnya instruksi akhir selama M1 dari
instruksi berikutnya yang dikenal sebagai mengambil / mengeksekusi
tumpang tindih.
Contoh
instruksi yang khas (R = baca, W = menulis)
Jumlah
M-siklus
|
pengajaran
|
M1
|
M2
|
M3
|
M4
|
M5
|
M6
|
1
|
INC BC
|
opcode
|
|||||
2
|
ADD A,n
|
opcode
|
n
|
||||
3
|
ADD HL,DE
|
opcode
|
Internal
|
Internal
|
|||
4
|
SET b,(HL)
|
awalan
|
Opcode
|
R(HL), set
|
W(HL)
|
||
5
|
LD (IX+d),n
|
awalan
|
Opcode
|
d
|
n,add
|
W(IX+d)
|
|
6
|
INC (IY+d)
|
awalan
|
Opcode
|
d
|
Add
|
R(IY+d),inc
|
W(IY+d)
|
Z80
siklus mesin ini adalah sequencing oleh internal mesin negara
yang dibangun masing-siklus keluar M 3, 4, 5 atau 6 siklus T-tergantung pada
konteks. Hal ini untuk menghindari logika asynchronous rumit dan membuat sinyal
kontrol bersikap secara konsisten di berbagai frekuensi clock. Tentu, hal itu
juga berarti bahwa kristal frekuensi yang lebih tinggi harus digunakan daripada
tanpa ini pembagian siklus mesin (sekitar 2-3 kali lebih tinggi). . Ini tidak
berarti persyaratan ketat pada waktu akses memori, bagaimanapun, sebagai jam
resolusi tinggi memungkinkan kontrol lebih tepat timing memori dan memori
sehingga dapat aktif secara paralel dengan CPU untuk tingkat yang lebih
besar (yaitu duduk kurang idle), sehingga lebih efisien menggunakan kinerja
memori yang tersedia. Untuk eksekusi instruksi, Z80 menggabungkan dua
siklus jam penuh ke waktu akses memori yang lama (M1-sinyal) yang biasanya akan
berlangsung hanya sebagian kecil dari lebih lama) jam Siklus (dalam asinkron
desain yang lebih (seperti 6800
, atau mirip ).
Memori,
terutama EPROM
, tetapi juga Flash
, umumnya lambat dibandingkan dengan negara sub-siklus mesin (siklus clock)
yang digunakan dalam mikroprosesor kontemporer. Siklus mesin terpendek yang
aman dapat digunakan dalam desain tertanam karena itu sering dibatasi oleh
waktu akses memori, bukan dengan frekuensi CPU maksimum (terutama sehingga
selama era komputer di rumah). Namun, hubungan ini perlahan berubah selama dekade
terakhir, khususnya mengenai SRAM ; cacheless, satu siklus desain seperti eZ80
Oleh karena itu menjadi jauh lebih berarti baru-baru ini.
peripheral Kompatibel
Zilog
memperkenalkan sejumlah bagian perifer untuk Z80, yang didukung sistem
penanganan menyela Z80 dan I / O space alamat. Ini termasuk CTC
(Counter-Timer-Circuit), yang SIO (Serial Input Output), DMA (Direct Memory
Access), dengan PIO (Input Output-Paralel) dan DART (Dual Asynchronous Receiver
Transmitter). Sebagai lini produk yang dikembangkan, daya rendah, kecepatan
tinggi dan CMOS
versi chip ini diproduksi.
Seperti
prosesor 8080, 8085 dan 8086, tapi tidak seperti prosesor seperti Motorola MOS
Technology 6800 dan 6502, yang Z80 dan 8080 memiliki garis kontrol terpisah dan
ruang alamat untuk I / O petunjuk. Sementara beberapa berbasis komputer Z80 digunakan "Motorola-style" memori dipetakan input / output perangkat, biasanya I / O ruang yang digunakan untuk
mengatasi salah satu perangkat chip Zilog banyak kompatibel dengan Z80 ini.
Zilog I / O chip yang didukung modus baru Z80's 2 potong (lihat uraian di atas)
yang disederhanakan penanganan interrupt untuk nomor besar periferal.
'16 bit' berdokumen I / O-menangani
Z80
ini secara resmi digambarkan sebagai mendukung 16-bit (64 KB) menangani memori,
dan 8-bit (256 port) I / O-addressing. Melihat dengan hati-hati di manual
referensi perangkat keras, dapat dilihat bahwa semua instruksi I / O
benar-benar menegaskan bus 16-bit seluruh alamat. OUT (C), reg dan IN reg, (C)
tempat isi dari seluruh 16 bit SM mendaftar di bus alamat; OUT (n), A dan IN A,
(n) tempat isi A mendaftar di B8-B15 dari bus alamat dan n pada B0-b7 dari bus
alamat. Seorang desainer dapat memilih untuk memecahkan kode bus 16 bit seluruh
alamat pada I / O operasi dalam rangka mengambil keuntungan dari fitur ini,
atau menggunakan setengah tinggi dari bus alamat untuk memilih subfeatures dari
perangkat I / O. Fitur ini juga telah digunakan untuk meminimalkan kebutuhan
hardware decoding, seperti di BPK Amstrad
dan ZX81
.