Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » Z80 RETI-Erkennung » Themenansicht

Autor Thread - Seiten: -1-
000
05.09.2014, 15:35 Uhr
kaiOr

Avatar von kaiOr

Hallo,

PIO, CTC etc. belauschen ja den Datenbus nach der Bytefolge EDh & 4Dh. Das sind zwei Opcode-Aufrufe hintereinander. Aber wie erkennen die das SAUBER?

Zum einen könnten mittels WAIT oder BUSREQUEST diese 2 Byte taktseitig weit auseinanderliegen oder im Falle von BUSREQUEST sogar durch andere Opcode-Zugriffe durchmischt werden. Man bedenke: PIO, CTC etc. haben keinen Eingang für WAIT und BUSAK.
Zum anderen gibt es auch sehr ähnliche Befehlsfolgen auf dem Datenbus wie:

CB ED ---- SET 5,L
4D ------- LD C,L

Da käme auch EDh & 4Dh hintereinander....
Oder sind das genau die Fälle wo es knallt und keiner weiß warum?

MfG
Kai
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
05.09.2014, 17:10 Uhr
holm

Avatar von holm

CB wird zusammen mit M1 aktiv, ED 4D in Deinem Beispiel nicht.
Der Befehlsholezyklus gilt, nicht alleine ED oder 4D auf dem Datenbus.
WAIT verlängert nur die Buszustände und ist damit irrelevant. Die DMA bedient kein M1 da sie keine Befehle liest.

Gruß,

