• src/doors/syncretro/GAMES_INI.md M2_INPUT.md probe_core.c syncretro_ga

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Tue Jul 28 21:54:12 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/536bb66ea22238ecc21cad86
    Modified Files:
    src/doors/syncretro/GAMES_INI.md M2_INPUT.md probe_core.c syncretro_games.c syncretro_games.h syncretro_input.c test_axis.c test_games.c xtrn/syncarcade/README.md games.ini
    Log Message:
    syncretro: a cabinet whose stick is a potentiometer

    Paperboy rides itself into the curb. With nobody at the keyboard the bike steers left and runs flat out, and it crashes about two seconds after the
    level starts.

    The door was answering correctly, which is what made this hard to see. Instrumenting MAME 2003-Plus at the revision the arcade install runs shows
    the driver receiving a dead-centred handlebar every frame -- both ADC
    channels at 0x80, the port's own declared middle, with no residual delta.
    The trap is that 0x80 is not where Paperboy's handlebars rest. Sweeping the converter and tracking the player sprite: below about 36% of travel the bike walks into the oncoming lane, above about 50% it walks the other way, and
    the speed axis saturates so early that 0x10, 0x40 and 0x80 are one value -- flat out. So a centred stick is a hard left turn with the throttle open, and every frontend produces one. Current MAME declares the same 0x80.

    games.ini gains analog_rest: where a cabinet's control sits when nobody is touching it, as a percentage of each axis's travel. The door answers the
    left analog stick with it, and drives the axis to its stop while a direction key is held -- a keyboard has no half-press, and the ends of the travel are where the bars physically go. Releasing returns to rest, which is what a
    sprung control does.

    There is no default and no root-level form. A rest position is a fact about
    one machine and a guessed one drives the game on its own, so a cabinet that declares nothing reads a centred stick, byte for byte what it read before.
    Of the romsets in the arcade install, Paperboy is the only one whose driver declares an analog joystick. A value that does not parse as two numbers is treated as absent rather than as zero: zero is a real setting, and quietly meaning it would reproduce the bug the key exists to fix.

    probe_core gains -analog, the analog counterpart of -hold, so the number is re-measurable rather than folklore. It only bounds the answer -- anywhere inside the band tracks straight -- and the shipped 45,57 was settled by
    playing it. The speed axis has no band at all and is anchored to the pace
    the game itself rides at during a level's scripted entry.

    test_games covers the parse, the clamp and the malformed-is-absent rule; test_axis drives the real input path end to end for the rest value, a held direction, the return to rest, the second player, and the cabinets that
    declare nothing and must still read a centred stick. GAMES_INI.md sec 15 carries the measurements and the method.

    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net