SchOS/kernel/dev
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Nexoniarz 60d06658f0 gfx: draw the console in RAM, and write it to the card write-combined
On the first real machine with a discrete card (an RTX 3060, 800x600 from
the UEFI GOP) the console was slow enough to photograph mid-scroll, and the
boot died on CPU 1's "cpu1: starting": CPU 0 spun 200M times on the console
lock while CPU 1 held it, scrolling, and called it a deadlock.

The framebuffer is device memory in the uncached 3-4 GB page of the direct
map. QEMU's stdvga is RAM underneath, so nothing showed there; on a card,
gfx_scroll_up's memmove read the whole screen back across the bus one byte
at a time, and every anti-aliased glyph read back each pixel it blended.

So the console now draws into a copy of the screen in RAM (vmap_alloc: kalloc
pages behind a page table of their own, since nothing needs it contiguous),
and gfx_flush() copies the changed rectangle onto the card through an
ioremap_wc() mapping -- PAT entry 4 set to write-combining on every CPU.
Flushes happen where drawing ends: a message, a terminal write, an echo, a
terminal switch. Scrolling moves eight bytes at a time instead of one.

/dev/fb0 reads and writes the card itself, as before. The early console's
fb_info now carries the physical address it always should have.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S1giNvrHTrPMPw7V6x1kQ4
2026-10-22 23:46:58 +02:00
..
audio.c audio: /dev/dsp, AudioEngine, and an AC'97 under it 2026-09-24 14:23:13 +02:00
bio.c usb: plug and play -- hot-plug, unplug, every interface, real mice 2026-10-22 11:38:13 +02:00
blkdev.c usb: plug and play -- hot-plug, unplug, every interface, real mice 2026-10-22 11:38:13 +02:00
cdev.c audio: /dev/dsp, AudioEngine, and an AC'97 under it 2026-09-24 14:23:13 +02:00
dbg.c licence: SchOS is GPL-2.0-or-later, no longer Apache-2.0 2026-10-22 08:48:45 +02:00
device.c audio: /dev/dsp, AudioEngine, and an AC'97 under it 2026-09-24 14:23:13 +02:00
disk.c dev: raw disks are 64-bit, so a real drive stops wrapping at 4 GB 2026-08-11 12:15:38 +02:00
fb.c gfx: draw the console in RAM, and write it to the card write-combined 2026-10-22 23:46:58 +02:00
gfx.c gfx: draw the console in RAM, and write it to the card write-combined 2026-10-22 23:46:58 +02:00
ide.c q35: five seconds of boot spent waiting on disks that are not there 2026-10-22 11:10:07 +02:00
input.c kernel: the clock ran 7x slow because the GPU never acknowledged its interrupt 2026-09-12 21:34:36 +02:00
irq.c acpi: uACPI, for interrupt routing, the power button and power-off 2026-10-22 16:12:28 +02:00
kbd.c kbd: three layouts, and the arrow keys were sitting on top of UTF-8 2026-09-20 01:09:32 +02:00
keymap.c kbd: three layouts, and the arrow keys were sitting on top of UTF-8 2026-09-20 01:09:32 +02:00
mouse.c boot: stop assuming the machine is an emulator 2026-10-22 10:29:12 +02:00
netuser.c licence: SchOS is GPL-2.0-or-later, no longer Apache-2.0 2026-10-22 08:48:45 +02:00
pci.c acpi: uACPI, for interrupt routing, the power button and power-off 2026-10-22 16:12:28 +02:00
pciuser.c licence: SchOS is GPL-2.0-or-later, no longer Apache-2.0 2026-10-22 08:48:45 +02:00
procfs.c dbg: the boot menu can turn on remote debugging, in a debug build 2026-09-24 15:05:23 +02:00
ramdisk.c Initial commit: Schunix as it stands before the SchOS rename 2026-08-09 13:47:01 +02:00
text.c gfx: one glyph blitter, and a terminal cell is a surface 2026-09-23 17:57:16 +02:00
ttf.c font: the console draws outlines now, and a byte could not have held Ą 2026-09-20 00:35:34 +02:00
uart.c boot: one line when it works, all of it when it does not 2026-09-14 21:19:50 +02:00
vt.c gfx: draw the console in RAM, and write it to the card write-combined 2026-10-22 23:46:58 +02:00