summaryrefslogtreecommitdiffstats
path: root/Cargo.lock
diff options
context:
space:
mode:
authorsalmonik <salmonik@tuta.io>2026-07-31 17:55:52 +0200
committersalmonik <salmonik@tuta.io>2026-07-31 17:55:52 +0200
commit74bc1ce1f0d3783578e89030955319c403db6e72 (patch)
tree96ff3988879fad175a51ab035755649fb3c93832 /Cargo.lock
parentvt: don't strand stale inverse cursor cells on scroll/clear (diff)
downloadrs-dos-74bc1ce1f0d3783578e89030955319c403db6e72.tar.gz
rs-dos-74bc1ce1f0d3783578e89030955319c403db6e72.zip
gop: RAM backbuffer — scrolling never reads the framebuffer
Real-hardware GOP framebuffers are typically uncacheable or write-combining (firmware MTRR/PAT), so the scroll shift's full-screen memcpy *read* ~4-8 MB through uncached memory — a bus round-trip per cache line. That made scroll printing crawl on real hardware while plain printing (a few glyph writes) stayed instant. - gop keeps a RAM shadow copy of the whole framebuffer (same pitch layout), allocated at init. - Every raster write (glyph blits, clear) goes to both the display and the shadow. - shift_up becomes: cached shadow memcpy up one row + clear exposed bottom row in the shadow + one write-only push shadow→display via copy_nonoverlapping (64-byte bursts that coalesce on WC memory) — the display is never read. - Fallback to the old direct shift if the shadow allocation is null. Verified in QEMU: mmap output scrolls ~100 lines with coherent rows and a clean bottom row, clear wipes the screen, cursor tracks the prompt, editor paths untouched. Release + dev builds pass.
Diffstat (limited to 'Cargo.lock')
0 files changed, 0 insertions, 0 deletions