This commit is contained in:
Wengier
2020-12-27 03:06:44 -05:00
11 changed files with 72 additions and 29 deletions

View File

@@ -1,4 +1,11 @@
0.83.9
- INT 13h now obeys the "hard drive data rate limit"
setting, using the same disk I/O delay code as
INT 21h file I/O. [Issue #2039]
- Linux/X11 SDL1 builds: Combine window move/resize
into one call if possible, and not during window
manager hints, to avoid resize problems with the
XFCE 4.14 platform.
- Added menu option "Create blank disk images..."
(under "DOS" menu) to create blank floppy or hard
disk images of a common disk size, including 360KB,

View File

@@ -21,10 +21,22 @@
<caption>Configuration options</caption>
<image>https://github.com/joncampbell123/dosbox-x/raw/master/contrib/linux/dosbox-x_configuration_tool.png</image>
</screenshot>
<screenshot>
<caption>Dune II in DOSBox-X</caption>
<image>https://github.com/joncampbell123/dosbox-x/raw/master/contrib/linux/dosbox-x_dune2.png</image>
</screenshot>
<screenshot>
<caption>Tomb Raider 3dfx in DOSBox-X</caption>
<image>https://github.com/joncampbell123/dosbox-x/raw/master/contrib/linux/dosbox-x_tombraider.png</image>
</screenshot>
<screenshot>
<caption>Flight Simulator 5 in DOSBox-X</caption>
<image>https://github.com/joncampbell123/dosbox-x/raw/master/contrib/linux/dosbox-x_fs5.png</image>
</screenshot>
<screenshot>
<caption>Windows 3.11 for Workgroups as Guest OS</caption>
<image>https://github.com/joncampbell123/dosbox-x/raw/master/contrib/linux/dosbox-x_win311.png</image>
</screenshot>
<screenshot>
<caption>Windows 98SE as Guest OS</caption>
<image>https://github.com/joncampbell123/dosbox-x/raw/master/contrib/linux/dosbox-x_win98se.png</image>
@@ -45,24 +57,27 @@ Compared to DOSBox, DOSBox-X is much more flexible and provides more features.
DOSBox-X emulates a legacy IBM PC and DOS environment, and has many emulation options and features such as:
</p>
<ul>
<li>8086, 286, 386, 486, Pentium, Pentium MMX and Pentium Pro CPU options</li>
<li>IBM PCjr, Tandy 1000 and NEC PC-98 emulation</li>
<li>Emulate several PC variants: IBM PC, IBM PCjr, Tandy 1000 and NEC PC-98</li>
<li>CPUs: 8086, 286, 386, 486, Pentium, Pentium MMX and Pentium Pro</li>
<li>Graphics chipsets: MDA, Hercules, CGA, EGA, MCGA, VGA and SVGA</li>
<li>Sound options: Sound Blaster series, Gravis Ultrasound, Disney Sound source and more audio options</li>
<li>MIDI: Roland MT-32 and General MIDI options</li>
<li>Serial, Parallel and Game port support</li>
<li>Printer support and emulation options</li>
<li>3dfx Voodoo emulation with Glide wrapper support</li>
<li>Network emulation: IPX over UDP, and serial modem</li>
<li>Network adapter emulation: NE2000 (not for Flatpak or Snap installs)</li>
<li>Mounting a host directory as a harddisk, floppy or CD-ROM</li>
<li>Mounting harddisk images, floppy disk images and CD-ROM images</li>
<li>ISO9660, FAT12, FAT16 and FAT32 filesystem support, including long filenames</li>
<li>MDA, Hercules, CGA, EGA, MCGA, VGA and SVGA video adapter emulation</li>
<li>3dfx Voodoo emulation with Glide wrapper support</li>
<li>Various Sound Blaster models, Gravis Ultrasound, Disney Sound source and more audio options</li>
<li>Roland MT-32 and General MIDI support and emulation options</li>
<li>Serial, Parallel and Game port support</li>
<li>Printer support and emulation options</li>
<li>Network emulation (IPX, NE2000 (not for Flatpak or Snap installs))</li>
<li>Support for running real DOS systems (MS-DOS, IBM PC DOS, FreeDOS)</li>
<li>Support for running Windows 1.0 to Windows 3.11, Windows 95 and Windows 98</li>
<li>GUI drop-down menu for easier usage</li>
<li>Built-in graphical configuration tool</li>
<li>Save and load state with support for save files and up to 100 save slots</li>
<li>More DOS commands, and ability to add your own programs to the virtual Z: drive</li>
<li>Copy and Paste support and support for TrueType fonts</li>
<li>Various output options, including output scaling and OpenGL shaders</li>
</ul>
With the help of DOSBox-X, you can run plenty of the old classics that don't run on your new computer!
</description>

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -411,7 +411,7 @@ static void DestroySubWindows(void) {
WINDOW* &ref = dbg.get_win_ref((int)wnd);
if (ref != NULL) {
if (ref) delwin(ref);
delwin(ref);
ref = NULL;
}
}

View File

@@ -2438,7 +2438,7 @@ static unsigned char pc98_mixctl_reg = 0x14;
*
* - Registers 0x40-0xFF do nothing written and read back 0xFF.
* - Registers 0x00-0x3F are almost exact mirrors of registers 0x00-0x0F, but not quite
* - Registers 0x00-0x1F are exact mirrors of 0x00-0x1F
* - Registers 0x00-0x1F are exact mirrors of 0x00-0x0F
* - Registers 0x20-0x3F are exact mirrors of 0x20-0x2F which are.... non functional shadow copies of 0x00-0x0F (???)
* - Register 0x0E is mirrored at 0x0F, 0x1E, 0x1F. Reading 0x00, 0x01, 0x10, 0x11 also reads register 0x0E.
* - Writing 0x00, 0x01, 0x10, 0x11 resets the mixer as expected.

View File

@@ -1269,7 +1269,7 @@ bool CSerial::Putchar(uint8_t data, bool wait_dsr, bool wait_cts, Bitu timeout)
}
// wait for DSR+CTS on
if(wait_dsr||wait_cts) {
if(wait_dsr||wait_cts) {
if(wait_dsr&&wait_cts) {
while(((Read_MSR()&0x30)!=0x30)&&(starttime>PIC_FullIndex()-timeout))
CALLBACK_Idle();
} else if(wait_dsr) {

View File

@@ -723,6 +723,8 @@ void IDE_ResetDiskByBIOS(unsigned char disk);
void IDE_EmuINT13DiskReadByBIOS(unsigned char disk,unsigned int cyl,unsigned int head,unsigned sect);
void IDE_EmuINT13DiskReadByBIOS_LBA(unsigned char disk,uint64_t lba);
void diskio_delay(Bits value/*bytes*/);
static Bitu INT13_DiskHandler(void) {
uint16_t segat, bufptr;
uint8_t sectbuf[512];
@@ -846,6 +848,8 @@ static Bitu INT13_DiskHandler(void) {
for(i=0;i<reg_al;i++) {
last_status = imageDiskList[drivenum]->Read_Sector((uint32_t)reg_dh, (uint32_t)(reg_ch | ((reg_cl & 0xc0)<< 2)), (uint32_t)((reg_cl & 63)+i), sectbuf);
diskio_delay(512);
/* IDE emulation: simulate change of IDE state that would occur on a real machine after INT 13h */
IDE_EmuINT13DiskReadByBIOS(reg_dl, (uint32_t)(reg_ch | ((reg_cl & 0xc0)<< 2)), (uint32_t)reg_dh, (uint32_t)((reg_cl & 63)+i));
@@ -893,6 +897,8 @@ static Bitu INT13_DiskHandler(void) {
bufptr++;
}
diskio_delay(512);
last_status = imageDiskList[drivenum]->Write_Sector((uint32_t)reg_dh, (uint32_t)(reg_ch | ((reg_cl & 0xc0) << 2)), (uint32_t)((reg_cl & 63) + i), &sectbuf[0]);
if(last_status != 0x00) {
CALLBACK_SCF(true);
@@ -1100,6 +1106,8 @@ static Bitu INT13_DiskHandler(void) {
for(i=0;i<dap.num;i++) {
last_status = imageDiskList[drivenum]->Read_AbsoluteSector(dap.sector+i, sectbuf);
diskio_delay(512);
IDE_EmuINT13DiskReadByBIOS_LBA(reg_dl,dap.sector+i);
if((last_status != 0x00) || (killRead)) {
@@ -1133,6 +1141,8 @@ static Bitu INT13_DiskHandler(void) {
bufptr++;
}
diskio_delay(512);
last_status = imageDiskList[drivenum]->Write_AbsoluteSector(dap.sector+i, &sectbuf[0]);
if(last_status != 0x00) {
CALLBACK_SCF(true);

View File

@@ -795,6 +795,11 @@ static SDL_bool X11_WindowPosition(_THIS, int *x, int *y, int w, int h)
return SDL_FALSE;
}
/* NTS: This code ALSO used to position the window, but that apparently breaks
* with XFCE 4.14. The breakage manifests itself as a window that is always
* given it's original size from ConfigureNotify no matter what size the
* host application is trying to size it. Removing the XMoveWindow() call
* here fixes that. --J.C. */
static void X11_SetSizeHints(_THIS, int w, int h, Uint32 flags)
{
XSizeHints *hints;
@@ -811,20 +816,6 @@ static void X11_SetSizeHints(_THIS, int w, int h, Uint32 flags)
hints->min_height = hints->max_height = h;
hints->flags = PMaxSize | PMinSize;
}
/* Center it, if desired */
if ( X11_WindowPosition(this, &hints->x, &hints->y, w, h) ) {
hints->flags |= USPosition;
/* Hints must be set before moving the window, otherwise an
unwanted ConfigureNotify event will be issued */
XSetWMNormalHints(SDL_Display, WMwindow, hints);
XMoveWindow(SDL_Display, WMwindow, hints->x, hints->y);
/* Flush the resize event so we don't catch it later */
XSync(SDL_Display, True);
}
}
XSetWMNormalHints(SDL_Display, WMwindow, hints);
XFree(hints);
@@ -1052,12 +1043,21 @@ static int X11_CreateWindow(_THIS, SDL_Surface *screen,
/* resize the (possibly new) window manager window */
if( !SDL_windowid ) {
X11_SetSizeHints(this, w, h, flags);
int x = -999,y = -999;
X11_SetSizeHints(this, w, h, flags);
window_w = w;
window_h = h;
XResizeWindow(SDL_Display, WMwindow, w, h);
}
/* Center it, if desired */
if (!X11_WindowPosition(this, &x, &y, w, h))
x = y = -999;
if (x > -999 && y > -999)
XMoveResizeWindow(SDL_Display, WMwindow, x, y, w, h);
else
XResizeWindow(SDL_Display, WMwindow, w, h);
}
/* Create (or use) the X11 display window */
if ( !SDL_windowid ) {
@@ -1159,12 +1159,23 @@ static int X11_CreateWindow(_THIS, SDL_Surface *screen,
static int X11_ResizeWindow(_THIS,
SDL_Surface *screen, int w, int h, Uint32 flags)
{
int x = -999,y = -999;
if ( ! SDL_windowid ) {
/* Resize the window manager window */
X11_SetSizeHints(this, w, h, flags);
window_w = w;
window_h = h;
/* Center it, if desired */
if (!X11_WindowPosition(this, &x, &y, w, h))
x = y = -999;
if (x > -999 && y > -999)
XMoveResizeWindow(SDL_Display, WMwindow, x, y, w, h);
else
XResizeWindow(SDL_Display, WMwindow, w, h);
if ((flags & SDL_HAX_NORESIZEWINDOW) && (flags & SDL_FULLSCREEN) == 0 && (screen->flags & SDL_FULLSCREEN) == 0) {
/* do nothing */
}