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.