- 68040 form of PTEST fixed and handled (previously didn’t decode correctly)
- Fixed PFLUSH decoding so incorrect F-line traps don't occur
- Indirect page descriptors write back U/M bits properly instead of potentially corrupting the page table
- Reset now properly clears ITTx/DTTx
- MMUSR now shown in the debugger to help track failed translations
- PFLUSH on 68881/68030 now properly compare the ATC tag
- Fixed typo causing misinterpretation of long-format descriptors
- Indirect descriptors now are handled properly
- PTEST on 68881/68030 properly handles levels shallower than the table depth
- PMOVE to TTx now properly flushes the ATC
- TC consistency check no longer throws exceptions on valid TC values with junk in the TI fields
- MMU EA decoding now only accepts forms the real MMUs do
- Added some guards against invalid page tables
M68k: FPU fixes and updates [R. Belmont]
- FPU opcode now validated before doing any EA calculations
- 68040-specific FSxxx/FDxxx instructions implemented
- 68881 transcendentals implemented and verified
M68k: cycle counting overhauled for 68030 and 68040. Timings are significantly better but still inaccurate, especially on 68040. [R. Belmont]
3rdparty/softfloat3: Fixed several errors in the transcendental helpers, including wrong parameter order [R. Belmont]
AI disclosure: MMU and FPU debug/tracing and fix planning assisted by Claude Fable 5. Cycle count refactor assisted by GPT 5.6 Terra.
Testing: A/UX 3.1.1 now boots properly on a range of 68030 and 68040 machines (with some driver changes not included here). It previously was impossible to boot on 68040. A generated Lua boot script hijacked 68030 and 68040 Macs to run a variety of synthetic FPU and MMU tests. Tested taitojc, Marathon, Wolfenstein 3D, and Jigsaw Puzzle on Mac OS. Tested NeXTSTEP on 68030 and 68040. Tested HP/UX m68k. Tested funkball on x86 to verify x87 is unhurt by the softfloat3 helper fixes.
There are supposed to be empty directories at
zlib/test/find_package_no_components_test and
zlib/test/find_package_wrong_components_test but git doesn't have a way
to represent that.
* Local fix for GENie resource include directory bug, sent upstream as bkaradzic/GENie#572
* Local fix to disable broken command line escaping
* Local fix to use MPARAM instead of hard-coded -m64
* You actually need to add copyright notices when adding stuff in
3rdparty.
* bus/bk: Fixed bad exposed class.
* Metadata fixes.
* Got rid of non-const function statics.
* bx: Small platform detection/usage improvements
* Use BX_PLATFORM_POSIX where needed
The semaphone implementation already uses BX_PLATFORM_POSIX to include
<pthread.h> on all the POSIX platforms; do the same also in other places
for consistency. This is done also for <sched.h>, which is a POSIX API,
and sched_yield() from it is already guarded by BX_PLATFORM_POSIX.
* Drop support for GNU libc older than 2.12
glibc 2.12 was released on 2010, and at this point any supported Linux
distro has that version or way greather than that.
From bkaradzic/bx@b59b7debd3
* bx: fix <pthread/pthread.h> include on Hurd
<pthread/pthread.h> does not exist, the standard <pthread.h> does exist
so switch to it.
* osd/modules/file: use dirent::d_type on any GNU libc platform
This BSD extension is provided by GNU libc, so enable its usage with
that C library.
* osd/modules/file: use <pty.h> on any GNU libc platform
openpty() is implemented by GNU libc for all the OSes, so include
<pty.h> when using that C library.
* osd/modules/file: cast dirent::d_name to const char* before using it
According to POSIX [1], the type of dirent::d_name is loosely defined
as "char d_name[]", as array with an undefined size. In particular, few
ways are seen in the wild:
(a) "char d_name[size]", i.e. as proper array with a full size
(b) "char d_name[1]"/"char d_name[0]", i.e. as C flexible arrays
Regardless of its type, dirent::d_name is used as if it was a classic
const char *, i.e. as pointer to a null-terminated string.
util::string_format() uses C++ templates to collect all the arguments,
and thus it will use the actual type of dirent::d_name. In case of (a)
there is no issue, however for (b) the result is that only the first
character is used.
To ensure that dirent::d_name is fully used, explicitly cast it to
const char * before passing it to util::string_format(), so the whole
string is used.
[1] https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/dirent.h.html
This was not straightforward, and we're now ahead of the ImGui version
in upstream bgfx.
Updated the bgfx-specific memory editor widget rather than just
partially removing the code.
Had to add an explicit template instantiation to imgui_widgets.cpp to
avoid a link error in the bgfx-specific range slider widget.
Got the imgconfig.h header a lot closer to the template from upstream
ImGui.