* added generation of SSDT ACPI table that contains definitions for available
processors
* added basic implementation of SMBIOS
* Added querying of BIOS UUID using VMware backdoor I/O port (enable only if
BX_QEMU is defined)
* Added RTC device to ACPI DSDT table
* save PnP Option ROM Product Name string in IPL Boot Table
* move the #define IPL_* lines to top of the file and change
struct ipl_entry to ipl_entry_t by using typedef
* fixed minor error from printf patch confusion (negation based on wrong word)
* added helper function await_ide
* changed lba calculation to not corrupt lba (for debugging and clarity)
* added support for partial completions of ata_cmd_packet (never happens in
the simulator, but happens all the time in hardware)
* update atapi_request_sense and atapi_is_ready - based on FILO
* correct an int 15 call that should have been int 0x15
* trivial fix when BX_PCIBIOS and BX_ROMBIOS32 not defined
- implemented %X in bios_printf (patch by Sebastian)
* corrects a spelling error and removes the lba_capable comment
* moves dpte_segment after dpte_offset (endian problem) in the struct
* changes int13 0x15 to use the logical geometry instead of physical to
return sectors
* clips cylinders in Int13DPT
* fixes bit shift problem in options (parens in the wrong place)
* returns the correct offset for dpte.iobase2
* fixes a pointer arithmetic error in calculating the checksum of the dpte
* moves #if BX_SUPPORT_FLOPPY to include more floppy code
* added support for %lx %ld and %lu for bios_printf()
* CPU, PCI, ACPI and SMM init
* MP and ACPI table generation
- MP table generation hack in the Bochs memory code disabled (should be removed)
- don't test the checksum of large BIOS images (for now)
- existing 16-bit PCIBIOS init disabled for now
- applied patch from the qemu project (Fabrice Bellard)
* improved INT 15h function AX=E820h
* real mode PCI BIOS now returns IRQ routing information (function 0Eh)
- more accurate handling of the floppy recalibrate function (removed panic)
- small code cleanups and optimizations in the floppy code (e.g. do .. while loops,
always using 0040:003e for the floppy interrupt flag)
- small updates ported from the PC BIOS project
* support for XDF images added
* floppy controller should hang if media not present
* rombios has to reset the floppy controller after read/write failure
* serial debug output to COM1 for the rombios (disabled by default)
* added missing trailing newlines in info/panic messages
- log_bios_start() must initialize serial port for the serial debug feature
- comments for the parallel and serial detection code added
* cross-compilation support for the bios
* "user-settable" bios build date string
* hexadecimal nuber cosmetics, #0x instead #$
- use real build date for the bios build date string
- simplified printer status handling
* pcibios: preserve esi and edi
* pcibios: ignore high-word of edx when calling FIND_PCI_DEVICE
* pcibios_real: set readable descriptor to ds when error (for 16bit PM)
* bios_printf: replace immediate value 0xf000 with get_CS (for 16bit PM)
- Win98 cdrom boot fixed (patch by Magnus Damm)
- added emulation of the PS/2 mouse port without a mouse connected (some OS's
still detect a mouse)
- fixes for the mouse type 'serial_wheel' (the wheel still doesn't work in Win98)
now appear correctly as the Bochs panic message. Now we can get rid of messages
with the line number in the source file.
- updated / fixed description in biosdev.cc
- applied patch from sava (t.ebisawa / http://ebisa.hp.infoseek.co.jp/bochs/arcs/bochs-2.1.1-jpfix-20040214.zip)
* int09_handler: pusha before int15, ah=4f
(for "jis_a01" japanese keybord driver, which breaks some registers)
* int15_function: add new functions int15_function32, int15_function_mouse
(to avoid stack overflow ... DOS/Win9x works better)
* int16, ah=00/01/10/11 ignore special key code (F0)
- set missing return value and flag for unimplemented EISA BIOS
- debug message for unsupported EISA bus features added (int 15h, ah = d8h)
- moving rom scan loop to a separate function saves space in the main post code
(TODO: add code for rom checksum)
- interrupt vector 0x79 set to 0 (TODO: some other vectors seem to be 0, too)
Syslinux 1.48 that is used to boot freesco, did not like the latest
int15 function e801 returning AX=0 and BX=0, although my real
system does, and Ralph Brown list allow it.
Interestingly enough, the symptoms were floppy accesses with a track
number > 100. Funny.
Now int15 function e801 returns both extended and configured memory.
- add int75_handler, for msdos compatbility fpu exception
This handler calls int 2 (nmi). The NMI handler should really be aware
of this and should iret in case of FPU exception (to be implemented)
Instead, just build all 4 bioses for 1,2,4,8 processors all the time.
Now they should all stay in sync without any special effort.
Modified Files:
rombios.c Makefile.in
- add new keyboard init code from Adam Sulmicki
- changed last cli() to #asm cli #endasm
- remove unused cli() function
- don't panic on shutdown status 0x09. just do the normal post
- implement "large" "r-echs" "lba" disk translations
- fix if ( (sc==0x01) && (sn=0x01) ) bug
- fix option field in int13 function 0x48 for harddisks
- fix option field in int13 function 0x48 for cdrom
- add "%u" in printf to handle unsigned values
- remove UDIV
- asm helper asm function ldivul idiv_ and idiv_u
"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
- change int 15 function to get a pushad_regs_t parameter
instead of the registers enumeration
- change in int 15 references to 32bits,16bits and 8 bits
registers to their pushad_regs_t counterpart
- parallel port detection fixed:
* write the value of AX to 0x0410, not BX
* the timeout value is a byte and now stored in CL
* the offset of the port address list is 2 bytes
. 4 ata interfaces support
. devices auto-detection
. 16bits/32bits device access
. EDD3.0 support
. ata/atapi layer rewrite
. added verious DEBUG_XXX to debug only parts of the bios, because we're running low on data space in debug mode
. moved ata data at offset 0x121 in EBDA. Previously, data was being overwritten by keyboard.sys
. added jump to [0x40:0x67] after reset if shutdown status is 0x05. Fixes bug [ 601166 ] CMOS Problem @ "0x0F Index 0x05 data"
. DMA controller init on POST entry
* 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
- new real mode PCI BIOS functions: find device, read/write byte/dword
- C code for PCI BIOS handles errors and prints messages only
- function setPCIaddr() no longer needed
- functions inw() and outw() no longer used by the PCI BIOS
- BIOS32 checksum calculation rewriten to prevent errors
- labels of protected mode PCI BIOS renamed
Linux (kernel 2.2.18) is able to use the new features.
Here is the list of changes:
* BIOS32 data structure added
* BIOS32 and protected mode PCI BIOS functions added. The BIOS32 function
returns a pointer to the PCI BIOS entry point when the service $PCI is
requested and the PCI hardware is present.
* Supported 32 bit functions: installation check, find pci device,
read configuration byte/word/dword, write configuration byte/word/dword
* real mode PCI BIOS installation check rewritten in assembler to use 32 bit
registers for the protected mode entry point and the 'PCI ' signature.
TODO:
* add missing functions of the PCI BIOS (if necessary)
* add missing features of the i440FX PCI bridge
* implement the other parts of the i440FX chipset (PCI-to-ISA bridge,
PCI IDE controller, USB controller)
- functions inw() and outw() are required for the ATA driver too
- real mode PCI BIOS installation check returns revision level 2.10
- unsupported real mode PCI BIOS functions return the error code 0x81
- added ASM_START / ASM_END instead of #asm / #endasm.
Now we are (tested) able to compile with both gcc2 and gcc3
compiler (Eventually!) Aren't you happy Jeroen ? ;-)
- fixed [ 549815 ]. I included back int19_relocated at the bios
space could not hold the new mov ex, ax
- int19 calls int18 if the boot has failed. I hope this is the
right behavior.
- BX_DEBUG outputs to the INFO port till we can easily choose debug output on a per-device basis
- BX_DEBUG are only generated if DEBUG_ROMBIOS is defined to 1
- do not panic on unsupported function in int13, only output info message
- fixed a bug on boot signature check never done on floppy/harddisk and always on floppy images on cd
- the boot signature check on harddisks is always done
- the boot signature check on cdroms (either direct boot or floppy images) is never done
- the boot signature check on floppies is conditionnal to CMOS reg 0x38 (configuration floppy_bootsig_check)
- moved PIC initialization before calling optional rombios init functions (feature request [ 541908 ])