DOSBox-X est un émulateur open-source spécialisé dans l’exécution d’applications et jeux MS-DOS, d’IBM PC (jusqu’à Windows 98) et de PC-98, avec un support étendu des cartes graphiques 3Dfx Voodoo. Fork de DOSBox, il se distingue par une configuration plus flexible et une précision accrue, idéale pour les environnements historiques ou les développements DOS.
Sur macOS, il fonctionne principalement sur les modèles Intel (à partir de High Sierra) et propose des builds compatibles avec SDL 1 et 2. Bien que des versions pour Apple Silicon soient mentionnées sur le site officiel, leur disponibilité et leur stabilité ne sont pas confirmées. L’émulateur cible aussi bien les jeux DOS que les logiciels Windows 3.x/9x, avec des fonctionnalités avancées comme l’émulation IDE, le clipboard ou le support multimédia. Une documentation détaillée et une communauté active (via Wiki et GitHub) accompagnent son utilisation.
Ajout du support pour le montage de disques virtuels TeleDisk (.td0).
Corrections importantes :
Correction des codes de statut INT 13h pour les erreurs de lecture/écriture de secteurs (retour précis des codes d'erreur comme seek failed, CRC/data error, etc., au lieu d'un code générique 0x04).
Correction de la gestion des savestates entre builds Windows/Linux (compatibilité des structures de données et gestion des chemins de montage).
Correction des erreurs de CHS (Cylinder-Head-Sector) pour les disquettes (utilisation correcte du format 8-bit au lieu du format disque dur 10-bit/6-bit).
Prise en compte des bytes-per-sector définis par le disque via INT 1Eh (au-delà des 512 octets par défaut), pour les disquettes.
Correction de l'affichage des labels de volume FAT (plus affichés comme des noms 8.3).
Correction de la refactorisation du code des sous-classes imageDisk (VFD, D88, NFD, etc.) dans des fichiers dédiés.
Améliorations techniques :
Correction de la gestion de l'environnement COMMAND.COM pour respecter la structure MCB-chain attendue.
Correction du débogueur (affichage des registres 16-bit pour les opérandes de taille byte, résolution des variables nommées dans les expressions).
Correction des offsets OpenGL pour le plein écran et les modeswitching.
Correction de la logique de stripping des noms de fichiers dans DOS_Execute().
Correction d'une crash sur les builds Win9x "lowend" liée à AttachConsole().
Correction d'un bug d'accès hors limites dans drive_virtual.cpp.
Changelog complet
2026.08.31:
- Added support for mounting TeleDisk (.td0) floppy image files. (cimarronm)
- Fixed prompting of working directory option (maron2000)
- Relax sanity check of floppy image considering specially formatted disks
(maron2000)
- Disk sector I/O now returns typed INT 13h status codes instead of a
catch-all error, and the INT 13h handler propagates the specific code
(seek failed, controller failure, CRC/data error, etc.) into register
AH on read/write errors rather than collapsing every failure to 0x04.
Also fixes AH being left stale on write errors and a VFD fill-sector
write that reported failure after succeeding. (cimarronm)
- On non-MSC, only define MIN/MAX if not already defined (skitt)
- Fixed FreeDOS XCOPY failed to copy files when destination directory was
not specified (maron2000)
- IMGMOUNT: Fixed a regression that didn't try loading IMGMAKE.IMG if no
image was specified (maron2000)
- Fixed a build error when FFmpeg is upgraded to FFmpeg 9 (maron2000)
- Fixed freeze when savestate flagged file not found (rebb)
- Fixed capture and savestate directory locations (maron2000)
- Refactored the imageDisk subclasses into their own source files and headers
(VFD, D88, NFD, empty drive, INT 13h passthrough, El Torito floppy, and
MS-DOS block device), leaving the base imageDisk class and BIOS disk-list
plumbing in bios_disk. (cimarronm)
- Shell init: allocate the COMMAND.COM environment block after allocating the
shell binary/PSP in both SHELL_Init() and CONFIGSHELL_Init(), so memory
layout and ownership ordering match expected MCB-chain behavior. (cimarronm)
- Debugger: fixed disassembler showing 16-bit register names for byte-sized
operands. (cimarronm)
- Fixed INT 13h CHS decoding for floppies, which incorrectly used the hard
disk layout (10-bit cylinder / 6-bit sector) instead of the floppy layout
(8-bit cylinder in CH / 8-bit sector in CL) on read, write, and get drive
parameters. (cimarronm)
- Fixed savestates written by a Windows build failing to load on Linux
builds. The per-drive Opts struct in the DOS component held an unsigned
long, which is 4 bytes on Windows and 8 on LP64 hosts, so the saved stream
desynchronized and the load ran off the end of the component. Also fixed
POD_Load_DOS_Mscdex looping forever on an out-of-range CD drive count, and
mounted drive paths keeping their Windows path separators when a state is
restored on a non-Windows host. (ozy24)
- Fixed chs_write packing the high cylinder bits into the sector field of the
synthesized MBR partition table, which corrupted the end-CHS entry for disks
with an end cylinder above 255. (cimarronm)
- Floppy INT 13h sector reads/writes now honor the bytes-per-sector code from
the disk base table pointed to by INT 1Eh instead of assuming 512, allowing
guests that reprogram INT 1Eh to access non-512 media. (cimarronm)
- Debugger: Resolved named variables in expressions (zlatkok)
- OpenGL: Fixed fullscreen and modeswitching positional offsets. (DieSkaarj)
- Simplified the MCB filename-stripping logic in DOS_Execute(). (cimarronm)
- Fixed FAT volume labels being displayed as 8.3 filenames. (cimarronm)
- Fixed crash of Win9x lowend build at launch due to use of AttachConsole()
function (maron2000)
- Fixed a out-of-bounds array access bug in drive_virtual.cpp (maron2000)
v08.02
Nouveauté majeure :
Ajout d’un protocole expérimental ethnet pour l’émulation NE2000, permettant une configuration client-serveur entre instances (via localhost ou réseau local) pour simuler un LAN privé, avec une syntaxe similaire au commande ipx existante.
Améliorations techniques :
Correction des erreurs de rendu caractères et curseur souris en mode DOS/V japonais.
Optimisations de performance du pilote FAT (énumération de répertoires, création/lecture/écriture de fichiers).
Mise à jour du moteur sonore Nuked-OPL3-fast à la version 1.8-fast.3.
Corrections critiques :
Suppression des faux rapports d’opérandes mémoire illégales dans l’analyse des instructions (debugger).
Correction des fuites de handles dans les chemins d’erreur du pilote FAT (plus de fichiers ouverts en attente après une lecture de secteur tronquée).
Réorganisation des vérifications BPB (Boot Parameter Block) pour les disquettes, ajout d’une validation supplémentaire.
Compatibilité et fiabilité :
Prise en charge des sous-répertoires imbriqués pour le Z: drive.
Ajout des types de machines PC3270 et Olivetti (compatibilité matérielle étendue).
Correction du comportement du souris en mode PC-98 (INT 33h) pour refléter le comportement réel du pilote.
Changelog complet
2026.08.02
- Debugger: normalize 16-bit segmented offsets for address display/lookup and
avoid false "[illegal]" memory operand reports in AnalyzeInstruction()
(cimarronm)
- Fixed character rendering and mouse cursor display in DOS/V Japanese mode.
(nanshiki)
- Fixed build error of OSFREE release builds (maron2000)
- Added floppy BPB sanity check, and rearranged existing floppy BPB check code
(maron2000)
- Fixed window resizing (OpenGL, SDL2) (misty7666)
- Updated Nuked-OPL3-fast to v1.8-fast.3 (tgies)
- Added support for nested subdirectories in Z drive (maron2000)
- Added experimental "ethnet" command and protocol for NE2000 emulation. Instead
of using the pcap promiscious mode, which doesn't work over Wi-fi, a client
server setup can be configured to emulate a private lan between instances of
DOSBox-X either on localhost or on the local area network. The ethnet command
is deliberately built so that client and server set up is the same command
structure as the "ipx" command used to set up an IPX network in DOSBox and
DOSBox-X. (joncampbell123)
- FAT driver performance improvements, at least for directory enumeration,
file creation, reading, and writing (joncampbell123).
- Added PC3270 and Olivetti machine types (firevaran).
- Fixed fatDrive error paths so truncated boot-sector reads no longer look
like successful mounts, and early returns now close diskfile handles
instead of leaking them. (cimarronm)
- INT 33h: In PC-98 mode, do not maintain a hide/show display count to match
real mouse driver behavior (nanshiki)
v07.02
Nouveautés majeures :
Ajout du support pour Nuked-CQM dans l'émulation de l'OPL (AdLib/Grace Note), améliorant la compatibilité avec certains jeux et logiciels musicaux.
Corrections importantes :
Résolution des incompatibilités entre les formats de savestates générés avec MSVC et MinGW (problème transplateforme).
Correction des erreurs de signe dans l'instruction PMULLW (x86), évitant des plantages ou comportements incorrects.
Correction de la taille du registre FPU_Reg_80 (FPU 80-bit), impactant la précision des calculs flottants.
Fix d'un crash au démarrage avec les manettes (joysticks) déclarant plus d'un interrupteur directionnel (hat switch).
Correction des problèmes d'impression (gestion des commandes ESC S, typographie DBCS, et avancée de position cellulaire).
Correction de la détection de géométrie des dossiers montés en tant que périphériques (ex: C: sous DOS).
Améliorations spécifiques à macOS :
Builds OSFREE disponibles en nightly pour macOS (version alternative optimisée pour les systèmes libres de restrictions).
Correction du rapport d'aspect ratio et de la taille de la fenêtre en revenant de plein écran (via D3D11).
Affichage explicite de "OSFREE" dans le titre et les messages d'aide pour distinguer les builds dédiés.
Fix d'un échec de boot possible depuis le menu "Boot from disk image".
Correction de l'affichage des boîtes de dialogue lors du montage d'ISO via le menu déroulant.
qcow2 : Utilisation de la CHS logique (BIOS) au lieu de la CHS physique (IDE) pour les disques montés avec des numéros de périphérique (meilleure compatibilité avec certains systèmes DOS).
Changelog complet
2026.07.02
- Prepare for release. This time release OSFREE first so that the normal
version appears first on GitHub.
- Fixed savestate format incompatibility between MSVC and MinGW builds.
(AleWin32)
- Fixed PMULLW signedness issues. (bachimusprime)
- Fixed FPU_Reg_80 size (cimarronm)
- gui/sdl_mapper: Fixed startup crash with joysticks reporting >1 hat switch
(BoykoNeov)
- Added Nuked-CQM support to OPL emulation. (maron2000)
- macOS: Build OSFREE nightly builds (maron2000)
- D3D11: Fix Aspect ratio and Window size was not reflected when returning
from fullscreen mode (maron2000)
- qcow2: Set logical (BIOS) CHS instead of physical (IDE) CHS when mounted
with Drive numbers. (maron2000)
- Debugger: fix F11 (trace into next instruction) collision being swallowed
by Windows Terminal (AleWin32)
- Show OSFREE in the title and help message to distinguish OSFREE builds.
(maron2000)
- Fixed possible boot failure when booted from "Boot from disk image" menu.
(maron2000)
- Fixed dialog box didn't show when an ISO was mounted via dropdown menu.
(maron2000)
- printer.cpp: Fixed various printer emulation issues (maron2000)
Fixed handling of variable_length command
Fixed a typo in ESC S command
Skip DBCS processing for bit graphic data
Fixed advancing cell position of DBCS characters
- Fixed geometry detection of host folder converted drives (maron2000)
v06.02
Nouveautés majeures pour l'émulation DOS avancée :
Ajout d’un système de configuration pour charger des pilotes de périphériques MS-DOS via config -device (ex: config -device C:\DOS\OAKCDROM.SYS -devparm "/D:CD001"), avec prise en charge partielle des appels INT 21h et intégration dans la chaîne de périphériques DOS (objectif : support natif des pilotes comme IFS pour Windows 95).
Optimisation des transferts I/O pour les pilotes externes (passage de 1 octet à des blocs de 16 octets pour les lectures/écritures).
Support basique des pilotes de périphériques MS-DOS en bloc (ex: RAMDRIVE.SYS), avec création automatique d’un objet de disque image et d’une lettre de lecteur FAT.
Découplage de l’émulation CD-ROM de MSCDEX : le périphérique peut désormais être utilisé indépendamment après le boot du système invité, et MSCDEX peut se désinstaller proprement.
Corrections critiques :
Correction d’une fuite mémoire dans le bloc stat_block lors des échecs de ht_stat() sur les noyaux Darwin récents (impactant macOS).
Correction du comportement des appels INT 21h AH=3Fh/40h (lecture/écriture) avec les pilotes externes : retour correct du nombre d’octets traités dans AX.
Correction des artéfacts de rendu avec les scalers avancés (MAME 2x/3x, HQ2X) pour les modes MDA, Hercules, CGA, EGA, Tandy, PCjr, et SVGA 15/16bpp.
Correction de la détection de géométrie pour les images VHD et qcow2.
Correction du bug de progression de piste en lecture audio CD.
Correction de la gestion de la chaîne MCB lors d’un boot El Torito échoué (évitement des crashes).
Améliorations de configuration et débogage :
Ajout d’une section [devices]
Changelog complet
2026.06.02
- DOS file search bugfix: Prevent undefined stat_block usage on failed
ht_stat() calls. Use a separate variable for special file attribute
checks to avoid reusing stat_block when it contains garbage values.
This fixes issues on latest Darwin kernels. (cimarronm)
- Added function to config to load MS-DOS device drivers. The command is
config -device -devparm . For example,
to load OAKCDROM.SYS into memory, you could type:
config -device C:\DOS\OAKCDROM.SYS -devparm "/D:CD001"
which is equivalent to the DEVICE line in CONFIG.SYS:
DEVICE=C:\DOS\OAKCDROM.SYS /D:CD001
The goal is that DOSBox-X would fully support, through INT 21h and
other interfaces, real device drivers instead of hard coding specific
driver emulation. INT 21h would use the actual device chain instead
of a built-in list. Built-in device emulation could appear properly
in the device chain instead of fake entries.
There seems to be interest on the DOSBox-X discussion and issue trackers
of getting DOSBox-X to provide or emulate the MS-DOS/Windows 95 IFS
driver to get Windows 95 to boot from a disk image in the native DOSBox-X
environment, perhaps this would help enable that.
At this time (in development), only INIT is called. (joncampbell123)
- External DOS device driver read/write: Optimize I/O by using larger
read/write transfers (currently 16 based on how much memory is allocated
for device driver I/O request and data). Until this change, the code
used an extremely inefficient 1-byte read/write method to transfer
to or from the device driver. (joncampbell123)
- DOS execute bugfix: While ownership was properly listed in the MCB for
the PSP segment, the environment block associated with the program was
always listed in the MCB as belonging to the parent process. This has
been addressed (joncampbell123)
- Fix INT 21h AH=3Fh/40h READ/WRITE processing, when talking to an external
MS-DOS device driver, so that the bytes actually processed by the driver
are returned in AX to the DOS program, instead of giving the DOS program
the impression that all were processed when they may not have been. (joncampbell123)
- CD Audio: Fix track not advancing at end of playback (maron2000)
- Fix geometry detection of qcow2 images (maron2000)
- Fixed advanced scaler rendering artifacts when machine type is MDA,
Hercules, CGA, EGA, Tandy, or PCjr, or when SVGA 15/16bpp SVGA modes
are active. CGA/EGA with Advanced MAME 2x/3x and HQ2X scalers should
render correctly now. (joncampbell123)
- Added dosbox.conf [devices] section, which functions much like the
DEVICE= lines in CONFIG.SYS to load MS-DOS device drivers at startup.
Added support for RUN= lines to run commands like IMGMOUNT to help
set up drive mounts and CD-ROM devices, or any other diagnostic
purpose. While RUN= works just like the command shell, it is not
intended to be a general command shell for running DOS games or
applications that are unrelated to system startup. Added debugging
options like ECHO which echo the command about to be run, and
DEBUGBREAK which breaks into the debugger when starting the program
or device driver. (joncampbell123)
- Added code to device driver loading which will, where possible,
attempt to load the device driver as low as possible and pack it into
the DOS kernel below the start of the MCB chain to resemble how
device drivers are loaded in MS-DOS. (joncampbell123)
- Added debugger command "DOS DEVS" to list and enumerate the device
drivers in the DOS kernel. Added code to BOOT --boothax msdos to
track the location of the device driver list in the guest MS-DOS
kernel so "DOS DEVS" can work there as well. (joncampbell123)
- DOSBox-X shell will now free any memory it allocated and close files
that were opened on shutdown. This is important so that the CONFIG
shell (used for loading device drivers) does not leave behind
any memory it allocated when transferring control to the main
command shell. However, do NOT release memory and do NOT close files
on shell shutdown if the reason for the shutdown is the BOOT command.
By the time normal shutdown occurs, the BOOT command has already
overwritten low memory (and the MCB chain) with the guest OS's boot
code, therefore freeing shell memory in that cause would only cause
a complaint about a corrupted MCB chain and emulator E_Exit() shutdown.
(joncampbell123)
- Fixed VHD, qcow2 image geometry calculation (maron2000)
- Fix CONFIG vs DOS shell to ensure the welcome screen is printed first
before anything else on the console during startup. This is to help
keep any output from programs and device drivers on screen where
the user can see it (joncampbell123)
- Add basic support for MS-DOS block device drivers. If a block device
driver succeeds, set up a disk image object and attach it to the
FAT filesystem driver, and then a drive letter. At this time, this
is enough for Microsoft RAMDRIVE.SYS to load and appear as a working
drive letter in DOSBox-X (joncampbell123)
- CD-ROM device emulation is no longer strictly tied to MSCDEX emulation.
While devices are still initialized through MSCDEX emulation, it is now
possible for other parts of emulation to own a reference to it without
MSCDEX. This means it is now possible for CD-ROM emulation to work
after booting a guest OS without reaching back through MSCDEX emulation,
and MSCDEX emulation can now unload properly with the rest of the DOS
kernel. (joncampbell123)
- Fix bug where El Torito no emulation boot failed to notify the DOS
kernel that the MCB chain is no longer valid, causing MCB chain corruption
crashes. (joncampbell123)
- Added checks to sector I/O code to fix potential buffer overrun issues.
(orbisai0security)
- Fixed logging of 'Packed file is corrupt' message detection (maron2000)
- Fixed upper 32-bit of LBA was always cleared (maron2000)
- Fix and revise MSCDEX and CD-ROM emulation to disentangle the two,
so that MSCDEX no longer needs to remain in the background when BOOTed
into a guest OS for IDE emulation to work. (joncampbell123)
- CD-ROM emulation updated to use reference counting to improve sharing
of the image between IDE, MSCDEX, and general CD-ROM emulation.
IDE emulation can hold on to a reference instead of constantly asking
MSCDEX for it. (joncampbell123)
- Fix bug where mounting an invalid CUE file with no tracks caused DOSBox-X
to crash. (joncampbell123)
- MSCDEX and CD-ROM emulation: Cleanup and centralize creation of CD-ROM
interface objects, including the creation of the fake "empty" special
interface used to emulate an empty CD-ROM drive. (joncampbell123)
- Revise MSCDEX emulation to separate the CD-ROM subunit and drive tracking
from MSCDEX itself so that state can persist properly for a guest OS
even when MSCDEX is shutdown during BOOT. (joncampbell123)
- Add -replace option to IMGMOUNT to allow changing the ISO image assigned
to a CD-ROM drive without changing or altering the drive letter already
assigned. -replace is strictly limited to CD-ROM drives where the drive
letter is already assigned to that drive letter. (joncampbell123)
- Clean up the Drives menu for any drive letter assigned to a CD-ROM drive.
Enable the "Mount a disk or CD image file" and "Mount multiple disk/CD images"
even if the drive letter already has a CD-ROM drive attached, in which case
the menu item just replaces it. Allow these menu items to work even when
running a guest OS so that Windows 95 users can load any ISO image they
want at any time, instead of having to pre-load all images they will need
on a swap chain before BOOT. (joncampbell123)
- Replace ISO mounting code from the menu item to call more directly into
IMGMOUNT to avoid making a commad shell object which would probably interfere
with the guest OS. (joncampbell123)
- Enable the "Unmount drive" menu option under Drives for any drive attached
to a CD-ROM drive while running a guest OS like Windows 95. When used in
that scenario, it does not remove the drive letter, but instead acts like
a command to eject the CD from the CD-ROM drive (swaps in the "empty"
CD-ROM image). In the DOSBox-X environment "Unmount drive" will still
unmount the drive and remove the drive letter as expected. (joncampbell123)
- "Swap disk" menu item under "Drives" is now enabled even while running a
guest OS like Windows 95, if the drive is associated with a CD-ROM drive.
Using the command rotates through the CD-ROM drive swap chain only for
that specific drive, instead of all drives as the Swap CD mapper shortcut
would do. (joncampbell123)
- IDE emulation: Skip the CD-ROM eject / unload / load delay if media change
is swapping to the "empty" CD-ROM image object. (joncampbell123)
- Program object (base class of built-in commands) will no longer attempt to
do anything with PSP segments or command line strings in memory if invoked
while DOS kernel is disabled (running a guest OS). (joncampbell123)
- IDE ATAPI CD-ROM emulation: If the guest issues the START/STOP command
to eject the CD-ROM drive, replace the CD-ROM image with the "empty" object
to emulate a now-empty CD-ROM drive. (joncampbell123)
- Enable "Swap disk" menu command for floppy drives even while running a
guest OS, as long as a floppy drive was already mounted there. (joncampbell123)
- BOOT: Fixed a regression of floppy image detection (maron2000)
- Sound Blaster DSP command 0x10 (Direct DAC) and Disney Sound Source emulation
will hold the last sample received from the guest application to avoid popping
noises if games like In Extremis use those devices to play sound effects
that have a DC bias way off center. (joncampbell123)
- Added DC bias correction to the audio mixing code so that, if games like
In Extremis finish a sound effect with the last held sample way off center,
it doesn't cause all other audio to clip and distort, and it does not
potentially cause all audio on the user's operating system (as modern OSes
mix all audio across applications) to clip and distort, such as playing
In Extremis while listening to a YouTube video. (joncampbell123)
- Fixed bug in MMX instruction EMMS emulation that correctly marked all FPU
registers as empty but also reset the FPU status and control words. This
fixes the distorted 3D cube when running the Microsoft DirectX diagnostics
program (dxdiag.exe) with software rendering. (joncampbell123)
- FPU instructions now correctly throw exception 7 (Coprocessor not present)
if the EM (emulation) and TS (task switch) bits in CR0 are set, as documented
by Intel. Many OSes, including Microsoft Windows, require this fix in order
to properly maintain FPU state while multitasking. Without this fix, the FPU
state is never switched and all applications (and kernel drivers in Windows 98)
end up corrupting each other's FPU state. This fixes glitching artifacts in
"Attack of the Saucerman!" by Psygnosis when emulating a CPU type that supports
MMX instructions. It also appears to fix the random 3D rendering errors
(verticies spiking off into the distance at random) when running "The Sims" for
Windows 95 by Maxis, although the game still seems to exit at random after
a while and the opening FMV video locks up at some random point. As part of the
same fix, MMX instructions will also trigger the exception given the same
condition.
This fix is only applicable to normal core (core=normal) (joncampbell123)
- Option to disable TTF winperc limit (emendelson)
- Fixed screenshot crash (and others) in protected-mode games with output=ttf
(AleWin32)
- Debugger: Add missing debugger commands in documentation (AleWin32)
- Debugger: MEMFIND/MEMS fixes (most important: protected mode addressing)
(AleWin32)
- IMGMOUNT: Attach CD-ROM to IDE controller (maron2000)
- Bump mt32emu to ver 2.8.0 (maron2000)
- IMGMOUNT: Ensure not to attach a new drive to the IDE Controller when running
a booted guest OS. (maron2000)
- Fixed savestate load producing scrambled graphics (AleWin32)
- Feature: Add detailed info when loading savestate mismatch (AleWin32)
- output_ttf: Don't reset colors when already in TTF output mode (maron2000)
v05.02
Amélioration majeure de l'émulation audio :
Ajout d’un paramètre adlib pcm boost pour amplifier le volume des sorties FM de l’AdLib lorsque le jeu utilise du son PCM (par exemple, la "voix numérisée"), améliorant significativement l’audibilité des dialogues ou effets sonores digitaux.
Corrections critiques sur macOS :
Compatibilité Metal : Ajout d’un test de détection des frameworks Metal et correction des builds pour les plateformes macOS sans support natif (ex. : configurations spécifiques ou anciens systèmes).
Correction des captures d’écran : Fix des couleurs incorrectes dans les captures SDL1 pour les builds macOS.
Builds macOS : Ajout d’une conditionnalité (#ifdef C_METAL) dans le code de rendu pour éviter les erreurs de compilation sur macOS dépourvu de Metal.
Stabilité et compatibilité DOS :
Correction des erreurs de détection LBA (INT 13h AH=48h) et des problèmes de lecture/écriture sur les derniers secteurs des images disque (VHD inclus).
Activation/désactivation optionnelle du support 48-bit LBA via une configuration utilisateur.
Fix des plantages lors de l’impression multipages sous Windows (et par extension, compatibilité améliorée pour les environnements DOS similaires).
Corrections mineures mais impactantes :
Réinitialisation du positionnement centré de la fenêtre même lorsque l’option windowposition est activée.
Correction du mappage des polices TTF selon la codepage du système hôte (option output=ttf).
Limitation automatique de la taille de la fenêtre TTF à 2/3 de l’écran pour éviter les affichages disproportionnés.
Fix des segfaults dans le code TTF lorsque le rendu n’est pas activé.
Réactivation par défaut de clip_paste_bios (à true) pour Windows, avec prise en charge des caractères spéciaux lors des collages.
Changelog complet
2026.05.02
- DOSBox-X will now check both the current directory and the .config
directory in your home directory for DOSBox-X logo PNG files.
It is now possible to configure one set of PNG files as a default
for all uses of DOSBox-X from your user account. (joncampbell123).
- src/gui/render.cpp: Added missing ifdef conditional on C_METAL to enable
building on macOS platforms without Metal support. (herrnst)
- Fixed Metal support detection: add framework linker flags to configure
check (maron2000)
- Fixed window position not centered even when windowposition option is set
to do so. (maron2000)
- Fixed MSCDEX device name padding for short names (maron2000)
- When DOS games use the Adlib FM chip to do "digitized speech", DOSBox-X
does emulate that correctly, and it also correctly emulates how low
the volume is on the sound card output. However to make it more
audible, a new option "adlib pcm boost" has been added. If set,
and the Adlib emulation detects that the guest application is
playing PCM audio through it, the audio levels of the FM output
will be amplified to make the digitized speech much more audible.
(joncampbell123)
- Fixed mapping of TTF to match with guest codepage when launched with
output=ttf. (maron2000)
- Limit window size of TTF output to 2/3rd of the screen in both
dimensions so that the window is not TOO large on the user's screen.
(joncampbell123)
- Fix segfault in TTF output code caused by codepage mapping when the
TTF output is not active. (joncampbell123)
- Fixed clip_paste_bios option change was not reflected. Also, default is
changed to "true" for Windows due to some characters fails to paste when
set otherwise. (maron2000)
- Replaced some deprecated functions in dosbox.h. (maron2000)
- Fixed colors in the screenshot of macOS SDL1 build were wrong.(maron2000)
- Fix savestate restore crash in POD_Load_DOS_Files during live file slot
teardown (catbalony)
- Fixed mouse cursor display in DOS/V Japanese mode (nanshiki)
- INT 13h AH=48h: Fixed LBA detection (maron2000)
- Fixed read/write errors on last sectors of disk image (maron2000)
- Int 13h: Added option to enable/disable 48-bit LBA support (maron2000)
- Fix VHD file geometry detection (maron2000)
- Fixed crash when printing out multipages to printer (Windows) (maron2000)
- printer.cpp: Fix occasional missing page break after line wrap (maron2000)
v03.29
Nouveauté majeure :
Optimisation des bootables CD-ROM : Suppression de la lenteur liée à l'émulation des disques flexibles (El Torito), accélérant significativement le démarrage des CDs bootables.
Corrections critiques pour la compatibilité logicielle :
Gestion de la mémoire DOS : Correction d'un bug où l'option "zero memory on DOS allocation" était bloquée (impactait des jeux comme Bad Cat).
Allocation mémoire (INT 21h AH=4Ah) : Fix d'une erreur où DOSBox-X attribuait mal les blocs mémoire en cas d'échec de redimensionnement (problème dans California Games II).
Décompression EXEPACK : Détection et gestion des EXE compressés avec EXEPACK (option exepack dans dosbox.conf), évitant les erreurs "Packed File is Corrupt" liées à l'A20 gate.
Gestion des erreurs DOS : Affichage d'un message utilisateur (ex: "Access Denied") dans le shell si une exécution DOS échoue.
Améliorations techniques sous-jacentes :
Mode PC-98 : Désactivation automatique du chargement des polices/clavier (optimisation mémoire) et correction d'un segfault lié aux positions hors plage.
CPU Idle : Limitation stricte à 1 instruction CPU + IRQs (corrigeait des variations de timing dans Xargon avec "scanline render on demand").
VBE : Ajout de configurations pour contrôler la mémoire vidéo (vbememsize, vbememsizekb) et l'interface protégée.
Architecture et branches :
Séparation en deux branches : master (émulation complète) et main-osfree (sans noyau MS-DOS intégré, pour contourner des restrictions légales).
Changelog complet
2026.03.29
- Add dosbox.conf option to control the duration of the beep when
DOS CON and INT 10h are given the BEL character. (joncampbell123).
- DOS CON device BEL (beep) handling: For IBM PC modes, call on
INT 10h to make the beep, rather than duplicate code. Fix the
DOS CON device so that it can also properly beep in PC-98 mode.
(joncampbell123).
- Fix bug where the "zero memory on DOS allocation" option was
stuck on. Some games, like "Bad Cat" rely on memory contents
peristing across DOS EXEC and memory allocation. (joncampbell123).
- Fix Hercules palette selection related to herc blend. (joncampbell123).
- DOS kernel: When executing an EXE file, the loader can now detect
EXE files that were compressed using EXEPACK. Based on the new
exepack dosbox.conf setting, it can decompress the EXE by itself,
switch off the A20 gate, or do nothing. The purpose of this
setting is to avoid EXEPACK "Packed File is Corrupt" errors that
happen if the A20 gate is enabled and the EXE was loaded too low
in memory. (joncampbell123).
- Linux SDL1: Use XDG_SESSION_TYPE environment variable to detect
whether or not the user is running DOSBox-X under X11 or Wayland,
and if so, prevent the fbcon and svga drivers from initializing.
There seems to be a problem where, if run under Wayland and the
XWayland compatibility layer if not present, SDL1 uses the fbcon
driver to take over the screen using vtcon switching and the classic
fbdev driver interface. Don't do that! (joncampbell123).
- INT 21h AH=4Ah resize memory: If memory resize fails because there
is not enough room for the requested amount of memory, do not
set ownership of the block to the program. This fixes memory
allocation error in California Games II. The game at one point
seems to miscalculate and ask for an excessively large amount
of memory on resize, and then fail, which doesn't seem to affect
the game. HOWEVER, prior to the bugfix, the memory block that
was available was assigned ownership to the game anyway. Later
on after helicopter takeoff, the game would attempt to allocate
more memory, which would fail because of the erroneous assignment
of ownership to free memory. (joncampbell123).
- Add debug logging to not only indicate DOS kernel memory alloc,
free, and resize, but also log when the memory operation fails.
Perhaps someday I'll figure out what the memory management in
California Games II is doing wrong that makes the helicopter part
fail in DOSBox-X. (joncampbell123).
- Code development now occurs across two primary branches: master
for fully functional emulation, and main-osfree for versions of
DOSBox-X where built-in MS-DOS OS emulation is disabled. The osfree
branch can only boot a guest OS. main-osfree is for use in jurisdictions
that enforce or wish to enforce OS level age verification, and
therefore, may consider the MS-DOS emulation an OS that is subject
to those laws. (joncampbell123).
- El Torito CD-ROM floppy disk boot emulation is no longer as slow
as an actual floppy drive. Your bootable CDs will boot much faster
now. (joncampbell123).
- DOSBox-X shell: If a DOS error happened while trying to execute a
DOS program, read the error code and print an appropriate message
on the console. So far only "Access Denied" has any specific error
message there. (joncampbell123).
- Skip all keyboard code page and layout loading if running in PC-98
mode. PC-98 systems store the entire font in ROM with only very
limited room for custom fonts, therefore, it makes no sense to load
code pages in PC-98 mode. (joncampbell123).
- Keyboard code page layout: Fix bug where an out of range start_pos
can cause DOSBox-X to segfault. Range check and print an error
message instead. (joncampbell123).
- Keyboard code page layout: The UPX unpacker checks the stack pointer
(like a COM program would) to determine if there is enough memory
to decompress. If there is not, it executes INT 20h to exit to DOS.
Problem is, the code page execution never makes a proper PSP segment
for that to work, so, during execution, intercept INT 20h and safely
redirect execution to exit properly when called. Set an error flag
so the code can know if that happened and say so. (joncampbell123).
- Keyboard code page layout: If executing the CPI/CPX file because UPX
decompression is detected, allocate memory based on the size of the
file plus reasonable stack space rather than assume about 128KB of
RAM following a DOS allocation of less, which for lower memsizes,
only causes a crash on startup. (joncampbell123).
- Debug print to log what code page file is being loaded at startup (joncampbell123).
- CPU Idle callback is now strictly limited to processing IRQs and one
CPU instruction, instead of however many CPU instructions can run
until the next scheduled emulator event. This fixes a bug where
system calls that use the Idle callback (INT 21h, etc) can sometimes
vary their delay time by emulator events, and if "scanline render on
demand is enabled", can cause the Idle call to take a full 1ms interval
of time. This fixes an issue where "scanline render on demand" caused
some DOS games like Xargon to take 5 to 10 times longer to transition
between title, main menu, gameplay, etc. (joncampbell123).
- Debugger LOGL command now includes the PIC_FullIndex() emulator time
in millseconds so that it can be used to determine time as well as
CPU state for debugging (joncampbell123).
- Add dosbox.conf option to control whether VBE emulation provides the
protected mode interface or not (joncampbell123).
- Add dosbox.conf option vbememsize and vbememsizekb to control how much
video memory is reported through the VESA BIOS, which can be less than
actual video memory (but must be at least 256KB). This option can help
with some DOS programs that have problems with "too much" video memory
in the system (joncampbell123).
- Add INT 10h mode flag _REQUIRE_LFB. When set, INT 10h calls to set
VESA BIOS modes will fail unless requesting to set the linear framebuffer
version of the mode (joncampbell123).
- S3 emulation will mark any more large enough to exceed bank switching
limits in S3 hardware as _REQUIRE_LFB (joncampbell123).
- I'm not sure why Adlib emulation defaults to 48KHz in most versions of
DOSBox, but the hardware rate is 49716 and that should be the default
(joncampbell123).
- Fixed crash on starting debugger on MinGW builds (maron2000)
- Adjusted the ChinaSea/Big5-2003 extended code point ranges for CP951 to
0x9140–0xA3FE and 0xC6A1–0xFEFE (1abcd)
- Replaced deprecated symbols to enable launching on old macOSs (maron2000)
- Converted all bash-dependent shell files to POSIX-shell compliant
(pandasoli)
- Removed 7 duplicate Chinese character mappings from CP951 (Big5-UAO) (1abcd)
- Added SoundBlaster microphone input support (Windows WASAPI)
(meldro364-glitch)
- Fixed segfault on launch of macOS builds (maron2000)
- Added OS/2 support for tinyfiledialogs, browser and external programs and
some more fixes. (josch1710)
- Fixed savestate load "Memory size mismatch" error on MSVC build (rebb)
- Fixed savestate loading crash related to dynamically allocated TempLine in
VGA system (rebb)
- Added Direct3D11 and Metal support (Experimental, SDL2 only) (maron2000)
- When leaving fullscreen, only force rebuilding the window for OpenGL mode.
(rebb)
- Clear modifier keys before savestate gets saved. (rebb)
- Re-enabled WinMM joystick support (Windows SDL1) (maron2000)
- Fixed colors option fails at launch on TTF mode (maron2000)
- Optional switch to disable post exit delay in DX-CAPTURE (villesundell)
- Fixed Emscripten builds for Dosbox x v2026.01.02 (grootpot)
- Fixed long freeze during startup on linux (SmileTheory)
- Fixed windowposition option at launch (maron2000)
- Fixed detection of EXEPACK failures (maron2000)
- Added OS/2 dimension handling to UpdateWindowDimensions (josch1710)
- Fixed handling of volume label searches (Allofich)
- Microphone input: Make Hands-Free profile (HFP) optional (maron2000)
- macOS: Fixed build script typo that made loading freetype library fail
(maron2000)
- Fixed FPU FILD emulation (asemarafa)
- Removed range check in INT10_GetCursorPos causing text glitches (maron2000)
- Added experimental VS2026 CI builds. Can be downloaded as 64-bit Visual
Studio nightly builds. (maron2000)
- macOS: Fixed garbled message when opening image file(s) from dropdown menu.
(maron2000)
- Fixed XCOPY argument parsing to correctly handle switches appended directly
to file paths without whitespace. (maron2000)
- Fixed some Yes/No character was remained hardcoded as Y/N for some languages
specifiying other characters (e.g. German). (maron2000)
v01.02
Améliorations majeures pour la compatibilité graphique et les performances :
Suppression de la limite de bank switching en 8 bits pour le BIOS VESA si la mémoire vidéo est suffisante (sauf pour l'émulation S3, limitée à 64 banques max, ou pour les machines DOSBox Intégrated Graphics).
Résolutions vidéo étendues : les caches de rendu et de trame sont désormais dynamiquement alloués, supprimant les limites antérieures (1920×1440 pour le rendu standard, 800×600 pour les scalers avancés comme HQ2X).
Désactivation automatique du mode doublescan pour les scalers avancés (XBRZ, Advanced MAME) sur les modes VGA 200 lignes, évitant aux utilisateurs de le faire manuellement.
Ajout de variantes de scalers (TV, Scanline, RGB) optimisées pour les modes VGA 200 lignes avec doublescan (affichage à 400 lignes, plus fidèle à la réalité matérielle).
Corrections critiques :
Fix d’un problème aléatoire de buffer overrun dans RENDER_DrawLine, responsable de crashes ou de corruptions (surtout sous Linux avec OpenGL).
Correction d’une fuite de file handle empêchant la suppression des fichiers de sauvegarde d’état.
Restauration de la détection des étiquettes de CD pour FIFA 96 (régression corrigée).
Nouveautés utilisateur :
Intégration de IPSMAKE et IPSPATCH (outils de ROM hacking) dans le répertoire Z:\PATCHING de DOSBox-X, permettant de modifier des jeux MS-DOS via des patches IPS.
Ajout du support pour les modes CGA/HGC map13/map14 en rendu entrelacé pour le mode VGA 256 couleurs (utile pour un moteur de jeu spécifique en développement).
Intégrations techniques :
Ajout de SDL2_net dans le dépôt source (pour les fonctionnalités réseau).
Intégr
Changelog complet
2026.01.02
- VESA BIOS will remove 8-bit bank switching limit if the video memory
is large enough to need more than 256 banks. Memory size will always
be limited to no more than 64 banks (128 if smaller than 64KB
granularity) only if S3 emulation is active. DOSBox Integrated Graphics
machine type is exempt from bank switching limit, so, if you are running
legacy code or Demoscene stuff against it that never clears the upper
8 bits properly, it's not going to work unless you use smaller memsize
settings. (joncampbell123).
- Update BOOT command to support multiple disk images with swapping (maron2000).
- Render scaler system has been modified so that render and frame caches
are now dynamically allocated, instead of fixed buffers. Not only does
this reduce memory wasted by over-large buffers, it also removes
limitations on guest video mode resolution that previously capped the
video mode to 1920x1440 or lower, and the advanced scalers (HQ2X,
Advanced MAME, etc) to 800x600 or lower. (joncampbell123).
- VGA output will now automatically disable doublescan mode whenever an
advanced scaler, such as the "XBRZ" or the Advanced MAME scalers, are
selected, so that the scalers can do their job properly on the low
resolution graphics mode automatically. The user no longer has to
manaully turn off doublescan mode for those scalers to work. (joncampbell123).
- Added TV, Scanline, and RGB scaler variants appropriate for VGA
200-line modes with doublescan enabled (renders to 400 lines). In fact
supporting those scalers with 400-line VGA is arguably more visually
accurate than applying them to 200 lines of graphics, because it
better reflects the actual 400-line raster as it would be displayed
on a VGA monitor. (joncampbell123).
- Apparently at random, VGA render will call RENDER_DrawLine too much,
causing buffer overruns at random, so, instead of directly assigning
the scaler line handler, assign a function that checks the rendered
line count and ensures that rendering stops at the correct line
count. This should fix some random crashes or corruptions, especially
on Linux with the OpenGL output which likes to allocate EXACTLY the
amount of memory required for the frame. (joncampbell123).
- A patch was submitted to DOSLIB DSXMENU to incorporate non-selectable
informational lines of text. Incorporate the updated DSXMENU binaries
into DOSBox-X (joncampbell123).
- Wrote IPS patching tools IPSMAKE and IPSPATCH in DOSLIB, then incorporated
them as builtin executables on drive Z: under Z:\PATCHING. You can
now use IPS patch files to "ROM hack" your MS-DOS games. (joncampbell123)
- Add map13/map14 CGA/HGC like interleaved rendering support for VGA
256-color mode. There is a game engine in development that is willing to
use such oddball modes. (joncampbell123)
- Added SDL2_net to source tree (maron2000)
- Fixed regression of FIFA96 CD label detection (maron2000)
- Log OpenGL context version (rebb)
- Force SDL window regeneration when exiting fullscreen (rebb)
- Fixed file handle leak prevents save state file removal (srcdabada)
v12.01
Améliorations majeures pour l'émulation Tandy/PCjr :
Ajout d’un overlay de débogage pour afficher des informations techniques (masques d’affichage, banques mémoire CPU, valeurs de segment) sur les modes Tandy et PCjr, utile pour diagnostiquer les problèmes de jeux ou les remappages de mémoire.
Correction de la détection du système Tandy dans The Train: Escape to Normandy en injectant la chaîne "Tandy" dans le noyau DOS (résolution partielle pour les cas où l’HMA est activé ou MS-DOS classique est utilisé).
Corrections critiques pour les cartes graphiques Tseng (ET3000/ET4000) :
Intégration d’une police spécifique pour le mode 0x24 (130×28 caractères) et correction des modes 0x22/0x23/0x24 pour qu’ils reproduisent fidèlement le comportement du BIOS VGA réel (notamment l’affichage complet en 132×25 au lieu d’une moitié écran).
Résolution d’un bug généralisé affectant les modes CGA sur ces cartes, alignant l’émulation avec le noyau principal (suppression des macros obsolètes M_CGA2/M_CGA4).
Corrections mineures mais fonctionnelles :
Prise en charge des commandes de changement de lecteur avec une barre oblique finale (ex: a:\ au lieu de a:).
Adaptation de l’INT 21h (AH=4Bh) pour retourner une valeur non nulle (comme MS-DOS réel) afin de faire fonctionner Magic Pockets (version buggée qui ignore l’INT 21h AH=4Dh).
Débogage avancé pour Tandy :
Réponse aux lectures de registres WRITE-ONLY (selon la doc SX) par des zéros pour Troubadours, avec un message de log avertissant que les jeux DOS ne devraient pas lire ces registres. Cela permet un affichage partiel correct (4 scanlines au lieu de 2), mais avec des risques de corruption mémoire si moins de 768 Ko de
Changelog complet
2025.12.01
- Video debug overlay: For Tandy and PCjr emulation, add information on
the screen that shows the line mask, display and cpu memory banks and
the corresponding segment values, which may aid in debugging issues
with games and reveal any remapping or page flipping (joncampbell123).
- Tandy emulation: Add the string "Tandy" somewhere in the DOS kernel
at startup if machine=tandy. The game "The Train: Escape to Normandy"
scans from FFFF:0000 for the string "Tandy" which of course wraps
around to the first 64KB of memory where the DOS kernel resides. If
it does not see this string, it does not think it is running on a Tandy.
Such a detection routine will obviously break if you're on a 286 based
Tandy with HMA enabled, or you're running normal MS-DOS on a Tandy
system. This change allows the game to run (joncampbell123).
- Tseng ET4000 emulation: Mode 0x24 is unusual in that it is a 130x28
text mode with a 13-pixel high character cell. The ET4000 VGA BIOS
apparently has a specific font for that mode, so, incorporate that
font into DOSBox-X and use it for mode 0x24 (joncampbell123).
- Tseng ET4000 emulation: Fix modes 0x22/0x23/0x24 to match how the
actual VGA BIOS programs them. This fixes problems where the 132x25
mode was rendered only on the upper half of the screen (joncampbell123).
- Fix Tseng ET3000/ET4000 emulation bug where CGA graphics modes
were garbled. The main VGA emulation no longer uses M_CGA2/M_CGA4
and the ET4000 emulation needs to behave the same to fix the
graphics modes. Apply fix to ET3000 emulation as well. (joncampbell123).
- Some extra code in shell processing was preventing drive change commands
if the last character was a backslash i.e. "a:\" instead of "a:".
Fixed. (joncampbell123).
- INT 21h AH=4Bh EXEC: Real MS-DOS returns a nonzero value like 0x3E01.
A buggy version of Magic Pockets fails to call INT 21 AH=4Dh to read
the INTRO.EXE exit code and expects AL to just be nonzero to continue
to the game. So to make it work properly (kind of), return a nonzero
value. (joncampbell123).
- Tandy machine type: Many registers are WRITE ONLY according to SX
documentation, yet "Troubadours" likes to read/modify/write those
registers in what appears to be hand-rolled manual modesetting code
to set up 320x200 16-color mode, so, add code to respond to reads
from those ports with zeros and print a debug message to the log
about how DOS games are not supposed to read those registers. Make
the hand-rolled modesetting work by returning 0x00, rather than 0xFF.
The code will not set up the mode correctly if 0xFF is returned, but
will if 0x00 is returned. A side effect of this is that, since one
of the registers controls the RAM address used as video memory, this
moves it down to 512KB from base memory as well, which of course
easily corrupts the very end of the MCB chain unless you enable more
than 640KB of RAM and ask DOSBox-X to emulate the full Tandy 768KB
of conventional memory. Though the game still crashes very easily,
and in the exact same manner in both DOSBox-X and DOSBox SVN, this
fix does solve the problem where the game was only able to draw
2 out of 4 scanlines on the screen. (joncampbell123).
v10.07
Améliorations majeures pour la compatibilité DOS :
Correction de la gestion de la mémoire via INT 21h AH=4Ah (redimensionnement) pour éviter la troncature de la chaîne MCB (Memory Control Block) dans des cas comme California Games II en mode graphique Tandy.
Ajout d’une option dans dosbox.conf (désactivée par défaut) pour ignorer les corruptions de la chaîne MCB au-delà du bloc mémoire du programme en cours, simulant le comportement de MS-DOS pour des logiciels "sloppy" (ex. : allocation de blocs libres en cas d’erreur).
Correction de l’affichage du debugger (DOS MCBS) pour inclure le segment suivant le dernier bloc MCB.
Corrections critiques pour des jeux/logiciels spécifiques :
Fix de INT 10h AH=0Eh (affichage de caractères) pour éviter un défilement intempestif lors de l’impression d’un BEL (code 7) si le curseur dépasse la dernière ligne (Elder Scrolls Arena).
Prise en charge partielle des masques d’attributs FAT anormaux dans Elder Scrolls Arena :
Ignorance du bit VOLUME LABEL (0xA) pour les fichiers comme STATES.65.
Ignorance du bit VOLUME LABEL (dans 0x7C) pour SAVEGAME.00, permettant le chargement des sauvegardes depuis des images disque.
Améliorations matérielles/emulation :
Mise à jour du registre de statut Tseng ET3000/ET4000 (port 3DAh) pour respecter la documentation Tseng et les attentes de VGAKIT (bit 7 = inverse de bit 3, restriction des 4 bits supérieurs du Extended Start Register).
Correction du palettier Hercules (machine=hercules) pour permettre les changements de couleurs en mode graphique.
Améliorations spécifiques à macOS :
Compatibilité élargie : Prise en charge des
Changelog complet
2025.10.07
- INT 21h AH=4Ah resize memory: Compact free blocks only at or after the
segment being resized, as MS-DOS is documented to do (joncampbell123).
- INT 21h AH=4Ah resize memory: Fix bug where, if asked to resize a previously
freed memory block and the block is not the last block in the MCB chain,
and the next block in the MCB chain is also free, the MCB management code
would correctly compact free blocks but then allocate according to the
old size of the freed MCB block, causing truncation of the MCB chain.
Fix for MCB chain truncation caused by California Games II DOS memory
management when running in Tandy graphics mode. (joncampbell123).
- Add dosbox.conf option, disabled by default, where if the MCB memory
chain is corrupted anywhere past the running program's memory block,
and it does anything to cause allocation, a new free memory block is
created to satisfy allocations instead of halting emulation. Some DOS
programs are a bit sloppy in a way that can corrupt the MCB chain.
When enabled, this behavior matches apparent MS-DOS behavior (joncampbell123).
- Debugger: DOS MCBS command now also prints the segment immediately
following the last MCB block (joncampbell123).
- Tseng ET3000/ET4000: Update Status register 3DAh behavior when emulating
Tseng chipsets to reflect Tseng datasheet, and VGAKIT SVGA detection code
expectations. Bit 7 is expected, as documented by Tseng, to be the inverse
of bit 3 (vertical retrace). Extended Start Register CRTC 33h must not
allow setting the upper 4 bits because Tseng only documents the bottom
four, and because VGAKIT requires it for Tseng detection (joncampbell123).
- Fix bug that, for machine=hercules, prevented Hercules palette shortcut
from changing colors when in graphics mode (joncampbell123).
- Remove mixer and VGA capture test modes from integration device. Update
integration device version number. Convert hardcoded magic constants used
in IG into constants in iglib.h which is now shared explicitly with the
iglib.h in DOSLIB. Add integration device interface to allow the guest
to read and set the CPU cycle count of the emulator. (joncampbell123).
- Fix INT 10h AH=0Eh bug where printing BEL triggered screen scroll up if
cursor beyond the last line. Fix for the Elder Scrolls Arena installer.
(joncampbell123).
- FAT filesystem driver (for disk images): If Elder Scrolls Arena calls
INT 21h to find files named *.65 (such as STATES.65) with an attribute mask
of 0xA (VOLUME LABEL | HIDDEN), ignore the VOLUME LABEL bit and scan
normally. The 0xA value is leftover from a divide operation used to make
the file name and is technically a bug in the game, though that happens
to work on real MS-DOS and the DOSBox/DOSBox-X local folder support code
anyway. This fix allows Elder Scrolls Arena to run from a mounted disk
image. (joncampbell123).
- FAT filesystem driver (for disk images): If Elder Scrolls Arena calls
INT 21h to find SAVEGAME.00 (yes, a specific name for some reason) with
an attribute mask of 0x7C (which represents... um... what?), ignore the
VOLUME LABEL bit so that players can load their saved games from the
menu instead of being told that the saved game that is clearly there on
the screen does not exist. What other weird random values of CX attribute
mask does this game use? (joncampbell123).
- PCI bus improvements : Allow device to see full size access (smunaut)
- Fix build error of SDL1 version on ArchLinux (possibly gcc-15) (maron2000)
- Enable building DOSBox-X on older macOS versions and add instructions
(maron2000)
- Add code page 951 in dialog box (1abcd)
- Fix failure of create/opening a temporary file for piping (maron2000)
- Create/open a temporary file to device_TMP for piping on Z: drive.
(maron2000)
- Convert message to UTF16 before calling messagebox function (Windows)
(maron2000)
- Added some new members to the MMX_reg union for big-endian platforms.
(alarixnia)
- Create directory if not exist before writing conf file. (maron2000)
- Fixed language files were still locked after loading is completed.
(maron2000)
- Fixed freeze when codepage switched to 3846, 3848. (maron2000)
- Fixed build error when internal debugger is disabled (maron2000)
- Show loaded conf file in log in full path (maron2000)
- Print syntax error if pipe has no command to pass output (maron2000)
- Add permanent option for initial DOSBox-X shell (maron2000)
- Fix errors when initializing fluidsynth (maron2000)
- PC-98: Redraw the function keys after updating them (bobsayshilol)
- Do not carriage return with a single LF('\n') (maron2000)
- Fix mapper not rendering anything on SDL2/Windows (aybe)
- Scale mapper according display resolution (aybe)
- Added applicable changes from SVN. (Allofich)
r4485: Enable writing to all planes when drawing pixels in EGA modes.
r4487: Correct panning of VESA text modes.
r4488: Correct comment about odd/even bit.
r4490: Set MCB ownership when *blocks==total at end of DOS_ResizeMemory.
r4492: Don't clear message queues of MPU-401 and compatibles on reset.
r4493: Handle EOF character in batch files as actual end of file.
r4494: Use 4-byte partial page mapping data.
- Replaced deprecated functions to enable building with FFmpeg 8 (maron2000)
- Fixed screen blanked when restoring minimized window in TTF mode (Windows
SDL1) (maron2000)
- PC-98: Save Kanji CG access mode setting, restrict output accordingly
(OPNA2608)
- Added missing language options to Windows installers (maron2000)
- Debugger: IV must not truncate addresses to 16-bit (cmsautter)
- Debugger: Warn single-stepping may not work as expected with Dynamic core
(maron2000)
- MIDI: Show loaded Soundfont/ROM path only when required to. (maron2000)
- SDL2: Updated SDL2 library to version 2.32.10 (maron2000)
- Apply aspect/scaling/clipping when using OpenGL shaders in windowed-mode
(rebb)
- Fixed file locking problem on Linux port (loops)
- Fixed typo in Linux man page (-date-host-forced option) (maron2000)
- Mention OPL in MIDI/OPL configuration dialog menu (maron2000)
v05.03
Améliorations majeures pour l'expérience utilisateur et la compatibilité :
Ajout de l'affichage du statut TURBO dans la barre de titre.
Ajout d'une option Modeswitch toggle pour une meilleure gestion des modes alternatifs.
Correction de l'affichage des caractères DBCS (Double Byte Character Set) en fin de ligne et de l'entrée directe de kana demi-largeur.
Corrections critiques de compatibilité logicielle :
Correction du comportement du commande COLOR pour le match avec Windows et la gestion précise de la couleur jaune.
Correction des appels INT21h (AH=0a pour la position du curseur et AH=01 pour l'écho) pour éviter les comportements erronés liés au buffer clavier.
Correction de la gestion des sauvegardes d'état (buffer de taille insuffisante pour le terminateur de chaîne).
Correction des étiquettes CD trop longues (ajout d'un point après 8 caractères, requis pour Descent 2).
Correction des appels PC-98 (INT 18h/AH=10h pour le clignotement du curseur et INT 1Fh/AH=90h pour les adresses source/destination).
Améliorations techniques et performances :
Remplacement de SetPixel par un accès direct en mémoire via DIB Section pour accélérer l'impression.
Mise à jour des bibliothèques libpng (1.6.47), SDL2 (2.32.4) et XCOPY (1.9a).
Correction des mappages de caractères chinois (suppression de doublons dans les codepages 950/951 pour une meilleure compatibilité Big5/Big5-UAO).
2025.05.03
- Show TURBO status in title bar. (maron2000)
- Fixed MinGW32 builds failed using gcc15, due to a conflict in __inline__
macro. (lazka)
- Revise EGA/VGA emulation to treat the CRTC CGA/Hercules
CRTC bit remapping as bits to mask out, instead of defining
the upper limit of the memory mask. This makes the CGA mode
Engine page flipping test work. I initially had reservations
about whether or not real hardware did this, but, it would
make sense for hardware to do it that way. (joncampbell123)
- Updated libpng to version 1.6.47 (maron2000)
- Updated XCOPY to version 1.9a (maron2000)
- Updated SDL2 library to version 2.32.4 (maron2000)
- Fixed a build/install error due to using wildcards in Makefile.am, which is
not supported in GNU Automake. (maron2000)
- macOS: Install SDL2_net in CI workflow to enable internal modem support on
Release and Nightly SDL2 builds. (maron2000)
- Fixed buffer size to allocate missing byte for string terminator for
savestate filename to prevent buffer overflow (arifogel)
- Fixed settings of yellow color in COLOR command (maron2000)
- Fixed COLOR command to match behavior on Windows (maron2000)
- Fixed INT21h AH=0a cursor position moved by bell due to keyboard buffer full
(maron2000)
- Fixed INT21h AH=01 echo behavior (maron2000)
- Replaced SetPixel with DIB Section Direct Memory Access for faster printing
(DwayneSelsig)
- Fixed creation of overlay special files (zyebytevt)
- PC-98 mode: Add INT 18h function AH=10h to control cursor blink.
Emulate documented side effect in that this call also hides the
cursor. The PC-98 port of Lemmings will no longer show a blinking
black box in the lower left corner. (joncampbell123)
- Fixed Host key (F11, F12) handling in Codepage 932 (Japanese Shift-JIS).
(maron2000)
- Bumped ESFMu to ver 1.2.6 (maron2000)
- Fixed regression of adding a dot to CD labels when longer than 8 characters,
required for games such as Descent 2 CD installer (maron2000)
- Added Modeswitch toggle option (DieSkaarj)
- Fixed glitch of DBCS character at the end of a line (maron2000)
- Fixed dialog for showing error of loading language files (maron2000)
- Removed two and 226 duplicate Chinese character mappings from code
pages 950 and 951, respectively, ensuring more accurate Big5 and
Big5-UAO character mappings for Chinese IME users. (1abcd)
- Enabled changing drives mounted prior to switching to securemode (maron2000)
- Enabled some messages to be translated in the translation files (maron2000)
- Fixed fullscreen mode occasionally switched to windowed mode (maron2000)
- Updated French translation (FredBezies)
- Fixed blank screen when output=ttf on PC-98 mode (maron2000)
- Fixed crash when switching from fullscreen to window mode in TTF output
(maron2000)
- Fixed mounting zip files with white space in their names failed (maron2000)
- Fixed crash on reboot when output=ttf (maron2000)
- Fixed blank BIOS screen when output=ttf (maron2000)
- Fixed direct input of half-width kana (maron2000)
- Fixed PC-98 INT 1Fh, AH=90h source and destination address (drachen6jp)
- Fixed unnecessary trailing backslash in path name (maron2000)
- Fixed SSE MOVSS, MOVHPS, UNPCKLPS, UNPCKHPS, and PSADBW as well as
MMX PMULLW, PSUBUSB, and PSUBUSW, instruction implementations (fuel-pcbox)
v02.01
Nouveauté majeure pour l'émulation PC-98 :
Ajout d’un port I/O 0x43Bh en mode PC-98, permettant aux applications invités de détecter si la "memory hole" de 15 Mo est ouverte (utile pour vérifier la disponibilité du framebuffer PEGC 256 couleurs).
Corrections critiques en PC-98 :
Clavier : Correction du Interrupt Service Routine (ISR) pour gérer correctement les entrées sous CWSDPMI (évitait la perte de données clavier).
BIOS POST : Fix de l’instruction JMP à l’adresse F000:FFF0 pour correspondre à la détection PC-98 par le runtime DJGPP.
CWSDPMI : Remplacement de la version IBM-spécifique par une version patchée compatible PC-98 (évitait les crashes sur interruptions/exceptions).
Améliorations VGA/planar :
Correction d’un débordement de buffer en 4bpp planaire (16 couleurs) si l’invité écrit au-delà des 2 Mo de RAM vidéo (évitait la corruption de l’état émulé).
Fix des calculs de scanlines et de bank switching pour les modes SVGA 4bpp planaires, ainsi que des bugs en 24bpp RGB (panning/scrolling).
Optimisations techniques :
Suppression du code obsolète lié à la pagination x86 (non-"full TLB") et du self capture VGA pour l’intégration DOSBox.
Utilisation de mmap() pour l’allocation mémoire système (préparation pour des fonctionnalités futures comme KVM).
Corrections mineures mais impactantes :
DBCS : Réactivation du paramètre fontx ignoré dans les versions précédentes.
CTRL+C : Suppression d’une vérification inutile sur le vecteur NULL (COMMAND.COM moderne gère déjà cette interruption).
CMS : Correction de son désactivation systématique malgré les paramètres de config.
*(Aucune modification
Changelog complet
2025.02.01
- Added new experimental dosbox.conf option that turns off the
A20 gate automatically if loading a COM/EXE file to a memory
location below 64KB. Option is off by default. This is intended
for the startup routines of programs that assume 8086 wraparound
to prevent them from crashing (joncampbell123).
- Bump tinyfiledialogs to v3.19.1 (maron2000)
- Fix VGA render-on-demand bug that causes all screen updates to
stop working if something changes video state without changing
any other attribute (width, height, frame rate, etc.). In
PC-98 mode this bug could be triggered by leaving the text
layer open while switching off the graphics layer when the
graphics layer is in 256-color PEGC mode. Fix for KOARMADA.EXE
when exiting back to the DOS prompt. (joncampbell123).
- In PC-98 mode, add I/O port 43Bh which guest applications can
then read to determine whether the 15MB "memory hole" is open.
The guest can use this bit to determine whether the PEGC 256-color
framebuffer is available at that location, or whether that is
just plain system memory. Added for homebrew PC-9821 project
KOARMADA.EXE which uses that bit to determine how to talk to
the framebuffer. (joncampbell123).
- Fix keyboard ISR in PC-98 mode to assume there is data waiting
from the keyboard I/O ports (then check the status for more).
The reason is that CWSDPMI.EXE for PC-98 has a keyboard ISR
of it's own that reads the scan code first (which clears the
"data available" bit) before then passing control to the
real-mode keyboard ISR. If our keyboard ISR first checks for
status in that case it will never see any keyboard data and
keyboard input will never register to the guest while running
under CWSDPMI (joncampbell123).
- Fix BIOS POST location (F000:FFF0) JMP instruction in PC-98 mode
so that the segment value of the JMP instruction matches a
specific value that the DJGPP C runtime checks for to detect
PC-98. (joncampbell123).
- Stop serving IBM PC-specific CWSDPMI.EXE in NEC PC-98 mode.
It happens to work unless any interrupt or exception happens.
Instead, provide an alternate common version of CWSDPMI.EXE
that was patched to support PC-98 machines when machine=pc98
(joncampbell123).
- Add support for ucrt64 builds (maron2000)
- DOS CTRL+C handling: Remove NULL vector check because built-in
COMMAND.COM long ago was fixed to provide a CTRL+C vector. Fix
code to use a different value for the C++ exception so that it
cannot be confused for any other common signal in the emulator
(joncampbell123).
- Remove DOSBox Integration Device VGA "self capture",
which was never used much anyway, as part of cleanup (joncampbell123).
- x86 paging: Remove unused non-"full TLB" code. (joncampbell123).
- Use mmap() to allocate system memory if available. This is
for future work that may involve something that requires
page-aligned allocation, such as KVM support in Linux (joncampbell123).
- VGA cleanup, organization (joncampbell123).
- Fixed regression of specifying DBCS fontx file was ignored. (maron2000)
- Fixed mistakes in adding double quotes to filenames to pass to IMGMOUNT
command, and syntax errors in showing a message dialog box. (maron2000)
- Fixed bug where bios memSize was not set when using TTF. (maitchison)
- Fixed CMS was always disabled regardless of config settings. (xrip)
- Switch off TTF mode in text modes not working in TTF mode. (maron2000)
- Gravis Ultrasound: Add dosbox.conf option that when enabled,
prints a warning to the log file every time the guest pokes
data into GUS RAM beyond the 1MB supported by the card,
in order to better identify errant Demoscene code and/or
any bugs in new tracker code currently in development. (joncampbell123)
- VGA: Fix buffer overrun that can occur with 4bpp planar
16-color modes if the guest writes beyond the first 2MB
of video RAM. The planar support code also copies the 3rd
bitplane to a font RAM array used in EGA/VGA text mode.
This font RAM array is only 512KB, therefore in planar
memory space, writes beyond (2MB/4) = 512KB cause corruption
of emulator state and possibly crashes. Solve the issue
therefore by not copying to font RAM beyond 512KB. (joncampbell123)
- VESA BIOS support: Fix VGA draw and bank switching code
to ensure that the guest cannot write outside video RAM
limits, and fix VBE bank switching code to consider 4bpp
planar SVGA modes properly. (joncampbell123)
- VESA BIOS support: Fix scan line and page calculations related
to 4bpp planar 16-color SVGA modes. (joncampbell123)
- VESA BIOS support: Fix 24bpp RGB bugs related to VBE calls
that control scan line length and display panning/scrolling.
Now VBETEST can test 24bpp panning without potentially giving
the user an epileptic seizure, and there are no more overlong
scanlines. (joncampbell123)
- VESA BIOS support: Correct mode information for SVGA text modes (joncampbell123)
- VESA BIOS support: Like real Pentium-era hardware, do not
list 4bpp planar 16-color modes as having a linear framebuffer.
Most SVGA cards only support planar VGA memory within the
standard VGA A0000-BFFFFh region and do not support the same
up in the linear framebuffer area. (joncampbell123)
- Save state support: Let the option to control whether or not
compression is applied, apply to the ZIP compression. If you
turn off compression, the ZIP file uses "store" mode instead,
otherwise compresses as normal. (joncampbell123)
- It turns out that for whatever reason, the savestate code was
compressing the state twice. Once by itself, and then again when
writing to the ZIP archive. Furthermore, storing the original
length at the end of the compressed data using size_t is a big
problem. Remove the extra compression/decompression and let the
ZIP file support do the compression. Save states from now on
will be marked as "No compression" for at least some backwards
compatibility. (joncampbell123)
- Volume label cleanup and fixes. Do not pad labels with white spaces. (maron2000)
- Some NEC PC-98 games that support MIDI through MPU-401 like to use
Roland GS-specific SysEx messages to control master volume and
reset the MIDI synth, instead of standard messages. These games
were known in DOSBox-X to have problems with MIDI stuck notes and
hanging notes for this reason. Added code to recognize Roland GS
reset SysEx and reissue it as standard MIDI reset, to resolve that.
Added code to Fluidsynth MIDI support to recognize the Roland GS
master volume SysEx commands and apply it to the output, which
allows these games to "fade out" the MIDI properly. PC-98 games
should no longer have hanging/stuck MIDI notes (joncampbell123).
- Fix VESA BIOS modelist mistake that marked all "high definition"
modes as modes to round bytes per line up to a power of 2 (joncampbell123)
- Fix memory size register determination for S3 Virge/VX (clbianco)
- Fixed a Y2038 bug by replacing Int32x32To64 with regular multiplication.
(CookiePLMonster)
- Fixed pasting Bell code (0x07) from clipboard was ignored. (maron2000)
- Fixed a segfault crash when pasting the content of clipboard is empty
or consists of invalid characters only. (maron2000)
- Fixed crash when trying to access MOUNTed empty physical CD/Floppy
drives. (maron2000)
v01.01
Nouveautés majeures :
Ajout d’une option pour appliquer vmemdelay aux modes SVGA et framebuffer linéaire (comme les modes VESA BIOS), réduisant les performances mais permettant d’émuler des cartes SVGA plus lentes. Cette option affecte aussi les modes PC-98 linéaires, Tandy/PCjr et MDA/Hercules.
Correction de la logique de reset CPU pour éviter les crashes lors d’un reset depuis l’invite (guest), même avec le noyau dynamique activé (problème lié à l’absence de gestion des exceptions C++ dans le code généré dynamiquement).
Amélioration critique pour Windows XP : Correction des valeurs CPUID (famille/modèle/brand) pour le type cputype=pentium_iii, incluant le niveau 2 (déscripteurs de configuration). Sans ces valeurs, Windows XP pouvait bloquer en boucle lors du démarrage. Impact : boot fonctionnel de Windows XP avec une CPU Pentium III émulée.
Extension de la limite de RAM émulée : memsize peut désormais représenter jusqu’à 1 To (au lieu de 4 Go), sous conditions (Pentium PSE activé, memalias=40, et enable pse=pse40). Ajout d’une option pour mapper la mémoire dans un fichier disque (obligatoire pour ≥4 Go) pour limiter la consommation RAM de l’hôte. Prérequis : système de fichiers supportant les fichiers "spars" (ex: ext4, NTFS).
Corrections importantes :
Sauvegarde fonctionnelle du thème Windows 3.1 dans le GUI de configuration (avant, les paramètres ne persistaient pas dans dosbox.conf).
Correction du délai de transmission des codes scan pour le clavier PCjr, conformément à la documentation IBM (nécessaire pour les combinaisons Fn+clé et les jeux comme Agent USA).
Fix de l’émulation des modes EGA/CGA : détection du mode couleur (RGBI) ou monochrome (RrGgBb) via la polarité du vsync, et non la longueur de htotal (résout les problèmes de couleurs dans *Rambo
Changelog complet
2025.01.01
- Fix bug that prevented the Configuration GUI from saving to dosbox.conf
the last Windows 3.1 theme you applied using the dropdown menu.
(joncampbell123).
- Add option to apply vmemdelay to SVGA and linear framebuffer
modes (such as VESA BIOS modes), which reduces emulator performance
for those modes, but allows you to emulate slower SVGA cards.
Due to how some machine types are emulated, this option also enables
vmemdelay to affect the PC-98 linear framebuffer, Tandy & PCjr
video modes, as well as MDA/Hercules. (joncampbell123).
- Add workaround to CPU reset logic that allows it to work correctly
even with dynamic core. Previously, if the guest reset the system,
the emulator would crash with an error message about an uncaught
C++ exception because C++ exception handling doesn't work with
dynamically generated code. (joncampbell123).
- Correct CPUID family/model/brand values for cputype=pentium_iii.
Add CPUID level 2, which returns "processor configuration
descriptors", and return documented Pentium III values. Apparently
Windows XP really REALLY cares about these configuration
descriptors and will hang in-kernel in an infinite loop at bootup
without these apparently really important values. This change
makes it possible to boot Windows XP with Pentium III emulation.
(joncampbell123).
- Allow values of memsize to represent 4GB or more of RAM. Up to
1TB, if Pentium PSE extensions are enabled, the memalias setting
is 40, and "enable pse=pse40" in the conf file. Memalias maximum
is now 40, instead of 32. Add code to provide that memory above
the 4GB address mark when PSE is in use by the guest OS. Added
dosbox.conf option to specify a memory file. When specified, all
guest memory is memory-mapped from a file on disk, rather than
allocated from host memory or host swap file. To avoid consuming
too much RAM on the host, a memory file is REQUIRED to emulate
memory at or above 4GB. For best performance with the memory file,
make sure the filesystem you place it on supports sparse files,
including Linux ext4 and Windows NTFS. (joncampbell123).
- Fix EGA machine type to determine whether CGA RGBI or EGA RrGgBb
display is active by vsync polarity, instead of the length of
htotal. Several online references state that vsync is negative
for 350-line modes, including 350-line to an MDA monitor. This
also allows the "enhanced" EGA 320x200 modes in Rambo III to display
colors correctly. (joncampbell123).
- Dynamic x86 core: Reflect STI instruction to normal core so that
the 1-instruction delay is correctly emulated. This makes it
possible to run Windows XP or Server 2003 with dynamic core and
SYSENTER/SYSEXIT emulation without random BSODs (joncampbell123).
- Fix default code page. Instead of assuming 437 at all times, use
437 for all IBM PC compatible modes and 932 for PC-98 emulation.
(joncampbell123).
- Normal core: Fix STI emulation to enforce the 1-instruction delay
by forcing the normal core to execute another instruction right
away without providing any opportunity for interrupt processing.
This does not break Peret Em Heru, Keen games, and it seems to fix
the random BSOD issues with Windows XP and Windows Server 2003
when emulating a Pentium II that supports SYSENTER/SYSEXIT. I'm
not clear on why this fix prevents them from crashing, but there
you go. (joncampbell123).
- Keyboard emulation: Fix PCjr key delay to match IBM documentation
stating how long it takes to transmit one scan code, which is
obviously much slower than normal to accomodate the slow CPU and
the optical nature of the transmission. This is needed in order
for emulation to correctly send Fn+key combinations. At normal
key delay, the guest will miss scan codes and function keys will
not be reliable. (joncampbell123).
- Keyboard emulation: The 83-keyboard scan codes work differently on
the PCjr keyboard because half of them are only accessible by holding
the Fn key. The keyboard only sends the base key scan code and the Fn
key scan code and the BIOS is expected to convert that to the normal
83-key scan codes expected by DOS software. The problem is some games
like "Agent USA" for PCjr are written to directly handle scan codes
through IRQ 1 (the fact that PCjr handles keyboard via NMI and reflects
to INT 9 is ignored here). Fix this by sending scan codes that emulate
holding Fn and pressing the appropriate key. Agent USA expects the
user to press F1 by holding Fn and pressing "1". (joncampbell123).
- Revise VGA doublescan mode, vs bit 7 of the Max scanline register, to
correct how VGA doublescans 200-line modes. Revise EGA/VGA text code
to divide line by 2 in rendering to match double scanned scanlines,
so that the "graphical" text of "After the War" can render properly
for machine=vgaonly. (joncampbell123).
- INT 10: If machine=ega, check the EGA switches on INT 10h modeset.
Some games force the EGA BIOS to use CGA 200-line text modes by
modifying those bits and then setting the mode ("After the War").
(joncampbell123).
- INT 10: Fix "load font" functions to correctly recompute video
display end for machine=vgaonly and machine=ega. (joncampbell123).
- INT 10: Like any other 200-line 16-color graphics mode, 200-line
VGA text mode needs to program the AC and VGA palette using the
CGA RGBI-type palette, not the EGA 64-color type palette. (joncampbell123).
- CPU: Disallow clearing PE bit from LMSW by default, always.
You can still allow it through dosbox.conf. It turns out that
x86 CPUs never allowed you to clear it that way, even from the
Pentium up, even though Intel documentation beyond the 386 never
mentions it again. This fixes problems with DOS extenders and
VCPI, particularly DOS4GW which for some reason with VCPI likes
to try to clear the PE bit when switching to VM86 even though
it clearly understands it's not supposed to be able to clear it.
(joncampbell123).
- VCPI: It turns out the VCPI server GDT selectors are expected to
be 32-bit, because the protected mode VCPI entry point is expected
to be called as if 32-bit far pointer. Correct VCPI entry point
to return using RETF, not IRETD, which solves crashing issues with
DOS extenders. For the first time, DOS extenders are working with
the DOSBox-X built-in implementation of VCPI and most DOS games
run fine now with it. (joncampbell123).
- VCPI: Add code to INT 2Fh handler regarding Windows startup/shutdown
messages to fill in DS:SI. If EMM386 and VCPI emulation is active
and running the DOS machine in virtual 8086 mode, give Windows the
proper callback procedure to allow Windows to switch off VCPI vm86
mode on startup and turn it back on during shutdown. (joncampbell123).
- BIOS "POST" screen: Change BIOS logo to PNG format. To avoid having
to render a PNG in roughly 10 different video modes, add code to
VGA draw code to allow a BIOS logo "overlay" to be rendered
independent of the video mode. Depending on machine type load one
of four PNG files from disk or from inside DOSBox-X itself.
PNG requirements: 224x224 or smaller, bit depth of 8bpp or less,
color palette (not grayscale), no alpha channel, and must not be
interlaced. For best compatibility, use less than 64 colors, or
perhaps just 16 colors. Much like the Windows 95 LOGO.SYS, you can
change the logo to your taste by placing specifically named PNG
files in the same directory as your dosbox.conf or current working
directory. Have fun. Note that this addition requires that you
compile DOSBox-X with libpng enabled. (joncampbell123).
- Added dosbox.conf option to specify BIOS logo file. (joncampbell123).
- Added dosbox.conf option to specify a text message, up to 3 lines,
at the bottom of the screen during BIOS POST screen. (joncampbell123).
- Fix color glitches in EGA, Tandy, Hercules mode on macOS SDL2 build
(output=opengl)(maron2000)
- Add int33 mickey threshold option (Fixes Ultima Underworld) (jpernst)
- Fix configure.ac (disable-screenshot option) (maron2000)
- Fixed codepage switching when loading language file in Traditional
Chinese (maron2000)
- Fixed display of some Chinese characters (Traditional Chinese)(maron2000)
- Fixed garbled text and menubar on reset (maron2000)
- Fixed codepage switching when a language file was loaded (maron2000)
v12.04
Amélioration majeure de la gestion mémoire : Augmentation de la limite d'allocation mémoire de 3,5 Go à ~3,9 Go pour une meilleure compatibilité avec les jeux/games exigeants.
Corrections critiques pour les modes graphiques et compatibilité matériel :
Correction des erreurs d'alignement en mode S3 LFB PCI (problèmes liés à la mémoire système élevée).
Réparation du mode EGA 640×350 4 couleurs (fonctionnait uniquement avec le tableau INT 10h activé).
Limitation correcte de la taille mémoire S3 VGA (évite les rapports erronés comme 2,5 Mo au lieu de 8 Mo en Windows 98).
Suppression du mode SVGA 0x6A (inexistant sur le matériel VGA standard) et correction de sa fréquence d'actualisation (passée de 37 Hz à ≥ 60 Hz).
Améliorations logicielles et utilisateur :
Ajout d’options pour IMGMAKE : -partofs (positionnement de partition), -align (optimisation I/O pour secteurs 4096 octets), et -label (étiquetage du volume FAT).
Correction des attributs MDA (affichage du vert clair en arrière-plan pour les codes 0xF0/0xF8).
Fix des crashes lors du chargement d’images CD sur un lecteur vide ou du changement de disquettes montées en cours d’exécution.
Stabilité et interface utilisateur :
Suppression des doublons dans les logs d’écran et journalisation du fichier .conf chargé.
Correction du verrouillage de la souris (bouton central) et de l’option "Autolock mouse" (inefficace).
Résolution des problèmes de plein écran (mode TTF sous Windows) et de lancement de programmes hôtes avec espaces dans le chemin.
Compatibilité build et correctifs divers :
Correction d’une erreur de compilation avec libc++ 19.
Expansion de chemins Z Drive (ins
Changelog complet
2024.12.04
- Arrange memory device allocation so that it is possible to allocate
up to about 3900MB of memory instead of 3500MB. (joncampbell123).
- Fix S3 LFB PCI base alignment error if system memory pushes it
to a higher address (joncampbell123).
- Fix EGA 640x350 4-color mode (when EGA memory size is 64KB) to
display correctly. Prior to this fix, 640x350 4-color only worked
properly if the INT 10h Video Parameter Table was enabled. (joncampbell123).
- Fix S3 VGA memory size reported through register CR36 to cap at 4MB
and set the value correctly. This fixes a known issue where setting
vmemsize to 8MB caused Windows 98 to report memory size as 2.5MB. (joncampbell123).
- Fixed a problem when VZ Editor is resident in PC-98 mode. (nanshiki).
- INT 10: SVGA mode 0x6A does not exist on plain VGA hardware. (joncampbell123).
- INT 10: Fix mode 0x6A (800x600 4-color SVGA) to use a correct dot
clock so that the refresh rate is >= 60Hz instead of 37Hz, and make
sure mode 0x6A is a 100% clone of VESA BIOS MODE 0x102. (joncampbell123).
- Fix MMX/SSE instruction decoding, correct some mistakes in MMX emulation. (joncampbell123).
- IMGMAKE: Add -partofs option to allow control of where the partition
begins in the image (joncampbell123).
- IMGMAKE: Add -align option so that the FAT filesystem can be arranged
for more optimal I/O on devices with larger sectors, such as modern
4096-byte/sector drives. (joncampbell123).
- IMGMAKE: Add -label option so that the generated FAT filesystem has the
specified volume label. (joncampbell123).
- MDA emulation: Fix non-blink attributes 0xF0 and 0xF8 to correctly render
bright green background. (joncampbell123).
- Fixed crash when a CD image was loaded to an "empty" drive (maron2000)
- Log loaded .conf file (maron2000)
- Supress redundant screen reports in log (maron2000)
- Fixed mouse capture locking by middle button (maron2000)
- Fixed toggling the menu option "Autolock mouse" did nothing (maron2000)
- Fixed build failure with libc++ 19 (DimitryAndric)
- Fixed fullscreen mode not responding when launched in TTF mode
in Windows (maron2000)
- Fixed crashes when changing floppies mounted by drive numbers on
a booted guest OS (maron2000)
- Fixed launching host programs with white spaces in path (Windows)
(maron2000)
- Convert paths from relative to absolute when launching host programs
in a mounted drive (Windows) (maron2000)
- Added an option not to pause after host program execution is
completed (maron2000)
- Fixed corrupted display when loading language files at launch
(maron2000)
- Fixed Z Drive path expansion to be case insensitive (maron2000)
v10.01
Améliorations majeures pour la compatibilité logicielle :
Ajout du support de l’extension .inst pour les fichiers CUE (feuilles de route CD).
Correction de la gestion des interruptions (INT 3) pour éviter les plantages de Windows 3.2 (version chinoise) lors du démarrage.
Ajout d’options pour contourner des bugs spécifiques :
Ajustement manuel de l’adresse du linear framebuffer (VESA BIOS) pour des démos comme "Out of Control" (écart de 128 octets).
Émulation améliorée des registres Gravis Ultrasound (alias N/N+0x80 activable via dosbox.conf) pour des démos comme "Out of Control" (1997).
Mode INT 13h pur pour IMGMOUNT (option -o int13) afin de supporter des démos comme DS_BLISS (manipulation de fichiers "apparus par magie").
Corrections critiques :
Plantage évité lors du chargement de fichiers de langue sur Windows avec clavier US.
Correction du BPB (Boot Parameter Block) des images de disquettes générées par IMGMAKE.
Timestamps des étiquettes de volume corrigés après utilisation de la commande LABEL.
Problèmes de chemin relatifs/absolus résolus pour les images VHD différentielles.
Fix des touches mortes (diacritiques) pour l’entrée de caractères accentués.
Améliorations visuelles et UX :
Ajout d’un filtre pour supprimer les caractères invalides dans les noms de captures d’écran générés par le programme en cours.
Correction du mode TTF (TrueType) : bascule automatique vers le mode graphique si la machine est configurée en Hercules.
Interface de configuration :
Thème Windows 3.1 amélioré (détection du mode sombre de l’hôte).
Layout optimisé (scroll vertical, tri alphabétique des propriétés).
Option "Centrer la fenêtre" ajoutée dans le menu Video.
Changelog complet
2024.10.01
- Allow the ".inst" extension for CUE sheets. (Allofich)
- Add SET /FIRST, a DOSBox-X extension, that takes the specified
variable if it exists and moves it to the front of the environment
block. (joncampbell123).
- SET command processing has been cleaned up and streamlined.
Added /ERASE command line switch to clear the environment
block (DOSBox-X extension). (joncampbell123).
- VESA BIOS: Add new option to adjust reported linear framebuffer
address by a specific number of pixels. This is needed by
"Out of Control" by Contract which for whatever reason,
will always draw to the LFB base minus 128 bytes. This option
makes it possible to correct the demo graphics. (joncampbell123).
- Gravis Ultrasound: Officially, registers 0x0-0xF, the voice
control registers, are documented to have a 0x0-0xF write and
0x80-0x8F read alias. Unofficially, according to the behavior
of 1997 demo "Out of Control" by Contract, all GUS registers
have a N and (N+0x80) alias, or at least register 0x4C, and
you can read them back from either index. Or else the demo
fails to detect the GUS. So add this alias, but only if
enabled in dosbox.conf. Real hardware testing is required to
know if the actual GUS behaves this way and which versions.
(joncampbell123).
- Move the INT 3 default vector to well within the initial 16
bytes of the DOS kernel, away from the List of Lists and SFT.
The previous placement caused certain versions of Windows 3.2
(yes, the Chinese version) to crash on startup. (joncampbell123).
- When using the running program to name screenshots and such,
filter out all invalid characters so that Windows users can
take snapshots even if junk characters are there (joncampbell123).
- DOS FAT driver: If INT 13h reports disk change, adapt floppy
disk geometry to new disk image according to media byte. This
allows DS_BLISS to present it's 720K fake floppy even if the
user initially mounted a 1.44MB floppy to drive A: (joncampbell123).
- INT 10 mode list: Add "pitch" parameter. If nonzero, the value
(in pixels) is how to program the pixels per scanline when
setting the mode.
- VESAMOED: Add -pitch option to control the pitch (pixels per
scanline). The intent is to work around DOS games that assume
nonstandard pixels per scanline by allowing the VESA BIOS mode
to use a different one. For example, Line Wars II has an S3
acceleration mode that uses 800x600, but for whatever reason,
assumes the video mode is 1024 pixels per scanline, and will
render garbled graphics if that is not the case. (joncampbell123).
- S3 emulation: Follow S3 Trio64 documentation and mask the Linear
Window Position bits according to the size of the memory. You
can only place it on a multiple of the memory size. This silences
warnings caused by Line Wars II which appears to modify only the
upper byte but not the lower when modifying this register, which
then leaves 0xA0 in the lower half. That lower half would be
ignored for 1MB or larger video memory sizes. (joncampbell123).
- S3 XGA emulation: Add XGA acceleration for 4bpp packed 16-color
SVGA modes. A CAD package has S3 support drivers that use the
16-color 4bpp packed modes and expects XGA acceleration to work.
(joncampbell123).
- Add "-o int13" option to IMGMOUNT to direct the FAT driver to do
all disk I/O through INT 13h instead of directly. This is intended
for certain demoscene productions that apparently like to make
files appear out of thin air by intercepting INT 13h floppy disk
I/O and then asking MS-DOS to run something from it. Hack for
"DS_BLISS" demo. (joncampbell123).
- Fixed crash when a language file is loaded on a Windows host with
US keyboard (maron2000)
- Added Added sharp-bilinear Direct3D shader (RibShark)
- Pass output dimensions to Direct3D shaders (RibShark)
- Fixed BPB of floppy images made by IMGMAKE command (maron2000)
- Fixed timestamp of volume label changed by LABEL command (maron2000)
- Fixed pathname issues when mounting differencial VHD images (maxpat78)
- Corrected relative/absolute track offset in subchannel data for
CD-ROM images (RibShark).
- Fixed particular dead keys were not working to input characters
with diacritics (maron2000).
- Enabled "Edit and Continue" option for debug builds of Visual Studio
Intel builds (aybe).
- Updated libchdr to latest (treloret).
- Fixed icon in Gnome dock bar (FredBezies).
- add option "[dos] automount drive directories" for Windows builds,
this will mount existing drive directories from C to Y drive (aybe).
- fix off-center and off-screen window after entering the
configuration tool while using TTF output mode (aybe).
- add menu item for centering window "Video/Center window" (aybe).
- Fixed update-version-number script to patch all *.iss files, not
just the specific one it did before, to ensure future releases have
correct version numbers. (joncampbell123).
- Updated Nuked-OPL3 code to nukeykt/Nuked-OPL3@cfedb09 (StevenSYS)
- Updated SDL2 library to 2.30.4 (maron2000)
- Fixed TTF mode didn't change to graphic mode when machine = Hercules
(maron2000)
- Configuration tool: (aybe)
- more Windows 3.1 look'n'feel (themes w/ host dark mode detection)
- enhance main window layout, it is now visible in its entirety
- fix layout issues, off by one in rectangle drawing functions
- fix 'list iterators incompatible' when pressing the Tab key
- properties/help: sorted alphabetically, mouse wheel scrollable
- remove few rendundant labels, adjust names of some others
- retain 'show advanced options' state throughout session
- SVN r4483: Fix compilation in Visual Studio 2008 (Allofich)
- DOSBox Staging: Decouple CMS and OPL emulations (Allofich)
v07.01
2024.07.01
- Correct Hercules InColor memory emulation. Read and write planar
behavior was incorrect due to a misunderstanding of available
documentation. (joncampbell123).
- Hercules/MDA and InColor integration broke the Hercules blend mode
render, fix the render so that adjacent lit pixels are brighter
again. (joncampbell123).
- Fix "VRD" debugger command bug that didn't properly render out the
rest of the VGA display frame. (joncampbell123).
- Fixed debugger mapper shortcut bug where entering the debugger
completes the 1 ms "tick" early, effectively jumping emulator time
up to start of the next ms. This might explain the mysterious cases
where a program always fails to work unless you are debugging it.
(joncampbell123).
- Added debugger command "VRT" which resumes running the guest until
vertical retrace. Added for programmers who wish to write something
to screen and then see it show up. (joncampbell123).
- Fix IMGMOUNT, when mounting FAT disk images, to provide the DPB the
actual media id byte instead of assuming 0xF8 or 0xF0. INT AH=1Ch
should now report the proper media id byte for any floppy format,
instead of always reporting 0xF0 (1.44MB floppy). (joncampbell123).
- Allow BOOT to load and execute the boot sector of a guest OS even if
memory size is too small (in IBM PC emulation, less than 32KB of RAM).
MS-DOS 1.x of course will crash if you try that because of the
assumptions made in the boot sector, but it's there if you are feeling
adventurous or are in an experimental mood (joncampbell123).
- If memsize is 4KB, place the COMMAND.COM PSP segment in the private
UMB area instead of the normal MCB allocation chain (joncampbell123).
- DOS kernel will always allocate kernel memory from private UMB area
if memory size < 16KB, in order to continue to work (joncampbell123).
- DOS kernel will allocate from segment 0x60 instead of 0x70 if the
memory size is less than 64KB. (joncampbell123).
- files= and fcbs= default value now automatically scales according to
available conventional memory (640KB or lower) in order for memsize 64KB
or lower to free up or memory and run properly. (joncampbell123).
- dosbox.conf files= and fcbs= settings have been changed to allow
"0" as a value to mean choose a reasonable default. (joncampbell123).
- Fix bug where DOS kernel crashes on startup because of the initial
stack pointer set by BIOS startup that points past available memory
when memsize is 64KB or less. (joncampbell123).
- If minimum mcb free is not set and memory size is less than 256KB,
automatically set minimum mcb free to minimum mcb segment, in order
to release more available memory within the limited space (joncampbell123).
- Do not enable XMS emulation if system memory size is 1MB or less. (joncampbell123)
- DOS drive cache: When listing a directory, defer the filename sort until
the entire list is built. This improves directory listing performance
in directories with many files. (joncampbell123).
- INT 10h, if instructed, will now use the video parameter table to set
standard VGA modes instead of internal logic. (joncampbell123).
- Removed erroneous VGA display compensation code for certain EGA/VGA
registers that really only caused incorrect display of the EGA 640x350
4-color mode. (joncampbell123).
- Corrected EGA and VGA video parameter tables by copying the parameters
from actual IBM EGA VGA ROM BIOS images. They should be 100% correct
now. (joncampbell123).
- Corrected register values and video rendering of machine=EGA 640x350
mode when emulating 64KB of RAM. This should fix rendering and display
issues with EGA 640x350 4-color emulation. Also corrected INT 10h
character printing functions to filter the color attribute value for
640x350 4-color mode so the DOS prompt does not have alternating
colors, in the same manner the real IBM EGA BIOS does. (joncampbell123).
- Fix BIOS screen to use CGA 640x200 2-color mode if machine=ega with
less than 128KB of video ram, or machine=ega200, instead of showing
a garbled 640x350 display. (joncampbell123).
- Fix memory buffer overrun with machine=ega that can occur with
640x350 mode and less than 256KB of video RAM. (joncampbell123).
- The DOSBox clipboard API (via INT 2Fh) is now disabled by default, because
some programs use it's presence to detect whether they are running under
Windows. This fixes a program where Norton Desktop 1.0 does not use it's
"graphical" text UI elements because it thinks it's running within a
Windows DOS box. (joncampbell123).
- Remove unnecessary and useless Win32 fcntl() on some memory typecast
to int which is causing a segfault whenever a ZIP file is mounted
as a drive with an overlay filesystem atop it. (joncampbell123)
- Update caption control feature to use equivalent APIs on Mac OS. (joncampbell123)
- Add dosbox.conf and menu option to control whether the DOSBox-X window
can be seen in screen captures in Windows 7/8/10/11. Windows 11 "Recall"
is very concerning and users might not want their DOS gaming to be
part of it's memory. (joncampbell123).
- Correct EGA switch readback from port 3C2h to reflect a value of 0x8
instead of 0x9 when machine=ega200 (joncampbell123).
- Correct BIOS data area value that holds the "EGA switches" to reflect
200-line EGA "emulation" when machine=ega200. Value 0x08 instead of 0x09
(joncampbell123).
- Correct mode parameters for CGA 640x200 2-color mode when using
machine=ega200 so that it displays correctly. (joncampbell123)
- DOS kernel: Remove fixed hacks for SFT and dynamically allocate the
second SFT table for the last N - 5 file handles. Add code to zero
SFT table memory to ensure that random data doesn't cause issues.
Windows 3.1 is still perfectly fine with it, so the SFT table update
and cleanup is complete. (joncampbell123).
- DOS kernel: Move the magic "CON" strings into the first SFT and
mimic the 5 default open file handles that every DOS process starts
with: CON CON CON AUX PRN. Windows 3.1 is still happy with it, which
is good. (joncampbell123).
- DOS kernel: Put the CON driver somewhere else because allowing it
to overlap the SFT is messy. Fix SFT generation to match the way that
MS-DOS 5.0 does it where the first table is always 5 entries and the
second table is always N - 5 entries. Cleanup the DOS memory allocation
a bit. So far, Windows 3.1 doesn't have a problem with it. (joncampbell123).
- DOS kernel: Interrupt handler IRET was accidentally placed within
the SFT table, move it up to resolve the conflict. (joncampbell123).
- Local DOS drive support: On Windows, if the guest is attempting to
create a hidden file, make sure to call the right APIs to create a
hidden file on the host. Not only is this needed to create a hidden
file, but if the guest tries to create a hidden file and the file
already exists as a hidden file, the file creation needs to succeed.
Fix for "Facts of Life" by Witan because the demo creates a hidden
WITAN.92 every time it is run (joncampbell123).
- XMS: Add dosbox.conf option to XMS driver to switch on flat real mode
when a) the XMS driver initializes and/or b) when the XMS driver is
called on to move/copy memory. (joncampbell123).
- INT 21h: If a DOS program frees a memory block, and then resizes the
freed memory block, reassign ownership of that block to the program
as if allocated. This is apparently canonical MS-DOS behavior. Added
dosbox.conf option to control whether resizing a freed block silently
assigns ownership (default setting) or whether it returns an error.
DOS resize memory function for the most part DID assign ownership but
not in the case where the size of the MCB was exactly the size requested
to resize to. (joncampbell123).
- Sound Blaster: Fix bug where "force autoinit" prevented Sound Blaster
playback from working at all, fix for "Jump" by Public NMI (joncampbell123).
- Debugger UI now shows PIC_FullIndex() and whether or not the CPU is
in the HLT state. Single stepping does not do anything when the CPU is
in the HLT state, so at least let the user know (joncampbell123).
- Keyboard controller (IBM PC): Cancel the IRQ signal upon reading I/O
port 60h. The reason for the IRQ, the pending data, was just read, so
now there is no point in keeping the IRQ signal up. This fixes Escape
key problems with "Cronologia" by Cascada that causes part 3 "Time"
to immediately exit and continue to the credits. Part 1 and 2 are not
affected by the pending IRQ because those parts mask IRQ 1 and poll
the keyboard controller directly. (joncampbell123).
- Fix complexity test code to determine when Odd/Even mode is enabled
in all cases and to resolve a problem with garbled scrolling text
in the "Vectorballs" part of "Unreal" (joncampbell123).
- M_EGA display mode now applies CRTC BYTE/WORD/DWORD shift to display
start address, same as M_VGA, to ensure correct display when demos
and games set the CRTC to non-BYTE modes. This fixes page flipping
flickering during the "Vectorballs" part of "Unreal" by Future Crew.
(joncampbell123).
- Update Configuration GUI to use radio buttons for selection, meaning the
circular buttons that resemble those in Windows, not the check boxes.
The GUI toolkit had them all along, the Configuration GUI was using
check boxes for that for some reason. (joncampbell123).
- Linux ALSA MIDI output: Any attempt to send RESET or other Fx commands
to the ALSA library causes a segfault in the ALSA library. Revise the
code to send without crashing. (joncampbell123).
- Linux ALSA MIDI output: Add code to list and enumerate the MIDI sequencer
devices available so the user can use it to determine what magic numbers
to put into the midiconfig setting, especially if the user wants to send
MIDI to an external synthesizer. (joncampbell123).
- Suddenly Mac OS 14 and XCode consider the "id" and "int" datatypes
different and assigning or returning one to the other is now a compiler
error. Add typecast to enable compile on latest XCode. (joncampbell123)
- INT 33 mouse emulation: Add dosbox.conf options to force a specific
coordinate system for the DOS game with respect to host/guest mouse
cursor integration (getting the DOS cursor to match the host cursor
within the window). Add dosbox.conf option where additional adjustments
are available. The maximum x/y and max-adjust options are ideal for
Lemmings 2, which uses INT 33h in a way that confuses the automatic
range detection code used to synchronize cursor position and therefore
needs this option, and the first Lemmings as well. (joncampbell123).
- PIT timer: Fix restart_counter(), the delay computation was completely
backwards. This is particularly important where it concerns programs
that use the PIT to detect the rate at which the Pentium time stamp
(RDTSC) advances as the previous code caused wildly inaccurate measurements
and bad timing (GRUB bootloader, the Microsoft CD-ROM boot "press a key
to boot from CD" message). (joncampbell123).
- IDE: Make sure to set feature/error register to 0x01 when the guest
soft or hard resets the IDE devices through the controller. The Linux
kernel uses a soft/hard reset on startup to detect PATA devices and
if it does not see the correct value after reset, it will either ignore
the device or complain about diagnostic failure and cautiously talk to
the primary IDE hard drive while ignoring any ATAPI CD-ROM emulation.
This allows the Linux kernel to boot and see the CD-ROM drive. (joncampbell123).
- IDE: Do not clear registers unnecessarily when finishing IDENTIFY DEVICE.
- The BOOT command now supports El Torito "no emulation" booting from a
CD-ROM drive, which is needed to boot install CDs for Windows XP, Linux,
etc. or Linux-based live CDs. Note that at this time, BOOT only supports
"no emulation" and IMGMOUNT only supports "floppy emulation" (joncampbell123).
- INT 13h extensions: If a read was interrupted by an error, update the
block transfer count so the caller knows (joncampbell123).
- DOS: Move version parsing farther up, so that the initial DOS version
can affect memory layout and tables as needed. (joncampbell123)
- DOS DPB and FAT driver: If the DOS version is 4.0 or higher, write a
DOS 4.0+ compatible DPB structure (as DOSBox-X already has been doing
since forking from DOSBox). If the DOS version is lower than 4.0,
write an MS-DOS 3.30 compatible DPB structure. This allows Popful Mail
to run without getting into an infinite loop scanning the DPB linked list
when [dos] section ver=3 30 (MS-DOS 3.30), aside from the fact that the
game will also run without this change if you set ver=4 0 since the game
appears to be aware of the change in structure between MS-DOS 3.30 and
MS-DOS 4.0, though for whatever reason the game refuses to run on
MS-DOS 5.0 or higher. (joncampbell123).
- IDE: Silently ignore SET FEATURES command 0x03. Any negative response
to feature 0x03 causes the Linux kernel to reject the IDE device.
(joncampbell123)
- Add support for PIT timer 0 mode 4. Linux kernel 6.1.29 compiled in
"tickless" mode uses mode 4 instead of mode 0 as a delay timeout. Prior
to this fix, the Linux kernel would switch into tickless mode and then
nothing would happen because IRQ 0 would never fire again. See also Linux
kernel source code, drivers/clocksource/i8253.c function pit_set_oneshot()
to see what I mean. (joncampbell123)
- Windows 95 S3 driver behavior suggests that S3 16-color VESA modes
0x202 to 0x208 are NOT planar modes, but packed modes. Change modes to
M_PACKED4 and update modelist building to allow that range even if the
dosbox.conf is configured not to list 4bpp packed VESA modes. This fixes
Windows 95 S3 driver 16-color modes 800x600, 1024x768, 1280x1024.
Noted: Windows 95 is the last version of Windows to support 4bpp packed.
Windows 98 and higher refuses to support it and the Display settings
will not allow you to select any 16-color mode other than the stock
VGA 640x480 16-color planar mode. (joncampbell123)
- Add --load-seg option to BOOT in case any PC-98 game boot floppy expects
to be loaded somewhere other than the default. PC-98 game "Private School
Adventure" will crash if loaded to segment 0x1FC0 but runs fine if booted
with --load-seg 0x0FC0 instead. (joncampbell123)
- Add dosbox.conf option to direct the EMS page frame segment, in a limited
fashion, though only effective for PC-98 mode. PC-98 segment is still
0xD000 by default, but apparently there are games that require the EMS
page frame to exist at 0xC000. For these games, you can now set under the
[dos] section "ems frame=C000". (joncampbell123)
- Restored libslirp support for 32-bit MinGW CI builds which was temporarily
dropped in 2024.03.01 release. Also since MinGW plans to gradually phase
out 32-bit support, added code to manually build on our own. (maron2000)
- Fixed build errors of Windows installers. Windows Vista support for standard
installer is dropped to fix this issue. Vista users can either use the XP
installer or portable builds instead. (maron2000)
- Fixed compile error of speexdsp/fftwrap.c on gcc-14 (maron2000)
- PC-98: Fixed US keyboard support for tilde (Shift+grave) key (maron2000)
- Fixed DOSBox-X freezed when codepages regarding EGA18.CPX were set (maron2000)
- Fixed CUE sheets of GOG games were rejected. Still requires "-t iso" or
"-t cdrom" option for uncommon file extensions except ".CUE". (maron2000)
- Added loongarch64 support (donmor)
- Disable FP exceptions in a portable way (xry111, donmor)
- Added "*.ccd" in file open dialog (maron2000)
- Added CI builds for ARM mac (maron2000)
- Bump tinyfiledialogs to ver 3.17.4 (maron2000)
- Obtain geometry info of non-standard sized floppy from BPB (maron2000)
- PC-98: Implemented int 18h ah=47h,48h,49h (nanshiki)
- Added breakpoint type "Freeze memory" (Enmet)
- Implemented seeking in MSCDEX
(Imported from dosbox-staging/dosbox-staging#3516 authored by weirddan455)
- Fixed built-in COPY command failed to obtain free space when reported DOS
version is set to 7.1 (maron2000)
- Fixed some file extensions in the filter list were ignored in the file open
dialogs (maron2000)
- Fixed mounting a non-FAT VHD image (maxpat78)
- Fixed VHD geometry detection (maxpat78)
- Fixed issue that IMGSWAP command did not work for CD drives. (maron2000)
- Fixed loaded language file unexpectedly changes on launch. (maron2000)
- Fixed reported size issues in builtin DIR command (maxpat78)
- Added missing language file in Windows standard & XP installers. (maron2000)
- Fixed a bug in IME character display on macOS Sonoma (nanshiki)
- Fixed build errors of SDL1 code when built with gcc-14 (maron2000)
- Fixed static link errors of libslirp >= 4.8.0 (maron2000)
- PC-98: Added MEM command for PC-98 mode (maron2000)
v03.01
- If an empty CD-ROM drive is attached to IDE emulation, return "Medium Not
Present" instead of a read error, when asked to read. (joncampbell123).
- Add "empty drive" CD-ROM image type "IMGMOUNT e: empty -t iso" as a way
to emulate an empty CD-ROM drive with no disc in the drive. (joncampbell123).
- Add "empty drive" floppy image type "IMGMOUNT 0 empty -t floppy -fs none"
as a way to emulate a floppy drive with no disk in the drive. (joncampbell123).
- Video debug overlay: Fix mouse integration misalignment when the video
debug overlay is enabled while Windows is running (joncampbell123).
- Video debug overlay: Fix segfault when enabled with 15/16bpp SVGA modes.
(joncampbell123).
- Video debug overlay: Fix bug where video debug failed to appear in SVGA
15/16/24/32bpp display modes because of a design where the VGA drawing
code points directly at video RAM except when drawing the hardware cursor.
One symptom was that the video debug info on the side failed to appear at
all, unless running in Windows and only within the vertical range of the
mouse cursor. (joncampbell123).
- Video debug overlay: Do not bother showing the Attribute Controller palette
in 15/16/24/32bpp SVGA modes because it doesn't matter there and is not
involved with how anything is displayed. (joncampbell123).
- Video debug overlay: Fix debug info text to appear for 15/16/24/32bpp SVGA
modes. (joncampbell123).
- BOOT --bios no longer triggers a system reset VM event, but instead just
jumps to the new BIOS image after DOS kernel shutdown. This is needed for
hardware and resources to stay as they were when running the BIOS i.e.
keeping any IDE devices configured within the DOS kernel intact so that the
BIOS can find and use them. Prior to this change, all hardware was fully
reset and unmapped prior to running the BIOS which made IDE emulation
unusable with BIOS images. (joncampbell123).
- BOOT --bios no longer immediately loads the new BIOS into memory, but instead
loads and stores the image to a temporary buffer. The ROM image does not
actually get mapped in until the DOS kernel and everything else has had a
chance to shut down fully. (joncampbell123).
- Fix BOOT --bios not to try to load PC-98 ITF firmware unless actually running
in PC-98 mode (joncampbell123).
- Write PC-98 keyboard translation table (non-shifted) in ROM BIOS and set the
keyboard translation table pointer in the BIOS data area for "Nut Berry".
This Nut Berry game also assumes lookup and translation tables exist at
specific locations in the ROM BIOS, so put those tables there. The shift
state table in BIOS has also been added, though at the moment, the tables
are incomplete. (joncampbell123).
- MegaZeux from the MS-DOS days had a 256-color tweakmode that worked on some
popular SVGA chipsets of it's time though on others it does nothing but halve
the display resolution of text mode. The basic idea is that it makes the VGA
card latch two 4-bit outputs of the VGA text mode into one 8-bit value, thus,
256 colors possible. Add support for this. However I am not sure whether this
tweakmode is supported by S3 chipsets, so it is OFF by default and you will
need to add "enable supermegazeux tweakmode=true" to the [video] section of
your dosbox.conf to enable it. (joncampbell123).
- Undo the "no partition offset" change. DOOM II for PC-9821 requires it to work
else the page flipping fails and sprites and rendering flickers as you play.
(joncampbell123).
- Allow text layer to appear in PC-98 256-color mode. Even though I was unable
to enable it on real hardware, "Shamat, The Holy Circlet" requires having
the text layer visible on top of 640x400 256-color mode for the introductory
scrolling text to appear on screen. So for now, just allow it. (joncampbell123).
- The reason some PC-9821 games have been giving bad PITCH values (double the
correct value) to the GDC in 256-color mode has been determined. They read
port 9A0h to determine if the GDC is running at 5MHz or not. That port 9A0h
index was not implemented and therefore gave the game the impression it was
running at 5MHz when it was not, therefore the doubled PITCH value. This fix
corrects the squeezed 256-color mode and allows it to appear properly.
(joncampbell123).
- IMGMOUNT: If the file extension is HDI, assume a hard disk image even if the
image file is small enough to qualify as a floppy disk image. There is an
HDI image of PC-98 game "D.O. Doki Doki Disk 8" that is 2.2MB, small enough
to be mistaken as a 2.88MB IBM PC floppy disk and therefore fail to mount
as an HDI image, this change fixes it. (joncampbell123, maron2000).
- Emulate PEGC PC-98 linear framebuffer at both 0xF00000-0xF7FFFF (at 15MB
memory mark) but also make it appear at top of memory below BIOS (normally
at 0xFFF00000-0xFFF7FFFF). Some 32-bit PC-9821 CD-ROM MS-DOS games assume
the top of memory alias and will fail to show anything on screen without
it (unless, alternatively, the memalias setting is set to emulate 24 address
lines like a 386SX). Now to figure out why these same games are programming
a GDC PITCH value that's double what it should be... (joncampbell123).
- PC-98 GDC scan offset no longer pays attention to scan offset of data
partition in 256-color mode. Required to help fix broken 256-color graphics
for some PC-98 CD-ROM games. (joncampbell123).
- Refuse to enable ISA 15MB-16MB memory hole if memalias is set to 24 bits or
less. Not only is it redundant to do that but it also causes the BIOS to
immediately crash on startup. (joncampbell123).
- IDE ATAPI CD-ROM emulation: In PC-98 mode when emulating a NEC CD-ROM drive,
also limit sector reads to one CD-ROM sector per DRQ because the MS-DOS driver
assumes that behavior. The driver will stall and error out if it requests a
multi-sector read and the drive does NOT limit transfers to one sector at a
time per IDE data transfer. This is in line with my experience writing the
DOSLIB IDE testing program and laptops from the 1990s with IDE ATAPI CD-ROM
drives, so it's understandable. (joncampbell123).
- The reason the CD-ROM driver in PC-98 game HDI images refused to talk to our
IDE CD-ROM emulation is... (drumroll) we didn't report ourself as an NEC
CD-ROM drive when given the MMC INQUIRY command. Yes, really. The OAK CD-ROM
driver in these HDI images really does care whether or the drive is an NEC
brand drive. What a stupid reason not to talk to a CD-ROM drive. Add code to
default to "NEC" "CD-ROM DRIVE" as the INQUIRY result if running in PC-98 mode.
(joncampbell123).
- Add basic rudimentary support for CloneCD (*.ccd *.img) images. It might not
work with more complex arrangements but it is enough for most CD-ROM PC-98
games so far. (joncampbell123).
- libpng supports the pHYs PNG chunk which describes the pixel aspect ratio of
the PNG image. libpng 1.6 has it, use it. Programs that support the information
like FFMPEG will then display the PNG image with the correct aspect ratio.
(joncampbell123). [https://github.com/joncampbell123/dosbox-x/issues/4754]
- PC-98 mode: There is a 302KHz timer behind I/O ports 5Ch/5Eh that some MS-DOS
drivers depend on for timing, particularly a popular IDE CD-ROM device driver
in many PC-98 game HDI images. This change allows the driver to time out after
about 5-10 seconds instead of an infinite hang. (joncampbell123)
- Fix INT 10h to keep hardware CRTC I/O port synchronized with BIOS DATA area
copy so that other parts of INT 10h called by SetVideoMode do not accidentally
talk to the wrong I/O ports. This fixes corrupted INT 10 Mode F display
(640x350 monochrome graphics mode). (joncampbell123).
- Add DOS Int21 0x5D 0x00 - remote server call
Inspired by FeeDOS inthndlr.c
With this change it is possible use a plain dosbox-x to install and run
Windows for Workgroups V3.11 as an IPX server on the pcap ne2000 interface
offering a host directory for read and persistent write access to an
MSDOS machine running a WfW 3.11 IPX network client.
Please don't forget mounting with -nocachedir
(Issue #4162)(Yogi-baer)
- Fix missing keystroke SDLK_LESS on DE keyboard on Raspbian OS (Yogi-baer)
- Fix crash when loading a language file without existing menu item "ttf_extcharset" (Yogi-baer)
- Change ISA memory hole 512kb option from boolean to true/false/auto. (joncampbell123)
- Add ISA memory hole 15mb option, make it true/false/auto.
Auto means off for IBM compatible mode and on for PC-9821 compatible mode.
This should allow some DOS games that depend on the linear framebuffer
to work properly even if memsize=16 or higher. (joncampbell123)
- MIDI: set minimum sysex delay when enabled (mistydemeo)
- International support in LABEL, COPY, DEL builtin commands (maxpat)
- Fix palette setting bugs due to SETCOLOR fix in 2023.10.06 release. (maron2000)
Graphical glitches in Ultima VI(#4507), Chessmaster 3000(#4510), Wizardry VII(#4534)
Crash Sid Meyer's Civilization I (#4511)
TTF color settings regarding 'colors' option (#4579, #3318) and some more
- Fix crash when mounting floppy/ISO images with no extension (maron2000)
- Fix Intel macOS CI builds crashed on startup due to missing dylibs
(Issue #4438)(maron2000)
- Fix TTF mode didn't switch to graphics mode on certain types of machines
such as tandy/pcjr.(Issue #4559)(maron2000)
- Fix crash on switching to fullscreen when output=opengl (Intel macOS) (maron2000)
- Update DXCapture shell command to support /O for OPL capture (AranVink)
- Fix floppy images lock bug (maxpat78)
- Fix type of return value at bool MountFat() (jg1uaa)
- Fix VHD geometry bugs by performing MBR analysis (maxpat78)
- Change maximum number of joystick buttons allowed by the mapper (mattcaron)
- Enable Win9x support on a Pentium3 PC (crazii)
- Add PC98 image extensions in file open dialogs (maron2000)
- Fix input in configuration tool (SDL2) (maron2000)
- Reduce warnings by replacing sOffset (use offsetof) (jg1uaa)
- Fix LFN functions (nanshiki, SmileTheory)
Fixed a bug in which 2 extra bytes were copied to the buffer (ax=714eh,714fh).
Fixed wrong value of date/time etc. in file information (ax=714eh,714fh,71a6h).
Fixed date/time conversion to be correct (ax=71a7h)
Report correct file size on win32 when file is open (ax=71a6h).
- Fix C++11 uncompliant codes (midi_alsa.h, gamelink.cpp) (maron2000)
- Consider function key display in MORE command (PC-98) (maron2000)
- Add support for J-3100 video mode 75h (nanshiki)
- Reflect drawing status bit of GDC status I/O port (PC-98) (nanshiki)
- Re-enable top line dimming when focus is lost in fullscreen (TTF mode) (maron2000)
- Fix PC98 mouse counter value range to unsigned value (0-255) (nanshiki)
- Added function for int DCh cl=10h ah=0Ah to 0Eh (nanshiki)
- Added escape sequences (ESC[0J ESC[1J ESC[0K ESC[1K ESC[2K ESC[nL) (nanshiki)
- Fixed behavior of Kanji character output at the right edge of screen (nanshiki)
- Fixed Media ID was being written to an incorrect location in DPB (nanshiki)
- Refined version info (maron2000)
- Added PC-98 NEC mouse functions in INT33h (nanshiki)
- Bump Nuked-OPL3 code to commit 730f8c2 (13 Nov. 2023) (maron2000)
- Enabled OPL pass-through code (oplmode=hardware)(dbjh)
- Fixed crash on startup due to SDLnet library linked externally (macOS) (maron2000)
- Changed PC-98 floppy boot behavior when Drive 2 is mounted before Drive 1(maron2000)
- Added Human68k ver.1.0&2.0 floppy disk support (maron2000)
- Fixed attribute copy behavior of FreeDOS XCOPY.exe to match genuine DOS (maron2000)
- Added Russian translation (Lartenik)
- Fixed COPY/XCOPY command fails to recognize 2GB+ free disk space (maron2000)
- Enable FONTX2 files in PC-98 mode (nanshiki)
- Fix codepage switching when loading lang files (maron2000)
- Add missing quotation marks in vcxproj (bredbored)
- Fixed BPB detection of PC-98 floppies (maron2000)
- Changed sequence to boot with drive numbers when booting from image (maron2000)
- Added force JIS (JP106) keyboard layout option in PC-98 mode (maron2000)
- PC-98: Enable mounting partitions with non-genuine IPL entry names (maron2000)
- Added support for XDF disk format (maron2000)
- Added ESFM emulation (ESFMu v1.2 core) (Kagamiin)
- Added support for ESS "ESFM" sound synthesis (oplemu=esfmu, oplmode=esfm) (Kagamiin)
- Added experimental/WIP support for the ESS ES1688 sblaster type (sbtype=ess1688) (Kagamiin)
- Delete obsolete information regarding "INTRO SPECIAL" option (maron2000)
v10.06
2023.10.06
- Add "VRD" debugger command to force redraw of the VGA screen.
- Add VGA debug set commands to force a video start address and another
to clear all debug settings.
- Add "PITSYNC" option to VFRCRATE command. "VFRCRATE PITSYNC ON"
directs the system timer interrupt to synchronize tick rate with
vertical refresh rate of VGA emulation if the game or demo set
the timer tick rate to a value close enough to vertical refresh.
This is intended for games or demos that use the system timer for
a vsync interrupt.
- IMGMAKE: Fix bug where if -bat was specified, the generated .bat
file would attempt to mount the .bat file, not the disk image.
- IMGMAKE: If -nofs and -bat was specified, the generated .bat file
will refer to "IMGMAKE 2" instead of "IMGMAKE C"
- DOS FAT driver: When the guest sends in a new BIOS Parameter Block,
recalculate the disk locations and FAT type properly instead of
assuming that FORMAT.COM is using the same format already present.
- DOS FAT driver: If the partition is unformatted and looks as if
freshly written by FDISK, then instead of failing to mount, mount
the partition instead as an unformatted partition and fail file
I/O until a BPB is set and the partition formatted by FORMAT.COM.
This matches MS-DOS behavior and it makes it possible to mount an
image, FDISK it, restart, FORMAT.COM the unformatted partition,
and end up with a working drive letter (just like MS-DOS). So far
verified against MS-DOS 6.22 and Windows 98 versions of FDISK,
FORMAT, SYS, and SCANDISK.
- DOS FAT driver: Add options -o sectoff and -o sectlen to make it
possible to manually specify the start and length of a partition.
Future code will use this internally as well.
- IMGMOUNT: Allow *: as a drive letter to mean automatically pick a
drive letter.
- Fix debugger to use toupper(), but only for ASCII range ncurses
keycodes.
- Timer PIT: If the guest writes the counter value while the counter
gate is off, make sure the counter read back is the same value
written regardless of gate status. Prior code returned the stale
latched value of the counter as it was prior to shutting off the
gate and writing the counter, causing timing issues.
- Fix restoring minimized window on TTF output (Issue #4248) (maron2000)
- Fix macos crash on launch when output=surface or auto (SDL2) (maron2000)
- Update in-tree SDL2 library to ver 2.28.2 (maron2000)
- Updated build tool for MinGW lowend builds required for the updated SDL2
library. As a result, MinGW lowend builds are now able to enable debugger
features. (maron2000)
- Debugger RUN and RUNWATCH commands were broken, fix. Make sure debugger
shortcut triggers execution to stop whether in RUN or RUNWATCH mode.
- Fix SETCOLORS command didn't change color when output=ttf.(Issue #4503)
Also fixed the values reported were wrong. (maron2000)
- BIOS CMOS date/time functions will now idle the CPU 4 times after reading
or setting the clock to allow interrupts, CPU time, and RTC clock ticks
to proceed normally. This fixes "Pizza Tycoon" and allows it to continue
past the initial logo. (joncampbell123)
- Fix segfault when mounting hard disk images with no file extension
(joncampbell123).
v09.01
2023.09.01
- Disable by default message confirmation after snapshot and AVI video
capture, but leave the option there for those who want to enable it (joncampbell123).
- Remove "LOG: Logging output has been disabled." output when -nolog
is specified on the command line (joncampbell123).
- Fix stuck Ins key problems by fixing a typo in src/ints/bios_keyboard.cpp.
The code is supposed to clear the "Ins key down" flag, but instead cleared
all bits EXCEPT "Ins key down" (joncampbell123).
- NE2000 macaddr default is now "random", which instructs the NE2000
hardware at startup to pick a random MAC address. (joncampbell123).
- IPX: If NE2000 and IPX are enabled, and an IPX tunneling connection is
active, and the user boots a guest OS, switch on a mode where all IPX
packets going to and coming from the guest are re-routed through the
IPX tunnel instead of to the NE2000 ethernet backend. This feature
makes it possible to play IPX-based games in a guest OS like MS-DOS
and Windows 95. (joncampbell123).
- IPX: Add extension to server to allow clients to register their own
MAC address instead of using the default MAC address given by their
IP address and port number. The extension is designed so that if DOSBox-X
is a client to another DOSBox fork's IPX tunneling server, it will
be ignored and DOSBox-X will get the usual MAC address instead. This
extension is required for guest OSes to be able to use the IPX protocol
through the NE2000 card given upcoming code changes as they normally
use the network card MAC address when picking an IPX address because
the IPX interface is not available once booted into a guest OS. (joncampbell123).
- IPX client: If both IPX and NE2000 emulation are enabled, IPX emulation
will use the NE2000 card's MAC address instead. It will use the IPX
server DOSBox-X extension to try. If it doesn't work, then the normal
MAC address assignment is accepted without complaint. (joncampbell123).
- NE2000: Add "nothing" backend. It receives nothing and send packets go
nowhere. If no other backend is available, this backend is a fallback
so that at least the NE2000 emulation can work. The other purpose of
a nothing callback is to give NE2000 something to talk to for those
who wish to use the upcoming IPX packet redirection to link DOS and
Windows games over the IPX client or server connection to other
instances of DOSBox. (joncampbell123)
- Added record function to capture NE2000 network traffic to a
pcap/Wireshark file in the capture directory. (joncampbell123)
- Fixed bug where guest VM reset causes the CMOS to stop ticking for
exactly the amount of time it was running before reset. (joncampbell123)
- Added alarm interrupt function to RTC CMOS emulation (joncampbell123)
- Reverted DOS to using the BIOS_DATA tick count for time and the cached
copy of date it keeps internally, rather than always calling INT 1Ah.
It turns out that is how DOS actually behaves, which is also why it is
possible for the DOS and CMOS RTC to diverge. Fix CMOS emulation to
allow get/set time and to run in emulation time, not real time, though
the clock starts from the host time. (joncampbell123)
- Fixed VHD disk image calculation of footer position and, thus, of newly
allocated block position. (maxpat78)
- Enhanced Dynamic and Differencing VHD support #4273 (maxpat78)
- Imported IBM Music Feature Card support from DOSBox Staging. (Allofich)
- Fix IMGMAKE large size image error on MinGW builds (maron2000)
- Set usescancodes=true when non-US keyboards are detected. (Linux / MacOS
builds) (maron2000)
- Fix day of week detection (INT 21h function 0x2Ah). (maron2000)
- Refine KEYB and CHCP command (maron2000)
- Use segment descriptor's big flag (if present) when disassembling code in
the debugger code view (cimarronm)
- Add decoding of rdmsr/wrmsr instructions to disassembler (cimarronm)
- Fix disassembly for far jmp/call decoding (cimarronm)
- Fix memory limits on expand-down segment descriptors (cimarronm)
- Bump tinyfiledialog to ver 3.13.3 (maron2000)
- Fix mouse column limit on text mode (issue #4353) (maron2000)
- Fix Blocek launching failure (issue #4385) (maron2000)
- Bump in-tree FreeType library to ver 2.13.1 (maron2000)
- Enable debugger function for MinGW builds (maron2000)
v05.01
2023.05.01
- IMGMAKE will choose LBA partition types for 2GB or larger disk
images, but the user can also use -chs and -lba options to override
that choice. The CHS or LBA partition types do matter because it
affects which version of INT 13h is used by Windows 98/ME to boot up
and, if drive C: is in compatibility mode, at all times. (joncampbell123)
- PC-98 256-color mode will also trigger the auto mode of "render on
demand" for performance reasons because per-scanline raster effects
are very unlikely in that case, as will MDA and Hercules machine
types. (joncampbell123)
- When the DOS IDLE API is enabled (by default), limit STI+HLT to
occur on INT 28h only once after any call to read the CON device
or call to BIOS INT 16h to read the keyboard. This fixes stalls
and sluggish input problems with programs that like to call INT 28h
often like the Pacific C compiler PPD IDE interface. (joncampbell123).
- Hercules InColor machine type: Fixed attribute and RAMFONT handling
of 48K RAMFONT mode and added planar text rendering. (joncampbell123).
- Write BIOS data area fields for number of rows, char height, etc.
for MCGA machine type in addition to EGA/VGA machine types because
IBM technical references suggest it's there for MCGA as well.
This also resolves an issue where with the MCGA machine type, INT 10h
failed to print any text to screen whatsoever. (joncampbell123).
- Render on demand (Staging calls it "lazy rendering") now defaults
to "auto" and allows an "auto" setting. The auto setting will
turn it off for standard VGA modes and will turn it on for SVGA
modes where per scanline raster effects are very unlikely to
occur. This may provide a performance boost for DOS games in SVGA
modes and the Windows desktop (joncampbell123).
- CGA 320x200 4-color mode is now rendered using the M_EGA render
code for EGA/VGA machine types to better reflect real hardware.
(joncampbell123).
- Fix bug where setting doublescan=false for anything other than
the VGA machine type would break CGA graphics modes.
(joncampbell123).
- Fix video debug overlay calculations of source video mode for
CGA graphics modes. (joncampbell123).
- CGA 640x200 2-color mode and MCGA 640x480 2-color mode are no
longer rendered as M_CGA2 for EGA/VGA machine types. The reason
is that at the hardware level they are really just IBM standard
tweaked versions of the EGA/VGA 16-color modes with additional
bits for the interleave emulation and can be properly emulated
with the M_EGA renderer. M_CGA2 is still used for the CGA and
MCGA machine types for those modes. The DCGA DOS/V mode has been
carefully made into it's own render mode instead of part of the
M_CGA2 case. (joncampbell123).
- Fixed refcount -1 error and abort when multiple floppies are
attached to a floppy drive and the "Swap floppy" mapper shortcut
is used at least once (joncampbell123).
- Hercules palette selection now provides a "dark gray" color
mapping to match the green, amber, or gray palette selection of
the user (joncampbell123)
- Fix Hercules vs MDA attribute handling of "dark gray" background
color when hardware blink is disabled. (joncampbell123)
- Added RAMFONT emulation to Hercules Plus machine type, fixed code
to allow Hercules Plus text mode to draw farther than the first 4KB
of RAM if RAMFONT enabled. (joncampbell123)
- DOS kernel: Fix programming mistake that allocated perhaps a bit
too much DOS kernel memory for the "List of Lists" info block.
Fix the sizes of the info block and other structures to make sure
specific kernel structures are placed at fixed addresses because
later Microsoft software for MS-DOS checks those values.
(joncampbell123)
- Serial port: Add multiplier: setting as requested to enable
faster than 115200 baud rates. (joncampbell123)
- Fix mistakes in CPUID emulation that threw a #UD exception for
specific cases where EAX was not recognized by particular CPU
types. (joncampbell123)
- Fix RTC clock emulation to correctly signal IRQ8 interrupt for
both periodic tick and update-ended events. Prior to this fix,
only periodic tick events were reported even if the bit was set
to enable update-ended. (joncampbell123)
- Fix serial and AUX PS/2 mouse emulation to not send relative
motion unless mouse captured, to make it consistent with the
BIOS PS/2 mouse emulation (joncampbell123)
- FAT driver: Major performance boost is possible by eliminating
unnecessary code that re-reads the entire directory when looking
up or changing one particular directory entry. (joncampbell123).
- CMOS registers: Fix code to allow getting and setting time,
fix year vs century registers to work properly. (joncampbell123).
- BIOS INT 1Ah: Fix functions to get and set time and date
instead of faking on read and ignoring set. Use the CMOS
registers. (joncampbell123).
- DOS INT 21h: Fix date and time functions to call the BIOS for
time instead of trying to fake it only at the DOS level. This
includes allowing INT 21h to change the date/time using the
BIOS. (joncampbell123).
- DOS shell: Make TIME actually use INT 21h to set time instead of
directly modifying the BIOS timer tick count in the BDA.
(joncampbell123).
- Increased PIC event queue size, there are corner cases especially
with Windows XP that can occasionally overrun the queue.
(joncampbell123).
- Updated IBM PC keyboard emulation to correctly encode Pause and
Print Screen key scan codes when shift, alt, and ctrl are held
down. This makes it possible to type "Alt+SysRq" for programs
that expect it, including SoftICE. (joncampbell123).
- NE2000 emulation: Looking at recent Bochs source code, ne2k.cc
appears to have downgraded the "IMR write, reserved bit set"
message from BX_PANIC to BX_ERROR. Update the same in DOSBox-X
so that Windows 2000 no longer crashes the emulator with E_Exit()
when probing the NE2000 hardware. (joncampbell123).
- INT 33h mouse services: Add "Get General Driver Information"
function for Microsoft Word 5.5 (joncampbell123).
- INT 33h mouse services: Render cursorType == 2 (graphics cursor)
as if text cursorType == 0 if the current mode is text mode.
Microsoft Word 5.5 always calls functions to set text AND graphics
cursor regardless of whether the actual mode is graphics or not.
This fix allows the cursor to show correctly as the block cursor
it wanted in text mode instead of a moving hardware blinking cursor.
(joncampbell123).
- Fixed S3 XGA emulation bitmap rendering to correctly handle
8/16/32-bit pixel transfer I/O and update comments to reflect
the 32-bit byte aligned transfer mode of the Trio chipset.
This fixes incorrectly drawn radio buttons and 16x16 icons
in Windows NT 3.5, Windows NT 3.51, Windows NT 4.0, and
Windows 2000. (joncampbell123).
- Fixed keyboard emulation so that upon the keyboard reset command
FFh, the keyboard does the reset process and THEN sends back
bytes 0xAA (power on/reset OK) and 0x00 (interface self-test).
This resolves the issue where Windows NT 3.1 pauses at startup and
does not resume booting until you press a key on the keyboard.
This also resolves the issue where Windows NT 3.5 keyboard and
mouse input stops working completely if you press a key on the
keyboard. (joncampbell123).
- Add Hercules InColor emulation of MDA vs CGA attribute select,
and make sure it obeys the blink setting (joncampbell123)
- Change Hercules/MDA text output to render 9 pixels per char
if the char9 setting is on, to match the 9x14 character cell
that those cards emit to the screen. The user can always turn
it back off to get the 8x14 text they're probably accustomed
to in other DOSBox forks. (joncampbell123)
- Render output fixed to never double pixels vertically on render
if the machine type is emulating VGA and the Doublescan option
is enabled, in order to help resolve SVGA text mode issues
reported by ThomasKjoernes (joncampbell123)
- Add InColor CRTC registers and add code to emulate the planar
bitplane operations. Microsoft Flight Simulator 3.0 renders
correctly now. (joncampbell123)
- Update Hercules InColor code to render the same 64-color EGA
palette as machine=ega. (joncampbell123)
- Correct machine=hercules text rendering flaw that prevented
the bright attribute (bit 3/7) from working, making all text
output the same normal brightness. (joncampbell123)
- Add expected data structures and signatures to VGA ROM BIOS at
C000:0000 if machine type selects ATI emulation (joncampbell123).
- Add ATI machine types, which at this time, is just a placeholder
for development to go in that direction over time for those
machine types. (joncampbell123)
- Added "machine=hercules_plus" and "machine=hercules_incolor" as
stubs to be developed on going forward to emulate the HGC+ and
InColor cards. Note that InColor will require the MCH_HERC case
to generate 64-color EGA-like output going forward even if the
documented stratup state still emulates the MDA-like monochrome
attributes. (joncampbell123)
- SDL2: Stop checking for compiler flags that make it an error to
declare variables after statements in a function or any other
terrible sins that would offend old C89 standard compilers.
DOSBox-X is never going to compile for a C standard that old.
Furthermore this check is preventing compilation on ARM-based
Macbooks for some reason, though not Intel based Macbooks.
v03.31
2023.03.31
- "mount -t overlay" will now print a message on the console to
let you know if the act of mounting the overlay replaced a
previous overlay mount. Overlay mounts cannot be stacked in
DOSBox-X (and probably most DOSBox forks that support overlays)
and the user should understand that. (joncampbell123).
- Remove kludges from DOS path resolution to handle drive paths
that refer to drive @ (at sign). Note that in ASCII the at sign
is one code below capital "A". Windows 95 FORMAT.COM due to
another issue was asking for "@:\WINBOOT.SYS" and sometimes
causing a segfault in DOS path resolution due to an uninitialized
drive index. The fix for the other issue removes the need for this
kludge. In it's place a message will be logged to your log file if
anything attempts to access files on drive "@:" because it likely
means a failure to determine the drive index properly. (joncampbell123).
- In addition to reporting the "boot drive" via INT 21h AX=3305h, also
write boot drive in the "List of Lists" structure. Windows 95
FORMAT.COM reads the boot drive from the LoL and does not do any
error checking if that value is out of range (such as if it was
never set and the byte value is zero). Failure to set this field
will result in FORMAT.COM attempting to access "@:\WINBOOT.SYS"
and "@:\IO.SYS" and failing. (joncampbell123).
- Add dosbox.conf option to set a fixed RTDSC tick rate to use at
all times during emulation instead of the CPU cycle count
(joncampbell123).
- Fix RDTSC to maintain a monotonic increasing count even if the
CPU cycles count changes, and better handle timestamp writes
through WRMSR (joncampbell123).
- FAT filesystem driver: Instead of searching from cluster 0 every
time a new cluster is to be allocated, keep track of the search
to help reduce slowdowns on fairly large filesystems when many
files are copied onto it (joncampbell123)
- Page Up/Down vs Roll Down/Up was in the wrong order, switch order
to correct it. (joncampbell123)
- Fix 'pc98 force ibm keyboard layout' was always forced to be 'true'
for left & right bracket keys on US keyboards. (maron2000)
- Fix dynamic_nodhfpu FPU stack bugs, the same bugs that once plagued
dynrec. dynamic_x86 never seemed to have the same problem because
in reality the DH FPU case was normally used, to hit this bug you
had to use core=dynamic_nodhfpu. Also fix dynamic x86 DH FPU code
never to restore from DH case if the DH FPU code was never enabled,
which periodically caused FPU state to dissapear. (joncampbell123).
- Add dosbox.conf option to control the MSCDEX.EXE device name when
emulating a CD-ROM drive (joncampbell123).
- Wengier coded this nice text-only DOSBox-X logo for the TTF output.
Fix border alignment issues and make the text logo the default and
only option for MDA and Hercules machine types at boot.
(joncampbell123).
- Add -print-ticks command line option, which enables code to print
both SDL_GetTicks() and emulator time once a second to the console
and the log file. This may help in tracking down bugs related to
long term laptop suspend or suspension of the process in general.
(joncampbell123).
- PC-98: Ignore INT 18h AH=0Ch (enable text layer) in 256-color mode.
Real hardware doesn't seem to let you turn on the text layer in
256-color mode, though I am not certain if this is a restriction
imposed by the BIOS or by the hardware. This fixes possible cases
where Sim City 2000 in 256-color mode reveals garbage text data at
the bottom of the screen if it is there when it starts. This doesn't
fix the issue where Sim City 2000 cannot set 640x480 256-color mode
properly unless your display is already set to 31Khz hsync because that
is evidently a bug in the game, not DOSBox-X. (joncampbell123).
- PC-98 256-color mode: Fix "Active Display Words" value set by INT 18h
to 40, not 80, for graphics layer. This has no apparent effect on
games but it does fix the sometimes erroneous graphics layer width
in the video debug display. Neko Project II source code seems to
indicate the 31KHz hsync mode is programmed that way even if 256-color
mode. This should not break anything since the GDC doesn't let you
read back the "SYNC" reset parameters anyway--this isn't VGA hardware,
after all. (joncampbell123).
- IPX emulation was broken because it set up the virtual file, IRQ
and interrupt handler way too early, which the BIOS startup would
then overwrite with the default BIOS IRQ handler. IPX emulation
should work now, at least multiplayer DOOM. (joncampbell123)
- Added debug menu and dosbox.conf option to show debug information
at the bottom of the screen when enabled. This debug information
reflects the video state at the start of active display. It can be
used to see in real time the state of the palette, display offset,
display stride, and other useful information. It is rendered into
the frame on purpose so that it appears as part of the picture
when you take a screenshot or record a video to AVI or MTS for
later review. (joncampbell123)
- Dynamic core: Fix serious bug in dynrec dynamic core where calls
to handle x86 FPU instructions erronously passed the entire
FPU status word instead of passing only the FPU stack pointer.
The result of this error was that floating point was erratic,
buggy, and often caused memory corruption in DOSBox-X eventually
leading to a crash. It should now be possible to properly run
DOS games on dynrec based systems, including ARM-based M1 Macbooks,
that use the FPU. (joncampbell123)
- Debugger: When entering debugger interface, force dynamic core
to flush it's state so that the debugger can show the correct
state to the user when they use the "FPU" command to see it.
(joncampbell123).
- VGA emulation: Automatically ignore odd/even mode if "Chain 4"
mode is enabled in the sequencer (normally enabled only for
256-color mode). Some games accidentally set odd/even mode
in 256-color mode and yet apparently worked just fine on real
hardware. Without this change, such games will display distorted
graphics. It makes logical sense "Chain 4" would take priority
over odd/even mode. Note: If a game uses 256-color unchained mode
AND foolishly enables odd/even mode, then the resulting distorted
graphics are probably accurate to what would happen on real
hardware, but then programmers would have caught their mistake
and fixed it so that is very unlikely to occur. This helps to fix
"Seal: Magic Eye" although some remaining visual artifacts in the
game can only be resolved by setting machine=svga_et4000
(joncampbell123).
- Set usescancodes=true when non-US keyboards are detected
(Windows builds) (maron2000)
- For long double without using x86 FPU, the code still calls the
fstcw instruction and can enable FPU exceptions that crash the
emulator, therefore mask off all exception bits to stop that.
(joncampbell123)
- Added code to mouse emulation to control how often the mouse
reports events through the interrupt. Added dosbox.conf option
to allow the user to force a report rate, which can be used to
force a lower than normal report rate for games that cannot
proprly handle higher ones. Allow PS/2 mouse emulation, if
rate not set by user, to control report rate. (joncampbell123).
- Add code to COMMAND.COM to flush keyboard input before running
the command given by the user, and flush again when the command
returns. Added option to dosbox.conf to enable/disable this
function (joncampbell123)
- Fix bug where Tandy mode ignored the "allow more than 640kb"
setting.
- Fix INT13h AH=02 broken conditional branch which prevents
installer of game "Inherit the Earth: Quest for the Orb"
to obtain free space of hard drive (maron2000)
- qcow2 image support: Make image able to be mounted by
drive letters (experimental) (maron2000)
- VHD image support: Make file name check for .vhd extension
to be case insensitive (maron2000)
- VHD image support: Fix auto-detection of geometry (maron2000)
- Sound Blaster: Added code to periodically check the user's
settings regarding recording source selection and listening.
This should allow the user to change those settings on the
fly. (joncampbell123).
- Sound Blaster: Added options to control whether the generated
recording source is audible through the speakers, and what
generated audio to send to the client. Options are: silence,
hiss, and a 1KHz test tone. (joncampbell123).
- Sound Blaster: If the DSP is recording rather than playing,
then send audio to the guest at the recording sample rate
containing some form of generated audio. Default is silence.
This ALSO satisfies the Creative driver CTSB16.SYS when it
does the DMA test at startup. (joncampbell123).
- Sound Blaster: Fixed code to properly recognize when the
guest wants to record audio, including through SB16
commands. Prior to this fix, all SB16 Bxh-Cxh commands
were handled as if playback even if the command would
instead trigger recording. (joncampbell123).
- Sound Blaster: Add missing update of "last DMA callback"
timestamp that is needed for when the guest pauses DMA
during playback or recording. (joncampbell123).
- VHD image support: If the VHD image is not a fixed type,
say so in the log (previously it said nothing) and say
what kind of image was mounted (joncampbell123).
- Added INT 13h AH=44h Extended Verify to satisfy any disk
utilities that might use it. The function doesn't really
do anything except return success (joncampbell123).
- Fix CPU stack management to use CPU mode agnostic method
using mem_readw instead of real_readw. However the real
mode version is used if real or virtual 8086 mode because
of comments in an older commit that mention UNLZEXE that
depends on real mode stack pointer rollover. This fixes
a bug related to protected mode APM (Advanced Power
Management) emulation that prevented the Linux kernel
from booting (joncampbell123).
- Add support for INT 2F function 1680h "Idle" and DOS
idle (INT 28h), add code to reduce DOSBox-X CPU load
during emulation when the idle function is called,
add dosbox.conf enable/disable (default enable) to
control this behavior (Github user "finalpatch")
- Graphical fixes and dialog support for Haiku OS (amol-)
- Allow jp106 keyboard layout in DOS/V mode, automatically
choose when keyboard layout is auto on Windows with
Japanese keyboard, fix jp106 input in SDL1 builds running
on Japanese Windows with English keyboard (nanshiki)
- Sync dh fpu state with normal fpu when dynamic core
calls normal core to handle self modifying code. Add
additional code to other cases. (Github user "finalpatch")
- Fix incorrect handling of upper 4 bits of character attributes
in video mode 72h in DOS/V mode (nanshiki)
- Fix BIOS signature at 0xFFFFF to reflect actual value
of Tandy machines so "Ninja" works correctly in
Tandy mode (rderooy)
See also: [https://www.vogons.org/viewtopic.php?f=32&t=92129]
- Change default mixer rate to 48KHz instead of the
long standard 44.1KHz. Most modern sound cards on
modern OSes render at 48KHz anyway and resample
either in hardware or software and most configurations
render at 48KHz. Perhaps somewhat improved audio quality
could be had by rendering at what most sound cards are
doing these days anyway. As usual, audiophiles are free
to set the mixer rate to 96KHz if supported by their
sound card. (joncampbell123)
- Fix PIT 0 timer interrupt handling not to attempt
periodic event and error adjustment unless the game
is using periodic modes 2 or 3. This fixes PIT timing
bug and possible emulator hang when exiting games
like "Days of Thunder" that leave PIT 0 in mode 0 or
1 on exit for some reason. (joncampbell123)
- Fix Sound Blaster DMA rate limits to better reflect
actual hardware. SB16 limits to 45454Hz just as
Pro and earlier do. These limits were added before
the proper measurements were coded and tested on
real hardware. (joncampbell123)
- Fix S3 cursor emulation to support both X11 and
Windows hardware mouse cursor modes available
on S3 Virge, Trio, and possibly other cards
(John Tsiombikas)
- Add EGA/VGA emulation code to keep track at runtime
whether planar features are in use. If they are not,
then handle EGA/VGA video memory access using a
simplified version for a bit of a performance boost
in response to complaints about poor VGA emulation
performance. (joncampbell123)
- VGA palette DAC update: Instead of recalculating
the palette map every time a color is written through
port 3C9h, set a flag. Defer palette map update to
when the next scan line is rendered, in order to
improve performance. (joncampbell123)
- Add option to enable or disable the "memory I/O
optimization" option, meaning the code that was
added to assign simplified VGA memory I/O handling
when the DOS game is not using any bit planar raster
op and more complicated features of the EGA/VGA
hardware. (joncampbell123)
- Added VGA render on demand mode to VGA emulation.
When enabled, VGA emulation does not render scanlines
until vertical retrace or when certain registers are
written that change the display (attribute controller,
VGA palette, etc.). It is added to dosbox.conf as
"scanline render on demand" and is false by default
because it can provide a performance boost for DOS games
but it also tends to break timing-dependent Demoscene
effects. The idea is that some emulator performance
improvement may be possible by not interrupting the
CPU loop per scanline for the same reason that DOSBox
SVN has traditionally only rendered the VGA display
in quarters instead of per scanline. (joncampbell123).
- Remove experimental "alt VGA" rendering code. It was
never completed and it is probably starting to
bitrot (joncampbell123).
- Fix EGA/VGA version of CGA 4-color graphics renderer
code to consider all four bitplanes when combining
each pair into a 2-bit value. When bitplanes 2+3 are
enabled and writeable, the 4-color mode becomes a
sort of 2-plane 2 bits per pixel 16-color mode. Fix
for machine=ega and "Leather Goddess of Phobos 2",
a game that sets up EGA 640x200 16-color mode then
suddenly switches on the 2bpp CGA mode as a way to
do 16-color dithered graphics. (joncampbell123).
- Fix installers for Dynamix games not working.
(Allofich & halcyon00)
- Fix crash related to swapping between disk
images. (Allofich)
- SVN r4482: Correct CMS sound pitch. (Allofich)