C16 und DMA ?

Es gibt 4 Antworten in diesem Thema, welches 1.205 mal aufgerufen wurde. Der letzte Beitrag (27. September 2020 um 19:22) ist von cbmhardware.

  • Ich hatte eigentlich etwas anderes in den diversen C16-PDFs gesucht, aber es brachte mich auch die Idee: warum eigentlich kein DMA mit dem C16 oder Plus/4 ?

    Beim C64 hat man eine DMA-Leitung am Expansionsport. Das ist aber eigentlich kein Hexenwerk, dort wird einfach das DMA-Einganssignal mit AEC logisch (AND) verknüpft. Sobald DMA=0 ist kann AEC nicht mehr High werden (Adressbus High-Z). Dazu braucht man dann natürlich noch PHI, BA und R/W wenn man mit dem Datenbus etwas machen möchte. Im 6510 Datenblatt wird sogar kurz erwähnt, dass AEC speziell für DMA vorgesehen ist.

    Die 75 oder 8501 CPU hat diesen AEC-Eingang natürlich auch. Da fehlt dann das Gatter des 7408 (AND) um die Leitung DMA nennen zu können.

    Wir machen also folgendes:

    Warten auf BA = 1 und PHI= 1 (?), R/W =0 (Lesen) ... die CPU ist dran

    AEC = 0 und für im Moment nicht bekannte Zyklen kann man auf den Daten- und Adressbus zugreifen

    BA = 0 ... der TED ist dran

    Mir geht es jetzt nicht um den wahrscheinlich nicht ganz richtig formulierten Zugriff. War jetzt nur mal so aus dem Stand.

    Aber ist es theoretisch machbar oder übersehe ich da etwas ?

    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -
    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. |

  • Geht meiner Meinung nach nicht. Denn du kannst die Leitungen AEC und BA nur lesen, aber nicht selbst beeinflussen weil sie von TED direkt getrieben werden.

    Wenn TED AEC auf LOW zieht braucht er den Bus, du kommst also nicht ran.

  • Ist beim C64 auch nicht anders, da treibt der VIC die AEC-Leitung auch. Und da liegt dann die Chance, wenn der TED AEC=1 treibt, kann man diese vielleicht auf Low setzen. Wie ich es im Schaltplan sehe geht AEC vom Modulbus direkt an die CPU. Also kann jeder den Eingang beeinflussen.

    Die einzige Möglichkeit ist AEC=1, BA=1 also wenn der TED an die CPU abgibt und dann mit AEC=0 die CPU vom Bus nehmen. Und das natürlich nur für einen sehr begrenzten Zeitraum.

    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -
    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. |

  • Beim C64 hast du den 74LS08 dazwischen. Beim C16 ist das nicht der Fall. Du kannst weder BA noch AEC selbst treiben ohne TED in die Quere zu kommen.

    Aber selbst wenn, der 6502 bzw. 8501 braucht den Bus in jedem Zyklus und da TED das DRAM-Timing vorgibt kannst du pro Halbzyklus (PHI0 = HIGH) nur einen Zugriff machen.

  • Beim 7408 wird eigentlich nur AEC und DMA verknüpft, sobald DMA= 0 kann das nicht mehr 1 werden. Ja, da muss dann schon etwas schnelles dranhängen, das dann immer wieder zugreift. Versuchen möchte ich das lieber nicht, möchte keine 8501 oder einen TED abschiessen.

    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -
    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. |