fix(input): match original low-byte key scans

The Win16 handlers mask the keyboard scan to its low byte. Main and keypad
Enter therefore both produce the right-flipper scan 0x1c, both Ctrl keys
produce the left-flipper scan 0x1d, and scan 0x1b is the physical
main-keyboard plus/right-bracket position accepted alongside keypad plus. Rust
omitted main Enter and scan 0x1b, and incorrectly assigned Right Ctrl to the
right flipper.

Map the native keys to those recovered scan semantics. Keep A/D, arrows, and
Equal only as explicit modern aliases and document the distinction.

Test Plan:
- `cargo test --workspace --all-targets --all-features` -- 125 passed
- `cargo clippy --workspace --all-targets --all-features -- -D warnings` -- passed
- `rumdl check --flavor commonmark README.md RECONSTRUCTION.md CHANGELOG.md` -- passed
- `git diff --cached --check` -- passed
This commit is contained in:
2026-08-23 20:37:45 +02:00
parent 505bf0417a
commit 26b7a9ecf3
4 changed files with 20 additions and 7 deletions
+3 -3
View File
@@ -54,10 +54,10 @@ for long end-to-end validation runs.
| Action | Original key | Additional modern key |
| --- | --- | --- |
| Start game / add up to 4 players | `+` | `=` uses the same main-keyboard key |
| Start game / add up to 4 players | Keypad `+` or the main `+`/`]` position | `=` is also accepted |
| Charge launcher | Hold Down arrow, release to launch | - |
| Left flipper | Left Ctrl | `A` or Left arrow |
| Right flipper | Keypad Enter | Right Ctrl, `D`, or Right arrow |
| Left flipper | Ctrl (left or right) | `A` or Left arrow |
| Right flipper | Enter (main or keypad) | `D` or Right arrow |
| Nudge | Space, Left Shift, keypad `3` | Right Shift aliases keypad `3` |
| Help | F1 | Enter/Escape returns |
| Settings | `TDKPIN.INI` before launch | F10 opens the portable settings screen |