Skip to content

DOSBox-X 2024.07.01 2024-07-01 21:45

Compare
Choose a tag to compare
@joncampbell123 joncampbell123 released this 02 Jul 04:49
· 301 commits to master since this release

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)