This is necessary for devices with different i/o port masks.
- BX_MAX_IO_DEVICES increased to 30
- io_len mask fixed and unnecessary io_len checks removed in
* biosdev.cc
* cmos.cc
* dma.cc
Unallowed cases are now handled in devices.cc and cause a BX_ERROR.
- io_len mask fixed and unnecessary io_len checks removed in
* devices.cc
* extfpuirq.cc
* gameport.cc
* ne2k.cc
* pit.cc
* pit_wrap.cc (i/o register function calls replaced by DEV_* macro calls)
- TODO: implement this in all other devices
The colors 0..7 appear in high intensity and the colors 8..15 blink using
low / high intensity. Blinking is not present in Bochs yet. For now, the 3rd
bit of the attribute will be inverted.
- attribute controller mode control register: only a change of the internal
palette size bit should force a redraw
- skip screen update if video is disabled
plane enable and color select
- a screen update is necessary after updating the charmap
- lots of missing parentheses added (found after disabling VGA_TRACE_FEATURE)
- BX_DEBUG and BX_INFO messages improved
- update function: the 'for' loop now initializes and increments the variables
xti and yti
- VBE: banked writes are now ignored in LFB mode, LFB writes are ignored in
banked mode (based on SF patch #742782)
- calculation of the VBE virtual height for >8bpp fixed
- visible screen size must be recalculated after changing the virtual width
- modify standard VGA register when enabling a VBE mode (some test applications
expect this behaviour)
- BX_INFO messages in the VBE code fixed
DEV_kbd_gen_scancode() is called instead of DEV_kbd_put_scancode(). This
change enables the support for different scancode sets. The win32 scancodes
are now converted to BX_KEY_* values (partially copied from gui/win32.cc)
- new text mode features: line offset, cursor size, font height
- key handling rewritten (taken from x.cc)
- headerbar now working
- headerbar colors changed
- graphics modes > 640x480 now cause a BX_PANIC
* configure.in: readline check is only necessary if the debugger is enabled
(patch from Jeroen Janssen)
* iodev/Makefile.in: dependencies updated after adding gameport device
- don't clear the VBE memory if the new flag VBE_DISPI_NOCLEARMEM is set
- vbe_bpp_multiplier for the 4bpp mode set to 1 (usually unused, but this value is save)
(based on a patch from Christopher Nelson <paradox@BBHC.ORG>)
* the win32 gui changes the bitmap settings using the bpp argument
* added stubs for all guis except win32
* descriptions of function dimension_update() updated
font usage)
- horizontal and vertical pel panning in text mode implemented (without windows
fonts only)
- separate bitmap for the textmode cursor no longer necessary
- text_update(): unused variable new_start removed
compile time. The old version used this fonts for char heights smaller 14.
If the Windows fonts are enabled, the font heights 12, 14 and 16 are used.
These features are not available in that case:
* charmap change
* char width switch 8/9
* horizontal and vertical pel panning
If the Windows fonts are disabled, the changeable guest font is used and all
implemented features are available. This is the default setting.
TODO: implement horizontal and vertical pel panning
FIXME: Should we add a bochsrc option to control the font usage?
- invalidate character at previous and new cursor location before entering the
update loop
- cursor drawing moved into the update loop
- variables for previous cursor position renamed
- invalidate character at previous and new cursor location before entering the
update loop
- cursor drawing moved into the update loop
- speed optimizations in function DrawBochsBitmap() (malloc/free removed)
- description of function text_update() updated
(using 72 Hz vertical frequency). The vertial retrace phase is often used for
vga register or memory manipulations to reduce screen flickering.
- update(): check variable vga_mem_updated before everything else
running on a 32 bit host. The problem was that the FPU code uses native pointers to
represent addresses. The assumption that an emulated address is the same size as a
native pointer breaks down when emulating 64 bit addresses on a 32 bit host. The
patch replaces the occurrences of such an address with a bx_address type.
Once this patch has been reviewed by other developers, it will be committed to the
main cvs branch.
(without localized variables)
- start address support for CGA modes added
- start address support for mode 13h completed
- clearing the text snapshot is not necessary after a start address change
(set needs_update to 1 in graphics mode only)
* changed all %ll format descriptions to FMT_LL macro so that
Microsoft Visual C works correctly (it uses %I64)
* missing type conversions added
* cdrom.cc: variable types for win32 fixed
* removed some unused variables in eth_win32.cc and harddrv.cc
* added missing includes in make_cmos_image.c and niclist.c
* support for different resource compilers added (rc / windres)
* bochs must be linked with advapi.lib for registry access
* optimization flag changed to /Ox
* symbols BX_HAVE_MKSTEMP, BX_HAVE_SYS_MMAN_H and HAVE_ETHERTAP must be set to 0
* BX_HAVE_REALTIME_USEC definition fixed for MSVC
* vmware3.h: definition of COW_Header fixed for MSVC
- maximum number of text lines changed to 100 (CGA "graphics" mode 160x100)
- size of text snapshot buffer changed to 32k (size of MDA/CGA text memory)
- removed obsolete macro CGA_TEXT_ADDR()
in text mode. The new variables 'text_rows' and 'text_cols' are used in the
text_update() function.
- desriptions of the functions text_update() and dimension_update() updated
These changes are based on the SF patch #742670. It did not work with
plugins disabled.
Here is the descriiption of patch #742670:
the library dependencies (see objdump -p file) in the
main bochs binary and the gui plugins are wrong:
- the gui plugins don't depend on their respective gui
libraries
- the main bochs binary depends on all the gui libraries
this doesn't seem much of a problem, since the needed
libraries are loaded anyway, but it's problematic when
building packages for binary distribution of bochs.
in Debian, the package building tools will set package
dependencies according to the library dependencies of
each file, so the result is:
- the main bochs package depends on all libraries. this
includes libwx, libsdl, libncurses and xlibs.
- the indivudual plugin packages don't depend on any
gui library
so when a user wants to run bochs with the curses gui
and installs the bochs-curses package, he/she will be
forced to install Xfree86, WxWindows and GTK+ on
his/her system.
the attached patch fixes the problem by moving the
linker flags related to GUI libraries to the right
makefile (gui/Makefile.in)
in text mode. The new variables 'text_rows' and 'text_cols' are used in the
text_update() function.
- optimizations in function UpdateScreen()
- desriptions of the functions text_update() and dimension_update() updated
It's not clear what the correct behavior is in that case, (we
clearly don't currently handle it correctly) so
simply avoiding it is the easiest thing to do. As such, this
option is ON by default.
* renamed variables textres_x and textres_y to text_cols and text_rows
* use text_rows in function text_update() instead of the function argument
(unused for now - should be removed)
* fixed a warning (bochs_icon_bits)
cursor enable/disable support implemented
- function dimension_update() now calculates the number of visible rows and
columns in text mode
- draw a border if the physical screen is larger than the bochs text screen
- initialize color pairs only when color support is present
- german umlaut characters added in function get_term_char()
- function get_term_char(): unsupported characters are now replaced by spaces
and implemented in SDL
* sequencer controller register 0x01 bit 0 controls the width of the characters.
This value is used to calculate the screen width.
* attribute controller register 0x10 bit 2 controls the appearance of graphics
characters (ASCII 0xC0 - 0cDF). A change of this value forces a charmap update
to rebuild the font bitmaps.
* the SDL display library uses the new feature described above
* the other display libraries recalculate the screen width, since they are using
a fixed font width of 8 for now.
- VGA: attribute controller register 0x10 bit 2 (enable_line_graphics) does not
switch the palatte in CGA mode
check.
Commented out a number of instances of invalidate_prefetch_q(),
for branches which do not change CS since the EIP window mechanism
takes care of validating that EIP lands in the current page or not
in the main cpu loop anyways.
Fixed a couple cases (v8086 mode and real mode) of loading CS where
the EIP page window was not invalidated in segment_ctrl_pro.cc.
That may fix some aliasing problems reported before (OS2).
- line offset handling simplified
- calculate textres_x and textres_y after changing the font dimensions
- unnecessary size check in function dimension_update() removed
ATTENTION: the Elpin VGA BIOS uses a delay of 280 vertical retraces after
displaying the copyright text
- changes to the horizontal or vertical pel panning registers force a redraw of
the screen
- screen update problems in text mode fixed
- sort order of the CRT register write cases changed
- fixed calculation of the byte offset for standard VGA modes if line compare
is active
- force a resize of the screen after a change of the display mode (text/graphics)
- mem_write(): skip the rotation of the cpu byte if 'data_rotate' is 0
You can now choose for each disk on the ata interfaces the
disk mode, between :
- flat : one file flat layout
- concat : multiple files layout
- external : developer's specific, through a C++ class
- dll : developer's specific, through a DLL
- sparse : stackable, commitable, rollbackable
- vmware3 : vmware3 disk support
- undoable : flat file with commitable redolog
- growable : growing file
- volatile : flat file with volatile redolog
- z-undoable : gziped flat file with commitable redolog
- z-volatile : gziped flat file with volatile redolog
A new "bxcommit" utility can merge commitable redologs to
flat images.
Notes from the author:
Here is another one of my speed up patches. Unlike my previous speedups
this one will help more platforms than just X86. It cleans up the Data
Xfer instructions. Since the Data Xfer instructions are the most often
executed instructions it gives a noticable boost in speed. The basic
optimization technique was to eliminate intermediate variables and pass
a pointer to the final destination or original source to the
read_virtual_whatever and the write_virtual_whatever functions.
If set, the screen size will be horizontally doubled in CGA and standard
VGA modes.
- doublescan feature for CGA mode 320x200x4 added
- removed trailing spaces in VBE update code
the address offset between two lines on the screen in all VGA modes.
It depends on the CRTC offset register value and the address mode (byte, word,
dword)
- moved screen update code to the end of the write handler. If a register change
should force a redraw of the screen, the variable 'needs_update' must be set
to 1.
- changes to the attribute controller palette index register now force a redraw
of the screen
- modeX: calculation of the tile numbers fixed
* check memory mapping before everything else
* read mode 1 optimized using a part of patch.vga-mode2-speed-dohzono
- function mem_write(): check memory mapping before everything else
- writes to the CRT registers are handled only if the new value differs
- a CRT start address change forces a redraw of the screen
with 100 rows and a char height of 4
- raster operations AND, OR and XOR in write mode 2 implemented (part of patch #707931)
- use the vga_tile_updated array in modeX like other modes do
- small optimizations in the graphics update code
I've got a game that uses OPL2 functions. It's still not
working yet, but this patch brings it closer. Using Jeffrey S.
Lee's "Programming the AdLib/Sound Blaster FM Music Chips (Ver
2.0)"[1] as a reference, I found an inversion of the OPL timer
masks in the sb16 code. Without this patch, the emulator uses
the wrong bits for masking, and completely botches the flags
register (note the bitwise AND vs OR).