I registri della CPU Z80 – dispensa 2

da | Dic 8, 2023 | Hardware, Z80 | 0 commenti

Questa che vi apprestate a leggere è una dispensa e non certamente un libro e quindi non ha la pretesa di essere esaustiva e autosufficiente. Questa può essere affiancata alla documentazione che è possibile reperire facilmente sia in forma cartacea sia in forma digitale. Per la stesura di questa dispensa oltre alle ovvie informazioni che è possibile reperire in rete ho preso largo spunto dai manuali Z80 Programmazione in linguaggio Assembly e il Nuovo manuale dello Z80. Come per tutti gli altri miei articoli mi scuso di eventuali inesattezze. Buona lettura.

STRUTTURA INTERNA DELLA CPU

REGISTRI
La figura illustra il set dei registri della CPU Z80. Tutti i registri sono implementati utilizzando RAM statica. Come possiamo vedere la CPU integra due serie di sei registri generici che possono essere utilizzati singolarmente come registri a 8 bit o in coppia come registri a 16 bit e due serie di registri accumulatore e flag. Questi come si può vedere dalla figura sono chiamati Main Register e Alternate Register. Sono inoltre presenti sei registri per usi speciali. Di seguito andremo a vedere nel dettaglio la funzione di ogni registro.Set registri CPU Z80

REGISTRI SPECIALI

Di seguito andiamo a descrivere il set di registri definiti come speciali all’interno della CPU Z80.

PROGRAM COUNTER (PC)
Questo registro contiene l’indirizzo, a 16 bit, dell’istruzione da caricare in memoria. Il PC è automaticamente incrementato ogni volta che il suo contenuto viene trasferito alle linee di indirizzamento. Quando si ha un salto nel programma, il nuovo valore dell’indirizzo viene posto nel PC, invece di eseguire l’operazione automatica di incremento.

STACK POINTER (SP)
Questo registro contiene i 16bit di indirizzo dell’ultimo elemento di uno stack, situato in una qualsiasi parte della memoria esterna al processore. Lo stack è organizzato in modo LIFO (Last-In-First-Out, ultimo-ingresso-prima-uscita). I dati possono essere inseriti od estratti dalla pila (attraverso un generico registro) mediante istruzioni di PUSH o di POP.

INDEX REGISTER (IX, IY)

I due registri di indice indipendenti contengono un indirizzo di base a 16 bit che viene utilizzato nelle modalità di indirizzamento indicizzato. In questa modalità, un registro indice viene utilizzato come base per puntare a una regione della memoria in cui i dati devono essere memorizzati o recuperati. Un byte addizionale che specifica lo spostamento (displacement) dalla base è incluso nell’istruzione che utilizza questo tipo di indirizzamento. L’Indirizzo finale viene quindi ottenuto sommando all’indirizzo di partenza (contenuto nel registro indice) lo spostamento specificato. Lo spostamento è espresso come numero binario con segno in complemento a due.

INTERRUPT PAGE ADDRESS REGISTER (I)
Questo registro contiene gli 8 bit più significativi dell’indirizzo delle routine di risposta agli interrupt. Gli 8 bit meno significativi sono forniti direttamente dalla periferica che ha generato l’interrupt. Questo permette di generare una risposta estremamente veloce ma soprattutto permette che i programmi di gestione delle interruzioni siano posizionati in modo dinamico ovunque nella memoria, mentre il tempo di accesso ai suddetti programmi resta in ogni caso minimo.

MEMORY REFRESH REGISTER (R)
Lo Z80 contiene un contatore di rinfresco della memoria, per facilitare l’uso delle memorie dinamiche. Sette degli 8 bit di questo registro sono automaticamente incrementati dopo ogni lettura di un’istruzione. Il suo contenuto viene inviato sul BUS di indirizzamento assieme al segnale REFRESH, per ottenere appunto il refresh delle memorie dinamiche. Questa operazione è totalmente trasparente al programma e non ne rallenta l’esecuzione.

REGISTRI DI USO GENERICO

I rimanenti registri sono suddivisi in due gruppi intercambiabili, uno definito come banco di registri principale e l’altro come banco di registri alternativo (nella figura posta all’inizio della dispensa sono riportati come Main register e Alternate register ma il significato non cambia). Il programmatore attraverso le istruzioni di scambio può selezionare il banco di registri su cui vuole operare.

