XCONTROM.ACC
============

XCONTROM.ACC ist eine von mir modifizierte Version des XCONTROL.ACC Version 
1.31 von Atari. Es wird jetzt das Register A2 vor allen TRAP-Aufrufen 
gesichert. Im Original wird A2 vor TRAP#1 (GEMDOS) nicht gesichert. Dadurch 
knnen die seltsamsten Effekte auftreten, einschlielich Bomben und 
zerstrter Speicherbereiche. Atari hat leider alle XCONTROL von 1.0 bis 
1.31 mit TurboC oder PureC und einer fehlerhaften Library kompiliert. Die 
Mail, die ich in einigen Atari-Gruppen gepostet habe, hngt an diesem Text 
dran.

XCONTROM erkennt man an der Versionsnummer "V 1.31modifi", die angezeigt 
wird, wenn man Optionen/Info... auswhlt.

Ich hoffe, da bald ein fehlerfreies XCONTROL von Atari vorliegt.

Bitte benennt XCONTROM __nicht__ in XCONTROL um, es sollte sich weiterhin 
schon im Namen von Original unterscheiden.

Ich habe hoffentlich keine neuen Fehler in XCONTROM eingebaut. Ich 
bernehme aber keine Haftung fr irgendetwas. Jeder benutzt (oder auch 
nicht) XCONTROM auf eigenes Risiko.

Wenn jemand Fehler in XCONTROM findet, mge er mir bitte eine Mail 
schicken.

Harun Scheutzow
Email
im Mausnetz:  Harun Scheutzow@B
aus Internet: Harun_Scheutzow@B.maus.de


Hier die angehngte Mail:

WARNUNG!

Alle XCONTROL.ACC von Version 1.0 bis einschlielich Version 1.31 haben
mindestens einen schweren Fehler. Das Register A2 wird vor einigen TRAP#1
Aufrufen nicht gesichert, enthlt aber einen wichtigen Wert. Dies fhrt
dazu, da irgendwo Speicherbereiche zerschossen werden, Busfehler
auftreten u.., wenn ein Patch oder Betriebssystem, das im TRAP-Aufruf
hngt, A2 verndert. Dieses XCONTROL hat z.B. HSMODEM1 zerschossen. Hier
nur eine Stelle, wo A2 nicht gesichert wird, aber werden mte. Es ist
mglicherweise nicht die einzige, ich suche noch. Ich werde versuchen,
XCONTROL.ACC 1.31 zu patchen. Sollte das klappen, ist es bestimmt in
ATARI.INFO zu lesen. Oder sollte ATARI selbst die Fehler schneller
beseitigen als unsereins?

Momentan einzig mgliche Abhilfe: XCONTROL.ACC nicht benutzen!!!
----------------------------------------------------------------

Hier ein disassemblierter Schnipsel, er kommt so z.B. in XCONTROL 1.0
und 1.31 vor:

L0: MOVE.L  28(SP),D1
    MOVEQ   #1,D0
    JSR     L1
    MOVE.L  A0,-12(A2)
    MOVE.L  A0,D0
    BEQ.S   L2
    MOVEA.L A2,A0
    CLR.W   D0
    JSR     L9
    MOVE.W  D0,D3
    MOVEA.L -12(A2),A0   ;hier wird ein unsinniger Wert in A0 geladen, falls
                         ;A2 im TRAP modifiziert wurde
    MOVE.L  28(A7),D1
    JSR     L3           ;innerhalb der hier aufgerufenen Routine wird
                         ;der Inhalt von A0 als Adresse des Lesepuffers
                         ;fr Fread benutzt
    MOVE.W  D3,D0
    JSR     L4
    CLR.W   -8(A2)
    LEA     -298(A2),A0
    JSR     L5

L9: MOVE.W  D0,-(SP)
    MOVE.L  A0,-(SP)
    MOVE.W  #$3D,-(SP)   ;Fopen
    TRAP    #1           ;GEMDOS, darf D0-D2/A0-A2 zerstren
    ADDQ.W  #8,SP
    RTS
