https://gitlab.synchro.net/main/sbbs/-/commit/1fa350147898ba554bd54bc2
Added Files:
src/doors/syncretro/test_disc.c
Modified Files:
src/doors/syncretro/CMakeLists.txt M2_INPUT.md syncretro_binds.c syncretro_input.c
Log Message:
syncretro: numpad is the keypad by position; Shift reaches all 16 disc detents
The numeric keypad drove the Intellivision keypad by printed digit. The two devices are upside down relative to each other (a PC numpad has 7 8 9 across the top, the Intellivision keypad has 1 2 3 there), so in a cartridge that reads the keypad as a direction -- Tron Deadly Discs aims its throw by key position -- the top-left numpad key fired bottom-left. The whole vertical
axis was flipped, not only the diagonals: numpad 8 is the bottom-middle
keypad key. Reported by Deuce as the numpad diagonals being upside down.
Numpad 7/8/9 now map to keypad 1/2/3 and 1/2/3 to 7/8/9; 4/6, 5, 0, Clear
and Enter are unchanged. The number row has no shape and stays by digit, so
it remains the way to type a game-variant number; the same number typed on
the numpad enters its positional counterpart.
The disc was capped at eight positions: the door only ever sent d-pad bits,
and FreeIntv composes a diagonal from two of them but reads the full 16-way ring only from the left analog stick, which the door used solely for the paddle-cart sweep. Holding Shift now turns the held direction one detent clockwise on that stick (Up is NNE, Up+Left is NNW, Left is WNW, and so on round the ring), so every one of the sixteen is a key or two plus Shift.
While the stick speaks for a controller its d-pad bits are withheld, because the core ORs both into one controller word. Shift is read from the evdev modifier edges (SyncTERM) and from kitty's LEFT_SHIFT/RIGHT_SHIFT functional codes; the byte path has neither Shift nor a key-up and is unchanged.
The sixteen stick vectors are chosen on the core's own quantized grid:
FreeIntv divides each axis by 8192 before atan2 and buckets the angle into fifteen 24-degree slots, so the detent is a property of the quantized integer pair, not of the nominal angle. The paddle sweep's vectors move onto the same table (E/ESE and W/WNW), which is what they already decoded to.
test_disc.c drives the real input module through SyncTERM physical-key
reports and decodes the results with a copy of the core's arithmetic: every numpad key, all sixteen detents plain and shifted, the withheld bits, the sweep, and a gamepad console left untouched. The help screen gains the Shift row and notes that the numpad is by position; M2_INPUT.md documents both.
Co-Authored-By: Claude Fable 5.1 <
noreply@anthropic.com>
---
þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net