•  Back 
  •  Grundlagen des AES 
  •  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-File8.2.9  AES-Bindings                                                TOS

Das AES wird über ein einziges Unterprogramm aufgerufen, dem 6 
Parameter übergeben werden; es handelt sich dabei um Adressen 
verschiedener Arrays, die zur Ein-/Ausgabe-Kommunikation benutzt 
werden. Um eine AES-Funktion aufzurufen, muß der folgende 
Parameterblock mit den Adressen der unten beschriebenen Arrays 
bestückt werden:

typedef struct
{
    int16_t *cb_pcontrol;  /* Zeiger auf control-Array */
    int16_t *cb_pglobal;   /* Zeiger auf global-Array  */
    int16_t *cb_pintin;    /* Zeiger auf int_in-Array  */
    int16_t *cb_pintout;   /* Zeiger auf int_out-Array */
    int16_t *cb_padrin;    /* Zeiger auf adr_in-Array  */
    int16_t *cb_padrout;   /* Zeiger auf adr_out-Array */
} AESPB;

Die Adresse dieses Parameterblocks (der sich auf dem Stack befindet), 
muß dann im Register d1 vermerkt, und zusätzlich Register d0.w mit dem 
Wert 0xc8 (200) gefüllt werden. Durch einen TRAP #2 Systemaufruf kann 
dann das AES direkt aufgerufen werden. Für den Pure-Assembler könnte 
das z.B. so aussehen:

                .EXPORT aes         ; Funktion exportieren
                .CODE               ; Beginn des Code-Segments

        aes:     MOVE.L 4(sp),D1    ; Adresse des Parameterblocks
                 MOVE.W #200,D0     ; Opcode des AES
                 TRAP   #2          ; GEM aufrufen
                 RTS                ; raus hier

                .END                ; Ende des Moduls

Darüber, welche Register verändert werden dürfen, gibt es keine klaren 
Informationen. Tatsache ist jedoch, daß die entsprechenden Routinen im 
ROM alle Register retten.

Nun zu den einzelnen Arrays. Über jedes Feld können bestimmte Ein- 
bzw. Ausgaben getätigt werden; es gilt:

 int16_t control[5]   Über dieses Feld werden Informationen über die 
                      aufgerufene Funktion und ihre Parameter 
                      festgelegt. Es gilt:
                       control[0] = Funktionsnummer
                       control[1] = Anzahl der Werte im int_in-Array
                       control[2] = Anzahl der Werte im int_out-Array
                       control[3] = Anzahl der Werte im addr_in-Array
                       control[4] = Anzahl der Werte im addr_out-Array
                      Darüber, welche Informationen vor einem AES- 
                      Aufruf gesetzt werden müssen, gibt es keine 
                      klaren Informationen. Nötig ist es auf jeden 
                      Fall für die Elemente [0],[1] und [3]. Wenig 
                      sinnvoll erscheint es für die Elemente [2] und 
                      [4] zu sein - schließlich wissen die AES- 
                      Funktionen ja selbst, wie viele Werte sie in den 
                      Ausgabefeldern zurückliefern.
 int16_t global[15]   Dieses Feld enthält globale Daten für die 
                      Applikation und wird teils von appl_init, teils 
                      von anderen AES-Funktionen benutzt, und 
                      automatisch gefüllt. Es gilt:
                       global[0]      Versionsnummer der AES
                       global[1]      Anzahl der Applikationen, die 
                                      gleichzeitig laufen können. Bei 
                                      einem Wert von -1 gibt es keine 
                                      Beschränkung.
                       global[2]      Kennung (ID) der Applikation
                       global[3,4]    Beliebige Information, die nur 
                                      für die Applikation von 
                                      Bedeutung ist und von dieser 
                                      gesetzt und gelesen werden kann.
                       global[5,6]    Zeiger auf eine Liste von 
                                      Zeigern auf die Objektbäume der 
                                      Applikation (wird von rsrc_load 
                                      gesetzt).
                       global[7,8]    Adresse des für die Resource- 
                                      Datei reservierten Speichers. 
                                      Nur von Digital Research und 
                                      nicht von Atari dokumentiert.
                       global[9]      Länge des reservierten 
                                      Speichers. Nur von Digital 
                                      Research und nicht von Atari 
                                      dokumentiert.
                       global[10]     Anzahl der Farbebenen. Nur von 
                                      Digital Research und nicht von 
                                      Atari dokumentiert.
                       global[11,12]  reserviert
                       global[13]     Maximale Höhe eines Zeichens, 
                                      die vom AES für den vst_height- 
                                      Aufruf benutzt wird. Dieser 
                                      Eintrag ist erst ab AES-Version 
                                      4.0, und auch nur von Atari 
                                      dokumentiert.
                                      Ab PC-GEM Version 2.0 wird 
                                      dieser Wert als Bitvektor mit 
                                      den auf dem Desktop angemeldeten 
                                      Laufwerken interpretiert (Bit-15 
                                      = Laufwerk-A).
                       global[14]     Minimale Höhe eines Zeichens, 
                                      die vom AES für den vst_height- 
                                      Aufruf benutzt wird. Dieser 
                                      Eintrag ist erst ab AES-Version 
                                      4.0, und auch nur von Atari 
                                      dokumentiert.
                                      Ab PC-GEM Version 2.0 wird 
                                      dieser Wert als Bitvektor 
                                      interpretiert, der angibt, 
                                      welche der in global[13] 
                                      angegebenen Laufwerke als 
                                      Festplatten betrachtet werden 
                                      können.
 int16_t int_in[16]   Über dieses Feld werden alle 16-Bit großen 
                      Eingabeparameter übergeben.
 int16_t int_out[10]  Über dieses Feld liefert das AES alle 16-Bit 
                      großen Rückgabewerte.
 int32_t addr_in[8]   Dieses Feld dient zur Übermittlung von Zeigern 
                      (z.B. Zeiger auf Zeichenketten) an AES 
                      Funktionen.
 int32_t addr_out[2]  Über dieses Feld werden 32-Bit große Werte vom 
                      AES zurückgeliefert.

Achtung: Wenn das Betriebssystem Threads unterstützt, muss unbedingt 
darauf geachtet werden, eine Multithread-sichere Bibliothek zu 
verwenden. Insbesondere muss sichergestellt werden, daß jeder Thread 
sein eigenes global-Feld (s.o) erhält.

Querverweis: Beispiel-Binding   VDI-Bindings   TOS Liste