Index | Thread | Search

From:
Christian Weisgerber <naddy@mips.inka.de>
Subject:
[llvm22] emulators/xnp21kai: make C types coherent
To:
ports@openbsd.org
Cc:
Omar Polo <op@openbsd.org>
Date:
Wed, 10 Jun 2026 02:20:15 +0200

Download raw body.

Thread
  • Christian Weisgerber:

    [llvm22] emulators/xnp21kai: make C types coherent

emulators/xnp21kai is a horribly cobbled-together collection of
code that fits the "it compiles, let's ship it" epitome.  Except
that it doesn't compile any longer with LLVM 22, and for good
reasons.

Below is my attempt to make the C type use coherent.  I don't know
if that fixes the semantics of the code, but it can't be more wrong
that what was there before.

OK?

-----------------------------------------------
commit 6626db02f4e0a06a931c13d761ee1c2ad3eef537 (mystuff)
from: Christian Weisgerber <naddy@mips.inka.de>
date: Wed Jun 10 00:11:57 2026 UTC
 
 emulators/xnp21kai: make C types coherent as required by llvm22
 
diff 419f494b85208dd0624526a8d5698d46626d25c4 6626db02f4e0a06a931c13d761ee1c2ad3eef537
commit - 419f494b85208dd0624526a8d5698d46626d25c4
commit + 6626db02f4e0a06a931c13d761ee1c2ad3eef537
blob - 047244bcd536f8e1bf83d55344040e171d32a516
blob + ecf61879bb8468e4de24b2ba4acdd03c7d364564
--- emulators/xnp21kai/Makefile
+++ emulators/xnp21kai/Makefile
@@ -4,6 +4,7 @@ COMMENT =	PC-9801 emulator
 
 DISTNAME =	NP21kai-0.0.20231030
 PKGNAME =	x${DISTNAME:L}
+REVISION =	0
 
 GH_ACCOUNT =	AZO234
 GH_PROJECT =	NP2kai
@@ -37,7 +38,11 @@ LIB_DEPENDS =	devel/harfbuzz \
 RUN_DEPENDS =	devel/desktop-file-utils \
 		x11/gtk+4,-guic
 
-FIX_CRLF_FILES = ${WRKSRC}/network/net.c
+FIX_CRLF_FILES = ${WRKSRC}/network/net.c \
+		${WRKSRC}/generic/hostdrvs.c \
+		${WRKSRC}/vram/scrnsave.c \
+		${WRKSRC}/wab/cirrus_vga.h \
+		${WRKSRC}/wab/wab.c
 
 CONFIGURE_ARGS = -DCMAKE_DISABLE_FIND_PACKAGE_Git=TRUE
 
