Der gemeine VBI.... oder meine schlaflose Nacht...

Moderator: Rockford

Antworten
Benutzeravatar
Kveldulfur
Beiträge: 649
Registriert: 17.08.2021 02:32
Has thanked: 251 times
Been thanked: 177 times
Kontaktdaten:

Der gemeine VBI.... oder meine schlaflose Nacht...

Beitrag von Kveldulfur »

Hallo!

Die Profi-Progammierer werden es wissen, aber mir hat es jetzt mehrere Tage den Nerv geraubt und heute auch noch den Schlaf...

Ich habe bei Schränker 1 ein paar Funktionen geändert gehabt und die V1.1 dann veröffentlicht. Mir schien diese Version stabil zu laufen.
Auf dem A8 habe ich auch keinen Fehler "sehen" können. Weder unter PAL noch unter NTSC... vllt. habe ich auch nur Glück gehabt.

Nun kam die Frage im AA-Forum, ob ich Schränker 1 auch für den ATARI 5200 umsetze. Da es "eigentlich" nicht schwer sein sollte, da Schränker 1 sowieso schon als Modul lauffähig ist, habe ich mich ans Werk gemacht.
Leider kam im dritten Level immer ein sporadischer Fehler, der tlw. das ganze Spiel abstürzen lief. Ich habe gesucht und gesucht und verglichen und debuggt... kein Fehler im Programm aufzufinden. Obwohl alles richtig schien und unterm A8 auch funktioniert, hat er manchmal die Addition von 40 im VBI nicht korrekt berechnet.

Ich wollte schon aufgeben, da purzelte das RTI in mein Blickfeld. Auf dem 5200 beende ich den VBI per RTI, anders als beim XL.
RTI... ein RTI holt vom Stack den gespeicherten Status und anschließend die Rücksprungadresse. Im Status steht z.B. drin, ob der Prozessor Binär oder Dezimal rechnen soll. Oh manno... Ich berechne bei Schränker 1 die Zahlen von Binär in Dezimal um, damit ich diese darstellen kann. Und genau zu diesem Zeitpunkt scheint zufällig der VBI zu starten. Natürlich rette der VBI den Akkumulator und die Register X und Y... aber ich stelle die CPU nicht auf Binär um. Das muss man aber machen, wenn man sicherstellen möchte, dass im VBI die CPU genau diesen Modus hat.
Also sollte man im VBI etwas addieren wollen, sollte man tunlichst ein CLD nutzen.
Nun läuft das Spiel und ich kann V1.2 für den A8 und den A5200 rausbringen ;-)

Grüße
Janko

Online
Benutzeravatar
Dr. Irata
Beiträge: 946
Registriert: 24.08.2021 14:40
Has thanked: 113 times
Been thanked: 275 times
Kontaktdaten:

Re: Der gemeine VBI.... oder meine schlaflose Nacht...

Beitrag von Dr. Irata »

Hallo Janko,
diese Dinge kenne ich zur Genüge!
Du kannst dich sicherlich erinnern, welche Probleme ich Ende 2022 mit Caverns Of Eris hatte. Irgendwo im Programm war ein Bug, der aber nur sehr sehr sporadisch auftrat - teilweise lief das Programm über 2 Stunden stabil und dann kam der fatale Absturz. Ich habe viele viele Tage getestet und immer neue Ideen gehabt, was daran Schuld sei... am Ende haben wir es dann ganz mühsam zusammen herausbekommen woran es letztlich lag.
Das kann einem den Schlaf wirklich rauben...
Gruß
Peter

Benutzeravatar
Kveldulfur
Beiträge: 649
Registriert: 17.08.2021 02:32
Has thanked: 251 times
Been thanked: 177 times
Kontaktdaten:

Re: Der gemeine VBI.... oder meine schlaflose Nacht...

Beitrag von Kveldulfur »

Moin Peter!

Ja, ich weiß und wir werden sicherlich auch künftig immer Mal wieder längere Nächte haben :-)
Ich finde aber den Fehler, auf Grund des Zusammenspiels von CPU-Status und dem VBI, sehr interessant und auch ein wenig gemein :mrgreen:

Grüße
Janko

