summaryrefslogtreecommitdiffstats
path: root/doc/report
diff options
context:
space:
mode:
Diffstat (limited to 'doc/report')
-rw-r--r--doc/report/build/notes.pdfbin34156 -> 20001 bytes
-rw-r--r--doc/report/build/z80uPC_nostyle.pdfbin69118 -> 96869 bytes
-rw-r--r--doc/report/build/z80uPC_nostyle.toc16
-rw-r--r--doc/report/res/addrspace.pdfbin7744 -> 6481 bytes
-rw-r--r--doc/report/res/addrspace.svg38
-rw-r--r--doc/report/res/block_diagram.pdfbin19532 -> 23235 bytes
-rw-r--r--doc/report/res/iospace.pdfbin6435 -> 6120 bytes
-rw-r--r--doc/report/res/kernel_mem_base.pdfbin17254 -> 17257 bytes
-rw-r--r--doc/report/res/mem_kern_alloc.pdfbin8128 -> 8130 bytes
-rw-r--r--doc/report/res/mmu_addr.eps470
-rw-r--r--doc/report/res/mmu_addr.fig182
-rw-r--r--doc/report/res/mmu_ram_map.eps229
-rw-r--r--doc/report/res/mmu_ram_map.fig57
-rw-r--r--doc/report/res/mmu_ram_map.fig.bak57
-rw-r--r--doc/report/z80uPC.tex307
-rw-r--r--doc/report/z80uPC_nostyle.tex171
16 files changed, 1177 insertions, 350 deletions
diff --git a/doc/report/build/notes.pdf b/doc/report/build/notes.pdf
index ad70a98..c96785c 100644
--- a/doc/report/build/notes.pdf
+++ b/doc/report/build/notes.pdf
Binary files differ
diff --git a/doc/report/build/z80uPC_nostyle.pdf b/doc/report/build/z80uPC_nostyle.pdf
index 2ba99e8..55a6f90 100644
--- a/doc/report/build/z80uPC_nostyle.pdf
+++ b/doc/report/build/z80uPC_nostyle.pdf
Binary files differ
diff --git a/doc/report/build/z80uPC_nostyle.toc b/doc/report/build/z80uPC_nostyle.toc
new file mode 100644
index 0000000..73b0474
--- /dev/null
+++ b/doc/report/build/z80uPC_nostyle.toc
@@ -0,0 +1,16 @@
+\select@language {italian}
+\select@language {italian}
+\contentsline {section}{\numberline {1}Hardware}{3}
+\contentsline {subsection}{\numberline {1.1}Specifiche tecniche dello Z80}{3}
+\contentsline {subsection}{\numberline {1.2}Componenti e modello di design}{3}
+\contentsline {subsection}{\numberline {1.3}Schema a blocchi}{4}
+\contentsline {subsubsection}{\numberline {1.3.1}Implementazione dei generatori di clocks}{4}
+\contentsline {subsubsection}{\numberline {1.3.2}Uscite verso l'esterno (DIN 41612)}{4}
+\contentsline {subsection}{\numberline {1.4}Address space}{5}
+\contentsline {subsection}{\numberline {1.5}Memory management unit}{5}
+\contentsline {section}{\numberline {2}Software}{8}
+\contentsline {subsection}{\numberline {2.1}Organizzazione del codice sorgente C}{8}
+\contentsline {subsection}{\numberline {2.2}C Toolchain}{8}
+\contentsline {subsection}{\numberline {2.3}CRT0 per lo Z80}{9}
+\contentsline {subsection}{\numberline {2.4}Codice sorgente VHDL}{10}
+\contentsline {subsubsection}{\numberline {2.4.1}Programmazione della MMU}{10}
diff --git a/doc/report/res/addrspace.pdf b/doc/report/res/addrspace.pdf
index 26c28d8..c949e0a 100644
--- a/doc/report/res/addrspace.pdf
+++ b/doc/report/res/addrspace.pdf
Binary files differ
diff --git a/doc/report/res/addrspace.svg b/doc/report/res/addrspace.svg
index 0f73784..ef9be71 100644
--- a/doc/report/res/addrspace.svg
+++ b/doc/report/res/addrspace.svg
@@ -14,7 +14,7 @@
viewBox="0 0 180.64061 257.56342"
version="1.1"
id="svg8"
- inkscape:version="0.92.1 r"
+ inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
sodipodi:docname="addrspace.svg">
<defs
id="defs2" />
@@ -26,16 +26,16 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.33575172"
- inkscape:cx="902.43963"
+ inkscape:cx="-44.688802"
inkscape:cy="551.46623"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
showborder="false"
- inkscape:window-width="1266"
- inkscape:window-height="763"
- inkscape:window-x="5"
- inkscape:window-y="28"
+ inkscape:window-width="1280"
+ inkscape:window-height="800"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
@@ -49,7 +49,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -98,7 +98,7 @@
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.05277824px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332" /></text>
<text
xml:space="preserve"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.05277824px;line-height:6.61458302px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.40555556px;line-height:6.61458302px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
x="-30.085047"
y="48.85014"
id="text4549"><tspan
@@ -106,10 +106,10 @@
id="tspan4547"
x="-30.085047"
y="48.85014"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.05277824px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332">0x0000</tspan></text>
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.40555556px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr;text-anchor:middle;stroke-width:0.26458332;">0x0000</tspan></text>
<text
xml:space="preserve"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.05277824px;line-height:6.61458349px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.40555556px;line-height:6.61458349px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
x="-30.085047"
y="80.850136"
id="text4549-7"><tspan
@@ -119,7 +119,7 @@
y="80.850136">0x2000</tspan></text>
<text
xml:space="preserve"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.05277824px;line-height:6.61458349px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.40555556px;line-height:6.61458349px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
x="-30.085047"
y="112.85014"
id="text4549-9"><tspan
@@ -129,7 +129,7 @@
y="112.85014">0x4000</tspan></text>
<text
xml:space="preserve"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.05277824px;line-height:6.61458349px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.40555556px;line-height:6.61458349px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
x="-30.085047"
y="176.85014"
id="text4549-70"><tspan
@@ -139,7 +139,7 @@
y="176.85014">0x8000</tspan></text>
<text
xml:space="preserve"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.05277824px;line-height:6.61458349px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.40555556px;line-height:6.61458349px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
x="-30.085047"
y="296.85013"
id="text4549-0"><tspan
@@ -149,18 +149,18 @@
y="296.85013">0xFFFF</tspan></text>
<text
xml:space="preserve"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.05277824px;line-height:15px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.11111111px;line-height:15px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
x="64.149452"
y="236.76022"
id="text4621"><tspan
sodipodi:role="line"
x="64.149452"
y="236.76022"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.05277824px;line-height:15px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.11111111px;line-height:15px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr;text-anchor:middle;stroke-width:0.26458332;"
id="tspan4631">32KB RAM</tspan></text>
<text
xml:space="preserve"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.05277824px;line-height:15px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.11111111px;line-height:15px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
x="64.185799"
y="132.85966"
id="text4621-8"><tspan
@@ -174,7 +174,7 @@
y="147.85966">SPACE</tspan></text>
<text
xml:space="preserve"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.05277824px;line-height:15px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.11111111px;line-height:15px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
x="63.628578"
y="94.760223"
id="text4621-8-1"><tspan
@@ -184,11 +184,11 @@
y="94.760223">8KB ROM</tspan></text>
<text
xml:space="preserve"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.05277824px;line-height:15px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.11111111px;line-height:15px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
x="64.02317"
y="62.76022"
id="text4621-8-1-8"><tspan
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.05277824px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.11111111px;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr;text-anchor:middle;stroke-width:0.26458332;"
sodipodi:role="line"
id="tspan4688-5"
x="64.02317"
diff --git a/doc/report/res/block_diagram.pdf b/doc/report/res/block_diagram.pdf
index 01cc15e..57b42d6 100644
--- a/doc/report/res/block_diagram.pdf
+++ b/doc/report/res/block_diagram.pdf
Binary files differ
diff --git a/doc/report/res/iospace.pdf b/doc/report/res/iospace.pdf
index 547febb..ba36d9d 100644
--- a/doc/report/res/iospace.pdf
+++ b/doc/report/res/iospace.pdf
Binary files differ
diff --git a/doc/report/res/kernel_mem_base.pdf b/doc/report/res/kernel_mem_base.pdf
index 169faae..7d2a257 100644
--- a/doc/report/res/kernel_mem_base.pdf
+++ b/doc/report/res/kernel_mem_base.pdf
Binary files differ
diff --git a/doc/report/res/mem_kern_alloc.pdf b/doc/report/res/mem_kern_alloc.pdf
index 61bad0c..141bbb5 100644
--- a/doc/report/res/mem_kern_alloc.pdf
+++ b/doc/report/res/mem_kern_alloc.pdf
Binary files differ
diff --git a/doc/report/res/mmu_addr.eps b/doc/report/res/mmu_addr.eps
new file mode 100644
index 0000000..6cb3f3c
--- /dev/null
+++ b/doc/report/res/mmu_addr.eps
@@ -0,0 +1,470 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: mmu_addr.fig
+%%Creator: fig2dev Version 3.2.6
+%%CreationDate: Mon Nov 13 08:50:22 2017
+%%BoundingBox: 0 0 305 230
+%Magnification: 1.0000
+%%EndComments
+%%BeginProlog
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+
+end
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+/pageheader {
+save
+newpath 0 230 moveto 0 0 lineto 305 0 lineto 305 230 lineto closepath clip newpath
+-198.0 341.5 translate
+1 -1 scale
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+} bind def
+/pagefooter {
+$F2psEnd
+restore
+} bind def
+%%EndProlog
+pageheader
+%
+% Fig objects follow
+%
+%
+% here starts figure with depth 50
+% Polyline
+0 slj
+0 slc
+7.500 slw
+n 3600 2700 m
+ 4050 2700 l gs col0 s gr
+% Polyline
+n 3600 2475 m
+ 4050 2475 l gs col0 s gr
+% Polyline
+n 3600 2250 m
+ 4050 2250 l gs col0 s gr
+% Polyline
+n 3600 2025 m
+ 4050 2025 l gs col0 s gr
+% Polyline
+15.000 slw
+n 3600 1800 m 4050 1800 l 4050 5400 l 3600 5400 l
+ cp gs col0 s gr
+/Courier ff 190.50 scf sf
+3825 1980 m
+gs 1 -1 sc (A15) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+3825 2205 m
+gs 1 -1 sc (A14) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+3825 2430 m
+gs 1 -1 sc (A13) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+3825 2655 m
+gs 1 -1 sc (A12) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+3825 2880 m
+gs 1 -1 sc (A11) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+7.500 slw
+n 3600 2925 m
+ 4050 2925 l gs col0 s gr
+/Courier ff 190.50 scf sf
+3825 3105 m
+gs 1 -1 sc (A10) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+n 4050 3150 m
+ 3600 3150 l gs col0 s gr
+% Polyline
+n 3600 3375 m
+ 4050 3375 l gs col0 s gr
+% Polyline
+n 4050 3600 m
+ 3600 3600 l gs col0 s gr
+% Polyline
+n 3600 3825 m
+ 4050 3825 l gs col0 s gr
+% Polyline
+n 4050 4050 m
+ 3600 4050 l gs col0 s gr
+% Polyline
+n 4050 4275 m
+ 3600 4275 l gs col0 s gr
+% Polyline
+n 3600 4500 m
+ 4050 4500 l gs col0 s gr
+% Polyline
+n 4050 4725 m
+ 3600 4725 l gs col0 s gr
+% Polyline
+n 3600 4950 m
+ 4050 4950 l gs col0 s gr
+% Polyline
+n 4050 5175 m
+ 3600 5175 l gs col0 s gr
+/Courier ff 190.50 scf sf
+3825 3330 m
+gs 1 -1 sc (A9) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+3825 3555 m
+gs 1 -1 sc (A8) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+3825 3780 m
+gs 1 -1 sc (A7) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+3825 4005 m
+gs 1 -1 sc (A6) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+3825 4230 m
+gs 1 -1 sc (A5) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+3825 4455 m
+gs 1 -1 sc (A4) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+3825 4680 m
+gs 1 -1 sc (A3) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+3825 4905 m
+gs 1 -1 sc (A2) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+3825 5130 m
+gs 1 -1 sc (A1) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+3825 5355 m
+gs 1 -1 sc (A0) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+n 6975 2700 m
+ 7425 2700 l gs col0 s gr
+% Polyline
+n 6975 2475 m
+ 7425 2475 l gs col0 s gr
+% Polyline
+n 6975 2250 m
+ 7425 2250 l gs col0 s gr
+% Polyline
+n 6975 2025 m
+ 7425 2025 l gs col0 s gr
+% Polyline
+15.000 slw
+n 6975 1800 m 7425 1800 l 7425 5400 l 6975 5400 l
+ cp gs col0 s gr
+/Courier ff 190.50 scf sf
+7200 1980 m
+gs 1 -1 sc (A15) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+7200 2205 m
+gs 1 -1 sc (A14) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+7200 2430 m
+gs 1 -1 sc (A13) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+7200 2655 m
+gs 1 -1 sc (A12) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+7200 2880 m
+gs 1 -1 sc (A11) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+7.500 slw
+n 6975 2925 m
+ 7425 2925 l gs col0 s gr
+/Courier ff 190.50 scf sf
+7200 3105 m
+gs 1 -1 sc (A10) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+n 7425 3150 m
+ 6975 3150 l gs col0 s gr
+% Polyline
+n 6975 3375 m
+ 7425 3375 l gs col0 s gr
+% Polyline
+n 7425 3600 m
+ 6975 3600 l gs col0 s gr
+% Polyline
+n 6975 3825 m
+ 7425 3825 l gs col0 s gr
+% Polyline
+n 7425 4050 m
+ 6975 4050 l gs col0 s gr
+% Polyline
+n 7425 4275 m
+ 6975 4275 l gs col0 s gr
+% Polyline
+n 6975 4500 m
+ 7425 4500 l gs col0 s gr
+% Polyline
+n 7425 4725 m
+ 6975 4725 l gs col0 s gr
+% Polyline
+n 6975 4950 m
+ 7425 4950 l gs col0 s gr
+% Polyline
+n 7425 5175 m
+ 6975 5175 l gs col0 s gr
+/Courier ff 190.50 scf sf
+7200 3330 m
+gs 1 -1 sc (A9) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+7200 3555 m
+gs 1 -1 sc (A8) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+7200 3780 m
+gs 1 -1 sc (A7) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+7200 4005 m
+gs 1 -1 sc (A6) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+7200 4230 m
+gs 1 -1 sc (A5) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+7200 4455 m
+gs 1 -1 sc (A4) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+7200 4680 m
+gs 1 -1 sc (A3) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+7200 4905 m
+gs 1 -1 sc (A2) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+7200 5130 m
+gs 1 -1 sc (A1) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+7200 5355 m
+gs 1 -1 sc (A0) dup sw pop 2 div neg 0 rm col0 sh gr
+% Polyline
+15.000 slw
+n 4950 1800 m 6075 1800 l 6075 2700 l 4950 2700 l
+ cp gs col0 s gr
+% Polyline
+7.500 slw
+gs clippath
+4724 1965 m 4880 1965 l 4880 1905 l 4724 1905 l 4724 1905 l 4844 1935 l 4724 1965 l cp
+eoclip
+n 4095 1935 m
+ 4860 1935 l gs col0 s gr gr
+
+% arrowhead
+n 4724 1965 m 4844 1935 l 4724 1905 l 4724 1965 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+4724 2190 m 4880 2190 l 4880 2130 l 4724 2130 l 4724 2130 l 4844 2160 l 4724 2190 l cp
+eoclip
+n 4095 2160 m
+ 4860 2160 l gs col0 s gr gr
+
+% arrowhead
+n 4724 2190 m 4844 2160 l 4724 2130 l 4724 2190 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+4724 2415 m 4880 2415 l 4880 2355 l 4724 2355 l 4724 2355 l 4844 2385 l 4724 2415 l cp
+eoclip
+n 4095 2385 m
+ 4860 2385 l gs col0 s gr gr
+
+% arrowhead
+n 4724 2415 m 4844 2385 l 4724 2355 l 4724 2415 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+4724 2640 m 4880 2640 l 4880 2580 l 4724 2580 l 4724 2580 l 4844 2610 l 4724 2640 l cp
+eoclip
+n 4095 2610 m
+ 4860 2610 l gs col0 s gr gr
+
+% arrowhead
+n 4724 2640 m 4844 2610 l 4724 2580 l 4724 2640 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+6749 1965 m 6905 1965 l 6905 1905 l 6749 1905 l 6749 1905 l 6869 1935 l 6749 1965 l cp
+eoclip
+n 6120 1935 m
+ 6885 1935 l gs col0 s gr gr
+
+% arrowhead
+n 6749 1965 m 6869 1935 l 6749 1905 l 6749 1965 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+6749 2190 m 6905 2190 l 6905 2130 l 6749 2130 l 6749 2130 l 6869 2160 l 6749 2190 l cp
+eoclip
+n 6120 2160 m
+ 6885 2160 l gs col0 s gr gr
+
+% arrowhead
+n 6749 2190 m 6869 2160 l 6749 2130 l 6749 2190 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+6749 2415 m 6905 2415 l 6905 2355 l 6749 2355 l 6749 2355 l 6869 2385 l 6749 2415 l cp
+eoclip
+n 6120 2385 m
+ 6885 2385 l gs col0 s gr gr
+
+% arrowhead
+n 6749 2415 m 6869 2385 l 6749 2355 l 6749 2415 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+6749 2640 m 6905 2640 l 6905 2580 l 6749 2580 l 6749 2580 l 6869 2610 l 6749 2640 l cp
+eoclip
+n 6120 2610 m
+ 6885 2610 l gs col0 s gr gr
+
+% arrowhead
+n 6749 2640 m 6869 2610 l 6749 2580 l 6749 2640 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+6749 2865 m 6905 2865 l 6905 2805 l 6749 2805 l 6749 2805 l 6869 2835 l 6749 2865 l cp
+eoclip
+n 4095 2835 m
+ 6885 2835 l gs col0 s gr gr
+
+% arrowhead
+n 6749 2865 m 6869 2835 l 6749 2805 l 6749 2865 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+6749 3090 m 6905 3090 l 6905 3030 l 6749 3030 l 6749 3030 l 6869 3060 l 6749 3090 l cp
+eoclip
+n 4095 3060 m
+ 6885 3060 l gs col0 s gr gr
+
+% arrowhead
+n 6749 3090 m 6869 3060 l 6749 3030 l 6749 3090 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+6749 3540 m 6905 3540 l 6905 3480 l 6749 3480 l 6749 3480 l 6869 3510 l 6749 3540 l cp
+eoclip
+n 4095 3510 m
+ 6885 3510 l gs col0 s gr gr
+
+% arrowhead
+n 6749 3540 m 6869 3510 l 6749 3480 l 6749 3540 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+6749 3315 m 6905 3315 l 6905 3255 l 6749 3255 l 6749 3255 l 6869 3285 l 6749 3315 l cp
+eoclip
+n 4095 3285 m
+ 6885 3285 l gs col0 s gr gr
+
+% arrowhead
+n 6749 3315 m 6869 3285 l 6749 3255 l 6749 3315 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+6749 3765 m 6905 3765 l 6905 3705 l 6749 3705 l 6749 3705 l 6869 3735 l 6749 3765 l cp
+eoclip
+n 4095 3735 m
+ 6885 3735 l gs col0 s gr gr
+
+% arrowhead
+n 6749 3765 m 6869 3735 l 6749 3705 l 6749 3765 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+6749 3990 m 6905 3990 l 6905 3930 l 6749 3930 l 6749 3930 l 6869 3960 l 6749 3990 l cp
+eoclip
+n 4095 3960 m
+ 6885 3960 l gs col0 s gr gr
+
+% arrowhead
+n 6749 3990 m 6869 3960 l 6749 3930 l 6749 3990 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+6749 4215 m 6905 4215 l 6905 4155 l 6749 4155 l 6749 4155 l 6869 4185 l 6749 4215 l cp
+eoclip
+n 4095 4185 m
+ 6885 4185 l gs col0 s gr gr
+
+% arrowhead
+n 6749 4215 m 6869 4185 l 6749 4155 l 6749 4215 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+6749 4440 m 6905 4440 l 6905 4380 l 6749 4380 l 6749 4380 l 6869 4410 l 6749 4440 l cp
+eoclip
+n 4095 4410 m
+ 6885 4410 l gs col0 s gr gr
+
+% arrowhead
+n 6749 4440 m 6869 4410 l 6749 4380 l 6749 4440 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+6749 4665 m 6905 4665 l 6905 4605 l 6749 4605 l 6749 4605 l 6869 4635 l 6749 4665 l cp
+eoclip
+n 4095 4635 m
+ 6885 4635 l gs col0 s gr gr
+
+% arrowhead
+n 6749 4665 m 6869 4635 l 6749 4605 l 6749 4665 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+6749 4890 m 6905 4890 l 6905 4830 l 6749 4830 l 6749 4830 l 6869 4860 l 6749 4890 l cp
+eoclip
+n 4095 4860 m
+ 6885 4860 l gs col0 s gr gr
+
+% arrowhead
+n 6749 4890 m 6869 4860 l 6749 4830 l 6749 4890 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+6749 5115 m 6905 5115 l 6905 5055 l 6749 5055 l 6749 5055 l 6869 5085 l 6749 5115 l cp
+eoclip
+n 4095 5085 m
+ 6885 5085 l gs col0 s gr gr
+
+% arrowhead
+n 6749 5115 m 6869 5085 l 6749 5055 l 6749 5115 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+gs clippath
+6749 5340 m 6905 5340 l 6905 5280 l 6749 5280 l 6749 5280 l 6869 5310 l 6749 5340 l cp
+eoclip
+n 4095 5310 m
+ 6885 5310 l gs col0 s gr gr
+
+% arrowhead
+n 6749 5340 m 6869 5310 l 6749 5280 l 6749 5340 l cp gs col7 1.00 shd ef gr col0 s
+/Times-Roman ff 285.75 scf sf
+3375 3555 m
+gs 1 -1 sc 90.0 rot (Virtual Address \(CPU\)) dup sw pop 2 div neg 0 rm col0 sh gr
+/Times-Roman ff 285.75 scf sf
+7875 3555 m
+gs 1 -1 sc 90.0 rot (Real Address \(BUS\)) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 349.25 scf sf
+5535 2340 m
+gs 1 -1 sc (MMU) dup sw pop 2 div neg 0 rm col0 sh gr
+% here ends figure;
+pagefooter
+showpage
+%%Trailer
+%EOF
diff --git a/doc/report/res/mmu_addr.fig b/doc/report/res/mmu_addr.fig
new file mode 100644
index 0000000..27963a2
--- /dev/null
+++ b/doc/report/res/mmu_addr.fig
@@ -0,0 +1,182 @@
+#FIG 3.2 Produced by xfig version 3.2.6a
+Portrait
+Center
+Metric
+A4
+100.00
+Single
+-2
+1200 2
+6 3555 1755 4095 5445
+6 3555 1755 4095 5445
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3600 2700 4050 2700
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3600 2475 4050 2475
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3600 2250 4050 2250
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3600 2025 4050 2025
+2 2 0 2 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 3600 1800 4050 1800 4050 5400 3600 5400 3600 1800
+4 1 0 50 -1 5 12 0.0000 0 120 360 3825 1980 A15\001
+4 1 0 50 -1 5 12 0.0000 0 120 360 3825 2205 A14\001
+4 1 0 50 -1 5 12 0.0000 0 120 360 3825 2430 A13\001
+4 1 0 50 -1 5 12 0.0000 0 120 360 3825 2655 A12\001
+4 1 0 50 -1 5 12 0.0000 0 120 360 3825 2880 A11\001
+-6
+6 3600 2925 4050 3105
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3600 2925 4050 2925
+4 1 0 50 -1 5 12 0.0000 0 120 360 3825 3105 A10\001
+-6
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 4050 3150 3600 3150
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3600 3375 4050 3375
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 4050 3600 3600 3600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3600 3825 4050 3825
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 4050 4050 3600 4050
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 4050 4275 3600 4275
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3600 4500 4050 4500
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 4050 4725 3600 4725
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3600 4950 4050 4950
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 4050 5175 3600 5175
+4 1 0 50 -1 5 12 0.0000 0 120 240 3825 3330 A9\001
+4 1 0 50 -1 5 12 0.0000 0 120 240 3825 3555 A8\001
+4 1 0 50 -1 5 12 0.0000 0 120 240 3825 3780 A7\001
+4 1 0 50 -1 5 12 0.0000 0 120 240 3825 4005 A6\001
+4 1 0 50 -1 5 12 0.0000 0 120 240 3825 4230 A5\001
+4 1 0 50 -1 5 12 0.0000 0 120 240 3825 4455 A4\001
+4 1 0 50 -1 5 12 0.0000 0 120 240 3825 4680 A3\001
+4 1 0 50 -1 5 12 0.0000 0 120 240 3825 4905 A2\001
+4 1 0 50 -1 5 12 0.0000 0 120 240 3825 5130 A1\001
+4 1 0 50 -1 5 12 0.0000 0 120 240 3825 5355 A0\001
+-6
+6 6930 1755 7470 5445
+6 6930 1755 7470 5445
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 6975 2700 7425 2700
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 6975 2475 7425 2475
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 6975 2250 7425 2250
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 6975 2025 7425 2025
+2 2 0 2 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 6975 1800 7425 1800 7425 5400 6975 5400 6975 1800
+4 1 0 50 -1 5 12 0.0000 0 120 360 7200 1980 A15\001
+4 1 0 50 -1 5 12 0.0000 0 120 360 7200 2205 A14\001
+4 1 0 50 -1 5 12 0.0000 0 120 360 7200 2430 A13\001
+4 1 0 50 -1 5 12 0.0000 0 120 360 7200 2655 A12\001
+4 1 0 50 -1 5 12 0.0000 0 120 360 7200 2880 A11\001
+-6
+6 6975 2925 7425 3105
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 6975 2925 7425 2925
+4 1 0 50 -1 5 12 0.0000 0 120 360 7200 3105 A10\001
+-6
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 7425 3150 6975 3150
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 6975 3375 7425 3375
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 7425 3600 6975 3600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 6975 3825 7425 3825
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 7425 4050 6975 4050
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 7425 4275 6975 4275
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 6975 4500 7425 4500
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 7425 4725 6975 4725
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 6975 4950 7425 4950
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 7425 5175 6975 5175
+4 1 0 50 -1 5 12 0.0000 0 120 240 7200 3330 A9\001
+4 1 0 50 -1 5 12 0.0000 0 120 240 7200 3555 A8\001
+4 1 0 50 -1 5 12 0.0000 0 120 240 7200 3780 A7\001
+4 1 0 50 -1 5 12 0.0000 0 120 240 7200 4005 A6\001
+4 1 0 50 -1 5 12 0.0000 0 120 240 7200 4230 A5\001
+4 1 0 50 -1 5 12 0.0000 0 120 240 7200 4455 A4\001
+4 1 0 50 -1 5 12 0.0000 0 120 240 7200 4680 A3\001
+4 1 0 50 -1 5 12 0.0000 0 120 240 7200 4905 A2\001
+4 1 0 50 -1 5 12 0.0000 0 120 240 7200 5130 A1\001
+4 1 0 50 -1 5 12 0.0000 0 120 240 7200 5355 A0\001
+-6
+2 2 0 2 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 4950 1800 6075 1800 6075 2700 4950 2700 4950 1800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 4095 1935 4860 1935
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 4095 2160 4860 2160
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 4095 2385 4860 2385
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 4095 2610 4860 2610
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 6120 1935 6885 1935
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 6120 2160 6885 2160
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 6120 2385 6885 2385
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 6120 2610 6885 2610
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 4095 2835 6885 2835
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 4095 3060 6885 3060
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 4095 3510 6885 3510
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 4095 3285 6885 3285
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 4095 3735 6885 3735
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 4095 3960 6885 3960
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 4095 4185 6885 4185
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 4095 4410 6885 4410
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 4095 4635 6885 4635
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 4095 4860 6885 4860
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 4095 5085 6885 5085
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+ 1 0 1.00 60.00 120.00
+ 4095 5310 6885 5310
+4 1 0 50 -1 0 18 1.5708 0 270 2835 3375 3555 Virtual Address (CPU)\001
+4 1 0 50 -1 0 18 1.5708 0 270 2505 7875 3555 Real Address (BUS)\001
+4 1 0 50 -1 5 22 0.0000 0 210 630 5535 2340 MMU\001
diff --git a/doc/report/res/mmu_ram_map.eps b/doc/report/res/mmu_ram_map.eps
new file mode 100644
index 0000000..112d48d
--- /dev/null
+++ b/doc/report/res/mmu_ram_map.eps
@@ -0,0 +1,229 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: /home/naopross/docs/projects/z80uPC/doc/report/res/mmu_ram_map.fig
+%%Creator: fig2dev Version 3.2.6
+%%CreationDate: Fri Nov 10 15:18:07 2017
+%%BoundingBox: 0 0 488 259
+%Magnification: 1.0000
+%%EndComments
+%%BeginProlog
+/MyAppDict 100 dict dup begin def
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+
+end
+
+% left45
+<<
+ /PatternType 1
+ /PaintType 2
+ /TilingType 2
+ /BBox [-1 -1 9 9]
+ /XStep 8
+ /YStep 8
+ /PaintProc
+ {
+ pop
+ newpath
+ 1 setlinewidth
+ -1 9 moveto
+ 9 -1 lineto
+ stroke
+ } bind
+
+>>
+
+matrix
+makepattern
+/P4 exch def
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+/pageheader {
+save
+newpath 0 259 moveto 0 0 lineto 488 0 lineto 488 259 lineto closepath clip newpath
+-225.8 369.9 translate
+1 -1 scale
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+} bind def
+/pagefooter {
+$F2psEnd
+restore
+} bind def
+%%EndProlog
+pageheader
+%
+% Fig objects follow
+%
+%
+% here starts figure with depth 50
+/Times-Roman ff 873.13 scf sf
+6345 4275 m
+gs 1 -1 sc (}) col0 sh gr
+/Times-Roman ff 254.00 scf sf
+6795 4140 m
+gs 1 -1 sc (Program A) col0 sh gr
+/Times-Roman ff 873.13 scf sf
+6345 5220 m
+gs 1 -1 sc (}) col0 sh gr
+/Times-Roman ff 254.00 scf sf
+6840 5040 m
+gs 1 -1 sc (Program B) col0 sh gr
+% Polyline
+0 slj
+0 slc
+15.000 slw
+n 6570 2295 m 6795 2295 l 6795 2520 l 6570 2520 l
+ cp
+% Fill with pattern background color
+gs /DeviceRGB setcolorspace 1.00 1.00 1.00 setcolor fill gr
+
+% Fill with pattern pen color
+gs /DeviceRGB setcolorspace 0.00 0.00 0.00 P4 setpattern fill gr
+
+gs col0 s gr
+/Times-Roman ff 254.00 scf sf
+6975 2520 m
+gs 1 -1 sc (Kernel) col0 sh gr
+/Times-Roman ff 254.00 scf sf
+6975 2835 m
+gs 1 -1 sc (Reserved) col0 sh gr
+% Arc
+7.500 slw
+gs clippath
+9409 4408 m 9485 4272 l 9433 4242 l 9357 4379 l 9357 4379 l 9442 4289 l 9409 4408 l cp
+eoclip
+n 8347.5 3730.5 1229.6 26.2837 97.3591 arc
+gs col0 s gr
+ gr
+
+% arrowhead
+n 9409 4408 m 9442 4289 l 9357 4379 l 9409 4408 l cp gs col7 1.00 shd ef gr col0 s
+% Polyline
+n 4500 4950 m
+ 6300 4950 l gs col0 s gr
+% Polyline
+n 6300 4500 m
+ 4500 4500 l gs col0 s gr
+% Polyline
+n 4500 4050 m
+ 6300 4050 l gs col0 s gr
+% Polyline
+n 4500 2250 m 6300 2250 l 6300 3600 l 4500 3600 l
+ cp
+% Fill with pattern background color
+gs /DeviceRGB setcolorspace 1.00 1.00 1.00 setcolor fill gr
+
+% Fill with pattern pen color
+gs /DeviceRGB setcolorspace 0.00 0.00 0.00 P4 setpattern fill gr
+
+gs col0 s gr
+% Polyline
+n 4500 5400 m 6300 5400 l 6300 5850 l 4500 5850 l
+ cp
+% Fill with pattern background color
+gs /DeviceRGB setcolorspace 1.00 1.00 1.00 setcolor fill gr
+
+% Fill with pattern pen color
+gs /DeviceRGB setcolorspace 0.00 0.00 0.00 P4 setpattern fill gr
+
+gs col0 s gr
+% Polyline
+15.000 slw
+n 4500 2250 m 6300 2250 l 6300 5850 l 4500 5850 l
+ cp gs col0 s gr
+% Polyline
+7.500 slw
+n 8550 2700 m
+ 10350 2700 l gs col0 s gr
+% Polyline
+15.000 slw
+n 8550 4050 m 10350 4050 l 10350 2250 l 8550 2250 l
+ cp gs col0 s gr
+% Polyline
+7.500 slw
+n 8550 3600 m
+ 10350 3600 l gs col0 s gr
+% Polyline
+n 8550 3150 m
+ 10350 3150 l gs col0 s gr
+/Times-Roman ff 285.75 scf sf
+4500 2025 m
+gs 1 -1 sc (RAM) col0 sh gr
+/Courier ff 190.50 scf sf
+3600 3600 m
+gs 1 -1 sc (0xB000) col0 sh gr
+/Courier ff 190.50 scf sf
+3600 2250 m
+gs 1 -1 sc (0x8000) col0 sh gr
+/Courier ff 190.50 scf sf
+3600 5850 m
+gs 1 -1 sc (0xFFFF) col0 sh gr
+/Times-Roman ff 317.50 scf sf
+8505 2025 m
+gs 1 -1 sc (Program) col0 sh gr
+/Courier ff 222.25 scf sf
+9450 2565 m
+gs 1 -1 sc (DATA / BSS) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 222.25 scf sf
+9450 3870 m
+gs 1 -1 sc (STACK) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+10575 2250 m
+gs 1 -1 sc (0x0000) col0 sh gr
+/Courier ff 190.50 scf sf
+10575 4050 m
+gs 1 -1 sc (0x2000) col0 sh gr
+/Courier ff 222.25 scf sf
+9450 3015 m
+gs 1 -1 sc (HEAP) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 222.25 scf sf
+9450 3465 m
+gs 1 -1 sc (TEXT) dup sw pop 2 div neg 0 rm col0 sh gr
+/Courier ff 190.50 scf sf
+3600 4500 m
+gs 1 -1 sc (0xD000) col0 sh gr
+% here ends figure;
+pagefooter
+showpage
+%%Trailer
+end
+%EOF
diff --git a/doc/report/res/mmu_ram_map.fig b/doc/report/res/mmu_ram_map.fig
new file mode 100644
index 0000000..3c22a92
--- /dev/null
+++ b/doc/report/res/mmu_ram_map.fig
@@ -0,0 +1,57 @@
+#FIG 3.2 Produced by xfig version 3.2.6a
+Portrait
+Center
+Metric
+A4
+100.00
+Single
+-2
+1200 2
+5 1 0 1 0 7 50 -1 -1 0.000 0 0 0 1 8347.500 3730.500 9450 4275 8505 4950 8190 4950
+ 1 0 1.00 60.00 120.00
+6 6345 3645 8010 4455
+4 0 0 50 -1 0 55 0.0000 0 795 435 6345 4275 }\001
+4 0 0 50 -1 0 16 0.0000 0 240 1200 6795 4140 Program A\001
+-6
+6 6345 4590 8055 5400
+4 0 0 50 -1 0 55 0.0000 0 795 435 6345 5220 }\001
+4 0 0 50 -1 0 16 0.0000 0 240 1185 6840 5040 Program B\001
+-6
+6 6525 2250 8010 2835
+2 2 0 2 0 7 50 -1 44 0.000 0 0 -1 0 0 5
+ 6570 2295 6795 2295 6795 2520 6570 2520 6570 2295
+4 0 0 50 -1 0 16 0.0000 0 180 735 6975 2520 Kernel\001
+4 0 0 50 -1 0 16 0.0000 0 180 1005 6975 2835 Reserved\001
+-6
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 4500 4950 6300 4950
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 6300 4500 4500 4500
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 4500 4050 6300 4050
+2 2 0 1 0 7 50 -1 44 0.000 0 0 7 0 0 5
+ 4500 2250 6300 2250 6300 3600 4500 3600 4500 2250
+2 2 0 1 0 7 50 -1 44 0.000 0 0 -1 0 0 5
+ 4500 5400 6300 5400 6300 5850 4500 5850 4500 5400
+2 2 0 2 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 4500 2250 6300 2250 6300 5850 4500 5850 4500 2250
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 8550 2700 10350 2700
+2 2 0 2 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 8550 4050 10350 4050 10350 2250 8550 2250 8550 4050
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 8550 3600 10350 3600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 2
+ 8550 3150 10350 3150
+4 0 0 50 -1 0 18 0.0000 0 195 690 4500 2025 RAM\001
+4 0 0 50 -1 5 12 0.0000 0 120 720 3600 3600 0xB000\001
+4 0 0 50 -1 5 12 0.0000 0 120 720 3600 2250 0x8000\001
+4 0 0 50 -1 5 12 0.0000 0 120 720 3600 5850 0xFFFF\001
+4 0 0 50 -1 0 20 0.0000 0 300 1125 8505 2025 Program\001
+4 1 0 50 -1 5 14 0.0000 0 180 1500 9450 2565 DATA / BSS\001
+4 1 0 50 -1 5 14 0.0000 0 135 750 9450 3870 STACK\001
+4 0 0 50 -1 5 12 0.0000 0 120 720 10575 2250 0x0000\001
+4 0 0 50 -1 5 12 0.0000 0 120 720 10575 4050 0x2000\001
+4 1 0 50 -1 5 14 0.0000 0 135 600 9450 3015 HEAP\001
+4 1 0 50 -1 5 14 0.0000 0 135 600 9450 3465 TEXT\001
+4 0 0 50 -1 5 12 0.0000 0 120 720 3600 4500 0xD000\001
diff --git a/doc/report/res/mmu_ram_map.fig.bak b/doc/report/res/mmu_ram_map.fig.bak
new file mode 100644
index 0000000..f62f655
--- /dev/null
+++ b/doc/report/res/mmu_ram_map.fig.bak
@@ -0,0 +1,57 @@
+#FIG 3.2 Produced by xfig version 3.2.6a
+Portrait
+Center
+Metric
+A4
+100.00
+Single
+-2
+1200 2
+5 1 0 1 0 7 50 -1 -1 0.000 0 0 0 1 8347.500 3730.500 9450 4275 8505 4950 8190 4950
+ 1 0 1.00 60.00 120.00
+6 6345 3645 8010 4455
+4 0 0 50 -1 0 55 0.0000 0 795 435 6345 4275 }\001
+4 0 0 50 -1 0 16 0.0000 0 240 1200 6795 4140 Program A\001
+-6
+6 6345 4590 8055 5400
+4 0 0 50 -1 0 55 0.0000 0 795 435 6345 5220 }\001
+4 0 0 50 -1 0 16 0.0000 0 240 1185 6840 5040 Program B\001
+-6
+6 6525 2250 8010 2835
+2 2 0 2 0 7 50 -1 44 0.000 0 0 -1 0 0 5
+ 6570 2295 6795 2295 6795 2520 6570 2520 6570 2295
+4 0 0 50 -1 0 16 0.0000 0 180 735 6975 2520 Kernel\001
+4 0 0 50 -1 0 16 0.0000 0 180 1005 6975 2835 Reserved\001
+-6
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 4500 4950 6300 4950
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 6300 4500 4500 4500
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 4500 4050 6300 4050
+2 2 0 1 0 7 50 -1 44 0.000 0 0 7 0 0 5
+ 4500 2250 6300 2250 6300 3600 4500 3600 4500 2250
+2 2 0 1 0 7 50 -1 44 0.000 0 0 -1 0 0 5
+ 4500 5400 6300 5400 6300 5850 4500 5850 4500 5400
+2 2 0 2 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 4500 2250 6300 2250 6300 5850 4500 5850 4500 2250
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 8550 2700 10350 2700
+2 2 0 2 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 8550 4050 10350 4050 10350 2250 8550 2250 8550 4050
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 8550 3600 10350 3600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 2
+ 8550 3150 10350 3150
+4 0 0 50 -1 0 18 0.0000 0 195 690 4500 2025 RAM\001
+4 0 0 50 -1 5 12 0.0000 0 120 720 3600 3600 0xB000\001
+4 0 0 50 -1 5 12 0.0000 0 120 720 3600 2250 0x8000\001
+4 0 0 50 -1 5 12 0.0000 0 120 720 3600 4500 0xE000\001
+4 0 0 50 -1 5 12 0.0000 0 120 720 3600 5850 0xFFFF\001
+4 0 0 50 -1 0 20 0.0000 0 300 1125 8505 2025 Program\001
+4 1 0 50 -1 5 14 0.0000 0 180 1500 9450 2565 DATA / BSS\001
+4 1 0 50 -1 5 14 0.0000 0 135 750 9450 3870 STACK\001
+4 0 0 50 -1 5 12 0.0000 0 120 720 10575 2250 0x0000\001
+4 0 0 50 -1 5 12 0.0000 0 120 720 10575 4050 0x2000\001
+4 1 0 50 -1 5 14 0.0000 0 135 600 9450 3015 HEAP\001
+4 1 0 50 -1 5 14 0.0000 0 135 600 9450 3465 TEXT\001
diff --git a/doc/report/z80uPC.tex b/doc/report/z80uPC.tex
deleted file mode 100644
index 50034ec..0000000
--- a/doc/report/z80uPC.tex
+++ /dev/null
@@ -1,307 +0,0 @@
-\documentclass[a4paper, 11pt, twoside]{article}
-
-\usepackage{array}
-\usepackage{float}
-\usepackage{wrapfig}
-
-% source code
-\usepackage{listings}
-
-% set correct hypenation
-\usepackage[italian]{babel}
-
-% set margins
-\usepackage[
- inner=2.5cm,
- outer=2.5cm,
- top=3cm,
- bottom=3.75cm
-]{geometry}
-
-% set headers
-\usepackage{fancyhdr}
-\pagestyle{fancyplain}
-\fancyhf{}
-\setlength{\headheight}{1.3cm}
-\rhead{\includegraphics[height=1.25cm]{res/logo_sam}}
-\lfoot{SAM 3E - Naoki Pross}
-\rfoot{\thepage}
-
-% set font
-\usepackage{fontspec}
-\setmainfont{Roboto}
-\setmonofont{Roboto Mono}
-
-% to fix macros
-\usepackage{xspace}
-% commands
-% macro for project name
-\newcommand{\prj}{Z80μPC\xspace}
-
-% invert signal (not, active low)
-\newcommand{\inv}[1]{$\overline{\mbox{#1}}$}
-
-% metadata
-\title{\vspace{-1cm}\texttt{\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{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 sistemi
-integrati come i modelli SoC odierni. Le specifiche pi\`u importanti sono
-elencate a seguire.
-
-\begin{itemize}
- \item Architettura a 8 bit con bus a 16 bit, 64K indirizzi indirizzabili
- \item Registri a 16 bit per {\tt SP,PC} e registri di utilizzo generico a
- 8 bit {\tt A..F} combinabili a coppie {\tt AF,BC,..} per utilizzare
- valori a 16 bit
- \item Clock fino a 8 MHz
- \item Segnali di controllo tra cui \texttt{\inv{RD}, \inv{WR},
- \inv{IOREQ}, \inv{MREQ}} e \texttt{\inv{RST}}
- \item Interrupts mascherabili e non con vettore a 8 bit
-\end{itemize}
-
-\section{Architettura di base}
-Il minimo necessario per far funzionare un computer con lo Z80 sono una ROM e
-una RAM, ma per il mio progetto ho scelto di aggiungere dell'hardware
-aggiuntivo per lo sviluppo si sistemi pi\`u complessi per apprendere
-conoscenze sia nel mondo dell'elettronica che dell'informatica. Per questa
-ragione lo \prj possiede i seguienti componenti:
-
-\begin{center}
-\begin{tabular}{ >{\tt}l >{\tt\bfseries}l 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 che
- permette di essere programmato \\
- 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
-\end{tabular}
-\end{center}
-
-Oltre a tutto ci\`o per uno scopo formativo lo \prj dispone anche di strumenti
-da debug e analisi per comprendere ogni operazione del processore. Il modello
-di Z80 scelto \`e in grado di utilizzare un clock fino a 8MHz, ma non
-definisce un minimo dunque sono presenti 3 circuiti che generano 3 clock di
-velocit\`a differenti.
-
-\begin{center}
-\begin{tabular}{ >{\bfseries}r p{.8\linewidth} }
- 0Hz & Questo clock \`e un bottone che permette di creare
- manualmente le pulsazioni del clock, per poter analizzare
- ogni istruzione \\
- 200Hz & Mediante un classico circuito con un LM555 si ha un clock da
- 200Hz per eseguire i programmi a velocit\`a rallentata \\
- 4MHz & Clock per esecuzione a velocit\`a piena (normale)
-\end{tabular}
-\end{center}
-
-Una seconda disposizione per aiutare la comprensione del funzionamento del
-processore \`e data da 6 display a 7 segmenti che durante l'esecuzione
-rallentata o a step (bottone) visualizzano i bytes presenti sulla bus di
-indirizzi a 16 bit e sul bus di dati a 8 bit.
-
-\begin{figure}[!h] \centering
- \includegraphics[width=\linewidth]{res/bus_displays}
- \caption{Display a 7 segmenti per visualizzare il flusso di dati della
- CPU}
-\end{figure}
-
-\section{Memory Management Unit}
-
-Alcuni modelli successori dello Z8400 implementavano una MMU SoC che
-permetteva di indirizzare un address space di dimensione maggiore. Per lo \prj
-non necessito di un indirizzamento pi\`u grande ma piuttosto sono interessato
-dalle operazioni di gestione della memoria di una MMU simile a ci\`o che
-accade nelle architetture X86. Nelle architetture odierne basate sull'X86/64
-\`e presente un sistema di traslazione di indirizzi di memoria da virtuale a
-fisica. Con lo scopo di trarne solamente i vantaggi pi\`u fondamentali lo \prj
-implementa nella CPLD MMU un sistema basilare di gestione di pagine di memoria
-con traslazione di indirizzi in modo da poter allocare pi\`u programmi nella
-RAM anche se il sistema non implementa il multitasking.
-
-% TODO: write about this in more details
-
-\subsection{Address Space}
-
-\begin{wrapfigure}{r}{.4\linewidth} \centering
- \vspace{8mm}
- \includegraphics[width=.9\linewidth]{res/addrspace}
- \vspace{4mm}
- \caption{Address space dello \prj}
-\end{wrapfigure}
-La funzione primaria della MMU \`e di mappare i dispositivi I/O e le memorie
-nell'address space. Nell'implementazione reale la MMU controlla i segnali {\tt
-\inv{CS}} seguendo una logica combinatoria molto semplice che controlla se
-l'indirizzo sul bus si trova in una zona definita per un dispositivo.
-L'address space si presenta dunque nella seguente maniera, per cui la ROM
-occupa il primo quarto, i dispositivi mappabili il secondo quarto e la RAM la
-met\`a restante. Essendo un progetto pensato per essere esteso 16KB sono
-liberi per mappare dispositivi esterni collegati attraverso il connettore
-DIN41612.
-
-% \begin{wrapfigure}{l}{.4\linewidth} \centering
-% \includegraphics[width=.8\linewidth]{res/iospace}
-% \end{wrapfigure}
-
-\subsection{Page Table}
-
-Per poter controllare la traslazione degli indirizzi la MMU dispone di una
-Page Table a cui \`e possibile accedere attraversso un certo indirizzo
-nell'I/O space. La page table di 5 bit permette la gestione delle regioni di
-memoria da impostare per dei determinati processi. Questa funzione \`e
-importante perch\`e permette la separazione dello stack e della memoria della
-kernel dai programmi normali. Per lo \prj potrebbe sembrare eccessivo ma
-essendo uno strumento per apprendere le fondamenta dell'elettronica e
-dell'informatica \`e interessante implementare questa funzionalit\`a che
-comunque se necessario pu\`o essere disabilitata.
-
-\section{Schema a blocchi}
-
-\begin{figure}[!h] \centering
- \includegraphics[width=.85\linewidth]{res/block_diagram}
-\end{figure}
-
-\section{Software / Sistema operativo}
-
-Negli sviluppi pi\`u recenti intorno allo Z80 esso veniva utilizzato come un
-microcontrollore anzich\`e come processore da computer, per questa ragione non
-sono presenti molti sistemi operativi per questa piattaforma. Dunque per lo
-\prj il progetti implementa un sistema operativo soprannominato {\tt
-HelvetiOS} con le funzioni minime necessarie come un interfaccia seriale a
-comandi e un meccanismo per caricare i programmi.
-
-\subsection{Componenti di base}
-
-Per garantire un funzionamento minimo il sistema {\tt HelvetiOS} deve offrire
-drivers e utility di base quali:
-
-\begin{center}
-\begin{minipage}[t]{.4\linewidth}
- \begin{itemize}
- \item USART driver and API
- \item PIO driver and API
- \item CTC driver and API
- \end{itemize}
-\end{minipage}%
-\begin{minipage}[t]{.4\linewidth}
- \begin{itemize}
- \item Bootloader
- \item Program launcher
- \item Shell-like interface
- \end{itemize}
-\end{minipage}
-\end{center}
-
-\subsection{Interfacce dell'API}
-
-Nel corso dello sviluppo questa sezione verr\`a continuamente espansa per
-documentare le interfacce dei vari drivers.
-
-\subsubsection{USART}
-\begin{lstlisting}[language=C, basicstyle=\ttfamily]
-void usart_set_baudrate(uint16_t baudrate);
-void usart_set_parity(int mode);
-void usart_set_stop_bits(int count);
-void usart_set_word_length(int length);
-void usart_set_autoflow(int mode);
-
-inline void usart_init(uint16_t baudrate, int parity, int stop_bits);
-
-void usart_transmit(uint8_t data);
-uint8_t usart_receive();
-
-int usart_write(uint8_t *data, size_t size);
-int usart_read(uint8_t *buffer, size_t count);
-\end{lstlisting}
-
-% \subsection{PIO}
-
-\subsection{Toolchain per la compilazione}
-
-Per compilare il software del progetto si utilizza SDCC, un progetto
-open-source che supporta la compilazione di binari per l'architettura dello
-Z80. Nella mia configurazione utilizzo GNU make con il seguente makefile.
-
-\newpage
-\begin{lstlisting}[language=make, numbers=left, basicstyle=\ttfamily]
-####
-# Source code settings
-#
-OSNAME := helvetiOS
-
-CSOURCES := $(wildcard kernel/*.c) $(wildcard libc/*.c)
-OBJECTS := $(patsubst %.c,build/%.rel,$(CSOURCES))
-HEXFILE := build/$(OSNAME).hex
-BINARY := build/$(OSNAME).bin
-
-###
-# Compiler settings
-
-CC := sdcc
-
-CFLAGS := -mz80 \
- -I kernel/include -I libc/include -DDEBUG
-
-LDFLAGS := -mz80 --no-std-crt0 crt0.rel \
- --code-loc 0x0800 --data-loc 0x8000
-
-.PHONY: dirs dis clean
-all: $(BINARY)
-
-# build binary
-$(BINARY): $(OBJECTS) dirs
- $(CC) $(LDFLAGS) $(OBJECTS) -o $(HEXFILE)
- xxd -r -p $(HEXFILE) $(BINARY)
-
-$(OBJECTS): build/%.rel : %.c $(CSOURCES) dirs crt0.rel
- $(CC) $(CFLAGS) -c $< -o $@
-
-crt0.rel: crt0.s
- sdasz80 -o $<
-
-dirs:
- mkdir -p build build/kernel build/libc
-
-dis: $(BINARY)
- z80dasm -a -g 0h $< -o $(OSNAME).s
-
-clean:
- - rm -rd build/*
- - rm $(OSNAME).s
- - rm crt0.rel
-\end{lstlisting}
-
-\end{document}
diff --git a/doc/report/z80uPC_nostyle.tex b/doc/report/z80uPC_nostyle.tex
index fe9fa23..569e665 100644
--- a/doc/report/z80uPC_nostyle.tex
+++ b/doc/report/z80uPC_nostyle.tex
@@ -1,5 +1,14 @@
\documentclass[a4paper, 11pt]{article}
+% draftwatermark
+\usepackage{draftwatermark}
+\SetWatermarkText{\tt DRAFT}
+\SetWatermarkLightness{.8}
+\SetWatermarkScale{10}
+
+% urls
+\usepackage{url}
+
% figures
\usepackage{array}
\usepackage{float}
@@ -80,6 +89,10 @@
\end{abstract}
\break
+\tableofcontents
+\break
+
+%-----------------------------------------------------------------------------
\section{Hardware}
\subsection{Specifiche tecniche dello Z80}
@@ -121,7 +134,7 @@ Il minimo necessario per far funzionare uno Z80 sono una {\tt RAM} ed una
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
+\begin{table}[h!]\centering
\caption{Lista dei componenti}
\begin{tabular}{ >{\tt}p{.1\textwidth} >{\tt\bfseries}p{.2\textwidth} >{\footnotesize}p{.6\textwidth} }
\toprule
@@ -156,7 +169,16 @@ vedere in tempo reale i valori sui bus degli indirizzi e dei dati.
\end{tabular}
\end{center}
+\subsection{Schema a blocchi}
+\begin{figure}[H]
+ \centering
+ \includegraphics[width=\textwidth]{res/block_diagram}
+ \caption{Schema a blocchi del \prj}
+\end{figure}
+
+% TODO
\subsubsection{Implementazione dei generatori di clocks}
+
\subsubsection{Uscite verso l'esterno (DIN 41612)}
Per poter estendere lo \prj a lato \`e presente un connettore {\tt DIN 41612}
per poter interfacciare schede di estensione della funzionali\`a siccome il
@@ -192,20 +214,79 @@ la parte di address space in cui \`e previsto di mappare dispositivi esterni.
\end{tabu}}
\end{table}
+% TODO
+\subsection{Address space}
+L'address space dello z80 \`e in grado di indirizzare 64 KB; la met\`a di
+questi \`e assegnata alla RAM e un quarto \`e della ROM. La ROM \`e minore
+della RAM perch\'e \`e intesa per essere un bootloader piuttosto che un vero e
+proprio OS.
+% TODO: redraw with xfig
+\begin{figure}[H]
+\centering
+\includegraphics[height=8cm]{res/addrspace}
+\end{figure}
\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.
+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. Lo \prj per\`o cerca di imitare 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. La conseguenza di questo design implica
+per\`o che sia introdotto anche il concetto di \emph{virtual address space}
+siccome, potendo reindirizzare a piacimento gli indirizzi, diventa possibile e
+conveniente offrire ai programmi eseguiti la stessa struttura di memoria
+indipendentemente dalla loro vera locazione in memoria.
+
+La struttura designata per il progetto \`e la seguente. \`E resa possibile
+solamente l'esecuzione di 2 programmi semi-paralleli, perch\`e
+l'implementazione di uno scheduler \`e troppo complessa con il CTC a
+disposizione. Si pu\`o quindi avviare due programmi ma solamente uno \`e in
+esecuzione ed utilizza il 100\% del tempo della CPU. Purtroppo le limitazioni
+di questo design non permettono di offrire funzionalit\`a importanti della
+kernel, ma in un futuro si potrebbe risolvere il problema estendendo la
+piattaforma. Infatti grandi spazi dell'iospace sono stati lasciati liberi per
+l'aggiunta di dispositivi esterni.
+
+\begin{figure}[h!]
+ \centering
+ \includegraphics[height=5cm]{res/mmu_ram_map}
+\end{figure}
+
+I due programmi in `esecuzione' sono salvati nella RAM alle locazioni {\tt
+0xB000} e {\tt 0xD0000} con 8 KB di RAM per uno. Per passare da un programma
+all'altro la kernel offre delle system calls che modificano la \emph{page
+table} all'interno della MMU in maniera da mappare l'indirizzo {\tt B000} o
+{\tt D000} a {\tt 0000}.
+
+\begin{figure}[h!]
+\centering
+\begin{minipage}[c]{.45\textwidth} \centering
+ \includegraphics[width=\linewidth]{res/mmu_addr}
+\end{minipage}%
+\begin{minipage}[c]{.45\textwidth} \centering
+\begin{verbatim}
+ Example program running
+ at address 0xB000
+
+ Virtual address
+ LD (#0x1200), #0xFE
+
+ Real Instruction
+ LD (#0xC200), #0xFE
+\end{verbatim}
+\end{minipage}
+\end{figure}
-Il concetto di pagine (pages in inglese) \`e necessario per sistemi con un
-supporto per il multitasking o per poter ampliare la memoria dinamica.
+Naturalmente ci\`o significa che il programma non ha l'accesso all'iospace,
+perci\`o per le operazioni con i dispositivi \`e necessario implementare un
+driver nella kernel. Nel caso in cui si volesse creare dei drivers userspace la
+kernel dovr\`a mettere a disposizione delle system calls che permettano di
+modificare la page table in maniera indiretta.
\break
+%-----------------------------------------------------------------------------
\section{Software}
\subsection{Organizzazione del codice sorgente C}
Il codice sorgente dell'intero progetto \`e contenuto nella cartella {\tt
@@ -235,23 +316,25 @@ $ sdcc -mz80 -pedantic --no-std-crt0 <crt0> \
-I. -c <source_file> -o <object_file>
\end{verbatim}
In cui {\tt <source\_file>} \`e il documento con il codice sorgente e {\tt
-<object\_file>} \`e il nome dell'object (solitamente lo stesso del sorgente
-con l'estensione {\tt .o}). Mentre per linkare gli objects e generare un
-eseguibile si utilizza
+<object\_file>} \`e il nome dell'object (solitamente lo stesso del sorgente con
+l'estensione {\tt .o}). La flag {\tt --allow-unsafe-read} \`e permessa
+solamente nella compilazione per Z80 e serve ad indicare al compiler che le
+letture da locazioni arbitrarie di memoria sono ammesse (normalmente non lo
+sono). Per linkare gli objects e generare un eseguibile si utilizza
\begin{verbatim}
$ sdcc -mz80 --no-std-crt0 <crt0> \
--code-loc=<addr> <objects> -o <hexfile>
$ makebin -s <rom_size> -yo 1 -ya 1 <hexfile> <binary>
\end{verbatim}
-Gli argomenti {\tt -yo 1 -ya 1} specificano rispettivamente il numero di
-banchi di ROM e di RAM.
+Le flags {\tt -yo 1 -ya 1} specificano rispettivamente il numero di banchi di
+ROM e di RAM.
\subsection{CRT0 per lo Z80}
-In C il CRT0 \`e un insieme di routines che vengono eseguite prima del codice
-C che servono ad inizializzare il sistema. Nel caso dello \prj \`e utilizzato
-per inizializzare lo stack pointer e per organizzare i settori dell'eseguibile.
-Un esempio di crt0 utilizzato per il progetto:
+In C il CRT0 \`e un insieme di routines che vengono eseguite prima del codice C
+che servono ad inizializzare il sistema. Nel caso dello \prj \`e utilizzato per
+inizializzare lo stack pointer e per indicare al linker come organizzare i
+settori dell'eseguibile. Un esempio di crt0 utilizzato per il progetto:
\lstset{escapechar=@,style=customasm}
\begin{lstlisting}
@@ -303,19 +386,24 @@ assembler per lo Z80, per esempio quello fornito in SDCC.\@
$ sdasz80 -o <crt0.s>
\end{verbatim}
-Quindi l'argomento {\tt --no-std-crt0 <crt0>} per il compiler descritto precedente non
-\`e assolutamente necessario ma \`e consigliato siccome permette di avere un
-controllo maggiore del contenuto dell'eseguibile.
+Quindi l'argomento {\tt --no-std-crt0 <crt0>} per il compiler descritto
+precedente non \`e assolutamente necessario ma \`e consigliato siccome permette
+di avere un controllo maggiore del contenuto dell'eseguibile.
\subsection{Codice sorgente VHDL}
Il codice sorgente in VHDL per la CPLD utilizzata come address decoder e MMU,
\`e contenuto nella cartella {\tt sw/cpld}. La toolchain utilizzata \`e quella
offerta da Lattice.
+% TODO
+\subsubsection{Programmazione della MMU}
+
+
\break
+%-----------------------------------------------------------------------------
\section*{Glossario Tecnico}
{\def\arraystretch{1.4}
-\begin{tabular}{ >{\bfseries}p{.3\linewidth} p{.7\linewidth} }
+\begin{tabular}{ >{\bfseries}p{.35\linewidth} p{.65\linewidth} }
Address Space & In informatica l'\emph{address space} \`e un intervallo di
indirizzi che possono corrispondere a indirizzi in rete, regioni di un
@@ -324,14 +412,49 @@ offerta da Lattice.
all'intervallo indirizzabile dal processore, ovvero \(2^{16}\) locazioni
siccome il sistema dispone di un bus a 16 bit. \\
+ Virtual Address Space & Il virtual address space \`e un livello di
+ astrazione che estende l'address space utilizzato nelle architetture
+ moderne (X86 / 64). In un sistema senza VAS, i programmi caricati in
+ memoria `vedono' l'indirizzo in cui si trovano e devono perci\`o essere
+ caricati in una regione di memoria continua. In un sistema con VAS invece
+ al programma figura sempre di avere l'intero address space disponibile per
+ se, e la MMU si occupa di traslare gli indirizzi virtuali in indirizzi
+ reali prima che essi raggiungano l'hardware. \\
+
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. \\
+
+ Toolchain & Da Wikipedia \cite{wiki:toolchain}: In ambito software, una
+ toolchain è l'insieme dei programmi (tools) usati nello sviluppo di un
+ prodotto (tipicamente un altro programma o sistema di programmi). I tool
+ possono essere utilizzati in catena, in modo tale che l'output di ciascun
+ tool rappresenti l'input per il successivo, ma il termine è utilizzato in
+ maniera più estesa per riferirsi, più in generale, a qualunque insieme di
+ tool di sviluppo collegati tra loro. \\
+
+ Stack Pointer,\newline Program Counter & Lo Stack Pointer \`e un registro a
+ 16 bit in cui \`e salvato l'indirizzo della fine (pi\`u in alto, ultimo
+ inserito) dello stack. Il program counter, un altro registro a 16 bit
+ contiene l'indirizzo da cui leggere della prossima istruzione da
+ eseguire.\\
+
\end{tabular}}
-\section*{Bibliografia}
+\begin{thebibliography}{2}
+\bibitem{wiki:toolchain}
+ \url{https://it.wikipedia.org/wiki/Toolchain}
+
+\bibitem{z80book}
+ \textbf{Paolo Di Leo},
+ Z80 Microcomputer didattico,
+ Gennaio 2016,
+ Libri SANDIT,
+ {\tt ISBN 978-88-6928-142-6}
+
+\end{thebibliography}
\end{document}