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)