Was zeigt das Memory Map?

(keine rethorische Frage. Ich will es auch mir selbst erklären um es tatsächlich zu verinnerlichen)
Das Memory Map ist die Landkarte die zeigt wo im Computerspeicher sich welche Informationen oder Komponente befindet. Ein Computer ist aufgrund der technischen Umsetzung ein speicherorientiertes Gerät. Ein Computer kann verschiedene Speicherinhalte miteinander kombinieren und das Ergebnis solch einer Verknüpfungskombination widerum an einen Ort im Speicher ablegen. Was letztendes mit solch einem Ort noch in Verbindung steht, betrachten wir später. Ähnlich einer Landkarte die zeigt wo auf der Welt sich welche Waren oder Produktionsstätten befinden. 
 

Zahlen und deren Schreibweise

Betrachtet wird in diesem Abschnitt die Zahlen ohne Einheit, also z.B. 32768,bzw. HC000. Der Ort an der sich ein Datum befindet (gespeichert ist) wird hier als zählender Wert angegeben. Es nennt den 1sten, den 2ten oder dritten Ort, usw. Orte im Computer werden als Speicherstellen bezeichnet. Daher sind "einheitenlose" Werte, Zählpositionen von Speicherstellen. Im Computer wird z.B. gesagt: "Die Info XY findest Du an der 83zigsten Speicherstelle". Die Information zum Auffinden eines Datums wird in der Computerei als "Addresse" bezeichnet. Ähnlich der Adresse eines Mitmenschen dem man eine Postkarte schicken möchte. 
Der Wert, z.B. gerade eben diese 32768zigste Speicherstelle ist in unserem "uns gewohntem" Zehner-Zahlensystem ausgedrückt.

Zahlensysteme

In der Computerei schwirren verschiedene Zahlensysteme durch die Gegend. Je nach dem was man zum Ausdruck bringen möchte, bedient man sich eines dieser weiteren. 
 
Gewohnt sind wir das 10er Zahlensystem. Aus Indien kamen die Zahlen 1,2,3,4,5,6,7,8,9 nach Mesopotamien. Schlaue Gelehrte dort haben noch das "Null"-Element hinzugefügt. DIe Idee ist hier, dass man eine Tafel Schokolade hat. Man kann hier 1x Schokolade sagen. Isst man diese aber auf und ist diese weg,… wie schreibt man das dann? Dass Schokolade nicht existiert, nur weil man gerade keine hat, ist nicht richtig. Es fehlte also immer ein "Wert" der das "öhm.. da war halt was, was nicht mehr ist" repräsentiert. Das ist das Nullelement. Das Erfinden des Nullelements war die Geburtststunde des "Zählens". Man konnte also nicht nur bis 9 Zählen, sondern einen Schritt weiter, in dem die erste Zahl mit der 0 ergänzt worden war. Also 1,2,3,4,5,6,7,8,9,(1 von vorne)+0→ 10. Das Spiel geht weiter mit (1 von vorne)+1→11, (1 von vorne)+2→12 um letztendes nach der (1 von vorne)+9) die (2 von vorne)+0 zu nehmen also 20. Es sind 10 Stufen (Dezimale Zahlensystem).
In der Computerei legt die Elektrik "nur" zwei Stufen bereit. Entweder irgendwo fliesst Strom, oder es fliest keiner. Das sind zwei Zustände. Kein Strom ist 0 und Strom ist 1. Also würde man hier Zählen: Zuerst 0 dann 0 + 1 = 1 und dann 1 vorne wieder dran ähnlich der 2 für die zwanziger oder 3 für die dreisiger Danach 1 + 0 = 10 (nur die Auswahl der nach vorne zu legenden ist gering und macht es erst etwas schwer zu begreifen.
Danach 10 + 1 = 11 
Danach 11 + 1 = 110 Die Zahl 11 wird nicht als "elf" gelesen, sondern als "eins" "eins". Danach 110 + 1 = 111 Die Zahl 110 wird nicht als "hundertzehn" gelesen, sondern als "eins" "eins" "null". Danach 111 + 1 = 1000 Es sind also immer nur 2 Stufen → (Binäres Zahlensystem)
Von rechts nach links entstehen so die Exponenten 2^0, 2^1, 2^2, 2^3. 1,2,3 ist gezählt zur Basis 2 (Stufen) und demnach auch die Wertigkeit einzelner Positionen, die im "1" Zustand zusammenaddiert den tatsächlichen Wert der binär dargestellten Zahl ergeben.
Ein weiteres geläufiges Zahlensystem ist das Hexadezimale Zahlensystem (HEX) Hier gibt es 15 Ziffern mit denen gezählt wird, bevor einem die Zahlen ausgehen. Die ersten 9 sind wie im Zehner 1,2,3,4,5,6,7,8,9 und die restlichen 5 sind Buchstaben A,B,C,D,E,F, sowie der Schlüssel - das Nullelement 0. ALso 16 Stufen → hexa 
Hier wird gezählt: 1,2,3,4,5,6,7,8,9, < jetzt kommt noch nicht das "Nullelement" da wir noch weitere "Zahlen" haben), A,B,C,D,E,F,<und jetzt beginnt das Spiel mit dem Nullelement>, 10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F, <und wieder das Nulleement>, 20,21,22… usw. Hier haben wir also 16 Stufen bevor das Nullelement zuschlägt. 
Man spricht hier nicht 10 als "zehn" sondern als "hex" "eins" "null". Der Bezeichner "hex" leitet also das Verständnis ein, dass der folgende Wert dem "16er" (hexa) Zahlensystem zu Grunde liegt. Diese Werte werden oben im Memory Maps z.B. als HC000 angegeben. Das "H" bedeutet "hex" und der Rest der Wert dem 16er System zu Grunde liegende Zählwert C000.

