Hallo Besucher, der Thread wurde 7,4k mal aufgerufen und enthält 31 Antworten

letzter Beitrag von Quadrupol am

C64 Prozessor-Zeitlupe - HILFE

  • Ich habe jetzt mal so ein C64 Bremse Modul von REX ergattert.


    Staunenderweise nehme ich zur Kenntnis, dass dort kein 555er werkelt sondern ein 75LS00.


    Weitere Bauteile:
    - ELKO 4,7uF 35V
    - Diode
    - Poti 10k Ohm Linear


    Das war's.


    :gruebel


    Ich male mal kurz den Schaltplan auf...



    Mal sehen, ob ich das verstehe...
    - +5V an VCC für den IC
    - +5V an den Poti_3
    - Poti_1 geht über Pin7 (GND) auf Masse.


    Die Magie muss also bei Poti_2 passieren.


    - Poti_2 gibt Spannung an Pin1 und 2 des IC und an die MINUS-Seite des ELKOs (wieso das denn?). Damit ist Pin3 des IC auf LO oder HI geschaltet, je nach Stellung des Poti.
    - Pin 3 gibt LO oder HI auf sowohl Pin4 als auch Pin5 weiter, damit ist Pin6 dann auf HI oder LO geschaltet.
    - Pin 6 lädt den ELKO auf und geht über die Diode (warum das denn??) auf die IRQ Leitung.
    - Wenn der ELKO voll ist entlägt er sich über Pin1 und Pin2 (auf HI) und schaltet damit Pin6 auf LO.


    OK, wer hat Ahnung und erklärt mir das Ding?
    Was tut die Diode da?
    Und warum geht der Poti an den ELKO Minuspol?

  • OK, wer hat Ahnung und erklärt mir das Ding?
    Was tut die Diode da?
    Und warum geht der Poti an den ELKO Minuspol?


    Erste Gegenfrage: 75LS00 oder 74LS00?? Ich kenne keinen 75LS00...
    Zweite Gegenfrage: wenn 74LS00, sind das wirklich alle Leitungen?? Ich glaube nämlich, daß der Schaltplan nicht vollständig ist.


    Der Sinn der Diode ist ein völlig anderer wie von Abrexxes behauptet: Mit den Gattern des 74LS00 wird ein Multivibrator realisiert, dessen Frequenz von der Kapazität des Kondensators und der Stellung des Potis abhängig ist. Da der IRQ im C64 aber auch noch anderweitig ausgelöst wird (Timer), sorgt die Diode für ein 'Wired OR' (Low aktiv). Ohne Diode wärs ein Kurzschluß, wenn der Oszillator gerade im High-Zustand ist und eine andere Quelle den IRQ auslöst...


    Über den Sinn dieser Schaltung kann man streiten: letztlich wird nichts anderes gemacht, als die CPU mit ständigen IRQs zu beschäftigen und ihr so weniger Rechenzeit fürs Hauptprogramm übrig zu lassen (IRQ hat Vorrang gegenüber dem Hauptprogramm und unterbricht dessen Ausführung). Das Problem dabei ist nur: 1.) wenn das Hauptprogramm den IRQ sperrt (SEI), dann hat das gar keine Wirkung. 2.) Wenn entscheidende Teile des Programms im IRQ laufen, wirds schneller statt langsamer. 3.) Das Timing des Programms wird total gestört, Abstürze und / oder unerwünschte Nebenwirkungen sind nicht auszuschließen. Es wird also lediglich die Verteilung der CPU-Zeit zwischen IRQ und Hauptprogramm verändert: Alles was im IRQ läuft, wird schneller, alles was im Hauptprogramm läuft, wird langsamer.

  • Wie schon gesagt, als Bremse taugt das im allgemeinen nichts (schon erstaunlich, was einem damals für ein Kram verkauft wurde).


    Es gab auch den "Trick", per Schalter einfach die IRQ-Leitung als "Pause" auf Masse zu legen. Taugt auch nichts außer in BASIC vielleicht (und da auch nur eingeschränkt). Dafür ist's in manchen Spielen ein netter Cheat (bei Breakthru z.B. macht die IRQ-Routine die Bewegung des Fahrzeugs, die Kollisionsabfrage passiert aber außerhalb des IRQs - also fährt man mit "nur IRQs" einfach durch alles durch...).

  • Es gab auch den "Trick", per Schalter einfach die IRQ-Leitung als "Pause" auf Masse zu legen.

    Joh, oder wahlweise auch DMA.
    Bei meinem C64 sind beide Varianten (plus IRQ-mit Poti) eingebaut.


    Die Sinnhaftigkeit... naja, Uridium kann man manchmal damit anhalten.. bei jedem 10ten mal crashed es allerdings :)


    EDIT: Relativ alter Thread aus April 2007, fällt mir gerade auf...


    Computerbastler: Auf dem Schaltplan steht 74LS00 drauf, man wird doch mal einen Vertipper haben dürfen. Desweiteren habe ich mir die Platine damals soweit angeschaut und sonst keine weiteren Verbindungen gefunden.

  • Na ja ob sinn macht oder nicht ausprobiert habe ich es , das Mit dem Crash habe ich auch schnell bemerkt kannte ich aber vom Prozessor stop schon :-)


    Naja ich hatte was um meine Lange weile die Nacht zu vertreiben und habe wieder was gelernt zum klönen C64 man kann ja nicht alles immer glei wissen :-)


    Dein DMA und IRQ Stop habe ich im übrigen so geschaltet das ich mit dem einen schalter IRQ/DMA wähle und mit dem anderen die Masse ziehe ;-)

  • Desweiteren habe ich mir die Platine damals soweit angeschaut und sonst keine weiteren Verbindungen gefunden.


    Ja, nur wenns ein 74LS00 ist, kanns so eigentlich nicht funktionieren, denn keines der 4 Gatter ist vollständig an Ein- und Ausgängen beschaltet. Ich tippe mal auf Verbindungen unter dem IC. Für einen Oszillator braucht man Minimum einen Inverter, den man mit den 4 vorhandenen Gattern ja realisieren kann (ich vermute, daß die beiden linken und eines der beiden rechten Gatter verwendet wird und das vierte Gatter auf auf der rechten Seite des ICs brach liegt).
    Der beschaltete Eingang (Pin 1) gehört zu einem anderen Gatter wie der beschaltete Ausgang (Pin 6). Ich vermute mal Verbindungen an 1-2 und 4-5. Wie dann Pin 3 mit 4-5 verschaltet ist (vielleicht über ein Gatter auf der anderen Seite) kann ich nur raten. Direkt auf 4-5 dürfte er nicht gehen, sonst stimmt die Phasenlage nicht. Ist aber alles Spekulation, außer daß der Schaltplan so nicht komplett sein kann.

  • Der beschaltete Eingang (Pin 1) gehört zu einem anderen Gatter wie der beschaltete Ausgang (Pin 6). Ich vermute mal Verbindungen an 1-2 und 4-5. Wie dann Pin 3 mit 4-5 verschaltet ist (vielleicht über ein Gatter auf der anderen Seite) kann ich nur raten. Direkt auf 4-5 dürfte er nicht gehen, sonst stimmt die Phasenlage nicht. Ist aber alles Spekulation, außer daß der Schaltplan so nicht komplett sein kann.

    Dann werd ich mir das Ding mal noch genauer anschauen und durchmessen müssen.

  • Ich klink mich hier mal ein, weil ich inzwischen ein paar Informationen gesammelt habe:
    In 64er 10/88 ist ein Prozessorstop, der dem /DMA mit diode und mit Hilfe eines D-Flipflops auf Masse zieht. Es heisst, das der /DMA nicht zu einem beliebigen Zeitpunkt, sondern mit der positiven Taktflanke auf Masse gezogen werden muss. Auch dass ist keine gute Lösung, weil über /DMA und zwei Gatter des 7408 der AEC und RDY der CPU gleichzeitig auf null gezogen werden. Solange die CPU - für maximal drei Takte - schreibt, wird AEC ignoriert und die CPU stürzt ab.
    Der VIC bremst - bei Bedarf - die CPU ordnungsgemäß aus, wenn er den Bus auch in einer High-Phase braucht : er legt zuerst BA auf null und somit RDY, dann wartet der VIC drei Takte (Schreibzykluss der CPU) ab und legt dann AEC - über das Gatter CAEC auf null und beansprucht dann erst den Bus für ein paar Takte die der VIC für den Bildaufbau benötigt.
    Hier ist es möglich, sich dranzuhängen, um die CPU weiter im gestoppten Zustand zu halten. Das geht mit einer Schaltung, die BA auf null abfragt, drei Takte wartet und dann /DMA auf null zu ziehen. Wenn der VIC den Bus freigubt, dann bleiben dadurch dass /DMA auf null und über die Gatter 7408 auch RDY und AEC auf null.
    Dies hat den Vorteil dass die CPU vollständig anhält und Programmteile im IRQ oder NMI nicht schneller laufen. Für welchen maximalen Zeitraum die CPU angehalten werden darf weiss ich nicht, da es u.a. Probleme mit den timern geben kann. Sicher dürften Zeitliche Routinen für das laden, speichern auf diskette abstürzen.


    Wie jetzt die Schaltung aussieht, weiss ich nicht, aber in den Freezermodulen ist ein 74LS163-Zähler drinne, den man evtl. entsprechend verwenden kann. Ich bin gerade dabei, mir was auszudenken und dann zu probieren. Mittlerweile habe ich eine 555-Schaltung gefunden, welche frequenzstabil ist und ein Impulspausenverhältniss von 10% bis 90% zulässt, ohne das die Stromaufnahme des 555 zunimmt.