feat: add emulated mouse driver, file output, and GUI mouse grab
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Thu, 27 Aug 2026 22:08:34 +0000 (01:08 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Thu, 27 Aug 2026 22:08:34 +0000 (01:08 +0300)
commit0b97fa61953b0e4b183ec5563f63873608d9811e
tree837199366f58983ac42aa401031bca469bcbf155
parentb7b8fcc61852d28df06825ca6cbdd533a2a79d29
feat: add emulated mouse driver, file output, and GUI mouse grab

- machine/: 1 MiB emulated RAM behind DEF SEG/PEEK/POKE, with the
  qbext mouse TSR always loaded (INT 79h vector, 8-byte table: magic,
  X/Y accumulators, button latch; accumulate + read-and-reset)
- mouse input: SwingFrontend pushes scaled window deltas and button
  latches; GameDriver gains scripted --mouse deltas/buttons for
  headless verification; mousedrv.bas runs unmodified
- GUI mouse grab: first click captures (transparent always-on-top
  overlay spans all screens, cursor hidden), Ctrl+F10 releases; no
  Robot warping (Wayland RemoteDesktop popup, Xvfb EDT hang)
- language: VAL parses &H/&O with signed literal semantics, HEX$,
  LOCATE with omitted column, OPEN FOR OUTPUT/APPEND + PRINT # (CRLF,
  console formatting), CHDIR/MKDIR with DOS path semantics
  (backslashes, drive letters, case-insensitive components)
- SCREEN 13 default foreground corrected to 15 (QB.EXE/DOSBox oracle;
  255 is black in the BIOS palette, so text printed black-on-black)
16 files changed:
Documentation/agent-integration/index.org
Documentation/language/index.org
src/main/java/eu/svjatoslav/crtbasic/Main.java
src/main/java/eu/svjatoslav/crtbasic/ast/Ast.java
src/main/java/eu/svjatoslav/crtbasic/frontend/SwingFrontend.java
src/main/java/eu/svjatoslav/crtbasic/interp/Interpreter.java
src/main/java/eu/svjatoslav/crtbasic/machine/MachineMemory.java [new file with mode: 0644]
src/main/java/eu/svjatoslav/crtbasic/machine/QbextMouseTsr.java [new file with mode: 0644]
src/main/java/eu/svjatoslav/crtbasic/parser/Parser.java
src/main/java/eu/svjatoslav/crtbasic/video/ScreenMode.java
src/main/java/eu/svjatoslav/crtbasic/video/TextConsole.java
src/main/java/eu/svjatoslav/crtbasic/video/VgaDevice.java
src/test/java/eu/svjatoslav/crtbasic/drivers/GameDriver.java
src/test/java/eu/svjatoslav/crtbasic/interp/FileOutputTest.java [new file with mode: 0644]
src/test/java/eu/svjatoslav/crtbasic/interp/MouseDriverEmulationTest.java [new file with mode: 0644]
src/test/java/eu/svjatoslav/crtbasic/video/VgaDeviceTest.java