Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 27 Apr 2026 00:02:59 +0000
From:      Robert Clausecker <fuz@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Cc:        polyduekes <polyduekes@proton.me>
Subject:   git: 0c9dbcb62b35 - main - emulators/amiberry: Update to 8.1.5
Message-ID:  <69eea7b3.1df7b.3044502b@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by fuz:

URL: https://cgit.FreeBSD.org/ports/commit/?id=0c9dbcb62b3517dc951f58bb7bfbcd9ae996343b

commit 0c9dbcb62b3517dc951f58bb7bfbcd9ae996343b
Author:     polyduekes <polyduekes@proton.me>
AuthorDate: 2026-04-22 19:16:21 +0000
Commit:     Robert Clausecker <fuz@FreeBSD.org>
CommitDate: 2026-04-27 00:01:03 +0000

    emulators/amiberry: Update to 8.1.5
    
    Changelog: https://github.com/BlitterStudio/amiberry/releases/tag/v8.1.5
    
    PR:             294710
    Event:          Wiesbaden Hackathon 202604
---
 emulators/amiberry/Makefile                        |  73 +++++--
 emulators/amiberry/distinfo                        |   6 +-
 emulators/amiberry/files/patch-CMakeLists.txt      |  37 ++++
 .../amiberry/files/patch-cmake_SourceFiles.cmake   |  11 -
 .../patch-cmake_StandardProjectSettings.cmake      |  16 ++
 .../amiberry/files/patch-src_osdep_fsdb__host.cpp  |  16 ++
 .../files/patch-src_osdep_sigsegv__handler.cpp     | 240 +++++++++++++++++++++
 .../patch-src_pcem_vid__voodoo__codegen__x86.h     |  86 ++++++++
 emulators/amiberry/pkg-plist                       | 111 +---------
 9 files changed, 466 insertions(+), 130 deletions(-)

diff --git a/emulators/amiberry/Makefile b/emulators/amiberry/Makefile
index 92a1d0f6e58a..1358b6510c9c 100644
--- a/emulators/amiberry/Makefile
+++ b/emulators/amiberry/Makefile
@@ -1,7 +1,6 @@
 PORTNAME=	amiberry
 DISTVERSIONPREFIX=	v
-DISTVERSION=	7.1.1
-PORTREVISION=	1
+DISTVERSION=	8.1.5
 CATEGORIES=	emulators
 
 MAINTAINER=	polyduekes@proton.me
@@ -14,23 +13,73 @@ LICENSE_FILE=	${WRKSRC}/LICENSE
 
 ONLY_FOR_ARCHS=	aarch64 amd64 armv6 armv7 i386 riscv64
 
-BUILD_DEPENDS=	${LOCALBASE}/include/sys/sysinfo.h:devel/libsysinfo
-LIB_DEPENDS=	libenet.so:net/enet \
+BUILD_DEPENDS=	${LOCALBASE}/include/sys/sysinfo.h:devel/libsysinfo \
+		${LOCALBASE}/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake:devel/nlohmann-json
+LIB_DEPENDS=	libcurl.so:ftp/curl \
 		libFLAC.so:audio/flac \
-		libmpeg2.so:multimedia/libmpeg2 \
 		libmpg123.so:audio/mpg123 \
-		libpng.so:graphics/png \
-		libportmidi.so:audio/portmidi \
-		libserialport.so:devel/libserialport \
-		libzstd.so:archivers/zstd
+		libpng.so:graphics/png
 RUN_DEPENDS=	${LOCALBASE}/share/icons/hicolor/index.theme:misc/hicolor-icon-theme
 
-USES=		cmake desktop-file-utils ninja pkgconfig sdl shared-mime-info
+USES=		iconv cmake desktop-file-utils ninja pkgconfig sdl shared-mime-info
 USE_GITHUB=	yes
 GH_ACCOUNT=	BlitterStudio
-USE_SDL=	image2 sdl2 ttf2
+USE_SDL=	sdl3 image3
 
-OPTIONS_DEFINE=	DOCS
+LDFLAGS+=	-lutil
+
+OPTIONS_DEFINE=	BUNDLE_SDL DBUS DOCS GLES IPC_SOCKET LIBENET \
+		LIBMPEG2 LIBSERIALPORT OPENGL PCEM PORTMIDI UAENET_PCAP \
+		VULKAN ZSTD WITH_LTO WITH_OPTIMIZE
+OPTIONS_DEFAULT=	IPC_SOCKET LIBENET LIBMPEG2 LIBSERIALPORT OPENGL \
+			PCEM PORTMIDI UAENET_PCAP ZSTD
+OPTIONS_EXCLUDE_risv64=	PCEM
 OPTIONS_SUB=	yes
 
