• exec/load/syncretro_getcore.js src/doors/syncretro/main.c retro_core.c

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Mon Jul 13 00:36:58 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/6ff320f8017e1fa00cfdae7c
    Modified Files:
    exec/load/syncretro_getcore.js src/doors/syncretro/main.c retro_core.c retro_core.h
    Log Message:
    syncretro: say why the door cannot start; getcore.js can install for a host

    The NES door on the Windows node of a BBS whose install directory is shared with a Linux node did not start, and said nothing at all about why. Two defects, and the second is the one that made the first invisible.

    THE CORE WAS NEVER INSTALLED THERE. getcore.js only ever knew about the host
    it was RUNNING on, so a sysop who ran it on the Linux node installed the .so, was told "core installed", and left the Windows node with a door that had no .dll to load. A shared install serving several hosts needs a core for EACH -- they sit side by side, and nothing was able to put the second one there. getcore.js now takes `-platform <name>` (and `-arch`), so either host can install for the other.

    THE DOOR DIED IN SILENCE. Every fatal startup error -- no core, an unloadable core, an unreadable cartridge -- was an fprintf to stderr, and rc_core_open() ran BEFORE sr_io_init(): the terminal did not exist yet. A door's stderr reaches nobody (on Windows the BBS spawns it with no console at all), so the player saw "Loading SyncRetro...", the door exited, and the BBS took the
    screen back. No message, no log line, nothing to go on but "it doesn't work".

    So the terminal now comes up BEFORE the core, and a fatal error is written where the person who hit it can read it: what failed, in a sentence, and what the sysop should do about it. retro_core.c keeps the reason as a string (rc_core_error()) instead of only printing it, because printing it was the problem.

    SyncRetro cannot start.

    cannot load the core 'fceumm_libretro.dll': ... No such file or directory

    Sysop: the core must match the door binary -- a 32-bit .dll for the Win32
    .exe, a .so for the *nix build. getcore.js installs the right one for the
    host it runs on.
    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net