joncampbell123 / dosbox-x

DOSBox-X fork of the DOSBox project
GNU General Public License v2.0
2.83k stars 383 forks source link

Pentium_mmx cputype causing corrupted video playback and VBEMP driver causing flickering cursor in menus when playing Gruntz through Windows 98SE #4918

Open tomster785 opened 8 months ago

tomster785 commented 8 months ago

Describe the bug

EDIT: After some troubleshooting with the help of emxd, it has been revealed these issues are not what I initially thought they wer, and are in fact related to the pentium_mmx cputype setting and also the VBEMP driver (although, I have no idea if this VBEMP driver would cause this issue on original hardware). I have also discovered in this process that vsyncmode = host causes issues with the graphic drivers with the S3Trio64 and I have made a separate issue related to this:

https://github.com/joncampbell123/dosbox-x/issues/4954

The flickering cursor is related to the VBEMP driver, as it happens regardless of config settings, and the corrupted video playback is related to the pentium_mmx setting, it becomes even worse when the core is set to dynamic_x86 instead of normal. So with this development, I have to decided to edit the issue to correctly reflect what is happening. The discussion that led to this discovery can be found in the comments below and the original text for the issue is here:

Original title: Corrupted video playback and flickering cursor in menus when playing Gruntz through Windows 98SE

I'm trying to play Gruntz by Monolith on Windows 98SE through dosbox-x and I have the following two issues:

The video playback for the intro cutscene appears corrupted (it also happens with the logo cutscene too, indicating a problem with video playback in general for this game): gruntz intro

The cursor also flickers in the menus, but not in game, its not visible in this screenshot. Honestly I couldn't really take a screenshot of this issue because of the nature of the issue, but the standard windows cursor should be visible in this screenshot: gruntz menu

I followed the windows 98 installation guide, so I have the S3trio64 with the generic VESA drivers as recommended, with sb16vibra and also voodoo 3dfx installed too. All relevant drivers are installed. I also used a differencing vhd image so I can have a fresh install for the game, but I have also tried with a standard vhd file too and the same issue occurs.

The game itself works fine, a little slow, but I put that down to my PC not being strong enough.

I can't rule out the possibility that I have just set something up incorrectly, although I have gotten the game to work as expected on PCem before. My experience of Windows 98 is very limited. As embarrassing as it would be to raise an issue for something that was just my own fault, it would be nice to know that it is just user error and therefore fixable!

Computer specs: i7 4790k GTX 1080 16GB DDR3 Z97X-Gaming-3 Motherboard

I appreciate any help!

I've tried to be as thorough as possible with info, if there is anything more needed please let me know.

EDIT: So I've been messing around with settings trying to improve performance, and also to see if they had any effect on the issues described. I disabled the voodoo card for this game because 3D acceleration isn't necessary, and it had no effect on performance or the issues. But then I remembered about the dynamic_x86 cpu core, and whilst that had a massive impact on performance, it also made the issue with the intro video playback worse, here's a new screenshot to demonstrate: gruntz intro dynamic

This leads me to believe that it has something to do with the way the CPU is being emulated rather than the way I have set things up.

Steps to reproduce the behaviour

Step 1: Install Gruntz. Step 2: Launch the game, it just happens straight away without any other actions.

Expected behavior

The cursor shouldn't be flickering and the video should playback without corruption.

What operating system(s) this bug have occurred on?

Windows 10 Version 10.0.19045 Build 19045

What version(s) of DOSBox-X have this bug?

DOSBox-X 2024.03.01

Used configuration

[sdl]
fullscreen            = true
fulldouble            = false
fullresolution        = desktop
windowresolution      = 1024x768
windowposition        = 
display               = 0
output                = opengl
videodriver           = 
transparency          = 0
maximize              = false
autolock              = true
autolock_feedback     = none
middle_unlock         = none
clip_mouse_button     = none
clip_key_modifier     = none
clip_paste_bios       = default
clip_paste_speed      = 30
sensitivity           = 100
raw_mouse_input       = true
usesystemcursor       = false
mouse_emulation       = locked
mouse_wheel_key       = 0
waitonerror           = true
priority              = higher,normal
mapperfile            = mapper-dosbox-x.map
mapperfile_sdl1       = 
mapperfile_sdl2       = 
forcesquarecorner     = true
usescancodes          = false
gamelink master       = false
gamelink snoop        = false
gamelink load address = 0
overscan              = 0
titlebar              = 
showbasic             = true
showdetails           = true
showmenu              = true

[log]
logfile     = gruntz
vga         = true
vgagfx      = true
vgamisc     = true
int10       = true
sblaster    = true
dma_control = true
fpu         = true
cpu         = true
paging      = true
fcb         = true
files       = true
ioctl       = true
exec        = true
dosmisc     = true
pit         = true
keyboard    = true
pic         = true
mouse       = true
bios        = true
gui         = true
misc        = true
io          = true
pci         = true
sst         = true
int21       = true
fileio      = true
debuggerrun = debugger

