DLIs unter Turbo Basic


DLIs unter Turbo Basic

von VD_Tonic » Sa 10. Jun 2017, 13:27
Hallo Zusammen,

ich arbeite gerade an einem Spieleprojekt für den SW Contest und habe auf den letzten Metern leider ein Problem, das ich nicht in den Griff bekomme, weil es sporadisch auftritt. Ich hoffe jemand hat eine gute Idee.

Folgende Situation unter Turbo Basic:
Ich habe ein Titelbild mit einem DLI für eine nachfolgende GR.0 Zeile und im Game zwei weitere DLIs, für zwei nachfolgende Gr.0-Zeilen und drei nachfolgende GR. 12 Zeilen. Das Titlebild hat eine eigene DLI-Routine, im Game wird dann eine andere DLI-Routine aufgerufen, die aus zwei Programmteilen besteht, die je nach Grafikzeile aufgerufen werden.
Soweit hoffe ich alles verständlich.

Beide DLI-Routinen funktionieren in 80% aller Fälle sauber, nur ab und zu eben leider nicht :x . Manchmal wird die DLI-Routine im Game nicht ausgeführt, und zwar erst, seitdem ich die zweite Routine im Titelbild ergänzt habe, also zwischen den beiden Umschalte. Wenn ich mir dann anschaue, was im Register 54286 steht, muss ich feststellen, dass hier trotz vorherigem poken einer 192 wieder eine 255 steht, aber eben nur manchmal. Habe die Vermutung, dass das OS hier in einem bestimmten Fall die Interrupts selbst wieder deaktiviert. Aber warum? Vermute das es passiert, wenn ich den DLI-Zeiger auf die andere Routine umbiege. Natürlich schalte ich ich den Interrupt vor dem Umbiegen selbst aus, und dann erst wieder an, aber irgendwas scheint da gelegentlich nicht zu klappen.

Hat jemand eine Idee?

Gruß
Jan

Re: DLIs unter Turbo Basic

von atarixle » Sa 10. Jun 2017, 13:45
Versuch mal nach dem Ausschalten ein PAUSE 0, damit ein garantiert ein VB ausgeführt wird (der aktuelle Bildschirm also fertig abgearbeitet wird). Manchmal klappt es ja.

Re: DLIs unter Turbo Basic

von VD_Tonic » So 11. Jun 2017, 13:24
Hey, scheint tatsächlich zu funktionieren :notworthy: . Hab jetzt mehr als 50 Male durchprobiert und kein Problem mehr. D.h. der Zeitpunkt, wenn der Interrupt wieder eingeschaltet wird sollte also immer nach einem VBI liegen? Macht Sinn.

Hoffen wir mal, dass es jetzt nicht auch wieder Zufall war... Vielen Dank erstmal für den Tipp. Da hätte ich noch lange gesucht ...

Re: DLIs unter Turbo Basic

von atarixle » So 11. Jun 2017, 16:13
Die Abschaltung des DLI ist erst nach dem VB garantiert wirksam. Die Adresse sollte nach dem VB geändert werden, sonst änderst du ein Byte möglicherweise vor und ein Byte nach Aufruf des noch aktiven DLI durch den ANTIC.

(PAUSE 0 ist dabei ein toller Hack, weil Turbo BASIC die 1/50 Sekunde anhand von durch den VBI geänderten Speicherzellen misst)