GSplus Backlog
Planned and possible work for GSplus. Everything below targets the SDL3 build
(the focus — see the README). Items marked (core) already exist in the KEGS
core and mainly need wiring into the SDL driver; everything else is new.
Effort: S small · M medium · L large. Priority: High / Med / Low.
Done
- Foundation: SDL3 driver (video/input/audio), CMake build, cross-platform CI,
self-contained packaging (macOS
.dmg, Linux .tar.gz, Windows .zip),
version-from-tag.
- F1 — Window & display options:
-fullscreen, -borderless, -noaspect,
-highdpi, -nohwaccel, window position; F11 fullscreen toggle. (-novsync
was later removed — see the vsync item under Display.)
- F2 — Scanline simulator:
-scanline <0-100>, Shift+F11 toggle.
- F3 — Drag-and-drop: drop a disk image on the window to mount it (slot
guessed from file size).
- Curved CRT effect:
-crt 1 + -crtcurve <0-100> + -crtmask <0-100>,
Ctrl+F11 toggle. Curvature (RenderGeometry mesh) + RGB phosphor mask + bloom +
vignette, composes with -scanline. All on the 2D renderer, no extra libraries.
- Gamepad/controller support: SDL3 high-level Gamepad API → IIgs
joystick/paddles, with hotplug. Select "Native Joystick 1" in the F4 config
menu to route paddles to it.
- Screenshots: F10 captures the framebuffer (
-ssdir sets the output
directory).
Legacy gsplus features (original roadmap)
| Item |
Pri |
Eff |
Notes |
| Clipboard copy/paste |
Med |
M |
Wire SDL clipboard to the core's copy/paste hooks (core). |
Input
| Item |
Pri |
Eff |
Notes |
| Mouse capture toggle |
Med |
S |
Grab/release the pointer via a hotkey. |
| Configurable key remapping |
Low |
M |
Currently a fixed scancode→ADB table. |
| Gamepad button remapping |
Low |
S |
SDL_Gamepad's stable button names make a small remap table in the config menu cheap. |
Display
| Item |
Pri |
Eff |
Notes |
| Integer / pixel-perfect scaling toggle |
Med |
S |
Crisp 1×/2×/3× vs. letterbox stretch; also stops scanline shimmer at non-integer scales. |
| Linear-filter option |
Low |
S |
Smooth-scaling alternative to nearest. |
| Re-add vsync option properly |
Low |
M |
Removed pre-1.38.0 (double-pacing caused half-speed + Windows audio gaps). Right fix: when vsync is on, let it drive pacing and drop the sleep-based clock — one pacer, not two. |
Runtime / system
| Item |
Pri |
Eff |
Notes |
| Fast-forward / turbo hotkey |
High |
S |
Hold to uncap speed. |
| Pause/resume hotkey |
Med |
S |
|
| Save states / snapshots |
Med |
L |
Full IIgs machine state; KEGS has none. Stretch. |
Audio
| Item |
Pri |
Eff |
Notes |
| Volume / mute hotkey |
Med |
S |
|
| Audio device selection |
Low |
S |
|
Quality of life
| Item |
Pri |
Eff |
Notes |
| Recent disks/ROMs menu |
Med |
M |
|
| Window title shows mounted disk |
Low |
S |
|
| Modern overlay config menu (vs. F4 text panel) |
Low |
L |
Big polish, big effort. |
Packaging / distribution
| Item |
Pri |
Eff |
Notes |
| Linux AppImage (self-contained) |
Med |
M |
The one non-self-contained download today. |
| Code signing (Windows/macOS) |
Low |
M |
Needs a cert / Azure Trusted Signing. |
| Local mingw cross-compile for fast Windows iteration |
Low |
S |
Catch Win compile/link errors on macOS in seconds. |
Testing / infrastructure
| Item |
Pri |
Eff |
Notes |
| CI smoke test |
High |
M |
Headless boot (SDL dummy video driver) for N emulated frames, checksum the framebuffer. Catches CPU/memory/video regressions on every PR — highest-leverage single test, especially for upstream KEGS merges. Needs a redistributable boot image or ROM-free path. |
Upstream (offer back to KEGS)
Per policy: core (non-SDL) fixes get offered upstream. Current candidates,
verified clean by review:
- VOC SHR shadow fix —
moremem.c fixup_ramwrt(), bank $E0 pages
$6000-$9FFF. Reword the misleading "bank 0" comment first.
- Windows timer fix —
clock.c timeBeginPeriod(1) + Sleep rounding;
winmm is already linked in upstream's vcxproj.
- dynapro.c dirent guard —
_WIN32 && _MSC_VER check; benefits any
mingw build of upstream.
Suggested order
Fast-forward → Clipboard.
Dagen's wishlist
(personal "selfish feature" ideas — add freely)