Z80

Retrojen Wiki sitesinden
Gezinti kısmına atla Arama kısmına atla


Genel Bilgi

Z80, 8bitlik bir işlemci olup 8bitlik data hattına, 16 bitlik adres hattına ve çeşitli kontrol sinyallerine sahip bir işlemcidir. 64KByte belleğe erişebilir. Normal bellek adreslemesinin yanında çeşitli IO komutları sayesinde 64K IO bölgesi adresleyebilir.

Yazmaçlar

('Register'lar)

Program Kontrol Yazmacı

PC : Program Counter. İşlemcinin o anda çalışmakta olduğu hafıza adresini gösterir.

Yığıt Yazmacı

SP : Stack Pointer. Yığın işlemleri için kullanılacak bölgenin başlangıç adresini gösterir. Kullanıcı tarafından değiştirilebilir.

Sayım Yazmaçları

B ve C yazmaçları genellikle sayım işlemi yapan komutlar tarafından kullanılır. Örn. DJNZ, LDIR.

Birikeç (Akümülatör)

A, Özel bir yazmaçtır. Birçok komut değerin önce A'ya yüklenmesini gerektirir.

Adres Yazmaçları

D, E, H, L ya da çift olarak kullanıldıklarında DE ve HL yazmaçları, genellikle bir adresi göstermek için kullanılırlar. DE genellikle DEstination (hedef) olarak kullanılır. HL ise adresin Hi(üst) ve Low(alt) byte sırasını daha kolay göstermesi için HL olarak isimlendirilmiştir.

8 bitlik registerlerden B ve C, D ve E, H ve L birlikte kullanılarak BC, DE, HL registerleri 16 bitlik olarak kullanılabilir. Yazmaç çiftleri alfabetik sıra ile yazılır ve kullanılırlar. Örn. CB=yanlış, BC=doğru.

Bayrak Yazmacı

Yapılan işlemin sonucuna göre değişen bitlere sahip F (Flag) yazmacı. Bu yazmaç ve bayraklar hakkında detaylı bilgi için Z80 Bayrakları başlığına bakınız.


Değiş-Tokuş Yazmaçları

Ayrıca Alternate register denilen AF', BC', DE' ve HL' registerleri vardır. Bu registerlere doğrudan erişim yoktur. EX AF,AF' komutu ile AF register çifti AF' register çiftiyle, EXX komutuyla ise BC, DE, HL register çiftleri BC', DE', HL' register çiftleriyle yer değiştirir. Daha doğrusu bu register çiftlerinde tutulan değerler yer değiştirir. Mesela LD BC,$4000 - LD DE,$5000 ve LD HL,$6000 olsun. EXX komutuyla $4000, $5000 ve $6000 değerleri Alternate registerlere aktarılır. Alternate registerlerdeki değerler asıl registerlere aktarılır. POP ve PUSH komutlarını kullanmaya gerek kalmadan Alternate registerleri geçici olarak saklama yeri gibi düşünebilirsiniz.

İndeks Yazmaçları

Z80'de iki adet index registeri bulunur ve 16bitlik yapıdadır. IX ve IY olarak adlandırılır. Gerekirse sanki 8 bitlik iki registerden oluşmuş gibi kullanılabilir. Alt 8 bitleri için LX, LY ve üst 8 bitleri için HX, HY olarak adlandırılan -undocumented opcodes- komutları bulunmaktadır.

İndeks yazmaçları IX ve IY aslında kullanım olarak HL yazmacına benzer. Fakat benzer komutların IX/IY ile kullanılan biçimleri 1 byte daha uzundur. Dolayısı ile bu indeks komutları, aynı işi yapan diğer komutlara göre daha yavaştır.

Diğer Yazmaçlar

  • I Registeri : Interrupt kontrol registeridir
  • R Registeri: Dinamik Ramler için kullanılan Refresh registeridir.
  • Son olarak IFF1 (Interrupt Flip Flop 1) ve IFF2 (Interrupt Flip Flop 2) registerleri bulunmaktadır. Herhangi bir IRQ veya NMI oluştuğunda içerikleri değişmektedir.

