https://gitlab.synchro.net/main/sbbs/-/commit/3bb2c270009a3e42b6d55439
Added Files:
src/doors/syncretro/M3_MULTICORE.md syncretro_profile.c syncretro_profile.h
Modified Files:
src/doors/syncretro/CMakeLists.txt M2_INPUT.md PROVENANCE.md README.md build.sh main.c retro_core.c retro_core.h syncretro.h syncretro_audio.c syncretro_audio.h syncretro_binds.c syncretro_binds.h syncretro_config.c syncretro_door.c syncretro_input.c syncretro_io.c syncretro_keypad.c syncretro_keypad.h test_binds.c test_keypad.c
Log Message:
syncretro: one door, many consoles -- the controller is the console's
The frontend could host any libretro core, but exactly one console was
wired into it: the keypad, the paddle disc and the two hand controllers
were called unconditionally, and the key table was the Intellivision's.
A second console had nowhere to live.
The console is now a PROFILE (syncretro_profile.c), chosen from the
lobby's -profile, else inferred from the core's own library_name, else
`pad`. Two ship: `intv`, unchanged, and `pad` -- a plain RetroPad, which
is the whole of the NES and of every other gamepad console, so a third
console needs an install directory rather than new C.
Compare the core's name CASE-INSENSITIVELY: FreeIntv reports its
library_name as "freeintv", lower case, not the "FreeIntv" spelling used
in its own repo and in every doc (PROVENANCE.md records the same trap for
its .so filename). A case-sensitive match fails SILENTLY -- the
Intellivision falls through to `pad` and loses its keypad, with no error anywhere.
The arrows and the numpad belong to whoever is playing. The Intellivision drives both hand controllers at once, so its arrows are player 2's disc
(port 1) and its numpad is player 2's keypad; on a gamepad console there
is one player at one keyboard, so both are HIS -- the arrows are his
d-pad and the numpad is a second one (diagonals included), on port 0.
This is per-profile in all three input paths, including the evdev reports SyncTERM negotiates.
Two facts now come from the core rather than from the one console we had:
* The SAMPLE RATE. It was a hardcoded 44100 -- FreeIntv's. fceumm mixes
at 48000, and a chunk sized or encoded at the wrong rate is both
mis-pitched and mis-timed against the FIFO cushion the pacing rests
on. sr_audio_start() takes it from retro_get_system_av_info(), after
the game loads, because that is when it first exists.
* The ASPECT. The fit assumed SQUARE PIXELS. A console's are not: the
NES's 256x240 was shown on a 4:3 television and fceumm asks for 1.219,
so fitting it at 256:240 draws it a quarter too narrow. FreeIntv hid
this for a whole milestone -- its 352x224 IS the 1.5714 it reports, so
ignoring the aspect happened to be right on the only console we had.
[video] aspect = core (default) | 4:3 | square | <number> overrides it.
Volume, on '+' and '-' ('=' and '_' alias them, so turning the sound down
needs no shift key). ZERO IS NOT "very quiet": at 0 the door stops sending audio entirely -- no encode, no upload, no queue -- and flushes what is
already queued, so the sound stops when the key is pressed rather than a cushion later, and a player who wants quiet costs zero uplink. The new
level shows for a moment on the bottom text row.
The Ctrl-S stats strip moves to that same bottom row. It is the one
placement that works: the fit already reserves that row, so nothing else
paints there -- and ../syncconquer found a strip over the image UNREADABLE under sixel, which shares the text plane and repaints progressively.
Who's-online names the cartridge -- "playing Astrosmash (Intellivision)"
-- as SyncDOOM names its WAD and map, instead of the BBS's generic
"running external program". The lobby passes the title it has already
parsed out of the filename; a door run by hand falls back to the filename.
The keytrace now records what each key RESOLVED to (act/id/port), not just
the byte arriving. A once-a-second direction sample cannot answer the only question a player ever asks -- "I pressed X and nothing happened".
Also carries the earlier two-hand-controller keypad work that was sitting uncommitted in the tree (syncretro_keypad.c/h, M2_INPUT.md): the digit
state is per port, and both controllers are live at once.
---
þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net