\documentclass[a4paper, 11pt]{article}

\usepackage{array}
\usepackage{float}
\usepackage{wrapfig}
\usepackage{textgreek}
\usepackage{graphicx}

% source code
\usepackage{listings}

% set correct hypenation
\usepackage[italian]{babel}

% to fix macros
\usepackage{xspace}
% commands
% macro for project name
\newcommand{\prj}{Z80\textmu PC\xspace}

% invert signal (not, active low)
\newcommand{\inv}[1]{$\overline{\mbox{#1}}$}
 
% metadata
\title{\prj Single Board \\ Computer Development }
\author{Naoki Pross}

% document 
\begin{document}

\maketitle
\begin{abstract}

    Lo Zilog Z80 \`e un processore a 8 bit che fu introdotto nel 1976 che ebbe
    un grandissimo successo nel mondo dell'elettronica e dell'informatica
    nella fine del 20esimo secolo. In memoria di questo pioniere
    dell'industria dei sistemi informatici questo progetto documenta la
    realizzazione di un microcomputer a scopo generico a base di esso.
    L'obiettivo primario dunque \`e di realizzare una scheda simile ad una
    motherboard dei computers venduti all'epoca completa di RAM, ROMs,
    interfacce seriali e altri circuiti di supporto. Successivamente per
    l'aspetto software il progetto deve implementare i drivers per ogni
    circuito presente sulla scheda in modo da semplificare la programmazione. 
    L'obiettivo opzionale del progetto, una volta terminata la costruzione
    hardware, \`e di realizzare una kernel monolitica che offre funzioni
    minimali simili ad un sistema UNIX, quali processi, filesystem, memory
    management e drivers.

\end{abstract}

\section{Hardware}

\subsection{Specifiche tecniche dello Z80}

Lo Z80 \`e un processore molto minimalistico se paragonato a ci\`o che si
trova oggi sul mercato dei microcontrollori. Per il progetto \prj la CPU in
uso \`e il modello originale \texttt{Zilog Z8400} che non dispone di moduli
aggiuntivi integrati come i modelli SoC odierni. La scelta di una CPU tanto
semplice \`e la conseguenza del design didattico del progetto, inoltre senza
alcun dispositivo interno lo \texttt{Z8400} si presenta con un address space 
completamente vuoto, ad eccezzione del punto d'inizio e i vettori di reset.

Lo Z80 utilizza I/O paralleli sia per la lina a 16 degli indizzi che per la
linea dati a 8 bit e dispone di 6 registri 8 bit ad utilizzo generico
combinabili in coppie per ottenere un valore a 16 bit. Per il controllo dei
dispositivi esterni, come lettura e scrittura esso possiede delle linee di
controllo dedicate come {\tt\inv{RD}}, {\tt\inv{WR}}, {\tt\inv{MREQ}}, ecc. In
quanto instruction set, lo Z80 ha 158 istruzioni possibili di cui 78 sono un
sottoinsieme dello 8080A, architettate per poter mantere una
retrocompatiblit\`a.

\begin{table}[ht]\centering
\caption{Riassunto delle specifiche}

\begin{tabular}{ l l }
    \\ \hline
    Dimensione Indirizzi    & 16 bit \\
    Dimensione Dati (word)  & 8 bit \\
    Spazio Indirizzabile    & 64 KB \\
    Registri Generici 8 bit & 6 ({\tt A..F}) \\
    Registri 16 bit         & 2 ({\tt SP, PC}) \\
    Clock speed             & 8 MHz, 6MHz, 4MHz, 2.5MHz \\
    \hline
\end{tabular}
\end{table}

\subsection{Componenti e modello di design}

Il minimo necessario per far funzionare uno Z80 sono una {\tt RAM} ed una {\tt
ROM}, ma avendo a disposizione altri dispositivi I/O lo \prj dispone anche di
una porta seriale, di una porta parallela e di un counter timer; Hardware che
si presenta normalmente all'interno di microcontrollori odierni.  

\begin{table}[hb]\centering
\caption{Lista dei componenti}
\begin{tabular}{ >{\tt}l >{\tt\bfseries}l >{\footnotesize}p{.7\linewidth} }
    \\ \hline
    ROM & M28C64    & EEPROM da 8KB x 8 bit (64K) per il BIOS / Bootloader /
                      OS installata doppia per avere 16KB \\
    RAM & HM62256B  & SRAM da 32KB x 8bit (256K) \\
    CTC & Z8430     & Counter timer circuit ufficiale di Zilog a 4 canali
                      programmabili \\
    PIO & Z8420     & Parallel input/output controller di Zilog per avere un
                      intefaccia digitale con due porte da 8 bit \\
    MMU & M4-32/32-15JC & CPLD programmabile che implementa una memory 
                          management unit semplificata in grado di gestire i 5
                          bit pi\`u significativi della linea di indirizzi \\
    USART & TL16C550C & Interfaccia USART per poter comunicare utilizzando il
                        protocollo RS232 \\
    \hline
\end{tabular}
\end{table}

Il design dello \prj \`e costruito sulla falsa riga di un Arduino o di un
EasyPIC con l'aggiunta di funzionalit\`a a scopo didattico quali; la
possiblit\`a di cambiare la velocit\`a di clock tra 4MHz, 200Hz o manuale
(mediante un bottone sulla scheda) e una serie di display a 7 segmenti per
vedere in tempo reale i valori sui bus degli indirizzi e dei dati.
\begin{center}
\begin{tabular}{ >{\bfseries}r p{.8\linewidth} }
    0Hz     & Il clock manuale \`e un bottone che permette di creare
              le pulsazioni, per poter analizzare ogni istruzione \\
    200Hz   & Mediante un classico circuito con un LM555 si ha un clock
              per eseguire i programmi a velocit\`a rallentata \\
    4MHz    & Clock per esecuzione a velocit\`a piena (normale)
\end{tabular}
\end{center}

\subsection{Memory management unit}

Alcuni modelli sucessori dello Z8400 implementavano ina MMU (Memory Management
Unit) SoC che permetteva di ampliare la dimensione dell'address space,
permettendo quindi di mappare pi\`u memorie o dispositivi separati negli
stessi indirizzi. Ci\`o \`e un sistema \`e comune nei sistemi a base di
microcontrollers per ovviare al problema dello spazio. Lo \prj per\`o ha un
architettura pi\`u simile ad un computer X86 in cui la MMU viene utilizzata
per la gestione delle \emph{pagine} di memoria.

Il concetto di pagine (pages in inglese) \`e necessario per sistemi con un
supporto per il multitasking o per poter ampliare la memoria dinamica.

\section*{Glossario Tecnico}

\begin{tabular}{ >{\bfseries}p{.3\linewidth} p{.7\linewidth} }

    Address Space & In informatica l'\emph{address space} \`e un intervallo di
    indirizzi che possono corrispondere a indirizzi in rete, regioni di un
    dispositivo, di una memoria o di un qualsiasi altro dispositivo fisico o
    logico.  Per questo progetto \emph{address space} si riferisce
    all'intervallo indirizzabile dal processore, ovvero $2^{16}$ locazioni
    siccome il sistema dispone di un bus a 16 bit. \\

    Registro & Un registro \`e un dispositivo di memoria in cui \`e possibile
    pu\`o leggere e/o scrivere un certo valore. Normalmente in un computer /
    microcontrollore la dimensione della memoria \`e data dall'architettura,
    dunque 8, 16, 32 o 64 bits.  In questo documento viene viene comunemente
    utilizzato per riferirsi ad una memoria di un dispositivo fisico come la
    CPU o un IC seriale. \\
    

\end{tabular}

\end{document}
