Implemented 'realtime' option for the Voodoo update timer similar to the VGA
realtime option (enabled by default).
This commit is contained in:
parent
904984e795
commit
d462e52a9d
@ -411,15 +411,15 @@ vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
|
||||
#
|
||||
# UPDATE_FREQ
|
||||
# This parameter specifies the number of display updates per second.
|
||||
# The VGA update timer now uses the realtime engine and the default
|
||||
# value is 5. This parameter can be changed at runtime.
|
||||
# The VGA update timer by default uses the realtime engine with a value
|
||||
# of 5. This parameter can be changed at runtime.
|
||||
#
|
||||
# REALTIME
|
||||
# If set to 1, the VGA timer is based on realtime, otherwise it is based
|
||||
# on the ips setting. If the host is slow (low ips, update_freq) and the
|
||||
# guest uses HLT appropriately, setting this to 0 and "clock: sync=none"
|
||||
# may improve the responsiveness of the guest GUI when the guest is
|
||||
# otherwise idle. The default value is 1.
|
||||
# If set to 1 (default), the VGA timer is based on realtime, otherwise it
|
||||
# is driven by the cpu and depends on the ips setting. If the host is slow
|
||||
# (low ips, update_freq) and the guest uses HLT appropriately, setting this
|
||||
# to 0 and "clock: sync=none" may improve the responsiveness of the guest
|
||||
# GUI when the guest is otherwise idle.
|
||||
#
|
||||
# Examples:
|
||||
# vga: extension=cirrus, update_freq=10
|
||||
@ -429,11 +429,13 @@ vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
|
||||
#=======================================================================
|
||||
# VOODOO:
|
||||
# This defines the Voodoo Graphics emulation (experimental). Currently
|
||||
# supported models are 'voodoo1' and 'voodoo2'. The Voodoo2 support is
|
||||
# not yet complete.
|
||||
# supported models are 'voodoo1' and 'voodoo2'. The Voodoo2 support is not
|
||||
# yet complete. The 'realtime' option is very similar to the vga realtime
|
||||
# option. If set to 1 (default), the Voodoo timer is based on realtime,
|
||||
# otherwise it is driven by the cpu and depends on the ips setting.
|
||||
#
|
||||
# Examples:
|
||||
# voodoo: enabled=1, model=voodoo1
|
||||
# voodoo: enabled=1, model=voodoo1, realtime=1
|
||||
#=======================================================================
|
||||
#voodoo: enabled=1, model=voodoo1
|
||||
|
||||
|
@ -133,6 +133,7 @@ display
|
||||
voodoo
|
||||
enabled
|
||||
model
|
||||
realtime
|
||||
|
||||
keyboard_mouse
|
||||
keyboard
|
||||
|
@ -1,5 +1,5 @@
|
||||
.\"Document Author: Timothy R. Butler - tbutler@uninetsolutions.com"
|
||||
.TH bochsrc 5 "28 Mar 2017" "bochsrc" "The Bochs Project"
|
||||
.TH bochsrc 5 "30 Apr 2017" "bochsrc" "The Bochs Project"
|
||||
.\"SKIP_SECTION"
|
||||
.SH NAME
|
||||
bochsrc \- Configuration file for Bochs.
|
||||
@ -462,16 +462,17 @@ values are 'vbe' for Bochs VBE and 'cirrus' for Cirrus SVGA support.
|
||||
|
||||
update_freq:
|
||||
|
||||
Specifies the number of display updates per second.
|
||||
This parameter can be changed at runtime. The default value is 5.
|
||||
This parameter specifies the number of display updates per second.
|
||||
The VGA update timer by default uses the realtime engine with a value
|
||||
of 5. This parameter can be changed at runtime.
|
||||
|
||||
realtime:
|
||||
|
||||
If set to 1, the VGA timer is based on realtime, otherwise it is based on the
|
||||
ips setting. If the host is slow (low ips, update_freq) and the guest uses HLT
|
||||
appropriately, setting this to 0 and "clock: sync=none" may improve the
|
||||
responsiveness of the guest GUI when the guest is otherwise idle. The default
|
||||
value is 1.
|
||||
If set to 1 (default), the VGA timer is based on realtime, otherwise it
|
||||
is driven by the cpu and depends on the ips setting. If the host is slow
|
||||
(low ips, update_freq) and the guest uses HLT appropriately, setting this
|
||||
to 0 and "clock: sync=none" may improve the responsiveness of the guest
|
||||
GUI when the guest is otherwise idle.
|
||||
|
||||
Examples:
|
||||
vga: extension=none, update_freq=10, realtime=0
|
||||
@ -481,11 +482,13 @@ Examples:
|
||||
.TP
|
||||
.I "voodoo:"
|
||||
This defines the Voodoo Graphics emulation (experimental). Currently
|
||||
supported models are 'voodoo1' and 'voodoo2'. The Voodoo2 support is
|
||||
not yet complete.
|
||||
supported models are 'voodoo1' and 'voodoo2'. The Voodoo2 support is not
|
||||
yet complete. The 'realtime' option is very similar to the vga realtime
|
||||
option. If set to 1 (default), the Voodoo timer is based on realtime,
|
||||
otherwise it is driven by the cpu and depends on the ips setting.
|
||||
|
||||
Example:
|
||||
voodoo: enabled=1, model=voodoo1
|
||||
voodoo: enabled=1, model=voodoo1, realtime=1
|
||||
|
||||
.TP
|
||||
.I "keyboard:"
|
||||
|
@ -105,6 +105,11 @@ void voodoo_init_options(void)
|
||||
"Selects the Voodoo model to emulate.",
|
||||
voodoo_model_list,
|
||||
VOODOO_1, VOODOO_1);
|
||||
new bx_param_bool_c(menu,
|
||||
"realtime",
|
||||
"Voodoo timer realtime",
|
||||
"If enabled, the Voodoo timer is based on realtime",
|
||||
1);
|
||||
enabled->set_dependent_list(menu->clone());
|
||||
}
|
||||
|
||||
@ -186,13 +191,14 @@ void bx_voodoo_c::init(void)
|
||||
DEV_register_pci_handlers(this, &BX_VOODOO_THIS s.devfunc, BX_PLUGIN_VOODOO,
|
||||
"Experimental 3dfx Voodoo Graphics (SST-1/2)");
|
||||
|
||||
BX_VOODOO_THIS s.vdraw.realtime = SIM->get_param_bool("realtime", base)->get();
|
||||
if (BX_VOODOO_THIS s.mode_change_timer_id == BX_NULL_TIMER_HANDLE) {
|
||||
BX_VOODOO_THIS s.mode_change_timer_id = bx_virt_timer.register_timer(this, mode_change_timer_handler,
|
||||
1000, 0, 0, 0, "voodoo_mode_change");
|
||||
}
|
||||
if (BX_VOODOO_THIS s.update_timer_id == BX_NULL_TIMER_HANDLE) {
|
||||
BX_VOODOO_THIS s.update_timer_id = bx_virt_timer.register_timer(this, update_timer_handler,
|
||||
50000, 1, 0, 1, "voodoo_update");
|
||||
50000, 1, 0, BX_VOODOO_THIS s.vdraw.realtime, "voodoo_update");
|
||||
}
|
||||
BX_VOODOO_THIS s.vdraw.clock_enabled = 1;
|
||||
BX_VOODOO_THIS s.vdraw.output_on = 0;
|
||||
@ -409,7 +415,7 @@ void bx_voodoo_c::after_restore_state(void)
|
||||
// force update
|
||||
v->fbi.video_changed = 1;
|
||||
BX_VOODOO_THIS s.vdraw.override_on = !BX_VOODOO_THIS s.vdraw.override_on;
|
||||
BX_VOODOO_THIS s.vdraw.frame_start = bx_pc_system.time_usec();
|
||||
BX_VOODOO_THIS s.vdraw.frame_start = bx_virt_timer.time_usec(BX_VOODOO_THIS s.vdraw.realtime);
|
||||
mode_change_timer_handler(NULL);
|
||||
}
|
||||
|
||||
@ -526,7 +532,7 @@ void bx_voodoo_c::update(void)
|
||||
Bit8u * tile_ptr, * tile_ptr2;
|
||||
bx_svga_tileinfo_t info;
|
||||
|
||||
BX_VOODOO_THIS s.vdraw.frame_start = bx_virt_timer.time_usec(1);
|
||||
BX_VOODOO_THIS s.vdraw.frame_start = bx_virt_timer.time_usec(BX_VOODOO_THIS s.vdraw.realtime);
|
||||
|
||||
if (v->fbi.vblank_swap_pending) {
|
||||
swap_buffers(v);
|
||||
@ -601,7 +607,7 @@ void bx_voodoo_c::redraw_area(unsigned x0, unsigned y0, unsigned width,
|
||||
|
||||
Bit32u bx_voodoo_c::get_retrace(void)
|
||||
{
|
||||
Bit64u time_in_frame = bx_virt_timer.time_usec(1) - BX_VOODOO_THIS s.vdraw.frame_start;
|
||||
Bit64u time_in_frame = bx_virt_timer.time_usec(BX_VOODOO_THIS s.vdraw.realtime) - BX_VOODOO_THIS s.vdraw.frame_start;
|
||||
if (time_in_frame >= BX_VOODOO_THIS s.vdraw.vsync_usec) {
|
||||
return 0;
|
||||
} else {
|
||||
|
@ -37,6 +37,7 @@ typedef struct {
|
||||
bx_bool output_on;
|
||||
bx_bool override_on;
|
||||
bx_bool screen_update_pending;
|
||||
bx_bool realtime;
|
||||
} vdraw;
|
||||
int mode_change_timer_id;
|
||||
int update_timer_id;
|
||||
|
Loading…
Reference in New Issue
Block a user