Skip to content

Commit 8ac8e9a

Browse files
committed
Merge remote-tracking branch 'upstream/master'
2 parents 394974d + 119f5ef commit 8ac8e9a

File tree

12 files changed

+597
-527
lines changed

12 files changed

+597
-527
lines changed

.github/workflows/macos.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
actions: write # for styfle/cancel-workflow-action to cancel/stop running workflows
1313
contents: read # for actions/checkout to fetch code
1414
if: github.event_name == 'push' || github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
15-
runs-on: macos-10.15
15+
runs-on: macos-12
1616
steps:
1717
- name: Cancel previous runs
1818
uses: styfle/cancel-workflow-action@0.11.0

.github/workflows/vsbuild32.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
shell: bash
2828
run: |
2929
echo "timestamp=`date +%F-%T | sed -e 's/:/-/g' | sed -e 's/-//g'`" >> $GITHUB_ENV
30-
ls -1 vs/dosbox-x.vcxproj vs/freetype/builds/windows/vc2010/freetype.vcxproj vs/libpdcurses/libpdcurses.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/sdl/VisualC/SDL/SDL.vcxproj vs/sdl/VisualC/SDLmain/SDLmain.vcxproj vs/sdl2/VisualC/SDL/SDL.vcxproj vs/sdl2/VisualC/SDLmain/SDLmain.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/zlib/zlib/zlib.vcxproj | xargs sed -b -i 's/v142/v141/g;s/>10.0</>10.0.22000.0</g'
30+
#ls -1 vs/dosbox-x.vcxproj vs/freetype/builds/windows/vc2010/freetype.vcxproj vs/libpdcurses/libpdcurses.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/sdl/VisualC/SDL/SDL.vcxproj vs/sdl/VisualC/SDLmain/SDLmain.vcxproj vs/sdl2/VisualC/SDL/SDL.vcxproj vs/sdl2/VisualC/SDLmain/SDLmain.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/zlib/zlib/zlib.vcxproj | xargs sed -b -i 's/v142/v141/g;s/>10.0</>10.0.22000.0</g'
3131
- name: Build Visual Studio Win32 SDL1
3232
shell: pwsh
3333
run: |

.github/workflows/vsbuild64.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
shell: bash
2828
run: |
2929
echo "timestamp=`date +%F-%T | sed -e 's/:/-/g' | sed -e 's/-//g'`" >> $GITHUB_ENV
30-
ls -1 vs/dosbox-x.vcxproj vs/freetype/builds/windows/vc2010/freetype.vcxproj vs/libpdcurses/libpdcurses.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/sdl/VisualC/SDL/SDL.vcxproj vs/sdl/VisualC/SDLmain/SDLmain.vcxproj vs/sdl2/VisualC/SDL/SDL.vcxproj vs/sdl2/VisualC/SDLmain/SDLmain.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/zlib/zlib/zlib.vcxproj | xargs sed -b -i 's/v142/v141/g;s/>10.0</>10.0.22000.0</g'
30+
#ls -1 vs/dosbox-x.vcxproj vs/freetype/builds/windows/vc2010/freetype.vcxproj vs/libpdcurses/libpdcurses.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/sdl/VisualC/SDL/SDL.vcxproj vs/sdl/VisualC/SDLmain/SDLmain.vcxproj vs/sdl2/VisualC/SDL/SDL.vcxproj vs/sdl2/VisualC/SDLmain/SDLmain.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/zlib/zlib/zlib.vcxproj | xargs sed -b -i 's/v142/v141/g;s/>10.0</>10.0.22000.0</g'
3131
- name: Build Visual Studio Win64 SDL1
3232
shell: pwsh
3333
run: |

CHANGELOG

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
Next
2+
- Fix S3 cursor emulation to support both X11 and
3+
Windows hardware mouse cursor modes available
4+
on S3 Virge, Trio, and possibly other cards
5+
(John Tsiombikas)
6+
17
2022.12.26
28
- Allow more than 640KB of conventional memory,
39
regardless of "allow more than 640kb" option, for

src/gui/sdlmain.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3062,12 +3062,12 @@ void GFX_Stop() {
30623062
sdl.active=false;
30633063
}
30643064