[dosbox]
language                                        = 
title                                           = 
fastbioslogo                                    = false
disable graphical splash                        = true
startbanner                                     = true
bannercolortheme                                = default
dpi aware                                       = auto
quit warning                                    = auto
allow quit after warning                        = true
working directory option                        = program
working directory default                       = 
show advanced options                           = true
resolve config path                             = true
hostkey                                         = mapper
mapper send key                                 = ctrlaltdel
ime                                             = auto
synchronize time                                = true
keyboard hook                                   = false
weitek                                          = false
bochs debug port e9                             = false
machine                                         = svga_s3
captures                                        = capture
autosave                                        = 
saveslot                                        = 1
savefile                                        = 
video debug at startup                          = false
saveremark                                      = true
forceloadstate                                  = false
compresssaveparts                               = true
show recorded filename                          = false
skip encoding unchanged frames                  = false
capture chroma format                           = auto
capture format                                  = default
shell environment size                          = 0
private area size                               = 32768
a20                                             = mask
turn off a20 gate on boot                       = true
cbus bus clock                                  = std10
isa bus clock                                   = std8.3
pci bus clock                                   = std33.3
call binary on reset                            = 
unhandled irq handler                           = 
call binary on boot                             = 
ibm rom basic                                   = 
rom bios allocation max                         = 0
rom bios minimum size                           = 0
irq delay ns                                    = -1
iodelay                                         = -1
iodelay16                                       = -1
iodelay32                                       = -1
acpi                                            = off
acpi rsd ptr location                           = auto
acpi sci irq                                    = -1
acpi iobase                                     = 0
acpi reserved size                              = 0
memsize                                         = 512
memsizekb                                       = 0
dos mem limit                                   = 0
isa memory hole at 512kb                        = auto
isa memory hole at 15mb                         = auto
reboot delay                                    = -1
memalias                                        = 0
nocachedir                                      = false
freesizecap                                     = cap
convertdrivefat                                 = true
convert fat free space                          = 250
convert fat timeout                             = 4
leading colon write protect image               = true
locking disk image mount                        = true
unmask keyboard on int 16 read                  = true
int16 keyboard polling undocumented cf behavior = false
allow port 92 reset                             = true
enable port 92                                  = true
enable 1st dma controller                       = true
enable 2nd dma controller                       = true
allow dma address decrement                     = true
enable 128k capable 16-bit dma                  = auto
enable dma extra page registers                 = true
dma page registers write-only                   = false
cascade interrupt never in service              = false
cascade interrupt ignore in service             = auto
enable slave pic                                = true
enable pc nmi mask                              = true
allow more than 640kb base memory               = false
enable pci bus                                  = true

[render]
frameskip               = 0
aspect                  = true
aspect_ratio            = 0:0
char9                   = true
euro                    = -1
doublescan              = true
scaler                  = none
glshader                = sharp
pixelshader             = none
xbrz slice              = 16
xbrz fixed scale factor = 0
xbrz max scale factor   = 0
autofit                 = true
monochrome_pal          = green

[pc98]
pc-98 BIOS copyright string              = false
pc-98 int 1b fdc timer wait              = false
pc-98 pic init to read isr               = true
pc-98 fm board                           = auto
pc-98 fm board irq                       = 0
pc-98 fm board io port                   = 0
pc-98 time stamp                         = true
pc-98 sound bios                         = false
pc-98 load sound bios rom file           = true
pc-98 buffer page flip                   = false
pc-98 enable 256-color planar            = true
pc-98 enable 256-color                   = true
pc-98 enable 16-color                    = true
pc-98 enable grcg                        = true
pc-98 enable egc                         = true
pc-98 enable 188 user cg                 = true
pc-98 start gdc at 5mhz                  = false
pc-98 allow scanline effect              = true
pc-98 bus mouse                          = true
pc-98 nec mouse function                 = false
pc-98 video mode                         = 
pc-98 timer always cycles                = auto
pc-98 timer master frequency             = 0
pc-98 allow 4 display partition graphics = -1
pc-98 force ibm keyboard layout          = auto
pc-98 force JIS keyboard layout          = false
pc-98 try font rom                       = true
pc-98 anex86 font                        = 
pc-98 fontx sbcs                         = 
pc-98 fontx dbcs                         = 
pc-98 fontx internal symbol              = false
pc-98 show graphics layer on initialize  = true

[dosv]
dosv             = off
getsysfont       = true
fontxsbcs        = 
fontxsbcs16      = 
fontxsbcs24      = 
fontxdbcs        = 
fontxdbcs14      = 
fontxdbcs24      = 
showdbcsnodosv   = auto
yen              = false
del              = true
fepcontrol       = both
vtext1           = svga
vtext2           = xga
use20pixelfont   = false
j3100            = off
j3100type        = default
j3100colorscroll = false
j3100backcolor   = 
j3100textcolor   = 

