Autor Thema: Unterschiede zw. TOS 2.06 und TOS 1.62 auf einem 1040STE  (Gelesen 3511 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline dbsys

  • Benutzer
  • Beiträge: 4.502
  • n/a
Ich habe einen 1040STE mit TOS 2.06.

Eine bestimmte Software löst beim Programmstart immer 3 Bomben aus und beendet sich dann sang und klanglos.

Genau diese Software funktioniert hingegen problemlos, wenn ich TOS 1.62 einbaue.

Meine Fragen dazu sind:

1) Worin liegen die wesentlichen Unterschiede zwischen TOS 2.06 und TOS 1.62 auf einem 1040STE?

2) Welcher der Unterschiede könnte eventuell verantwortlich für den Programmabsturz unter TOS 2.06 sein? Ließe sich das für den Absturz verantwortliche "Feature" vielleicht gezielt abschalten?

Offline czietz

  • Benutzer
  • Beiträge: 3.594
Re: Unterschiede zw. TOS 2.06 und TOS 1.62 auf einem 1040STE
« Antwort #1 am: Do 03.03.2016, 17:44:18 »
2) Welcher der Unterschiede könnte eventuell verantwortlich für den Programmabsturz unter TOS 2.06 sein?

Vieles ist denkbar. Das kann soweit gehen, dass die Software eine TOS-Funktion mit ungültigen Parametern aufruft und TOS 1.62 das durchgehen lässt und TOS 2.06 nicht. Oder die Software fummelt an undokumentierten Variablen herum, die so nur in TOS 1.62 existieren.

Näheres wird man sagen können, wenn Du entweder die Software zur Verfügung stellst oder zumindest mit einem Debugger den Ort das Absturzes (und den Kontext dazu) herausfindest.

Offline dbsys

  • Benutzer
  • Beiträge: 4.502
  • n/a
Re: Unterschiede zw. TOS 2.06 und TOS 1.62 auf einem 1040STE
« Antwort #2 am: Do 03.03.2016, 19:18:13 »
2) Welcher der Unterschiede könnte eventuell verantwortlich für den Programmabsturz unter TOS 2.06 sein?

Vieles ist denkbar. Das kann soweit gehen, dass die Software eine TOS-Funktion mit ungültigen Parametern aufruft und TOS 1.62 das durchgehen lässt und TOS 2.06 nicht. Oder die Software fummelt an undokumentierten Variablen herum, die so nur in TOS 1.62 existieren.

Näheres wird man sagen können, wenn Du entweder die Software zur Verfügung stellst oder zumindest mit einem Debugger den Ort das Absturzes (und den Kontext dazu) herausfindest.

Danke für Deine Antwort.

Mit einem Debugger kann ich zwar nicht umgehen, aber der Link zur fraglichen Software lautet:
http://www.henning-berg.de/files/TangoAtari.zip

Offline czietz

  • Benutzer
  • Beiträge: 3.594
Re: Unterschiede zw. TOS 2.06 und TOS 1.62 auf einem 1040STE
« Antwort #3 am: Do 03.03.2016, 21:38:01 »
Die gute Nachricht: Das Programm stürzt auch im Emulator unter TOS 2.06 ab.

Die schlechte Nachricht: Der Absturz ist irgendwo mitten im AES-Code während der Anzeige des Logos/Startbildschirms mittels objc_draw. Ich vermute, dass da irgendwas nicht ganz sauber programmiert ist, z.B. eine Resource. Das könnte am besten der Autor fixen.

Offline czietz

  • Benutzer
  • Beiträge: 3.594
Re: Unterschiede zw. TOS 2.06 und TOS 1.62 auf einem 1040STE
« Antwort #4 am: Do 03.03.2016, 22:32:35 »
@dbsys, heute ist Dein glücklicher Tag.  ;)

