
#------------------------------------------------------------------------------
# $File: atari,v 1.2 2026/04/30 18:40:15 christos Exp $
# atari:  file(1) magic for Atari formats:

# Operating system ROMs for the Atari ST series of computers, including a
# GPLv2+ implementation called EmuTOS.
# Teemu Hukkanen <tjhukkan@iki.fi>
#
# OSHEADER https://freemint.github.io/tos.hyp/en/OSHEADER.html
# The first byte is a bra.s instruction, an unconditional short jump
0		byte	0x60
# The second byte is the offset for the jump target address,
# jumping past the OS header
# TOS 1.00 uses 0x1E
>0x01		byte	0x1E
>>0		use	atari-tos-rom
# TOS >1.00 and EmuTOS uses 0x2E
>0x01		byte	0x2E
>>0		use	atari-tos-rom

# EmuTOS for Amiga
0		beshort	0x1111
>0x02		beshort	0x4EF9
>>0xD2		beshort	0x602E
>>>0xD2		use	atari-tos-versions

0		name	atari-tos-versions
# Enumerate all known versions
>0x02		beshort	0x0100		Atari TOS ROM 1.00
>>0		use	atari-tos-rom
# EmuTOS uses 1.04 for 192kB ROMs, and 2.06 for >=256kB ROMs
>0x02		beshort	0x0102		Atari TOS ROM 1.02
>>0		use	atari-tos-rom
>0x02		beshort	0x0104		Atari TOS ROM 1.04
>>0		use	atari-tos-rom
>0x02		beshort	0x0106		Atari TOS ROM 1.06
>>0		use	atari-tos-rom
>0x02		beshort	0x0162		Atari TOS ROM 1.62
>>0		use	atari-tos-rom
>0x02		beshort	0x0205		Atari TOS ROM 2.05
>>0		use	atari-tos-rom
>0x02		beshort	0x0206
# ST-Book TOS 2.08 header says 2.06, identify it by release date
>>0x18		belong	0x03101992	Atari TOS ROM 2.08
>>>0		use	atari-tos-rom
>>0x18		belong	!0x03101992	Atari TOS ROM 2.06
>>>0		use	atari-tos-rom
>0x02		beshort	0x0207		Atari TOS ROM 2.07
>>0		use	atari-tos-rom
>0x02		beshort	0x0208		Atari TOS ROM 2.08
>>0		use	atari-tos-rom
>0x02		beshort	0x0300		Atari TOS ROM 3.00
>>0		use	atari-tos-rom
>0x02		beshort	0x0301		Atari TOS ROM 3.01
>>0		use	atari-tos-rom
>0x02		beshort	0x0305		Atari TOS ROM 3.05
>>0		use	atari-tos-rom
>0x02		beshort	0x0306		Atari TOS ROM 3.06
>>0		use	atari-tos-rom
>0x02		beshort	0x0400		Atari TOS ROM 4.00
>>0		use	atari-tos-rom
>0x02		beshort	0x0401		Atari TOS ROM 4.01
>>0		use	atari-tos-rom
>0x02		beshort	0x0402		Atari TOS ROM 4.02
>>0		use	atari-tos-rom
>0x02		beshort	0x0404		Atari TOS ROM 4.04
>>0		use	atari-tos-rom

