Skate'nin önerisi gayet mantıklı. (Final sınavı sorusu gibi olmuş
z80'in temel işlemci, adresleme yapısı, registerları, flagleri nelerdir?
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 adresleyebilir. Normal memory adreslemesinin yanında çeşitli IO komutları sayesinde 64K IO bölgesi adresleyebilir.
Registerler :Program Kontrol Registerleri:
PC : Program Counter. İşlemcinin a onda çalışmakta olduğu hafıza adresini gösterir.
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.
Genel amaçlı kullanılan registerler:
A, B, C, D, E, H, L ve yapılan işlemin sonucuna göre değişen bitlere sahip F (Flag) registeri.
Yukarıdaki 8 bitlik registerlerden B ve C, D ve E, H ve L birlikte kullanılarak BC, DE, HL registerleri 16 bitlik olarak kullanılabilir.
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.
İndex registerleri:
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.
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.
FLAG'lar:
Yapılan işleme göre durum değiştiren bitlerdir.
7.bit - S - Sign biti
6.bit - Z - Zero biti
5.bit - Kullanılmıyor.
4.bit - H - Half Carry biti
3.bit - Kullanılmıyor.
2.bit - P - Parity biti
1.bit - N -
0.bit - C - Carry biti
(Ref bit açıklamalarını sen yapıver.)
G/Ç birimleri nasıl kontrol edilir?
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 ;(Skate'in dikkati sonucu düzeltildi.)
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.
Devam edecek...