spec: document the Agon pointer path in the platform appendix 79333fa1febe
0.4.0 added POST/GET /pointer but the Agon appendix had no pointer note. Fill it: the FAB emulator feeds PS/2 mouse packets through the same sendHostMouseEventToFabgl device path host motion uses, tracks the absolute position server-side (PS/2 is relative) so x/y and GET /pointer are exact, and delivers packets at the frame boundary like /key. Git-Commit: b741043ac79922d13d5ca80115a992012319ce75 Git-Author: Andy McCall <[email protected]>
- Author
- Andy McCall @andymccall <[email protected]>
- When
- · 2026-07-22 20:07 UTC
- Signature
- ◈ sealed by Andy McCall
- Hash
79333fa1febe9028d3120778337b471dca2cb7acc8a49a50283c6040dfc30d49- Depends on
- 961b3c610c66 d44319b1e712
- Depended on by
- nothing yet
- In bookmarks
- main perf-6
- Edits
- 1 atom, 0 tree operations, 1 file
Browse the tree at this change
modified SPEC.md +10 −0
| … | 172 unchanged lines |
||
| 173 | 173 | delivers it via `sendVKeyEventToFabgl`; `?code=<vk>` passes a raw fabgl vkey. |
|
| 174 | 174 | The control thread queues events; the render thread delivers them (same |
|
| 175 | 175 | thread as normal keyboard input). `/reset` triggers the soft-reset atomic. |
|
| 176 | + | - Pointer: `/pointer` feeds PS/2 mouse packets through `sendHostMouseEventToFabgl` |
|
| 177 | + | — the same device path host mouse motion uses, so it drives the real fabgl/VDP |
|
| 178 | + | mouse rather than a shortcut. PS/2 motion is relative, so the control server |
|
| 179 | + | tracks the absolute position itself: `x`/`y` become a delta from that tracked |
|
| 180 | + | point (split across packets past the ±127 int9 range), `dx`/`dy` apply directly, |
|
| 181 | + | and `GET /pointer` reports it exactly. Coordinates are screen space (x right, |
|
| 182 | + | y down; y is negated into the PS/2 up-positive convention). `buttons` bit0/bit1 |
|
| 183 | + | map to the PS/2 left/right (primary/secondary) button bits. Like `/key`, packets |
|
| 184 | + | are queued by the control thread and delivered by the render thread at the frame |
|
| 185 | + | boundary, so `pause → pointer → step(1) → screenshot` is reproducible. |
|
| 176 | 186 | ||
| 177 | 187 | --- |
|
| 178 | 188 | ||
| … | 21 unchanged lines |