[video]
vmemdelay                                         = 0
vmemsize                                          = 8
vmemsizekb                                        = 0
vbe window granularity                            = 0
vbe window size                                   = 0
enable 8-bit dac                                  = true
high intensity blinking                           = true
svga lfb base                                     = 0
pci vga                                           = true
vga attribute controller mapping                  = auto
enable supermegazeux tweakmode                    = 
vga bios use rom image                            = false
vga bios rom image                                = 
vga bios size override                            = 0
video bios dont duplicate cga first half rom font = false
video bios always offer 14-pixel high rom font    = false
video bios always offer 16-pixel high rom font    = false
video bios enable cga second half rom font        = true
forcerate                                         = 
sierra ramdac                                     = true
sierra ramdac lock 565                            = false
vga fill active memory                            = false
page flip debug line                              = false
vertical retrace poll debug line                  = false
cgasnow                                           = true
vga 3da undefined bits                            = 4
rom bios 8x8 CGA font                             = true
rom bios video parameter table                    = true
int 10h points at vga bios                        = true
unmask timer on int 10 setmode                    = false
vesa bank switching window mirroring              = false
vesa bank switching window range check            = true
vesa zero buffer on get information               = true
vesa set display vsync                            = -1
vesa lfb base scanline adjust                     = 0
vesa map non-lfb modes to 128kb region            = false
ega per scanline hpel                             = true
allow hpel effects                                = false
allow hretrace effects                            = false
hretrace effect weight                            = 4.00
vesa modelist cap                                 = 0
vesa modelist width limit                         = 0
vesa modelist height limit                        = 0
vesa vbe put modelist in vesa information         = false
vesa vbe 1.2 modes are 32bpp                      = auto
allow low resolution vesa modes                   = true
allow explicit 24bpp vesa modes                   = false
allow high definition vesa modes                  = true
allow unusual vesa modes                          = true
allow 32bpp vesa modes                            = true
allow 24bpp vesa modes                            = true
allow 16bpp vesa modes                            = true
allow 15bpp vesa modes                            = true
allow 8bpp vesa modes                             = true
allow 4bpp vesa modes                             = true
allow 4bpp packed vesa modes                      = false
allow tty vesa modes                              = true
double-buffered line compare                      = false
ignore vblank wraparound                          = false
ignore extended memory bit                        = false
enable vga resize delay                           = false
resize only on vga active display width increase  = false
vga palette update on full load                   = true
ignore odd-even mode in non-cga modes             = false
ignore sequencer blanking                         = false
memory io optimization 1                          = true
scanline render on demand                         = auto

[vsync]
vsyncmode = host
vsyncrate = 75

[cpu]
core                                            = normal
fpu                                             = true
cpuid string                                    = 
processor serial number                         = 
rdtsc rate                                      = 0
segment limits                                  = true
double fault                                    = true
clear trap flag on unhandled int 1              = false
reset on triple fault                           = true
always report double fault                      = false
always report triple fault                      = false
mask stack pointer for enter leave instructions = auto
allow lmsw to exit protected mode               = auto
report fdiv bug                                 = false
enable msr                                      = true
enable cmpxchg8b                                = true
enable syscall                                  = true
ignore undefined msr                            = false
interruptible rep string op                     = -1
dynamic core cache block size                   = 32
cputype                                         = pentium_mmx
cycles                                          = max
cycleup                                         = 10
cycledown                                       = 20
cycle emulation percentage adjust               = 0
turbo                                           = false
stop turbo on key                               = true
stop turbo after second                         = 0
use dynamic core with paging on                 = auto
ignore opcode 63                                = true
apmbios                                         = true
apmbios pnp                                     = false
apm power button event                          = suspend
apmbios version                                 = auto
apmbios allow realmode                          = true
apmbios allow 16-bit protected mode             = true
apmbios allow 32-bit protected mode             = true
integration device                              = false
integration device pnp                          = false
isapnpbios                                      = true
isapnpport                                      = auto
realbig16                                       = false

[keyboard]
aux                     = true
allow output port reset = true
controllertype          = auto
auxdevice               = intellimouse

[ttf]
font          = 
fontbold      = 
fontital      = 
fontboit      = 
colors        = 
outputswitch  = auto
winperc       = 60
ptsize        = 0
lins          = 0
cols          = 0
righttoleft   = false
wp            = 
wpbg          = -1
wpfg          = 7
bold          = true
italic        = true
underline     = true
strikeout     = false
char512       = true
printfont     = true
autodbcs      = true
autoboxdraw   = true
halfwidthkana = true
blinkc        = true
gbk           = false
chinasea      = false
uao           = false
dosvfunc      = false

[voodoo]
voodoo_card   = software
voodoo_maxmem = true
glide         = false
lfb           = full_noaux
splash        = true

[mixer]
nosound         = false
sample accurate = true
swapstereo      = false
rate            = 48000
blocksize       = 1024
prebuffer       = 25

