mikrocontroller.net

Forum: Offtopic DEC PDP-11 - erster Computer ohne spezielle I/O Befehle?


Autor: ui (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich sitze aktuell an einer Arbeit und lies dazu einige (teilweise sehr 
alte) Veröffentlichungen. Z.B.  Formal Requirements for Virtualizable 
Third Generation Architectures von Popek und Goldberg.
Dabei bin ich auf folgenden Satz gestossen:
"
In the DEC PDP-11, I/O devices are
treated as memory ceils and I/o operations are performed
by doing the proper memory transfer to the
appropriate cell.
"
Jetzt frage ich mich: War den DEC der erste Computer, bei dem I/O 
Zugriffe über Register eines linearen Speicher gemacht wurden? Oder war 
es der erste kommerziell erfolgreiche? Und: Gabs den dann bei den 
Konkurrenzprodukten extra I/O Instruktionen?

: Verschoben durch Moderator
Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ui schrieb:
> Und: Gabs den dann bei den
> Konkurrenzprodukten extra I/O Instruktionen?

TI 990: Getrennte Befehle für I/O-Space, 1 Bit breiter Datenbus.

Data General Nova: Separate I/O-Befehle aber keine einfache 
Adressierung, sondern an Kanalwerke erinnernd.

Autor: Sapperlot W. (jetztnicht)
Datum:

Bewertung
-3 lesenswert
nicht lesenswert
Naja, was soll ich sagen. Wie haette man denn IO sonst machen wollen ? 
Das macht man ja heute noch so. Ein UART Register ist auf einer 
Speicherstelle. Und wird wie Memory adressiert.

Autor: A. K. (prx)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Sapperlot W. schrieb:
> Naja, was soll ich sagen. Wie haette man denn IO sonst machen wollen ?

IBM 360: selbständig arbeitende Kanalwerke mit DMA. Der Prozessor 
steuert das Kanalwerk.

CDC 6600: separater I/O-Rechner (multithreaded) mit Zugang zum Speicher, 
kein I/O-Zugriff durch Hauptrechner.

: Bearbeitet durch User
Autor: ui (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sapperlot W. schrieb:
> Naja, was soll ich sagen. Wie haette man denn IO sonst machen wollen ?
> Das macht man ja heute noch so. Ein UART Register ist auf einer
> Speicherstelle. Und wird wie Memory adressiert.

Das man das heute so mamcht ist mir Bewusst. Aber heute != 1970er...
Die Frage war ja ob das Konkurrenzprodukte anders gemaacht haben und:

A. K. schrieb:
> IBM 360: selbständig arbeitende Kanalwerke mit DMA.
>
> CDC 6600: separater I/O-Rechner (multithreaded) mit Zugang zum Speicher,
> kein I/O-Zugriff durch Hauptrechner.

A. K. schrieb:
> TI 990: Getrennte Befehle für I/O-Space, 1 Bit breiter Datenbus.
>
> Data General Nova: Separate I/O-Befehle aber keine einfache
> Adressierung, sondern an Kanalwerke erinnernd.

Offensichtlich lässt sich diese Frage mit ja beantworten! Danke für die 
Hinweise!

Autor: Bitwurschtler (Gast)
Datum:

Bewertung
-3 lesenswert
nicht lesenswert
ui schrieb:
> A. K. schrieb:
>> TI 990: Getrennte Befehle für I/O-Space, 1 Bit breiter Datenbus.
>>
>> Data General Nova: Separate I/O-Befehle aber keine einfache
>> Adressierung, sondern an Kanalwerke erinnernd.
>
> Offensichtlich lässt sich diese Frage mit ja beantworten! Danke für die
> Hinweise!

Häh, wie beweisen dir zwei Nennungen das pdp-11 der erste war? Schon mal 
den Apollo Guidance Computer betrachtet? Oder die Rechner der Wang 
Laboratories?

Autor: ui (Gast)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Bitwurschtler schrieb:
> Häh, wie beweisen dir zwei Nennungen das pdp-11 der erste war? Schon mal
> den Apollo Guidance Computer betrachtet? Oder die Rechner der Wang
> Laboratories?

Ich suche ja nicht nach einem Beweis. Ich habe nur gefragt, was denn zu 
der Zeit so üblich war. Wenn du dazu was weißt, dann sag es!

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
3 lesenswert
nicht lesenswert
Sapperlot W. schrieb:
> Naja, was soll ich sagen. Wie haette man denn IO sonst machen wollen ?
> Das macht man ja heute noch so. Ein UART Register ist auf einer
> Speicherstelle. Und wird wie Memory adressiert.

Nö, Intel hat schon immer getrennte Auswahlleitungen für Speicher und 
I/O angeboten. Und das ist bis heute so geblieben in unzähligen PC aka 
'IBM Kompatiblen'.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird I/O in PCs heute nicht überwiegend über Datenadressen angesprochen?

Autor: Icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sapperlot W. schrieb:
> Naja, was soll ich sagen. Wie haette man denn IO sonst machen wollen ?
> Das macht man ja heute noch so. Ein UART Register ist auf einer
> Speicherstelle. Und wird wie Memory adressiert.

Selbst der AVR hat noch getrennte I/O Befehle (IN, OUT, SBI, CBI), auch 
wenn sich I/O (in uCs mit SRAM) auch memory-mapped (LDS, STS) ansprechen 
läßt oder sogar angesprochen werden muss.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Icke schrieb:
> Selbst der AVR hat noch getrennte I/O Befehle (IN, OUT, SBI, CBI), auch
> wenn sich I/O (in uCs mit SRAM) auch memory-mapped (LDS, STS) ansprechen
> läßt oder sogar angesprochen werden muss.

Die IN/... sind nur deshalb I/O-Befehle, weil sich in deren Kurzform der 
Datenadresse zufällig die I/O befindet. Etliche AVRs haben da sogar ein 
paar Bytes RAM drin, damit man mit CBI/SBI elegant Flags implementieren 
kann.

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
A. K. schrieb:
> Wird I/O in PCs heute nicht überwiegend über Datenadressen angesprochen?

Kann man machen, muss aber nicht. An z.B. PCI Slots liegen I/O-, 
Speicher- und Konfiguration Auswahlsignale an:
https://en.wikipedia.org/wiki/Conventional_PCI#PCI...

Traditionell sind bis heute die grundlegenden Register von z.B. 
Grafikkarte, Onboard Quäker und UART immer noch im I/O Space. Auch die 
Chipset Register sind normalerweise im I/O Space, ebenso die RTC usw.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Icke schrieb:
> Selbst der AVR hat noch getrennte I/O Befehle (IN, OUT, SBI, CBI), auch
> wenn sich I/O (in uCs mit SRAM) auch memory-mapped (LDS, STS) ansprechen
> läßt oder sogar angesprochen werden muss.

AVRs sind konsequent memory mapped, mit ein paar zusätzlichen Befehlen 
für platzsparende Adressierung.

Autor: Icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A. K. schrieb:
> AVRs sind konsequent memory mapped, mit ein paar zusätzlichen Befehlen
> für platzsparende Adressierung.

Immerhin sind die speziellen I/O Befehle schneller (IN/OUT 1 Takt vs. 
LDS/STS 2 Takte) und das Manipulieren von I/O Bits sehr viel schneller 
(1 od. 2 Takte vs. 5 Takte).

Autor: A. K. (prx)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Icke schrieb:
> Immerhin sind die speziellen I/O Befehle schneller

Klar. Bei IN/OUT vs LDS/STS ganz simpel weil kürzer, 1 Wort statt 2. Das 
war bei 6500/6800ern mit RAM und I/O in der zero page auch nicht 
anders.

> und das Manipulieren von I/O Bits sehr viel schneller

Das ändert nichts daran, dass die I/O memory mapped ist. Es gibt eben 
nur zusätzliche Befehle für einen eng begrenzten Adressbereich. Etwas 
besonders ist jene optimierte AVR-Mikroarchitektur, die für diese 
read/modify/write Befehle keine separaten Zyklen mehr verwendet.

Es gibt also spezielle Befehle, aber keine Adressraumtrennung.

Matthias S. schrieb:
> Nö, Intel hat schon immer getrennte Auswahlleitungen für Speicher und
> I/O angeboten.

Bei 8051 nicht. Wahrscheinlich auch nicht bei 8096, i860, i960, ...

: Bearbeitet durch User
Beitrag #5014795 wurde vom Autor gelöscht.
Autor: Sapperlot W. (jetztnicht)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch wenn die Auswahlleitungen von I/O und RAM unterschiedlich sind, 
liegen die IO immer noch am selben Adress- und Datenbus, und man kann's 
immer noch so einbauen wie man's will.

DMA Kanaele kann man auch nehmen. Heute sind DMA Kanaele auch am selben 
Bus, der Buscontroller unterhaelt einfach noch ein paar zusaetzliche 
Zaehler und Controleinheiten.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sapperlot W. schrieb:
> Auch wenn die Auswahlleitungen von I/O und RAM unterschiedlich sind,
> liegen die IO immer noch am selben Adress- und Datenbus, und man kann's
> immer noch so einbauen wie man's will.

Der CDP1802 hat nicht nur spezielle I/O-Befehle, sondern auch getrennte 
Adressleitungen für I/O.

Autor: Andreas Schweigstill (Firma: Schweigstill IT) (schweigstill) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sapperlot W. schrieb:
> Auch wenn die Auswahlleitungen von I/O und RAM unterschiedlich sind,
> liegen die IO immer noch am selben Adress- und Datenbus, und man kann's
> immer noch so einbauen wie man's will.

Man sollte hier sehr deutlich zwischen Bussen und Adressräumen 
unterscheiden. Die IOs können durchaus mit dem Speicher zusammen dort 
hängen, aber ohne die speziellen IO-Befehle gibt es ggf. keine 
Möglichkeit, sie anzusprechen.

Streng genommen ist es aber auch bei der Speicheradressräumen nicht 
anders. Bei Prozessoren, die sich an die Harvard-Architektur anlehnen, 
sind Programm- und Datenadressräume streng voneinander getrennt. 
Allerdings werden sie bei den meisten Universalprozessoren extern wieder 
zusammengeführt und nicht einmal mehr über separate Steuerleitungen 
unterschieden. Nur Caches werden teilweise separat realisiert.

Einige ältere Prozessoren haben die Trennung sogar noch strenger 
durchgeführt. Beim Philips PCB5010/5011 gab es sogar komplett getrennte 
Adressräume und externe Busse für Programmspeicher, ROM-Daten, X-Daten 
und Y-Daten. Letzteres bedeutet, dass bei Rechenoperationen streng 
zwischen erstem und zweitem Parameter unterschieden wurde. Ergebnisse 
konnten wahlweise in den Speicher im X- oder Y-Adressraum geschrieben 
werden. Für nur zu lesende Daten gab es dann ein Koeffizienten-ROM, z.B. 
für Sinustabellen o.ä..

Bei mir zuhause liegt aber noch eine halbfertige, selbstentwickelte 
Einsteckkarte für ISA-Steckplätze herum. Irgendwann werde ich versuchen, 
die 3,5"-Disketten mit der Entwicklungsumgebung auf einem alten Rechner 
einzulesen. Davon werde ich es dann abhängig machen, ob ich mir 
irgendwann als Rentner oder so den PCB5011 noch einmal herausholen 
werde. Das dauert aber noch rund zwanzig Jahre.

Die Prozessorarchitektur hat sich aber nicht wirklich durchgesetzt. 
Vielleicht wurde sie ja von Josef G. entwickelt. ;-)

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas S. schrieb:
> Bei Prozessoren, die sich an die Harvard-Architektur anlehnen,
> sind Programm- und Datenadressräume streng voneinander getrennt.
> Allerdings werden sie bei den meisten Universalprozessoren extern wieder
> zusammengeführt und nicht einmal mehr über separate Steuerleitungen
> unterschieden. Nur Caches werden teilweise separat realisiert.

Das beschreibt ein Szenario mit teilweise getrennten Bussen aber 
gemeinsamem Adressraum.

Man kann Harvard an Adressräumen oder Datenbussen festmachen. Letzteres 
führte jenseits von Harvard Mark I recht schnell zu Problemen.

> Einige ältere Prozessoren haben die Trennung sogar noch strenger
> durchgeführt. Beim Philips PCB5010/5011 gab es sogar komplett getrennte
> Adressräume und externe Busse für Programmspeicher, ROM-Daten, X-Daten
> und Y-Daten. Letzteres bedeutet, dass bei Rechenoperationen streng
> zwischen erstem und zweitem Parameter unterschieden wurde.

Bei DSPs sind komplizierte Fälle mit mehreren internen Datenbussen und 
einer Kopplung derer an Positionen im Opcode nicht so selten.

: Bearbeitet durch User
Autor: S. R. (svenska)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A. K. schrieb:
> Wird I/O in PCs heute nicht überwiegend über Datenadressen
> angesprochen?

Der PCI-Bus wird über I/O-Befehle (Ports 0xCF8 und 0xCFC) konfiguriert. 
Obwohl die Karten I/O anbieten können, ist das eher eine 
Kompatiblitätssache (für die IDE- und VGA-Ports).

Die ganzen "klassischen" PC-Devices werden alle über I/O-Befehle 
angesprochen (PIC, PIT, KBC), wobei deren neuere Varianten (APIC, HPET) 
memory-mapped sind.

Autor: Georg A. (georga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
S. R. schrieb:
> Der PCI-Bus wird über I/O-Befehle (Ports 0xCF8 und 0xCFC) konfiguriert.

Das ist aber nur das Mapping des Configuration Space in die 
PC-Architektur. Der Configurations Space ist auf dem PCI-Bus aber 
eigentlich normaler Speicher, nur halt mit IDSEL (und speziellen 
R/W-Kommandos) qualifiziert. Das hätte man auf dem PC auch direkt per 
Memory-Mapping einbinden können, wenn das aufgrund der vielen möglichen 
Devices nicht soviel Speicher geklaut hätte...

: Bearbeitet durch User
Autor: S. R. (svenska)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Georg A. schrieb:
>> Der PCI-Bus wird über I/O-Befehle (Ports 0xCF8 und 0xCFC) konfiguriert.
> Das ist aber nur das Mapping des Configuration Space in die
> PC-Architektur.

Ändert aber nichts daran, dass man I/O-Befehle benutzen muss, um 
PCI-Geräte zu enumerieren und zu konfigurieren. :-) Benutzen tut man 
sie danach in aller Regel memory-mapped.

Autor: Georg A. (georga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
S. R. schrieb:
> Ändert aber nichts daran, dass man I/O-Befehle benutzen muss, um
> PCI-Geräte zu enumerieren und zu konfigurieren.

Aber eben nur auf dem PC... Der PCI-Bus selbst hat zwar auch 
IO-Kommandos (sonst wäre er für die PC-Architektur nicht durchsetzbar 
gewesen), die sind aber aber mindestens seit PCIe "deprecated".

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Georg A. schrieb:
> Das hätte man auf dem PC auch direkt per
> Memory-Mapping einbinden können, wenn das aufgrund der vielen möglichen
> Devices nicht soviel Speicher geklaut hätte...

Die kleinen Adressräume waren wohl auch die maßgeblichen Gründe für die 
Trennung von Speicher- und I/O-Adressen - genau wie für die 
Harvard-Architektur auch.

Dass es dann Leute gab, die aus der Not eine Tugend machen wollten, ist 
ein anderes Thema.

: Bearbeitet durch User
Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sapperlot W. schrieb:
> Heute sind DMA Kanaele auch am selben Bus,

Heute ist es eher so, dass es bei Rechnern jenseits von CPU-Kern und 
Speichermodulen überhaupt keine Busse mehr gibt. PCIe ist kein Bus, 
sondern Punkt zu Punkt.

: Bearbeitet durch User
Autor: Michael F. (sharpals)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Der Z80 kann sogar 64K als I/O ansprechen.
Dokumentiert sind zwar nur 256, wei beim 8080.

Wenn aber ein i/o zugriff via out(c)/in(c) aktiv ist, wird auch das 
B-register auf dem Bus gelegt.

also

LD b , HI(nn)
ld c , nn and $FF

out(c),n

Der ZX-Spectrum und auch Zx81 machten davonn gebrauch.

Gerade die undokumentierten befehle des Z80 waren so oft in verwendung, 
daß kein nachbau darauf verichten durfte/konnte.

Autor: Georg A. (georga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael F. schrieb:
> Der ZX-Spectrum und auch Zx81 machten davonn gebrauch.

AFAIR beim Lesen der Tastaturmatrix. Damit konnte man die die zu lesende 
Spalte über B auswählen. Hat ein paar externe FFs gespart, die ULA hätte 
ohnehin keine Pins mehr dafür gehabt...

Autor: Andreas Schweigstill (Firma: Schweigstill IT) (schweigstill) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael F. schrieb:
> Wenn aber ein i/o zugriff via out(c)/in(c) aktiv ist, wird auch das
> B-register auf dem Bus gelegt.

Dies galt nicht nur für OUT (c),r bzw. IN r,(C), sondern auch für OUT 
(n), A bzw. IN A,(n).

> out(c),n

Diesen Befehl gab es nie. Alle I/O-Befehle mit C als Adresse erforderten 
ein weiteres Register für die Daten. Die unmittelbare Adressierung war 
nur mit dem Akkumulator möglich, d.h. OUT (n),A bzw. IN A,(n). Die 
komplexen I/O-Befehle INI, INIR, IND, INDR, OUTI, OTIR, OUTD, OTDR 
arbeiteten ausschließlich mit Register C, wobei B aber auch nicht als 
Adresserweiterung nach Belieben zur Verfügung stand, sondern als 
Schleifenzähler verwendet wurde. Mir ist nicht bekannt, ob es jemals 
irgendeine(n) Peripheriebaustein oder -baugruppe gegeben hat, die 
bewusst den (herunterzählenden) Schleifenzähler B zur Adressierung 
verwendet haben.

Bemerkenswert finde ich, dass fast alle anderen Schleifenbefehle mit BC 
statt B arbeiteten, außer DJNZ, welcher auch nur B statt BC verwendete.

> Gerade die undokumentierten befehle des Z80 waren so oft in verwendung,
> daß kein nachbau darauf verichten durfte/konnte.

Damals(tm) waren meine größten Träume, bei einem Mikroprozessor einen 
undokumentierten Befehl zu finden oder ein neues Elementarteilchen 
(Schweigstillion) zu entdecken und damit berühmt zu werden. Eben so, wie 
andere Leute Rockstar werden wollten.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Andreas S. schrieb:
> Schweigstillion

Leider ist das Teilchen so leise, dass es keiner gehört hat...

Autor: Michael F. (sharpals)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja ist richtig das n ist das register.

http://z80-heaven.wikidot.com/instructions-set:out

Die sogenannte undokumentierten befehle wurden sehr schnell zu 
standardbefehlen.

Bei einem Z180 wurde der befehlsinterpreter überarbeitet, so das eben 
nicht alle undokumentierten mehr laufen.

Ich binn beim schreiben meines Z80emus auf die problematik ( vor 16 
jahren ) gestoßen.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas S. schrieb:
>> out(c),n
>
> Diesen Befehl gab es nie. Alle I/O-Befehle mit C als Adresse erforderten
> ein weiteres Register für die Daten.

Fast alle: IN (C) und OUT (C),0 nicht.
Ok, offiziell sind die nicht.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail, Yahoo oder Facebook? Keine Anmeldung erforderlich!
Mit Google-Account einloggen | Mit Yahoo-Account einloggen | Mit Facebook-Account einloggen
Noch kein Account? Hier anmelden.