HomeEmulatorenSTEmulatorDetecting the presence of TosBox, Steem and PaCifiST

14.4 TOS2WIN

Tos2Win Cookie

Um feststellen zu können welche Tos2Win Version und welche Features vorhanden sind, gibt es ab Version 1.19 einen Cookie '_T2W' mit einem Zeiger auf folgende Datenstruktur:

1 x Word Länge der Struktur
1 x Word Version in BCD d.h. $0119 = Version 1.19
1 x Long Offset des Atari-Speichers im PC-Speicher zum Umrechnen von Zeigern
4 x Long Bitfelder für einzelne T2W Features


PC-DLL's aufrufen ab Version 1.19J

In TOS2WIN werden alle PC-Aufrufe über die Sequenz $4858 eingeleitet, danach folgt der Gruppencode z.B. $5043 für die DLL-Funktionen und wird mit der Funktionsnummer z.B. $0000 abgeschlossen.

Ein Aufruf einer DLL-Funktion würde also wie folgt aussehen:

FunktionsAnfang
                    .
                    .
                    .
                  $4858
                  $5043
                  $0000
                    .
                    .
                    .
Funktionsende      RTS

Die Parameter für die Funktion liegen ab A7 + 4. d.h. Alle notwendigen Parameter auf den Stack legen (immer nur Langworte) und dann ein bsr auf FunktionsAnfang.

Alle an die PC-Funktion übergebenen Zeiger auf Werte im Atarispeicher müssen mit einem Offset korrigiert werden. Atari-Adresse plus Offset ist PC-Adresse. Den Offset bekommt man entweder über den Tos2Win-Cookie oder über die DLL-Funktion $0000. Der Offset verändert sich während der Laufzeit des Programms nicht.

DLL-Funktion

$0000 LONG HoleOffset()
Rückgabewert: Liefert in D0 den Offset zum umrechnen zurück.


Diese Funktion kann auch dazu benutzt werden, um festzustellen, ob die nachfolgenden Funktionen vorhanden sind. Einfach das Register D0 mit Null laden und die Funktion aufrufen. Wenn immer noch Null in D0 steht, sind die Funktionen nicht implementiert.
$0001 LONG OpenLibrary(Name)
Name : Zeiger auf einen Nullterminierten String, der den Namen der gewünschten DLL enthält z.B. 'GDI32.DLL' (der Zeiger muß mit dem Offset korrigiert werden).
Rückgabewert: Liefert in D0 ein Handle auf die DLL zurück.
$0002 VOID CloseLibrary(Handle)
Handle : Handle auf die zu schließende DLL. wenn der interne Zähler Von Windows bei Null angekommen ist, wird die DLL aus dem Speicher entfernt.
$0003 LONG GetFunctionAdress(Handle,Name)
Handle : Handle auf die DLL.
Name : Zeiger auf einen Nullterminierten String, der den Namen der Funktion enthält. (Zeiger muß korrigiert werden)
Rückgabewert: Adresse der Funktion im PC-Speicher
$0004 LONG CallLibraryFunction(Adr,Anzahl,.....)
Adr : Adresse der gewünschten Funktion.
Anzahl : Anzahl der an die PC-Funktion zu übergebenden Parameter.
.... : Die entsprechenden Parameter (Zeiger müssen korrigiert werden)
Rückgabewert: eventueller Rückgabewert der PC-Funktion.

HomeEmulatorenSTEmulatorDetecting the presence of TosBox, Steem and PaCifiST