{
  "commit": "d38cd580364b2c788e633b9e51c15e1668f726c0",
  "count": 1,
  "generated_at": "2026-11-03T13:36:34Z",
  "items": [
    {
      "id": "hatarib",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v1.1",
        "cores": [
          "hatarib"
        ],
        "display_name": "Atari - ST/STE/TT/Falcon (hatariB)",
        "emulator": "hatariB",
        "files": [
          {
            "description": "Atari TOS ROM image, default when present",
            "has_builtin": true,
            "max_size": 1048576,
            "min_size": 64,
            "name": "tos.img",
            "note": "Any TOS 1.00 to 4.04, TOS 0.00, a RAM TOS or EmuTOS. Further images go in system/hatarib/ with an .img, .rom, .bin or .tos extension and are selected with the hatarib_tos option. Without tos.img the built-in EmuTOS 192uk is the default. A hatarib_tos value that is not one of the four special values is opened as a path under the system directory (core/core_config.c:1121-1122).\n",
            "path": "tos.img",
            "required": false,
            "source_ref": "source core/core_file.c:791-851, source core/core_config.c:68-92, source core/core_config.c:1112-1135, source core/core_config.c:1325-1340, source hatari/src/tos.c:1028-1160",
            "validation": [
              "size"
            ]
          },
          {
            "crc32": "118b35b4",
            "description": "EmuTOS 1.4 1024 KB image, all machine types",
            "embedded": true,
            "md5": "1cb3775c4775bad75d24447a90a2890b",
            "name": "etos1024k.img",
            "note": "Compiled into the core from emutos/etos1024k.img and never opened at run time. Built from the hatarib-custom-140 branch of bbbradsmith/emutos. Hashes are of the file in the repository.\n",
            "required": false,
            "sha1": "38dc8baf5224229df55e7d0804b6b7b6bacfc7a0",
            "sha256": "757c571b98b955887ea6d9034513555f4263040420e9d2195cd0c6f8de06c451",
            "size": 1048576,
            "source_ref": "source emutos/bin_to_h.py:1-30, source hatari/src/tos.c:45-63, source hatari/src/tos.c:1038-1046, source core/core_config.c:76, source core/core_config.c:1114-1134"
          },
          {
            "crc32": "fe4c3ff1",
            "description": "EmuTOS 1.4 192 KB UK image, 50 Hz, default TOS",
            "embedded": true,
            "md5": "5f5730d9b557c44ddb9bc410ce2925d8",
            "name": "etos192uk.img",
            "note": "Compiled into the core from emutos/etos192uk.img and never opened at run time. Selected when no tos.img exists and no other image is chosen. Built from the hatarib-custom-140 branch of bbbradsmith/emutos. Hashes are of the file in the repository.\n",
            "required": false,
            "sha1": "ef3a3ccffcb317bff7d0dceca0abacefc3a58abc",
            "sha256": "5c679e6b1b8ed178fa079e4957ed66f9277094f0fe0a5b50c8cbea041e220250",
            "size": 196608,
            "source_ref": "source emutos/bin_to_h.py:1-30, source hatari/src/tos.c:45-63, source hatari/src/tos.c:1038-1046, source core/core_config.c:77, source core/core_config.c:91, source core/core_config.c:1114-1134"
          },
          {
            "crc32": "18030f9a",
            "description": "EmuTOS 1.4 192 KB US image, 60 Hz",
            "embedded": true,
            "md5": "796f62574413bc59ca767063b3184f90",
            "name": "etos192us.img",
            "note": "Compiled into the core from emutos/etos192us.img and never opened at run time. Built from the hatarib-custom-140 branch of bbbradsmith/emutos. Hashes are of the file in the repository.\n",
            "required": false,
            "sha1": "bb98cd8a50df53afecfe183b049eda4014fc0d05",
            "sha256": "ccccc420908012e03b4b38b8ed4530923bb04f27ab189eb2c694bf7e8509b666",
            "size": 196608,
            "source_ref": "source emutos/bin_to_h.py:1-30, source hatari/src/tos.c:45-63, source hatari/src/tos.c:1038-1046, source core/core_config.c:78, source core/core_config.c:1114-1134"
          },
          {
            "config_key": "hatarib_cartridge",
            "description": "Atari ST cartridge image loaded at 0xFA0000",
            "max_size": 131076,
            "min_size": 40,
            "name": "cartridge ROM",
            "note": "Any file of system/hatarib/ with an .img, .rom, .bin or .cart extension. Raw images up to 0x20000 bytes or .stc images of exactly 0x20004 bytes whose 4-byte header is skipped. Replaced by the built-in GEMDOS trampoline whenever GEMDOS hard disk emulation, extended VDI or OS tracing is on.\n",
            "path": null,
            "required": false,
            "source_ref": "source core/core_config.c:166-185, source core/core_config.c:1163-1167, source core/core_config.c:1351-1363, source core/core_file.c:256-259, source hatari/src/cart.c:40, source hatari/src/cart.c:57-100, source hatari/src/cart.c:108-147",
            "validation": [
              "size"
            ]
          },
          {
            "description": "TT and Falcon NVRAM contents, 50 bytes",
            "has_builtin": true,
            "min_size": 50,
            "name": "hatarib.nvram",
            "note": "Read from the system directory at NvRam_Init for the TT and Falcon machines only. A read shorter than 50 bytes keeps the built-in defaults. Written back when the core shuts down.\n",
            "path": "hatarib.nvram",
            "required": false,
            "source_ref": "source hatari/src/falcon/nvram.c:97, source hatari/src/falcon/nvram.c:111-117, source hatari/src/falcon/nvram.c:127-170, source hatari/src/falcon/nvram.c:178-205, source hatari/src/falcon/nvram.c:317-330, source hatari/src/falcon/nvram.c:371-374, source hatari/src/falcon/nvram.h:54-58, source core/core_file.c:273-277, source core/core_file.c:319-322",
            "storage": "user_provided",
            "unsourceable": "machine state the emulator writes itself when the content closes, with no canonical contents",
            "validation": [
              "size"
            ]
          },
          {
            "description": "CAPSImage 5.1 shared library for IPF and CTR floppy images, Linux, macOS, Android and Raspberry Pi builds",
            "name": "capsimg.so",
            "note": "Opened with dlopen on the first IPF or CTR read, from the dlopen search path or next to the core, and required to export the CAPS functions the core imports. Without it those images are refused with a notification and every other format still works. rsn8887/capsimg publishes one build per platform under this name.\n",
            "path": null,
            "required": false,
            "source_ref": "source hatari/src/floppy_ipf.c:320-331, source hatari/src/floppy_ipf.c:637-645, source hatari/src/floppy_ipf.c:733-783, source hatari/src/floppy_ipf.c:791-803, source hatari/CMakeLists.txt:246, source hatari/cmake/config-cmake.h:99-101, source DEVELOP.md:56, source DEVELOP.md:59"
          },
          {
            "description": "CAPSImage 5.1 shared library for IPF and CTR floppy images, Windows build",
            "installed_on": [
              "retrobat"
            ],
            "name": "capsimg.dll",
            "note": "Opened with LoadLibrary on the first IPF or CTR read, from the RetroArch directory or the library search path. Without it those images are refused with a notification and every other format still works. RetroBat installs it in its bios folder, and its launcher copies it into the RetroArch directory before starting an IPF image.\n",
            "path": null,
            "required": false,
            "source_ref": "source hatari/src/floppy_ipf.c:320-331, source hatari/src/floppy_ipf.c:637-645, source hatari/src/floppy_ipf.c:733-783, source hatari/src/floppy_ipf.c:791-803, source DEVELOP.md:56"
          }
        ],
        "notes": "hatariB carries Hatari 2.6.1 in its hatari/ directory, every change\nfenced by __LIBRETRO__ (DEVELOP.md:7-14, DEVELOP.md:44-48), and\nbuilds as hatarib (makefile.libretro:1, makefile.libretro:3,\ncore/core.c:1134). The upstream_commit is the v2.6.1 tag the tree was\ntaken from. The core reads and writes through core_file.c, using the\nlibretro VFS when the frontend offers version 3\n(core/core_file.c:747-790). Hatari's own\ndirectory strings are replaced by <nopath> (hatari/src/paths.c:339-350),\nhatari.cfg is never read because Main_LoadInitialConfig calls\ncore_config_init instead (hatari/src/main.c:987-1015,\ncore/core_config.c:1440-1445), and printer, RS232 and keymap file\nsettings keep their disabled defaults with no option to change them\n(hatari/src/configuration.c:728, hatari/src/keymap.c:63,\nhatari/src/keymap.c:699-718). The AVI recorder is compiled out and\nreplaced by stubs (hatari/src/avi_record.c:102,\nhatari/src/avi_record.c:1535-1547), and File_Length, File_Lock and\nFile_InputAvailable are removed with it (hatari/src/file.c:374,\nhatari/src/file.c:744, hatari/src/file.c:802).\n\nAt retro_set_environment the core looks for <system>/tos.img and lists\nevery entry of <system>/hatarib/, up to 128 files and 16 directories\n(core/core_file.c:13-14, core/core_file.c:791-851). Those lists fill the\nhatarib_tos, hatarib_cartridge and hatarib_hardimg options, 100 values\neach: TOS candidates end in .img, .rom, .bin or .tos, cartridges in .img,\n.rom, .bin or .cart, hard disks are any file or subdirectory\n(core/core_config.c:11, core/core_config.c:1318-1385). The TOS option\ndefaults to <tos.img> when the file exists and to EmuTOS 192uk otherwise\n(core/core_config.c:68-92, core/core_config.c:1325-1340). The four\nspecial values select tos.img or one of the built-in images, any other\nvalue is a path under the system directory\n(core/core_config.c:1112-1135). TOS_LoadImage copies the built-in image\nor reads the file with core_read_file_system and caches it\n(hatari/src/tos.c:45-63, hatari/src/tos.c:1028-1078). A failed load\nraises a notification and halts the CPU instead of leaving\n(hatari/src/tos.c:1080-1086, hatari/src/tos.c:1250-1262,\ncore/core.c:419-433, hatari/src/main.c:906-925). Validation is\nupstream's (hatari/src/tos.c:1114-1160), but TOS_CheckSysConfig only\nwarns and never switches machine or CPU (hatari/src/tos.c:859-1000). The\nhatarib_emutos_region and hatarib_emutos_framerate options rewrite the\nOS header word of an EmuTOS image (hatari/src/tos.c:1351-1365,\ncore/core_config.c:1181-1187). Symbols_LoadTOS still runs\n(hatari/src/tos.c:1193) but resolves <tos>.sym against the process\nworking directory, so nothing is read from the system directory.\n\nThe three EmuTOS images are EmuTOS 1.4 built from the hatarib-custom-140\nbranch of bbbradsmith/emutos, which lets DESKTOP.INF and NEWDESK.INF be\nloaded, and are compiled in through emutos/bin_to_h.py\n(DEVELOP.md:10, README.md:324-326).\n\nA cartridge is read with core_read_file_system from the option value\n(hatari/src/cart.c:40, hatari/src/cart.c:57-100) and disabled with\nGEMDOS hard disk emulation, extended VDI or OS tracing\n(hatari/src/cart.c:108-147). A permanent hard disk comes from\nsystem/hatarib through hatarib_hardimg and hatarib_hardtype, GEMDOS\nfolder, ACSI, SCSI or IDE (core/core_config.c:186-233,\ncore/core_config.c:1018-1075, core/core_config.c:1169-1180). Temporary\nones are content with an .acsi, .ahd, .vhd, .scsi, .shd, .ide or .gem\nextension or lines of an M3U (core/core_disk.c:16-23,\ncore/core_disk.c:676-713, core/core_disk.c:782-785,\ncore/core_config.c:1077-1105). Images open through core_file_open_hard\n(hatari/src/hdc.c:903, hatari/src/hdc.c:961-963,\nhatari/src/ide.c:663-666) and GEMDOS folders through core_scandir_hard\n(hatari/src/gemdos.c:672, hatari/src/gemdos.c:770,\nhatari/src/gemdos.c:1330). Hard disks are write protected by default\n(hatari/src/configuration.c:918). Floppy content is ST, MSA, DIM, STX,\nIPF or CTR, also inside a ZIP, ZST or GZ, or an M3U or M3U8 list with\n#BOOTA, #BOOTB, #AUTO and #RES directives (core/core_disk.c:14-24,\ncore/core_disk.c:202-384, core/core_disk.c:444-559,\ncore/core_disk.c:621-670). Before the original image the core takes a\nsame-named copy from the save directory and, for STX, a .wd1772 overlay\nthere (core/core_disk.c:787-814), and modified disks are written back to\nthe save directory (core/core_disk.c:1154-1226, hatari/src/st.c:93,\nhatari/src/msa.c:417, hatari/src/floppy_stx.c:451). #AUTO and #RES\nwrite a virtual INF file to system/hatarib.tmp\n(hatari/src/inffile.c:761) and, when booting from a GEMDOS C: folder,\nread the DESKTOP.INF, NEWDESK.INF or EMUDESK.INF found there\n(hatari/src/inffile.c:598-667). MIDI goes through the libretro MIDI\ninterface (core/core.c:485-545, hatari/src/midi.c:593-700), and Midi_Host_Open\nno longer opens files (hatari/src/midi.c:346-424).\n",
        "profiled_date": "2026-09-17",
        "source": "https://github.com/bbbradsmith/hatariB",
        "source_commit": "5f05733fc21903dce7d978bd0d7aae445ffe1185",
        "systems": [
          "atari-st",
          "atari-ste",
          "atari-tt",
          "atari-falcon"
        ],
        "type": "libretro",
        "upstream": "https://github.com/hatari/hatari",
        "upstream_commit": "23bc3060ebf0da348cc842e358c102ba88002b56",
        "version_basis": {
          "kind": "file",
          "path": "core/core.c",
          "pattern": "#define\\s+CORE_VERSION\\s+\"([^\" ]+)"
        }
      }
    }
  ],
  "kind": "emulators",
  "schema_version": 1
}
