1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
\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}
|