wrong. Now the bits are working right, but loopback is still not present.
- loopback should be active if DCR is in loopback mode and TCR loop mode is > 0
- reading the FIFO is only valid in loopback mode (causes a BX_ERROR for now)
- evaluate_media(): new variable 'raw_floppy' indicates raw floppy access on win32
- evaluate_media(): try to read the first sector determine the presence of the
floppy media (raw access on win32)
- the line status register only causes an interrupt if an error occurs
- missing initial baurate value added (using 115200)
- baudrate divisor value checks fixed
- new function lower_interrupt() lowers the irq line if no interrupts are pending
- IER write code: missing conditions for lower_interrupt() added
- symbol BX_SERIAL_CONFDEV removed (now using BX_N_SERIAL_PORTS)
on the IIR (only depends on the IER).
- IER write code rewritten. The "THR empty" interrupt will be generated immediately
after enabling this interrupt reason.
- pit: and time0: options are still supported but deprecated
- warn when parsing deprecated directives
- fix wrong number of ata_device_translation_names
- still to do:
- setting time0 to utc is not yet supported
- the man page, user guide and .bochsrc still need to be updated
with the new options
Syntax error fixes:
[x] fixed error with array bounds in virt_timer.cc
[x] fixed error with returning value from void functions
[x] fixed const class member initialization (according C++ standard)
[x] for-loop local variable declaration moved out of loop
(for VC 6.0 compliance)
Removed already committed patch from Dirk Thierbach
Replaced the patch from Vitaly Vorobyov by set of splitted patches.
Now any of his patches could be committed separatelly from others !
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
* 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)
(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
(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()
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.
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
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.
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).
double width)
- cleanup in modeX emulation similar to mode 13h
- consider start address in function mem_write for VGA modes
- register 0x03c8 is readable, too
- clear tile array when switching to graphics mode, clear text snapshot when
switching to text mode, do the same when changing the palette or disable video
- simplified the function determine_screen_dimensions()
- fixed the code for the CGA mode 640x200x2 in update() and mem_write()
- it works only on x86 with gcc2.95+
- uses the GCC function atribute "regparm(n)" to declare that certain
functions use the register calling convention
- performance improvement is about 6%