Commit Graph

472 Commits

Author SHA1 Message Date
Bryce Denney
8dc67c7623 - cygwin experiment. Since dlltool cannot accept any -I's or -L's,
I'm trying to split the link command into one variable of LDFLAGS
  and another variable of just objs and libs.
2002-10-28 08:24:24 +00:00
Bryce Denney
13d1113b36 - this has been checked in now. removing. 2002-10-25 11:49:27 +00:00
Bryce Denney
605b88ec2f - the plugin merge broke all sorts of things in this patch. I cleaned
it up and this version applies cleanly again.  If testing goes well
  I will commit it ASAP.
2002-10-25 03:40:57 +00:00
Bryce Denney
d8aace9898 Remove the patch from CVS. To get the final plugins patch, do
cvs upd -p -r1.1 patches/patch.final-from-BRANCH_PLUGINS.gz > patch.gz
Then gunzip it and read it!

If all you are looking for is the change log, I will save you the trouble
and paste it in right here...

----------------------------------------------------------------------
Patch name: patch.plugins
Date: Thu Oct 24 16:19:04 EDT 2002
Authors:
  Bryce Denney
  Christophe Bothamy
  Kevin Lawton (we grabbed a lot of plugin code from plex86)
Testing help from:
  Volker Ruppert
  Don Becker (Psyon)
  Jeremy Parsons (Br'fin)

GENERAL NOTES
- All the work on this patch was done in a CVS branch called BRANCH_PLUGINS.
  It was made into a patch mostly for documentation purposes.  You can find
  more details on many things mentioned here in the CVS logs for
  BRANCH_PLUGINS.
- Generally, this patch touches so many files and so many important variables
  that any file that has NOT been test-compiled might not compile anymore.
  We have tried to test every file, but there are some that we just can't
  test without help from others because we don't have every platform avaiable.
  During the bugfix/release process for 2.0 I hope we can get somebody to
  compile every file so that we don't release a broken 2.0.
- WARNING: I didn't diff the configure script, since it will almost always be
  rejected.  You must run autoconf after applying this patch.

USING PLUGINS
- add new configure option --enable-plugins, which turns on plugin support
- added 2 new bochsrc options that let you select which configuration
  interface and which display library you want to use:
    config_interface: control
    display_library: sdl
  There is one restriction though: if you want to use wxWindows at all,
  then it must be selected as both the config_interface and the
  display_library.  These two are not separable.  There could be
  strange interactions between other combinations of libraries that we
  haven't discovered yet.
- now you can configure with several different --with-* options at once,
  and select between them at runtime.  This works with or without plugins
  enabled.  Example:  configure --with-x11 --with-sdl --with-term.
  To choose between them use "display_library: name" in the bochsrc
- add new configure options --with-all-libs which tries to detect all the
  display libraries that can be compiled on your machine, and enables them
  all.  If the detection fails, you can always write a bunch of
  --with-PACKAGE options yourself.
- when you run Bochs, it needs to know where to find its plugins.  For now
  if the plugins are not stored in a default system library path, you need to
  set the LTDL_LIBRARY_PATH environment to a colon-separated list of
  directories to search in to find the plugins.  When you first build
  Bochs, all the plugins are in gui/* and iodev/*.  So this command would
  work (sh syntax):
      LTDL_LIBRARY_PATH=`pwd`/gui:`pwd`/iodev;  export LTDL_LIBRARY_PATH
  There is a slight variation for win32: use a semicolon instead of a
  colon to separate the directories in the list, and the directories should
  start with a drive letter and colon.  Example
      d:/bochs/plugins;d:/bochs-2.0/plugins

PLATFORMS
- on Win32 platforms, plugins currently work in Cygwin/MinGW but some more
  work is needed to support VC++.  The makefiles build .DLL files for
  the plugins using gcc and a program called dlltool.  Remember to
  use semicolons to separate dir names in LTDL_LIBRARY_PATH, and to
  list absolute directories starting with a drive letter.
- on MacOS X, plugins will only work correctly if you install the
  "dlcompat" library.  Dlcompat is part of the OpenDarwin project.
- Bochs plugins work on Linux and Solaris without any extra work.

CONFIGURE AND MAKE
- makefiles in gui and iodev directories have some new options and targets
  for building plugins.  First the object files are sorted into two groups,
  pluggable and non-pluggable.  When you are compiling with plugins, each of
  the pluggable object files is added to the list to compile as plugins.
  If plugins are disabled, all objects are put into a list to compile
  normally.
- remove MDEFINES from top level makefile
- add LDFLAGS to the @LINK@ variable that is set by configure
- add several plugin-related make targets in toplevel, gui, and iodev
  makefiles
- use libtool to build libraries: both static and shared.  Except on win32,
  libtool doesn't do the job so we just use gcc directly with help from
  a program called dlltool.
- use libtool's tiny LTDL library to provide a cross-platform interface
  to the functions that load shared libraries.  The LTDL sources are included
  in the Bochs source code now (ltdl.h and ltdl.c), and also the configure
  script generates ltdlconf.h.  Bryce has done some minor-to-medium intensity
  hacking on LTDL to make it work at all.  To see the changes, do cvs diff
  -r1.1.2.1 -r1.1.2.2 ltdl.c or look at the CVS logs of
  bochs-testing/plugin-test/libltdl/ltdl.c for details.
- add "BOCHSAPI" to every variable, function, and class that any plugin
  will need, for building win32 DLLs.  The BOCHSAPI macro is used
  for DLL building on win32 platforms.  In config.h it is defined as
  __declspec(dllexport), or __declspec(dllimport), or empty.  Config.h
  knows if it should be importing or exporting symbols by the BX_PLUGGABLE
  macro which is defined in all plugin files.

PLUGIN CONFIGURATION INTERFACES AND DISPLAY LIBRARIES
- a configuration interface is a set of menus that lets you change Bochs's
  settings.  You can choose between two configuration interfaces:
  the text mode menus, and the wxWindows graphical interface.
- A display library is the code that shows text and graphics on the
  virtual Bochs screen.  There are many different display libraries
  to choose from, for example X11, win32, BeOS, Carbon(MacOSX), SDL, etc.
  Except for wxWindows, all display libraries look pretty similar.  They
  create a window with a toolbar full of buttons at the top.
- The wxWindows port is BOTH a configuration interface and a display library.
  It has menus and dialog boxes (the config interface) and also a toolbar and
  virtual Bochs screen.
- now the standard main() is used ALL the time, even for wxWindows which
  used to define its own main in the IMPLEMENT_APP macro.  Now we always
  start in main(), and wxWindows uses the IMPLEMENT_APP_NO_MAIN macro.  It
  parses the command line and possibly the configuration file, then according
  to the setting of the param BXP_SEL_CONFIG_INTERFACE it starts the text
  config interface (control) or the wxWindows config interface (loading a
  plugin if necessary).  Now the config interface is responsible for
  starting the simulation at the appropriate time (by calling
  SIM->begin_simulation()), instead of returning and letting main start the
  simulation.  See cvs log for main.cc 1.156.2.14 for more details.
- wxmain.cc's MyApp::OnInit function is called later in the startup
  process than it used to be.  Now main() does the first few steps, such
  as calling bx_init_main(), and starts up the configuration interface
  when it's ready.  This means that the config interface does not get
  to control the messages that appear during command line parsing or
  loading of the .bochsrc.  It may have to change in the future.
- configuration interfaces now must define an initialization function that
  calls SIM->register_configuration_interface with a callback function.
  The callback function is called whenever Bochs needs a simulation
  interface.  This allows us to easily select between them, even when
  support for multiple config interfaces is compiled in.  wxWindows
  has been made into a plugin, but so far control.cc (the text config
  interface) has not due to some difficulties linking bochs without it.
- Bryce intends to rename control.cc to textconfig.cc or something more
  appropriate when the branch merge is done.  When it was created, it was
  called a "control panel" but now that term has been replaced by a
  "configuration interface".
- Each display library file (gui/win32.cc, gui/x.cc, etc.) defines a C++ class
  that descends from bx_gui_c.  bx_gui_c declares some of its methods virtual
  so that the child class can redefine the methods.  The virtual methods are:
  specific_init, text_update, graphics_tile_update, handle_events, flush,
  clear_screen, palette_change, dimension_update, create_bitmap,
  headerbar_bitmap, replace_bitmap, show_headerbar, get_clipboard_text,
  set_clipboard_text, mouse_enabled_changed_specific, and exit.  Also,
  each file needed a plugin_init, which creates an object of the right
  type and sets the global "bx_gui" to it, and a plugin_fini which
  (theoretically) cleans up afterward.  These turned out to be so similar
  that they are defined in a macro called IMPLEMENT_GUI_PLUGIN_CODE(gui_name).
  (As usual, wxWindows is different and needs its own plugin_init and fini
  since it provides both a configuration interface and a display.  It
  registers a config interface and calls MyPanel::OnPluginInit, which is
  in wx.cc, to create a bx_wx_gui_c and set the bx_gui pointer.)
- removed the first argument of bx_gui::specific_init method because it
  is no longer static.  In a virtual method, you always know who "this" is.
- bx_gui::get_sighandler_mask() and bx_gui::sighandler() are always present,
  defined as virtual methods that do nothing.  In term.cc only, they are
  redefined to do whatever term needs to do with them.  This solves problems
  with undefined symbols when you enable term support.
- The various display libraries used to all redefine bx_gui methods instead
  of virtual methods of their own subclass.  This made it impossible to
  compile multiple guis at once.  Because they are all child classes with
  different names, any number can be linked into a binary at once.  This was
  important for plugins, but even without plugins it allows us to compile
  in support for many display libraries and select them at runtime.
- in siminterface, added register_configuration_interface and
  configuration_interface.  The register method is called by the
  init function of a configuration interface (control.cc or wxmain.cc)
  to tell siminterface what function to call when someone wants to start
  the config interface.  To start it, you call configuration_interface(),
  which calls the callback function set up by that init function.
- in siminterface, is_sim_thread, set_sim_thread_func.  These replace the
  global isSimThread function.  I had to make something that was
  1) available if wxWindows was compiled in, compiled as a plugin and
  either loaded, or not., and 2) did not have any link time references
  to wxWindows files.  As with other things, when wxWindows initializes
  it calls SIM->set_sim_thread_func() with a callback function.  When
  anyone calls SIM->is_sim_thread() it calls the callback function, or if
  it hasn't been installed yet it always returns true.

PLUGIN DEVICES
- Plugin devices are not as uniform as plugin display libraries.  There
  are many of them that interact, some provide special functions that other
  devices can call like bx_pic::raise_irq(), and some have to be initialized
  before or after others.  Our implementation of plugin devices works like
  this:
  - each device provides a plugin_init method and a plugin_fini method
  - the plugin_init method can initialize any number of devices and they
    should be "registered" by calling BX_REGISTER_DEVICE_DEVMODEL().
  - all plugin devices descend from a class called bx_devmodel_c.  The devmodel
    class is made up of virtual functions which tell the operations that we
    should be able to do on ANY device.  The real implementation of a device,
    in a child class, will override these methods to implement the real
    behavior of that device.  As an example, the C++ class heirarchy for the
    keyboard device looks like this:

      logfunctions
      |
      +-- bx_devmodel_c
          |
          +-- bx_keyb_stub_c
              |
              +-- bx_keyboard_c

    Logfunctions provides logging capabilities.  bx_devmodel_c provides a
    uniform interface for dealing with any device without even knowing which
    one it is.  bx_keyb_stub_c defines the interfaces that all external
    functions and objects can use, but the implementation of those interfaces
    just does a panic saying that you forgot to load the keyboard plugin.
    Finally, bx_keyboard_c implements all of the missing methods.
  - for devices that provide special functions that other devices can call, we
    make a "stub" class in iodev/iodev.h which has virtual functions that just
    print a panic or warning message.  The real device will create a subclass
    of the stub, which redefines the virtual methods with the actual
    implementation.  This means that we can install an instance of the stub if
    the plugin is not loaded to catch any calls to the device (it's that
    or a segfault).  When the plugin is loaded, we replace the stub with a
    pointer to the real class.  Virtual functions are equivalent in performance
    to setting up function pointers, but the syntax is cleaner and the compiler
    helps to enforce correct usage.
  - because of limitations of shared libraries on some systems such as
    Solaris, it is not safe to rely on global variable constructors being
    called.  So if you write "bx_my_device device;" as a global variable,
    on Solaris the constructor(s) for bx_my_device will not ever be called.
    That's why in the plugin_init function we explictly create the object
    with the "new" operator.
  - every file that can be compiled as a plugin should define BX_PLUGGABLE
    before including config.h.  This is used when building win32 DLLs.
- in plugin.h, define macros for basically every inter-device function,
  for example DEV_dma_register_8bit_channel, BX_MEM_READ_PHYSICAL,
  DEV_hd_read_handler, etc.  The macros are used everywhere instead
  of the direct call to the device, because the macros are designed to
  do the right thing even if the plugin is not loaded.  This is necessary
  even for devices that will always be loaded, but we want to make them
  into a plugin.  Otherwise we can't link bochs because of references to
  undefined symbols.
- in iodev/devices.cc, device plugins are loaded if they are needed.  At
  the moment we still load almost all of them all the time, but it doesn't have
  to be that way.  Serial and Parallel devices are loaded only if they
  are enabled in the bochsrc/config interface.  Devices that can be compiled
  as plugins are called plugin*.  Devices that have not been converted to
  plugins still have their old names like sb16, pit, ne2k.  At the end
  of the bx_devices::init() function we call bx_init_plugins() which
  calls the init function of devices created in plugins.  (Not every
  device, see core plugins vs. optional plugins.)  At the end of
  bx_devices::reset() we call bx_reset_plugins() which calls the reset
  function of devices created in plugins.
- core plugins vs. optional plugins vs. user plugins
  - core plugin: These are so fundamental that Bochs can't even initialize
    without them, for example the CMOS.  The user can substitute his own
    equivalent plugin to replace the CMOS, but he cannot say "Don't load the
    CMOS at all."  Core plugin devices are initialized and reset explictly by
    code in iodev/devices.cc, since the initialization order for some of them
    is critical.  They are currently NOT added to the device list in
    pluginRegisterDevice and pluginRegisterDeviceDevmodel, so that the plugin
    system does not call init() and reset().  If a core plugin cannot be found,
    Bochs will panic.
    (NOT DONE) In the bochsrc we could easily provide a way for the user to
    replace a core plugin with a different plugin that implements the same C++
    interface.  This is not implemented yet.  Example bochsrc line:
      replace_core_plugin: old=pic, new=mypic
  - optional plugin: These can be loaded or not, without affecting Bochs's
    ability to start up and simulate.  Initialization and reset for all
    optional plugins are handled by bx_init_plugins() and bx_reset_plugins(),
    which are now called from bx_devices_c::init() and bx_devices_c::reset().
    Bochs knows how to configure optional plugins at compile time, and they are
    loaded only if the configuration settings enables the device.  Examples:
    serial, parallel.  See the call to is_serial_enabled() in iodev/devices.cc.
    There are some "optional" plugins that you might not ever want to leave
    out, like vga.  Maybe the term optional is not clear and we need to think
    of a better name.  Bochs will panic if an optional plugin cannot be found.
    If the plugin was compiled, then it should be available at runtime too!
  - (NOT DONE) user plugin: These are plugins that Bochs does not know
    anything about at compile time.  The user asks Bochs to load a plugin
    using just its filename.  It loads the plugin and (somehow) gets
    information about what settings the user can configure.  The settings are
    adjusted by either bochsrc lines or the user interface, and then the
    device can be used.  User plugins will probably not be supported until
    after v2.0.
  - These categories might change over time, and more may be added.  We have
    to start somewhere.
- the keyboard timer handler used to control all sorts of things that had very
  little to do with the keyboard!  For example, it would call SIM->periodic()
  and bx_gui->handle_events() to make the gui update when it was supposed to.
  This has been moved into iodev/devices.cc instead.  It didn't really belong
  in the keyboard model, and what if you wanted to simulate with no keyboard
  one day?
- in devices.cc, added the concept of a default I/O handler.  Before, the
  "unmapped" device was initialized first and it would register every single
  I/O port in the whole 64k address space, then other devices would claim the
  ones that they needed.  Now it works differently.  Now, the unmapped device
  registers the default I/O read handler and the default I/O write handler,
  which are represented by BX_DEFAULT_IO_DEVICE.  This is from an email
  conversation with Christophe
  >   Sooner or later, we will need to unregister some ioport handler, because
  > some ports can be moved around the io architecture (for example the PCI
  > IDE Bus Master ioports).  Bochs can not do this at the moment.
  > ...
  >   When another device claims the io address, we change the handler
  > number to the one of the new function.  This behaviour is compatible with
  > the old one.
  >   But when we'll need to unregister an io address handler, we will just
  > reset the handler number to BX_DEFAULT_IO_HANDLER so unmapped is called
  > again when the io port is accessed.
  >   This way, we can have Bochs devices register/unregister/re-register
  > their handlers.
- device init() methods no longer have an argument.  We used to pass in
  a pointer to the global variable bx_devices, which each device would
  (usually) dutifully store and use instead of using the global symbol,
  but it wasn't helping much.  If we start to simulate more than one
  PC at once (who knows? it might happen) then maybe we'll add it back.

BUG FIXES THAT ENDED UP IN THE PLUGIN BRANCH
(maybe should be checked in separately?)
- gdbstub should not call bx_parse_cmdline anymore
- check SIM->get_init_done before calling DEV_kbd_paste_delay_changed.
- in all makefiles move $(BX_INCDIRS) to the front.  Otherwise you can
  accidently get config.h or other important includes from libraries
  when they put -Ipath into CFLAGS.
- add semicolon to the end of a BX_INFO for XADD_EdGd in arith32.cc
- make control.cc ignore BX_ASYNC_EVT_REFRESH and BX_ASYNC_EVT_DBG_MSG
  instead of sending them to default: which prints a warning.
- remove memset(&s, 0, sizeof(s)) in bx_keyb_c constructor.  This memset
  was wiping out some of the fields of the parent class (logfunctions).

Patch was created with:
  cvs diff -u
Apply patch to what version:
  cvs checked out on DATE, release version VER
Instructions:
  To patch, go to main bochs directory.
  Type "patch -p0 < THIS_PATCH_FILE".
----------------------------------------------------------------------
2002-10-24 20:43:08 +00:00
Bryce Denney
cf73a42456 This patch contains all the diffs from the CVS branch called BRANCH_PLUGINS,
and a very detailed description of what was changed.  These changes will
be checked into the CVS trunk momentarily.

Then I will remove the patch, but it will stay around in CVS history
forever as documentation of what we have done.
2002-10-24 20:37:37 +00:00
Bryce Denney
026e0da7fe - removed. This is highly obsolete now. 2002-10-24 20:09:49 +00:00
Christophe Bothamy
869519eef6 - This patch is not needed for block device access, so I remove it 2002-10-18 10:29:46 +00:00
Stanislav Shwartsman
c5f0ef8c76 Removed duplicated definition of BX_SEG_REGS 2002-10-16 22:10:07 +00:00
Stanislav Shwartsman
ee0ec5908e Removed the patch because it was already implemented by other way 2002-10-16 21:55:27 +00:00
Christophe Bothamy
75ae39ed8b - update to the blkgetsize patch :
There was a POTENTIAL RISK for your HARDDISKS with the previous
patch because it updated the concat_image_t object (BX_SPLIT_HD is on
by default). The behaviour of BX_SPLIT_HD is to open all filenames
incrementing the last letter. Guess what follows /dev/hda ?

You may now access block devices from within bochs, only
if --disable-split-hd is configured.

It has only been tested on linux and a WinNT guest.

There are issues with the current bios CHS translating scheme and
the guest OS translating scheme. For example my compaq system translates
a physical     38792/16/63 20GiB harddrive to
a logical      2586/240/63, which does not follow the bitshift algorithm.
I had to find a different PCHS that would translate in a compatible LCHS
I still have to investigate further, but I'm afraid everything I can do
will break some systems or the others.

Those issues should be explained in the documentation.
2002-10-16 14:40:46 +00:00
Bryce Denney
0afccdd6a2 - this is in cvs now 2002-10-15 17:41:40 +00:00
Bryce Denney
37a3d48c0a - In second rev of this patch, I fixed Carbon compile problems that I
created in the first rev.  When you're talking to Carbon libraries,
  of course you should use Boolean instead of bx_bool.  My global
  search and replace missed such subtleties.
2002-10-15 17:24:05 +00:00
Bryce Denney
383f2a5700 - add patch that replaces all Booleans with Bochs specific type bx_bool.
This avoids naming conflicts, since no other library is likely to
  use bx_bool.
- I will apply this before release 2.0, but not until the feature freeze
  has begun, because it will break almost every patch.
2002-10-15 05:50:41 +00:00
Bryce Denney
d39ccd1003 - no longer needed now that wxWindows 2.3.3 is released 2002-10-13 22:08:42 +00:00
Christophe Bothamy
b0972a74a4 - deleted since it's been included in main code long ago 2002-10-13 21:59:34 +00:00
Christophe Bothamy
87337ac2a2 - delete patch as it's been included in main code long ago 2002-10-13 21:58:24 +00:00
Bryce Denney
be8db98f49 - applied in cvs 2002-10-11 13:21:34 +00:00
Bryce Denney
d54402bfbd - this patch creates a new configure test which detects largefiles flags
correctly.  It is based on code from wxWindows, so I have asked
  Vadim Zeitlin for permission to include it.
2002-10-11 05:01:38 +00:00
Christophe Bothamy
cf33240efc This patch adds Tekram DC280E VLB-IDE support to Bochs.
This card has 2 ata channels, so this would be better
than the promise DC2300.  It also has drivers for win95,
available on tekram website.

Many thanks to Volker for fixing the interrupt bug!
It solved the problem I had with this patch...
2002-10-08 15:02:23 +00:00
Bryce Denney
f7b3ba2a76 - removed this patch because it was complete junk 2002-10-05 12:24:59 +00:00
Bryce Denney
690adc16bf - apply patch from Alexander Krisak (darkelf@newmail.ru)
which adds a help command to the debugger
- modified: debug/dbg_main.cc debug/debug.h debug/lexer.c debug/lexer.l
  debug/parser.c debug/parser.h debug/parser.y docs-html/debugger.html
- removed the patch file now that the changes are committed
2002-10-04 14:57:36 +00:00
Bryce Denney
4f6302bf8e - add patch from Alexander Krisak (darkelf@newmail.ru) 2002-10-04 14:38:16 +00:00
Kevin Lawton
4e9db8b224 Removed patches/patch.extra_eflags_asms since I just integrated it. 2002-10-03 18:13:41 +00:00
Kevin Lawton
f344c3df8d Added patch from Jas Sandys-Lumsdaine. I'll review this soon and
integrate it, if it looks good.  Putting here for the CVS trail.

  "This patch adds extra inline asm statements for the most important
  instructions I found to be still resorting to lazy flags execution.
  I counted the instructions that "hit" and "missed" when an eflag
  value was needed - if there was a miss, the flag was not known and
  had to be calculated with lazy_flags.cc. The culprit instruction
  which last executed to affect the eflags was tallied."
2002-10-03 17:23:11 +00:00
Kevin Lawton
295ef3b966 Removed these alternate files since I integrated them into the
main code.
2002-10-03 17:19:27 +00:00
Bryce Denney
ead7438d4f - this patch is in cvs now, with a few minor changes. Some of the
modifications to panics and things in cpu I also applied, but checked in
  separately.  See [ 609616 ] remote GDB stub for more information.
2002-10-03 05:31:48 +00:00
Kevin Lawton
1aeb4c71b1 Updated the alternate pc_system.{cc,h} files to add the ID string
parameter so we know which source modules are requesting
  timers.  Also added a SpewPeriodicTimerInfo #define in
  case somebody is still having guest OS hang problems.  If
  enabled, this macro will force a brief dump of the active timers
  list to the bochsout.txt file, every 5Million ticks.
  If the lowest timer's period is extremely low, that would be
  suspect.
2002-10-02 05:54:34 +00:00
Kevin Lawton
a11e637ec0 Added an alternative set of pc_system.{cc,h} files for
testing.  Please try these out if you want to help test
  them or if your guest OS appears to be hanging with
  no apparent activity.  The old bochs internal timer
  framework is broken in several areas.

  I put these in the patches directory for now.  After
  a 'make all-clean', you can do something like:

    mv pc_system.cc pc_system.cc-old
    mv pc_system.h  pc_system.h-old
    cp patches/pc_system.cc-kpl .
    cp patches/pc_system.h-kpl .
    make

  And let me know if A) they work for you and B) if they help
  the hanging problem.
2002-10-01 21:27:34 +00:00
Bryce Denney
fb54f552fa - removing; patch has been applied now 2002-09-30 14:04:26 +00:00
Bryce Denney
ea20513e19 - convert to unix newlines so that patch is happy 2002-09-30 14:03:53 +00:00
Bryce Denney
ea0874aa4a - add Carbon patch from Chris Thomas (jusansai) 2002-09-30 13:56:51 +00:00
Stanislav Shwartsman
60505911c3 The patch was already committed to main trunk 2002-09-29 18:43:22 +00:00
Stanislav Shwartsman
0ea0d828df removed the example because it already integrated to the main trunk 2002-09-28 17:11:30 +00:00
Bryce Denney
935b0f97bd - a few minor fixes to make it compile 2002-09-28 04:54:17 +00:00
Kevin Lawton
ad3c1474e3 Integrated this patch verbatim. Deleted from patches/. 2002-09-28 01:51:21 +00:00
Kevin Lawton
11139670ad Added patch/patch.logicalxx_asm from Jas Sandys-Lumsdaine.
I'm going to look at this next and integrate it if it's good,
  but wanted a record of the patch in CVS.
2002-09-28 01:22:39 +00:00
Kevin Lawton
8755e5b391 This patch was just itegrated. Removed it. 2002-09-28 00:55:12 +00:00
Bryce Denney
a2d70c9953 - separate Zwane's patch and my patch so they can be more easily compared.
Now patch.tsc-zwane is back to exactly what Zwane sent to me, and
  patch.tsc-bryce has my modified version.
2002-09-27 23:17:04 +00:00
Bryce Denney
4098cf607e - I screwed up the previous rev by somehow removing a line "typedef struct {".
You can imagine how well it worked without that.
2002-09-27 03:18:44 +00:00
Bryce Denney
48e0e9dc7d - update so that it applies clean again 2002-09-26 02:12:00 +00:00
Bryce Denney
ba6afa5e97 minor cleanups:
- moved cpu_online_map into the BX_CPU_C structure as a static member
  (there is only one per bochs, not one per CPU)
- reduced the diffs in several places to make it more clear what had changed
- removed lots of whitespace diffs
2002-09-25 14:52:45 +00:00
Bryce Denney
4570f1ba77 - add highmem patch from Zwane Mwaikambo 2002-09-25 13:29:11 +00:00
Bryce Denney
b77654f907 - add APIC patch from Zwane Mwaikambo 2002-09-25 13:16:04 +00:00
Bryce Denney
62066dbd4a - I modified Zwane's patch. see my comments inside 2002-09-25 03:17:32 +00:00
Bryce Denney
70a7056b23 - add tsc patch from Zwane Mwaikambo 2002-09-25 00:00:11 +00:00
Kevin Lawton
62084dd83d Shortened this patch file down to just the important notes. I integrated
the patches, but didn't want to lose the text until they're put into
a doc somewhere.
2002-09-24 20:13:38 +00:00
Christophe Bothamy
dab39a8031 - this patch enables Promise DC2300 VLB-IDE support 2002-09-24 12:55:13 +00:00
Kevin Lawton
2459d81619 Removed this patch which is already in the bochs CVS source. 2002-09-23 19:31:50 +00:00
Kevin Lawton
6d51ca08f1 Removed my patches, which are already integrated into bochs. 2002-09-23 19:29:15 +00:00
Kevin Lawton
d9ac09ea26 Removed this old 4Meg pages patch. We already have big page
support in bochs.
2002-09-23 19:23:03 +00:00
Bryce Denney
ff0c169407 - add patch from Luiz Henrique Shigunov, see
[ 612486 ] more disasm functions
  http://sourceforge.net/tracker/index.php?func=detail&aid=612486&group_id=12580&atid=312580
2002-09-23 19:20:58 +00:00
Bryce Denney
6fafbe4b25 - add example of how to use siminterface callback function 2002-09-23 17:02:33 +00:00
Bryce Denney
09e8993e41 - add
- this patch is from [ #567595 ] guess floppy type from image file length.
  from Tal Benavidor
2002-09-23 04:16:18 +00:00
Christophe Bothamy
cec1c57d98 - merged Bryce's patch and mine
- preparing for commit of all the changes. We'll keep this patch in case something goes wrong
2002-09-22 20:51:05 +00:00
Stanislav Shwartsman
470dd1d30f Examples directory for mew instrumentation stuff 2002-09-20 20:25:55 +00:00
Stanislav Shwartsman
973422be6f Removed patch-smp-fpu because it already merged with MMX support 2002-09-20 20:15:34 +00:00
Stanislav Shwartsman
22d8918774 New version of Bochs instrumentation stuff 2002-09-20 20:12:36 +00:00
Bryce Denney
d2b5e83283 - fix typo in a comment. Also this hunk will conflict with what I'm
about to check in.
2002-09-20 17:52:05 +00:00
Christophe Bothamy
3dfb397974 - added patch found in sf [ 609616 ] remote GDB stub
From sf patch page :

This patch adds remote GDB stub capability to Bochs.
It's an updated version of the patched bochs 1.3pre1 in
found in this URL:

http://www.rtmk.org/bochs-gdb.html

more details in the same site. thanks Johan Rydberg
2002-09-20 16:14:55 +00:00
Bryce Denney
d5952573e6 - remove this patch, since we now have x86-64 support in current CVS 2002-09-19 00:46:38 +00:00
Bryce Denney
e16d550248 - with this version of my patch, 4ata works in wxWindows 2002-09-17 18:11:12 +00:00
Bryce Denney
274ce4cd55 This patch applies on top of Christophe Bothamy's 4ata-channels patch.
I'm keeping a separate patch in case Christophe wants to make revisions
to his patch without my changes getting in the way.

I have just been working on the configuration interface part, for
example making it so that when you disable the ata[0123] channel, all the
devices controlled by that channel will be disabled as well.  I haven't
gotten around to the wxWindows part, but these changes will make the
wxWindows work much easier.  I will update this patch as my work progresses.
2002-09-17 14:36:23 +00:00
Bryce Denney
d162178f24 - make the patch apply to current sources (very minor)
- now this patch is checked in with -kb flag
2002-09-16 18:23:29 +00:00
Christophe Bothamy
55510b1e17 - Initial revision of the 4 ata channels patch. 2002-09-14 07:34:41 +00:00
Bryce Denney
6a9d2e662f - I committed the MMX patch with big endian support, so I have removed
the MMX patches from the patches directory.
- removed: patches/bochs-mmx.patch patches/bochs-mmx.patch-endian-support
2002-09-09 16:28:07 +00:00
Bryce Denney
53d71821c1 - I already checked in something better than this 2002-09-05 16:02:43 +00:00
Stanislav Shwartsman
c3b4f170d6 The patch was changed accoring to access.cc changes and
Bryce's recomendations.
2002-09-04 21:13:08 +00:00
Bryce Denney
d6c1c14d43 - patch now adds configure option --enable-mmx that enables/disables it 2002-09-04 20:32:04 +00:00
Bryce Denney
20bd8507af - add configure option --enable-mmx in configure.in. I didn't bother
to diff configure...you'll have to run autoconf yourself.
- in config.h.in set BX_SUPPORT_MMX to 0, not 1.  The configure script
  will replace it with a 1 if appropriate.  That's the way all other
  options are done.
- you need to use patch -p1 for this
2002-09-04 20:09:00 +00:00
Bryce Denney
db239afdcf - add diffs in cpu/Makefile.in so that it compiles w/o editing anything
- you must use patch -p1, not patch -p0
- write date as September 1, 2002 so it's not confusing to U.S. readers,
  who think 1/9/2002 means January 9.
2002-09-04 19:47:33 +00:00
Stanislav Shwartsman
21413f26aa MMX support patch
Now with BIG_ENDIAN systems compatability
Tested on HP1100 and Solaris systems
(for Bochs 1.4.1 release)
2002-09-04 19:30:09 +00:00
Bryce Denney
e804c745bb - this patch should guarantee that the memory vector is aligned on an
8-byte boundary.  It simply allocates 8 extra bytes, then steps forward
  one at a time until it finds a pointer whose address is a multiple of 8.
2002-09-03 16:57:42 +00:00
Kevin Lawton
3d8e5f8b61 Removed the BX_FETCHDECODE_CACHE mods, and the patch that
Bryce created for use of ensuring all mods were removed
cleanly.
2002-09-01 23:02:36 +00:00
Bryce Denney
9a28714cbd - manually remove a diff chunk that was only a difference in version number,
since it always conflicts.
2002-09-01 21:46:30 +00:00
Bryce Denney
99ff4b3ed1 - create a patch that is equivalent to all CVS diffs associated with
the fetchdecode cache.
2002-09-01 21:30:50 +00:00
Kevin Lawton
944697affb Removed patch which I committed to CVS. 2002-09-01 20:21:23 +00:00
Stanislav Shwartsman
9620d2a423 MMX instructions support (LITTLE_ENDIAN version)
After applying the patch edit cpu/MakefilE
2002-09-01 15:44:40 +00:00
Bryce Denney
157a9ac53a - this patch has been committed, and hasn't broken too many compiles so far 2002-09-01 15:39:39 +00:00
Kevin Lawton
7a8d2dc61e Oops, added a modified file which I forgot about, to the patch. 2002-09-01 03:20:23 +00:00
Kevin Lawton
976b95ece9 Added 'patches/patch.kpl-paging-cleanup', a well needed clean-up
of bochs' broken paging code, and made an option to compile in
support of 4Meg pages, with the default being disabled, because
it is not well supported yet.
2002-09-01 02:37:40 +00:00
Bryce Denney
a8827a60bf - add note that you need segchecks patch too 2002-08-30 13:52:02 +00:00
Bryce Denney
d2366e1009 - upload patch from Kevin Lawton, SF#602156: Simple performance mod for
cpu.cc (EIP)
2002-08-30 13:26:02 +00:00
Bryce Denney
9d194317ec - add Kevin's patch on SF, #602003: repeat instruction optimizations 2002-08-30 13:20:42 +00:00
Bryce Denney
e1df049256 - add patch submitted by Kevin Lawton on ML 2002-08-27 23:00:58 +00:00
Bryce Denney
7fdc7303c2 - add "void reset(unsigned type)" method to every I/O device.
Some devices already had one.  Some I had to add an empty one.
  I did a little cleaning of init() methods to make them more uniform
  but generally I left them alone.
- I also put these exact diffs into a patch "patch.iodev-add-reset"
  in case I want to revert these changes for some reason, for example
  if they break an old patch.  It should be deleted after a while.
2002-08-27 19:54:46 +00:00
Volker Ruppert
28e06c07a0 - the changes are present in CVS and these files are no longer needed 2002-08-25 09:12:55 +00:00
Bryce Denney
c81a354ebf - this adds a configure option --enable-external-debugger for use with
Peter Tattam's external debugger.  So far the external debugger only
  works on win32 platforms if you download Peter's DLL.
2002-08-25 05:02:38 +00:00
Christophe Bothamy
5cd66320e1 - uploaded 64bits-registers-extension patch from Kevin 2002-08-20 10:54:25 +00:00
Volker Ruppert
16f04b12f0 - this patch adds include support for config files 2002-08-16 07:17:50 +00:00
Volker Ruppert
a546102083 - the changes are present in CVS 2002-08-15 12:21:49 +00:00
Christophe Bothamy
872c0a1b20 - added patch [ 567606 ] make bochsrc more portable, from Tal Benavidor 2002-08-12 15:19:19 +00:00
Christophe Bothamy
2a7bfa41de - patch from Bernhard Bablok to create a shell wrapper that eases Bochs launch. 2002-08-12 14:49:21 +00:00
Christophe Bothamy
ee085e1f55 - This patch adds MOV_CdRd in v8086 mode (from Martin Str|mberg) 2002-08-10 12:02:52 +00:00
Volker Ruppert
0d46cfdad9 - this patch replaces the standard headerbar by a win32 toolbar 2002-08-10 08:57:23 +00:00
Volker Ruppert
5453016e86 - this patch is no longer necessary 2002-08-09 15:00:03 +00:00
Volker Ruppert
d015d4a367 - win32 changes removed
- description updated
2002-08-09 07:41:43 +00:00
Volker Ruppert
940a5c7b74 - userbutton added to the wxgui 2002-08-08 08:05:19 +00:00
Volker Ruppert
ec33a610e4 - config option and bochsrc example added 2002-08-07 20:35:57 +00:00
Volker Ruppert
c10458ee49 - this patch adds a headerbar button that sens keypresses 2002-08-06 16:17:49 +00:00
Christophe Bothamy
7cae4b94c4 - patch from Timo Weggen :
With this patch the INVLPG instruction doesn't invalidate the
  whole TLB, but only a single page table entry.
2002-08-06 09:01:47 +00:00
Christophe Bothamy
987a30ca17 - This patch enables the guest to read to host time (linux only).
Port 0x8901 is used. Two time values can be set and
  read, along with the difference of the two.
  Please look in the patch file for instructions on usage.
2002-07-31 16:15:51 +00:00
Christophe Bothamy
edf44aceaa - This patch turns the eflags structure to a 32bits bitfield 2002-07-31 16:11:27 +00:00
Christophe Bothamy
1956be72db - I forgot to initialize the new variable 2002-07-30 08:48:03 +00:00
Christophe Bothamy
52007ee6c7 - This patch enables the guest to programmatically stop bochs 2002-07-29 12:42:28 +00:00
Christophe Bothamy
9ab70dd560 - conditionnaly include <sys/mount.h> if BX_HAVE_BLKGETSIZE is defined
- updated for latest cvs code
2002-07-29 10:00:10 +00:00
Christophe Bothamy
8fc5ffd373 - added patch to enable the use of up to 4 optional romimages 2002-07-24 17:51:09 +00:00
Volker Ruppert
acba77dbf2 - cursor size feature simplified
- cursor hide feature works now
- don't handle the text cursor in graphics mode
2002-07-09 18:30:57 +00:00
Volker Ruppert
42c391cf9d - patch updated for current CVS version
- cursor size feature added for the BeOS gui
2002-07-08 20:11:12 +00:00
Volker Ruppert
d8454f31de - this file is no longer needed 2002-07-06 15:24:01 +00:00
Christophe Bothamy
3088768f88 - added a configure check for BLKGETSIZE ioctl support. The patch should not cause any more problems on other systems 2002-07-04 10:40:10 +00:00
Volker Ruppert
636027845c - this patch doesn't fix the fprem bug. 2002-07-03 20:16:48 +00:00
Christophe Bothamy
5f44c98412 - this patch adds sysenter/sysexit functions support for CPU_LEVEL >= 6 2002-06-27 21:47:44 +00:00
Christophe Bothamy
cba611f25b - updated with latest version found on sf patches page 2002-06-27 19:38:39 +00:00
Volker Ruppert
888ef120f8 - changes in file bochs-dlx.in added 2002-06-27 15:36:27 +00:00
Christophe Bothamy
c6f9ce353a - removing patch.fetchdecode-cache as it is included in the main branch, and does not apply cleanly anymore 2002-06-27 14:39:03 +00:00
Volker Ruppert
4d9c62b001 - added some more files that need to be changed 2002-06-26 17:08:55 +00:00
Christophe Bothamy
fcc5bd67cb - added patch for block device size detection from Ph. Marek
- included it in the main branch as it is only active with block devices
2002-06-26 16:45:27 +00:00
Christophe Bothamy
a926744628 I reworked and included Carl's patch to have a new bochsrc directive
to describe the format of the log prefix. This option can be any string
with special tokens being replaced at run time :
  #   %t : 11 decimal digits timer tick
  #   %i : 8 hexadecimal digits of cpu0 current eip
  #   %e : 1 character event type ('i'nfo, 'd'ebug, 'p'anic, 'e'rror)
  #   %d : 5 characters string of the device, between brackets
the default is "%t%i%d", so the logprefix is the same as before.

New tokens can be easily added or changed if needed.


Modified Files:
  .bochsrc bochs.h logio.cc main.cc gui/control.cc
  gui/siminterface.h gui/siminterface.cc
  patches/patch.logfilefmteip
2002-06-26 14:42:35 +00:00
Christophe Bothamy
368a58ef97 - removing patch as it has been included in the main branch long ago. 2002-06-25 07:35:41 +00:00
Bryce Denney
c337f3715f - This patch creates one copy of the FPU registers and state for every CPU
in a multiprocessor simulation.  Imagine that!  Without the patch, there is
  just one FPU for all the processors, which is clearly wrong.
  See bug [ 461762 ] multiple processors but only one FPU
2002-06-23 00:35:19 +00:00
Volker Ruppert
147657781b - the changes are present in CVS now. 2002-06-19 18:27:00 +00:00
Volker Ruppert
506d6ce6d9 - the patch file is no longer needed 2002-06-14 16:32:10 +00:00
Volker Ruppert
260ab478d7 - this patch adds register and unregister functions for DMA channels and
defines macros for DMA functions.
2002-06-04 18:31:27 +00:00
Volker Ruppert
0ef68e47ad - the changes are present in CVS now 2002-06-04 18:30:24 +00:00
Christophe Bothamy
75247ef0a4 - 3rd version of tld's fetchdecode cache 2002-06-03 20:34:31 +00:00
Volker Ruppert
16966b066e - the changes are present in CVS now 2002-06-01 21:35:43 +00:00
Christophe Bothamy
c04d7cd10a This a patch found on sf bug list from mrieker :
fixed some stuff in apic code:
  - interprocessor nmi's
  - lowest priority
  - fixed ppr
  - can write task_priority
  - scan priorities from high to low
2002-05-30 12:15:16 +00:00
Christophe Bothamy
d5e43f24b4 - updated the patch from tld. 2002-05-29 21:52:36 +00:00
Christophe Bothamy
d78e428169 - added fetchdecode-cache patch from tld 2002-05-29 09:02:40 +00:00
Volker Ruppert
671ad5215d - updated for current CVS (logio 1.17)
- added check for the siminterface init state before calling the vga
  timer handler
2002-05-26 16:56:46 +00:00
Christophe Bothamy
198bc0afb5 - new version by Robert Millan 2002-05-15 09:10:14 +00:00
Christophe Bothamy
082d093b68 - removing patch since it's been included and modified in bochs cvs 2002-05-15 09:09:48 +00:00
Volker Ruppert
e13bdb401f - this patch adds the most important functions of the 32 bit PCI BIOS 2002-05-12 15:23:13 +00:00
Christophe Bothamy
5f3dbfb47a - i'm uploading the patch on behalf of Robert Milan
- this patch adds fhs compatibility when installing Bochs
2002-05-04 15:18:33 +00:00
Volker Ruppert
d6dd67e3c1 - the patch is checked in and this file is no longer needed 2002-05-02 17:53:53 +00:00
Christophe Bothamy
eeb542bb8c - removing this patch since it has been long included in the bios 2002-05-01 21:10:46 +00:00
Christophe Bothamy
bfd7fc33ba - These are the three patches that cegis submitted on the sf bug list 2002-05-01 21:07:13 +00:00
instinc
9101155d31 patch to fix the behaviour of the stack_return_from_v86 function 2002-04-20 20:28:32 +00:00
Volker Ruppert
36cc51de38 - the changes are checked in now 2002-04-20 16:21:32 +00:00
Volker Ruppert
54f1d3d2ab - patch for dimension_update() in text mode and text_update() 2002-04-19 22:44:15 +00:00
Bryce Denney
503a272fc1 - this has been in since March 7 2002-04-18 01:05:11 +00:00
Bryce Denney
baeb6f74b7 - this has been in the cvs for a while now with no loud complaints 2002-04-18 01:04:29 +00:00
Bryce Denney
2f69a74616 - commit TUN/TAP patch, though I can't really test it. I can verify that if
you don't have if_tun.h the configure script does not enable TUN/TAP.
2002-04-18 00:59:20 +00:00
Bryce Denney
d85b0c113f - apply Peter Tattam's patch to fix a DMA bug. 2002-04-18 00:37:09 +00:00
Bryce Denney
91cc6590b2 - apply Peter Tattam's patch that makes win32 pad packets up to 60 bytes 2002-04-18 00:33:58 +00:00
Bryce Denney
05ac22063b - applied the patch by hand...this is what I'm checking in now. 2002-04-18 00:32:29 +00:00
Bryce Denney
30aaf4088e - commit patch.wxwindows.gz in the main branch. Now you can try out
the wxwindows interface by just "configure --with-wx; make"

  Modified Files:
    Makefile.in bochs.h config.h.in configure configure.in
    load32bitOShack.cc logio.cc main.cc cpu/cpu.cc cpu/cpu.h
    debug/dbg_main.cc gui/Makefile.in gui/control.cc gui/gui.cc
    gui/siminterface.cc gui/siminterface.h gui/x.cc iodev/cdrom.cc
    iodev/keyboard.cc memory/misc_mem.cc
  Added Files:
    README-wxWindows wxbochs.rc gui/wx.cc gui/wxmain.cc
    gui/wxmain.h gui/bitmaps/cdromd.xpm
    gui/bitmaps/configbutton.xpm gui/bitmaps/copy.xpm
    gui/bitmaps/floppya.xpm gui/bitmaps/floppyb.xpm
    gui/bitmaps/mouse.xpm gui/bitmaps/paste.xpm
    gui/bitmaps/power.xpm gui/bitmaps/reset.xpm
    gui/bitmaps/snapshot.xpm
  Removed Files:
    patches/patch.wxwindows.gz
2002-04-18 00:22:20 +00:00
Bryce Denney
ebfb7a8dab - apply this patch to current CVS to add the wxWindows interface.
gunzip -c patches/patch.wxwindows.gz | patch -p1
2002-04-10 07:51:34 +00:00
Bryce Denney
fb9dc34ce4 - check in raw keycodes patch, to be applied to wxWindows 2.3.2. It is
not required to use a patched wxWindows library, but it allows us to
  do much better key mapping.  Bryce sent this patch to the wxWindows
  developers, and wxWindows 2.3.3 will include these changes.
2002-04-10 06:25:07 +00:00
Bryce Denney
327e7742d2 - WLI separated his patch into 8 cpu support and workarounds. I checked
in the 8 cpu support changes.  These are the workarounds.
2002-04-08 02:03:08 +00:00