[midi]
mpu401                  = intelligent
mpubase                 = 0
mididevice              = default
midiconfig              = 
samplerate              = 48000
mpuirq                  = -1
mt32.romdir             = 
mt32.model              = auto
mt32.reverse.stereo     = false
mt32.verbose            = false
mt32.thread             = false
mt32.chunk              = 16
mt32.prebuffer          = 32
mt32.partials           = 32
mt32.dac                = 0
mt32.analog             = 2
mt32.output.gain        = 100
mt32.reverb.mode        = auto
mt32.reverb.output.gain = 100
mt32.reverb.time        = 5
mt32.reverb.level       = 3
mt32.rate               = 48000
mt32.src.quality        = 2
mt32.niceampramp        = true
mt32.engage.channel1    = false
fluid.driver            = default
fluid.soundfont         = 
fluid.samplerate        = 48000
fluid.gain              = .2
fluid.polyphony         = 256
fluid.cores             = default
fluid.periods           = default
fluid.periodsize        = default
fluid.reverb            = yes
fluid.chorus            = yes
fluid.reverb.roomsize   = .61
fluid.reverb.damping    = .23
fluid.reverb.width      = .76
fluid.reverb.level      = .57
fluid.chorus.number     = 3
fluid.chorus.level      = 1.2
fluid.chorus.speed      = .3
fluid.chorus.depth      = 8.0
fluid.chorus.type       = 0

[sblaster]
sbtype                                           = sb16vibra
sbbase                                           = 220
irq                                              = 7
mindma                                           = -1
listen to recording source                       = false
recording source                                 = silence
irq hack                                         = none
dma                                              = 1
hdma                                             = 5
dsp command aliases                              = true
pic unmask irq                                   = false
enable speaker                                   = false
enable asp                                       = false
disable filtering                                = false
dsp write buffer status must return 0x7f or 0xff = false
pre-set sbpro stereo                             = false
sbmixer                                          = true
oplmode                                          = auto
adlib force timer overflow on detect             = false
oplemu                                           = default
oplrate                                          = 48000
oplport                                          = 
retrowave_bus                                    = serial
retrowave_spi_cs                                 = 0,6
retrowave_port                                   = 
hardwarebase                                     = 220
force dsp auto-init                              = false
force goldplay                                   = false
goldplay                                         = true
goldplay stereo                                  = true
dsp require interrupt acknowledge                = auto
dsp write busy delay                             = -1
blaster environment variable                     = true
sample rate limits                               = true
instant direct dac                               = false
stereo control with sbpro only                   = true
dsp busy cycle rate                              = -1
dsp busy cycle always                            = -1
dsp busy cycle duty                              = -1
io port aliasing                                 = true

[gus]
gus                                = false
autoamp                            = false
unmask dma                         = false
ignore channel count while active  = false
pic unmask irq                     = false
startup initialized                = false
dma enable on dma control polling  = false
clear dma tc irq if excess polling = false
force master irq enable            = false
gus panning table                  = default
gusrate                            = 48000
gus fixed render rate              = false
gusmemsize                         = -1
gus master volume                  = 0.00
gusbase                            = 240
gusirq                             = 5
gusdma                             = 3
irq hack                           = none
gustype                            = classic
ultradir                           = C:\ULTRASND

[innova]
innova     = false
samplerate = 22050
sidbase    = 280
quality    = 0

[imfc]
imfc        = false
imfc_base   = 2a20
imfc_irq    = 3
imfc_filter = on

[speaker]
pcspeaker                              = true
pcspeaker clock gate enable at startup = false
initial frequency                      = -1
pcrate                                 = 65536
tandy                                  = auto
tandyrate                              = 48000
disney                                 = false
ps1audio                               = off
ps1audiorate                           = 22050

[joystick]
joysticktype  = auto
timed         = true
autofire      = false
swap34        = false
buttonwrap    = false
joy1deadzone1 = 0.25
joy1deadzone2 = 0.25
joy2deadzone1 = 0.25
joy1response1 = 1.00
joy1response2 = 1.00
joy2response1 = 1.00
joy1axis0     = 0
joy1axis1     = 1
joy1axis2     = 2
joy1axis3     = 3
joy1axis4     = 4
joy1axis5     = 5
joy1axis6     = 6
joy1axis7     = 7
joy2axis0     = 0
joy2axis1     = 1
joy2axis2     = 2
joy2axis3     = 3
joy2axis4     = 4
joy2axis5     = 5
joy2axis6     = 6
joy2axis7     = 7