ACCUMULATOR

Nella CPU vi sono due accumulatori indipendenti ad 8 bit con i relativi registri dei flag. L’accumulatore contiene il risultato di una operazione aritmetico/logica mentre il registro dei flag indica condizioni specifiche per le operazioni effettuate (ad esempio se il risultato di una operazione è o non zero).

FLAG REGISTER
Il registro dei Flag è strutturato come si vede in figura, a seconda della documentazione che andrete a leggere i nomi memonici potrebbero essere leggermente diversi, ma il loro significato rimane inalterato.
Partendo dal bit meno significativo troviamo:

  • Bit 0 (C) – È il flag del carry che in genere è settato a 1 quando si verifica un riporto sull’ultimo bit. Inoltre è alterato dalle operazioni di shift e dalle operazioni logiche.
  • Bit 1 (N) – È il flag N che viene settato quando viene effettuata una sottrazione o un decremento. Non può essere testato mediante i salti condizionati, ma è sfruttato dalla operazione DAA.
  • Bit 2 (P/V) – È il flag di parità o di overflow. Quando lavora come flag di parità (in genere nelle operazioni logiche e negli shift) viene posto a uno quando il numero dei bit posti a 1 nel risultato è pari. Se invece lavora come flag di overflow (in genere nelle operazioni aritmetiche) viene settato a 1 quando il segno del risultato è errato.
  • Bit 3 – Non assume nessun significato.
  • Bit 4 (H) – È il flag dell’half-carry e indica il riporto che avviene al bit 3 dell’accumulatore. Non può essere testato con le istruzioni di salto condizionato, ma è sfruttato dall’operazione DAA.
  • Bit 5 – Non assume nessun significato.
  • Bit 6 (Z) – È il flag dello zero: viene posto a 1 nel momento in cui il risultato di un’operazione è 0.
  • Bit 7 (S) – È il flag del segno. Quando viene posto a 1 significa che il risultato dell’operazione è negativo (in altre parole il bit più significativo del risultato è uguale a 1).

 GENERAL PURPOSE REGISTER
La CPU contiene sei registri ad 8bit di uso generico. Questi registri hanno la particolarità di poter essere utilizzati individualmente come registro ad 8bit, oppure in coppia come registri a 16bit. Come si vede dalla figura le coppie dei registri sono BC, DE e HL.

 

IFF REGISTER
Il registro IFF (Interrupt Flip-Flop) è un registro speciale a 1 bit che viene utilizzato per abilitare o disabilitare le interruzioni hardware. Il registro IFF è diviso in due parti: IFF1 e IFF2. IFF1 viene utilizzato per indicare se le interruzioni sono abilitate o meno, mentre IFF2 viene utilizzato per salvare lo stato di IFF1 durante l’esecuzione di una routine di servizio di interruzione.

 

Se siete interessati qui trovate la terza dispensa.

0 commenti

Invia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Dr. Kazuhiko Nishi MSX0/MSX3 keynote

Temporizzazioni della CPU Z80 – dispensa 4

Questa che vi apprestate a leggere è una dispensa e non certamente un libro e quindi non ha la pretesa di essere esaustiva e autosufficiente. Questa può essere affiancata alla documentazione che è possibile reperire facilmente sia in forma cartacea sia in forma...

Dr. Kazuhiko Nishi MSX0/MSX3 keynote

PinOut della CPU Z80 – dispensa 3

Questa che vi apprestate a leggere è una dispensa e non certamente un libro e quindi non ha la pretesa di essere esaustiva e autosufficiente. Questa può essere affiancata alla documentazione che è possibile reperire facilmente sia in forma cartacea sia in forma...

Dr. Kazuhiko Nishi MSX0/MSX3 keynote

Introduzione alla CPU Z80 – dispensa 1

Questa che vi apprestate a leggere è una dispensa e non certamente un libro e quindi non ha la pretesa di essere esaustiva e autosufficiente. Questa può essere affiancata alla documentazione che è possibile reperire facilmente sia in forma cartacea sia in forma...

it_ITIT_IT