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 TOSEine 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: FcntlARHEADEROHEADEROSHEADERPSETFLAGSDie Programmflags