0		name	atari-tos-rom
# Release date, display using ISO 8601 date
# Year
>0x1A		beshort	x		%.4x
# Month
>0x18		byte	x		\b-%.2x
# Day
>0x19		byte	x		\b-%.2x
# os_conf: Video sync mode and language/country
#>0x1C		beshort	x		(os_conf: %u)
# Video mode is not relevant for multilingual variants
>0x1C		beshort	!255
>>0x1C		beshort	^1		Video: NTSC
>>0x1C		beshort	&1		Video: PAL
# Language / Country
# https://github.com/emutos/emutos/blob/master/include/ctrycodes.h
# TOS uses a country to indicate locale, use IETF language tags instead.
>0x1C		beshort	x		Locale:
>0x1C		beshort	0		en-US
# PAL 1.04 and 1.06 TEX variants
>0x1C		beshort	1
>>0x2A85C	string	AUSWAHL:	de-DE
# NTSC with de-DE
>0x1C		beshort	2
# NTSC Kaos TOS de-CH
>>0x26806	string	Auswahl:	de-CH
# NTSC Kaos TOS en-GB
>>0x26806	string	Select:		en-GB
# NTSC 1.06 TEX variant
>>0x2A4FC	string	AUSWAHL:	de-DE
# NTSC 2.06 TEX variant
>>0x32C3E	string	AUSWAHL:	de-DE
# PAL de-DE
# Several translations are based on de-DE, detect all known variants.
>0x1C		beshort	3
# 1.00 de-DE
>>0x15097	string	AUSWAHL		de-DE
# 1.00 fi-FI
>>0x15092	string	VALINTA		fi-FI
# 1.00 dk-DK
>>0x15090	string	FIL\ V		dk-DK
# 1.02 de-DE
>>0x16691	string	AUSWAHL		de-DE
# 1.04 de-DE
>>0x2BAE2	string	AUSWAHL:	de-DE
# 1.04 cs-CZ
>>0x2BAE4	string	Soubor:		cs-CZ
# 1.04 de-DE
>>0x2BAEC	string	AUSWAHL:	de-DE
# 1.06 de-DE
>>0x2DA56	string	AUSWAHL:	de-DE
# 1.62 de-DE
>>0x2DB4A	string	AUSWAHL:	de-DE
# 1.62 cs-CZ
>>0x2DB4C	string	Soubor:		cs-CZ
# 2.05 is-IS
>>0x34E80	string	Drif:		is-IS
# 2.05 de-DE
>>0x34E5A	string	AUSWAHL:	de-DE
# 2.06 de-DE
>>0x36B68	string	AUSWAHL:	de-DE
# 2.06 cs-CZ
>>0x36B68	string	Soubor:		cs-CZ
# 2.06 sr-Latn
>>0x36B68	string	IZBOR:		sr-Latn
# 2.06 sr-Cyrl
>>0x36B68	belong	0xC8C7C1CE	sr-Cyrl
# 2.08 de-DE
>>0x36B18	string	AUSWAHL:	de-DE
# 3.01 de-DE
>>0x395F0	string	AUSWAHL:	de-DE
# 3.06 de-DE
>>0x3EDD2	string	AUSWAHL:	de-DE
# EmuTOS uses the de-DE language code correctly
>>0x2C		string	ETOS		de-DE
>0x1C		beshort	5		fr-FR
>0x1C		beshort	7		en-GB
>0x1C		beshort	9		es-ES
>0x1C		beshort	11		it-IT
# PAL sv-SE
>0x1C		beshort	13
# 1.02 sv-SE
>>0x1979F	string	PAPPERSKORG	sv-SE
# 1.04 sv-SE
>>0x2FC9F	string	PAPPERSKORG	sv-SE
# 1.04 no-NO
>>0x2FCA0	string	Papirkurv	no-NO
# 1.06 sv-SE
>>0x31C13	string	PAPPERSKORG	sv-SE
# 1.62 sv-SE
>>0x31D07	string	PAPPERSKORG	sv-SE
# 2.05 sv-SE
>>0x3C309	string	PAPPERSKORG	sv-SE
# 2.06 sv-SE
>>0x3E00D	string	PAPPERSKORG	sv-SE
# 3.06 sv-SE
>>0x46277	string	PAPPERSKORG	sv-SE
# EmuTOS uses the sv-SE language code correctly
>>0x2C		string	ETOS		sv-SE
# 2.06 NTSC ru-RU (2004)
>0x1C		beshort	14		ru-RU
>0x1C		beshort	15		fr-CH
# Kaos TOS NTSC de-CH
>0x1C		beshort	16		de-CH
>0x1C		beshort	17		de-CH
>0x1C		beshort	19		tr-TR
>0x1C		beshort	21		fi-FI
>0x1C		beshort	23		no-NO
>0x1C		beshort	25		dk-DK
# Dutch TOS 1.04 (1989-04-06) uses Saudi-Arabia as country code.
>0x1C		beshort	27
>>0x2BAB0	string	Selectie:	nl-NL
>0x1C		beshort	29		nl-NL
>0x1C		beshort	31		cs-CZ
>0x1C		beshort	33		hu-HU
>0x1C		beshort	35		pl-PL
>0x1C		beshort	39		ru-RU
>0x1C		beshort	49		ro-RO
>0x1C		beshort	63		el-GR
>0x1C		beshort	109		cat
# Multilingual TOS, either TOS 4.x, or 1024kB EmuTOS, which contain multiple
# languages, and select the language and video mode based on settings in
# NVRAM.
>0x1C		beshort	255		Multilingual
# Kaos TOS, a modified version of TOS 1.04
>0x5FFC		string	KAOS		Kaos TOS
>0x2CDB0	string	1.4.3		Kaos TOS 1.4.3
# EmuTOS
>0x2C		string	ETOS		EmuTOS
# Extended OS header, EmuTOS >= 1.0.0
# https://github.com/emutos/emutos/blob/master/doc/version.txt
>0x34		string	OSXH
# Length of extended OS header
>>0x38		belong	25
# Major version
>>>0x3C		byte	x		v%d
# Minor version
>>>0x3D		byte	x		\b.%d
# Fix version
>>>0x3E		byte	x		\b.%d
# Zero means official release, Non-zero means snapshot
>>>0x3F		byte	!0		Snapshot
# Display version string for snapshots
>>>>(0x40.L)	string	x		(%s)
>>>0x48		beshort	x		Machine:
>>>0x48		beshort	&1		ST
>>>0x48		beshort	&2		STe
>>>0x48		beshort	&4		TT
>>>0x48		beshort	&8		Falcon
>>>0x48		beshort	&16		FireBee
>>>0x48		beshort	&32		M548X
>>>0x48		beshort	&64		Amiga
>>>0x48		beshort &256		ARAnyM
>>>0x4A		beshort	x		CPU:
>>>0x4A		beshort	&1		68000
>>>0x4A		beshort	&2		68010
>>>0x4A		beshort	&4		68020
>>>0x4A		beshort	&8		68030
>>>0x4A		beshort	&16		68040
>>>0x4A		beshort	&32		68060
>>>0x4A		beshort	&64		68080
>>>0x4A		beshort	&256		ColdFire-V4e
# Adjustable cold boot delay in seconds when > 0.
>>>0x4C		byte	>0		Boot-Delay: %is
