Hallo Besucher, der Thread wurde 9,4k mal aufgerufen und enthält 71 Antworten

letzter Beitrag von rom_l am

Habe ich alles richtig verstanden? (Für Cartridge-Nachbau)

  • Hallo, die Runde... (C64-Frage)


    Stimmt das so? Ich möchte einen 1024Mbit Baustein für 16k HES Forth Cartridge verwenden. Habe Prommer und .BIN-Datei.


    Eine Cartridge für den Expansion Port gibt sich über zwei Leitungen zu erkennen, mit denen eine Cartridge ihren Adressbereich signalisiert: GAME und EXROM. Um 2 x 8k, zwei Bänke, verwenden zu können, muss die Cartridge GAME und EXROM auf 0V ziehen. Extra Elektronik (PLA) bildet auf Grund dieser Einstellung die richtigen Bussignale für das Einblenden des ROM-Adressbereichs von 8000h bis C000h. Dazu wird ROM_L (rom low) für 8000h-9FFFh auf 0 gezogen und ROM_H (rom high) für A000h-BFFFh auf 0V gezogen (Active low logic, die meisten Memory-Bausteine erwarten für Chip Select und Output Enable 0V für 1).


    (Für Adressen im Abschnitt C000h-FFFFh sind ROM_L und ROM_H +5V, d.h. der Baustein fühlt sich für diesen Bereich nicht angesprochen. Was gut ist wegen Kernal und I/O.)


    Falls das so stimmt, müsste die Cartridge bloß eine simple Adresslogik enthalten, um ROM_L und ROM_H nach Active Low-Logik zu verodern, was der zitierte Gentleman Electronicist mit zwei Dioden erledigt, auch wenn dieses Detail in der Originalschaltung unter anderen Details versteckt ist:


    9di6ph.png


    Die Dioden bedienen an ihrer Plus-Seite die beiden ROM-Baustein-Anschlüsse Chip Select und Output Enable. Um den Chip anzusprechen, zieht die PLA ROM_L oder ROM_H auf 0V; ansonsten sind 'CS und 'OE über die Widerstände +5V.



    So einfach ist das, wenn ich mich nicht irre. Richtig? Hat jemand diese Konstruktion schon erfolgreich hinter sich?


    Gentleman Electronicist: http://www.savel.org/2020/03/2…ent-page-1/#comment-13205

    bzw.: http://www.vabolis.lt/stuff/20200210a1.png


    DANKE FÜR DIE AUFMERKSAMKEIT

  • Vielleicht ist das ja klar oder ich habe es überlesen, aber man muss dann natürlich auch noch entweder ROML oder ROMH mit einer weiteren Adressleitung des ROM Chips verbinden, wenn man nicht in beiden 8k Bänken die selben Daten haben möchte. Die vollständige Schaltung ist in diesem Artikel gut beschrieben:


    http://blog.worldofjani.com/?p=879

  • Sicher?

    Am Expansion-Port sollten A0..A15 direkt von der CPU anliegen, beim Zugriff auf $8000..$9FFF sollte A13=0 sein und bei $A000..$BFFF dann A13=1.


    Beim VC-20 muss man aufpassen. weil dort nur A0..A13 anliegen und er diese komische BLK-Adressierung hat, aber beim C64 sehe ich jetzt nicht, was das Problem sein sollte.


    Wie gesagt, das gilt nur für CBM80-Module. Im Ultimax-Mode sind die ROMs ja nicht hintereinander ($8000..$9FFF = ROML und $E000-$FFFF = ROMH), da klappt das so nicht.


    [EDIT]

    dass hier auf C64-Seite nur A0-A12 relevant sind, die man braucht, um 8k zu adressieren.

    Ja, für 8 kB schon, aber er will ja 16 kB adressieren = eine Adressleitung mehr.


    Deine Methode mit einem der beiden ROMx als A13 funktioniert natürlich auch.


    [/EDIT]


    [EDIT 2]


    Bei "fertigen" (vorliegenden, umzubauenden) Cartridges hat man auf der Platine oft nur A0..A12, die anderen Kontakte sind oft nicht belegt, da wird das evtl. schlagend.


    [/EDIT 2]

  • Nachtrag (beim "Meditieren" während des Rasenmähens eingefallen :-D):

    Ich habe auch noch darüber meditiert und muss noch einmal zugeben, dass mir bei logischer Betrachtung kein Grund mehr einfällt, warum das über A13 nicht funktionieren sollte. :)


    Diese A0..A12-Denke stammt vermutlich daher, dass früher für 16 kB-Cartridges zwei 8 kB-(EP)ROMs verwendet wurden. ^^

    Ja, das auf jeden Fall. Aber man sieht es auch bei den meisten "modernen" Modulen so, was vielleicht daran liegt, dass die Verwendung von "ROML als A13" auch gleich für den Ultimax Modus funktioniert, und dabei keinen zusätzlichen Aufwand bedeutet.

  • Aber das muss ich wirklich mal ausprobieren, das interessiert mich jetzt. :-)


    [EDIT]


    Übrigens: Wenn das eine Dela 85474 ist, hat sie A13 verdrahtet:


    mo-universal-board-dela-85474.jpg


    (Bild-Quelle: https://www.polyplay.xyz/MO-universal-board-DELA-85474 )

    l

    Dann muss man allerdings wohl diesen Jumper schließen:



    [/EDIT]

  • Vielen Dank für die vielen Antworten. Ich bin noch mit der Verarbeitung beschäftigt und tummle mich. Der verlinkte Artikel mit der Schaltung ist schon mal sehr ermutigend, so weit ich das im Moment überblicke. (Meinen c64-Brotkasten habe ich von einem edlen Spender geschenkt bekommen; bin Anfänger, und bei Elektronik auch. Modernes Netzgerät vom Amazon ist unterwegs.)

  • kinzi:


    Zitat

    Jetzt mal nur für CBM80-Cartridges, Ultimax ist was anderes. Das war ja aber auch nicht gefragt, oder?


    Von Ultimax habe ich erst im verlinkten Artikel erfahren. Ja, ganz normale c64-Cartridge 8000h-C000h.


    Zitat

    Öh, bei einem einzelnen IC sollte es eigentlich reichen, zusätzlich A13 zu verdrahten.


    $8000..$9FFF: A13=0

    $A000..$BFFF: A13=1


    So hätte ich das auch gemacht. Die Entscheidung, ob mit a13 (und den Adressleitungen rechts davon) RAM oder ROM gemeint ist, übernehmen eben ROM_L und ROM_H. Das finde ich angenehm, weil man als Cartridge-Hersteller (ich zum Beispiel) praktisch keine extra Adress-Logik braucht. ABER: im verlinkten Schaltplan (für 16k in EINEM 27128er) ist a13 so verdrahtet, dass ein a13 von ROM_L auf 0V gezogen wird. Das erschien mir eher überflüssig, ABER:


    Rame:


    Zitat

    a13 vom EPROM geht auf RL.

  • So hätte ich das auch gemacht. Die Entscheidung, ob mit a13 (und den Adressleitungen rechts davon) RAM oder ROM gemeint ist, übernehmen eben ROM_L und ROM_H. Das finde ich angenehm, weil man als Cartridge-Hersteller (ich zum Beispiel) praktisch keine extra Adress-Logik braucht. ABER: im verlinkten Schaltplan (für 16k in EINEM 27128er) ist a13 so verdrahtet, dass ein a13 von ROM_L auf 0V gezogen wird. Das erschien mir eher überflüssig, ABER:

    Wenn du ein 16 kB-EPROM hast, hat dieses A0..A13 (14 bit, 2^14 = 16384). Daher musst du irgendwie A13 für das EPROM generieren. Wenn du das Cartridge neu designest, kannst du A0..A13 vom Bus und die Zwei-Dioden-Methode nehmen:

    • /ROML=0 und /ROMH=1 bei einem Zugriff auf $8000..$9FFF, wenn mindestens /EXROM=0 ist. A13 des Busses ist dann 0. -> Die unteren 8 kB des 16 kB-EPROMs werden angesprochen.
    • /ROMH =0 und /ROML=1 bei einem Zugriff auf $A000..$BFFF, wenn /EXROM=0 und /GAME=0 sind. A13 des Busses ist dann 1. -> Die oberen 8 kB des 16 kB-EPROMs werden angesprochen.

    • Mission accomplished.

    Variante, wenn du A13 des EPROMs aus ROML oder ROMH generieren willst;

    • /ROM=0 und /ROMH=1 bei einem Zugriff auf $8000..$9FFF, wenn mindestens /EXROM=0 ist. Die unteren 8 kB des 16 kB-EPROMs sollen angesprochen werden. -> A13 des EPROMs muss 0 sein.
    • /ROMH=0 und /ROML=1 bei einem Zugriff auf $A000..$BFFF, wenn /EXROM=0 und /GAME=0 sind. Die oberen 8 kB des 16 kB-EPROMs sollen angesprochen werden. -> A13 des EPROMS muss 1 sein.
    • Daraus folgt: A13 des EPROMs kann auch mit /ROML generiert werden.

    Das Gesagte gilt für Lesezugriffe. Schreibzugriffe landen immer im RAM, nie auf dem Modul.


    Der Nachteil der zweiten Methode ist, dass A13 des EPROMs erst gültig anliegt, wenn bereits das /CS generiert wird. Je nach EPROM ( -> Datenblatt!) ist das vielleicht ungünstig. Ich würde die erste Methode verwenden.