3065-
#if (defined(WIN32) && !defined(HX_DOS) || defined(LINUX) && C_X11 || defined(MACOSX)) && (defined(C_SDL2) || defined(SDL_DOSBOX_X_SPECIAL))
3065+
#if (defined(WIN32) && !defined(HX_DOS) || defined(LINUX) && C_X11 || defined(MACOSX)) && ((defined(C_SDL2) && defined(SDL_DOSBOX_X_IME)) || defined(SDL_DOSBOX_X_SPECIAL))
30663066
static uint8_t im_x, im_y;
30673067
#endif
30683068

30693069
void GFX_Start() {
3070-
#if defined(MACOSX) && !defined(C_SDL2)
3070+
#if defined(MACOSX) && !defined(C_SDL2) && defined(SDL_DOSBOX_X_SPECIAL)
30713071
if(dos.im_enable_flag) {
30723072
SDL_SetIMValues(SDL_IM_ENABLE, 1, NULL);
30733073
im_x = -1;
@@ -5144,7 +5144,7 @@ bool sdl_wait_on_error() {
51445144
return sdl.wait_on_error;
51455145
}
51465146

5147-
#if (defined(WIN32) && !defined(HX_DOS) || defined(LINUX) && C_X11 || defined(MACOSX)) && (defined(C_SDL2) || defined(SDL_DOSBOX_X_SPECIAL))
5147+
#if (defined(WIN32) && !defined(HX_DOS) || defined(LINUX) && C_X11 || defined(MACOSX)) && ((defined(C_SDL2) && defined(SDL_DOSBOX_X_IME)) || defined(SDL_DOSBOX_X_SPECIAL))
51485148
static uint32_t last_ticks;
51495149
void SetIMPosition() {
51505150
uint8_t x, y;
@@ -5414,7 +5414,7 @@ void GFX_Events() {
54145414
if (sdl.desktop.type == SCREEN_GAMELINK) OUTPUT_GAMELINK_InputEvent();
54155415
#endif
54165416

5417-
#if (defined(WIN32) && !defined(HX_DOS) || defined(LINUX) && C_X11 || defined(MACOSX)) && (defined(C_SDL2) || defined(SDL_DOSBOX_X_SPECIAL))
5417+
#if (defined(WIN32) && !defined(HX_DOS) || defined(LINUX) && C_X11 || defined(MACOSX)) && ((defined(C_SDL2) && defined(SDL_DOSBOX_X_IME)) || defined(SDL_DOSBOX_X_SPECIAL))
54185418
if(IS_PC98_ARCH) {
54195419
static uint32_t poll98_delay = 0;
54205420
uint32_t time = GetTicks();
@@ -5842,7 +5842,7 @@ void GFX_Events() {
58425842
}
58435843
}
58445844
#endif
5845-
#if (defined(WIN32) && !defined(HX_DOS) || defined(LINUX) && C_X11 || defined(MACOSX)) && (defined(C_SDL2) || defined(SDL_DOSBOX_X_SPECIAL))
5845+
#if (defined(WIN32) && !defined(HX_DOS) || defined(LINUX) && C_X11 || defined(MACOSX)) && ((defined(C_SDL2) && defined(SDL_DOSBOX_X_IME)) || defined(SDL_DOSBOX_X_SPECIAL))
58465846
if(IS_PC98_ARCH) {
58475847
static uint32_t poll98_delay = 0;
58485848
uint32_t time = GetTicks();
@@ -6177,7 +6177,7 @@ void GFX_Events() {
61776177
}
61786178
#endif
61796179
#endif
6180-
#if defined (MACOSX)
6180+
#if defined (MACOSX) && defined(SDL_DOSBOX_X_SPECIAL)
61816181
int onoff;
61826182
if(SDL_GetIMValues(SDL_IM_ONOFF, &onoff, NULL) == NULL) {
61836183
if(onoff != 0 && event.type == SDL_KEYDOWN) {

src/hardware/sblaster.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3391,7 +3391,7 @@ class SBLASTER: public Module_base {
33913391
case SBT_PRO1:
33923392
opl_mode=OPL_dualopl2;
33933393
break;
3394-
case SBT_PRO2:
3394+
case SBT_PRO2: // NTS: ESS 688 cards also had an OPL3 (http://www.dosdays.co.uk/topics/Manufacturers/ess.php)
33953395
case SBT_16:
33963396
opl_mode=OPL_opl3;
33973397
break;

src/hardware/vga_draw.cpp

Lines changed: 93 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -669,13 +669,25 @@ static uint8_t * VGA_Draw_Linear_Line_24_to_32_HWMouse(Bitu vidstart, Bitu /*lin
669669
uint8_t bitsB = vga.mem.linear[m+2];
670670
for (uint8_t bit=(0x80 >> cursorStartBit); bit != 0; bit >>= 1) { // for each bit
671671
cursorStartBit=0;
672-
if (bitsA&bit) {
673-
if (bitsB&bit) *xat ^= ~0U;
674-
//else Transparent
675-
} else if (bitsB&bit) {
676-
*xat = *(uint32_t*)vga.s3.hgc.forestack;
672+
if (vga.s3.reg_55 & 0x10) {
673+
// X11 mode: draw when mask bit is set, otherwise transparent
674+
if (bitsA & bit) {
675+
if (bitsB & bit) {
676+
*xat = *(uint16_t*)vga.s3.hgc.forestack;
677+
} else {
678+
*xat = *(uint16_t*)vga.s3.hgc.backstack;
679+
}
680+
}
677681
} else {
678-
*xat = *(uint32_t*)vga.s3.hgc.backstack;
682+
// MS Windows mode
683+
if (bitsA&bit) {
684+
if (bitsB&bit) *xat ^= ~0U;
685+
//else Transparent
686+
} else if (bitsB&bit) {
687+
*xat = *(uint32_t*)vga.s3.hgc.forestack;
688+
} else {
689+
*xat = *(uint32_t*)vga.s3.hgc.backstack;
690+
}
679691
}
680692
xat++;
681693
}
@@ -1410,13 +1422,25 @@ static uint8_t * VGA_Draw_VGA_Line_Xlat32_HWMouse( Bitu vidstart, Bitu /*line*/)
14101422
for (uint8_t bit=(0x80 >> cursorStartBit); bit != 0; bit >>= 1) {
14111423
// for each bit
14121424
cursorStartBit=0; // only the first byte has some bits cut off
1413-
if (bitsA&bit) {
1414-
if (bitsB&bit) *xat ^= 0xFFFFFFFF; // Invert screen data
1415-
//else Transparent
1416-
} else if (bitsB&bit) {
1417-
*xat = vga.dac.xlat32[fg]; // foreground color
1425+
if (vga.s3.reg_55 & 0x10) {
1426+
// X11 mode: draw when mask bit is set, otherwise transparent
1427+
if (bitsA & bit) {
1428+
if (bitsB & bit) {
1429+
*xat = *(uint16_t*)vga.s3.hgc.forestack;
1430+
} else {
1431+
*xat = *(uint16_t*)vga.s3.hgc.backstack;
1432+
}
1433+
}
14181434
} else {
1419-
*xat = vga.dac.xlat32[bg];
1435+
// MS Windows mode
1436+
if (bitsA&bit) {
1437+
if (bitsB&bit) *xat ^= 0xFFFFFFFF; // Invert screen data
1438+
//else Transparent
1439+
} else if (bitsB&bit) {
1440+
*xat = vga.dac.xlat32[fg]; // foreground color
1441+
} else {
1442+
*xat = vga.dac.xlat32[bg];
1443+
}
14201444
}
14211445
xat++;
14221446
}
@@ -1486,13 +1510,25 @@ static uint8_t * VGA_Draw_VGA_Line_HWMouse( Bitu vidstart, Bitu /*line*/) {
14861510
for (uint8_t bit=(0x80 >> cursorStartBit); bit != 0; bit >>= 1) {
14871511
// for each bit
14881512
cursorStartBit=0; // only the first byte has some bits cut off
1489-
if (bitsA&bit) {
1490-
if (bitsB&bit) *xat ^= 0xFF; // Invert screen data
1491-
//else Transparent
1492-
} else if (bitsB&bit) {
1493-
*xat = vga.s3.hgc.forestack[0]; // foreground color
1513+
if (vga.s3.reg_55 & 0x10) {
1514+
// X11 mode: draw when mask bit is set, otherwise transparent
1515+
if (bitsA & bit) {
1516+
if (bitsB & bit) {
1517+
*xat = *(uint16_t*)vga.s3.hgc.forestack;
1518+
} else {
1519+
*xat = *(uint16_t*)vga.s3.hgc.backstack;
1520+
}
1521+
}
14941522
} else {
1495-
*xat = vga.s3.hgc.backstack[0];
1523+
// MS Windows mode
1524+
if (bitsA&bit) {
1525+
if (bitsB&bit) *xat ^= 0xFF; // Invert screen data
1526+
//else Transparent
1527+
} else if (bitsB&bit) {
1528+
*xat = vga.s3.hgc.forestack[0]; // foreground color
1529+
} else {
1530+
*xat = vga.s3.hgc.backstack[0];
1531+
}
14961532
}
14971533
xat++;
14981534
}
@@ -1561,16 +1597,28 @@ static uint8_t * VGA_Draw_LIN16_Line_HWMouse(Bitu vidstart, Bitu /*line*/) {
15611597
for (uint8_t bit=(0x80 >> cursorStartBit); bit != 0; bit >>= 1) {
15621598
// for each bit
15631599
cursorStartBit=0;
1564-
if (bitsA&bit) {
1565-
// byte order doesn't matter here as all bits get flipped
1566-
if (bitsB&bit) *xat ^= ~0U;
1567-
//else Transparent
1568-
} else if (bitsB&bit) {
1569-
// Source as well as destination are uint8_t arrays,
1570-
// so this should work out endian-wise?
1571-
*xat = *(uint16_t*)vga.s3.hgc.forestack;
1600+
if (vga.s3.reg_55 & 0x10) {
1601+
// X11 mode: draw when mask bit is set, otherwise transparent
1602+
if (bitsA & bit) {
1603+
if (bitsB & bit) {
1604+
*xat = *(uint16_t*)vga.s3.hgc.forestack;
1605+
} else {
1606+
*xat = *(uint16_t*)vga.s3.hgc.backstack;
1607+
}
1608+
}
15721609
} else {
1573-
*xat = *(uint16_t*)vga.s3.hgc.backstack;
1610+
// MS Windows mode
1611+
if (bitsA&bit) {
1612+
// byte order doesn't matter here as all bits get flipped
1613+
if (bitsB&bit) *xat ^= ~0U;
1614+
//else Transparent
1615+
} else if (bitsB&bit) {
1616+
// Source as well as destination are uint8_t arrays,
1617+
// so this should work out endian-wise?
1618+
*xat = *(uint16_t*)vga.s3.hgc.forestack;
1619+
} else {
1620+
*xat = *(uint16_t*)vga.s3.hgc.backstack;
1621+
}
15741622
}
15751623
xat++;
15761624
}
@@ -1634,13 +1682,25 @@ static uint8_t * VGA_Draw_LIN32_Line_HWMouse(Bitu vidstart, Bitu /*line*/) {
16341682
uint8_t bitsB = vga.mem.linear[m+2];
16351683
for (uint8_t bit=(0x80 >> cursorStartBit); bit != 0; bit >>= 1) { // for each bit
16361684
cursorStartBit=0;
1637-
if (bitsA&bit) {
1638-
if (bitsB&bit) *xat ^= ~0U;
1639-
//else Transparent
1640-
} else if (bitsB&bit) {
1641-
*xat = *(uint32_t*)vga.s3.hgc.forestack;
1685+
if (vga.s3.reg_55 & 0x10) {
1686+
// X11 mode: draw when mask bit is set, otherwise transparent
1687+
if (bitsA & bit) {
1688+
if (bitsB & bit) {
1689+
*xat = *(uint16_t*)vga.s3.hgc.forestack;
1690+
} else {
1691+
*xat = *(uint16_t*)vga.s3.hgc.backstack;
1692+
}
1693+
}
16421694
} else {
1643-
*xat = *(uint32_t*)vga.s3.hgc.backstack;
1695+
// MS Windows mode
1696+
if (bitsA&bit) {
1697+
if (bitsB&bit) *xat ^= ~0U;
1698+
//else Transparent
1699+
} else if (bitsB&bit) {
1700+
*xat = *(uint32_t*)vga.s3.hgc.forestack;
1701+
} else {
1702+
*xat = *(uint32_t*)vga.s3.hgc.backstack;
1703+
}
16441704
}
16451705
xat++;
16461706
}

0 commit comments

Comments
 (0)