"bx_bool" which is always defined as Bit32u on all platforms. In Carbon
specific code, Boolean is still used because the Carbon header files
define it to unsigned char.
- this fixes bug [ 623152 ] MacOSX: Triple Exception Booting win95.
The bug was that some code in Bochs depends on Boolean to be a
32 bit value. (This should be fixed, but I don't know all the places
where it needs to be fixed yet.) Because Carbon defined Boolean as
an unsigned char, Bochs just followed along and used the unsigned char
definition to avoid compile problems. This exposed the dependency
on 32 bit Boolean on MacOS X only and led to major simulation problems,
that could only be reproduced and debugged on that platform.
- On the mailing list we debated whether to make all Booleans into "bool" or
our own type. I chose bx_bool for several reasons.
1. Unlike C++'s bool, we can guarantee that bx_bool is the same size on all
platforms, which makes it much less likely to have more platform-specific
simulation differences in the future. (I spent hours on a borrowed
MacOSX machine chasing bug 618388 before discovering that different sized
Booleans were the problem, and I don't want to repeat that.)
2. We still have at least one dependency on 32 bit Booleans which must be
fixed some time, but I don't want to risk introducing new bugs into the
simulation just before the 2.0 release.
Modified Files:
bochs.h config.h.in gdbstub.cc logio.cc main.cc pc_system.cc
pc_system.h plugin.cc plugin.h bios/rombios.c cpu/apic.cc
cpu/arith16.cc cpu/arith32.cc cpu/arith64.cc cpu/arith8.cc
cpu/cpu.cc cpu/cpu.h cpu/ctrl_xfer16.cc cpu/ctrl_xfer32.cc
cpu/ctrl_xfer64.cc cpu/data_xfer16.cc cpu/data_xfer32.cc
cpu/data_xfer64.cc cpu/debugstuff.cc cpu/exception.cc
cpu/fetchdecode.cc cpu/flag_ctrl_pro.cc cpu/init.cc
cpu/io_pro.cc cpu/lazy_flags.cc cpu/lazy_flags.h cpu/mult16.cc
cpu/mult32.cc cpu/mult64.cc cpu/mult8.cc cpu/paging.cc
cpu/proc_ctrl.cc cpu/segment_ctrl_pro.cc cpu/stack_pro.cc
cpu/tasking.cc debug/dbg_main.cc debug/debug.h debug/sim2.cc
disasm/dis_decode.cc disasm/disasm.h doc/docbook/Makefile
docs-html/cosimulation.html fpu/wmFPUemu_glue.cc
gui/amigaos.cc gui/beos.cc gui/carbon.cc gui/gui.cc gui/gui.h
gui/keymap.cc gui/keymap.h gui/macintosh.cc gui/nogui.cc
gui/rfb.cc gui/sdl.cc gui/siminterface.cc gui/siminterface.h
gui/term.cc gui/win32.cc gui/wx.cc gui/wxmain.cc gui/wxmain.h
gui/x.cc instrument/example0/instrument.cc
instrument/example0/instrument.h
instrument/example1/instrument.cc
instrument/example1/instrument.h
instrument/stubs/instrument.cc instrument/stubs/instrument.h
iodev/cdrom.cc iodev/cdrom.h iodev/cdrom_osx.cc iodev/cmos.cc
iodev/devices.cc iodev/dma.cc iodev/dma.h iodev/eth_arpback.cc
iodev/eth_packetmaker.cc iodev/eth_packetmaker.h
iodev/floppy.cc iodev/floppy.h iodev/guest2host.h
iodev/harddrv.cc iodev/harddrv.h iodev/ioapic.cc
iodev/ioapic.h iodev/iodebug.cc iodev/iodev.h
iodev/keyboard.cc iodev/keyboard.h iodev/ne2k.h
iodev/parallel.h iodev/pci.cc iodev/pci.h iodev/pic.h
iodev/pit.cc iodev/pit.h iodev/pit_wrap.cc iodev/pit_wrap.h
iodev/sb16.cc iodev/sb16.h iodev/serial.cc iodev/serial.h
iodev/vga.cc iodev/vga.h memory/memory.h memory/misc_mem.cc
if init() is called a second time. This allows me to restart a
simulation (wxwindows interface only) without restarting the whole
application.
- modified: iodev/*.cc
so that windows types can be used in fields, for example in cdrom.h:
#ifdef WIN32
HANDLE cdrom_interface::hFile;
#endif
- since every file includes bochs.h, I removed includes of <windows.h>
everywhere else
- modified: bochs.h cpu/extdb.cc gui/win32.cc gui/wx.cc iodev/cdrom.cc
iodev/eth_win32.cc iodev/floppy.cc
requesting source can be registered as well. Otherwise, there
is no way to know which source modules are requesting
suspect frequencies which are too high.
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.
more work in the floppy and bios code.
- floppy and cdrom entries in the runtime config menu can be disabled if the
drive wasn't defined in bochsrc or start menu
- floppy variable "initial_status" and cdrom variable "inserted" renamed to
"status"
- unused variable *ips in function build_runtime_options_prompt() disabled
* new floppy type 360k can be used in .bochsrc and the config interface
* media type and geometry can be set for the floppy type
* BIOS changes to make 360k floppy drives work
* bximage can create 360k images now
- init(): set the initial status to BX_EJECTED if evaluate_media() fails
- don't modify the DOR when a drive > 1 is selected
- floppy command 'get status' now recognizes the head field
- floppy command 'recalibrate': don't set cylinder to 0 before completion
- floppy command 'sense interupt status' does not clear status register 0
- floppy command 'configure': more detailed BX_DEBUG messages
- floppy command 'read ID' does not modify status register 0
- floppy read/write commands: set the error bit in status register 0 if media
is not present
- better detection of not existing drives in some commands: check the media type
of the selected drive instead of the drive select value
- behaviour of floppy commands 'recalibrate' and 'seek' changed:
* drive is busy in the execution phase, but not the controller
* replaced the panic by setting the error status if drive is not existing
- evaluate_media(): set the media type even if device/file is not present
DMA functions defined. Most of the changes are based on the "bochs sync"
version of plex86. Here is the list of changes:
* register/unregister functions for DMA channels added. The DMA controller
can use the DMA read/write handlers of registered devices directly.
* "hardwired" code in dma.cc removed
* all DMA related code in devices.cc and iodev.h removed
* DMA related code in pc_system.* removed except HRQ handling
* macros for DMA functions defined in bochs.h
* floppy and SB16 code modified to use the changes described above
- new functions raise_irq() and lower_irq()
- all trigger_irq() / untrigger_irq() calls are replaced by the new functions
- REMARK: timer IRQ handling is not correct but it works
- TODO: IOAPIC IRQ handling needs to be changed
- length of 'configure' floppy command fixed
- busy flag is set until the result of a read/write command is complete
- read/write access to unsupported address causes a BX_ERROR, not a BX_PANIC
- commented BX_INFO statements removed
* floppy command 'format track' implemented
* read and write operations with MT=0 are working now
(function 'increment_sector()' updated)
* result code of floppy command 'get status' fixed
* flag FS_MS_DIO is not set while the 'configure' floppy command is pending
* diskette controller data register returns last result if no new data
is available
* reset will be activated when the reset bit is changed to normal operation
* reset sets the error bits in status register 0
* write access to port 0x3f4 will cause a BX_ERROR now
* unsupported and invalid floppy commands are setting the error status bit
'invalid command' - BX_PANIC not necessary
* flag FS_MS_DIO is not set while a floppy command is pending
* floppy command 'specify': cause a BX_ERROR when non-DMA mode is selected
* floppy command 'sense interrupt status' returns an error is no interrupt
is pending
* floppy command 'read ID' sets the 'busy' flag and returns no data if the
motor is not on
* removed SIMX86 section (not defined in bochs)
* define variable 'sTemp' for win32 only
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.
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).
now floppy.cc no longer crashes if you try to open a write-protected
disk or read-only disk image. Instead, it tries a second time to
open the image read-only and only panics if this also fails. If the
image is opened read-only, a readonly flag is set
(bx_floppy.s.media[drive].read_only). If you try to write the floppy
when this flag is set, the write silently fails except for some messages
into the log. Instead of failing silently we should learn what the
floppy controller would really do in this situation and emulate it.