<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rs-dos/rsnix/src/uefi.rs, branch qemu</title>
<subtitle>Simple, kernel-only, 64bit OS, early stage.
</subtitle>
<id>https://git.2137697.xyz/rs-dos/atom?h=qemu</id>
<link rel='self' href='https://git.2137697.xyz/rs-dos/atom?h=qemu'/>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rs-dos/'/>
<updated>2026-08-02T13:21:34Z</updated>
<entry>
<title>v0.5.5: crash reports go to a dedicated CRASHLOG USB stick</title>
<updated>2026-08-02T13:21:34Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-08-02T13:21:34Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rs-dos/commit/?id=c7d92071e1dd11c45999457b16554b4abaa73b28'/>
<id>urn:sha1:c7d92071e1dd11c45999457b16554b4abaa73b28</id>
<content type='text'>
The fault handler now writes crash.log to the volume labeled CRASHLOG
(label-selected via fat::crash_vol), falling back to slot 0.  On real
hardware the boot USB may be unwritable, so a second stick labeled
CRASHLOG survives the write; the shell auto-prints the previous crash
report from it at next boot (read_crash_log resolves /disk/&lt;uid&gt;/crash.log
through the FAT path, since Disk nodes hold no cached children).

- fat.rs: volume_label() + crash_vol() (no allocation)
- fs.rs: write_crash_log targets crash_vol(); read_crash_log prefers the
  CRASHLOG disk node; drop now-unused first_disk()
- mkdisk.sh: --label option
- test-fault.sh: boots with a dedicated CRASHLOG stick (mkfs -F 32 -n
  CRASHLOG), verifies crash.log lands there and NOT on the ESP
</content>
</entry>
<entry>
<title>rsnix v0.5.1: force the GUI canvas to 800x600 via GOP SetMode</title>
<updated>2026-08-01T19:30:48Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-08-01T19:30:48Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rs-dos/commit/?id=d9c47d52039be7a61d3e9d3652f73322fb6f47ba'/>
<id>urn:sha1:d9c47d52039be7a61d3e9d3652f73322fb6f47ba</id>
<content type='text'>
The kernel used to inherit whatever GOP mode the firmware picked
(QEMU/OVMF gave 1280x800). Now every surface derives from a fixed
800x600 canvas:

- uefi: typed EfiGopQueryMode/SetMode/GetMode fn pointers in
  GraphicsOutputProtocol (were raw *mut c_void, never called).
- gop::select_gop_mode: scan the mode list for an exact 800x600
  (32-bit BGR/RGB only, the driver assumes 4 Bpp), SetMode it; fall
  back to the smallest mode that fits the canvas, then to the
  firmware's choice. SetMode may move both the mode info pointer and
  the framebuffer base, so both are re-read after the switch. Boot
  log: 'gop: mode 3 selected — 800x600 (was 1280x800)'.
- tests: relative assertions are resolution-agnostic; test-gfx and
  test-mouse had a boot-log race (shell line prints before the cursor
  task line) — now wait for the cursor line instead of grepping once.
  All four suites pass at 800x600. 0 build warnings.
</content>
</entry>
<entry>
<title>style: rustfmt field alignment in RuntimeServices</title>
<updated>2026-07-31T14:04:41Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-07-31T14:04:41Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rs-dos/commit/?id=5cb90c8a03e61a4419f08b9a84c127921691b9ed'/>
<id>urn:sha1:5cb90c8a03e61a4419f08b9a84c127921691b9ed</id>
<content type='text'>
</content>
</entry>
<entry>
<title>power: proper shutdown via UEFI ResetSystem (ACPI S5)</title>
<updated>2026-07-31T14:01:46Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-07-31T14:01:46Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rs-dos/commit/?id=ba667148af04963f5d70c647511ea1fad1add21d'/>
<id>urn:sha1:ba667148af04963f5d70c647511ea1fad1add21d</id>
<content type='text'>
- uefi.rs: full EFI_RUNTIME_SERVICES layout with reset_system at index 10
  (spec order); EfiResetSystem type + RESET_* constants
- power.rs: stash the runtime-services table pre-EBS; poweroff() calls
  ResetSystem(EfiResetShutdown) — still callable after ExitBootServices
  because we never call SetVirtualAddressMap, so the pointers keep
  working with physical addresses; falls back to the hlt loop
- shell: 'poweroff' and 'exit' shut the machine down (QEMU exits),
  'halt' keeps the plain hlt loop
</content>
</entry>
<entry>
<title>rsnix: memory management — free-list heap, bitmap pages, paging adoption</title>
<updated>2026-07-31T13:51:28Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-07-31T13:51:28Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rs-dos/commit/?id=5e03409586efc37931f07b40ee0c71a9a9e109f7'/>
<id>urn:sha1:5e03409586efc37931f07b40ee0c71a9a9e109f7</id>
<content type='text'>
- uefi.rs: full EfiMemoryType constants (0-14) + memory_type_name(); fix
  MEMORY_TYPE_LOADER_DATA from 6 to 2 per the UEFI spec
- memory.rs: replace the bump allocator with a first-fit free-list heap
  (splitting, coalescing, 8-byte back-pointer for alignment-safe free);
  add a bitmap physical page allocator (heap region reserved, page-0
  guard, aligned runs); grow the heap from the page allocator on demand
- paging.rs: identity page-table helpers — adopt_tables() rebuilds the
  firmware map into our own tables (OVMF maps its tables read-only, so
  the firmware tree can't be modified in place) and switches CR3;
  map_page/unmap_page/is_mapped with 2 MB/1 GB large-page splitting
- main.rs: boot self-tests for heap, pages, and paging
</content>
</entry>
<entry>
<title>restructure: rsnix kernel + shell crate + rsdos entry point</title>
<updated>2026-07-31T00:58:31Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-07-31T00:58:31Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rs-dos/commit/?id=6a5c32fa6ae8ec34e3e5b44d7e5a78ded8fe729b'/>
<id>urn:sha1:6a5c32fa6ae8ec34e3e5b44d7e5a78ded8fe729b</id>
<content type='text'>
Architecture:
  rs-dos/  (workspace root, was raisernics/)
  ├── rsnix/     — kernel lib crate (uefi, serial, gop, ps2, interrupts, memory)
  ├── shell/     — shell lib crate (prompt, commands, line input)
  ├── rsdos/     — binary crate (efi_main, init, panic handler)
  └── rsboot/    — future git submodule

No functional changes — boots to shell prompt identically.
Version auto-pulled from Cargo.toml via env!("CARGO_PKG_VERSION").
</content>
</entry>
</feed>