Benutzeravatar
DjayBee
Beiträge: 683
Registriert: 17.08.2021 04:02
Has thanked: 418 times
Been thanked: 200 times
Kontaktdaten:

Re: Der gemeine VBI.... oder meine schlaflose Nacht...

Beitrag von DjayBee »

Ganz schön fies die Technik. ;)

Jetzt stellt sich aber die Frage, ob du beim Computer bisher nur Glück hattest, dass der VBI nie zu diesem Zeitpunkt gefeuert hat oder ob der VBI-Teil, der direkt im OS liegt, ein CLD ausführt und somit dein eigener über VVBLKI bzw. VVBLKD eingehängter Interrupt-Anteil immer sauber ausgeführt wird.

Benutzeravatar
Kveldulfur
Beiträge: 649
Registriert: 17.08.2021 02:32
Has thanked: 251 times
Been thanked: 177 times
Kontaktdaten:

Re: Der gemeine VBI.... oder meine schlaflose Nacht...

Beitrag von Kveldulfur »

Hallo!

Weder die VBI-Routine des A8, noch die des A5200 setzten CLD, soweit ich es im Source des OS erkenne.

Da der Dezimalmodus nur auf ADC und SBC wirkt, muss in den meisten Fällen gar nicht per D-Flag ein bestimmter Modus vorliegen.
Die Routine zum Umrechnen der Zahlen von Binär auf Dezimal läuft wirklich nur ein paar Nanosekunden. Das genau hier der VBI startet ist somit absolut Pech... andererseits nutzt eine saubere Programmierung den CLD, wenn ein ADC oder SBC im VBI vorkommt.

Also um es kurz zu machen... ja ich hatte bei "Der Schränker" - Teil 1 nur Glück :mrgreen:
Beim Teil 2 und Teil 3 setzte ich den VBI kaum noch ein, weshalb dort auch nichts "kritisches" im VBI läuft.
Aber auch dass ist so gesehen... Glück? Oh man, morgen spiele ich Lotto... :lol:

Grüße
Janko

Dietrich
Beiträge: 85
Registriert: 20.09.2021 20:59
Has thanked: 8 times
Been thanked: 40 times
Kontaktdaten:

Re: Der gemeine VBI.... oder meine schlaflose Nacht...

Beitrag von Dietrich »

Damit keine Missverständnisse entstehen: Das OS des 800XL macht den CLD beim VBI selbst (siehe die NMI-Routine ab $C018 im XL-OS v2). Nur bei einem DLI wird kein CLD gemacht, da ein DLI zeitkritisch ist.
Das Mini-OS des 5200 macht keinen CLD beim VBI - vermutlich weil dieses OS noch auf dem des alten 400/800-Os basiert, was ebenfalls keinen CLD beim VBI macht. (Daher sollte man auch beim 800XL einen CLD im VBI machen, wenn man dort ADC/SBC benutzt und das Programm auf dem 400/800 laufen soll.)

Und natürlich wird auch beim 800XL ein VBI mit RTI beendet. Als Programmierer kann (sollte) man aber statt den RTI selbst zu machen, zur Exit-VBI-Routine des OS springen (XITVBV). Dort wird dann pla:tay:pla:tax:pla:rti ausgeführt, was die zuvor von der NMI-Routine geretteten Register wiederherstellt.

Benutzeravatar
Kveldulfur
Beiträge: 649
Registriert: 17.08.2021 02:32
Has thanked: 251 times
Been thanked: 177 times
Kontaktdaten:

Re: Der gemeine VBI.... oder meine schlaflose Nacht...

Beitrag von Kveldulfur »

Dietrich hat geschrieben:
31.12.2023 11:27
Das OS des 800XL macht den CLD beim VBI selbst (siehe die NMI-Routine ab $C018 im XL-OS v2).on der NMI-Routine geretteten Register wiederherstellt.
Hallo!

Ich habe jetzt noch einmal im Source-Code geschaut und direkt bei $C020 steht das CLD...
Okay, habe ich absolut übersehen. :mrgreen:
Deshalb hatte ich also beim A8 keine Probleme... Aber ich habe jetzt das CLD drin, damit es auch mit dem älteren OS kompatibel ist. Danke für die Info!

Grüße
Janko

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast