#------------------------------------------------------------------------------
# $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