CPU-E / A-Kommunikation

1694
user32569

Ich weiß, dass diese Frage bereits diskutiert wurde, aber ich verstehe immer noch nichts, also helfen Sie mir bitte, es zu klären.

Was ich verstehe, gibt es zwei Möglichkeiten, um E / A, dh die Kommunikation zwischen CPU und anderer HW, auszuführen. Eine besteht darin, In- und Out-Anweisungen zu verwenden, und zweitens ist der Speicher zugeordnet.

Aber was ich eigentlich nicht verstehe, ist, dass IN- und OUT-Anweisungen verwendet werden, Sie definieren den Quellport. Aber was ist dieser Hafen? Ich meine, ist es ein anderer Satz von Pins auf der CPU oder was? Und an was ist der Port angeschlossen?

Und für die Erinnerung fehlt mir nur ein winziges Detail. Welcher Speicher zugeordnete E / A muss zuerst durch IN- und OUT-Anweisungen festgelegt werden, oder verbindet sich das Gerät tatsächlich irgendwie mit dem RAM und liest es? Vielen Dank.

0

1 Antwort auf die Frage

3
Jonathan Leffler

Bei einem Z80 gibt es einen Pin auf dem Chip, der aktiviert wird (auf den hohen oder logischen Zustand 1 gesetzt), wenn der Befehl ein IN- oder OUT-Befehl ist. Die an den Chip angeschlossene Hardware überwacht diesen Pin sowie die Read / Write-Pins und einige Adresspins, um festzustellen, ob die Operation auf sie verweist. Jedes Gerät ist so konfiguriert, dass es eine Nummer als Portnummer erkennt und entsprechend reagiert. Wenn Sie also eine Assembleranweisung schreiben, z.

OUT(15),A 

der Chip setzt die 8 Adresspins niedriger Ordnung auf 15 und schreibt den Inhalt des Registers A in die Datenpins. Wenn die Hardware ordnungsgemäß konfiguriert und angeschlossen ist, weiß sie, dass sie dafür vorgesehen ist. Ähnlich mit IN(15),A.

Bei einer Speicherzuordnung von E / A ist ein Speicherplatz für die Hardware reserviert. Wenn die CPU beispielsweise auf die Adresse 0xFFF0 schreibt (vorausgesetzt, es handelt sich um eine praktische 8-Bit-Mikroarchitektur wie 6502 oder 6800 oder 6809 - oder sogar um Z80), handelt es sich bei der an diese Adresse angeschlossenen Hardware nicht um einen RAM-Chip aber das Gerät. Normalerweise gibt es mindestens eine nahegelegene Adresse, die zum Lesen verwendet wird. Manchmal wird dieselbe Adresse sowohl für das Lesen als auch für das Schreiben verwendet.

In beiden Fällen besteht das Problem im Wesentlichen darin, dass die an die CPU angeschlossene Hardware bestimmte Aktivitätsmuster an den Chip-Pins (einige Steuerpins, Datenpins und Adresspins) als Bezug auf sie erkennt. Sie können auf ein Problem stoßen, wenn mehrere unterschiedliche Geräte glauben, dass dieselbe Adresse oder der E / A-Port auf sie verweist.

Obwohl ich für die Beispiele 8-Bit-Chips verwendet habe, gelten die gleichen Grundprinzipien für 16-Bit-, 32-Bit- oder 64-Bit-Chips.

Kann ich noch eine Frage haben? Wird also bei der Verwendung von IN (OUT) oder speicherzugeordneter E / A das RAM von der CPU getrennt, oder wird es gleichzeitig auf einen Chip geschrieben und auch in den RAM geschrieben? user32569 vor 13 Jahren 0
@ b-gen-jack-o-neill: Bei einem IN- oder OUT-Befehl würde der Speicher (normalerweise) die Anforderung ignorieren, da der I / O-Pin aktiviert ist. Bei einer Speicherzuordnung von E / A befindet sich an der Adresse kein RAM - das E / A-Gerät wird dort zugeordnet. Das Nettoergebnis lautet also "Nein, was geschrieben wird, geht an das E / A-Gerät". Wenn jemand das Speichersystem falsch entworfen hat, haben Sie möglicherweise ein Gedächtnis, das auf die E / A-Anforderung achtet, aber es kommt zu Chaos - das E / A-Gerät oder der Speicher gewinnen einen IN-Befehl, bei dem der Speicher versucht, eine Antwort zu geben sowie das E / A-Gerät. Es wird nicht funktionieren und daher werden Sie es nicht sehen. Jonathan Leffler vor 13 Jahren 0