Hello, Guest the thread was called5.9k times and contains 96 replays

last post from skoe at the

Modul seziert

  • Au! Ich wollte das eigentlich sehr einfach per Inverter lösen ...


    Hab ich ja auch so, "scheint" auch zu funktionieren. Vielleicht sollten wir uns doch mal genau das Timing am Bus ansehen, wie Jens schon vorgeschlagen hat. Vielleicht kann man Phi2 irgendwie mit /WR vertüddeln, damit man immer ein paar ns "Leerlauf" zwischen /OE und /WE hat. Ist nur Spekulation... Muss heute abend mal 6502-Datenblätter suchen. Oder hat jemand noch bessere Quellen zu dem Thema Bus-Timing?


    Wissenswert wäre ja auch, wenn /ROML unf /ROMH schalten. Sind das nur Verknüpfungen aus den Adressleitungen (Also: "Kurz nach" anlegen der Adresse sind diese Leitungen richtig gesetzt?)

  • Oh je, hab mir gerade das Datenblatt des 6510 genauer angesehen. Die Sache mit dem überlappenden /OE und /WE scheint ja nur die Spitze des Eisbergs zu sein.


    Ist es richtig, dass /AEC:
    1. Mit in die Erzeugung von /ROML einfließt?
    2. Bereits mit der H-Flanke von Phi2 wieder inaktiv wird?


    Das würde bedeuten, dass in der Schaltung /CE am Flash bereits mit der H-Flanke von Phi2 inaktiv wird. Aber der 6510 liest die Daten anscheinend erst in der H-Phase von Phi2. Eigentlich liegen die Daten durch das zurücknehmen von /AEC und damit von /ROML gar nicht mehr unbedingt auf dem Bus.


    Was verstehe ich falsch? Oder warum funktioniert das eigentlich?

  • Hallo,

    Vielleicht kann man Phi2 irgendwie mit /WR vertüddeln, damit man immer ein paar ns "Leerlauf" zwischen /OE und /WE hat.

    Es macht immer Sinn, für /WE das R/W-Signal mit dem Phi2-Signal zu verknüpfen. Nur so ist gewährleistet, daß die richtigen Daten auch geschrieben werden. Die meisten Bausteine sind nicht flanken- sondern zustandsgetriggert. Aber lag Phi2 nicht auch schon am PLD an?


    Außerdem kann man Phi2 auch für das /OE verwenden. Dann ist in der inaktiven Phase der CPU (hier arbeitet dann der VIC) weder /OE noch /WE aktiv und damit keine Überlappung gegeben!


    Gruß Martin

  • Danke für Deine Antwort, Martin.


    Es macht immer Sinn, für /WE das R/W-Signal mit dem Phi2-Signal zu verknüpfen. Nur so ist gewährleistet, daß die richtigen Daten auch geschrieben werden. Die meisten Bausteine sind nicht flanken- sondern zustandsgetriggert.


    Wenn ich das inzwischen richtig verstanden habe, Kommt /ROML bzw. /ROMH durch die Verknüpfung mit AEC des 6510 erst dann, wenn PHI2 sowieso auf High geht. Da ich /ROML als /CE benutze, wäre der Chip also noch disabled, wenn Adressen, /OE und /WE noch instabil sind.


    Stimmst Du mir da zu oder habe ich was übersehen?


    Aber lag Phi2 nicht auch schon am PLD an?


    PLD?


    Dann ist in der inaktiven Phase der CPU (hier arbeitet dann der VIC) weder /OE noch /WE aktiv und damit keine Überlappung gegeben!


    Dann müsste auch /ROML und damit /CE weg sein, s.o.


    Wenn meine Annahmen stimmen, könnte man die Schaltung sogar so lassen.

  • Hallo skoe,

    Wenn ich das inzwischen richtig verstanden habe, Kommt /ROML bzw. /ROMH durch die Verknüpfung mit AEC des 6510 erst dann, wenn PHI2 sowieso auf High geht.

    Auf jeden Fall hast Du Recht, daß /ROML und /ROMH auch mit AEC verknüpft werden. Das macht auch Sinn, da AEC für Address Enable Control steht und damit die Daten-, Adreß- und R/W-Leitung hochomig geschaltet werden kann. Die Steuerung erfolgt direct vom VIC. Wann diese Leitung nun in Bezug auf Phi2 vom VIC angesteuert wird, entzieht sich meiner Erkenntnis. Dafür kenne ich den VIC nicht gut genug. Auf jeden Fall kann dies nur dann erfolgen, wenn die CPU Aktivitäten durchführt und der VIC sich auf dem Bus passiv verhält. (Da spielt also die Phi2-Leitung schon eine Rolle.) Damit ist dann auch sichergestellt, daß bei Adressierungen über den VIC das Modul sich nicht angesprochen fühlt. Einzige Ausnahme ist die /ROMH-Leitung, welche im UltraMax-Modus sich auch als Character-ROM für den VIC angesprochen fühlt.


    Da ich /ROML als /CE benutze, wäre der Chip also noch disabled, wenn Adressen, /OE und /WE noch instabil sind.

    Die Verwendung von /ROML als /CE ist soweit okay. Damit ist sichergestellt, daß der Chip mit der richtigen Adresse freigegeben wird. Die Leitungen /OE und /WE sind eigentlich niemals instabil. Entweder sind sie high und damit inaktiv oder aber low und aktivieren einen Zugriff auf den Chip. Dabei müssen wir zwischen Lesen (/OE) und Schreiben (/WE) unterscheiden. Beim Lesen wird das zuvor evtl. schon adressierte und durch /CE freigegebene Datum auch auf den Datenbus gelegt. Dieses verbleibt dann, bis es von der CPU gelesen wurde und mittels Phi2 das Ende des Lesezyklus angezeigt wurde. Dann wird auch /OE wieder inaktiv und der Bus für den VIC freigegeben. Beim Schreiben werden die Daten von der CPU auf den Bus gelegt. Diese werden auch hier von der CPU bis zum Ende des Schreibzyklus (auch mittels Phi2 vorgegeben) belassen und können dann zustandsgetriggert mit der /WE Leitung übernommen werden, wenn diese mit Phi2 verknüpft wurde. Die nötigen Zeiten können dem Datenblatt von der CPU entnommen werden und heißen dort "data hold time read" und "data hold time write".


    Gruß Martin

  • Das macht auch Sinn, da AEC für Address Enable Control steht und damit die Daten-, Adreß- und R/W-Leitung hochomig geschaltet werden kann. Die Steuerung erfolgt direct vom VIC.


    Ach (an die Stirn klatsch), das ist am 6510 ein Eingang, kein Ausgang. Da lag ich ja ziemlich daneben. Dann ist es wahrscheinlich auch z.T. Mist, was ich oben geschrieben habe.


    Morgen muss ich im ausgeschlafenen Zustand Deinen Beitrag nochmal gaaanz langsam lesen.

  • Hehe, ich wechsle auch ständig zwischen diesen beiden Threads, weil es das gleiche Problem/Thema auf zwei Baustellen gibt. Die Threads verschwimmen geradezu........ Vielleicht sollten wir "Flasherei in Diddles High-End Expansions und Skoes Low-End Cartridge" aufmachen :-)

  • Es macht immer Sinn, für /WE das R/W-Signal mit dem Phi2-Signal zu verknüpfen. Nur so ist gewährleistet, daß die richtigen Daten auch geschrieben werden. Die meisten Bausteine sind nicht flanken- sondern zustandsgetriggert.


    Vielen Dank, Hofmar! Du hast mir gerade eine offene Frage beantwortet!
    (Vgl. Diskussion um "unnötige Verknüpfung" beim CHARGEN)

  • So, hier ist die schöne neue Steuerlogik mal aufgemalt:


    Ich glaube mit den Erklärungen oben jetzt alles verstanden zu haben und bin damit zu diesem Ergebnis gekommen. Die alte Logik mit den NORs habe ich auch gleich mit NANDs neu gemacht. Leider sind's 5 Gatter. Grrr.


    Aber die freien Gatter an dem zusätzlichen 74LS00 kann ich benutzen, um /GAME und /EXROM aus dem 74LS273 zu negieren. Das führt unterm Strich dazu, dass der Benutzer in keiner Situation bei eingeschaltetem Rechner die Jumper umstecken muss. Dann gibt es:
    - eine Stellung "Programmieren", wo die Leitungen von der Software gesetzt werden können und das Modul nicht automatisch bootet (da High).
    - offen oder in der anderen Stellung liegen die Leitungen auf High/Low, das Modul kann nicht manipuliert werden und bootet


    Die untere Hälfte der Schaltung kann man wahrscheinlich 1:1 in Diddls Projekt in den CPLD brutzeln.


    Oder steckt doch ein Fehler drin?


    Noch zweieinhalb Fragen:
    - Kann ich auch 74HC statt 74LS nehmen? Ist das vielleicht sogar besser?
    - Muss ich High-Eingänge wirklich über einen Widerstand an VCC legen, oder geht's auch direkt? Warum eigentlich (nicht)?


    Gruß,
    Thomas

  • - Kann ich auch 74HC statt 74LS nehmen? Ist das vielleicht sogar besser?


    HC? Wieso um J-S-Willen HC? Die haben eher 4xxx-CMOS-Eigenschaften als TTL. Wenn schon, dann HCT - die verwende ich sehr gerne, noch viel lieber als LS.


    - Muss ich High-Eingänge wirklich über einen Widerstand an VCC legen, oder geht's auch direkt? Warum eigentlich (nicht)?


    Dazu zitiere ich aus dem Texas Instruments Pocket Guide "Übersicht für Entwickler und Projektierer" Ausgabe Sept. 1976:



    Unbenützte Eingänge... sehr lustig.


    Irgendwo hatte / habe ich auch einen Text, der genauer erklärt, warum Vcc<=5,5V nicht gewährleistet werden kann. Hat irgendwas mit Potentialverschiebung im Moment des Abschaltens zu tun, wenn ich mich richtig erinnere.

  • HC? Wieso um J-S-Willen HC? Die haben eher 4xxx-CMOS-Eigenschaften als TTL. Wenn schon, dann HCT - die verwende ich sehr gerne, noch viel lieber als LS.


    Soll ich ehrlich sein? Bei Rechelt 13 Cent vs. 10 Cent, bei Conrad sogar 47 Cent vs. 17 Cent. Und da dachte ich mir in meiner naiven Art: Warum nicht? Auf meiner Test-Platine hab ich im Moment alles bunt durcheinander, was halt so in der Bastelkiste lag :-)


    Dazu zitiere ich aus dem Texas Instruments Pocket Guide "Übersicht für Entwickler und Projektierer" Ausgabe Sept. 1976:


    Sehr nützlich, danke.

  • :juhu:
    Nachdem ich den 74LS02 gegen zwei 74LS00 ausgetauscht und die Negation von /EXROM und /GAME in die Software eingebaut habe:


    Der C64 steht gerade drüben im Arbeitszimmer und beschreibt und löscht eine Flashkachel immer abwechselnd in einer Endlosschleife. Auf dem Bildschirm flackern die Ausgaben der Statusbits des Flashs vor sich hin. Alles wie es sein soll.


    Die Software ist im Moment noch mit Spucke und Bindfaden gestrickt, aber morgen kann ich endlich anfangen, sie aufzuräumen und auf die anderen Bänke auszudehnen.


    Auch die Negation von /EXROM und /GAME hat genau das erwünschte Ergebnis: Ein ungeflashtes Modul hindert den C64 nicht am hochlaufen und lässt sich ohne Umstecken der Jumper flashen.


    Danke nochmal an alle helfenden. Jetzt kann ich endlich Software machen.
    :juhu:

  • Hallo skoe,

    Oder steckt doch ein Fehler drin?

    Das sieht schon sehr gut aus. Du hattest ja auch schon Erfolg damit. Jedoch gibt es einen "Designfehler":


    Du verschaltest den CLK-Eingang des 273 über die Signale Phi2 und I/O1. Dabei ist es offensichtlich egal, ob unter der Adresse für I/O1 ein lesender oder schreibender Zugriff erfolgt. Sollte ein lesender Zugriff stattfinden, leigen keine gültigen Daten auf den Datenbus an. In der Regel sollte der 6502 dann das Highbyte der Adressen lesen. (Ob's beim 6510 auch so ist, habe ich noch nicht ausprobiert.) Diese "zufälligen" Daten würde dann auch mittels CLK in das 273 geschrieben werden. Besser wäre es hier auch noch die negierte R/W-Leitung zu berücksichtigen und CLK nur beim Schreibzugriff zu erzeigen. Dafür könntest Du anstelle des 2fachen NAND ein 3fachen NAND (74x10) verwenden. Jedoch hast Du dann nur noch 2 Stück anstelle von 3 NAND, dafür mit drei Eingängen frei.


    Gruß Martin

  • an. In der Regel sollte der 6502 dann das Highbyte der Adressen lesen. (Ob's beim 6510 auch so ist, habe ich noch nicht ausprobiert.)



    Beim 6510 wohl schon, aber nicht im C64, da ja im vorigen (Halb-) Zyklus der VIC Grafikdaten übertragen hat. Wobei das Verhalten nur beim 8500 beständig auftritt. Gibt ein paar Progrämmchen, die das Verhalten "nutzen" :)


    Zur Ansteuerung des '273 könnt ihr ja mal in meinen NeoRAM Schaltplan schauen. Mit einem Dekoder vom Typ '138 oder '139 kann man sowas auch elegant lösen.

    Zuletzt repariert:
    21.2. Logitech M570 Microschalter ausgetauscht - geplante Obsoleszenz durch Billigtaster?
    19.11. Toshiba 3,5" Floppy defekter Elko durch Kerko getauscht auf Motorplatine
    27.11. 1541B Dauerlauf, Elko im Resetschaltkreis defekt, nicht der 7406 wie zuerst verdächtigt!

  • Du verschaltest den CLK-Eingang des 273 über die Signale Phi2 und I/O1. Dabei ist es offensichtlich egal, ob unter der Adresse für I/O1 ein lesender oder schreibender Zugriff erfolgt.


    Das Problem hatte ich auch schonmal gesehen aber wirkungsvoll verdrängt. Du hast recht, das ist schon ein ziemlich starker Schönheitsfehler, weil Software durch lesen von $DExx sich selbst zum abstürzen bringen kann. Aber weil wenigstens keine Hardware in Gefahr ist, hab ich's erstmal so gemacht.


    Zur Ansteuerung des '273 könnt ihr ja mal in meinen NeoRAM Schaltplan schauen. Mit einem Dekoder vom Typ '138 oder '139 kann man sowas auch elegant lösen.


    Erstmal werde ich angestrengt darüber nachdenken, ob man das Problem nicht mit den vorhandenen Mitteln (eine Hand voll NANDs) lösen kann. Trotzdem würde ich gern einen Blick auf Deinen Schaltplan werfen. Auf Deiner Seite scheint der aber noch nicht zu finden zu sein. Um hier im Forum zu suchen fehlt mir jetzt die Zeit, das mache ich später.

  • ... erst eins, dann zwei, jetzt schon ne Hand voll ...


    Ich meinte die zwei ICs (also 8 NANDs, was eine gaaanz kleine Handvoll ist).


    Quote

    Selbst wenn man keine großen Hände hat empfehle ich ein CPLD.


    Jetzt kommt wieder die CPLD-Peitsche :-) Lass mir doch den Sportsgeist, es mit zwei TTL-ICs hinzubekommen.


    Nur um sicher zu sein, dass niemand denkt, wir bekriegen uns hier: Diddl ist eben von den neuen Möglichkeiten fasziniert, die die programmierbare Logik bietet. Und mich fasziniert es, das Ziel mit geringst möglichem Material/Werkzeug-Einsatz umzusetzen. Trotzdem ziehen wir an einem Strang. Ich nehme es Diddl natürlich nicht übel, wenn er an solchen Punkten die Vorzüge eines CPLDs anspricht.


    Ich bin mir relativ sicher, dass das enweder mit 8*NAND oder mit 4*NAND und 4*NOR geht, also mit 2 TLL-ICs. Nur leider muss ich mich jetzt mal am Riemen reißen und an meine "richtige" Arbeit denken. Was etwas schwer ist, wenn einem so eine Knobelaufgabe im Kopf rumschwirrt...