DOSBox-X 2023.03.31 Release Notes
Release Date: March 31, 2023
Please report any issues in our issue tracker.
Also, make sure to check out our Wiki guide.
New in This Version
- “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)