ffc722f4e8
by Michele Giacomone Detailed description: -Observed issues Due to some limitations only dates between 1980 and 2038 can be used in a reliable way. Also, bochs incorrectly assumes a linear correspondence between the data returned by the <time.h> functions localtime() and mktime(), and isn't setting the latter properly. Bochs keeps its internal time value dependent to these functions after setup, assuming that their internal settings won't change on the go - which is not the case. In my OS, and in my timezone, this leads to incorrect startup values for 5 months each year and unreliable values if the simulation is kept going for a long time. (a feedback between localtime() and mktime() is created which keeps shifting back the time) Also, the RTC simulation is not realistic since the clock fixes itself across DST changes, without updating any DST related flag, a behavior that no guest OS expects. -Proposed fix This is implemented in such way that no bochs' previous behavior is changed, a part from the broken ones, with legacy in mind == the user can keep using bochs exactly as before knowing nothing of this patch +Make the internal s.timeval variable a Bit64s, so it can fit all values that the cmos can correctly represent, reported below: MIN setting -62167219200 => 0000/01/01 SAT 0:00:00 MAX BCD setting 253402300799 => 9999/12/31 FRI 23:59:59 MAX BIN setting 745690751999 => 25599/12/31 FRI 23:59:59 And then fix each reference to these so it can handle such values And make bochs correctly wrap around for under/overflows, so that only the most significant bits of the century are lost. +Do the same thing to the bochs time0 parameter, so all the above values can be chosen at startup (despite being now legal values, 1 and 2 will still be treated as "local" and "utc"). Note that normally only BCD settings are valid since bochs' CMOS defaults to such operating mode - the only way to use the binary range is by loading a cmos memory map. +Make the internal s.timeval variable independent from external factors. This means providing a small set of time handling functions, contained in "iodev/utctime.h", which must work in any environment in which bochs compiles, accessing no external resource. This also means that after startup, s.timeval will only be changed internally, and no call to the OS time functions will be made. +Make the internal s.timeval variable timezone independent, to have a linear correlation between its values and valid CMOS settings. To make it easier, s.timeval is gonna be treated as if the current timezone was UTC: so, - if the user selects UTC as time0, s.timeval will become current time(NULL) - if the user selects localtime, s.timeval will be computed as the value which will display the same broken down time as localtime(&now) - if the user inputs a time formatted string the proper s.timeval to displayed will be easily calculated, - if the user inputs a starting time value, s.timeval will be computed as the value which will display the same broken down time as localtime(&user_input) to ensure the same operation as before. A "tz=utc" is displayed when bochs prints out the current time value, to warn users about the difference in meaning between the internally kept time value and the value they can set through the "time0=" parameter. This might be changed to communicate instead the time value they can input to get the same setting, but performing such calculation (except for the startup time) suffers from all the mktime()/localtime() problems listed above so I did not do it. The range of "time0" is automatically adjusted so all users in all time zones can set any legal value despite "time0=" having a local meaning. A thorough explanation of what I did and why can be found in the "iodev/utctime.h" library header. --------- Co-authored-by: Stanislav Shwartsman <sshwarts@users.sourceforge.net> Co-authored-by: Volker Ruppert <Volker.Ruppert@t-online.de>
138 lines
2.4 KiB
Plaintext
138 lines
2.4 KiB
Plaintext
# General
|
|
*.o
|
|
*.lo
|
|
*.a
|
|
*.la
|
|
*.orig
|
|
*.rej
|
|
obj-debug/
|
|
obj-release/
|
|
.vscode
|
|
bochs-msvc-src.zip
|
|
|
|
# /bochs/
|
|
/bochs/Makefile
|
|
/bochs/bochs
|
|
/bochs/bochs.exe
|
|
/bochs/bximage
|
|
/bochs/bximage.exe
|
|
/bochs/bxcommit
|
|
/bochs/bxcommit.exe
|
|
/bochs/bxhub
|
|
/bochs/bxhub.exe
|
|
/bochs/bxversion.h
|
|
/bochs/bxversion.rc
|
|
/bochs/config.h
|
|
/bochs/config.log
|
|
/bochs/config.status
|
|
/bochs/bochsout.txt
|
|
/bochs/config.cache
|
|
/bochs/.conf.my
|
|
/bochs/niclist.exe
|
|
/bochs/parport.out
|
|
/bochs/ltdlconf.h
|
|
/bochs/libtool
|
|
/bochs/.bochs.out
|
|
/bochs/vs2019
|
|
|
|
# /bochs/bios/
|
|
/bochs/bios/Makefile
|
|
/bochs/bios/_rombios*_.c
|
|
/bochs/bios/biossums
|
|
/bochs/bios/rombios*.s
|
|
/bochs/bios/rombios*.sym
|
|
/bochs/bios/rombios*.txt
|
|
/bochs/bios/rombios*.bin
|
|
/bochs/bios/rombios32.out
|
|
|
|
# /bochs/build/linux/
|
|
/bochs/build/linux/DOC-linux.html
|
|
/bochs/build/linux/bochs-dlx
|
|
|
|
# /bochs/build/macosx/
|
|
/bochs/build/macosx/Info.plist
|
|
|
|
# /bochs/build/win32/nsis/
|
|
/bochs/build/win32/nsis/Makefile
|
|
/bochs/build/win32/nsis/bochs.nsi
|
|
|
|
# /bochs/bx_debug/
|
|
/bochs/bx_debug/Makefile
|
|
|
|
# /bochs/cpu/
|
|
/bochs/cpu/Makefile
|
|
|
|
# /bochs/disasm/
|
|
/bochs/disasm/Makefile
|
|
|
|
# /bochs/doc/docbook/
|
|
/bochs/doc/docbook/Makefile
|
|
|
|
# /bochs/doc/docbook/development/
|
|
/bochs/doc/docbook/development/*.html
|
|
|
|
# /bochs/doc/docbook/documentation/
|
|
/bochs/doc/docbook/documentation/*.html
|
|
|
|
# /bochs/doc/docbook/user/
|
|
/bochs/doc/docbook/user/*.html
|
|
|
|
# /bochs/gui/
|
|
/bochs/gui/Makefile
|
|
/bochs/gui/.libs/
|
|
|
|
# /bochs/host/linux/pcidev/
|
|
/bochs/host/linux/pcidev/Makefile
|
|
|
|
# /bochs/instrument/stubs/
|
|
/bochs/instrument/stubs/Makefile
|
|
/bochs/instrument/example*/Makefile
|
|
|
|
# /bochs/iodev/
|
|
/bochs/iodev/Makefile
|
|
/bochs/iodev/.libs/
|
|
|
|
# /bochs/memory/
|
|
/bochs/memory/Makefile
|
|
|
|
# /bochs/misc/
|
|
/bochs/misc/Makefile
|
|
|
|
# /bocks/cpu/avx/
|
|
/bochs/cpu/avx/Makefile
|
|
|
|
# /bochs/cpu/cpudb/
|
|
/bochs/cpu/cpudb/Makefile
|
|
|
|
# /bochs/cpu/fpu/
|
|
/bochs/cpu/fpu/Makefile
|
|
|
|
# /bochs/iodev/display/
|
|
/bochs/iodev/display/Makefile
|
|
/bochs/iodev/display/.libs/
|
|
|
|
# /bochs/iodev/hdimage/
|
|
/bochs/iodev/hdimage/Makefile
|
|
/bochs/iodev/hdimage/.libs/
|
|
|
|
# /bochs/iodev/network/
|
|
/bochs/iodev/network/Makefile
|
|
/bochs/iodev/network/.libs/
|
|
|
|
# /bochs/iodev/sound/
|
|
/bochs/iodev/sound/Makefile
|
|
/bochs/iodev/sound/.libs/
|
|
|
|
# /bochs/iodev/usb/
|
|
/bochs/iodev/usb/Makefile
|
|
/bochs/iodev/usb/.libs/
|
|
|
|
# /sfsite/
|
|
/sfsite/doc
|
|
/sfsite/guestos
|
|
/sfsite/screenshot
|
|
/sfsite/techspec
|
|
/sfsite/tmp
|
|
/sfsite/xcf
|
|
/sfsite/.glimpse*
|