OS3.x/WarpOS can patch PPC code and page tables from the m68k side in shared RAM. QEMU does not see those writes through the PPC softmmu, so stale translation blocks can survive until the m68k/PPC handoff deadlocks.
Import the optional ppc_cpu_flush_jit hook, mark QEMU PPC code cache state dirty on 68040 instruction-cache and MMU ATC flushes, and consume one coalesced flush at the next m68k-to-PPC handoff. Skip the flush while the m68k is halted so PPC-only OS4 execution is not forced to retranslate continuously.
Stefan Reinauer [Wed, 17 Jun 2026 20:57:46 +0000 (13:57 -0700)]
prowizard: fix GnuPlayer sample buffer size
GnuPlayer clears a 64 KiB scratch buffer before expanding sample data,
but allocated only 65436 bytes for it. Allocate the full 65536 bytes so
the clear and later sample writes stay inside the buffer.
Stefan Reinauer [Wed, 17 Jun 2026 20:21:35 +0000 (13:21 -0700)]
prowizard: update integrated ripper to 1.70a
Refresh the bundled ProWizard sources from the standalone 1.70a
tree and add the new ripper modules to the Unix and Visual Studio
build lists.
Keep the WinUAE entry point, module-ripper file hooks, logging,
and byte-order compatibility shims while updating the visible Pro
Wizard version labels.
Drop duplicate upstream source aliases from the integrated build lists
so the imported ripper objects link without duplicate definitions.
Stefan Reinauer [Wed, 17 Jun 2026 16:17:38 +0000 (09:17 -0700)]
od-unix: show controller-backed hardfiles like Windows
Mirror Windows in the mounted-drive list for hardfiles attached to IDE,
SCSI, or custom controllers. Show the controller target instead of the
Amiga device name, and mark the boot priority as not applicable.
Keep RDB hardfiles on non-UAE controllers in the same state when they
are edited or saved. The Qt dialog clears the Device field, hides the
boot-priority controls, and serializes stale device names back to the
empty Windows-style value.
Stefan Reinauer [Wed, 17 Jun 2026 15:47:14 +0000 (08:47 -0700)]
od-unix: enable threaded CPU support
Match the Windows target by enabling the shared threaded CPU path on
Unix. The port already provides pthread-backed uae_thread_id and
semaphore helpers, but sysconfig.h did not expose WITH_THREADED_CPU.
That left upstream code that clears cpu_thread_tid after m68k_run()
unbuildable on Ubuntu.
Enable the feature in the Unix sysconfig instead of hiding the shared
code behind extra guards.
Stefan Reinauer [Wed, 17 Jun 2026 14:30:16 +0000 (07:30 -0700)]
cfgfile: handle missing command line option values
parse_cmdline_option() keeps unknown command line options in the
all_lines list. A trailing option such as -G reaches this path without
a value, which passed NULL to my_strdup() and crashed before the GUI
could start.
Store an empty string when no value is present so argument-less
options can still be represented in the saved option list.
Stefan Reinauer [Fri, 12 Jun 2026 15:23:15 +0000 (08:23 -0700)]
cmake: probe for a system 7-Zip/LZMA SDK before fetching
Requested by the openSUSE packager: distributions ship the SDK sources
(lzma-sdk-devel), so the vendored lzma1604.7z download is unnecessary
there. Probe WINUAE_LZMA_SDK_SYSTEM_PATHS (common /usr locations,
overridable) for an installed SDK source tree before falling back to
WINUAE_LZMA_SDK_DIR and the fetch. Candidates must provide the C
sources, not just headers, since the SDK is compiled into the build.
Stefan Reinauer [Fri, 12 Jun 2026 15:11:06 +0000 (08:11 -0700)]
od-unix: ship starter filter presets
The Filter page's preset list was empty until the user saved their own
(GitHub issue #4). Add a set of bundled presets built from the portable
filter controls the Unix GLSL pipeline implements (Sharp Pixels, Soft
Bilinear, CRT Scanlines, Warm TV), installed under the shared data
directory on Linux and into the app bundle resources on macOS.
The preset combo lists user presets and bundled presets together; the
user directory wins on name collisions, saving always writes to the
user directory, and loading falls back to the bundled file when no user
preset of that name exists.
Stefan Reinauer [Fri, 12 Jun 2026 07:21:03 +0000 (00:21 -0700)]
od-unix: fix config values lost in the Qt launcher round trip
Loading a configuration file could silently change it (GitHub issue #1,
"CPU and RAM are often not the ones I set"):
- The chipset_compatible handler synced the quickstart model combo
without blocking its signals, so loading any config with a
chipset_compatible value re-applied the whole quickstart model preset
over the explicit settings (FPU, compatibility flags, floppy count).
- FpuInternal was -1, which QButtonGroup treats as auto-assign and
checkedId() returns for "no selection": the CPU-internal FPU button
could never be selected programmatically, so fpu_model vanished from
every 68040/68060 configuration on save, start, and each F12 visit.
- nr_floppies had no load handler, so drive-enable states never
followed the loaded config.
Configs without a quickstart line also no longer gain a synthesized
quickstart key: quickstart mode now turns off when loading a full
configuration and is re-enabled by an explicit quickstart setting.
Verified by a new roundtrip harness: WINUAE_QT_CONFIG_ROUNDTRIP_OUT
makes the launcher load the given config, export the merged config, and
exit; unix-smoke-config-roundtrip.sh (in winuae_unix_smoke_basic)
compares CPU/FPU/MMU/memory/floppy keys across three machine profiles.
Stefan Reinauer [Fri, 12 Jun 2026 07:03:14 +0000 (00:03 -0700)]
od-unix: persist host settings in winuae.ini
The Unix port had no equivalent of the Windows registry/winuae.ini
store: the Qt Paths page reverted to hardcoded defaults on every start
(GitHub issue #2).
Port the ini-file mode of the od-win32 registry abstraction into
od-unix/registry.cpp on top of the shared ini.cpp, with the same
registry.h API. The store resolves to winuae.ini next to the executable
when present (portable mode, matching Windows), otherwise
$XDG_CONFIG_HOME/winuae/winuae.ini on Linux and
~/Library/Application Support/WinUAE/winuae.ini on macOS; the
WINUAE_INI environment variable overrides the location.
The Qt launcher loads the Paths page directories and flags from the
store and saves them when the dialog closes, through new host-setting
hooks on the provider struct. The core path fetchers consult the stored
values between per-config unix.*_path overrides and the built-in
defaults, so the configured directories also apply outside the GUI.
Settings flush on dialog close and at gui_exit.
Covered by winuae_unix_registry_test (value types, subtrees,
enumeration, deletion, and persistence across reopen).
Stefan Reinauer [Fri, 12 Jun 2026 04:58:38 +0000 (21:58 -0700)]
od-unix: match Windows GUI button semantics in runtime (F12) UI
The runtime GUI's bottom button row behaved like the pre-start launcher:
Quit and Cancel both just closed the dialog and resumed emulation, Reset
reverted the UI to A1200 quickstart defaults, and Restart was hidden.
Mirror the Windows GUI (IDC_RESETAMIGA/IDC_QUITEMU/IDC_RESTARTEMU):
- Quit requests uae_quit() and exits the emulator.
- Reset applies the edited configuration and hard-resets the Amiga
(uae_reset(1,1)), then resumes.
- Restart is shown in runtime mode and returns to the launcher through
uae_restart().
- Start is relabeled OK while emulation is running; Cancel and closing
the window still resume without applying changes.
The launcher result carries the new quit/restart states and a hard-reset
flag through the bridge; pre-start behavior is unchanged.
Also write floppy paths and the first CD slot into the merged config
even when empty, so ejecting media in the runtime GUI reaches the
core's disk-change detection instead of silently keeping the old image.
Stefan Reinauer [Fri, 12 Jun 2026 04:38:36 +0000 (21:38 -0700)]
cmake: name the Unix binary winuae
The installed Linux command, the .desktop entries, and the WinUAE.app
bundle all use the name winuae while the build tree produced
winuae_unix. Set OUTPUT_NAME on the winuae_unix target so the binary is
winuae everywhere, drop the now-redundant install RENAME, and update
the smoke script defaults, bundling scripts, and README accordingly.
macos-bundle.sh keeps a fallback for build directories from before the
rename. The CMake target names are unchanged.
Stefan Reinauer [Fri, 12 Jun 2026 04:31:19 +0000 (21:31 -0700)]
od-unix: seed Qt launcher from default.uae at startup
The shared core loads <configurationpath>/default.uae into the prefs at
startup (main.cpp real_main), but the Qt launcher built its state from
scratch, so the default configuration had no visible effect unless the
GUI was disabled. Pass the file as the launcher's initial config path
when it exists, matching the Windows "save as default.uae" behavior.
Configs given on the command line keep precedence: the launcher's own
argument parsing decides, exposed through the bridge so gui_init does
not duplicate it. The bridge no longer infers runtime mode from "an
initial config path is present"; gui_display passes it explicitly.
Stefan Reinauer [Fri, 5 Jun 2026 04:41:33 +0000 (21:41 -0700)]
bsdsocket: preserve Unix trap context for host calls
The Unix shutdown and setsockopt paths need the active TrapContext when
they resolve guest socket descriptors and copy guest option data. Store
the current context in the socket base before dispatching those host
calls and when the deferred WaitSelect worker is armed.
Stefan Reinauer [Fri, 5 Jun 2026 04:41:16 +0000 (21:41 -0700)]
target: share WinUAE build date with Unix
The Unix target date was copied as a separate literal and had already
drifted from the date used by the Windows version macros. Move the
date macros to a small shared header and have both targets read the
same value.
Stefan Reinauer [Thu, 4 Jun 2026 14:55:29 +0000 (07:55 -0700)]
clipboard: expose host text polling hook
Declare the host-side text polling entry point in the shared header.
This lets target backends report clipboard text changes without private
header dependencies.
- Apply writes to the current sample set volume register immediately.
The stream volume was only loaded when a sample set was (re)loaded,
so volume changes during playback (e.g. AHI volume fades on a
looping sound) were silently ignored, even though current-set
register writes are documented to take effect on the next sample
period.
- Scale samples by the set volume and board channel volume
multiplicatively. The previous averaging formula had a 0.5 gain
floor, so volume 0 still played at half loudness.
- Initialize the board channel volumes for all stream channels, not
just the first two.
jit: split x86 compiler files into platform directory
Keep the root JIT files as dispatchers and move the x86 compiler
implementation under jit/x86. This mirrors the Amiberry split and keeps
platform-specific JIT code out of the shared wrapper files.
Update the x86 generator paths so regenerated x86 tables do not
overwrite the root dispatchers.
Stefan Reinauer [Thu, 4 Jun 2026 03:36:51 +0000 (20:36 -0700)]
prowizard: use C++ linkage for host callbacks
Pro-Wizard is built as C++ on Windows, so its host callback
declarations should use normal C++ linkage.
Drop the C-linkage guard around those callback declarations. Unix
builds should match Windows by compiling Pro-Wizard as C++ instead of
changing callback linkage.
Stefan Reinauer [Wed, 27 May 2026 16:06:10 +0000 (09:06 -0700)]
slirp: harden backend reinitialization
Ariadne can close and reopen the selected Ethernet backend while
guest software probes or retries card configuration. The SLIRP
backend destroyed callback state before the receive thread was known
to be stopped, and ignored initialization or thread start failures.
Join the receive thread before teardown, keep callback state alive
until shutdown completes, report SLIRP startup failures, and reset or
reuse BOOTP leases across backend restarts.
Stefan Reinauer [Thu, 4 Jun 2026 02:07:22 +0000 (19:07 -0700)]
sndboard: keep addrbank tables file-local
The sound-board addrbank tables are static, but earlier forward
declarations used external linkage. That breaks C++ builds when the
Unix port enables the shared sound-board sources.
Declare the memory callbacks first and move the static bank tables
before the accessors that reference them. This keeps the symbols
file-local without conflicting declarations.