blob - /dev/null
blob + f538f16368a2fd1bb1afa224fdb2fd57a51435a9 (mode 644)
--- /dev/null
+++ emulators/xnp21kai/patches/patch-cbus_boardlol_c
@@ -0,0 +1,27 @@
+Index: cbus/boardlol.c
+--- cbus/boardlol.c.orig
++++ cbus/boardlol.c
+@@ -89,7 +89,7 @@ static const IOOUT opn_o[4] = {
+ static const IOINP opn_i[4] = {
+ 			opn_i188,	opn_i18a,	NULL,		NULL};
+ 
+-static void psgpanset(OPNA* psg) {
++static void psgpanset(PSGGEN psg) {
+ 	// SSG
+ 	psggen_setpan(psg, 0, 1);
+ 	psggen_setpan(psg, 1, 1);
+@@ -108,12 +108,12 @@ void boardlol_reset(const NP2CFG *pConfig) {
+ }
+ 
+ void boardlol_bind(void) {
+-	psgpanset(&g_opna[0]);
++	psgpanset(&g_opna[0].psg);
+ //	fmboard_fmrestore(0, 0);
+ 	opngen_setreg(&g_opna[0].opngen, 0, 0xb4, 1 << 7);		// OPN
+ 	opngen_setreg(&g_opna[0].opngen, 0, 0xb5, 1 << 7);
+ 	opngen_setreg(&g_opna[0].opngen, 0, 0xb6, 1 << 7);
+-	psggen_restore(&g_opna[0]);
++	psggen_restore(&g_opna[0].psg);
+ 	sound_streamregist(&g_opna[0].opngen, (SOUNDCB)opngen_getpcm);
+ 	sound_streamregist(&g_opna[0].opngen, (SOUNDCB)psggen_getpcm);
+ 	cbuscore_attachsndex(0x188 - g_opna[0].s.base, opn_o, opn_i);
blob - /dev/null
blob + c0d988cd119096d60fbf1ffd9a7118d0d82fcfc9 (mode 644)
--- /dev/null
+++ emulators/xnp21kai/patches/patch-cbus_boardmo_c
@@ -0,0 +1,36 @@
+Index: cbus/boardmo.c
+--- cbus/boardmo.c.orig
++++ cbus/boardmo.c
+@@ -119,7 +119,7 @@ static REG8 IOINPCALL opn_i18a(UINT port) {
+ 		return(fmboard_getjoy(&g_opna[0]));
+ 	}
+ 	else if (addr < 0x10) {
+-		return(psggen_getreg(&g_opna[0], addr));
++		return(psggen_getreg(&g_opna[0].psg, addr));
+ 	}
+ 	(void)port;
+ 	return(g_opna[0].s.data);
+@@ -157,7 +157,7 @@ static const IOOUT opl_o[4] = {
+ static const IOINP opl_i[4] = {
+ 			opl_i288,	opl_i28a,	opl_i28c,		opl_i28e};
+ 
+-static void psgpanset(OPNA* psg) {
++static void psgpanset(PSGGEN psg) {
+ 	// SSG
+ 	psggen_setpan(psg, 0, 2);
+ 	psggen_setpan(psg, 1, 2);
+@@ -193,12 +193,12 @@ void boardmo_reset(const NP2CFG *pConfig) {
+ }
+ 
+ void boardmo_bind(void) {
+-	psgpanset(&g_opna[0]);
++	psgpanset(&g_opna[0].psg);
+ //	fmboard_fmrestore(0, 0);
+ 	opngen_setreg(&g_opna[0].opngen, 0, 0xb4, 1 << 6);
+ 	opngen_setreg(&g_opna[0].opngen, 0, 0xb5, 1 << 6);
+ 	opngen_setreg(&g_opna[0].opngen, 0, 0xb6, 1 << 6);
+-	psggen_restore(&g_opna[0].opngen);
++	psggen_restore(&g_opna[0].psg);
+ 	sound_streamregist(&g_opna[0].opngen, (SOUNDCB)opngen_getpcm);
+ 	sound_streamregist(&g_opna[0].opngen, (SOUNDCB)psggen_getpcm);
+ 	cbuscore_attachsndex(0x188 - g_opna[0].s.base, opn_o, opn_i);
blob - /dev/null
blob + 8c3a094ba3bd13945176015d0c6a1d6e41ac526a (mode 644)
--- /dev/null
+++ emulators/xnp21kai/patches/patch-generic_hostdrvs_c
@@ -0,0 +1,20 @@
+Index: generic/hostdrvs.c
+--- generic/hostdrvs.c.orig
++++ generic/hostdrvs.c
+@@ -394,12 +394,15 @@ UINT hostdrvs_getrealdir(HDRVPATH *phdp, char *lpFcbna
+ {
+ 	phdp->file = s_hddroot;
+ 	if(PathIsRelative(np2cfg.hdrvroot)){
++#if defined(_WIN32)
+ 		TCHAR pathbuf[MAX_PATH+1];
+ 		TCHAR *pathtmp;
+ 		initgetfile(pathbuf, _countof(pathbuf));
+-#if defined(_WIN32)
+ 		pathtmp = strrchr(pathbuf, '\\');
+ #else	/* _WIN32 */
++		char pathbuf[MAX_PATH+1];
++		char *pathtmp;
++		initgetfile(pathbuf, _countof(pathbuf));
+ 		pathtmp = strrchr(pathbuf, '/');
+ #endif	/* _WIN32 */
+ 		if(pathtmp){
blob - /dev/null
blob + 7426909352cbab80de555d9368e485087de30c05 (mode 644)
--- /dev/null
+++ emulators/xnp21kai/patches/patch-vram_scrnsave_c
@@ -0,0 +1,12 @@
+Index: vram/scrnsave.c
+--- vram/scrnsave.c.orig
++++ vram/scrnsave.c
+@@ -178,7 +178,7 @@ SCRNSAVE scrnsave_create(void)
+ 	PALNUM		col;
+ 	BMPPAL		curpal;
+ 	UINT		pos;
+-	uint8_t*	dirty[SURFACE_HEIGHT];
++	uint8_t		dirty[SURFACE_HEIGHT];
+ 
+ 
+ 	width = dsync.scrnxmax;
blob - /dev/null
blob + 102f445caf45111dac48cba6830b9984646e5f4d (mode 644)
--- /dev/null
+++ emulators/xnp21kai/patches/patch-wab_cirrus_vga_h
@@ -0,0 +1,12 @@
+Index: wab/cirrus_vga.h
+--- wab/cirrus_vga.h.orig
++++ wab/cirrus_vga.h
+@@ -91,6 +91,8 @@ typedef struct DisplaySurface {
+     struct PixelFormat pf;
+ } DisplaySurface;
+ 
++struct DisplayState;
++
+ typedef struct DisplayChangeListener {
+     int idle;
+     UINT64 gui_timer_interval;
blob - /dev/null
blob + 7be931ebe1e20af39d029c9aa15917f43258e664 (mode 644)
--- /dev/null
+++ emulators/xnp21kai/patches/patch-wab_wab_c
@@ -0,0 +1,21 @@
+Index: wab/wab.c
+--- wab/wab.c.orig
++++ wab/wab.c
+@@ -173,14 +173,16 @@ void wabwin_readini()
+ void wabwin_writeini()
+ {
+ 	if(!np2wabcfg.readonly){
+-		TCHAR szPath[MAX_PATH];
+ #if defined(NP2_SDL) || defined(__LIBRETRO__)
++		OEMCHAR szPath[MAX_PATH];
+ 		milstr_ncpy(szPath, modulefile, sizeof(szPath));
+ 		ini_write(szPath, g_Name, s_wabwndini, NELEMENTS(s_wabwndini));
+ #elif defined(NP2_X)
++		OEMCHAR szPath[MAX_PATH];
+ 		milstr_ncpy(szPath, modulefile, sizeof(szPath));
+ 		ini_write(szPath, g_Name, s_wabwndini, NELEMENTS(s_wabwndini), FALSE);
+ #else
++		TCHAR szPath[MAX_PATH];
+ 		initgetfile(szPath, NELEMENTS(szPath));
+ 		ini_write(szPath, g_Name, s_wabwndini, NELEMENTS(s_wabwndini));
+ #endif
blob - /dev/null
blob + 29baa7a23358fa42e1b4d5fe08f7100be7c1148d (mode 644)
--- /dev/null
+++ emulators/xnp21kai/patches/patch-x_gtk2_dialog_hostdrv_c
@@ -0,0 +1,12 @@
+Index: x/gtk2/dialog_hostdrv.c
+--- x/gtk2/dialog_hostdrv.c.orig
++++ x/gtk2/dialog_hostdrv.c
+@@ -46,7 +46,7 @@ static GtkWidget *hostdrv_read_checkbutton;
+ static GtkWidget *hostdrv_write_checkbutton;
+ static GtkWidget *hostdrv_delete_checkbutton;
+ 
+-static TCHAR s_hostdrvdir[10][MAX_PATH] = {0};
++static OEMCHAR s_hostdrvdir[10][MAX_PATH] = {0};
+ 
+ static void
+ ok_button_clicked(GtkButton *b, gpointer d)
blob - /dev/null
blob + 8e1d3eb9ec7f922dbcab0e71cddc92563130be1f (mode 644)
--- /dev/null
+++ emulators/xnp21kai/patches/patch-x_gtk2_dialog_screen_c
@@ -0,0 +1,23 @@
+Index: x/gtk2/dialog_screen.c
+--- x/gtk2/dialog_screen.c.orig
++++ x/gtk2/dialog_screen.c
+@@ -45,7 +45,7 @@
+ static GtkWidget *video_lcd_checkbutton;
+ static GtkWidget *video_lcd_reverse_checkbutton;
+ static GtkWidget *video_skipline_checkbutton;
+-static GObject *video_skipline_ratio_adj;
++static GtkObject *video_skipline_ratio_adj;
+ 
+ /*
+  * Chip
+@@ -64,8 +64,8 @@ static const char *timing_waitclock_str[] = {
+ 	"T-RAM", "V-RAM", "GRCG"
+ };
+ 
+-static GObject *timing_waitclock_adj[NELEMENTS(timing_waitclock_str)];
+-static GObject *timing_realpal_adj;
++static GtkObject *timing_waitclock_adj[NELEMENTS(timing_waitclock_str)];
++static GtkObject *timing_realpal_adj;
+ 
+ 
+ static void
blob - /dev/null
blob + 92eef754d43906c747b7ecfa2240a7861b6aaf5c (mode 644)
--- /dev/null
+++ emulators/xnp21kai/patches/patch-x_gtk2_dialog_sound_c
@@ -0,0 +1,30 @@
+Index: x/gtk2/dialog_sound.c
+--- x/gtk2/dialog_sound.c.orig
++++ x/gtk2/dialog_sound.c
+@@ -62,7 +62,7 @@ static const struct {
+ 	{ "CD-DA",  &np2cfg.davolume,   0.0, 255.0 },
+ };
+ 
+-static GObject *mixer_adj[NELEMENTS(mixer_vol_tbl)];
++static GtkObject *mixer_adj[NELEMENTS(mixer_vol_tbl)];
+ 
+ 
+ /*
+@@ -73,7 +73,7 @@ static const char *snd14_vol_str[] = {
+ 	"left", "right", "f2", "f4", "f8", "f16"
+ };
+ 
+-static GObject *snd14_adj[NELEMENTS(snd14_vol_str)];
++static GtkObject *snd14_adj[NELEMENTS(snd14_vol_str)];
+ 
+ 
+ /*
+@@ -315,7 +315,7 @@ static GtkWidget *spb_int_entry;
+ static GtkWidget *spb_romaddr_entry;
+ static GtkWidget *spb_vr_channel_checkbutton[2];
+ static GtkWidget *spb_reverse_channel_checkbutton;
+-static GObject *spb_vr_level_adj;
++static GtkObject *spb_vr_level_adj;
+ 
+ 
+ /*
blob - /dev/null
blob + e98ba9fa7af537e3d1b4ec3f5a936dbbb1609289 (mode 644)
--- /dev/null
+++ emulators/xnp21kai/patches/patch-x_gtk2_gtk_screen_c
@@ -0,0 +1,27 @@
+Index: x/gtk2/gtk_screen.c
+--- x/gtk2/gtk_screen.c.orig
++++ x/gtk2/gtk_screen.c
+@@ -690,7 +690,6 @@ void scrnmng_blthdc(void) {
+ 
+ void scrnmng_bltwab() {
+ #if defined(SUPPORT_WAB)
+-	GdkRectangle	*dst;
+ 	GdkRectangle	src;
+ 	GdkRectangle	dstmp;
+ 	int exmgn = 0;
+@@ -698,15 +697,12 @@ void scrnmng_bltwab() {
+ 	GdkPixbuf* rotatebuf;
+ 	if (np2wabwnd.multiwindow) return;
+ 	if (drawmng.backsurf != NULL) {
+-		dst = &drawmng.rect;
+ 		if (!(drawmng.scrnmode & SCRNMODE_FULLSCREEN)) {
+ 			exmgn = scrnstat.extend;
+ 		}
+ 		src.x = src.y = 0;
+ 		src.width = scrnstat.width;
+ 		src.height = scrnstat.height;
+-		memcpy(&dstmp, dst, sizeof(GdkRectangle));
+-		dstmp.x += exmgn;
+ 		dstmp.width = scrnstat.width;
+ 		dstmp.height = scrnstat.height;
+ 		if (!(drawmng.scrnmode & SCRNMODE_ROTATE)) {

-- 
Christian "naddy" Weisgerber                          naddy@mips.inka.de