Forum: Mikrocontroller und Digitale Elektronik M68000 und 16Bit EPROM


von Arne S. (Gast)


Lesenswert?

Moin zusammen,

wenn ich ein 16Bit EPROM (27C4002) an einen M68000 anflanschen will, 
dann kann ich doch A0 des EPROMs fest mit GND verbinden? Oder muss da 
eine Logik dran, die /UDS /LDS auswertet und daraus ein A0 generiert?

Gruß, Arne

von Anja (Gast)


Lesenswert?

Arne S. schrieb:
> A0 des EPROMs fest mit GND verbinden?

Nö dann würde ja mit den restlichen 17 Adressleitungen die Hälfte des 
Speichers ungenutzt bleiben.

Gruß Anja

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


Lesenswert?

Arne S. schrieb:
> Oder muss da
> eine Logik dran, die /UDS /LDS auswertet und daraus ein A0 generiert?

Genau das brauchst du. /CS kannst du daraus auch gleich erzeugen, wenn 
du es mit deinem Adressdekoder verschnurzelst.

von Arne S. (Gast)


Lesenswert?

Reicht es /UDS mit A0 des EPROMs zu verbinden oder muss da eine 
kompliziertere Logik dran? Wenn ja: wie müsste die aussehen? Meine 
M68000 Zeit ist leider schon ein paar (viele) Jahre her.
Speziell geht es um den ROM-Port des Atari ST. Der liegt im Bereich 
$FA0000 - $FBFFFF. Von einem ASIC wird ein /ROM4 erzeugt, wenn die 
Adresse im Bereich $FAxxxx liegt und ein /ROM3, wenn sie im Bereich 
$FBxxxx liegt. Hieraus würde ich über ein XNOR das /G Signal des EPROMs 
generieren.
Am ROM-Port liegen dann noch /LDS, /UDS, A1-A15 und D0-D15 an.
Was mir vorschwebte war folgendes: der 68000 kann ja nur auf gerade 
Adressen zugreifen, sonst gibts ne Exception. Ergo A0 fest auf GND, so 
dass bei einem Zugriff immer ein 16Bit Datenwort auf D0-D15 anliegt, das 
von einer geraden Adresse stammt. Der 68000 weiss ja bei einem 8Bit 
Zugriff welches Byte ihn interessiert (D0-D7 oder D8-D15) und wertet nur 
dieses aus.
Liege ich damit verkehrt?

Gruß,Arne

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


Lesenswert?

Arne S. schrieb:
> Liege ich damit verkehrt?

Ja. Wie Anja bereits sagte, verlierst du die Hälfte des EPROM 
Speicherplatzes.

Arne S. schrieb:
> Am ROM-Port liegen dann och /LDS, /UDS, A1-A15 und D0-D15 an.

Das sieht doch gut aus.

Arne S. schrieb:
> Reicht es /UDS mit A0 des EPROMs zu verbinden oder muss da eine
> kompliziertere Logik dran?

Das beantworten dir die Timing Diagramme im M68000 Datenblatt und evtl. 
die Unterlagen des ST-Sauriers.

Arne S. schrieb:
> Von einem ASIC wird ein /ROM4 erzeugt, wenn die
> Adresse im Bereich $FAxxxx liegt und ein /ROM3, wenn sie im Bereich
> $FBxxxx liegt. Hieraus würde ich über ein XNOR das /G Signal des EPROMs
> generieren.

Wenn dein EPROM eine höhere Kapazität als 128kbyte hat, solltest du aus 
den ROM /CS Signalen ein Adresssignal (A16) generieren. Zusätlich kannst 
du dann auch /CS draus machen.
Ich frage auch gar nicht, warum du die Atari Grotte nochmal in Gang 
setzen willst, versprochen.

von Arne S. (Gast)


Lesenswert?

Danke für die Antworten. Dann werde ich mich demnächst mal mit 
Steckbrett, Oszi und Bastel-ST dem Thema nähern.

Ja, EPROM hat 256KBit x16. A16 und A17 erzeuge ich über Jumper, da immer 
nur eine der vier 64KBit x16 "Partitionen" sichtbar zu sein braucht.

von Christian Erker (Gast)


Lesenswert?

Hallo,

es ist alles etwas anders, der 68000 adressiert mit seinen Adressen 
Bytes, das EPROM jedoch 16bit Worte. Daher verbindest du A1 MPU -> A0 
EPROM, A2 MPU -> A1 EPROM usw.

LDS und UDS brauchst du in diesem Fall nicht zu einzeln zu beachten, du 
kannst sie zusammenfassen zu einem DS da der 68000 bei 8bit Zugriffen 
das überflüssige Byte einfach ignoriert und eben entweder auf D0..D7, 
D8..D15 oder auch D0..D15 liest.