+BUNDLE_SDL_DESC=	Bundle SDL3 shared libraries
+DBUS_DESC=		DBus control interface
+GLES_DESC=		Use OpenGL ES instead of desktop OpenGL
+IPC_SOCKET_DESC=	Unix socket IPC control
+LIBENET_DESC=		Network emulation via libenet
+LIBMPEG2_DESC=		CD32 FMV support via libmpeg2
+LIBSERIALPORT_DESC=	Serial port emulation via libserialport
+OPENGL_DESC=		OpenGL renderer
+PCEM_DESC=		PCem hardware emulation
+PORTMIDI_DESC=		MIDI emulation via PortMidi
+UAENET_PCAP_DESC=	uaenet backend via libpcap
+VULKAN_DESC=		Experimental Vulkan renderer
+ZSTD_DESC=		CHD compressed disk image support via Zstandard
+WITH_LTO_DESC=		Link Time Optimization
+WITH_OPTIMIZE_DESC=	Native CPU Optimization
+
+VULKAN_PREVENTS=	OPENGL
+
+BUNDLE_SDL_CMAKE_BOOL=	BUNDLE_SDL
+DBUS_CMAKE_BOOL=	USE_DBUS
+GLES_CMAKE_BOOL=	USE_GLES
+IPC_SOCKET_CMAKE_BOOL=	USE_IPC_SOCKET
+LIBENET_CMAKE_BOOL=	USE_LIBENET
+LIBMPEG2_CMAKE_BOOL=	USE_LIBMPEG2
+LIBSERIALPORT_CMAKE_BOOL=	USE_LIBSERIALPORT
+OPENGL_CMAKE_BOOL=	USE_OPENGL
+PCEM_CMAKE_BOOL=	USE_PCEM
+PORTMIDI_CMAKE_BOOL=	USE_PORTMIDI
+UAENET_PCAP_CMAKE_BOOL=	USE_UAENET_PCAP
+VULKAN_CMAKE_BOOL=	USE_VULKAN
+ZSTD_CMAKE_BOOL=	USE_ZSTD
+WITH_LTO_CMAKE_BOOL=	WITH_LTO
+WITH_OPTIMIZE_CMAKE_BOOL=	WITH_OPTIMIZE
+
+DBUS_LIB_DEPENDS=	libdbus-1.so:devel/dbus
+GLES_LIB_DEPENDS=	libEGL.so:graphics/libglvnd \
+			libGLESv2.so:graphics/libglvnd
+LIBENET_LIB_DEPENDS=	libenet.so:net/enet
+LIBMPEG2_LIB_DEPENDS=	libmpeg2.so:multimedia/libmpeg2
+LIBSERIALPORT_LIB_DEPENDS=	libserialport.so:devel/libserialport
+OPENGL_LIB_DEPENDS=	libOpenGL.so:graphics/libglvnd
+PORTMIDI_LIB_DEPENDS=	libportmidi.so:audio/portmidi
+UAENET_PCAP_LIB_DEPENDS=	libpcap.so:net/libpcap
+VULKAN_LIB_DEPENDS=	libvulkan.so:graphics/vulkan-loader
+ZSTD_LIB_DEPENDS=	libzstd.so:archivers/zstd
+
 .include <bsd.port.mk>