[mapper]
joy1deadzone0- = 0.60
joy1deadzone0+ = 0.60
joy1deadzone1- = 0.60
joy1deadzone1+ = 0.60
joy1deadzone2- = 0.60
joy1deadzone2+ = 0.60
joy1deadzone3- = 0.60
joy1deadzone3+ = 0.60
joy1deadzone4- = 0.60
joy1deadzone4+ = 0.60
joy1deadzone5- = 0.60
joy1deadzone5+ = 0.60
joy1deadzone6- = 0.60
joy1deadzone6+ = 0.60
joy1deadzone7- = 0.60
joy1deadzone7+ = 0.60
joy2deadzone0- = 0.60
joy2deadzone0+ = 0.60
joy2deadzone1- = 0.60
joy2deadzone1+ = 0.60
joy2deadzone2- = 0.60
joy2deadzone2+ = 0.60
joy2deadzone3- = 0.60
joy2deadzone3+ = 0.60
joy2deadzone4- = 0.60
joy2deadzone4+ = 0.60
joy2deadzone5- = 0.60
joy2deadzone5+ = 0.60
joy2deadzone6- = 0.60
joy2deadzone6+ = 0.60
joy2deadzone7- = 0.60
joy2deadzone7+ = 0.60

[serial]
serial1       = dummy
serial2       = dummy
serial3       = disabled
serial4       = disabled
serial5       = disabled
serial6       = disabled
serial7       = disabled
serial8       = disabled
serial9       = disabled
phonebookfile = phonebook-dosbox-x.txt

[parallel]
parallel1 = printer
parallel2 = disabled
parallel3 = disabled
parallel4 = disabled
parallel5 = disabled
parallel6 = disabled
parallel7 = disabled
parallel8 = disabled
parallel9 = disabled
dongle    = false

[printer]
printer     = true
dpi         = 360
width       = 85
height      = 110
printoutput = printer
multipage   = false
device      = -
docpath     = .
fontpath    = FONTS
openwith    = 
openerror   = 
printdbcs   = auto
shellhide   = false
timeout     = 0

[dos]
xms                                              = true
xms handles                                      = 0
shell configuration as commands                  = false
badcommandhandler                                = 
mscdex device name                               = 
hma                                              = true
hma allow reservation                            = true
command shell flush keyboard buffer              = true
hard drive data rate limit                       = 0
floppy drive data rate limit                     = 0
special operation file prefix                    = .DB
drive z is remote                                = auto
drive z convert fat                              = false
drive z expand path                              = true
drive z hide files                               = /TEXTUTIL\25.COM /TEXTUTIL\28.COM /TEXTUTIL\50.COM
hidenonrepresentable                             = true
hma minimum allocation                           = 0
ansi.sys                                         = true
log console                                      = false
dos sda size                                     = 0
hma free space                                   = 34816
cpm compatibility mode                           = auto
share                                            = true
file access tries                                = 3
network redirector                               = true
minimum dos initial private segment              = 0
minimum mcb segment                              = 0
minimum mcb free                                 = 0
enable dummy device mcb                          = false
maximum environment block size on exec           = -1
additional environment block size on exec        = -1
enable a20 on windows init                       = false
zero memory on xms memory allocation             = false
ems                                              = true
vcpi                                             = true
unmask timer on disk io                          = false
zero int 67h if no ems                           = true
zero unused int 68h                              = false
emm386 startup active                            = false
zero memory on ems memory allocation             = false
ems system handle memory size                    = 384
ems system handle on even megabyte               = false
umb                                              = true
umb start                                        = 0
umb end                                          = 0
kernel allocation in umb                         = false
keep umb on boot                                 = false
keep private area on boot                        = auto
private area in umb                              = true
quick reboot                                     = false
ver                                              = 7.1
lfn                                              = auto
fat32setversion                                  = ask
shellhigh                                        = auto
automount                                        = true
automountall                                     = false
mountwarning                                     = true
autoa20fix                                       = true
autoloadfix                                      = true
autofixwarning                                   = false
startcmd                                         = false
starttranspath                                   = true
startwait                                        = true
startquiet                                       = false
startincon                                       = assoc attrib chcp copy dir echo for ftype help if set type ver vol xcopy
vmware                                           = true
int33                                            = true
mouse report rate                                = 0
int33 hide host cursor if interrupt subroutine   = true
int33 hide host cursor when polling              = false
int33 disable cell granularity                   = false
int 13 disk change detect                        = true
int 13 extensions                                = true
biosps2                                          = true
int15 wait force unmask irq                      = true
int15 mouse callback does not preserve registers = false
keyboardlayout                                   = auto
customcodepage                                   = 
dbcs                                             = true
filenamechar                                     = true
collating and uppercase                          = true
con device use int 16h to detect keyboard input  = true
zero memory on int 21h memory allocation         = false
pipe temporary device                            = true
dos clipboard device enable                      = false
dos clipboard device name                        = CLIP$
dos clipboard api                                = true
dos idle api                                     = true

[ipx]
ipx = false

[ne2000]
ne2000  = false
nicbase = 300
nicirq  = 3
macaddr = random
backend = auto

[ethernet, pcap]
realnic = list
timeout = default

