bug #429448. What is strange about this problem (on OpenBSD) is that the
compile and link goes fine, but when you execute your first readline library
function it does a dynamic link and crashes on the spot. Many autoconf
tests only compile and sometimes link the test program, but this test
compiles, links, and runs it.
[ #433759 ] virtual address checks can overflow
> Bochs has been crashing in some cases when you try to access data which
> overlaps the segment limit, when the segment limit is near the 32-bit
> boundary. The example that came up a few times is reading/writing 4 bytes
> starting at 0xffffffff when the segment limit was 0xffffffff. The
> condition used to compare offset+length-1 with the limit, but
> offset+length-1 was overflowing so the comparison went wrong. This patch
> changes the condition so that it supports all segment limits except for
> sizes 0,1,2,3 bytes. Dave and I figured that these sizes would not be
> needed, while size 0xffffffff is used quite a lot.
I still need to do add some commands from older specs that are obsolete
(and not listed) in ATAPI-6.
- commands that aren't in the spec will still panic.
- fill in names from spec on various commands
- add command aborted for 0x08 device reset on disks (it's only for ATAPI)
- add command aborted for 0xe1 idle immediate
media status to 0 then 1 (equivalent to removing then inserting a disk).
Then it calls the UI function bx_gui.update_floppy_status_buttons()
if the interface has been initialized already.
has run. This ensures that the prev_eip and prev_esp that is used
for tracing and breakpoint checks is correct even in the cycle after
an interrupt or trap.
in performance, but I did not check the debugger carefully enough while
testing them. Part of the performance gain in main.cc revision 1.33 and
cpu.cc revision 1.9 was to allow bochs to stay in the cpu loop forever
in a single processor simulation. (In a multiprocessor simulation it must
quit the loop periodically to give the other procs a chance to simulate
too. Cooperative multiprocessing?) In the process, I restored calls
to BX_TICK in the cpu loop for 1-proc simulation only, and removed them
from the outer loop. (See main.cc, since it was done right.) However
I never made the equivalent change in the debugger code, so in the
debugger, there were ticks coming from the cpu loop and then an
equivalent number of ticks coming from the debugger code just outside
the cpu loop. The result was, of course, that simulation time went
at 2x the correct rate. This simulation time speedup was made even
worse because the continue loop in the debugger would increment ticks
by one quantum (5 at the time) no matter how many instructions had
actually been executed. So in trace mode in particular, the way it was
implemented before today, cpu loop would run only one instruction at
a time and the simulation time would get incremented 1+5=6 times! One
tick from the cpu loop, then 5 erroneous ticks from the continue loop.
Anyway, much of this nonsense should be fixed now. For uniprocessor
simulations, only the cpu loop does ticks (for best performance). For
multiprocessor simulations, the cpu loop exits after one quantum and
the code that calls the cpu loop gets to increment ticks instead.
> This patch fixes a number of debugger problems.
> - with trace-on, simulation time would pass 5x faster than usual, so
> interrupts and other timed events would happen at different times
> - with trace-on, breakpoints were ignored
> - with trace-on, control-C would not stop the processor and return to the
> debugger.
>
> This patch changes the execution quantum for the debugger to 1, which means
> that cpu_loop is asked to do one instruction at a time. This may cause
> bochs with the debugger to be slower than before.
>
> I haven't tested without the debugger yet, so I don't know if the timing
> of events matches or not.
line, like this:
<HTML
><HEAD
><TITLE
>FreeBSD</TITLE
>
Glimpse, which is indexing our website, finds this very confusing and
it cannot pick out the title from this mess. This script takes a list
of HTML files on the command line and attempts to make the <TITLE> tag
look more normal so that glimpse can understand it.
WARNING: This is a hack. It's made to work on docbook generated html, but
may do strange things on anything else.
instructions, configure options
- added a transcript of a successful compile, since that gives all the
commands and shows people where their compile went wrong.
This is a patch from Volker Ruppert <Volker.Ruppert@t-online.de>, who
comments: "The fdisk command reports an unusable second harddisk if the cdrom
is enabled. This patch helps, but I don't know if it is the right way."
> I have inspected the header of output file and several sample MIDI files. I
> have found two different bytes in the header. After I have changed this
> bytes Winamp could play the output file, but it showed a track time of
> 0:00. The Windows Media Player still doesn't like the file.
in an output format similar to gdb (when you do info all-registers).
Also, if you do "info all" you get the CPU registers and the FPU
registers.
- added bx_cpu_c method called fpu_print_regs, which is implemented
in wmFPUemu_glue.cc
posted to bochs-developers on Wed, 29 Aug 2001 00:08:45 +0100
David Haslam wrote:
> I have been looking at the keyboard problem with Minix, which for
> those that haven't tried Minix results in every key press giving the
> response: ^@
>
> I am aware of the comments in the changelog that suggest removing 2
> keyboard ACKs in iodev/keyboard.cc, but this is a bit of a hack,
> (which is presumably why it was never incorporated).
>
> The problem seems to be that the Minix keyboard driver doesn't obey
> the rules, and Bochs doesn't model the 8042 accurately. When issuing
> commands to set the LEDs, Minix polls the 8042 output data register
> waiting for an ACK even though the OBF flag isn't set.
>
> Bochs returns zero under these circumstances, which seems to
> trigger obscure behaviour that messes up the Minix internal
> keyboard queue. I don't fully understand why Minix breaks, but I
> think the fact that the ACK generates an interrupt, and Minix treats
> it as a scan code also has something to do with it.
>
> In any case, I believe, the fix is for Bochs to return the output
> buffer contents, regardless of whether the OBF flag (called outb in
> Bochs) is set.
>
> I expect the real hardware allows the register to be read at anytime,
> and with this fix we are modelling the behaviour of the hardware more
> accurately.
>
> I have tested it with Minix 2.0.0. Also DOS 6.22 still works after this fix.
> Does anyone think this will break anything else?
>
> This diff is against the latest CVS of iodev/keyboard.cc, version 1.29
> The last part of the diff is a minor fix to an unrelated debug print.
Fixed a "feature" in pc_system.cc with setting timers to small values
that can cause bochs to hang.
Significantly improved the performance of the new PIT.
It's probably ready to become the default now.
Added a preliminary implementation of the slowdown timer
that Bryce and I had talked about.
--with-amigaos is allowed and sets up the makefiles correctly. It
defines a symbol called BX_WITH_AMIGAOS, which should be used in
#if..#endif constructs that are specific to amigaos.
- if --enable-cdrom is used with --with-amigaos, the cdrom_amigaos.o
object file will be added to CDROM_OBJS in the iodev makefile.
by thomas.petazzoni@meridon.com. Bryce introduced this bug in
revision 1.9 when split the code into separate #ifdefs for single
CPU and multiple CPU. Comments on the patch are:
> The following patch addresses a bug concerning the exception 1 (debug)
> which is being raised during HALT under certain conditions. It
> appears only on recent versions (1.2.1 or last CVS), and not on
> version 2000-0104.
Also added a hack to keep the OpenBSD timer problem from filling the log.
The new PIT seems to work, but until some
enhancements are made to the way the timers
and devices.cc work, it'll be slower than
the old one.
- add bx_instr_inp2 and bx_instr_outp2 which actually report the
values that were used in the I/O operation! I made new macros
and functions instead of changing the existing ones on the slight
chance that somebody already has code that uses the old ones.
The original code for determining the capacity of a disk only worked for
ATAPI drives, leaving us poor SCSI users in the cold. The code uses the
standard Linux CD-ROM driver routines, so it should work on any supported
drive. It's basically just a copy of Keith Jones FreeBSD code.
appeared in the guest OS. Full description:
> After much grovelling through the 8390 docs, I think this is the
> correct answer to the odd-length packet problem I was having with
> the ne2k driver under Linux.
>
> According to the datasheet, the 8390 always accesses its buffer
> memory in word-size chunks if the WTS bit of the DCR is set. So
> it will always send a word to the host bus interface if WTS==1.
> It's up to the host bus interface to deliver the the number of
> requested bytes to the host. So disallowing a byte read when the
> WTS bit is set is wrong (IMO) as the bus interface may allow it,
> as the NE2000 appears to.
>
> The patch to ne2k.h bumps the receive buffer memory size to 32K.
> This fixes the "out-of-bounds chipmem read" errors I was getting.
>
> Can someone with an NE2K datasheet verify these changes? They
> jibe with the Linux ne.c driver, anyway.
for Linux!!! I tested this using host OS kernel 2.2.14, and was able
to use telnet, ftp, irc, lynx, etc. Because it is a packet filter
solution, you aren't able to talk to the host machine, only to other
machines on the network. The patch itself is in
patches/patch.ethlinux-splite.
X servers that I've seen, however on other X servers it makes all
key mappings into absolute junk. We need to continue to work on this
patch to support all X servers and all key maps.
Author: Bogdan Diaconescu <bogdand@rds.ro>
This was submitted to the plex86 mailing list June 25, 2001, and
adapted for Bochs by Bryce Denney <bryce.denney@bigfoot.com>
<dieter.mittelmaier@freenet.de> which fixes X11 keyboard mapping
on German keyboards using Keycodes instead of Keysyms.
His comments are:
> I mapped your BX_KEY-defines in gui.h to values from XFree
> ../keycodes/Xfree86. Keysyms in x.cc would now translated
> to keycodes. Now I can use german or us keyboard-layout in
> win95 and all works well.
> Note: Changing keyboard layout in win95 to en works too
> Also you must change keyboard setup in win95 to AT-Enhanced 101/102 keyboard
cylinders, heads, and spt of each hard disk to be 1 instead of 0. This
caused the BIOS to report the existence of the hard disks, even when
they were never configured. The most obvious symptom of this problem
was "read multiple issued to non-disk" when a cdrom was enabled, which
happened because the BIOS tried to send hard disk commands to the CDROM.
which notifies them that the mouse_enabled bit has changed. Now that
mouse_enabled can be initialized or modified by parameter events in
addition to GUI events, the guis must be prepared for it. I have pasted
empty method definitions into mouse_enabled_changed_specific for all
guis except for X11, which I did the right way. The implementation
of this function must use the argument "val" rather than reading the
parameter.
which notifies them that the mouse_enabled bit has changed. Now that
mouse_enabled can be initialized or modified by parameter events in
addition to GUI events, the guis must be prepared for it. I have pasted
empty method definitions into mouse_enabled_changed_specific for all
guis except for X11, which I did the right way. The implementation
of this function must use the argument "val" rather than reading the
parameter.
goes in/out of mouse capture mode. This is critical because
bx_options.Omouse_enabled is used to control whether the mouse
events are sent into the hardware queue or not (keyboard.cc).
This is only a partial fix though, because changing the mouse
enabled setting in the control panel has no effect on the gui.
> The Linux 2.4.5 CD-ROM driver sends a READ_DISC_INFO command which caused
> an "unrecognized ATAPI command" panic. Looks like READ_DISC_INFO is only
> recognized by CD-R and CD-RW drives, so I ignore it for now. (I don't
> know if ASC_INV_FIELD_IN_CMD_PACKET is the right code, but it shouldn't
> matter to Linux anyway.)
control panel are all implemented as bx_list_c, and look much like
they did before.
- removed many hardcoded UI functions from control.cc, since the
much more general "text_ask" methods have replaced them.
- add range checking on integer parameter values. This exposed several
cases where my initial value for an integer parameter was not in range.
- cleaned up behavior of get/set methods. The get/set methods allow the
handler to override the value that is returned/set, or perform side
effects.
- the title parameter of a bx_list_c now defaults to the name.
- now bx_param_c fields that used to be private are protected instead
- removed references to bx_any
- moved definition of set_handler from siminterface.h to siminterface.cc.
I was considering with doing a "set" of the old value when the
handler is first installed, but that remains commented out.
- BX_BOOT_DISKA and BX_BOOT_DISKC are now 0,1 so that they can correspond
with the values of a bx_param_enum_c. For a while they were 0x00 and 0x80
corresponding to the numbering convention of the bios, but it didn't
really matter.
been converted into parameters temporarily have the letter "O" appended
to their name. I don't want to keep it this way, but it has helped
in the conversion process because the compiler refuses to compile the
old uses of the name. Before I started using the "O" trick, there were
many bugs like this: if (bx_options.diskc.present) {...}
This was legal with the new parameters, but it was testing whether the
parameter structure had been created, instead of testing the value of
the present parameter. Renaming present to Opresent turns this into
a compile error, which points out the incorrect use of the param.
- the "--disable-control-panel" no longer works, I'm afraid. I can no
longer support this and continue progress.
crash in the mouse code. The particular problem was that init_done
was never initialized to zero, but it always turned out to be zero
on my system. This may explain why it worked for me but crashed
for him.
bochs debugger needed to be updated in the same way. Instead of
using "bx_options.rom.path" as a string, it's now
bx_options.rom.path->getptr () to get the value of the parameter.
data structures, see bx_init_options in main.cc. The implementation
of this menu and all its choices is 17 lines long, see do_mem_options_menu
in gui/control.cc.
now the whole "Bochs Memory Options" menu uses new style parameters.
The next step is to remove the hardcoded stuff that generates and runs
this menu, and replace it with general menu building code. All you should
need to create this menu is the string "Bochs Memory Options", and the
IDs of the bx_param_c options that should appear on the menu. The
bx_param_c structure for each parameter tell what type it is, how to
display it, constraints on the value, what to do when the parameter
changes.
declared as bx_param_c * types in the bx_options structure. They are
initialized in main.cc (bx_init_options) with default values.
Access to parameters of this type should always be like this:
bx_options.mouse_enabled->get ();
bx_options.mouse_enabled->set (newval);
Eventually I will be transferring all options to this format.
when main.cc no longer had one. Now compiling with debugger is working
with the control panel. To get the control panel, you have to click
the snapshot button, and to get the debugger, you have to press ^C.
These should be better integrated (maybe a control panel menu choice
that jumps into the debugger and a debugger command that starts the
runtime control panel...)
better name given what the options actually are.
- now runtime menu behaves more like the others: it updates its floppy
disk image, etc.
- add "ask" as a legal choice for log action
- now runtime menu has both ways of editing log options
a read-only disk image. For systems such as DOS that actually use the
BIOS services, it was also necessary to add code in int13_diskette_function
to recognize a write-protected error and return the correct error
status code (AH=3, Carry Set).