Download raw body.
[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
[llvm22] emulators/xnp21kai: make C types coherent