[ethernet, slirp]
restricted            = false
disable_host_loopback = false
mtu                   = 0
mru                   = 0
ipv4_network          = 10.0.2.0
ipv4_netmask          = 255.255.255.0
ipv4_host             = 10.0.2.2
ipv4_nameserver       = 10.0.2.3
ipv4_dhcp_start       = 10.0.2.15
tcp_port_forwards     = 
udp_port_forwards     = 

[ide, primary]
enable                  = true
pnp                     = true
irq                     = 0
io                      = 0
altio                   = 0
int13fakeio             = true
int13fakev86io          = true
enable pio32            = false
ignore pio32            = false
cd-rom spinup time      = 0
cd-rom spindown timeout = 0
cd-rom insertion delay  = 0

[ide, secondary]
enable                  = true
pnp                     = true
irq                     = 0
io                      = 0
altio                   = 0
int13fakeio             = true
int13fakev86io          = true
enable pio32            = false
ignore pio32            = false
cd-rom spinup time      = 0
cd-rom spindown timeout = 0
cd-rom insertion delay  = 4000

[ide, tertiary]
enable                  = false
pnp                     = true
irq                     = 0
io                      = 0
altio                   = 0
int13fakeio             = false
int13fakev86io          = false
enable pio32            = false
ignore pio32            = false
cd-rom spinup time      = 0
cd-rom spindown timeout = 0
cd-rom insertion delay  = 0

[ide, quaternary]
enable                  = false
pnp                     = true
irq                     = 0
io                      = 0
altio                   = 0
int13fakeio             = false
int13fakev86io          = false
enable pio32            = false
ignore pio32            = false
cd-rom spinup time      = 0
cd-rom spindown timeout = 0
cd-rom insertion delay  = 0

[ide, quinternary]
enable                  = false
pnp                     = true
irq                     = 0
io                      = 0
altio                   = 0
int13fakeio             = false
int13fakev86io          = false
enable pio32            = false
ignore pio32            = false
cd-rom spinup time      = 0
cd-rom spindown timeout = 0
cd-rom insertion delay  = 0

[ide, sexternary]
enable                  = false
pnp                     = true
irq                     = 0
io                      = 0
altio                   = 0
int13fakeio             = false
int13fakev86io          = false
enable pio32            = false
ignore pio32            = false
cd-rom spinup time      = 0
cd-rom spindown timeout = 0
cd-rom insertion delay  = 0

[ide, septernary]
enable                  = false
pnp                     = true
irq                     = 0
io                      = 0
altio                   = 0
int13fakeio             = false
int13fakev86io          = false
enable pio32            = false
ignore pio32            = false
cd-rom spinup time      = 0
cd-rom spindown timeout = 0
cd-rom insertion delay  = 0

[ide, octernary]
enable                  = false
pnp                     = true
irq                     = 0
io                      = 0
altio                   = 0
int13fakeio             = false
int13fakev86io          = false
enable pio32            = false
ignore pio32            = false
cd-rom spinup time      = 0
cd-rom spindown timeout = 0
cd-rom insertion delay  = 0

[fdc, primary]
enable                 = false
pnp                    = true
irq                    = 0
io                     = 0
dma                    = -1
int13fakev86io         = true
instant mode           = false
auto-attach to int 13h = true
mode                   = ps2
chip                   = 82077aa

[4dos]
rem = This section is the 4DOS.INI file, if you use 4DOS as the command shell

[config]
rem         = This section is DOS's CONFIG.SYS file, not all CONFIG.SYS options supported
break       = off
numlock     = 
shell       = 
dos         = high, umb
fcbs        = 100
files       = 200
country     = 
lastdrive   = a
set path    = Z:\;Z:\SYSTEM;Z:\BIN;Z:\DOS;Z:\4DOS;Z:\DEBUG;Z:\TEXTUTIL
set prompt  = $P$G
set temp    = 
install     = 
installhigh = 
device      = 
devicehigh  = 

[autoexec]
imgmount a ".\windows98_se.img"
imgmount c "..\Games\Gruntz (1999)\gruntz.vhd"
imgmount d "..\Games\Gruntz (1999)\gruntz.iso"
boot c:

Output log

No response

Additional information

Here's the log file (was way too big to just paste the text): gruntz.txt

Have you checked that no similar bug report(s) exist?

Code of Conduct & Contributing Guidelines

emxd commented 8 months ago

Try using vendor S3Trio64 drivers instead of vbemp. Vbemp doesn't have cursors.

tomster785 commented 7 months ago

I just tried that, I used both the drivers that come with the windows 98 SE disc and I also downloaded drivers from here: https://www.dosdays.co.uk/topics/Manufacturers/s3_downloads.php#Trio32

But that introduced an entirely different issue which is that I can't get the desktop settings to be anything above 16 colours or 640x480 otherwise windows won't boot the first time and when I try the second time I get an error. I've tried 256 colours, I've tried 16 bit, I've tried 800x600, I've tried 1024x768, and every combination but I always get the same issue. If I try to increase the colour depth or the resolution then windows boots with an error. And on top of that when the game attempts to launch it says it cannot create the DirectDraw object.

