•  Back 
  •  GEMDOS 
  •  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-File5.5  Das Programmformat                                            TOS

Eine Programmdatei besteht unter GEMDOS aus den folgenden Komponenten:

   ∙ Header
   ∙ Text-, DATA- und BSS-Segment
   ∙ Symboltabelle (optional)
   ∙ Relokationstabelle (optional)

Der Header ist dabei wie folgt aufgebaut:

typedef struct
{
   WORD  ph_branch;        /* Branch zum Anfang des Programms  */
                           /* (muß 0x601a sein!)               */

   LONG  ph_tlen;          /* Länge  des TEXT - Segments       */
   LONG  ph_dlen;          /* Länge  des DATA - Segments       */
   LONG  ph_blen;          /* Länge  des BSS  - Segments       */
   LONG  ph_slen;          /* Länge  der Symboltabelle         */
   LONG  ph_res1;          /* reserviert, sollte 0 sein        */
                           /* wird von PureC benötigt          */
   LONG  ph_prgflags;      /* Programmflags                    */
   WORD  ph_absflag;       /* 0 = Relozierungsinf. vorhanden   */
} PH;

Eine Symboltabelle im Digital-Research-Format besteht aus jeweils 14 
Bytes langen Einträgen, die aus dem Symbolnamen (maximal 8 Bytes; 
lediglich kürzere Namen sind mit einer 0 abgeschlossen!), einem 2 
Bytes langen Symboltyp und dem eigentlichen Symbolwert (4 Bytes) 
bestehen. Die unterstützten Symboltypen sind in der folgenden Tabelle 
zusammengefaßt:

 Wert    Symboltyp 
 0x0100  in der BSS 
 0x0200  im Programmtext 
 0x0280  Start eines Objektmoduls 
 0x02c0  Start einer Library 
 0x0400  im DATA-Bereich 
 0x0800  External 
 0x1000  Register 
 0x2000  Globales Symbol 
 0x4000  Equated 
 0x8000  Defined 

Viele Entwicklungssysteme (z.B. Pure-C) benutzen allerdings ein 
eigenes (i.d.R. leistungsfähigeres) Symbolformat. Da Programme unter 
TOS an eine beliebige Stelle des Arbeitsspeichers geladen werden 
können (und dort ablauffähig sein müssen), enthält eine Programmdatei 
normalerweise eine Relokationstabelle, mit deren Hilfe die im 
Programmcode angegebenen Adressen auf die tatsächlich zugewiesenen 
Bereiche umgerechnet werden können.

Ob Relokations-Informationen vorhanden sind oder nicht, kann der 
Komponente ph_absflag des Programmheaders (s.o.) entnommen werden. Es 
ist grundsätzlich nur eine Relozierung von 32-Bit-Werten (d.h. 
Adressen) möglich; vor GEMDOS-Version 0.15 (bzw. TOS-Version 1.04) 
durften die Relozierungsinformationen nur maximal 32 Kbyte umfassen.

Die Relokationstabelle selbst beginnt mit einem 32-Bit-Wert, welcher 
den Offset des ersten zu relozierenden Wertes relativ zum Beginn des 
Textsegmentes markiert. Für alle folgenden Offsets werden dann 
einzelne Bytes benutzt. Um auch Abstände größer als 255 korrekt 
handhaben zu können, wird dabei wie folgt verfahren: Wird als Offset 
eine 1 gefunden (dies ist aufgrund der Charakteristika der MC-680x0 
Prozessorfamilie unmöglich), wird automatisch zum Offset der Wert 254 
addiert. Für besonders große Abstände kann dieser Vorgang natürlich 
auch wiederholt werden. Eine leere Relokationstabelle wird übrigens 
durch einen Long-Wert von 0 gekennzeichnet.

Querverweis: Fcntl   ARHEADER   OHEADER   OSHEADER   PSETFLAGS 
Die Programmflags