💾 Archived View for lofi.haiku-os.org › docs › develop › kernel › arch › m68k › atari.gmi captured on 2023-09-28 at 16:12:12. Gemini links have been rewritten to link to archived content

View Raw

More Information

-=-=-=-=-=-=-

The Atari ST port

Atari ST executables

From: DaFi <

webmaster@freudenstadt.net

The specs for Atari ST executables (was listed as requested on www.wotsit.demon.co.uk/wanted.htm)…

applies for TOS, PRG, TTP, PRX, GTP, APP, ACC, ACX (different suffixes indicate different behavior of the program, i.e. TOS and TTP may not use the GEM GUI, while all the others may; only TTP and GTP can be called with parameters; ACC may be installed as desktop accessories; PRX and ACX mean the programs were disabled.

file structure:

+----------------------+-----------------------------------------------------------------------------+
| [2] WORD PRG_magic   | magic value 0x601a                                                          |
+----------------------+-----------------------------------------------------------------------------+
| [4] LONG PRG_tsize   | size of text segment                                                        |
+----------------------+-----------------------------------------------------------------------------+
| [4] LONG PRG_dsize   | size of data segment                                                        |
+----------------------+-----------------------------------------------------------------------------+
| [4] LONG PRG_bsize   | size of bss segment                                                         |
+----------------------+-----------------------------------------------------------------------------+
| [4] LONG PRG_ssize   | size of symbol table                                                        |
+----------------------+-----------------------------------------------------------------------------+
| [4] LONG PRG_res1    | reserved                                                                    |
+----------------------+-----------------------------------------------------------------------------+
| [4] LONG PRGFLAGS    | bit vector that defines additional process characteristics, as              |
|                      | follows:**Bit 0 PF_FASTLOAD** - if set, only the BSS area is cleared,       |
|                      | otherwise, the program’s whole memory is cleared before loading**Bit 1      |
|                      | PF_TTRAMLOAD** - if set, the program will be loaded into TT RAM**Bit 2      |
|                      | PF_TTRAMMEM** - if set, the program will be allowed to allocate memory from |
|                      | TT RAMBit 4 AND 5 as a two bit value with the following meanings:0          |
|                      | PF_PRIVATE - the processes entire memory space is considered private1       |
|                      | PF_GLOBAL - the processes memory will be r/w-allowed for others2 PF_SUPER - |
|                      | the memory will be r/w for itself and any supervisor proc3 PF_READ - the    |
|                      | memory will be readable by others                                           |
+----------------------+-----------------------------------------------------------------------------+
| [2] WORD ABSFLAG     | is NON-ZERO, if the program does not need to be relocatedis ZERO, if the    |
|                      | program needs to be relocatednote: since some TOS versions handle files     |
|                      | with ABSFLAG>0 incorrectly, this value should be set to ZERO also for       |
|                      | programs that need to be relocated, and the FIXUP_offset should be set to   |
|                      | 0.                                                                          |
+----------------------+-----------------------------------------------------------------------------+

From there on… (should be offset 0x1c)

[PRG_tsize] TEXT segment [PRG_dsize] DATA segment [PRG_ssize] Symbol table

[4] LONG FIXUP_offset - first LONG that needs to be relocated (offset to beginning of file)

From there on till the end of the file…

FIXUP table, with entries as follows:

[1] BYTE value

with value as follows:

That’s it. You made it through to EOF.

A final note about fixing up (relocating) an executable: (pseudo-code)

The long value FIXUP_offset tells you your start adress. Let’s call it “adr”. So, now, that you have adr, read the first byte of the table.

(*) loop

Useful resources

http://toshyp.atari.org/en/index.html

http://www.lysator.liu.se/~celeborn/sync/atari/misc.html

http://www.lysator.liu.se/~celeborn/sync/atari/ATARI/F30.ZIP

http://www.lysator.liu.se/~celeborn/sync/atari/ATARI/FALCLIB6.ZIP

http://www.lysator.liu.se/~celeborn/sync/atari/ATARI/FALCREGS.ZIP

http://fxr.watson.org/fxr/source/include/asm-m68k/atarihw.h?v=linux-2.4.22

http://lxr.linux.no/linux+v2.6.27/arch/m68k/atari/config.c#L664

http://www.atari-forum.com/wiki/index.php/MFP_MK68901

http://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/sys/arch/atari/stand/xxboot/ahdi-xxboot/xxboot.ahdi.S

AHDI args

http://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/sys/arch/atari/stand/xxboot/wdboot/wdboot.S

http://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/sys/arch/atari/stand/xxboot/sdboot/sdboot.S

http://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/sys/arch/atari/stand/xxboot/fdboot/fdboot.S