error when booting windows: gruntz1 the max display settings I can use: gruntz2 error when launching the game: gruntz3

Is it possible that the drivers I have tried to use may be the issue or does the emulated s3trio64 need vbemp driver to go above those settings and use ddraw?

Also I'm a little confused as to what you mean when you say vbemp doesn't have cursors because the windows 98 cursor appears and works as expected. Also in the other games that I've installed the cursors work as expected too (like Fallout 1 and 2, as well as Diablo 1 which is the extent of what I've tried so far with dosbox-x). Some clarification on that to help me understand better would be highly appreciated.

Thanks for your help!

emxd commented 7 months ago

I used both the drivers that come with the windows 98 SE disc

Yeah, these are the ones I meant. The drivers that come packages with Win98 definitely work correctly with dosbox-x, if possible reinstall win98, it's easier than trying to find a needle in a haystack :) I suppose you're familiar with the installation guide that's on wiki. but just in case -> https://dosbox-x.com/wiki/Guide%3AInstalling-Windows-98

Also I'm a little confused as to what you mean when you say vbemp doesn't have cursors

I meant that vbemp doesn't have hw acceleration on cursors. If a game doesn't use its own software cursor a typical effect is cursor flickering or even a completely invisible cursor. I'm not familiar with the game, it's just the first thing that came to my mind. It's possible that the S3 driver will also solve your other graphical issues.

tomster785 commented 7 months ago

Yeah, these are the ones I meant. The drivers that come packages with Win98 definitely work correctly with dosbox-x, if possible reinstall win98, it's easier than trying to find a needle in a haystack :) I suppose you're familiar with the installation guide that's on wiki. but just in case -> https://dosbox-x.com/wiki/Guide%3AInstalling-Windows-98

Fair enough, I'll try reinstalling windows 98, I will edit with what I found.

I meant that vbemp doesn't have hw acceleration on cursors. If a game doesn't use its own software cursor a typical effect is cursor flickering or even a completely invisible cursor. I'm not familiar with the game, it's just the first thing that came to my mind. It's possible that the S3 driver will also solve your other graphical issues.

Ah I see, just for the sake of curiosity I tried disabling hardware acceleration through dxdiag. It didn't change anything.

But based on the Fallout 2 issue I raised that you helped with, I decided to try a standard pentium instead of mmx since this game supports that and there were issues in Fallout 2 with that. Which did fix the corrupted graphics on the intro videos: gruntz4

Which indicates that the issue is with MMX emulation again like it was with my Fallout 2 issue.

The cursor problem is still there though, so as I said I'm going to try reinstalling windows with the standard s3trio64 drivers and see what happens. I will edit with the results.

Also if you're not familiar with the game its not exactly an amazing game. Its fun, but for me its mostly nostalgic and it's dumb sense of humour appeals to me a lot haha.

EDIT: one thing I forgot to mention, the game requires directx6. Could this be an issue? As far as I'm aware the s3trio64 and voodoo 1 don't support that. I may be wrong though. I'm not sure if the vbemp card adds support for that. I was looking into this while trying to install Diablo 2 because it supports directx7, which is another issue I'm going to raise soon because that game is completely broken, but I have to test some things first.

emxd commented 7 months ago

one thing I forgot to mention, the game requires directx6. Could this be an issue?

That depends on whether the game requires HW accelerated DX features or not. Looking at the videos on youtube, it looks like a simple 2D DirectDraw game? So that might work correctly.

The cursor problem is still there though,

I pulled some videos from youtube, the game uses a system cursor. That's 99% driver problem. I think with the S3 driver it should work correctly.

Which indicates that the issue is with MMX emulation again like it was with my Fallout 2 issue.

Well that settles it then, no MMX core until the emulation is fixed...

tomster785 commented 7 months ago

I've been trying to get the original drivers to work with a higher resolution and colour depth for hours and feeling like I was getting absolutely nowhere. I reinstalled windows 98 3 times. I tried the included drivers and two different versions of the vendor drivers, and generally pulled my hair out in impotent frustration. I googled everything that I could think to google until I finally got a hint. I managed to get it working by disabling hardware acceleration, and now after all that I could finally use 1024x768 at 16bit colour depth. All in all it was a gruelling and confusing experience that made me thankful that we no longer live in 1998...

Anyway the cursor is still flickering in the menu, and as a result, I have decided to jump off a bridge.

emxd commented 7 months ago

I tried the included drivers and two different versions of the vendor drivers, and generally pulled my hair out in impotent frustration. I googled everything that I could think to google until I finally got a hint.

That seems strange, I'm using Win98SE from winworldpc.com and the driver works correctly right off the bat, nothing special required.

config that I'm using -> https://pastebin.com/XiS0mQkb

