•  Back 
  •  Emulatoren 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
Topic       : TOS - das Betriebssystem
Author      : 
Version     : tos.hyp (5. März 2013)
Subject     : Programmieren/Atari
Nodes       : 3001
Index Size  : 93602
HCP-Version : 5
Compiled on : Atari
@charset    : atarist
@lang       : 
@default    : Titel
@help       : 
@options    : +g -i -s +x +zz -t4
@width      : 70
View Ref-File14.4  TOS2WIN                                                      TOS

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.