Nach einiger Zeit im Debugger habe ich herausgefunden, dass der Absturz nur durch ein nicht (oder nicht richtig?) eingebundenes Bild im Splash-Screen/Start-Bildschirm zustande kommt. Ich habe den Verweis auf dieses Bild mal herausgepatcht. Leider verstehe ich überhaupt nicht, wie das Programm funktionier, aber es scheint zumindest nicht mehr zu crashen.


Offline Gaga

  • Benutzer
  • Beiträge: 2.562
  • Wer nicht nachfragt, bekommt auch keine Antwort!
Re: Unterschiede zw. TOS 2.06 und TOS 1.62 auf einem 1040STE
« Antwort #5 am: Do 03.03.2016, 23:32:10 »
@czietz : es wäre sicherlich für einige hier interessant zu erfahren, wie und womit du das alles so machst. Welche Programme setzt die wie ein? Bitte erkläre mal, evt in einem eigenen Beitrag.

Ich bin nahe dran zu glauben, dass das alles Hexenwerk ist!
ask for: Thunder/TurboThunder- Storm TT/ST - Lightning VME/ST - Cloudy - Speedy - TwiSTEr

https://wiki.newtosworld.de/index.php?title=ThunderStorm_Extensions

Offline dbsys

  • Benutzer
  • Beiträge: 4.502
  • n/a
Re: Unterschiede zw. TOS 2.06 und TOS 1.62 auf einem 1040STE
« Antwort #6 am: Fr 04.03.2016, 10:20:53 »
@dbsys, heute ist Dein glücklicher Tag.  ;)

Nach einiger Zeit im Debugger habe ich herausgefunden, dass der Absturz nur durch ein nicht (oder nicht richtig?) eingebundenes Bild im Splash-Screen/Start-Bildschirm zustande kommt. Ich habe den Verweis auf dieses Bild mal herausgepatcht. Leider verstehe ich überhaupt nicht, wie das Programm funktionier, aber es scheint zumindest nicht mehr zu crashen.

Oh, Wahsinn!!

Ich werde das gepatchte Programm am Wochenende mal intensiv durchprobieren.

Aber schon jetzt ein dickes Lob, @czietz.
Und ich schließe mich Gaga an, das grenzt schon an Zauberei, was Du so alles hinbekommst.

Offline czietz

  • Benutzer
  • Beiträge: 3.594
Re: Unterschiede zw. TOS 2.06 und TOS 1.62 auf einem 1040STE
« Antwort #7 am: Fr 04.03.2016, 17:41:01 »
Wie gewünscht, möchte ich hier erklären, wie ich vorgegangen bin. Ich mache keinen eigenen Thread dafür auf, weil das Vorgehen von Problem zu Problem sehr unterschiedlich ist und ich es daher nur am Beispiel von TANGO.PRG beschreibe.

Aufgrund von dbsys' Fehlerbeschreibung habe ich das Programm mit TOS 2.06 in Steem gestartet und zwar in der Debug-Version von Steem. Die bietet u.a. die Möglichkeit, Speicherinhalt und Disassembly des ST zu sehen und Schritt für Schritt durch ein Programm durchzu"step"pen. Insbesondere wird der Debugger auch aktiv, wenn ein Programm auf dem ST abstürzt.

So konnte ich sehr schnell herausfinden dass der Absturz an Adresse 0xE0E16A (im TOS-ROM) stattfindet, weil ein 16-bit breiter Zugriff auf die Adresse 0xFF0001 versucht wird. Auf ungerade Adressen darf nur byte-breit zugegriffen werden, sonst gibt es einen Address Error mit 3 Bomben. Aber ohnehin ist diese Adresse unsinnig, da in einem "normalen" ST(E) nichts an dieser Speicheradresse ist. Wenn ein Absturz im TOS passiert, ist die wahrscheinlichste Ursache, dass irgendeine Betriebssystemfunktion mit falschen Daten aufgerufen wird.

