forked from hacknology/website
Größen aus Bildertags entfernt
parent
53397856aa
commit
3dfdaf6ab8
|
@ -9,7 +9,7 @@ image: HE32_Overview.png
|
|||
keywords: NAND2TETRIS, jack, hack
|
||||
---
|
||||
|
||||
{{< image alt="Showtime" src="HE32_Overview.png" size="1920x1080 q90">}}
|
||||
{{< image alt="Showtime" src="HE32_Overview.png">}}
|
||||
|
||||
## Motivation ##
|
||||
|
||||
|
@ -20,8 +20,8 @@ Dragon-Books erinnere (dort werden im Wesentlichen die Grundlagen für die Nutzu
|
|||
lex & yacc gelegt - heute: flex & bison). Ich habe damals nach ca. 3/4 des Buches aufgehört ...
|
||||
|
||||
<div class="pure-g">
|
||||
{{<image alt="Cover1" src="BookCover.jpg" size="400x240 q90" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
{{<image alt="Cover2" src="BookCoverOld.jpg" size="400x240 q90" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
{{< image alt="Cover1" src="BookCover.jpg" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
{{< image alt="Cover2" src="BookCoverOld.jpg" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
</div>
|
||||
|
||||
Das neuere Buch ist ursprünglich aus dem - in der angelsächsischen Welt - recht bekannten
|
||||
|
@ -71,19 +71,19 @@ im beigestellten Simulator mittels Testscript verifiziert.
|
|||
Das sieht dann ungefähr so aus:
|
||||
|
||||
<div class="pure-g">
|
||||
{{<image alt="HDL Code Sample" src="hdl_code.png" size="640x480 q90" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
{{<image alt="HDL Simulator" src="hdl_simulator.png" size="640x480 q90" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
{{< image alt="HDL Code Sample" src="hdl_code.png" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
{{< image alt="HDL Simulator" src="hdl_simulator.png" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
</div>
|
||||
|
||||
Der Befehlssatz en détail:
|
||||
|
||||
{{<image alt="IS Overview" src="hack_is.png" size="1024x640 q90">}}
|
||||
{{< image alt="IS Overview" src="hack_is.png" >}}
|
||||
|
||||
Hierfür ist ein Assembler zu erstellen, der als Output 16-Bit Code (als 'Binär-Text') generiert, z.Bsp. wie folgt:
|
||||
|
||||
<div class="pure-g">
|
||||
{{<image alt="Assembly Sample" src="asm_code.png" size="640x480 q90" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
{{<image alt="Machine Code Sample" src="machine_code.png" size="640x480 q90" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
{{< image alt="Assembly Sample" src="asm_code.png" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
{{< image alt="Machine Code Sample" src="machine_code.png" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
</div>
|
||||
|
||||
### 2.2 VM / IL ###
|
||||
|
@ -92,8 +92,8 @@ Zunächst macht man sich mit einer vordefinierten IL (Intermediate language) fü
|
|||
vertraut. Hierzu kann der beigestellte VM-Emulator genutzt werden:
|
||||
|
||||
<div class="pure-g">
|
||||
{{<image alt="VM Code Sample" src="vm_code.png" size="640x480 q90" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
{{<image alt="VM Emulator" src="vm_emulator.png" size="640x480 q90" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
{{< image alt="VM Code Sample" src="vm_code.png" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
{{< image alt="VM Emulator" src="vm_emulator.png" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
</div>
|
||||
|
||||
Als nächstes wird ein Übersetzer erstellt, von VM-Code zu Assembly Language. Wenn man diesen mit dem unter
|
||||
|
@ -107,17 +107,17 @@ Sogar Objekte können bereits angelegt werden!
|
|||
|
||||
Hier mal die formale Definition:
|
||||
|
||||
{{<image alt="Jack Grammar" src="jack_grammar.png" size="1920x1080 q90">}}
|
||||
{{< image alt="Jack Grammar" src="jack_grammar.png" >}}
|
||||
|
||||
Praktisch sieht der Code z.Bsp. so aus:
|
||||
|
||||
{{<image alt="Jack Code Sample" src="jack_code.png" size="640x480 q90" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
{{< image alt="Jack Code Sample" src="jack_code.png" >}}
|
||||
|
||||
Auch hierfür ist - unter Anleitung - ein Compiler zu erstellen. Dieser erzeugt aus Jack dann VM-Code:
|
||||
|
||||
<div class="pure-g">
|
||||
{{<image alt="Jack Code" src="jack_code_main.png" size="640x480 q90" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
{{<image alt="VM Code" src="vm_code_main.png" size="640x480 q90" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
{{< image alt="Jack Code" src="jack_code_main.png" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
{{< image alt="VM Code" src="vm_code_main.png" class="pure-u-1 pure-u-md-1-2" >}}
|
||||
</div>
|
||||
|
||||
Sieht doch gar nicht so kompliziert aus!
|
||||
|
@ -192,7 +192,7 @@ Nach einigen Performance-Optimierungen läuft der HE32 jetzt ganz passabel. Nur
|
|||
System-Bibliotheken anzupassen: In Math.multiply musste die Bitzahl erhöht werden und Sys.wait musste an
|
||||
die neue Abarbeitungsgeschwindigkeit angepasst werden.
|
||||
|
||||
{{<image alt="HE32 running Pong" src="he32_run_pong.png" size="1920x1080 q90">}}
|
||||
{{< image alt="HE32 running Pong" src="he32_run_pong.png" >}}
|
||||
|
||||
Die [Quellen zu HE32](https://git.hacknology.de/projekte/HE32) finden sich wie gehabt auf dem hacKNology git-server.
|
||||
|
||||
|
|
Loading…
Reference in New Issue