• src/doors/syncretro/syncretro.h syncretro_config.c syncretro_input.c s

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Fri Jul 10 02:22:18 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/3a041360e8df4a3732cb5743
    Modified Files:
    src/doors/syncretro/syncretro.h syncretro_config.c syncretro_input.c syncretro_io.c xtrn/syncivision/syncretro.ini
    Log Message:
    syncretro: sweep the disc for paddle carts, so a held key moves the paddle

    Brickout!'s paddle moved one step per press and then stopped dead, however
    long the key was held. Nothing in the input path was at fault: the disc was doing exactly what the hardware does.

    The Intellivision disc is a 16-position ring, and a paddle cart steps its paddle once per CHANGE of the disc's value, in the direction of that
    value's horizontal component. Driving the core directly and parking the
    disc at each detent in turn shows it plainly: detents 0 through 3 push the paddle +3.9 px apiece, detent 4 (90 degrees, purely vertical) moves it not
    at all, detents 5 through 12 pull it -3.9 px apiece. A held arrow key is a CONSTANT disc value, so the paddle takes its one step and waits. Four keys cannot rotate a disc.

    So a cart named in the new [disc] rotate list no longer pins the disc while Left or Right is held: the door alternates between two adjacent detents on
    that side -- 0 and 22.5 degrees for right, 180 and 202.5 for left -- every fourth frame. Each toggle is a fresh disc value whose horizontal component points the same way, so the paddle steps again and again and the travel is smooth. The disc rides the LEFT analog stick, which FreeIntv reads as the
    disc and which this door left idle (the right stick carries the keypad);
    the d-pad's own Left/Right bits are withheld while sweeping, or the core
    folds them back into the disc and fights it.

    Measured against FreeIntv with Brickout!, from one starting position over
    120 frames: holding the d-pad travels 2 px, pulsing the d-pad bit travels
    57 px, and alternating adjacent detents travels 115 px. The door's own
    vectors and cadence give +115.4 px holding Right and -116.4 px holding
    Left. One toggle per four frames beats both two and six -- toggle faster
    and the core samples past the change, slower and there are simply fewer
    steps.

    Only the listed carts sweep. Everywhere else a held direction pins the
    disc, as the console always did, because that is what Astrosmash and Utopia want. The matcher is a case-insensitive substring test against the
    cartridge's FILENAME, since dumps carry year and publisher markers and a
    sysop should write only the title.

    Also completes the keytrace diagnostic with a capture of the raw OUTBOUND stream (keytrace.out, same switch): what the door actually sent, framed for replay. Reconstructing that stream by hand cost three wrong theories about
    a phantom key-release that turned out never to exist.

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

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