Warum aber dieser Speicherzugriff und in welcher Funktion? Dazu bin ich zu Hatari gewechselt, der ebenfalls einen eingebauten Debugger hat. Dieser ist von der Bedienung nicht so komfortabel wie der von Steem, erlaubt es aber dafür, die Funktionsnummern von aufgerufenen BIOS-, XBIOS-, GEMDOS-, VDI- und AES-Funktionen zu protokollieren. Daran konnte ich erkennen, dass die letzte aufgerufene Funktion objc_draw im AES war, die einen Baum an Objekten (also GUI-Elementen, die z.B. aus einer Resource-Datei stammen oder in diesem Fall im Programm eingebunden sind) auf dem Bildschirm darstellt.

Ein Blick ins Atari Profibuch verrät, wie und mit welchen Parametern objc_draw aufgerufen wird. Der Objektbaum ist der komplexeste Parameter, der an objc_draw übergeben wird, also ist es am wahrscheinlichsten, dass der Fehler dort liegt. Anhand der Dokumentation im Profibuch konnte ich mich im Hatari-Debugger durch den Speicher des ST hangeln, bis ich bei besagtem Objektbaum angekommen war. Ich habe den Objektbaum zur einfacheren Analyse in einer Datei ge"dump"t.

Das Profibuch erläutert auch die Struktur des Objektbaums, den ich mir im Hexeditor angesehen habe. Ein Großteil der Objekte im betroffenen Baum sind von Typ einfache GUI-Elemente wie Rahmen, Texte oder Buttons. Aber zwei sind Bilder. Auch hier gilt wieder, dass die Wahrscheinlichkeit größer ist, dass komplizierte Datenstrukturen (wie die Bilder) korrupt sind. Also habe ich mir die Bilder gezielt vorgenommen und bin (wieder in Hatari) deren Speicheradressen nachgegangen. Ein Bildeintrag zeigt auf eine korrekte BITBLK-Struktur, der andere hingegen nicht. Offensichtlich ist beim Eincompilieren der Bilder in TANGO.PRG etwas schief gelaufen.

Da die Bilder nur den Start-Bildschirm verschönern, habe ich den Eintrag des zweiten Bilds im Objektbaum wieder mit dem Hexeditor in TANGO.PRG so verbogen, dass es auf die Daten des ersten Bilds zeigt. Test zeigt: Absturz behoben.

Offline dbsys

  • Benutzer
  • Beiträge: 4.502
  • n/a
Re: Unterschiede zw. TOS 2.06 und TOS 1.62 auf einem 1040STE
« Antwort #8 am: Fr 04.03.2016, 21:37:28 »
Inzwischen kann ich schon zu Protokoll geben, daß die gepatchte Version von Tango völlig klaglos auf einen 1040 STE unter TOS 2.06 gestartet werden kann.

Auch auf einem Falcon mit TOS 4.04 startet die Software nun. Mit der ungepatchten Version der Software gab es beim Start immer einen Absturz mit 2 Bomben.

Nun muß ich mich erstmal in Tango einfinden. Bei der Gelegenheit werde ich hoffentlich feststellen, ob die gepatchte Version grundsätzlich läuft.

Vielen Dank an czietz  für die hervorragende und spannende Erläuterung der Vorgehensweise.

Offline KarlMüller

  • Benutzer
  • Beiträge: 412
Re: Unterschiede zw. TOS 2.06 und TOS 1.62 auf einem 1040STE
« Antwort #9 am: Mi 09.03.2016, 20:54:07 »
Inzwischen kann ich schon zu Protokoll geben, daß die gepatchte Version von Tango völlig klaglos auf einen 1040 STE unter TOS 2.06 gestartet werden kann.
Schon dem Autor mitgeteilt? Auch wenn die Software schon alt ist wird er sich über ein Rückmeldung wahrscheinlich freuen.

Offline czietz

  • Benutzer
  • Beiträge: 3.594
Re: Unterschiede zw. TOS 2.06 und TOS 1.62 auf einem 1040STE
« Antwort #10 am: Mi 09.03.2016, 21:04:46 »
Ich habe mal das Kontaktformular auf seiner Webseite ausgefüllt und ihn auf diesen Thread hingewiesen.