Das ist eine Bastelei just for Fun, wie viele Andere bin ich von Pollin
und dann auch von Freunden mit etlichen U8820 und U8840 DDR
Einchipmikrorechnern versorgt worden, in Stückzahlen die ich bis an
meine Lebensende nicht werde aufbrauchen können, also geht das auch für
"sinnlose" Basteleien wenn mal Zeit ist.
Grant Searle hat an einen Z80 auch einen MC6850 als UART angehangen, das
funktioniert:
http://searle.x10host.com/z80/Z80SbcSchematic1.3.gif
Ich habe also mal mit Hilfe eines Adapters auf einem Steckbrett was
zusammengetüddelt, einen MC6821 PIA als erweiterung der Peripherie am
externen Speicherbus des U8820 (Z8601) mit erweitertem
Speicherzeitverhalten bei 4,9152Mhz Takt.
Der Datenbus des MC6821 hängt also direkt am Datenport des U8820, Port
10..17,
R/W ist direkt mit R/W des U8820 Verbunden, /DS des Prozessors über ein
HC04 Gatter mit E und /CS2 des 6821 hängt an einem 74HC138 der die
Adreßdecodierung erledigt. Das sollte genügen und auch von den
Zeitbedingungen her prinzipiell passen, ich benutze das erweiterte
Timing.
Das Ganze funktioniert..komischerweise aber nur, wenn ich den E-Takt mal
kurz abklemme, mitten im Programmlauf. Wenn ich das nicht tue, liest der
MC6821 seltsamerweise inverse Daten..nicht nachvollziehbar, wird wohl
mit internen Vorgängen zu tun haben. Am Signalspiel kanns eigentlich
nicht liegen, ich habe mir das mit Pulseview angesehen.
Hat Jemand Erfahrungen mit dem Verhalten des 6821 an fremden
Architekturen?
Was ich ausdrücklich nicht wissen möchte ist, das das Ganze keinen Sinn
hat und das ich bessr einen AVR nehmen sollte oder irgend ein ARM die
Lösung wäre. Nicht das ich davon Nichts halten würde, ich benutze auch
diese Teile..aber nicht hier in diesem Thread.
Gruß,
Pille
E hat für die Cycle-Time einen Maximalwert von 10µs. Das kann ein
Hinweis auf interne dynamische Strukturen sein, die waren zu der Zeit
absolut nicht unüblich, der berühmte 6502 ist z.B. voll davon.
Da du vermutlich NUR externen Programmspeicher benutzt und DS "direkt"
als E nutzt, sollte das aber zutreffen? Ich kenne jetzt die Busstruktur
der Controller nicht so genau.
Gruß,
Christian
Ah okay, sehe gerade den Usernamen .. vermutlich ist dir das also
bewusst ;).
Wobei ein Maschinenzyklus ja scheinbar schonmal 8 Takte also knapp 2µs
sind, wenn dann ein längerer Befehl dazwischen kommt der keine externen
Buszyklen macht?
Christian Erker schrieb:> Ah okay, sehe gerade den Usernamen .. vermutlich ist dir das also> bewusst ;).grin>> Wobei ein Maschinenzyklus ja scheinbar schonmal 8 Takte also knapp 2µs> sind, wenn dann ein längerer Befehl dazwischen kommt der keine externen> Buszyklen macht?
Ja..Sowas in der Richtung vermute ich als Ursache, wobei halt der 6850
bei Grant Searle mit dem Z80 Bustiming klar kommt und dort E aus IORQ
generiert wird.
Ich habe die maximale Taktperiode einfach außer Acht gelassen, es ist ja
beim Z80 auch nicht zu erwarten das /IORQ diesen Parameter einhält. Ich
halte es allerdings für möglich das die interne Logik des 6821 weitere
Taktflanken außerhalb der für das eigentliche Schreiben notwendigen
Zyklen erfordert, einfach um intern Irgendwas weiter zu schalten..
Natürlich ist ein Z8 kein Z80 und ein 6850 kein 6821..deshalb fragte ich
nach Erfahrungen mit den Dingern. Einen 8255A (KR580VV55A) hatte ich
shcon ausprobiert, der funzt problemlos. Ich wollte nun wissen ob das
mit den Motorrollern auch klappt..
Im Anhang mal die LA Ausgabe bezüglich E, (negiertes /DS) ..das kommt
schon immermal vor..allerdings halt bis zu 1,1ms zwischen irgendwelchen
Clocks die zwischen den Ausgaben liegen. Was könnte man statt /DS noch
als E Clock verwursten?
Gruß,
Pille
Nochwas: Nein, ich habe den U8820 zwar für externes Speicherinterface
konfiguriert, könnte das also benutzten, tue es aber nicht.
Der U8820 (und 8840) sind Entwicklerversionen des Z8, bei dem der
interne ROM nach Außen geführt und durch einen Eprom ersetzt ist, Zilog
hatte das mit Huckepackfassung direkt auf dem Z8, MME hat die ICs in
64polige Quad Inline Gehäuse gesetzt. Ich benutze also nur den
"internen" ROM ..allerdings extern.
Gruß,
Pille
Ich hatte nie verstanden, wofür man diese großen PIO-Monster braucht.
Als ich noch mit Z80 (U880) gebastelt hatte, habe ich 74LS541 (DL541)
als Input und 74LS374 (DL374) als Output verwendet.
Peter D. schrieb:> Ich hatte nie verstanden, wofür man diese großen PIO-Monster> braucht.> Als ich noch mit Z80 (U880) gebastelt hatte, habe ich 74LS541 (DL541)> als Input und 74LS374 (DL374) als Output verwendet.
Sie haben Hardware Handshake Capabilities für Parallele Ports mit
Interrupt Logik und zumindest der 6821 hat pro Kanal ein DDR Register
der die Bitweise Betriebsart als Ein- oder Ausgang ermöglicht.
Gruß,
Pille
Peter D. schrieb:> Ich hatte nie verstanden, wofür man diese großen PIO-Monster braucht.
Bei Outputs mit Einzelbitfunktion wird das Programm deutlich einfacher,
wenn man deren Zustand auch auslesen kann, ohne dafür ein
Schattenregister ins RAM zu legen. Weshalb ich dafür lieber den '259 als
den '374 verwendete, denn da muss man das nicht.
Geht es weniger um Bit-I/O, sondern um ganze Bytes, kommen mitunter noch
Handshakes hinzu. Das können echte PIOs deutlich besser als TTLs. Beim
Z8000 Baustein ging das bis zum komplexen Handshake des IEC-Bus. Hat man
dann noch Timer drin, wie bei 6522 und 6532, kann das einen kompletten
Baustein ersparen.
Pille schrieb:> und zumindest der 6821 hat pro Kanal ein DDR Register> der die Bitweise Betriebsart als Ein- oder Ausgang ermöglicht.
Das war eigentlich ziemlich verbreitet, wenn man nicht in der Intel Welt
mit dem deutlich unterentwickelten 8255 versauerte.
Pille schrieb:> Natürlich ist ein Z8 kein Z80 und ein 6850 kein 6821
Kombiniert man 68xx Bausteine mit Prozessoren aus anderen Welten, dann
muss man aufpassen, für was das E-Signal alles verwendet wird. Bei den
68xx/65xx ist das immerhin ein regelmässiges Taktsignal, was mitunter
nicht nur für den Buszyklus genutzt wird, sondern auch für
Peripheriefunktionen, interne Statemachines oder gar Timer/Counter. Ohne
E-Takt auch ausserhalb vom Zugriff funktionieren dann beispielsweise
keine Interrupts.
Darauf konnte man auch bei den Z8000 Bausteinen reinfallen, denn die
verwendeten das AS-Signal vom Businterface als Takt für interne
Statemachines, ohne dass dies klar dokumentiert wurde.
Zu den häufigsten 68xx Bausteinen in fremdem Kontext gehört der 6845,
der beim PC in CGA/MDA/EGA/... genutzt wurde und dessen Kernstruktur bis
heute in PC-Grafikkarten stecken dürfte. Dass es bei diesem Baustein
kein Problem gibt, sollte einen nicht zum Schluss verleiten, dass dies
die Regel sei. Der ist eher die Ausnahme.
Ja danke, dahin gingen meine Überlegungen schon, Z80 Peripheriebausteine
haben zu diesem Zweck ja alle einen Clock Anschluß, selbst wenn man da
wie bei der PIO /Reset einsparen muß :-)
Ich habe gestern schon überlegt den Z8 Clock zu greifen, den runter zu
teilen
und mit /DS so zu verknüpfen das der eigentlich immer durchläuft, aber
/DS eben Vorrang hat wenn es aktiv ist. Ich muß da nochmal drüber
Nachdenken.
An der 64poligen Variante des U88x0 stehen sowohl /SYNC ( ..ungefähr M1
der Z80) und SCLK (halber Systemtakt) zur Verfügung die sich zu diesem
Zweck mißbrauchen ließen, dumm ist nur das die aus der momentan
verwendeten 64 zu 40 Pol Platine mit Eprom drauf nicht nach außen
geführt werden, das werde ich also so irgendwie anknüppern müssen.
Zwischenzeitlich habe ich meine Reserven an EF68B21 gefunden und
probehalber mal so einen eingesetzt, aber das verbessert das Problem
gegenüber den Motorola MC6821 und den AMI S6821D (Milspec) die ich
bisher probiert hatte nicht, eher im Gegenteil. Evtl. liegt das auch an
meiner Initialisierung.
Ich habe am Port A zwei 4Bit HP Anzeigen dran, ähnlich der TIL311. Die
haben ein Latch und hängen mit den Dateneingängen am niederwertigen
Nibble. Das höherwertige steuert Blanking und die beiden Latches.
Das Programm gibt im Kreis was über die Uart aus und jedes mal wenn es
fertig ist wird eine Bytevariable incrementiert und über den MC6821
ausgegeben. Der seltsame Effekt ist nun, das nach Reset au beiden
Anzeigen gleichzeitig der selbe Inhalt zu sehen ist und zwar
decrementierend. Zupfe ich den Draht von E mal kurz aus dem Steckbrett
funktioniert dann die Ausgabe nach Wiedereinstecken plötzlich richtig.
Irgendwas verkorkst nach Reset die interne Logik des 6821.. mit den
68B21 ist der funktionierende Zustand nur sehr selten zu erreichen, mit
den 6821 reproduzierbar. Seltsam.
Mir ist übrigens klar das ich für die Hex-Ausgabe über die LED Anzeigen
keine PIA brauche, die könnte ich auch direkt an den Bus hängen. Die
sind nur für die Diagnose da was die PIA so treibt.
Gruß,
Pille
A. B. schrieb:> Die HD63XX-Reihe (CMOS statt NMOS) sind rein statisch aufgebaut, da sind> die Chancen groß, dass sie auch ohne freilaufenden E-Takt funktionieren.
Völlig egal wie statisch der Baustein implementiert ist, bei Interrupts
wirds bei solchen Zusammenhängen trotzdem knackig. Bei den
Handshake-Signalen Cx1/Cx2 könnte es ähnlich laufen.
Pille schrieb:>> Irgendwas verkorkst nach Reset die interne Logik des 6821.. mit den> 68B21 ist der funktionierende Zustand nur sehr selten zu erreichen, mit> den 6821 reproduzierbar. Seltsam.
Das hängt u. U. am individuellen Exemplar. Die MC68XX verwenden intern
teilweise "dynamische" Speicherzellen statt Flip-Flops (sparte
Transistoren). Und wie das bei dynamischen RAMs halt so ist: Manchen
Zellen halten selbst ohne Versorgung minutenlang ihren Inhalt, bei
anderen ist nach ein paar ms der Inhalt weg.
Das war bei einem Rechner mit 6809 und 4116 RAMs gut erkennen, weil ein
Teil des RAMs als Display-RAM verwendet wurde ... Nach ein paar Minuten
ohne Strom war der Bildschirm-Inhalt großenteils noch da.
Die 'A'- und 'B'-Versionen sind nur selektierte, also im Prinzip
'normale'.
A. B. schrieb:> Die HD63XX-Reihe (CMOS statt NMOS) sind rein statisch aufgebaut, da sind> die Chancen groß, dass sie auch ohne freilaufenden E-Takt funktionieren.
Aus dem Datasheet des HD6321. Man muss den letzten Satz zwar nicht
zwingend wörtlich nehmen, aber hinterher meckern sollte man auch nicht.
(prx) A. K. schrieb:> Völlig egal wie statisch der Baustein implementiert ist, bei Interrupts> wirds bei solchen Zusammenhängen trotzdem knackig. Bei den
Nein, denn das Datenblatt sagt eindeutig, dass die Aktivierung von IRQ
NICHT auf E bezogen ist. Die Deaktivierung dagegen auf E-aktiv des
Lesezyklus.
> Handshake-Signalen Cx1/Cx2 könnte es ähnlich laufen.
Teils, teils, s. Datenblatt. Aber letzlich egal, bei der ganzen
MC68XX-Familie wurde stillschweigend immer ein freilaufender E-Takt mit
Minimal- und Maximal-Frequenz vorausgesetzt. Weicht mach davon ab, muss
man halt mit Problemen rechnen, keine Frage.
(prx) A. K. schrieb:> A. B. schrieb:>> Die HD63XX-Reihe (CMOS statt NMOS) sind rein statisch aufgebaut, da sind>> die Chancen groß, dass sie auch ohne freilaufenden E-Takt funktionieren.>> Aus dem Datasheet des HD6321. Man muss den letzten Satz zwar nicht> zwingend wörtlich nehmen, aber hinterher meckern sollte man auch nicht.
Den sollte man auch wirklich nicht zu wörtlich nehmen, denn eines der
"Marketing"-Argumente der 63XX gegenüber 68XX war genau, dass man E
(auch dynamisch) bis herunter zu DC reduzieren konnte.
Und: Bei 6321 steht bei Enable Cycle Time bei "max" ausdrücklich ein
"-", während beim 6821 dort 10us steht. Also: Funktion ja, allerdings
werden einige Signaländerungen ausdrücklich auf E bezogen, da kommt die
Reaktion halt erst beim nächsten E-Zyklus.
Der Zusatz mit 'continuous' muss man wohl so interpretieren, dass beim
68XX das so implizit vereinbart war.
(prx) A. K. schrieb:> Und hier zum direkten Vergleich HD6321 und HD6350 (die UART aus dem> Startbeitrag). Finde den Unterschied. ;-)
Aber gern: "This signal ... of the HMCS6800 System phi_2 clock. This
signal must be a continuous clock pulse" und dann vielleicht "in the
HMCS6800 system" oder "for te PIA".
Abgesehen davon, dass "continuous clock pulse" an sich schon
widersprücklich ist ("continuous clock" wäre klar), bleibt der Bezug
halt unklar. Und wie gesagt, die Specs sagen klar, dass E auch
angehalten werden darf. Im Zweifel: Ausprobieren ;-)
Darum gehts: ... and strobe type signal ...
Die im Link des Startartikels beim 6850 genutzte Betriebsart wird also
im Datasheet des HD6350 explizit aufgeführt.
A. B. schrieb:> Pille schrieb:>>> Irgendwas verkorkst nach Reset die interne Logik des 6821.. mit den>> 68B21 ist der funktionierende Zustand nur sehr selten zu erreichen, mit>> den 6821 reproduzierbar. Seltsam.>> Das hängt u. U. am individuellen Exemplar. Die MC68XX verwenden intern> teilweise "dynamische" Speicherzellen statt Flip-Flops (sparte> Transistoren). Und wie das bei dynamischen RAMs halt so ist: Manchen> Zellen halten selbst ohne Versorgung minutenlang ihren Inhalt, bei> anderen ist nach ein paar ms der Inhalt weg.> Das war bei einem Rechner mit 6809 und 4116 RAMs gut erkennen, weil ein> Teil des RAMs als Display-RAM verwendet wurde ... Nach ein paar Minuten> ohne Strom war der Bildschirm-Inhalt großenteils noch da.>> Die 'A'- und 'B'-Versionen sind nur selektierte, also im Prinzip> 'normale'.
Hmm. ich habe 4 verschiedene alte Motorola, mindestens 3 AMI und 3 ST
EF68B21 ausprobiert, das nimmt sich Alles nicht viel. Die Motorola und
die AMI verhalten sich identisch. Die AMI sind entsorgte
Bundeswehrersatzteile, die gabs in der Ausführung Lila und goldglänzend,
die wollte der Schrotti unbedingt behalten, die unspektakulären im
Braunen CerDIP mit verzinnten Kontakten durfte ich mitnehmen, davon habe
ich ca. 35 Stück..Milspec. Deswegen auch der Versuch die irgendwie auch
nur halbwegs sinnvoll zu verwursten.
Das ein 6821 1Mhz, ein A 1,5Mhz und ein B 2Mhz spezifiziert sind, ist
mir bekannt. Ich habe zwar einige HD63C09, aber eine 63er PIA nicht.
DRAMs an 8Bittern Refresh und Datenhaltezeiten kenne ich von früher aus
eigener Anschauung mit den selben Erfahrungen.
@A.K. Interrupts sind erst mal nicht das Problem, ein solcher würde ja
im Endeffekt beim Z8 auf einer als extern Int programmierten Portleitung
landen, die dann schon irgendwas draus macht.
Du scheinst ja die Ursache gefunden zu haben..im Prinzip das was ich
auch vermutete, der Takt ist für interne Vorgänge erforderlich, nur ist
im Standard-Datenblatt davon Nichts zu finden. Ich habe vorhin mal ein
Bisschen gespielt und oszillografiert, ich weiß noch nicht wie ich zu
einem periodischen Enable kommen soll, dessen Timing dann auch noch zu
den Ausgabezugriffen des Z8 paßt.
Jetzt war 2h lang ein Syrer da der hier FTTH eingeblasen und gespleißt
hat (er hat sehr sauber und ordentlich gearbeitet, 6 Fasern unter
0,2dB). Nun ist für heute erst mal die Zeit für Spielereien alle... habt
erst mal Dank, ich melde mich wieder wenn mir dazu was einfällt, Ideen
nehme ich aber gerne entgegen.. :-)
Gruß,
Pille
....AAaaallloso..entweder die maximum E -Cycle Time hat gar Nichts zu
sagen, oder es ist extrem Herstellerabhängig, siehe Hitachi Datenblatt.
Leider habe ich keine PIA von Hitachi und die Einzige von Ebay aus
Deutschland sieht seltsam bedruckt aus (gelaserte von goodtronic sollte
man besser nicht kaufen, allerdings bekommt man ja das Geld zurück) und
ist mir zu Teuer :-)
Hat Jemand eine rumliegen für Experimente? Ich schicke dafür 3 neue von
AMI zurück ..
Es interessiert mich halt nur was lost ist, wirklich brauchen tue ich
gar Keine..
Es erschiene mir allerdings logisch wenn die PIA abhängig von einem
"regelmäßigen clock" ist, eine 6850 bekommt einen Takt entweder über RxC
oder TxC..
Gruß,
Pille
Ich habe heute wieder etwas Muße gehabt und mich noch mal rangesetzt.
Suchen auf vorhandenen 6809 Platinen förderte auch noch einen
eingelöteten HD6821 zu Tage, also habe ich das Teil ausgelötet, die
Anschlüsse geputzt und ausprobiert..geht genau wie die anderen auch :-(
Ok, also jetzt noch mal langsam, ich bin die ganze Initialisierung noch
einmal durchgegangen und: Bingo. Ich habe dabei 1x PIA Daten und
Controlregister verwechselt. Scheiße! Nachdem das behoben war
funktionierte natürlich der HD6821, ein danach eingesteckt AMI S6821 tut
genauso. Schnell noch ne einfache Byteeingabe überprüft, funktioniert
auch. Noch nicht getestet habe ich einen Motorola MC6821, denke aber ich
werde keine Unterschiede finden, ich probiere das aber der
Vollständigkeit halber noch aus, auch mit den EF68B21.
Noch einmal als Erinnerung das wirklich der unwahrscheinliche Fall
eintritt und das Jemand nachempfindet: Ich habe auf der Adapterplatine
einen UC8820 sitzen und da der maximal 5Mhz verträgt, ist ein 4,9152Mhz
Quarz wegen der Baudraten der SIO aufgelötet. Ich denke zwar das das mit
der nominalen Taktfrequenz von 7,3728Mhz für die UB8820 noch genauso
geht, weiß es aber nicht! Der Leidensdruck einen QIL64 Chip auszulöten
und zu ersetzen ist derzeit gering.
Merke: Kaum macht mans richtig, schon funktionierts!
Asche auf mein Haupt!
Pille