Adressen von Speicherstellen

Wieviele Speicherorte, bzw. Addressen ein Computer kennt wird im folgenden betrachtet. Die Z80 CPU hat einen 16bit breiten Addressbus. Benannt A0…A15. In einem Computer sind tatsächlich 16er Bündel von Kabel, bzw. gedruckte Leitungen vorhanden, die mal stromführend sind und mal nicht. Daran angeschlossene elektronische Komponenten können mit diesen Leitungen für deren entsprechende Aufgabe umgehen. Sie machen aus den jeweiligen Strom-Da und kein Strom-Da - Kombinationen etwas für sich "sinnvolles" - was auch immer es ist.
Das sind 2^16 Adressen - oder dezimal ausgedrückt 65535 Adressen. Hinter jeder dieser 65535 Adressen liegt ein kleines Regal bereit, welche immer ein Datum (in der Computerei) oder eine Ware "beherbegen" kann. (Ich weiß noch nicht genau wozu ich dieses Parallele Beispiel anführe…)
 
Beachte Hier wird nur von 65535 Adressen gesprochen. Das ist "nur" die Anzahl der erreichbaren Adressen. Wie hoch letzenendes der Warenbestand also Lager-"Kapazität" an jeder Speicherstelle ist hängt davon ab wie breit das Regal an jeder einzelnen Position ist. Also Anzahl Lagerplätze mal breite mal höhe mal tiefe mal spezifisches Gewicht eines zu lagernden "etwas". Im Hochregallager ist das "etwas" Ware und im Computer ist es Information.

Daten an Speicheradressen

Weiter oben ist die Anzahl der maximal verfügbaren Adressen mit 65535 benannt worden. So grosse Zahlen sind manchmal etwas ungeschickt. Man kann diese Größen auch mit "Exponenten" beschreiben - ähnlich wie 1000 als 10*E3. Das dumme ist, dass EXP zur Basis 10 gehört und nicht zur Basis 2 wie im Computer genutzt. Entsinnt man sich dass 8 bit als ein Byte bezeichnet wird, und genauso auch 1024Byte als ein kByte, dann kann man die 65535 Speicherstellen als 64K bezeichnen. Beachte hier nur 64K. Nicht 64KB. 64K gibt die Anzahl der Verfügbaren Speicherstellen wieder. 
 
Betrachtet man eine Speicherstelle genauer so sieht man dass jede Speicherstelle 8bit breit ist. Das ist konstruktionsbedingt der CPU zu verdanken. Da die Z80 CPU ein 8 Bit Prozessor ist, ist es schlau jede einzelne Speicherzelle mit einem Regal zu versehen, welches 8Bit gleichzeitig lagern kann. Analog zum Adressbus, welcher mit 16 Kabelbündel aus dem Prozessor herausgeführt werden, so wird auch ein Kabelbündel mit 8 Leitungen herausgeführt. Dies ist der Datenbus. Er ist genauso breit wie die CPU in sich bearbeiten kann. 
Die Entwickler haben also 65535 8-bit breite Register gebaut die sich in RAM bzw. ROM Chips befinden.
Im Vorigen Absatz ist ebenso der Unterschied von Anzahl Speicherplätze zur Speicherkapazität genannt. Erst mit der Verknüpfung von Anzahl Speicherplätze * der Größe des abgelegten/eingelagerten Guts, entsteht die Kapazität. Hier stellt sich bei der Z80 CPU mit einem 16bit breiten Addressbus und mit 8bit breiten Informationen eine Gesamtkapazität von 64kByte heraus.

Unterschied ROM / RAM

Die CPU kann nun mittels dem Adressbus eine Speicheradresse im Speicher adressieren und mehr oder weniger zeitgleich ein Datum auf den Datenbus legen. Eine Komponente im Computersystem fühlt sich aufgrund der Adresse angesprochen und findet das an ihr adressierte Datenwort vor der Tür. Es kann diese aufnehmen und bei sich speichern.
Es gibt jedoch auch genauso häufig dass die CPU eine Speicheradresse adressiert und vom Adressaten ein Datenwort erwartet. In diese Fall fühlt sich ebenso eine Komponente im Computersystem verantwortlich und legt ein entsprechendes Datenwort auf den Datenbus. 
Es gibt Komponenten die ausschliesslich auf das "liefern" von Datenworten ausgelegt sind (ROM) und andererseits Komponenten die sowohl "liefern" als auch "speichern" können (RAM). 
Die Abkürzung ROM steht für "Read Only Memory" und RAM steht für "Random Access Memory".

Steuerbus und Takt

Nun stellt sich jedoch die Frage woher weiß eine Computerkomponente ob sie Daten vom Datenbus bei sich speichern oder Daten auf den Datenbus legen soll. Diese übernimmt eine weitere Leitung die von der CPU angesteuert wird und dadurch der Computerkomponente entsprechend signalisiert. Diese Leitung ist die Schreib/Leseleitung. Je nachdem ob diese Strom führt oder nicht verfährt die Komponente. 
Diese Leitung ist jedoch nur eine von einer handvoll Leitungen die gesonderte Funktionen an das, bzw. von Computerkomponenten Steuerinformationen tragen. Dieses Bündel an Leitungen nennt sich Steuerbus. 
Da die einzelnen Informationen mal gelesen und mal geschrieben werden, besteht zwischen diesen "malen" eine zeitliche Komponente. Ähnlich wie bei einer Uhr die eben für sich tickt und irgendwann sich die Komponente "Glocke" in Bewegung setzt. Dies ist der Systemtakt. Dieser hält alle Komponenten im System zeitlich synchron. 
Bei Computersystem die hier das Thema sind, betragen diese Takte zwischen 1 bis 14 MHz. Also 1 bis 14 Millionen Mal in der Sekunden gibt es Taktsignal. Ganz schön schnell. Aber nicht im Vergleich zu heutigen Computer die 300, bis 500 MHz an den Tag legen. 
Es soll noch vermerkt werden, dass in den 90zigern der Systemtakt der Takt war, in dem auch die CPU selbst angetrieben wurde, da diese prinzipiell wie ein Uhrwerk lief. Rechner von Heutzutage sind CPU intern ein vielfaches 4-6mal schneller, aber treffen den Systemtakt doch wieder wenn es darum geht andere Computerkomponten anzusprechen. Hier wird zwischen CPU Frequenz und Systembusfrequenz unterschieden. Aber das ist nicht das Thema.

Steuerung der CPU selbst

Eine Sache noch, bevor wir uns wieder dem ursprünglichen Thema Memory Map widmen. 
Die CPU steuert die Komponenten des Computersystems. Die CPU jedoch, kann ebenso von anderen Komponenten gesteuert werden. Die Z80 CPU hat eine Handvoll Anschlüsse die z.B. die CPU anhalten, oder signalisieren, dass die CPU ihre derzeitige Bearbeitungsschritte unterbrechen soll und dafür etwas anderes tun. Dies sind die sogenannten Interrupt Leitungen. Man sieht also dass ein Computersystem aus Komponenten besteht, die alle in sich geschlossene Systeme sind, jedoch nach aussen hin definierte Schnittstellen bereitsstellen und auch definiert angesprochen werden wollen.

von Neumann vs Harvard Architektur

Betrachten wir das obige Schaubild, so sehen wir dass bestimmte Bereiche für nur lesenden Zugriff und andere für den gemischten Betrieb (schreib/lese) definiert sind. Nur Lese Bereich sind z.B. das MSX Basic ROM. Die CPU kann aus diesem Bereich nur lesen. In der Mitte ca gibt es einen Userspace bereich, der zum Speichern von Programmanweisungen bzw. Daten genutzt wird. Das alles spielt sich jedoch in dem Bereich von 0 bis zur Adresse 65535 ab. Das bedeutet dass der gesamte verfügbare Adressraum gleichzeitig einmal für die Funktionsfähigkeit des Computersystem bezogene Daten, als auch für Daten ausreichen muß, die vom Anwender genutzt, definiert und anderweitig verarbeitet werden. Dieser Ansatz nennt sich "von Neumann Architektur". 
Ein anderer Ansatz wäre es, die Steuerleitungen mit einer weiteren Leitung zu ergänzen, die den gesamten Adressraum in zwei Richtungen lenkt. Man hat also quasi zwei 64KB Speicher und eine Leitung steuert ob der erste Satz an 64K genutzt wird, oder der zweite. In diesem Fall würde nicht die Gefahr bestehen, dass ein schlecht programmiertes Programm Programmdaten vom Computersystem überschreiben würde. Dieser zweite Ansatz ist die Harvard Architektur. Da die Harvard Achitektur einen kompletten zweiten Satz an Speicherbausteine verlangt, und in den 60/70ziger Jahre Speicher teuer war, hat sich bei Prozessoren eher die von Neumann Architektur durchgesetzt.