Holm
--
float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v;
{s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+
(r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&&
(A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;}

Dieser Beitrag wurde am 05.09.2014 um 17:19 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
05.09.2014, 17:56 Uhr
kaiOr

Avatar von kaiOr

Gerade bei meinem Beispiel müsste M1 dreimal aktiv werden. Ich prüfe das nachher mal mit dem Poly880.

MfG
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
05.09.2014, 18:17 Uhr
Wusel_1




Zitat:
[b]
CB ED ---- SET 5,L
4D ------- LD C,L

Da käme auch EDh & 4Dh hintereinander....



Falsche Logik. #CB kommt zu erst und da kommt ja kein RETI, sondern die CPU arbeitet den Befehl ab, egal was hinter dem CB kommt.

Wait macht da überhaupt nichts, da da nur die CPU Takte einbaut.
BUSREQUEST ist nur die Busanforderung z.B. von der DMA. Dieses geschiet ja über eine separate Leitung. BUSAK (Freigabe des Busses) wir erst nach kompletten Abarbeitung des Befehls gegeben. Da muss die PIO nichts davon wissen, da auf die z.B. die DMA zugreifen kann. Ebenso bei Interrupt. Da wird von der CPU der Befehl abgearbeitet und dann dem Interup statt gegeben.
--
Beste Grüße Andreas
______________________________________
DL9UNF ex Y22MF es Y35ZF
JO42VP - DOK: Y43 - LDK: CE

*** wer glaubt, hört auf zu denken ***

Dieser Beitrag wurde am 05.09.2014 um 18:51 Uhr von Wusel_1 editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
05.09.2014, 19:15 Uhr
kaiOr

Avatar von kaiOr

Ja die CPU weiß ja auch ob das Byte zum letzten oder zum nächsten Befehl gehört, aber woher weiß es die Peripherie?

Ich muss/möchte den RETI mit ner kleinen Schaltung abfangen, weil das Ende der Interruptprioritätskette für mich physikalisch zu weit weg ist (KC-Turm). Sonst würde ich einfach den letzten IEO überwachen und wüsste wann der RETI endlich durch ist.

Opcodes mit einer Länge von zwei Bytes führen auch zweimal zu M1 soweit ich weiß, deshalb ist M1 als Indikator in meinem Beispiel schon mal unzureichend.

Wenn die CPU durch WAIT Takte einbaut können PIO, CTC und Co. mangels Pin für WAIT schonmal keine Takte mitzählen um die zwei Bytes zu seperieren. Zwischen EDh & 4Dh sind also beliebig viele Takte.
BUSREQUEST darf jede Schaltung machen die dazu fähig ist (auch eine zweite CPU). Und die kann auch mit M1-Zugriffen auf den Bus losgehen. Wird BUSREQ aktiv bleibt der CPU nur ein Takt den Bus freizugeben, hat die also gerade EDh gelesen (was mind 4 Takte dauert) schafft sie es nicht mehr 4Dh zu holen, sondern erst wenn der Bus wieder freigegeben wurde.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
05.09.2014, 19:34 Uhr
Wusel_1




Zitat:
kaiOr schrieb
Wird BUSREQ aktiv bleibt der CPU nur ein Takt den Bus freizugeben, hat die also gerade EDh gelesen (was mind 4 Takte dauert) schafft sie es nicht mehr 4Dh zu holen, sondern erst wenn der Bus wieder freigegeben wurde.



Falsch - einen Takt nach der Abarbeitung des kompletten Befehls. Eher wird von der CPU kein BUSAK gesendet. Ebenso ist das bei einer Interuptanforderung.
Kannst du alles im Buch "Mikroprozessertechnik" von Kieser/Meder oder anderer Fachliteratur nachlesen.

Wenn z.B. eine PIO ein Interrupt auslöst werden sofort über die Interruptkette die nachfolgenden PIO/CTC.. für Interrupt gesperrt. In der Interruptprioritätskette kann aber der vorliegende IC (CTC wird meist als erster in die Kette genommen) einen Interrupt trotzdem auslösen und somit wird erst der Interup des ersten IC abgearbeitet.
Wenn du da mal was am Ende der Interruptkette sehen willst, ist das aber schwer. Selbst mit einen Flipflop, da die Abarbeitung ja nicht Sekunden dauert.
--
Beste Grüße Andreas
______________________________________
DL9UNF ex Y22MF es Y35ZF
JO42VP - DOK: Y43 - LDK: CE

*** wer glaubt, hört auf zu denken ***

Dieser Beitrag wurde am 05.09.2014 um 19:36 Uhr von Wusel_1 editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
05.09.2014, 19:37 Uhr
Andreas



Hallo kaiOr

Sehe mal in Kieser/Meder 3.Auflage S.234.Ich denke das ist dein Problem? Ich weiß nicht ob in den anderen Auflagen auch dieser Teil enthalten war.Der Abschnitt nennt sich 4.2.4 Interuptstruktur der peripheren Systemelemente . Zur Not kann ich Dir es scannen.

Andreas
--
Viele Grüße
Andreas

Dieser Beitrag wurde am 05.09.2014 um 19:38 Uhr von Andreas editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
05.09.2014, 19:45 Uhr
Wusel_1



In der 4. Auflage ab Seite 215 kannst du alles über die Interrupeigenschaften lesen.
--
Beste Grüße Andreas
______________________________________
DL9UNF ex Y22MF es Y35ZF
JO42VP - DOK: Y43 - LDK: CE

*** wer glaubt, hört auf zu denken ***
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
05.09.2014, 19:51 Uhr
kaiOr

Avatar von kaiOr


Zitat:
Wusel_1 schrieb
Falsch - einen Takt nach der Abarbeitung des kompletten Befehls. Eher wird von der CPU kein BUSAK gesendet. Ebenso ist das bei einer Interuptanforderung.
Kannst du alles im Buch "Mikroprozessertechnik" von Kieser/Meder oder anderer Fachliteratur nachlesen.


Mh,

aus dem Z80 - Family Data Book:
"The BUSREQ signal is sampled by the CPU with the rising edge of the last clock
period of any machine cycle. If the BUSREQ signal is active, the CPU sets
its address, data, and tristate control signals to the high-impedance state with
the rising edge of the next clock pulse."

Da ist nicht von "instruction cycle" die Rede.

@Andreas: Danke, müsste ich da haben.

Dieser Beitrag wurde am 05.09.2014 um 19:58 Uhr von kaiOr editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
05.09.2014, 22:19 Uhr
kaiOr

Avatar von kaiOr

Nochmal danke für den Buchtip!
Die dekodieren genau den Fall aus meinem Beispiel. Wenn ein Befehlsholzyklus mit CBh kommt, wird ein direkt folgender mit EDh verworfen.
Das bekomme ich in meine Lösung mit GAL und 2 Flipflops noch rein.

Bleibt nur noch die Befürchtung mit Busrequest durch eine zweite CPU, aber die ist im KC sehr theoretischer Natur.

MfG
Kai
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
05.09.2014, 22:28 Uhr
FL



schau mal hier: http://www.z80.info/zip/z80-interrupts_rewritten.pdf

Gruß Frank.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
011
06.09.2014, 12:33 Uhr
kaiOr

Avatar von kaiOr

@FL: Danke auch dafür.

Ich merke langsam, dass ich noch ein Speicher/Schieberegister für INT-Anforderungen bräuchte, damit ich weiß wann der letzte RETI durch ist.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek