KeyStatusHandlerRaw in the Circle baremetal kernel dropped the
ucModifiers byte and sized the keyboard state arrays to 0x100 entries,
too small for libretro modifier keycodes (RETROK_LSHIFT=304, etc.).
As a result, holding Shift (or Ctrl/Alt) produced no XT scan code in
the shared frontend, so shifted key combinations never worked.
- Translate ucModifiers bits to RETROK_LCTRL/LSHIFT/LALT/RCTRL/RSHIFT/RALT
so the existing RETROK_LSHIFT -> 0x2A / RETROK_RSHIFT -> 0x36 mapping
in src/frontend/core.c fires correctly.
- Resize key_states/key_states_current and the dispatch / input_state
loops from 0x100 to RETROK_LAST so modifier and other high keycodes
fit and are not silently truncated.
- Add bounds guard for mapped raw keycodes.
Also stages long-pending packaging fixes in tools/package/rpi/package-rpi.sh
(Pi 4/5 KERNEL_MAX_SIZE bump, Pi 4 family DTBs, disable_splash, [pi400]
and [cm4] stanzas) and updates docs/STATUS.md.
Verified with 'make rpi' for Pi 3/4/5 and the new kernel images
written to /dev/sda1.
Pi 3 bare-metal improvements:
- Offload CRT filter to Core 2 via CRT_FILTER_EXTERNAL compile flag.
Core 1 queues frames; Core 2 worker (RenderThread) processes
asynchronously with 1-frame latency. Trampoline pattern in crt.c/h.
- Add 4:3 letterboxed scaling on Core 2 render thread.
HW framebuffer created once at physical display resolution
(CBcmFrameBuffer auto-detect); largest centered 4:3 rect computed,
black bars cleared once, nearest-neighbor scale into target rect.
- Raise KERNEL_MAX_SIZE to 0x1400000 (20 MB) across Circle Config.mk,
kernel Makefile, and package-rpi.sh to accommodate ~19 MB .bss.
- Add vxt_peripheral_print_status() in src/vxt/peripheral.c that logs
CPU type (8088/V20), frequency, installed peripherals, IO map ranges,
and memory map ranges. Called from retro_load_game() in core.c.
Refs: docs/STATUS.md
Fix four critical issues preventing VirtualXT from booting on Raspberry Pi 3B+:
1. vfs_file_load was a stub returning NULL - implement real VFS-backed
loader using peripheral arena allocator
2. setup_machine_from_ini never wired disk.file_api - refactor to two
passes (instantiate + wire APIs, then configure)
3. Missing vfs_tell in Circle kernel - null pointer crash when disk
mount tried to get file size
4. Libretro VFS seek returns position, but disk module expects POSIX
0/-1 - add adapter in disk_file_seek
Also:
- Add NO_DEFAULT_DISK and NO_SAMPLES build flags for baremetal size
- Replace GLABIOS.ROM with vxtbios.bin in raspberrypi.ini
- Add package-rpi.sh packaging script with cmdline.txt LOGFILE support
- Raise KERNEL_MAX_SIZE to 17 MB for Circle sysinit
- Clean up kernel error handling (halt() instead of error_halt)
- Update STATUS.md with known bugs and recent changes
Codeberg's pages-server cert renewal for app.virtualxt.org broke during
the git-pages migration (last cert 2025-09-01). With .domains in the
deployed pages branch, the pages-server 307-redirects every visitor to
the unreachable custom domain. Custom-domain access is now handled by
HTTP forwarding configured at the DNS provider (Loopia) instead.
The pages deploy script checks out the orphan 'pages' branch into the
shared workspace and never restores the original branch, removing
tools/package/itch/push-web.sh and other source files from the tree.
Running itch deploy first avoids the clobber. Also drop leftover debug
output from the itch script.
Restructure the libretro release workflow so that .woodpecker/libretro.yaml
owns all cross-compilation orchestration (Zig, Android NDK, Emscripten) and
writes per-target outputs under dist/libretro/, while package-libretro.sh
only stages those prebuilt artifacts into the itch bundle directory. The
Makefile now accepts LIBRETRO_OUT, LIBRETRO_LINK_MODE, and
LIBRETRO_OBJECT_OUT variables so CI can produce target-native filenames
without a separate link step.
Work around Odin bug where _test.odin files are included during
regular builds for freestanding targets. Since core:testing imports
core:os and core:thread without freestanding guards, this causes
build failures.
Added #+build !freestanding to all test files and documented the
issue in AGENTS.md.