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()
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)
| ||||||||
$0002 | VOID CloseLibrary(Handle)
| ||||||||
$0003 | LONG GetFunctionAdress(Handle,Name)
| ||||||||
$0004 | LONG CallLibraryFunction(Adr,Anzahl,.....)
|