Bayraklar

('Flag'ler)

Detaylı bilgi için bkz. Z80 Bayrakları

Yapılan işleme göre durum değiştiren bitlerdir.

7.bit - S - İşaret biti 6.bit - Z - Sıfır biti 5.bit - Kullanılmıyor. 4.bit - H - Yarı-Elde biti 3.bit - Kullanılmıyor. 2.bit - PV - Eşlik biti 1.bit - N - Çıkarma biti 0.bit - C - Elde biti


Giriş/Çıkış birimlerinin kontrolü

Z80 özellik olarak G/Ç komutlarına sahiptir. IN ve OUT komutlarıyla herhangi bir donanımla bilgi alışverişi yapabilir. Mesela ZX Spectrumun ekran belleği, donanımsal olarak IO adreslemeli bir yapıda olsaydı komutlarımız aşağıdaki şekilde olacaktı.

LD BC,$4000 ; 16384 ekran belleğinin başlangıç adresi. LD A,$FF ; Akümülatöre $FF (255) sayısını yerleştiriyoruz. OUT (C),A ; 16384 numaralı ekran belleği adresine aküdeki değeri yazıyoruz.

Normalde ZX Spectrumda ekran belleğine aşağıdaki şekilde yazarız.

LD A,$FF LD ($4000),A

veya

LD HL,$4000 LD (HL),$FF

Z80'nin G/Ç komutlarına sahip olması donanım tasarımı açısından büyük esneklik sağlar. Nitekim Spectrum'un joystickleri IN komutuyla okunur.


İşlem Komutları

(Opcode'lar)

Opcode : Operation Code. Yani bir işlemcinin yapacağı işlemi belirten koddur. İşlemci o anki opcode'a göre ne işlem yapacağını bilir. Z80'de komutların opcode'ları aşağıdaki şekilde olabilir.

(Opcode'lar hexadecimal formatta verilmiştir) (nn : $00..$FF arasında bir baytlık değer) (nnnn : $00 ... $FFFF arasında iki baytlık bir değer)

Z80 komutları 1, 2, 3 veya 4 bayt uzunluğunda olabilir.

Teorik olarak 256 komut var gibi gözüksede CB, DD, ED, FD opcode'ları birer önkod olup devamında 1, 2 veya 3 bayt daha olabilir. Ön koda sahip komutlarla beraber toplam komut sayısı 705 dir. Eğer kullanıcı kılavuzunda dökümante edilmemiş opcode'ları da sayarsak toplam komut sayısı 1278 olmaktadır.


Tek baytlık ve parametre almayan opcode'lar

00 : NOP
76 : HALT
C9 : RET 

Tek baytlık ve bir parametre alan opcode'lar

06 nn : LD B,nn
DE nn : SBC A,nn

Tek baytlık ve iki parametre alan opcode'lar

21 nn nn : LD HL,nnnn 
FC nn nn : CALL M,nnnn


İki baytlık ve parametre almayan opcode'lar

ED B8 : LDIR
DD E5 : PUSH IX 

İki baytlık ve bir parametre alan opcode'lar

DD 7E nn : LD A,(IX+nn)
DD AE nn : XOR (IX+nn)

İki baytlık ve iki parametre alan opcode'lar

DD 21 nn nn : LD IX,nnnn
FD 22 nn nn : LD (nnnn),IY


Üç baytlık ve bir parametre alan opcode'lar

FD CB nn 06 : RLC (IY+nn)
DD CB nn FE : SET 7,(IX+nn)


Ayrıca Bakınız

Kategori:Z80 İşlemci Komutları | Z80 Bayrakları | category:Z80 İşlemcisi Özellikleri | Zx Spectrum Kodlama Örnekleri | byte ve bit

Kaynakça

Hades | Ref