Beiträge von Vernunftmensch im Thema „Unterbrechungsroutinen C64“

    Zitat

    Am wichtigsten sind da meiner Meinung nach der Sid und die CIAs

    A. Gibt es bei den StandardC64ern auch programmierlogische Unterschiede zwischen den SIDs, oder wurde das dran gelötet, um beispielsweise Stereo zu haben oder sogar Sachen, die eigentlich nur Paula konnte, abzuspielen?
    B. Meinst Du beim CIA nur die Taktrate (NTSC,PAL) oder meinst Du, daß man auch wirklich mit unterschiedlichen Logikbauteilen zu tun hat?
    C. Kann man es einrichten, daß bei ausgeschalteten Kernal unterschiedliche Sprungadressen angesprungen werden, je nachdem, ob VIC oder CIA der Interrupt auslöst?

    Daraus ergeben sich wieder Fragen:

    A. Wie kann man ganz leicht herauskriegen, ob es PAL oder NTSC ist, das C64-System?
    B. Gibt es außer dem aus Programmiersicht weitere Unterschiede zwischen C64ern´(Defekte ´mal ausgenommen.)?
    C. Du meinst mit Interruptvektor einen Zeigerinteger, aber nicht eine Zusammenfassung mehrerer Sprungziele, oder?

    Daraus ergeben sich wieder Fragen:

    A. Während ich den Kernal ausschalte, dann muß ich für den CIA-Interrupt gewollte Startadresse ans Ende des Speichers legen? Funktioniert dann überhaupt noch ein VIC-Interrupt?
    B. Was passiert, wenn ich in einem CIA-Interrupt stecke, beispielsweise Musik und Sound wegen, und nun der VIC-Interrupt will. Wird dann ein Frame geschluckt und es ruckelt?
    C. Wäre es nicht vielleicht sogar vernünftig, das Teasing während des Spritesaufbaus komplett zu vernachlässigen und nur mit dem CIA-Interrupt zu arbeiten?

    (Die 3% Modellunterschied in den USA beim CIA vernachlässige ich.)

    Die Sache ist, daß auf einem NTSC unsere Engine natürlich nicht schneller oder langsamer laufen darf.

    Bislang läuft die Engine auf 10 Frames die Sekunde diskret. Und zwar über CIA-Timer. D.h. zuletzt wartet er auf den 6 Frame von 60, bevor das nächste Frame berechnet wird.

    Neu soll sein, daß alles schön butterweich funktioniert und Teasing möchte ich komplett vermeiden.

    Mist, wer hat sich denn so eine Sache ausgedacht! :motz:

    Der CIA ist so eingestellt, daß er ca. 50 Mal pro Sekunde einen IRQ auslöst. Gibt es dabei feste Rasterzeiten oder funktioniert der völlig unabhängig vom Vic2?

    Edit: 60 und das auch nur ohne Umprogrammierung.

    SUPER :)

    Da bin ich aber froh.

    (Die 64kEngine unseres Videospiels einfach um eine Startroutine erweitert. War das schnellste, was ich ´mal eben so machen konnte, weil ich da auch eine Assemblerdatei für Hochgeschwindigkeitsroutinen nebenher laufen lasse.)

    :party::biglach::chuck:

    Problem elemeniert. Jetzt geht der wirklich nur einmal in die Schleife rein pro Frame.

    Trotzdem eilen die ersten fünf Zeilen voraus :?:

    Ich erlaube mir eine kleine Abweichung.... :whistling:
    D.h. Sterne3.prg scrollt in die andere Richtung. :smile: @sauhund

    Die oberen fünf Zeilen eilen voraus. Warum?

    Problem mit der Multicolorfarbe 01 =>

    Ich möchte erstmal die Sternchensache professionell hinbekommen.

    Dazu habe ich ein paar Fragen:
    1. Kann man die Rasterzeile beim VIC2 anhalten?
    2. Wie verhalten sich die Interrupts, wenn ich einen habe, der 60x die Sekunde aufgerufen wird, und einen, der immer dann aufgerufen wird, wenn der VIC2 gerade den ohne Tricks sichtbaren Bereich durch hat?
    3. Was passiert, wenn ein neuer IRQ dran müßte, aber ein anderer noch arbeitet?

    Zitat

    Klar, hiermit stellt man den Timer auf 8211 anstelle des Kernal Wertes von 16422 Taktzyklen ein:


    Quellcode
    LDA #$12
    STA $DC04
    LDA #$20
    STA $DC05

    Was passiert, wenn ich den A-Timer auf 0 stelle, bzw. so klein, daß schon die nächste Unterbrechung kommen müßte, obwohl die eine Unterbrechung noch läuft?
    Wofür ist der B-Timer? :anonym

    Edit: Oh, oh: Ich sehe gerade, es gibt noch einen zweiten CIA2 Chip? Gleichzeitig?

    Das macht Sinn.

    Grund: Wenn man 1234 gleichzeitig drückt, dann erfaßt die Hardwareinterrupttastaturroutine im Emulator machmal sogar nur 1 im Buffer. Es entfallen also 234.

    Darum werden 60x die Sekunde aktuell über Matriz eine Direktabfrage, die 1234 erfaßt. (Ich möchte nicht auf Probleme mit ab drei Tasten hier eingehen.)

    Da ein ganz schnelles gleichzeitiges Drücken von 1234 also nur über den Buffer manchmal erfasst wird, entfallen Tastendrücke.

    Und Dank Euch kann ich jetzt das Ding so verändern, daß es unmöglich wird, eine Taste zu versäumen.

    Ich hab´Euch lieb. :thnks:

    Hallo, ich möchte endlich ´mal kapieren, wie das mit Interrupt und C64 ist?

    Bisher dachte ich immer, daß wenn der Kernal an ist, man Tastaturinterrupt und 60x Superinterruot nenn ich das mal.
    Ohne Kernal 60x Superinterrupt verwiesen drauf über letzten Gesamtspeicherzeiger.

    Aber im Nachbarinterrupt habe ich jetzt verstanden, daß die 60x nicht fest sind, bzw. es weitere Interruptd gibt?