emulator: DOSBox-X type: standalone core_classification: enhanced_fork source: "https://github.com/joncampbell123/dosbox-x" upstream: "https://github.com/joncampbell123/dosbox-x" source_commit: "e013b8bf8e27ef878a646049bf5b2e732878d616" profiled_date: "2026-09-17" core_version: "2026.08.31" display_name: "DOS (DOSBox-X)" cores: - dosbox-x - dosboxx systems: - dos - ibm-pc - ibm-pcjr - tandy-1000 - pc-98 mode: standalone notes: | Fork of DOSBox SVN with its own DOS kernel. The machine setting picks the emulated hardware: mda, cga and its composite variants, hercules, hercules_plus, hercules_incolor, hercules_color, tandy, pcjr, amstrad, olivetti/m24/att6300, pc3270, ega, ega200, jega, mcga, vgaonly, the S3, Tseng, Paradise and ATI SVGA cards, the vesa variants, and pc98/pc9801/pc9821. fm_towns is marked STUB in the same list. ref: src/dosbox.cpp:1537-1577 No system BIOS: the PC BIOS, VGA BIOS, video fonts, keyboard layouts, codepage tables, the Z: drive utilities including GLIDE2X.OVL, and the TTF text font are compiled in. ref: int10_memory.cpp, dos_keyboard_layout_data.h, dos_codepages.h, src/builtin/glide2x.cpp:2861, src/output/output_ttf.cpp:664 Files named without a directory are searched in the working directory, the program directory, the user configuration directory and the resource directory. On Linux the configuration directory is $XDG_CONFIG_HOME/dosbox-x or ~/.config/dosbox-x, and the resource directory is $APPDIR/usr/share/dosbox-x inside an AppImage, otherwise $XDG_DATA_HOME/dosbox-x, then /usr/local/share/dosbox-x, then /usr/share/dosbox-x. Windows uses C:\DOSBox-X. ref: src/ints/int10.cpp:1442-1485, src/misc/cross.cpp:129-190, 193-226 Configuration: -conf and -userconf name the files to read. Otherwise dosbox-x.conf then dosbox.conf is tried in the working directory, then in the program directory, then in the configuration directory, which is last tried for dosbox-x-.conf; that file is written with the defaults when it does not exist. ref: src/gui/sdlmain.cpp:8667-8743, src/misc/cross.cpp:229-245 MT-32: libmt32emu is built from src/libs/mt32. Only four file names are ever opened, and each candidate is identified by exact file size then SHA1, so the name says nothing about the contents. addROMFile matches against the full image list only, which rejects the interleaved chip dumps. ref: src/gui/midi_mt32.h:74-109, src/libs/mt32/c_interface/c_interface.cpp:442-462, src/libs/mt32/ROMInfo.cpp:206-215 mt32.model = auto opens CM32L_CONTROL.ROM then MT32_CONTROL.ROM, and CM32L_PCM.ROM then MT32_PCM.ROM; cm32l keeps only the CM32L names, mt32 only the MT32 names. The directory is mt32.romdir, then the working directory, then the resource directory, then the configuration directory. A missing pair logs the accepted file names and disables the device. ref: src/gui/midi_mt32.h:246-275, src/dosbox.cpp:3607-3617 FluidSynth reads fluid.soundfont; fluid_synth_sfload is the only check. With the setting empty it probes /usr/share/soundfonts/default.sf2, /usr/share/sounds/sf2/FluidR3_GM.sf2 and GeneralUser_GS.sf2 on Linux, and C:\soundfonts\default.sf2 then the two same names under C:\DOSBox-X on Windows. ref: src/gui/midi_synth.h:342-384, 462-480 PC-98 character generator, tried in order: FONT.ROM as generated by T98Tools, then the FONTX2 files named by pc-98 fontx sbcs and pc-98 fontx dbcs, then the file named by pc-98 anex86 font or ANEX86.BMP followed by FREECG98.BMP, then the built-in FREECG single-byte font and the built-in Japanese double-byte font. Each stage fills only what the previous one left empty. ref: src/ints/int10.cpp:1882-1893, 1652-1675 PC-98 sound board BIOS: with pc-98 sound bios set, SOUND.ROM is read from the working directory into CC000h. Without it a callback Sound BIOS is installed at CEE0:0000 answering INT D2h. ref: src/hardware/pc98_fm.cpp:367-385, 416-434 DOS/V and CJK text: fontxsbcs, fontxsbcs16, fontxsbcs24, fontxdbcs, fontxdbcs14 and fontxdbcs24 name font files. LoadFontxFile reads a FONTX2 header, otherwise tries BDF and PCF, otherwise accepts a raw bitmap font identified by its size, which covers ASC16 and ASCFONT.15 from UCDOS and ETen Chinese DOS, ASC24, HZK14, HZK16, HZK24 and STDFONT.15 and STDFONT.24. Unset settings fall back to the built-in font data. ref: src/ints/int_dosv.cpp:654-749, 1631-1710, src/dosbox.cpp:2550-2583 BOOT -bios loads a BIOS image at the top of the first megabyte, truncated to 128 KB, or 96 KB on PC-98 where it also looks for .itf.rom, .ITF.ROM, itf.rom and ITF.ROM to serve the bank switched Initial Firmware Test region through port 43Dh. ref: src/dos/dos_programs.cpp:2227-2228, 2261-2350 BIOSTEST.COM loads an image of up to 64 KB at F000:0 and restarts the CPU at the reset vector; it is compiled only when the debugger is enabled. The settings call binary on reset and call binary on boot load blobs of up to 128 KB into the ROM BIOS area for CPU testing. ref: src/dos/dos_programs.cpp:3666-3719, src/ints/bios.cpp:13298-13374 A build configured with --enable-dosbox_agent reads the key=value file named by -agent-config to start the RPC debugger agent; the file names the transport and endpoint, nothing else is read from disk. ref: configure.ac:1441-1448, src/gui/sdlmain.cpp:8490-8496, src/agent/protocol/agent_protocol.cpp:477-632 Glide passthrough loads glide2x.dll, libglide2x.so or libglide2x.dylib. ref: src/hardware/glide.cpp:353-359, src/dosbox.cpp:3507-3509 ttf.font, ttf.fontbold, ttf.fontital and ttf.fontboit name a TTF, OTF, FON or TTC font resolved through the same search order plus the system font directories. Unset, the TTF output uses the built-in font, except on PC-98 or a double-byte code page where SarasaGothicFixed.ttf is tried first. ref: src/output/output_ttf.cpp:318-473, 653-668 Shipped in the resource directory: FREECG98.BMP, wqy_11pt.bdf, wqy_12pt.bdf, Nouveau_IBM.ttf, SarasaGothicFixed.ttf and the two reference configuration files. ref: src/Makefile.am:14-22 Overrides for data that is compiled in: the boot logo PNG, the mapper file, the customcodepage translation table, .kl layout files and the KEYBOARD.SYS to KEYBRD4.SYS libraries read from a mounted drive, the glshaders directory and the .lng translations. ref: src/ints/bios.cpp:11466-11475, src/gui/sdlmain.cpp:968-970, 7012-7020, src/gui/sdl_mapper.cpp:5731-5787, src/dos/dos.cpp:4402-4437, src/dos/dos_keyboard_layout.cpp:300-340, src/gui/render.cpp:1547-1554, src/misc/messages.cpp:300-326 files: # -- MT-32 and CM-32L control ROMs -- # Read through addROMFile from mt32.romdir, the working directory, the # resource directory or the configuration directory. Both control file names # are opened in mt32.model = auto, so either name carries any of these images. - name: "MT32_CONTROL.ROM" description: "MT-32 Control v1.04" required: false size: 65536 sha1: "5a5cb5a77d7d55ee69657c2f870416daed52dea7" validation: [sha1, size] aliases: ["CM32L_CONTROL.ROM"] source_ref: "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:59, src/libs/mt32/ROMInfo.cpp:89" - name: "MT32_CONTROL.ROM" description: "MT-32 Control v1.05" required: false size: 65536 sha1: "e17a3a6d265bf1fa150312061134293d2b58288c" validation: [sha1, size] aliases: ["CM32L_CONTROL.ROM"] source_ref: "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:62, src/libs/mt32/ROMInfo.cpp:92" - name: "MT32_CONTROL.ROM" description: "MT-32 Control v1.06" required: false size: 65536 sha1: "a553481f4e2794c10cfe597fef154eef0d8257de" validation: [sha1, size] aliases: ["CM32L_CONTROL.ROM"] source_ref: "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:65, src/libs/mt32/ROMInfo.cpp:95" - name: "MT32_CONTROL.ROM" description: "MT-32 Control v1.07" required: false size: 65536 sha1: "b083518fffb7f66b03c23b7eb4f868e62dc5a987" validation: [sha1, size] aliases: ["CM32L_CONTROL.ROM"] source_ref: "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:68, src/libs/mt32/ROMInfo.cpp:98" - name: "MT32_CONTROL.ROM" description: "MT-32 Control BlueRidge" required: false size: 65536 sha1: "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92" validation: [sha1, size] aliases: ["CM32L_CONTROL.ROM"] source_ref: "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:71, src/libs/mt32/ROMInfo.cpp:101" - name: "MT32_CONTROL.ROM" description: "MT-32 Control v2.03" required: false size: 131072 sha1: "5837064c9df4741a55f7c4d8787ac158dff2d3ce" validation: [sha1, size] aliases: ["CM32L_CONTROL.ROM"] source_ref: "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:73, src/libs/mt32/ROMInfo.cpp:103" - name: "MT32_CONTROL.ROM" description: "MT-32 Control v2.04" required: false size: 131072 sha1: "2c16432b6c73dd2a3947cba950a0f4c19d6180eb" validation: [sha1, size] aliases: ["CM32L_CONTROL.ROM"] source_ref: "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:74, src/libs/mt32/ROMInfo.cpp:104" - name: "MT32_CONTROL.ROM" description: "MT-32 Control v2.06" required: false size: 131072 sha1: "2869cf4c235d671668cfcb62415e2ce8323ad4ed" validation: [sha1, size] aliases: ["CM32L_CONTROL.ROM"] source_ref: "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:75, src/libs/mt32/ROMInfo.cpp:105" - name: "MT32_CONTROL.ROM" description: "MT-32 Control v2.07" required: false size: 131072 sha1: "47b52adefedaec475c925e54340e37673c11707c" validation: [sha1, size] aliases: ["CM32L_CONTROL.ROM"] source_ref: "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:76, src/libs/mt32/ROMInfo.cpp:106" - name: "CM32L_CONTROL.ROM" description: "CM-32L/LAPC-I Control v1.00" required: false size: 65536 sha1: "73683d585cd6948cc19547942ca0e14a0319456d" validation: [sha1, size] aliases: ["MT32_CONTROL.ROM"] source_ref: "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:77, src/libs/mt32/ROMInfo.cpp:107" - name: "CM32L_CONTROL.ROM" description: "CM-32L/LAPC-I Control v1.02" required: false size: 65536 sha1: "a439fbb390da38cada95a7cbb1d6ca199cd66ef8" validation: [sha1, size] aliases: ["MT32_CONTROL.ROM"] source_ref: "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:78, src/libs/mt32/ROMInfo.cpp:108" - name: "CM32L_CONTROL.ROM" description: "CM-32LN/CM-500/LAPC-N Control v1.00" required: false size: 65536 sha1: "dc1c5b1b90a4646d00f7daf3679733c7badc7077" validation: [sha1, size] aliases: ["MT32_CONTROL.ROM"] source_ref: "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:79, src/libs/mt32/ROMInfo.cpp:109" # -- MT-32 and CM-32L PCM ROMs -- # Every MT-32 control ROM pairs with the MT-32 PCM ROM, every CM-32L family # control ROM with the 1 MB image. - name: "MT32_PCM.ROM" description: "MT-32 PCM ROM" required: false size: 524288 sha1: "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252" validation: [sha1, size] aliases: ["CM32L_PCM.ROM"] source_ref: "src/gui/midi_mt32.h:93-105, src/libs/mt32/ROMInfo.cpp:83, src/libs/mt32/ROMInfo.cpp:113" - name: "CM32L_PCM.ROM" description: "CM-32L/CM-64/LAPC-I PCM ROM" required: false size: 1048576 sha1: "289cc298ad532b702461bfc738009d9ebe8025ea" validation: [sha1, size] aliases: ["MT32_PCM.ROM"] source_ref: "src/gui/midi_mt32.h:93-105, src/libs/mt32/ROMInfo.cpp:85, src/libs/mt32/ROMInfo.cpp:117" # -- FluidSynth SoundFont -- - name: "default.sf2" description: "SoundFont the operating system installs as FluidSynth default" required: false unsourceable: "a link the operating system creates to the SoundFont it installs as default, FluidR3_GM.sf2 on Fedora; no file of this name is distributed, and a same-named file of another program must not stand in" note: > first probe when fluid.soundfont is empty: /usr/share/soundfonts/default.sf2, or C:\soundfonts\default.sf2 on Windows. The source marks the first path as the Red Hat and Fedora one, where the name links to FluidR3_GM.sf2, the file of the second probe. Any SF2 or SF3 file loads; fluid.soundfont names it and fluid_synth_sfload is the only check source_ref: "src/gui/midi_synth.h:346-352, src/gui/midi_synth.h:364-368, src/gui/midi_synth.h:381-384, src/gui/midi_synth.h:462-473, src/dosbox.cpp:3746-3747" - name: "FluidR3_GM.sf2" description: "Fluid R3 GM SoundFont by Frank Wen" required: false note: > second probe when fluid.soundfont is empty: /usr/share/sounds/sf2/FluidR3_GM.sf2, or C:\DOSBox-X\FluidR3_GM.sf2 on Windows. Elsewhere the file loads when fluid.soundfont gives its path. The synth device probes the same paths source_ref: "src/gui/midi_synth.h:353-355, src/gui/midi_synth.h:370-372, src/gui/midi_synth.h:176-178, src/gui/midi_synth.h:193-195" - name: "GeneralUser_GS.sf2" description: "GeneralUser GS SoundFont by S. Christian Collins" required: false note: > third probe when fluid.soundfont is empty: /usr/share/sounds/sf2/GeneralUser_GS.sf2, or C:\DOSBox-X\GeneralUser_GS.sf2 on Windows. Elsewhere the file loads when fluid.soundfont gives its path; the setting's help text names this file as its example. The synth device probes the same paths source_ref: "src/gui/midi_synth.h:356-358, src/gui/midi_synth.h:373-375, src/gui/midi_synth.h:179-181, src/gui/midi_synth.h:196-198, src/dosbox.cpp:3747" # -- PC-98 character generator -- - name: "FONT.ROM" description: "PC-98 character generator ROM, T98Tools layout" required: false hle_fallback: true size: 288768 validation: [size] note: > 256 8x8 cells at 0x0, 256 8x16 cells at 0x800, 96 by 92 16x16 cells at 0x1800; a file of any other length is rejected. Enabled by pc-98 try font rom, on by default source_ref: "src/ints/int10.cpp:1487-1549, src/dosbox.cpp:2494-2495" - name: "ANEX86.BMP" description: "PC-98 character generator, Anex86 bitmap" required: false hle_fallback: true note: > 2048 by 2048 monochrome Windows bitmap, biSize 40, one plane, one bit per pixel, no compression, inverse colour scheme; the first row is the 8x16 single-width set and the rest is 16x16 full-width. Also reachable through the pc-98 anex86 font setting, which is tried before FONT.ROM source_ref: "src/ints/int10.cpp:1555-1647, src/dosbox.cpp:2498-2501" - name: "FREECG98.BMP" description: "PC-98 character generator, free generated bitmap" required: false hle_fallback: true note: > same bitmap layout as ANEX86.BMP and tried after it; ships in the resource directory source_ref: "src/ints/int10.cpp:1577-1580, src/Makefile.am:17" # -- CJK bitmap fonts -- # Read when the guest code page is 936, 949, 950 or 951 and a character has no # equivalent in the built-in Japanese font. The .pcf form of each name is # tried after the .bdf form. - name: "wqy_12pt.bdf" description: "WenQuanYi 16-pixel bitmap font" required: false aliases: ["wqy_12pt.pcf"] note: "ships in the resource directory" source_ref: "src/ints/int_dosv.cpp:1197-1218, src/Makefile.am:19" - name: "wqy_11pt.bdf" description: "WenQuanYi 14-pixel bitmap font" required: false aliases: ["wqy_11pt.pcf"] note: "ships in the resource directory" source_ref: "src/ints/int_dosv.cpp:1296-1316, src/Makefile.am:18" - name: "SarasaGothicFixed.ttf" description: "CJK fixed-width TrueType font" required: false hle_fallback: true note: > tried by the TTF output on PC-98 and on double-byte code pages when ttf.font is unset, and by the printer when the selected typeface file is missing; ships in the resource directory source_ref: "src/output/output_ttf.cpp:655-668, src/hardware/parport/printer.cpp:354-380, src/Makefile.am:21" # -- Printer typefaces -- # Read from the directory named by the printer fontpath setting, default # FONTS, then from the configuration, resource and program directories. # FT_New_Face is the only check. - name: "roman.ttf" path: "FONTS/roman.ttf" description: "Printer Roman typeface" required: false note: "also the fallback typeface for any unmapped LQ selection" source_ref: "src/hardware/parport/printer.cpp:320-321, src/hardware/parport/printer.cpp:336-337, src/dosbox.cpp:4691-4693" - name: "sansserif.ttf" path: "FONTS/sansserif.ttf" description: "Printer Sans Serif typeface" required: false source_ref: "src/hardware/parport/printer.cpp:323-324, src/dosbox.cpp:4691-4693" - name: "courier.ttf" path: "FONTS/courier.ttf" description: "Printer Courier typeface" required: false source_ref: "src/hardware/parport/printer.cpp:326-327, src/dosbox.cpp:4691-4693" - name: "script.ttf" path: "FONTS/script.ttf" description: "Printer Script typeface" required: false source_ref: "src/hardware/parport/printer.cpp:329-330, src/dosbox.cpp:4691-4693" - name: "ocra.ttf" path: "FONTS/ocra.ttf" description: "Printer OCR-A typeface" required: false note: "serves both the OCR-A and OCR-B selections" source_ref: "src/hardware/parport/printer.cpp:332-334, src/dosbox.cpp:4691-4693" # -- PC-98 sound board BIOS -- - name: "SOUND.ROM" description: "PC-9801-26K/86 FM board BIOS" required: false hle_fallback: true min_size: 16384 validation: [size] note: > 16 KB read into CC000h from the working directory only, when pc-98 sound bios and pc-98 load sound bios rom file are both set source_ref: "src/hardware/pc98_fm.cpp:367-385, src/dosbox.cpp:2395-2402" # -- Video BIOS ROM images -- # Loaded in place of the built-in INT 10h when vga bios use rom image is set. # The name comes from vga bios rom image, or from the machine type when that # setting is empty. - name: "et4000.bin" description: "Tseng ET4000 video BIOS" required: false min_size: 1024 max_size: 65536 validation: [size] note: "default file name for machine = svga_et4000" source_ref: "src/dosbox.cpp:943-994, src/dosbox.cpp:2762-2773" - name: "TRIO64 (Ver. 1.5-07) [VGA] (S3 Incorporated).bin" description: "S3 Trio64 video BIOS" sha1: "a308b15f93da34961c0141ec95b98c211557e2d5" required: false aliases: ["86c764x1.bin"] min_size: 1024 max_size: 65536 validation: [size] note: "default file name for machine = svga_s3" source_ref: "src/dosbox.cpp:951-953, src/dosbox.cpp:2762-2773" - name: "ibm-vga.bin" description: "IBM VGA option ROM of 10/27/86, laid out as mapped at C000:0" sha1: "dce6491424f1726203776dfae9a967a98a4ba7b5" required: false min_size: 16384 max_size: 32768 validation: [size] note: > read by LOADROM.COM from a mounted local drive; accepted when the file starts with 55 AA, byte 3 masked with 0xFC equals 0xE8 and the string IBM appears at offset 0x1E, and the machine is EGA or better source_ref: "src/dos/dos_programs.cpp:3606-3632, src/dos/dos_programs.cpp:3643-3649" # -- IBM ROM BASIC -- - name: "IBMROMBASIC-F6000h-1982-10-27.ROM" description: "IBM 5150 Cassette BASIC ROM" aliases: ["ibm-basic-1.10.rom"] sha1: "07449ebca18f979b9ab748582b736e402f2bf940" required: false min_size: 32768 max_size: 65536 validation: [size] note: > the ibm rom basic setting maps it just below the ROM BIOS and accepts 32 KB to 64 KB in 4 KB steps; LOADROM.COM maps the same image at F600:0 when it is exactly 32768 bytes, starts with E9 8F 7E and carries the string IBM at offset 0x4CD4 source_ref: "src/ints/bios.cpp:13230-13250, src/dos/dos_programs.cpp:3633-3637, src/dosbox.cpp:1948-1950" # -- PCjr -- - name: "system.rom" description: "IBM PCjr system ROM" sha1: "1f5f7013f18c08ff50d7942e76c4fbd782412414" required: false aliases: ["bios.rom"] min_size: 57344 validation: [size] note: > read during PCjr cartridge boot; bytes 0x3000 to 0xDFFF are copied to physical F3000. A short read leaves the region untouched and the cartridge still boots source_ref: "src/dos/dos_programs.cpp:3079-3088" # -- Whole system BIOS images -- - name: "System BIOS image" description: "PC/AT or PC-98 BIOS ROM image booted by BOOT -bios" required: false note: > loaded at the top of the first megabyte, rounded up to a paragraph and truncated to 128 KB, or to 96 KB on PC-98; a larger image is clamped rather than rejected source_ref: "src/dos/dos_programs.cpp:2261-2311" - name: "ITF.ROM" description: "PC-98 Initial Firmware Test BIOS" required: false max_size: 32768 validation: [size] note: > served through the port 43Dh bank switch alongside a BOOT -bios image; .itf.rom is tried before the bare name so one directory can hold several source_ref: "src/dos/dos_programs.cpp:2313-2344"