Maschinenprogramm (.COM) sauber beenden


Maschinenprogramm (.COM) sauber beenden

von FlorianD » Di 10. Apr 2007, 21:52
Hallo,

wie beende ich eigentlich ein Maschinenprogramm sauber?
JMP ($a) (DOSVKT) oder JMP ($c) (DOSINIT) oder vielleicht RTS?
Gibt es Unterschiede, wenn BASIC aktiv ist oder ausgeschaltet?
Welche Flags sind zu beachten?

Wer kann mir sagen, wo ich nachlesen kann, wie ein DOS ein .COM File lädt? "Inside ATARI DOS" oder "ATARI INTERN" oder "Profibuch" oder sowas?

Viele Grüße,
Florian

Re: Maschinenprogramm (.COM) sauber beenden

von cas » Mi 11. Apr 2007, 11:33
FlorianD hat geschrieben:Hallo,

wie beende ich eigentlich ein Maschinenprogramm sauber?
JMP ($a) (DOSVKT) oder JMP ($c) (DOSINIT) oder vielleicht RTS?
Gibt es Unterschiede, wenn BASIC aktiv ist oder ausgeschaltet?
Welche Flags sind zu beachten?

Wer kann mir sagen, wo ich nachlesen kann, wie ein DOS ein .COM File lädt? "Inside ATARI DOS" oder "ATARI INTERN" oder "Profibuch" oder sowas?

Viele Grüße,
Florian


In der Theorie sollte Aufräumen (zurücksetzen aller veränderten Vektoren und Pointer) und ein folgender RTS genügen, um ein Maschinenprogramm sauber zu beenden.

Ein JMP ($a) (DOSVKT) (Spring ins DOS) ist nicht sauber (da die ursprüngliche Aufruf-Rücksprungaddresse auf dem Stack verbleibt) aber oftmals sicherer.

Ein JMP ($c) (DOSINIT) initializert das DOS, ohne jedoch in das DOS zu springen. Ein JMP ($c) (DOSINIT) ist notwendig nach einem Reset.

Wenn Du COM Programme von ACTION! laden möchtest, kannst Du diese Routinen verwenden:

http://www.strotmann.de/twiki/bin/view/APG/ActionBload

Ciao

Carsten