<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rs-dos/rsnix/src/pci.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-17T12:53:52Z</updated>
<entry>
<title>USB2/1.1 (EHCI/UHCI) drivers + real-hardware bring-up hardening</title>
<updated>2026-08-17T12:53:52Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-08-17T12:53:52Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rs-dos/commit/?id=be868a43185826b02bf6d091019bb779678525bb'/>
<id>urn:sha1:be868a43185826b02bf6d091019bb779678525bb</id>
<content type='text'>
- Add polled EHCI (USB2) and UHCI (USB1.1) host-controller drivers with
  HID boot mouse support, wired into cursor polling and the 'usb' shell cmd
- Add USB Legacy ownership handoff (claim_usb_legacy) plus config_write_byte
- Harden boot: verify the PIT/timer ticks before shell entry, EOI stray
  interrupts in the LAPIC to stop interrupt storms, bound PS/2 controller
  waits, and INTx-disable AHCI (polled driver)
- Add boot stage markers, klog screen echo, and QR lock; scheduler
  mark_shell_running; NO_USB stopgap to keep BIOS USB-Legacy input alive
- alloc_pages_above for DMA buffers that must avoid low conventional memory
- Expand DEBUG_NOTES with EHCI/QEMU bring-up findings
</content>
</entry>
<entry>
<title>fix pi-lens warnings: unwraps, shell SC2046, dup code (fmtbuf/scripts/hexdump/cat/ahci/pci)</title>
<updated>2026-08-01T16:25:55Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-08-01T16:25:55Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rs-dos/commit/?id=1ea2f68e6a9af135e6cb3274fdf28d4ddc5812d5'/>
<id>urn:sha1:1ea2f68e6a9af135e6cb3274fdf28d4ddc5812d5</id>
<content type='text'>
- memory.rs: self-test Layout::from_size_align no longer panics — the
  test fails cleanly on an invalid layout
- fat.rs: v() no longer unwraps the active-volume slot — invariant
  violation logs + halts instead of panicking mid-disk-io
- strbuf: shared FmtBuf replaces the duplicated PanicBuf/FmtBuf
  (main.rs + sched.rs)
- test-disk.sh: SC2046 — conditional --fresh arg no longer relies on
  word splitting
- scripts: boot.sh/boot-image.sh share lib-boot-args.sh (dup args loop)
- shell: cat/hexdump stdin pairs unified with Option&lt;&amp;str&gt; marker;
  hexdump format_row folded into format_partial
- ahci: read/write_sectors unified behind dma_sectors
- pci: config_read/write share config_addr
</content>
</entry>
<entry>
<title>Bump workspace to edition 2024</title>
<updated>2026-08-01T01:47:51Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-08-01T01:47:51Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rs-dos/commit/?id=7c5603b2fed27be86982665a8b10dcd8f1c5a483'/>
<id>urn:sha1:7c5603b2fed27be86982665a8b10dcd8f1c5a483</id>
<content type='text'>
- edition = "2024" in the workspace manifest and rsdosedit
- extern blocks must be unsafe: interrupts.rs ISR stubs -&gt; unsafe extern "C"
- #[no_mangle] -&gt; #[unsafe(no_mangle)] (efi_main, isr_dispatch)
- One missed static-mut read in free_list_insert wrapped in an explicit
  unsafe block (edition 2024 removed the implicit unsafe context inside
  unsafe fns)
- rustfmt reflows for 2024: nested if-lets become let-chains, imports
  re-sorted, rsdosedit help-screen box rows wrapped

No codegen-affecting changes. Validated: cargo check/clippy/fmt clean
(host + uefi target), make test-disk PASS, editor round-trip PASS.
</content>
</entry>
<entry>
<title>ahci: SATA driver + FAT32 persistent disk mounted at /disk</title>
<updated>2026-07-31T17:53:53Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-07-31T17:53:53Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rs-dos/commit/?id=dc23d2f22cafeb6b97ba460789a834a6c586314d'/>
<id>urn:sha1:dc23d2f22cafeb6b97ba460789a834a6c586314d</id>
<content type='text'>
- ahci.rs: polling AHCI on PCI class 1/6/1, bus mastering + ABAR map,
  port 0 up, IDENTIFY + READ/WRITE DMA EXT through one 4KiB DMA buffer
- fat.rs: BPB parse, whole-FAT RAM cache with write-back to both copies,
  LFN read/write, dirs, multi-cluster files, FSInfo free-count sync,
  space-padded dot entries ('..' = cluster 0 under root), fsck-clean
- fs.rs: /disk mount node + 24-slot ephemeral node pool; ls/cat/hexdump/
  echo/mkdir/touch/rm/edit all work on disk paths unchanged
- QEMU: explicit bus assignment (disk=ide.0, ESP=ide.1); the implicit
  fat:rw:esp drive was stealing AHCI port 0
- Debugged against QEMU source: header DW0 is CFL in bits 4:0 / PRDTL in
  bits 31:16 (Linux libahci layout), FIS count at bytes 12-13, device at
  byte 7; QEMU rejects H2D FIS flags bits 6:4, so direction is the
  header W bit only
- Verified: full shell round-trip on /disk, reboot persistence (poweroff
  then mdir/mtype and a fresh boot), fsck.fat clean
</content>
</entry>
<entry>
<title>rtc + pci: CMOS clock with date command, PCI bus enumeration</title>
<updated>2026-07-31T14:10:40Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-07-31T14:10:40Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/rs-dos/commit/?id=8b1c1a23382806fcdbd3dbc7336a6ac2da8a995b'/>
<id>urn:sha1:8b1c1a23382806fcdbd3dbc7336a6ac2da8a995b</id>
<content type='text'>
- rtc.rs: read the PC RTC via CMOS ports 0x70/0x71 (UIP wait, BCD/12h
  normalization, century sanity-check with 2000+ fallback); boot prints
  the wall clock, shell gains 'date'
- pci.rs: legacy config-space access (0xCF8/0xCFC) with full enumeration
  of buses 0-255; boot reports device count, shell gains 'pci' (lspci
  style listing with class names)
- QEMU q35 verified: Q35 host bridge, stdvga, e1000, ICH9 LPC
</content>
</entry>
</feed>