Von Bedeutung sind LDS und UDS bei Aufbau des ROMs aus 8bit Bausteinen 
oder viel wichtiger, beim RAM, da hier der Speicher das überflüssige 
Byte ignorieren muss bei 8bit Zugriffen. Natürlich auch bei Anschluss 
von 8bit IO.

Gruß,
Christian

von Klaus (Gast)


Lesenswert?

Matthias Sch. schrieb:
>> eine Logik dran, die /UDS /LDS auswertet und daraus ein A0 generiert?
>
> Genau das brauchst du.

Da würde ich noch mal nachdenken. Das Prom ist 16 Bit breit, A0 .. Axx 
addressiert also Worte. Ob der 68000 auch Worte mit A0 addresiert weiß 
jetzt nicht, vermute aber das das Bytes sind. Wenn das so ist, müßte die 
68000 A1 Leitung an A0 vom Prom, usw. Ob man bei einem Read only Memory 
/UDS und /LDS braucht und damit einen Bytebreiten Buffer enablen muß, 
bin ich mir nicht sicher.

MfG Klaus

von Arne S. (Gast)


Lesenswert?

Ich glaube Christian hat den Jackpot geknackt :-)

Wenn man sowas mit zwei 8Bit Eproms (27C256 etc) aufbaut, dann ist das 
wie folgt:
CPU A1  -> EPROM A0
CPU A15 -> EPROM A14

/LDS geht als /OE an ein ein EPROM, /UDS geht als /OE an das andere 
EPROM.
Und /ROM4 geht als /CS an beide EPROMs.

Klar... das 16Bit EPROM adressiert ja 16Bit WORTE.

Danke!

von (prx) A. K. (prx)


Lesenswert?

Wenn das AS-Signal im Adressdecoder für das CS-Signal bereits enthalten 
ist, dann kannst du die Datastrobes ebensogut auch ignorieren. Willst du 
sicher gehen, dass kein Buskonflikt auftritt wenn die CPU doch mal ins 
ROM schreiben will, dann legst du das OE vom EEPROM ans invertierte 
R/W-Signal.

von Arne S. (Gast)


Lesenswert?

A. K. schrieb:
> Wenn das AS-Signal im Adressdecoder für das CS-Signal bereits enthalten
> ist, dann kannst du die Datastrobes ebensogut auch ignorieren. Willst du
> sicher gehen, dass kein Buskonflikt auftritt wenn die CPU doch mal ins
> ROM schreiben will, dann legst du das OE vom EEPROM ans invertierte
> R/W-Signal.

Ähmmm... weder /AS noch R/W liegen am ROM Port an. Und wenn Code in den 
ROM-Port schreiben will, dann generiert das o.g. ASIC eh eine Exception 
(/BERR IIRC). Von daher weiss ich nicht, was Du mir sagen willst.
Dieses ASIC hat bereits einen Adressdekoder on-board und generiert für 
den ROM-Port ($FA0000-$FBFFFF) die o.g. /ROMx Signale. Oder meinst Du, 
dass auf meine Schaltung noch ein Adressdekoder sollte?

von (prx) A. K. (prx)


Lesenswert?

Arne S. schrieb:

> Ähmmm... weder /AS noch R/W liegen am ROM Port an. Und wenn Code in den
> ROM-Port schreiben will, dann generiert das o.g. ASIC eh eine Exception
> (/BERR IIRC). Von daher weiss ich nicht, was Du mir sagen willst.

Ich ging vom 68000 Bus aus, nicht von einer speziellen vorgekauten 
Schnittstelle des Atari. Ich kenne zwar die 68000 recht gut, spreche 
aber kein Bisschen Atarisch. Insofern vergiss was ich geschrieben hatte.

von Arne S. (Gast)


Lesenswert?

A. K. schrieb:

> Ich ging vom 68000 Bus aus, nicht von einer speziellen vorgekauten
> Schnittstelle des Atari. Ich kenne zwar die 68000 recht gut, spreche
> aber kein Bisschen Atarisch. Insofern vergiss was ich geschrieben hatte.

Nein, nein... nicht falsch verstehen. Sollte kein Afront sein ;)
Der ROM Port ist der direkte (auf genannte Leitungen A1-A15, D0-D15 und 
/LDS, /UDS minimierte) 68k Bus + zwei Leitungen:
/ROM4 ist low, wenn der Adressdekoder im Atari eine Adresse im Bereich 
$FAxxxx erkannt hat und /ROM3 ist low, wenn die Adresse im Bereich 
$FBxxxx liegt. Man kann somit zwei Bänke zu 32KBit x16 (insgesamt 128KB) 
adressieren.
Die /ROMx formen somit quasi eine weitere Adressleitung.

