Hello, Guest the thread was called1.4k times and contains 19 replays

last post from Gerrit at the

Kernal, Basic und Charset in einem EPROM unterbringen

  • Hallo Gemeinde, ich such nun schon ne ganze Weile, aber ich find den Gottverdammten Fred nicht :böse


    Mir hallt im Hinterkopf ein Bild (hier aus dem Forum), auf dem man sieht, wie ein kluger Mensch, alle 3 ROMs des C64 auf eines gepackt hat um die Lebensdauer des Spannungsreglers zu erhöhen. Da ich grade einen Brotkasten umrüste als Spende, mit SD-Karten-Laufwerk und Jiffy, sollte das Ding eben schon etwas haltbarer sein und daher möchte ich defekten ROMs vorbeugen und ebenso alles in ein ROM verpacken, umschaltbar zwischen Jiffy und Orig.


    Wenn sich der Schuldige bitte melden würde, wär ich äußerst dankbar :)

  • Hi,
    Das ist gar nicht so kompliziert. Neben dem Eprom (32k) benötigst Du nur zwei And-Gatter, die ja auf einem weiteren Chip Platz haben.
    Siehe meinen Anhang.
    Wie man sieht muss das CharRom-select in dem Fall nicht mal mit in der Schaltung verwendet werden, es ist nur nötig alle /CS leitungen an den /CS des Eproms anzufügen, damit es nur angesprochen wird wenn auch ein ROM angesprochen ist.


    Hoffe das hilft so, es ist nur kurz zusammengeklöppelt, ich übernehme keine Garantie ;)

  • Das mit den Gattern lässt sich durch eine Diode in beiden Zweigen beheben, wenn ich nicht irre. Und in dem Programm in dem ich es erstellt habe war A13 durchaus selektiert - Wenn /CS kernal low ist muss ja /CS Basic high sein und somit schaltet /Kernal0 zwischen den beiden Kernalbänken um.
    Umgekehrt, wenn /CS Kernal high ist wird A13 high in dem Moment High wo auch /CS Basic high ist, dann ist also das CharRom ausgewählt.


    Der Schaltplan hat in dem Programm wie gesagt problemfrei funktioniert. Das mit den Dioden hätte ich übersehen, zugegeben.

  • Wenn du Dioden einbaust brauchst du noch einen Pullup-Widerstand an A13.


    Ausserdem wäre da noch das Problem was passiert wenn Kernal0 auf LOW gezogen ist aber der C64 mit BASIC bzw. Char-ROM reden will. Du musst also dafür sorgen, daß der Schalter nur dann eine Auswirkung hat wenn _CS Kernal LOW ist.


    Es hat schon seinen Grund warum ich einen 74LS153 und einen 74LS11 brauchte... Mit dem netten Nebeneffekt, daß man so 2 Charsets haben kann. :)

  • Wenn Kernal0 auf low ist wird das AND nicht wahr, also selektiert es A13 nicht. Das Andere AND hingegen wird durch /CSKernal welches ja High sein muss wenn Char oder Basic aktiv sind schon halb getriggert. Hier entscheidet dann ob /Basic low oder High ist welches der Roms angesprochen wird.


    Wenn Kernal0 auf High ist wird das And nur wahr wenn zeitgleich auch Basic High ist - was der Fall wäre wenn a) Das Kernal aktiv ist - dann wird Kernal Bank 1 gewählt, da A13 selektiert wird oder b) das CharROM aktiv ist, was aber ja schon über das erste AND in dem Fall A13 auf High zieht.


    Kernal0 beeinflusst also nur den Lesebereich wenn /CSKernal auf low ist. Den Pullup (Aber müsste es nicht ein Pulldown sein?) hat man ja auch noch rasch dazu gedengelt. Das Programm was ich da nutze ist rein auf Logik ausgelegt, Widerstände etc. sind da nicht drin.

  • Im Anhang ein Bild was alle relevanten Schaltzustände zeigt - zumindest in der Software funzt es wie gesagt problemfrei wie ich es sage. Ich bin kein Experte, daher mag ich durchaus falsch liegen, aber /kernal0 (was bei mir der Schalter ist der zwischen den Betriebssystemen umschaltet) hat da nur Funktion wenn er es soll:
    Erläuterung:
    Oben links:
    Kernal ist low, Basic High, Schalter Kernal null low -> A13 und A14 sind low, somit ist Bank 0 (Kernal0) gewählt.
    Oben rechts:
    Kernal low, basic und Kernal0 sind high. A14 bleibt 0, a13 ist high, damit ist Bank1 (Kernal1) gewählt.
    Mitte links:
    Kernal high, Basic low, K0 low: A14 ist High, A13 low -> Bank 2 (BasicRom)gewählt
    Mitte rechts:
    Kernal High, Basic High, k0 low: A13 und A14 High, Bank3 (CharRom) ist gewählt
    Unten links:
    Kernal High, Basic low, k0 High: A14 Gewählt, A13 ist low, somit ist Bank 2 (Basicrom) gewählt, auch wenn der Kernalumschalter auf dem alternativen System liegt.
    Unten Rechts:
    Kernal High, Basic High, K0 high: A13 und 14 High, somit Bank 3 (Charrom) gewählt, auch wenn der Kernalumschalter auf dem alternativen Kernal steht.


    Das Programm sagt es geht, es kümmert sich halt nicht um die Feinheiten wie schwebende Eingänge, weshalb der von Dir vorgeschlagene Widerstand sicher Sinn macht.

  • Schade, ich lese gern akuten Blödsinn ;)


    Nee, mal im Ernst, ich bin in Elektronik wirklich unerfahren und lasse mich gern verbessern. Empfinde das als sehr konstruktiv, und ich freue mich immer wenn ich noch was lernen kann. Daher wäre ich sehr froh wenn mir Gerrit (der nach allem was ich bislang von ihm hier gelesen habe ja wirklich sehr fit in der Thematik ist) meine Denkfehler zeigt - bislang hab ich nicht verstanden was an meinem Vorschlag nicht funktionieren kann.


    Das Programm was ich da nutze (Logic4dude) ist zugegeben sehr simpel und befasst sich rein mit den Logikleveln, daher sind da sicher Fehler mit möglich.

  • Dein Problem sind immer noch die 2 zusammengeschalteten Ausgänge der UND-Gatter. Es funktioniert mit Dioden auch nur dann wenn ein HIGH gegen LOW gewinnt. Das geht aber nur mit einem Pulldown-Widerstand und genau den will man nicht.


    Wenn du dir den Schaltplan des C64 anschaust siehst du, daß es dort fast nur Pullups gibt (IEC-Bus, Prozessorport, diverse Steuerleitungen) und Gatter die die Leitung nach GND (LOW) ziehen. Der übliche Grund dafür ist, daß die Treiber nach GND stärker sind als die Treiber nach +5V. Man kann also beim Pullup kleinere Widerstände nehmen und bekommt so steilere Flanken.


    Deine Schaltung kann zum funktionieren gebracht werden wenn man einen 74LS32 (OR) dazunimmt um die Ausgänge der beiden ANDs zusammenzufassen. Den 74LS08 muss man durch einen 74LS11 ersetzen da man zur Zusammenfassung der drei _CS-Signale für das _CS am EPROM ein AND mit 3 Eingängen braucht. Jetzt haben wir schon 2 ICs. Dann kann man auch gleich meine Schaltung benutzen und hat als Bonus die Möglichkeit für das zweite Char-Set.


    Als kleine Übung versuch mal deine Schaltung auf einer 250469 zum Laufen zu bekommen. Dort hat man nur ein zusammengefasstes _CS für BASIC und KERNAL.

  • Herzlichen dank auch von mir für die geduldigen Erklärungen seitens Gerrit.
    Es liegt also im wesentlichen am "Wettstreit der Logiklevels" dass es bei meiner Version da Probleme geben würde, wenn ich das richtig verstehe. Allerdings bleibt mir eine Sache dabei noch unklar - wenn ich mit den Dioden ja eine Sperre errichte, warum ist dann das Highlevel nicht automatisch führend? Dank der Diode in dem Zweig der low ist kann der Strom ja nicht darüber zurückfliessen, also müsste A13 doch sicher ein High-Level bekommen, oder? Wo liegt da mein Denkfehler?
    Mit dem Oder-Gatter wäre das ja zuverlässig verhindert, aber wie Du selbst ja schon sagst hab ich dann ebenfalls zwei IC verbraten.
    Habe gestern noch ein wenig hin-und her überlegt, bin aber in der Tat zu keinem besseren Ergebnis gekommen. War ein lehrreicher Abend.

  • wenn ich mit den Dioden ja eine Sperre errichte, warum ist dann das Highlevel nicht automatisch führend? Dank der Diode in dem Zweig der low ist kann der Strom ja nicht darüber zurückfliessen, also müsste A13 doch sicher ein High-Level bekommen, oder? Wo liegt da mein Denkfehler?


    Je nachdem wie du die Dioden verbaust (solange beide in dieselbe Richtung zeigen. Tun sie das nicht ist wieder ein Kurzschluss möglich) kommt entweder HIGH oder LOW durch und das Gegenteil wird geblockt. Aber ohne Pullup/Pulldown-Widerstand wird sowas nicht korrekt funktionieren da die Diode verhindert, daß der Pegel sich ändert auch wenn das Gatter seinen Ausgang wieder ändert. Auch dieses kurze Stück Draht/Leiterbahn ist ein Kondensator und auch alte CMOS-EPROMs sind so gut, daß sich die Ladung noch eine Weile halten kann. Siehe dazu das Auslesen unbenutzten Adressraumes wo man dann das letzte vom VIC gelesene Byte liest.


    Warum ein Pulldown eine schlechte Idee ist hatten wir gestern schon.