turner@imagen.UUCP (D'arc Angel) (01/16/86)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ lineater,\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ so far this is the only source i have worth contributing, hopefully more will follow, this is a .h file i wrote (with some help from a friend at CWRU) that describes the format of the header for atari .o and .prg files: /* atst.out.h .1 24Dec85 */ /* * Header prepended to each Atari ST .prg file */ struct exec { short a_magic; /* magic number */ unsigned long a_text; /* size of text segment */ unsigned long a_data; /* size of initialized data */ unsigned long a_bss; /* size of uninitialized data */ unsigned long a_syms; /* size of symbol table */ unsigned long a_AZero1; /* always zero */ unsigned long a_AZero2; /* always zero */ unsigned short a_isreloc; /* is reloc info present */ }; #define CMAGIC 0x601a /* contiguous text */ #define ISRELOCINFO 0 /* relocation information is present */ /* any other value - no reloc info */ /* * Macros which take exec structures as arguments and tell whether * the file has a reasonable magic number or offsets to text|symbols|strings. */ #define N_BADMAG(x) \ (((x).a_magic)!=CMAGIC) #define N_TXTOFF(x) \ ((x).a_magic==ZMAGIC ? 1024 : sizeof (struct exec)) #define N_SYMOFF(x) \ (N_TXTOFF(x) + (x).a_text+(x).a_data) #define N_STROFF(x) \ (N_SYMOFF(x) + (x).a_syms) /* * Format of a relocation datum. */ struct relocation_info { int r_address; /* offset from beg of Text Segment of */ /* 1st longword needing relocation */ unsigned char r_offset; /* reloc offset byte */ }; /* * Format of a symbol table entry */ struct nlist { char n_name[9]; /* symbol name */ unsigned short n_type; /* type flag, i.e. N_TEXT etc; see below */ unsigned long n_value; /* value of this symbol (or sdb offset) */ }; /* * Simple values for n_type. */ #define N_BSS 0x0100 /* bss */ #define N_TEXT 0x0200 /* text */ #define N_DATA 0x0400 /* data */ #define N_EXT 0x0800 /* external */ #define N_EQREG 0x1000 /* equated register */ #define N_GLOBL 0x2000 /* global */ #define N_EQU 0x4000 /* equated */ #define N_DEF 0x8000 /* defined */ ------------------------------------------------------------------------- it has a problem (at least on VAXen) that C likes to add a half word of filler after the magic number in the start of the header, anyone have a work around for it? -- god bless Lily St. Cyr -Rocky Horror Picture Show Name: James Turner Mail: Imagen Corp. 2650 San Tomas Expressway, P.O. Box 58101 Santa Clara, CA 95052-9400 AT&T: (408) 986-9400 UUCP: ...{decvax,ucbvax}!decwrl!imagen!turner CompuServe: 76327,1575