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


von ui (Gast)


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 User
von (prx) A. K. (prx)


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.

von Pandur S. (jetztnicht)


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.

von (prx) A. K. (prx)


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
von ui (Gast)


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!

von Bitwurschtler (Gast)


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?

von ui (Gast)


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!

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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'.

von (prx) A. K. (prx)


Lesenswert?

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

von Icke (Gast)


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.

von (prx) A. K. (prx)


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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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.

von (prx) A. K. (prx)


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.

von Icke (Gast)


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).

von (prx) A. K. (prx)


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.
von Pandur S. (jetztnicht)


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.

von (prx) A. K. (prx)


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.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


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. ;-)

von (prx) A. K. (prx)


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
von S. R. (svenska)


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.

von Georg A. (georga)


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
von S. R. (svenska)


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.

von Georg A. (georga)


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".

von Uhu U. (uhu)


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
von (prx) A. K. (prx)


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
von Michael F. (sharpals)


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.

von Georg A. (georga)


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...

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


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.

von Uhu U. (uhu)


Lesenswert?

Andreas S. schrieb:
> Schweigstillion

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

von Michael F. (sharpals)


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.

von (prx) A. K. (prx)


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? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.