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

last post from Nichtsnutz at the

Ersetzung der 8501R1 cpu durch eine 6502A (2MHz) und etwas logik, möglich ?

  • Hallo zusammen,


    beim Kauf eines ungetesteten C16 vor einiger Zeit, hatte sich herausgestellt,
    dass die 8501R1 cpu defekt war.Ich habe noch ein paar 6502A cpus von Rockwell
    (2MHz Typen) und überlege, ob es nicht möglich ist, mit etwas Aussenbeschaltung
    die als 8501 Ersatz zu benutzen:


    - Das AEC Signal der 8501 cpu schaltet wohl nur den Adressbus hochohmig,das
    könnte man mit wahlweise zwei LS244 , LS245 oder LS541 machen.


    - Den Datenbus mit einem LS245 buffern bzw. hochohmig schalten wenn nötig.


    - Den 7 Bit I/O Port könnte man mit der Adressdekoder Logik in ein kleines
    cpld reinpacken, oder , etwas aufwendiger , diskret realisieren.


    - Bleibt noch das GATE_IN Signal der 8501 cpu , welches Einfluss auf das R/W
    Signal nimmt.Dessen genaue Funktion geht leider aus der spärlichen Doku
    nicht so richtig hervor.Müsste aber vom Gefühl her auch mit in das cpld passen.


    - Die restlichen Signale können 1:1 verdrahtet werden (RDY,IRQ,RESET) ,
    über pullups an +VCC (SO, NMI) oder offen gelassen werden( PHI1,PHI2,SYNC).


    Im Detail müsste noch einiges geklärt wereden , aber für den Anfang habe ich
    noch folgende Fragen:


    - Kennt jemand die genaue Funktion des GATE_IN pins der 8501 cpu ?
    Im TED Manual steht , dass es ein early write der cpu verhindert , wenn der TED
    seine Daten holt.Ist mir noch etwas zu "schwammig" !


    - Die R/W Leitung des TED ist laut Doku open source und wird während der TED
    Zugriffe aktiv high gezogen.Müsste da nicht irgendwo ein pulldown sein !?


    - Hat das vielleicht schon jemand gebastelt ? (Forumsuche schon bemüht!)


    Viele Grüsse,
    Vassilis

  • Datenbus tristaten kann und tut der 6502 schon von selbst, aber R/_W musst du noch freigeben wenn TED dran ist da der die Leitung selbst auf HIGH zieht.


    Wegen R/_W und Pulldown: Nein, TED schreibt nicht ins RAM und wenn die CPU schreiben will zieht sie R/_W selbst auf LOW. Passt also.


    Das mit Gate_In muss ich mir noch mal im Detail auf em Oszi ansehen. Das hängt irgendwie mit der Taktumschaltung der CPU zusammen da die ja mit doppeltem Takt läuft wenn TED den Bus nicht braucht. Die Beschreibung im System Hardware Manual sieht nach einem Latch aus:


    GATE IN: TTL level input, used to gate the R/W-Line to prevent the R/W-Line from going low during a read cycle before RAS and CAS go high (resulting in a read/write cycle). Normally connected to the MUX line in a system configuration to synchronize the DRAM memory cycle to the processor clock cycle.


    Nachtrag: Hier ein Bild wie R/_W (gelb) zusammen mit MUX (blau) aussieht wenn ein Schreibzyklus passiert.

  • Hier noch 2 Bilder die R/_W (gelb) in Relation zum Systemtakt (PHI0, blau) zeigen. Einmal bei normalem Takt und einmal bei doppeltem Takt (TED braucht den Bus nicht). Die Schaltung scheint sicherzustellen, daß R/_W immer gleich lang LOW ist, egal mit welchem Takt die CPU arbeitet. MUX ist ein konstanter Takt der die Multiplexer umschaltet, also bietet der sich an damit zu arbeiten.


    Jetzt brauchen wir nur noch eine Schaltung die bei fallender Flanke an MUX das R/_W-Signal verriegelt (vorher treibt es ja die CPU selbst) und bei der nächsten steigenden Flanke wieder freigibt. Dazu noch einen Tristate-Puffer damit TED über AEC auch das R/_W der CPU vom Bus kriegt wenn er selbst ran will.

  • Hallo Gerrit ,


    vielen Dank für die Messungen und Erklärungen !


    Quote

    Die Schaltung scheint sicherzustellen, daß R/_W immer gleich lang LOW ist, egal mit welchem Takt die CPU arbeitet.
    MUX ist ein konstanter Takt der die Multiplexer umschaltet, also bietet der sich an damit zu arbeiten.


    Es ist einige Jahre her , da hatte ich mit dem LA auch einige Messungen gemacht , den Zusammenhang
    aber noch nicht erkannt ! Muss mal suchen wo die abgespeichert sind. Danke Dir, das klinkt logisch !


    Quote

    Jetzt brauchen wir nur noch eine Schaltung die bei fallender Flanke an MUX das R/_W-Signal verriegelt
    (vorher treibt es ja die CPU selbst) und bei der nächsten steigenden Flanke wieder freigibt.


    IIhhh , das wird so eine ähnliche Latchkonstruktion sein wie bei der C16 PLA , die ein konstantes PHI2 aus
    RAS, PHI0 und MUX erzeugt , wenn ich mich nicht irre !
    ( Das wird für mich das schwierigste sein , diese "verschachtelten" Latches ... )


    Quote

    Dazu noch einen Tristate-Puffer damit TED über AEC auch das R/_W der CPU vom Bus kriegt wenn er selbst ran will.


    Also wird AEC neben den Adressbus auch die R/W Leitung asynchron hochohmig schalten.



    Ich würde als ersten Schritt das alles gerne an der 8501 cpu verifizieren.Dazu würde ich sie an ein kleines xilinx
    cpld Experimentierboard anschliessen. ( Morgen ist auch Feiertag ! )


    Wie kann ich am besten den hochohmigen Zustand messen , ohne die cpu kaputt zu machen !?


    Im einzigen Datenblatt zur 7501 cpu auf Zimmers steht , dass :
    "Out low voltage (IOL = 1,6mA , Vcc = 4,75V für Data , A0-A15, R/W , P0-P7) "


    Heisst das, dass solange ich 1,6mA nicht übersteige , ich die R/W Leitung mit einem Pullup belasten darf ?


    Bei einem 4k7 pullup würden 1,06mA fliessen , wenn die cpu R/W oder eine Adressleitung auf LOW zieht.
    Das würde der interne cpu Transistor noch aushalten, oder ?
    Bei 6k8 wäre der Strom 0,74mA.


    Oder müsste ich einen Spannungsteiler am pin anschliessen und mit einem Fensterkomparator aus einem LM319 arbeiten ?


    Vielen Dank nochmal,
    Vassilis

  • Wie wärs mit einmal Pullup an die Leitung und einmal Pulldown (beidesmal 10 KOhm oder mehr). Ist die Leitung im Tristate, dann ändert sich der Pegel in die vom Widerstand vorgegebene Richtung sobald die AEC auf LOW schaltest. Ist die Leitung nicht tristate, dann gibt der interne Leitungstreiber den Pegel vor.


    Zum Thema Latch... Ein Gatter von einem 74LS373 könnte gehen und als Tristate-Treiber ein Gatter eines 74LS126. Kommt mir verschwendet vor, aber mir fällt gerade kein 74er ein der weniger Latches enthält.


    Quote

    Also wird AEC neben den Adressbus auch die R/W Leitung asynchron hochohmig schalten.


    Da TED die R/_W-Leitung aktiv auf HIGH zieht (was VIC im C64 nicht tut) muss die CPU die Leitung bei AEC = LOW vom Bus nehmen.