I've got hw acceleration enabled, the game works correctly including the main menu cursor. No graphical problems. I didn't even install a single driver, I'm just using the default Windows ones The only thing I installed is dx dec 2006 (I don't think this matters though) and the game itself (didn't install directx that's packaged with the game, win98se already comes preinstalled with dx 6.1).

(no mouse cursor flickering) dosbox-x_3yMDuUtW0t

(dx acceleration enabled, although the game works correctly even if it's disabled) dosbox-x_Im4fdjIyW7

I guess I could try win98se with the default directx.

emxd commented 7 months ago

It works correctly even with the Windows preinstalled DirectX 6.1 (as expected)

https://github.com/joncampbell123/dosbox-x/assets/6156912/751b9b7f-40cf-4b04-82fb-9385b9bc33d5

Edit: Are you using Win98SE? If you open a command prompt and enter ver, do you get 4.10.2222?

tomster785 commented 7 months ago

My dxdiag looks almost exactly the same and yeah I'm using SE, I knew I installed that but to check anyway I opened an MS-DOS prompt and used the ver command and got that result. I have all the same settings as you do, but I have made changes for my preference, so I used a default config and applied exactly the same settings as you to rule out a config problem, and the problem is still there. I even tried setting the desktop resolution to 640x480 so I had the same display settings as you. No change.

There is one minor difference though, my S3 Trio64 is reporting 1.5MB Approx. Total memory.

Could you please tell me what your specs are for your PC including your monitor (since I'm wondering if refresh rate could be a cause)? And did you install anything else aside from the game post install? Aside from Directx as you have already mentioned? Is it possible that aside from the config settings you have provided you have some non-default options? Also which exact disc image did you use? I know that OEM and retail are basically the same but I want to make sure that I reinstall with exactly the same image that you used. And also did you follow the guide to the letter to install? If not could you explain what steps you took to install Windows 98? I'm also wondering if maybe we're using slightly different builds of dosbox? Are you using the "dosbox-x-mingw-win64-20240301225703.zip" release? And are you using the sdl2 version within that release?

I'm at a total loss now, and I just want to rule out everything that I can. Thank you for your help and going through this effort, I really appreciate it!

emxd commented 7 months ago

Intel i5-12400/UHD 730/16GB RAM Win11 23H2. 1920x1080x60Hz

I don't think that matters though, you have some strange problem with the built-in Win98 S3 driver.

I'm using SDL2 build of this version

And did you install anything else aside from the game post install? Aside from Directx as you have already mentioned?

No, in the video not even a newer DX is installed, just Gruntz.

Also which exact disc image did you use?

OEM, the most downloaded one on winworld.

tomster785 commented 7 months ago

Okay thank you, I've downloaded that exact image (although I'm pretty sure that's what I had already, I downloaded it a few years ago but I remember getting the OEM version from winworld, but maybe I'm misremembering so I'm downloading it again just to make sure) and I have made a new disk image again and I have used entirely default settings apart from what is mentioned in the installation guide and in your config (aside from openglnb, I'm using opengl, I already tried that just to make sure but no difference as I would expect).

And it worked. What's interesting though is that the same image that worked doesn't work with my old config. So there is clearly some sort of issue with my config, so I'm going through the process of comparing all of the differences to work out what the issue is exactly.

tomster785 commented 7 months ago

Okay, I found the issue. In my config file, I had vsyncmode set to host, and setting vsyncmode to off allowed me to set the desktop resolution to 1024x768 at 16 bit colour depth. After testing with the harddrive image that had a fresh install which I knew worked, I then tested with my original image file with the VESA VBEMP driver and the flickering returned. So, I went into safe mode, removed the device in device manager and deleted the driver files from the inf directory to make absolutely sure that I had totally removed the drivers and manually reinstalled the s3 drivers from my new windows 98 iso (it probably would have worked with my original iso, but I just wanted to be sure). And now it works. On top of that, dxdiag is now correctly recognising 2.5MB of VRAM as was the case with your install.

So this means that something to do with the host vsyncmode is interfering with the display driver, or at least the S3 display driver and I think it has something to do with the vram in particular because as I mentioned before, dxdiag was only reporting 1.5mb of vram as opposed to 2.5mb as it is now and as you have demonstrated with your video. I have also tested the other options, when vsyncmode is set to either on or force, it still works as expected.

It also seemed to interfere with the installation of the driver and the installation of windows itself because restarting windows 98 is a problem when you have vsyncmode set to host but it restarts just fine with any other setting. This means that I'm probably going to have to make a new parent image of windows 98 and new child images for all of my games and reinstall everything... fun. Honestly that can wait for a while. I've done enough installing windows and games for today. Its going to be a while before I consider going through that rigmarole again.

Thank you for your help emxd, you've been incredibly helpful with me today and I really appreciate it. We've also isolated two (maybe three) bugs as well including the Fallout 2 issue with MMX emulation and the corrupted video playback for this game with MMX emulation (or at least the general area of what the issues might be), so hopefully this helps the development of dosbox-x too.