Wann ist ein GEM-Programm sauber und wann nicht? Was sollte man vermeiden?
Das ist Thema für ganze Bücher („Von Anfänger zum GEM-Profi“, Geiß&Geiß; Profibuch; Atari Compendium) und lange Abhandlungen – gute Zusammenfassungen: von J. Reschke im ST-Magazin, aber auch von U. Seimet. Und es unterlag einem Wandel der Zeit. Was 1988 noch sauber war, mußte es 1993 nicht mehr zwangsläufig sein. Am Anfang gab es noch keine Cookies, so mußten Applikationen auch öfter böse im Sand stochern, was die Hardware angeht. Manchmal war ein Supervisor-Aufruf unumgänglich, und wie man den möglichst sauber initiiert, kann ausgehen wie der Streit ob C64 oder Atari 800 besser sei …
Kein selbstmodifizierender Code wegen „moderner“ CPU-Caches. Generell sollte man so wenig „tiefe“ Systemschichten (BIOS/XBIOS - oder gar LINE-A) wie möglich aufrufen, und so wenig Annahmen über zugrundeliegende Hard- & Software treffen wie möglich. Man beschränkt sich auf AES, VDI und GEMDOS. Das ist ein Anfang. Dazu ein guter Haufen generelle Hinweise wie „Thou shalt not mess with memory thou ownest not“,
http://dev-docs.atariforge.org/files/Pexec_Cookbook_9-6-1991.pdf und immer damit rechnen, dass Funktionen nicht nur positive Rückgabewerte haben können, und dass zwei Anweisungen hintereinander mit Abhängigkeiten untereinander auch von einem Drittprogramm unterbrochen werden können, die die Abhängigkeit stört – das berühmte Malloc(Malloc(-1L)) muß weder klappen, noch ist es nett zu anderer Software.
Es kommt natürlich auch immer darauf an, was du erreichen willst. Muss das Programm noch auf einem Rechner mit TOS 1.0 mit 512 KB RAM laufen, soll aber A4-Seiten grafisch bedrucken? Dann wird es mit GDOS alleine schwierig, außer du nutzt OUTPUT.APP, aber das kannst du auch nicht voraussetzen. Bei solchen harten Bedingungen wird es schwierig, „generisch“ zu gewinnen; entweder machst du Fallunterscheidungen, oder programmierst viel Funktionalität nach, die eigentlich wo anders reingehört.
Wenn es hinterher auf MiNT mit Speicherschutz (damit weiß man, dass man nicht in fremdem Speicher rumschreibt), einem 68060 (sauberes Cache-Handling), auf MagiCMac (kein Zugriff auf eher zu meidende Systemvariablen), einem TOS 1.04 (das unterste dessen, was ich noch unterstützen würde) sowie auf Farbgrafikkarten (keine falschen Annahmen über den Aufbau des Bildschirms) sauber läuft und auf GDOS-Druckern druckt, ist man schonmal auf einem guten Weg.