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

Gast #5014542
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?
Gast #5014578
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!
Gast #5014582
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?
Gast #5014588
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!
(Firma: matzetronics) #5014723
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'.
Gast #5014754
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.
#5014760
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.
(Firma: matzetronics) #5014761
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_address_spaces

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.
Gast #5014776
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).
#5014787
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, ...
Beitrag #5014795 wurde von einem Moderator gelöscht.
#5014847
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.
(Firma: Schweigstill IT) Persönliche Seite #5014870
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. ;-)
#5014879
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.
#5014918
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.
#5015243
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...
#5015302
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.
#5015898
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.
#5016286
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.
(Firma: Schweigstill IT) Persönliche Seite #5016740
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren