Hello, Guest!
 
 

 
 
  Objects Tiiips Categories
Zilog Z8410APS
"Descrizione"
by RS232 (1989 pt)
2026-Jan-29 16:33

Zilog Z8410APS: Z80 DMA

Definizione

Lo Zilog Z8410APS DMA è un controller direct memory access per sistemi basati su Z80 che consente di trasferire blocchi di dati senza coinvolgere la CPU per ogni byte. L’idea è semplice: la CPU configura il DMA (sorgente, destinazione, lunghezza, modalità), poi il DMA prende temporaneamente il controllo del bus e sposta i dati tra memoria ↔ memoria, I/O ↔ memoria o I/O ↔ I/O (a seconda della configurazione e della logica di sistema), riducendo drasticamente overhead e jitter rispetto a cicli di polling o loop di copia in software.

Cosa fa “in più” rispetto a un loop di copia della CPU

  • Libera cicli CPU: la CPU non deve eseguire istruzioni ripetitive di IN/OUT/LD per ogni byte.

  • Trasferimenti deterministici: per molti carichi, il DMA offre throughput più regolare e prevedibile.

  • Gestione del bus: il DMA si sincronizza con periferiche lente tramite segnali di READY/WAIT e può lavorare in modalità che minimizzano l’impatto sul resto del sistema.

  • Fine blocco e interrupt: a fine trasferimento può segnalare evento (interrupt o flag), utile per driver “a blocchi”.

Architettura funzionale (come ragionare sul chip)

Un modo pratico di vederlo è come un “motore” con:

  • Contatore di byte (byte counter) che definisce la dimensione del blocco.

  • Puntatore sorgente e puntatore destinazione (address counters) che vengono incrementati/decrementati automaticamente secondo modalità.

  • Unità di arbitraggio bus che richiede il bus, attende il momento opportuno e poi esegue cicli di lettura/scrittura.

  • Logica di handshake con periferiche (ready, wait, request/ack se usate su scheda).

  • Logica interrupt e daisy chain in stile Zilog per integrazione pulita con altre periferiche Z80.

Nota importante: lo Z80 DMA è tipicamente un controller a canale singolo (un “flusso” DMA alla volta). Se servono più canali, storicamente si usavano più chip o logiche di multiplexing/arbiter esterne.

Modalità operative tipiche

In un sistema Z80 reale, lo Z8410 viene usato soprattutto in queste modalità:

  • Burst mode: il DMA “tiene” il bus e trasferisce il blocco (o una parte consistente) il più velocemente possibile. Massimo throughput, ma la CPU resta ferma più a lungo.

  • Cycle stealing (interleaving): il DMA ruba singoli cicli (o piccoli gruppi) tra i cicli CPU. Riduce l’impatto sulla reattività, a costo di throughput leggermente inferiore.

  • Transfer con handshake: quando la periferica non può accettare dati a piena velocità, si usano segnali di sincronizzazione (ready/wait/req-ack dipendenti dal design di scheda) così il DMA non “corre” più veloce del dispositivo collegato.

  • Auto-initialize / restart: in alcune configurazioni si può predisporre un riavvio automatico dei parametri (utile per stream ripetitivi o buffer circolari, se previsto nella logica di controllo scelta).

Casi d’uso tipici su sistemi Z80

  • Caricamento veloce di blocchi in RAM (es. da una periferica parallela o da una FIFO esterna).

  • Aggiornamento display: copia di buffer grafici o aree di memoria video (quando l’architettura lo consente).

  • I/O ad alta frequenza: acquisizione dati da ADC paralleli, strumenti, interfacce custom con handshake.

  • Movimentazione blocchi per protocolli: gestione di frame o pacchetti su interfacce non troppo “intelligenti”, lasciando alla CPU solo l’header e il controllo.

Interfaccia con la CPU Z80 (bus e segnali principali)

Dal punto di vista hardware, lo Z80 DMA si collega al bus con segnali tipici Z80:

  • D[7..0]: bus dati per programmazione e per alcuni cicli di trasferimento in I/O.

  • /IORQ, /RD, /WR: cicli di I/O per accedere ai registri di controllo (e per le operazioni di DMA verso periferiche I/O).

  • /MREQ (in molti sistemi): usato durante trasferimenti verso memoria.

  • /BUSREQ /BUSACK: richiesta e concessione del bus (fondamentale: è così che il DMA “si inserisce” senza conflitti).

  • /INT, IEI/IEO: interrupt e daisy chain come le altre periferiche Zilog.

  • /RESET, CLK: reset e clock di sistema.

Schizzo dei collegamenti più importanti

┌───────────────────────────┐ │ CPU Z80 │ │ D[7..0] /IORQ /RD /WR │ │ /MREQ /BUSREQ /BUSACK │ │ /INT IEI/IEO CLK RESET │ └──────────────┬────────────┘ │ bus di sistema ▼ ┌──────────────────┐ │ Z80 DMA │ (Z8410) │ addr src/dst │ │ byte counter │ │ bus arbiter │ │ handshake/IRQ │ └───┬───────────┬──┘ │ │ cicli memoria│ │cicli I/O + handshake ▼ ▼ ┌────────────────┐ ┌─────────────────────┐ │ RAM / ROM │ │ Periferica I/O │ │ (sorgente/dest)│ │ (UART, PIO, FIFO, │ └────────────────┘ │ ADC, interfaccia…) │ └─────────────────────┘

Programmazione (visione “driver”)

A livello driver, i passi concettuali sono sempre questi:

  1. Definire la direzione (mem→mem, I/O→mem, mem→I/O, ecc.).

  2. Impostare indirizzo sorgente e indirizzo destinazione (e se incrementare/decrementare).

  3. Caricare il conteggio byte del blocco.

  4. Se necessario, configurare handshake/wait e la modalità (burst o cycle stealing).

  5. Abilitare l’eventuale interrupt di fine blocco.

  6. Avviare il trasferimento e lasciare che il DMA completi, controllando stato o ricevendo IRQ.

Tabella 1 – Caratteristiche operative 

CaratteristicaSignificato pratico
RuoloTrasferimento dati a blocchi senza loop CPU
TipoController DMA “classico” per bus Z80 (tipicamente canale singolo)
TrasferimentiMemoria↔memoria e memoria↔I/O (dipende dall’architettura della scheda)
ModalitàBurst e cycle stealing (impatto diverso su CPU)
SincronizzazioneSupporto a segnali di wait/handshake per periferiche lente
NotificaFine blocco via flag/interrupt, integrabile in catena IEI/IEO


Tabella 2 – Segnali e integrazione 

Segnale / gruppoUso nel sistema
/BUSREQ, /BUSACKArbitraggio: il DMA chiede e ottiene il controllo del bus
/IORQ, /RD, /WRAccesso ai registri di programmazione e cicli I/O durante DMA
/MREQCicli verso memoria durante DMA (quando usato nell’architettura)
/INT, IEI/IEOInterrupt e priorità deterministica in daisy chain Z80
CLK, /RESETSincronizzazione e inizializzazione


 

Evaluate