Der ROM Port läuft auch nicht über Treiberstufen - man kann da direkt 
von aussen die CPU killen :-(

Gruß, Arne

von (prx) A. K. (prx)


Lesenswert?

Die entscheidende Frage ist, ob in der Adressdekodierung, die im ROMx 
Signal mündet, das AS-Signal bereits berücksichtig wird. Das weiss ich 
nicht, das wissen nur Atari-Spezialisten. Wenn das da bereits drin ist, 
dann sind die Datastrobes überflüssig. Da andererseits die Datastrobes 
aber auf dem reinen Readonly-Port draufliegen, kann es sein, dass man 
sie auch verwenden muss.

von Arne S. (Gast)


Lesenswert?

Also /UDS und /LDS sind wichtig, wenn man zwei (vier) 27C256 anflanschen 
will, da sie direkt an die /OE Signale der EPROMs gehen. /LDS vermutlich 
ans EPROM mit den ungeraden Adressen und /UDS ans EPROM mit den geraden 
Adressen.
Die /ROMx Signale müssen eigentlich vom ASIC kurz nach der fallenden 
Flanke von /AS erzeugt werden, da ja erst dann die Adressen gültig sind. 
Mit "kurz nach" meine ich während desselben Taktes.

Aber Ihr habt mir alle schon sehr weitergeholfen. Vielen Dank!

von MCUA (Gast)


Lesenswert?

>/LDS geht als /OE an ein ein EPROM, /UDS geht als /OE an das andere EPROM.
Falsch.
/LDS u. /UDS gelten für RD und WR!

von (prx) A. K. (prx)


Lesenswert?

RD und WR Leitungen waren bei EPROMs der Atari-Ära nicht eben häufig 
anzutreffen. Sein 27C4002 hat sie auch nicht.

Ob man LDS/UDS überhaupt anschliessen muss weiss ich angesichts des 
Atari-Krams auch nicht, mit AS und R/W im Dekoder wärs unnötig. 
Andererseits stellt sich dann die Frage, wozu diese Signale überhaupt 
auf dem Port liegen.

von Arne S. (Gast)


Lesenswert?

>>/LDS geht als /OE an ein ein EPROM, /UDS geht als /OE an das andere EPROM.
> Falsch.
> /LDS u. /UDS gelten für RD und WR!
Das ist Blödsinn!

> Andererseits stellt sich dann die Frage, wozu diese Signale überhaupt
> auf dem Port liegen.
Lass Dich vom Begriff "ROM-Port" nicht verwirren. Man könnte da z.B. 
auch eine Relaiskarte anschließen, bei der die Unterscheidung 
HiByte/LowByte wichtig wäre. Gab von der c't ein Projekt, um einen 
Handscanner anzuschließen...

von MCUA (Gast)


Lesenswert?

>>>/LDS geht als /OE an ein ein EPROM, /UDS geht als /OE an das andere EPROM.
>> Falsch.
>> /LDS u. /UDS gelten für RD und WR!
>Das ist Blödsinn!
Mann, du bist zu blöd ein EPROM anzuschliessen (!), und raffst nichtmal, 
wenn dir einer n Tip gibt.

von Christian Erker (Gast)


Lesenswert?

A. K. schrieb:
> Ob man LDS/UDS überhaupt anschliessen muss weiss ich angesichts des
> Atari-Krams auch nicht, mit AS und R/W im Dekoder wärs unnötig.
> Andererseits stellt sich dann die Frage, wozu diese Signale überhaupt
> auf dem Port liegen.

Dafür das man 8bit-ROMs benutzen kann.

Gruß,
Christian

von (prx) A. K. (prx)


Lesenswert?

Christian Erker schrieb:

> Dafür das man 8bit-ROMs benutzen kann.

Unwiefern? Der Port hat, soweit ich erkennen kann, kein Rückmeldesignal 
"ich habe nur 8 Bits" (die 68000 CPU auch nicht), also arbeitet der Port 
weiterhin mit 16 Bits Breite. Und ob man den mit einen 16-Bit EPROM oder 
zwei 8-Bit EPROMs implementiert ist völlig schnurz. Wenn eines der 
EPROMs seine Daten ins Nirvana bläst, weil niemand zuhört, dann kostet 
dass ein paar Milliampere mehr als nötig, aber das wars auch schon.

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


Lesenswert?

Christian Erker schrieb:
> Dafür das man 8bit-ROMs benutzen kann.
>
> Gruß,
> Christian

Nein, dafür stellt die 68k CPU ja /UDS und /LDS bereit. ( 'Upper Data 
Strobe' und 'Lower DS')
R/W am ROM Port wäre widersinnig, klar.

MCUA schrieb:
>>>>/LDS geht als /OE an ein ein EPROM, /UDS geht als /OE an das andere EPROM.
>>> Falsch.
>>> /LDS u. /UDS gelten für RD und WR!
>>Das ist Blödsinn!
> Mann, du bist zu blöd ein EPROM anzuschliessen (!), und raffst nichtmal,
> wenn dir einer n Tip gibt.

Leute, Leute - ganz ruhig. Das MC68000 Datenblatt enthält alle Timing 
Diagramme, die man braucht, um auch einen 16-bit EPROM anzudocken. Und 
nicht vergessen, es ist ein Atari ST , da lohnt sichs nicht, zu 
streiten. Wir haben aus unserem Übungsraum vor 6 Monaten drei von den 
Dingern entsorgt, und vermissen sie ganz und gar nicht.

von (prx) A. K. (prx)


Lesenswert?

Matthias Sch. schrieb:

> Nein, dafür stellt die 68k CPU ja /UDS und /LDS bereit. ( 'Upper Data
> Strobe' und 'Lower DS')

Das ist doch grad der Punkt. Um aus Speicher zu lesen benötigt man die 
Datastrobes nicht wirklich. Anders wirds wenn man schreiben will.

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


Lesenswert?

A. K. schrieb:
> Das ist doch grad der Punkt. Um aus Speicher zu lesen benötigt man die
> Datastrobes nicht wirklich.

Für das 16-bit EPROM ist das sicher richtig. Ich würde die beiden 
Signale verodern, mit /RD verknüpfen und als /OE benutzen. /CS und A16 
aus den /ROM3 und /ROM4 Signalen und fertig. Aber da ich jetzt keine 
Lust habe, das Timing aus dem Datenblatt rauszusuchen, um dieses tote 
Pferd zu schlagen, halte ich mich wieder raus.

von (prx) A. K. (prx)


Lesenswert?

Matthias Sch. schrieb:

> Für das 16-bit EPROM ist das sicher richtig. Ich würde die beiden
> Signale verodern, mit /RD verknüpfen und als /OE benutzen.

Was für ein "/RD" Signal? Die 68000 CPU hat keines und laut 
http://wiki.newtosworld.de/ROM-Port hat es der ROM Port auch nicht. Du 
verwechselst das nicht etwa mit der Intel Welt?

von Mr.T (Gast)


Lesenswert?

MCUA schrieb:
>>/LDS geht als /OE an ein ein EPROM, /UDS geht als /OE an das andere EPROM.
> Falsch.
> /LDS u. /UDS gelten für RD und WR!

Große Klappe hast du ja! /UDS + /LDS haben so gar nichts mit RD + WR zu 
tun. Das sind die DataStrobes. RD + WR hat kein 68k!
Mal'n Tip von mir: einfach mal die Schnauze halten, wenn man keine 
Ahnung hat

von MCUA (Gast)


Lesenswert?

@Mr.T
Bei dir fällt mir das Wort Ober-Schwachkopf ein!

> /LDS u. /UDS gelten für RD und WR!
heisst nichts weiter, als
/LDS (LowerDataStobe) u. /UDS (UpperDataStobe) gilt für RD (also für 
CPU-Read) UND auch für WR (also für CPU-Write). (RD / WR wird durch 
R/\W-Signal unterschieden).
Man muss also für Data -Read oder -Write die Signale R/\W und auch /LDS 
u. /UDS mit auswerten. Sollte R/\W beim (ROM)-Bus fehlen muss es dafür 
(für RD) ein anderes \Select-Signal geben (bsp ROMxselect).


>RD + WR hat kein 68k!
Tja, nur ein Ober-Schwachkopf behauptet, ein 68k könne weder Read noch 
Write machen.

>Mal'n Tip von mir:
Du willst Tips geben?
HAHAHAHAHAHA

von (prx) A. K. (prx)


Lesenswert?

MCUA schrieb:

> Man muss also für Data -Read oder -Write die Signale R/\W und auch /LDS
> u. /UDS mit auswerten. Sollte R/\W beim (ROM)-Bus fehlen muss es dafür
> (für RD) ein anderes \Select-Signal geben (bsp ROMxselect).

Da das ROM-Select Signal am Chipselect vom EPROM landet ist eine 
logische Verknüpfung davon mit den Datastrobes unnötig.

von (prx) A. K. (prx)


Lesenswert?

MCUA schrieb:

>>RD + WR hat kein 68k!
> Tja, nur ein Ober-Schwachkopf behauptet, ein 68k könne weder Read noch
> Write machen.

Wenn du solche völlig überflüssigen Flamewars vermeiden willst, dann 
verwende bitte allgemeingültige Begriffe. Eine Verwendung spezifischer 
Bezeichnungen aus der Intel-Welt provoziert unweigerlich 
Missverständnisse, da niemand in deinen Kopf hineinsehen kann.

von Jobst M. (jobstens-de)


Lesenswert?

@MCUA: Man sollte sich schon audrücken können, auch wenn man es weiß ...
Allerdings ist mir Deine großspurige, trollige Art ja schon bekannt.


Es gibt noch ein Signal, welches Ihr noch nicht betrachtet habt: /DTACK

Dieses Signal signalisiert der CPU, daß die Daten nun bereit stehen und 
von der CPU eingelesen werden können.

/AS, /LDS und /UDS werden vom M68K in der S2-Phase gesetzt und die 
Hardware erzeugt daraus der Hardware entsprechend zeitabhängig ein 
/DTACK. Ist /DTACK da, liest die CPU die Daten vom Bus.

Kommt kein /DTACK, wartet der M68K ewig. Sieht die Hardware, daß kein 
/DTACK kommen kann, muß sie ein /BERR an die CPU schicken.


Gruß

Jobst

von (prx) A. K. (prx)


Lesenswert?

Jobst M. schrieb:

> Es gibt noch ein Signal, welches Ihr noch nicht betrachtet habt: /DTACK

Weil es am ROM-Port nicht existiert. Offenbar macht das schon das ASIC 
bei der Erzeugung des ROM-Select Signals.

von Jobst M. (jobstens-de)


Lesenswert?

Da habe ich nicht ganz aufgepasst ;-)

Aus ROM3+4 musst Du eine weitere Adressleitung erzeugen (um den gesamten 
Bereich mit dem EPROM abzudecken) und auch das CE Signal für das EPROM 
mußt Du daraus erzeugen. UDS und LDS kannst Du links liegen lassen, da 
bei jedem Zugriff auf ROM3 oder ROM4 aus diesem EPROM gelesen werden 
soll. Entweder das untere, das obere oder beide Bytes. Das ist bei der 
Ausgabe aber egal, da die CPU nur für die angeforderten Daten 
interessiert und das EPROM eben nur ganze 16-Bit liefern kann.

A1 CPU wird mit A0 EPROM verbunden - das wurde hier schon korrekt 
gesagt.
A16 CPU mit A15 EPROM
A16 EPROM ist aktiv, wenn /ROM4 aktiv (=L) ist - also direkt mit /ROM3 
verbinden.
CE vom EPROM ist aktiv, wenn /ROM3 oder /ROM4 aktiv ist (vermutlich 
einfach ein UND)



Gruß

Jobst

von MCUA (Gast)


Lesenswert?

>Da das ROM-Select Signal am Chipselect vom EPROM landet ist eine
>logische Verknüpfung davon mit den Datastrobes unnötig.
Nur wenn dieses ((irgentwie) extern erzeugte) 'ROM-Select Signal' vom 
Timing her schon genau stimmt. Sicherer ist es auf jeden Fall /LDS > u. 
/UDS mit auszuwerten.


>@MCUA: Man sollte sich schon audrücken können...
Ich habe nichts falsches gesagt.

von Jobst M. (jobstens-de)


Lesenswert?

MCUA schrieb:
>>Da das ROM-Select Signal am Chipselect vom EPROM landet ist eine
>>logische Verknüpfung davon mit den Datastrobes unnötig.
> Nur wenn dieses ((irgentwie) extern erzeugte) 'ROM-Select Signal' vom
> Timing her schon genau stimmt. Sicherer ist es auf jeden Fall /LDS > u.
> /UDS mit auszuwerten.

Die Adressleitungen werden vor AS, LDS und UDS gesetzt. Ich weiß auch 
nicht, wie Du Dir eine weitere Auswertung vorstellst. Wenn ROM3 oder 
ROM4 auf L geht, tut dies kurze Zeit später UDS und/oder LDS auch. Ein 
Lesezugriff auf dem Bus ohne mindestens eine dieser Leitungen wird nicht 
erfolgen. Wenn eine der beiden ROM-Leitungen auf L geht, kann man 
getrost Daten auf den Bus legen.


>>@MCUA: Man sollte sich schon audrücken können...
> Ich habe nichts falsches gesagt.

Stimmt. Aber es war sehr missverständlich.


Gruß

Jobst

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.