SchOS/kernel/dev
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Nexoniarz d85274dbd9 gfx: the console's typeface is replaceable, and the loader is what replaces it
Gate 0's last-but-one open item. Drop a TrueType file at \schos\console.ttf on
the ESP and the console is drawn with it; with no file, the face linked into
the kernel image, which is what an early panic needs and is not a degraded
mode.

**The loader reads it, and that is the decision worth writing down.** The
kernel opening the file once the root filesystem is mounted is the obvious
design. It is also wrong: the console has been drawing since the kernel's
first line, so a font arriving later changes the cell size, which changes the
column count, which re-lays out every terminal -- and blanks them. The kernel
log would vanish off the screen at the moment the root filesystem mounted,
which is exactly the log a machine being brought up for the first time is
being read for. Since the next thing on the list is real hardware, losing that
was not a trade worth making.

So the choice happens before anything is drawn. Three details make it cheap:

  - **EfiReservedMemoryType**, not EfiLoaderData. The E820 handoff turns
    loader data into usable memory, on the argument that the loader's own
    pages are the kernel's the moment it runs -- true of the loader, not true
    of a buffer it wants the kernel to keep reading from.
  - **Below 4 GB**, because the kernel reaches this through its direct map and
    that is how far the direct map goes. A font above it would need an ioremap
    the console cannot do before there is a console.
  - **Used in place.** No copy, which matters because the kernel has no
    contiguous allocator to copy 112 KB into -- the only one is the DMA arena,
    and that belongs to devices.

Sized without EFI_FILE_INFO and its GUID: seek past the end and ask where that
landed, which the specification requires to clamp.

Every failure falls back and keeps going -- no file, implausible size, no
memory, short read, unparseable file. The last says so in the log, because a
font that silently did not load looks exactly like a font that did.

Verified by booting with JetBrainsMono-ExtraBold.ttf on the ESP and
screendumping the console: visibly the bold face, against the Regular of a
boot with no file. Three boots each way, no traps and no panics, socktest and
memfdtest green in all six.

Nothing ships a console.ttf: the file would be the file already in the kernel,
and two copies of a font are two things that can disagree.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 17:47:45 +02:00
..
bio.c fs: timestamps come from the clock, and /proc/fsstat says how full the tables are 2026-09-12 17:14:14 +02:00
cdev.c errno: -1 is EPERM, and four places were saying it by accident 2026-09-14 22:12:28 +02:00
dbg.c debugger: D5, the network transport -- and the plan closes 2026-09-14 15:33:53 +02:00
device.c gfx: the second head shows the boot, not just what comes after it 2026-09-22 21:47:35 +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: the console and the crash screen stop drawing on a driver by name 2026-08-15 17:04:10 +02:00
gfx.c gfx: the console's typeface is replaceable, and the loader is what replaces it 2026-09-23 17:47:45 +02:00
ide.c ide: idewait spun for a minute on any machine with no legacy drive 2026-09-13 14:43:35 +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 hybrid: interrupts to userspace, and a crashed driver that stays crashed 2026-09-13 18:11:00 +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 gfx: the console and the crash screen stop drawing on a driver by name 2026-08-15 17:04:10 +02:00
netuser.c ldls: a network, in a process 2026-09-14 08:31:06 +02:00
pci.c boot: one line when it works, all of it when it does not 2026-09-14 21:19:50 +02:00
pciuser.c panic: the crash screen reaches every display, not just the console's 2026-09-22 16:53:16 +02:00
procfs.c kmem: a slab allocator, and what the fixed tables actually cost 2026-09-22 09:32:06 +02:00
ramdisk.c Initial commit: Schunix as it stands before the SchOS rename 2026-08-09 13:47:01 +02:00
text.c Initial commit: Schunix as it stands before the SchOS rename 2026-08-09 13:47:01 +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: the second head shows the boot, not just what comes after it 2026-09-22 21:47:35 +02:00