diff --git a/emulators/amiberry/distinfo b/emulators/amiberry/distinfo
index 68e6c40a4ab7..2b6a6c013877 100644
--- a/emulators/amiberry/distinfo
+++ b/emulators/amiberry/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1757491854
-SHA256 (BlitterStudio-amiberry-v7.1.1_GH0.tar.gz) = 5baa70ea42fa7e3d5b3cbec56cbd49585869600f054cf7285a8a33463e8ad2fa
-SIZE (BlitterStudio-amiberry-v7.1.1_GH0.tar.gz) = 11279537
+TIMESTAMP = 1776707171
+SHA256 (BlitterStudio-amiberry-v8.1.5_GH0.tar.gz) = 33ef1343fef5ebd4bad5a08efc995e38fd918aa2c3a472867ab41b68c53dac82
+SIZE (BlitterStudio-amiberry-v8.1.5_GH0.tar.gz) = 17208280
diff --git a/emulators/amiberry/files/patch-CMakeLists.txt b/emulators/amiberry/files/patch-CMakeLists.txt
new file mode 100644
index 000000000000..46b812f61442
--- /dev/null
+++ b/emulators/amiberry/files/patch-CMakeLists.txt
@@ -0,0 +1,37 @@
+--- CMakeLists.txt.orig	2026-04-22 13:26:02 UTC
++++ CMakeLists.txt
+@@ -142,7 +142,7 @@ include(cmake/Dependencies.cmake)
+ 
+ # Install rules may need dependency targets, such as SDL3 and SDL3_image,
+ # so include them after dependency discovery.
+-if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
++if (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+     include(cmake/linux/install.cmake)
+ elseif (IOS)
+     include(cmake/ios/install.cmake)
+@@ -153,25 +153,3 @@ include(packaging/CMakeLists.txt)
+ endif ()
+ 
+ include(packaging/CMakeLists.txt)
+-
+-# Link libraries (FreeBSD needs correct order)
+-if(TARGET amiberry AND CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+-    target_link_options(amiberry PRIVATE -L/usr/local/lib)
+-    # Apply FreeBSD pkg-config include/link dirs
+-    if(FREEBSD_INCLUDE_DIRS)
+-        target_include_directories(amiberry PRIVATE ${FREEBSD_INCLUDE_DIRS})
+-    endif()
+-    if(FREEBSD_LIBRARIES)
+-        target_link_libraries(amiberry PRIVATE ${FREEBSD_LIBRARIES})
+-    endif()
+-
+-    # forkpty() lives in libutil on FreeBSD
+-    target_link_libraries(amiberry PRIVATE util)
+-
+-    # libiconv_* symbols come from ports/converters/libiconv
+-    find_library(LIBICONV_LIBRARY NAMES iconv PATHS /usr/local/lib REQUIRED)
+-    target_link_libraries(amiberry PRIVATE ${LIBICONV_LIBRARY})
+-
+-    # existing libs
+-    target_link_libraries(amiberry PRIVATE ${LIBUSB_LIBRARY} serialport ${EXTRA_LIBS})
+-endif()
diff --git a/emulators/amiberry/files/patch-cmake_SourceFiles.cmake b/emulators/amiberry/files/patch-cmake_SourceFiles.cmake
deleted file mode 100644
index f0f8e774ba0f..000000000000
--- a/emulators/amiberry/files/patch-cmake_SourceFiles.cmake
+++ /dev/null
@@ -1,11 +0,0 @@
---- cmake/SourceFiles.cmake.orig	2025-09-07 17:28:06 UTC
-+++ cmake/SourceFiles.cmake
-@@ -452,7 +452,7 @@ install(TARGETS ${PROJECT_NAME}
- )
-
- # Settings for installing per platform
--if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
-+if (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
-     include(cmake/linux/CMakeLists.txt)
- elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
-     include(cmake/macos/CMakeLists.txt)
diff --git a/emulators/amiberry/files/patch-cmake_StandardProjectSettings.cmake b/emulators/amiberry/files/patch-cmake_StandardProjectSettings.cmake
new file mode 100644
index 000000000000..11ec8660d03f
--- /dev/null
+++ b/emulators/amiberry/files/patch-cmake_StandardProjectSettings.cmake
@@ -0,0 +1,16 @@
+--- cmake/StandardProjectSettings.cmake.orig	2026-04-26 10:53:54 UTC
++++ cmake/StandardProjectSettings.cmake
+@@ -83,6 +83,13 @@ if(WITH_LTO)
+ endif()
+ 
+ if(WITH_LTO)
++	# ensure LTO links with lld on FreeBSD/clang.
++    if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
++        string(APPEND CMAKE_EXE_LINKER_FLAGS " -fuse-ld=lld")
++        string(APPEND CMAKE_SHARED_LINKER_FLAGS " -fuse-ld=lld")
++        string(APPEND CMAKE_MODULE_LINKER_FLAGS " -fuse-ld=lld")
++    endif()
++
+     include(CheckIPOSupported)
+     check_ipo_supported(RESULT lto_supported OUTPUT lto_error)
+     if(lto_supported)
diff --git a/emulators/amiberry/files/patch-src_osdep_fsdb__host.cpp b/emulators/amiberry/files/patch-src_osdep_fsdb__host.cpp
new file mode 100644
index 000000000000..54696492b465
--- /dev/null
+++ b/emulators/amiberry/files/patch-src_osdep_fsdb__host.cpp
@@ -0,0 +1,16 @@
+--- src/osdep/fsdb_host.cpp.orig	2026-04-25 15:03:50 UTC
++++ src/osdep/fsdb_host.cpp
+@@ -642,7 +642,13 @@ bool my_utime(const char* name, const struct mytimeval
+ 		ok = _utime(path_utf8.c_str(), &utb) == 0;
+ #else
+ 		struct timeval times[2];
++#if defined(__FreeBSD__) && defined(__i386__)
++		times[0].tv_sec = static_cast<time_t>(mtv.tv_sec);
++		times[0].tv_usec = static_cast<suseconds_t>(mtv.tv_usec);
++		times[1] = times[0];
++#else
+ 		times[0] = times[1] = { mtv.tv_sec, mtv.tv_usec };
++#endif
+ 		ok = utimes(path_utf8.c_str(), times) == 0;
+ #endif
+ 	}
diff --git a/emulators/amiberry/files/patch-src_osdep_sigsegv__handler.cpp b/emulators/amiberry/files/patch-src_osdep_sigsegv__handler.cpp
new file mode 100644
index 000000000000..703fc5bfb4ab
--- /dev/null
+++ b/emulators/amiberry/files/patch-src_osdep_sigsegv__handler.cpp
@@ -0,0 +1,240 @@
+--- src/osdep/sigsegv_handler.cpp.orig	2026-04-26 06:59:39 UTC
++++ src/osdep/sigsegv_handler.cpp
+@@ -63,6 +63,9 @@ void init_max_signals()
+ #else
+ #include <sys/ucontext.h>
+ #endif
++#if defined(__FreeBSD__) && defined(CPU_AARCH64)
++#include <machine/ucontext.h>
++#endif
+ #include <csignal>
+ #include <dlfcn.h>
+ 
+@@ -154,8 +157,10 @@ static int handle_exception(mcontext_t sigcont, long f
+ #endif
+ {
+ 	int handled = HANDLE_EXCEPTION_NONE;
++#if defined(__FreeBSD__) && defined(CPU_AARCH64)
++	auto fault_pc = static_cast<uintptr>(sigcont->mc_gpregs.gp_elr);
++#elif !defined(__MACH__)
+ // Mac OS X struct for this is different
+-#ifndef __MACH__
+ 	auto fault_pc = static_cast<uintptr>(sigcont->pc);
+ #else
+ 	auto fault_pc = static_cast<uintptr>(sigcont->__ss.__pc);
+@@ -199,7 +204,9 @@ static int handle_exception(mcontext_t sigcont, long f
+ 		// Check for stupid RAM detection of kickstart
+ 		if (a3000lmem_bank.allocated_size > 0 && amiga_addr >= a3000lmem_bank.start - 0x00100000 && amiga_addr < a3000lmem_bank.start - 0x00100000 + 8) {
+ 			output_log(_T("  Stupid kickstart detection for size of ramsey_low at 0x%08x.\n"), amiga_addr);
+-#ifndef __MACH__
++#if defined(__FreeBSD__) && defined(CPU_AARCH64)
++			sigcont->mc_gpregs.gp_elr += 4;
++#elif !defined(__MACH__)
+ 			sigcont->pc += 4;
+ #else
+ 			sigcont->__ss.__pc += 4;
+@@ -211,7 +218,9 @@ static int handle_exception(mcontext_t sigcont, long f
+ 		// Check for stupid RAM detection of kickstart
+ 		if (a3000hmem_bank.allocated_size > 0 && amiga_addr >= a3000hmem_bank.start + a3000hmem_bank.allocated_size && amiga_addr < a3000hmem_bank.start + a3000hmem_bank.allocated_size + 8) {
+ 			output_log(_T("  Stupid kickstart detection for size of ramsey_high at 0x%08x.\n"), amiga_addr);
+-#ifndef __MACH__
++#if defined(__FreeBSD__) && defined(CPU_AARCH64)
++			sigcont->mc_gpregs.gp_elr += 4;
++#elif !defined(__MACH__)
+ 			sigcont->pc += 4;
+ #else
+ 			sigcont->__ss.__pc += 4;
+@@ -241,43 +250,58 @@ static int handle_exception(mcontext_t sigcont, long f
+ 		transfer_type_t transfer_type = TYPE_UNKNOWN;
+ 		int transfer_size = SIZE_UNKNOWN;
+ 
+-			const auto get_reg_w = [&](const int reg) -> uae_u32 {
+-				if (reg == 31)
+-					return 0;
+-#ifndef __MACH__
+-				return static_cast<uae_u32>(sigcont->regs[reg]);
++				const auto get_reg_w = [&](const int reg) -> uae_u32 {
++					if (reg == 31)
++						return 0;
++#if defined(__FreeBSD__) && defined(CPU_AARCH64)
++					if (reg < 30)
++						return static_cast<uae_u32>(sigcont->mc_gpregs.gp_x[reg]);
++					return static_cast<uae_u32>(sigcont->mc_gpregs.gp_lr);
++#elif !defined(__MACH__)
++					return static_cast<uae_u32>(sigcont->regs[reg]);
+ #else
+-				return static_cast<uae_u32>(sigcont->__ss.__x[reg]);
++					return static_cast<uae_u32>(sigcont->__ss.__x[reg]);
+ #endif
+-			};
+-			const auto get_reg_x = [&](const int reg) -> uae_u64 {
+-				if (reg == 31)
+-					return 0;
+-#ifndef __MACH__
+-				return static_cast<uae_u64>(sigcont->regs[reg]);
++				};
++				const auto get_reg_x = [&](const int reg) -> uae_u64 {
++					if (reg == 31)
++						return 0;
++#if defined(__FreeBSD__) && defined(CPU_AARCH64)
++					if (reg < 30)
++						return static_cast<uae_u64>(sigcont->mc_gpregs.gp_x[reg]);
++					return static_cast<uae_u64>(sigcont->mc_gpregs.gp_lr);
++#elif !defined(__MACH__)
++					return static_cast<uae_u64>(sigcont->regs[reg]);
+ #else
+-				return static_cast<uae_u64>(sigcont->__ss.__x[reg]);
++					return static_cast<uae_u64>(sigcont->__ss.__x[reg]);
+ #endif
+-			};
+-			const auto get_base_x = [&](const int reg) -> uae_u64 {
+-				if (reg == 31) {
+-#ifndef __MACH__
+-					return static_cast<uae_u64>(sigcont->sp);
++				};
++				const auto get_base_x = [&](const int reg) -> uae_u64 {
++					if (reg == 31) {
++#if defined(__FreeBSD__) && defined(CPU_AARCH64)
++						return static_cast<uae_u64>(sigcont->mc_gpregs.gp_sp);
++#elif !defined(__MACH__)
++						return static_cast<uae_u64>(sigcont->sp);
+ #else
+-					return static_cast<uae_u64>(sigcont->__ss.__sp);
++						return static_cast<uae_u64>(sigcont->__ss.__sp);
+ #endif
+-				}
+-				return get_reg_x(reg);
+-			};
+-			const auto set_reg_w = [&](const int reg, const uae_u32 value) {
+-				if (reg == 31)
+-					return;
+-#ifndef __MACH__
+-				sigcont->regs[reg] = value;
++					}
++					return get_reg_x(reg);
++				};
++				const auto set_reg_w = [&](const int reg, const uae_u32 value) {
++					if (reg == 31)
++						return;
++#if defined(__FreeBSD__) && defined(CPU_AARCH64)
++					if (reg < 30)
++						sigcont->mc_gpregs.gp_x[reg] = value;
++					else
++						sigcont->mc_gpregs.gp_lr = value;
++#elif !defined(__MACH__)
++					sigcont->regs[reg] = value;
+ #else
+-				sigcont->__ss.__x[reg] = value;
++					sigcont->__ss.__x[reg] = value;
+ #endif
+-			};
++				};
+ 
+ 			// Decode memory operands for additional diagnostics.
+ 			const int rd = opcode & 0x1f;
+@@ -489,7 +513,9 @@ static int handle_exception(mcontext_t sigcont, long f
+ 				}
+ 
+ 				// Go to next instruction
+-#ifndef __MACH__
++#if defined(__FreeBSD__) && defined(CPU_AARCH64)
++				sigcont->mc_gpregs.gp_elr += 4;
++#elif !defined(__MACH__)
+ 				sigcont->pc += 4;
+ #else
+ 				sigcont->__ss.__pc += 4;
+@@ -557,10 +583,14 @@ void signal_segv(int signum, siginfo_t* info, void* pt
+ 
+ #ifndef __MACH__
+ 	mcontext_t* context = &(ucontext->uc_mcontext);
+-	unsigned long long* regs = context->regs;
++#if defined(__FreeBSD__) && defined(CPU_AARCH64)
++	[[maybe_unused]] unsigned long long* regs = reinterpret_cast<unsigned long long*>(context->mc_gpregs.gp_x);
+ #else
++	[[maybe_unused]] unsigned long long* regs = context->regs;
++#endif
++#else
+ 	mcontext_t context = ucontext->uc_mcontext;
+-	unsigned long long* regs = context->__ss.__x;
++	[[maybe_unused]] unsigned long long* regs = context->__ss.__x;
+ #endif
+ 
+ 	const auto addr = reinterpret_cast<uintptr>(info->si_addr);
+@@ -585,13 +615,24 @@ void signal_segv(int signum, siginfo_t* info, void* pt
+ 			if (signum == 4)
+ 				output_log(_T("       value = 0x%08x\n"), *static_cast<uae_u32*>(info->si_addr));
+ 
+-		for (int i = 0; i < 31; ++i)
+-#ifndef __MACH__
+-			output_log(_T("x%02d  = 0x%016llx\n"), i, ucontext->uc_mcontext.regs[i]);
+-#else
+-			output_log(_T("x%02d  = 0x%016llx\n"), i, context->__ss.__x[i]);
+-#endif
+-#ifndef __MACH__
++	#if defined(__FreeBSD__) && defined(CPU_AARCH64)
++			for (int i = 0; i < 30; ++i)
++				output_log(_T("x%02d  = 0x%016llx\n"), i, ucontext->uc_mcontext.mc_gpregs.gp_x[i]);
++			output_log(_T("x30  = 0x%016llx\n"), ucontext->uc_mcontext.mc_gpregs.gp_lr);
++	#elif !defined(__MACH__)
++			for (int i = 0; i < 31; ++i)
++				output_log(_T("x%02d  = 0x%016llx\n"), i, ucontext->uc_mcontext.regs[i]);
++	#else
++			for (int i = 0; i < 31; ++i)
++				output_log(_T("x%02d  = 0x%016llx\n"), i, context->__ss.__x[i]);
++	#endif
++#if defined(__FreeBSD__) && defined(CPU_AARCH64)
++		output_log(_T("SP  = 0x%016llx\n"), ucontext->uc_mcontext.mc_gpregs.gp_sp);
++		output_log(_T("PC  = 0x%016llx\n"), ucontext->uc_mcontext.mc_gpregs.gp_elr);
++		output_log(_T("Fault Address = 0x%016llx\n"), static_cast<unsigned long long>(reinterpret_cast<uintptr_t>(info->si_addr)));
++		output_log(_T("SPSR  = 0x%016llx\n"), static_cast<unsigned long long>(ucontext->uc_mcontext.mc_gpregs.gp_spsr));
++		void* getaddr = reinterpret_cast<void*>(ucontext->uc_mcontext.mc_gpregs.gp_lr);
++#elif !defined(__MACH__)
+ 		output_log(_T("SP  = 0x%016llx\n"), ucontext->uc_mcontext.sp);
+ 		output_log(_T("PC  = 0x%016llx\n"), ucontext->uc_mcontext.pc);
+ 		output_log(_T("Fault Address = 0x%016llx\n"), ucontext->uc_mcontext.fault_address);
+@@ -672,10 +713,14 @@ void signal_buserror(int signum, siginfo_t* info, void
+ 
+ #ifndef __MACH__
+ 	mcontext_t* context = &(ucontext->uc_mcontext);
+-	unsigned long long* regs = context->regs;
++#if defined(__FreeBSD__) && defined(CPU_AARCH64)
++	[[maybe_unused]] unsigned long long* regs = reinterpret_cast<unsigned long long*>(context->mc_gpregs.gp_x);
+ #else
++	[[maybe_unused]] unsigned long long* regs = context->regs;
++#endif
++#else
+ 	mcontext_t context = ucontext->uc_mcontext;
+-	unsigned long long* regs = context->__ss.__x;
++	[[maybe_unused]] unsigned long long* regs = context->__ss.__x;
+ #endif
+ 
+ 	auto addr = reinterpret_cast<uintptr_t>(info->si_addr);
+@@ -695,8 +740,17 @@ void signal_buserror(int signum, siginfo_t* info, void
+ 		if (signum == 4)
+ 			output_log(_T("       value = 0x%08x\n"), *static_cast<uae_u32*>(info->si_addr));
+ 
++	#if defined(__FreeBSD__) && defined(CPU_AARCH64)
++	for (int i = 0; i < 30; ++i)
++		output_log(_T("x%02d  = 0x%016llx\n"), i, ucontext->uc_mcontext.mc_gpregs.gp_x[i]);
++	output_log(_T("x30  = 0x%016llx\n"), ucontext->uc_mcontext.mc_gpregs.gp_lr);
++	output_log(_T("SP  = 0x%016llx\n"), ucontext->uc_mcontext.mc_gpregs.gp_sp);
++	output_log(_T("PC  = 0x%016llx\n"), ucontext->uc_mcontext.mc_gpregs.gp_elr);
++	output_log(_T("Fault Address = 0x%016llx\n"), static_cast<unsigned long long>(reinterpret_cast<uintptr_t>(info->si_addr)));
++	output_log(_T("SPSR  = 0x%016llx\n"), static_cast<unsigned long long>(ucontext->uc_mcontext.mc_gpregs.gp_spsr));
++	void* getaddr = reinterpret_cast<void*>(ucontext->uc_mcontext.mc_gpregs.gp_lr);
++	#elif !defined(__MACH__)
+ 	for (int i = 0; i < 31; ++i)
+-#ifndef __MACH__
+ 		output_log(_T("x%02d  = 0x%016llx\n"), i, ucontext->uc_mcontext.regs[i]);
+ 	output_log(_T("SP  = 0x%016llx\n"), ucontext->uc_mcontext.sp);
+ 	output_log(_T("PC  = 0x%016llx\n"), ucontext->uc_mcontext.pc);
+@@ -704,7 +758,8 @@ void signal_buserror(int signum, siginfo_t* info, void
+ 	output_log(_T("pstate  = 0x%016llx\n"), ucontext->uc_mcontext.pstate);
+ 
+ 	void* getaddr = (void*)ucontext->uc_mcontext.regs[30];
+-#else
++	#else
++	for (int i = 0; i < 31; ++i)
+ 		output_log(_T("x%02d  = 0x%016llx\n"), i, context->__ss.__x[i]);
+ 	output_log(_T("SP  = 0x%016llx\n"), context->__ss.__sp);
+ 	output_log(_T("PC  = 0x%016llx\n"), context->__ss.__pc);
diff --git a/emulators/amiberry/files/patch-src_pcem_vid__voodoo__codegen__x86.h b/emulators/amiberry/files/patch-src_pcem_vid__voodoo__codegen__x86.h
new file mode 100644
index 000000000000..7ebe87c96b32
--- /dev/null
+++ b/emulators/amiberry/files/patch-src_pcem_vid__voodoo__codegen__x86.h
@@ -0,0 +1,86 @@
+--- src/pcem/vid_voodoo_codegen_x86.h.orig	2026-04-25 16:24:20 UTC
++++ src/pcem/vid_voodoo_codegen_x86.h
+@@ -5,7 +5,7 @@
+   fbzColorPath
+ */
+ 
+-#if defined(__linux__) || defined(__APPLE__)
++#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
+ #include <sys/mman.h>
+ #include <unistd.h>
+ #endif
+@@ -16,6 +16,7 @@
+ #endif
+ 
+ #include <xmmintrin.h>
++#include <emmintrin.h>
+ 
+ #define BLOCK_NUM 8
+ #define BLOCK_MASK (BLOCK_NUM-1)
+@@ -85,6 +86,23 @@ static uint32_t i_00_ff_w[2] = {0, 0xff};
+ static __m128i xmm_00_ff_w[2];
+ static uint32_t i_00_ff_w[2] = {0, 0xff};
+ 
++static inline __m128i voodoo_set_epi32_u32(uint32_t e3, uint32_t e2, uint32_t e1, uint32_t e0)
++{
++#if defined(__FreeBSD__) && defined(__i386__)
++        union {
++                __m128i v;
++                uint32_t u[4];
++        } value = {};
++        value.u[0] = e0;
++        value.u[1] = e1;
++        value.u[2] = e2;
++        value.u[3] = e3;
++        return value.v;
++#else
++        return _mm_set_epi32(static_cast<int>(e3), static_cast<int>(e2), static_cast<int>(e1), static_cast<int>(e0));
++#endif
++}
++
+ static inline int codegen_texture_fetch(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params, voodoo_state_t *state, int block_pos, int tmu)
+ {
+         if (params->textureMode[tmu] & 1)
+@@ -674,10 +692,10 @@ static inline void voodoo_generate(uint8_t *code_block
+ //        xmm_01_w = (__m128i)0x0001000100010001ull;
+ //        xmm_ff_w = (__m128i)0x00ff00ff00ff00ffull;
+ //        xmm_ff_b = (__m128i)0x00000000ffffffffull;
+-        xmm_01_w = _mm_set_epi32(0, 0, 0x00010001, 0x00010001);
+-        xmm_ff_w = _mm_set_epi32(0, 0, 0x00ff00ff, 0x00ff00ff);
+-        xmm_ff_b = _mm_set_epi32(0, 0, 0, 0x00ffffff);
+-        minus_254 = _mm_set_epi32(0, 0, 0xff02ff02, 0xff02ff02);
++        xmm_01_w = voodoo_set_epi32_u32(0, 0, 0x00010001u, 0x00010001u);
++        xmm_ff_w = voodoo_set_epi32_u32(0, 0, 0x00ff00ffu, 0x00ff00ffu);
++        xmm_ff_b = voodoo_set_epi32_u32(0, 0, 0, 0x00ffffffu);
++        minus_254 = voodoo_set_epi32_u32(0, 0, 0xff02ff02u, 0xff02ff02u);
+ //        *(uint64_t *)&const_1_48 = 0x45b0000000000000ull;
+ //        block_pos = 0;
+ //        voodoo_get_depth = &code_block[block_pos];
+@@ -3386,20 +3404,20 @@ void voodoo_codegen_init(voodoo_t *voodoo)
+                 int _ds = c & 0xf;
+                 int dt = c >> 4;
+                 
+-                alookup[c] = _mm_set_epi32(0, 0, c | (c << 16), c | (c << 16));
+-                aminuslookup[c] = _mm_set_epi32(0, 0, (255-c) | ((255-c) << 16), (255-c) | ((255-c) << 16));
++                alookup[c] = voodoo_set_epi32_u32(0, 0, static_cast<uint32_t>(c | (c << 16)), static_cast<uint32_t>(c | (c << 16)));
++                aminuslookup[c] = voodoo_set_epi32_u32(0, 0, static_cast<uint32_t>((255-c) | ((255-c) << 16)), static_cast<uint32_t>((255-c) | ((255-c) << 16)));
+ 
+                 d[0] = (16 - _ds) * (16 - dt);
+                 d[1] =  _ds * (16 - dt);
+                 d[2] = (16 - _ds) * dt;
+                 d[3] = _ds * dt;
+ 
+-                bilinear_lookup[c*2]     = _mm_set_epi32(d[1] | (d[1] << 16), d[1] | (d[1] << 16), d[0] | (d[0] << 16), d[0] | (d[0] << 16));
+-                bilinear_lookup[c*2 + 1] = _mm_set_epi32(d[3] | (d[3] << 16), d[3] | (d[3] << 16), d[2] | (d[2] << 16), d[2] | (d[2] << 16));
++                bilinear_lookup[c*2]     = voodoo_set_epi32_u32(static_cast<uint32_t>(d[1] | (d[1] << 16)), static_cast<uint32_t>(d[1] | (d[1] << 16)), static_cast<uint32_t>(d[0] | (d[0] << 16)), static_cast<uint32_t>(d[0] | (d[0] << 16)));
++                bilinear_lookup[c*2 + 1] = voodoo_set_epi32_u32(static_cast<uint32_t>(d[3] | (d[3] << 16)), static_cast<uint32_t>(d[3] | (d[3] << 16)), static_cast<uint32_t>(d[2] | (d[2] << 16)), static_cast<uint32_t>(d[2] | (d[2] << 16)));
+         }
+-        alookup[256] = _mm_set_epi32(0, 0, 256 | (256 << 16), 256 | (256 << 16));
+-        xmm_00_ff_w[0] = _mm_set_epi32(0, 0, 0, 0);
+-        xmm_00_ff_w[1] = _mm_set_epi32(0, 0, 0xff | (0xff << 16), 0xff | (0xff << 16));
++        alookup[256] = voodoo_set_epi32_u32(0, 0, 256u | (256u << 16), 256u | (256u << 16));
++        xmm_00_ff_w[0] = voodoo_set_epi32_u32(0, 0, 0, 0);
++        xmm_00_ff_w[1] = voodoo_set_epi32_u32(0, 0, 0xffu | (0xffu << 16), 0xffu | (0xffu << 16));
+ }
+ 
+ void voodoo_codegen_close(voodoo_t *voodoo)
diff --git a/emulators/amiberry/pkg-plist b/emulators/amiberry/pkg-plist
index c4c9adabb352..53c6e3b1b224 100644
--- a/emulators/amiberry/pkg-plist
+++ b/emulators/amiberry/pkg-plist
@@ -3,115 +3,15 @@ lib/amiberry/libcapsimage.so
 lib/amiberry/libfloppybridge.so
 %%DATADIR%%/controllers/gamecontrollerdb.txt
 %%DATADIR%%/controllers/gamecontrollerdb_user.txt
-%%DATADIR%%/data/35floppy.png
-%%DATADIR%%/data/AmigaTopaz.ttf
 %%DATADIR%%/data/abr/brainfile.xml
 %%DATADIR%%/data/abr/catlist.xml
-%%DATADIR%%/data/amiberry-logo.png
-%%DATADIR%%/data/amiberry.png
-%%DATADIR%%/data/amiberry.svg
-%%DATADIR%%/data/amigainfo.png
-%%DATADIR%%/data/axis.png
-%%DATADIR%%/data/button.png
-%%DATADIR%%/data/chip.png
-%%DATADIR%%/data/controller.png
-%%DATADIR%%/data/controllermap.png
-%%DATADIR%%/data/controllermap_back.png
-%%DATADIR%%/data/cpu.png
-%%DATADIR%%/data/cursor.bmp
-%%DATADIR%%/data/delete.png
-%%DATADIR%%/data/drive.png
-%%DATADIR%%/data/expansion.png
-%%DATADIR%%/data/file.png
-%%DATADIR%%/data/fixedfont.png
+%%DATADIR%%/data/amiberry.ico
 %%DATADIR%%/data/floppy_sounds/drive_click.wav
 %%DATADIR%%/data/floppy_sounds/drive_snatch.wav
 %%DATADIR%%/data/floppy_sounds/drive_spin.wav
 %%DATADIR%%/data/floppy_sounds/drive_spinnd.wav
 %%DATADIR%%/data/floppy_sounds/drive_startup.wav
 %%DATADIR%%/data/icon.icns
-%%DATADIR%%/data/joystick.png
-%%DATADIR%%/data/keyboard.png
-%%DATADIR%%/data/misc.png
-%%DATADIR%%/data/paths.png
-%%DATADIR%%/data/port.png
-%%DATADIR%%/data/quickstart.png
-%%DATADIR%%/data/rpgfont.png
-%%DATADIR%%/data/savestate.png
-%%DATADIR%%/data/screen.png
-%%DATADIR%%/data/sound.png
-%%DATADIR%%/data/vkbd/vkbdCoolFRLarge.png
-%%DATADIR%%/data/vkbd/vkbdCoolFRLargeHires.png
-%%DATADIR%%/data/vkbd/vkbdCoolFRLargeShift.png
-%%DATADIR%%/data/vkbd/vkbdCoolFRLargeShiftHires.png
-%%DATADIR%%/data/vkbd/vkbdCoolGerLarge.png
-%%DATADIR%%/data/vkbd/vkbdCoolGerLargeHires.png
-%%DATADIR%%/data/vkbd/vkbdCoolGerLargeShift.png
-%%DATADIR%%/data/vkbd/vkbdCoolGerLargeShiftHires.png
-%%DATADIR%%/data/vkbd/vkbdCoolQuit.png
-%%DATADIR%%/data/vkbd/vkbdCoolQuitHires.png
-%%DATADIR%%/data/vkbd/vkbdCoolUKLarge.png
-%%DATADIR%%/data/vkbd/vkbdCoolUKLargeHires.png
-%%DATADIR%%/data/vkbd/vkbdCoolUKLargeShift.png
-%%DATADIR%%/data/vkbd/vkbdCoolUKLargeShiftHires.png
-%%DATADIR%%/data/vkbd/vkbdCoolUSLarge.png
-%%DATADIR%%/data/vkbd/vkbdCoolUSLargeHires.png
-%%DATADIR%%/data/vkbd/vkbdCoolUSLargeShift.png
-%%DATADIR%%/data/vkbd/vkbdCoolUSLargeShiftHires.png
-%%DATADIR%%/data/vkbd/vkbdDarkFRLarge.png
-%%DATADIR%%/data/vkbd/vkbdDarkFRLargeHires.png
-%%DATADIR%%/data/vkbd/vkbdDarkFRLargeShift.png
-%%DATADIR%%/data/vkbd/vkbdDarkFRLargeShiftHires.png
-%%DATADIR%%/data/vkbd/vkbdDarkGerLarge.png
-%%DATADIR%%/data/vkbd/vkbdDarkGerLargeHires.png
-%%DATADIR%%/data/vkbd/vkbdDarkGerLargeShift.png
-%%DATADIR%%/data/vkbd/vkbdDarkGerLargeShiftHires.png
-%%DATADIR%%/data/vkbd/vkbdDarkQuit.png
-%%DATADIR%%/data/vkbd/vkbdDarkQuitHires.png
-%%DATADIR%%/data/vkbd/vkbdDarkUKLarge.png
-%%DATADIR%%/data/vkbd/vkbdDarkUKLargeHires.png
-%%DATADIR%%/data/vkbd/vkbdDarkUKLargeShift.png
-%%DATADIR%%/data/vkbd/vkbdDarkUKLargeShiftHires.png
-%%DATADIR%%/data/vkbd/vkbdDarkUSLarge.png
-%%DATADIR%%/data/vkbd/vkbdDarkUSLargeHires.png
-%%DATADIR%%/data/vkbd/vkbdDarkUSLargeShift.png
-%%DATADIR%%/data/vkbd/vkbdDarkUSLargeShiftHires.png
-%%DATADIR%%/data/vkbd/vkbdOrigFRLarge.png
-%%DATADIR%%/data/vkbd/vkbdOrigFRLargeHires.png
-%%DATADIR%%/data/vkbd/vkbdOrigFRLargeShift.png
-%%DATADIR%%/data/vkbd/vkbdOrigFRLargeShiftHires.png
-%%DATADIR%%/data/vkbd/vkbdOrigGerLarge.png
-%%DATADIR%%/data/vkbd/vkbdOrigGerLargeHires.png
-%%DATADIR%%/data/vkbd/vkbdOrigGerLargeShift.png
-%%DATADIR%%/data/vkbd/vkbdOrigGerLargeShiftHires.png
-%%DATADIR%%/data/vkbd/vkbdOrigQuit.png
-%%DATADIR%%/data/vkbd/vkbdOrigQuitHires.png
-%%DATADIR%%/data/vkbd/vkbdOrigUKLarge.png
-%%DATADIR%%/data/vkbd/vkbdOrigUKLargeHires.png
-%%DATADIR%%/data/vkbd/vkbdOrigUKLargeShift.png
-%%DATADIR%%/data/vkbd/vkbdOrigUKLargeShiftHires.png
-%%DATADIR%%/data/vkbd/vkbdOrigUSLarge.png
-%%DATADIR%%/data/vkbd/vkbdOrigUSLargeHires.png
-%%DATADIR%%/data/vkbd/vkbdOrigUSLargeShift.png
-%%DATADIR%%/data/vkbd/vkbdOrigUSLargeShiftHires.png
-%%DATADIR%%/data/vkbd/vkbdWarmFRLarge.png
-%%DATADIR%%/data/vkbd/vkbdWarmFRLargeHires.png
-%%DATADIR%%/data/vkbd/vkbdWarmFRLargeShift.png
-%%DATADIR%%/data/vkbd/vkbdWarmFRLargeShiftHires.png
-%%DATADIR%%/data/vkbd/vkbdWarmGerLarge.png
-%%DATADIR%%/data/vkbd/vkbdWarmGerLargeHires.png
-%%DATADIR%%/data/vkbd/vkbdWarmGerLargeShift.png
-%%DATADIR%%/data/vkbd/vkbdWarmGerLargeShiftHires.png
-%%DATADIR%%/data/vkbd/vkbdWarmQuit.png
-%%DATADIR%%/data/vkbd/vkbdWarmQuitHires.png
-%%DATADIR%%/data/vkbd/vkbdWarmUKLarge.png
-%%DATADIR%%/data/vkbd/vkbdWarmUKLargeHires.png
-%%DATADIR%%/data/vkbd/vkbdWarmUKLargeShift.png
-%%DATADIR%%/data/vkbd/vkbdWarmUKLargeShiftHires.png
-%%DATADIR%%/data/vkbd/vkbdWarmUSLarge.png
-%%DATADIR%%/data/vkbd/vkbdWarmUSLargeHires.png
-%%DATADIR%%/data/vkbd/vkbdWarmUSLargeShift.png
-%%DATADIR%%/data/vkbd/vkbdWarmUSLargeShiftHires.png
 %%DATADIR%%/roms/aros-ext.bin
 %%DATADIR%%/roms/aros-rom.bin
 %%DATADIR%%/roms/mt32-roms/dir.txt
@@ -131,9 +31,12 @@ lib/amiberry/libfloppybridge.so
 %%DATADIR%%/whdboot/save-data/Kickstarts/kick40068.A4000.RTB
 %%DATADIR%%/whdboot/save-data/Savegames/foo.txt
 share/applications/Amiberry.desktop
-%%DOCS%%%%DOCSDIR%%/changelog.gz
-%%DOCS%%%%DOCSDIR%%/copyright
-share/icons/hicolor/scalable/apps/amiberry.svg
+%%PORTDOCS%%%%DOCSDIR%%/changelog.gz
+%%PORTDOCS%%%%DOCSDIR%%/copyright
+share/icons/hicolor/128x128/apps/amiberry.png
+share/icons/hicolor/256x256/apps/amiberry.png
+share/icons/hicolor/512x512/apps/amiberry.png
+share/icons/hicolor/64x64/apps/amiberry.png
 share/man/man1/amiberry.1.gz
 share/metainfo/Amiberry.metainfo.xml
 share/mime/packages/amiberry.xml


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69eea7b3.1df7b.3044502b>