ASM Interrupt


ASM Interrupt

von thedoc » Fr 17. Jan 2014, 20:12
Howdy,

...bin seit paar Tagen dabei mich etwas in Assembler einzuwuseln und bin mir bei einigen Sachen noch nicht ganz sicher ob ich auf dem richtigen Weg bin.

(Info: ich nutze Eclipse/WUDSN und Altirra)

Kann ich irgendwie unkompliziert feststellen wieviel CPU-Zyklen ein Programm oder eine Routine braucht (außer nachzählen) ?

Sind Die Zyklen im z.B. D-VBI fest vorgegeben oder ''streckt'' sich der Interrupt bis für die Hauptschleife die Zeit knapp wird? Oder ist es je nach Interrupt verschiden ?

Kann ich irgendwas Aussagekräftiges aus dem DEBUG/PROFILE VIEW beim Altirra ableiten ?

Gruß
Rick

Re: ASM Interrupt

von Bernd » Fr 17. Jan 2014, 23:15
Hi,
im VBI kannst du VCOUNT abfragen, bei PAL ist das Ende bei 155, bei NTSC schon bei 130. Liegst du unter oder gleich dem Wert, gibt es keine Probleme. Bei PAL kann man richtig viel Programmzeilen durchziehen.

Viel Spass beim Testen,
Bernd

Re: ASM Interrupt

von Sven » Sa 18. Jan 2014, 11:37
Außer dem Zählen der Zyklen über eine Tabelle der Ausführungszeiten ist mir nichts bekannt.
Die max. Laufzeit eines VBI macht sich höchstens über die Auswirkungen auf dem Bildschirm bemerkbar.
Zumindest kenne ich keinen Mechanismus, der einen VBI unterbricht wenn dessen Laufzeiten über Grenzwerte hinauslaufen.
Mir fällt höchstens die Speicherstelle 20 ein, die bei einem VBI um eins erhöht wird. Hat aber wenig mit der Frage zu tun Laufzeiten zu ermitteln.

Re: ASM Interrupt

von thedoc » Sa 18. Jan 2014, 12:10
Ok - danke Das sind schon Infos die mir weiterhelfen.
Wenn (mal angenommen) jetzt der VCOUNT nach der VBI Routine an der 155er PAL-Grenze ist, wird dann nach der Rückkehr in die Hauptschleife gleich der Nächste VBI ausgelöst ?

Re: ASM Interrupt

von dl7ukk » Sa 18. Jan 2014, 12:26
Hi,
thedoc hat geschrieben:……Wenn (mal angenommen) jetzt der VCOUNT nach der VBI Routine an der 155er PAL-Grenze ist, wird dann nach der Rückkehr in die Hauptschleife gleich der Nächste VBI ausgelöst ?

So richtig verstehen ich Deine Frage nicht, aber ein VBI wird immer (nach jedem) gezeichneten Bild ausgelöst. Also wird erst das nächste Bild gezeichnet und dann kommt der VBI. (--> vertikale Austastlücke) Das der VBI aus zwei Teilen besteht kennst Du sicherlich. Im Profibuch steht auch Einiges dazu.

Re: ASM Interrupt

von thedoc » Sa 18. Jan 2014, 13:47
...so langsam lichten sich die Wolken :mrgreen:

wenn diese Schleife im VBI durchläuft ohne das es Bildschirmsalat gibt hab ich noch über 5610 Zyklen zur Verfügung stimmt's ?

Ja - habe im Buch gesehen das es 2 VBI-gibt - nutze bisher nur den Deferred.

Code: Alles auswählen
         LDY #$02   ;------------------------------I
         LDX #$FF   ;2Z-------------I              I
NOPP     NOP        ;2Z----         I              I
         DEX        ;2Z   11 Zyklen -x255 ->2805   -----x2 5610 Zyklen
         CPX   #$0  ;4Z
         BNE NOPP   ;3Z----
         DEY
         CPY #$0
         BNE NOPP          

Re: ASM Interrupt

von dl7ukk » Sa 18. Jan 2014, 14:23
Hmm,

ich habe jetzt keine Tabelle mit den Zyklen der Befehle hier (und bin auch nicht so der "Zähler").

Du "verbrauchst" 11x255x2 Zyklen?

Das Profibuch sagt dazu...
Der "Immediate VBI" sollte nicht mehr als 4500 Maschinenzyklen umfassen.

Der "Deferred" VBI kann etwa 24000 Maschinenzyklen umfassen, ohne dass Probleme auftreten.


Ich denke da ist noch ein wenig Platz bis 24000.
Code: Alles auswählen
24000-11*255*2
18390

Re: ASM Interrupt

von eda70 » Mi 22. Jan 2014, 10:32
Schau mal, hier war das auch schon mal Thema >klick<

Re: ASM Interrupt

von Jac » Di 28. Jan 2014, 01:13
>nutze bisher nur den Deferred.
Das ist für alle zeitintensiven Sachen auch die richtige Wahl, denn beim immediate VBI kommt zuerst Dein Code, dann das Update Hardwareregister (DL, Farben) auf Basis der Schattenregister. Und wenn Dein Code zu viel Zeit verbrät, ist der ANTIC/TV Strahl schon dabei das nächste Bild mit den alten Werten aufzubauen. Dann sieht es meist ganz schnell ganz wild aus. Beim Deferred hingegen kommt Dein Code erst dran, wenn die Standardsachen durch sind.

Re: ASM Interrupt

von 1NG » Di 4. Feb 2014, 22:47
Ergänzend noch ein Tipp:
Zyklenzählen und Counter abfragen kann man auch lassen, wenn man nur mal als Programmierer sehen will, wieviel Zeit ein Programmteil braucht: Man setzt die Hintergrundfarbe auf Rot und am Ende wieder auf Schwarz.
Dan sieht man wie lange eine Routine braucht. Man hat ja genau einen Bildschirm von oben nach unten Zeit.

Dazu gibt es auch eine Geschichte: Ich habe bei den ersten Assemblertreffen früher nie kapiert, warum Zeiten für Programmteile mit dem Abstand von Daumen und Zeigefinger gezeigt wurden. "Wie lange braucht die neue Soundroutine" Antwort "So" und die Finger zeigten 3 cm. :?: Dann fiel der Groschen auch irgenwann. Die Finger zeigen den Anteil an verfügbarer Zeit von der Gesamtbildschirmhöhe. (Bei 60 cm Höhe also etwa 5%)

Einfach mal ausprobieren, dann kommt das Aha von selbst :D

Re: ASM Interrupt

von thedoc » Mi 5. Feb 2014, 10:15
1NG hat geschrieben:Ergänzend noch ein Tipp:

....
Einfach mal ausprobieren, dann kommt das Aha von selbst :D



Cooler Tip :mrgreen:

..habe das gleich mal getestet ---> flackert nix am oberen Bildrand. Wenn ich altirra auf NTSC umstelle (Interrupt ist jetzt deutlich kürzer stimmt's ? ) dann flimmern gelegendlich die ersten 8 - 38 Linien. Denke mal da ist also momentan noch genug Luft.

Gruß
Rick