ASM Interrupt

Bild Alles zum Thema Programmierung
Bild All around programming

Moderatoren: Sven, Sleepy, Wolfgang, cas, des-or-mad

ASM Interrupt

Beitragvon thedoc » Fr 17. Jan 2014, 19: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
Benutzeravatar
thedoc
Newbie
Newbie
 
Beiträge: 31
Registriert: Do 14. Nov 2013, 07:33
Wohnort: Mecklenburg

Re: ASM Interrupt

Beitragvon Bernd » Fr 17. Jan 2014, 22: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
Bernd
Night&Day Poster
Night&Day Poster
 
Beiträge: 2860
Registriert: Do 1. Jan 1970, 01:00

Re: ASM Interrupt

Beitragvon Sven » Sa 18. Jan 2014, 10: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.
Benutzeravatar
Sven
Star Poster
Star Poster
 
Beiträge: 761
Registriert: Do 1. Jan 1970, 01:00

Re: ASM Interrupt

Beitragvon thedoc » Sa 18. Jan 2014, 11: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 ?
Benutzeravatar
thedoc
Newbie
Newbie
 
Beiträge: 31
Registriert: Do 14. Nov 2013, 07:33
Wohnort: Mecklenburg

Re: ASM Interrupt

Beitragvon dl7ukk » Sa 18. Jan 2014, 11: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.
Andreas
Benutzeravatar
dl7ukk
Night&Day Poster
Night&Day Poster
 
Beiträge: 2700
Registriert: Do 1. Jan 1970, 01:00

Re: ASM Interrupt

Beitragvon thedoc » Sa 18. Jan 2014, 12: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          
Benutzeravatar
thedoc
Newbie
Newbie
 
Beiträge: 31
Registriert: Do 14. Nov 2013, 07:33
Wohnort: Mecklenburg

Re: ASM Interrupt

Beitragvon dl7ukk » Sa 18. Jan 2014, 13: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
Andreas
Benutzeravatar
dl7ukk
Night&Day Poster
Night&Day Poster
 
Beiträge: 2700
Registriert: Do 1. Jan 1970, 01:00

Re: ASM Interrupt

Beitragvon eda70 » Mi 22. Jan 2014, 09:32

Schau mal, hier war das auch schon mal Thema >klick<
Benutzeravatar
eda70
Super Poster
Super Poster
 
Beiträge: 1000
Registriert: Do 1. Jan 1970, 01:00

Re: ASM Interrupt

Beitragvon Jac » Di 28. Jan 2014, 00: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.
Jac
Star Poster
Star Poster
 
Beiträge: 470
Registriert: Do 1. Jan 1970, 01:00
Wohnort: 66822 Lebach

Re: ASM Interrupt

Beitragvon 1NG » Di 4. Feb 2014, 21: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
1NG
Junior Poster
Junior Poster
 
Beiträge: 108
Registriert: Mi 13. Okt 2010, 08:43

Re: ASM Interrupt

Beitragvon thedoc » Mi 5. Feb 2014, 09: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
Benutzeravatar
thedoc
Newbie
Newbie
 
Beiträge: 31
Registriert: Do 14. Nov 2013, 07:33
Wohnort: Mecklenburg


Zurück zu Programmierung



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste