Demo website. “Added demo website” added a React 19 + TypeScript + Vite frontend under frontend/ that reimplements the shell in-browser rather than just describing it: a simulated 1MB memory buffer seeded with a fake IVT/BDA/boot sector/RSDP, a virtual 0xB8000 VGA text buffer, and a boot sequence (blank POST screen → “Hello, Amethyst!” → prompt) mirroring entry.asm. Reuses the real ASCII art strings from data_commands.asm and tracks cursor/attribute/scrollback state parallel to the kernel’s own globals.
USB enumeration. “Added usb command with USB 1.1/2.0/3.x device enumeration” is the big one (~1200 lines, mostly new commands_usb.asm): brute-force PCI scan for class 0x0C/subclass 0x03 controllers, printing bus:dev.func, controller type (UHCI/OHCI/EHCI/xHCI), and vendor:device IDs. EHCI drives a real async QH/qTD control transfer to fetch each device’s descriptor. xHCI goes further — full register setup, command ring + polled event ring, per-port reset/speed detection, then a genuine Enable Slot → Address Device → GET_DESCRIPTOR(Device) sequence per port. Getting this working surfaced and fixed three bugs in one commit: pci_write32 clobbering its own value through a scratch register pci_config_addr also used; xhci_wait_event returning any event regardless of type, mistaking a stray Port Status Change Event for a command completion; and an untracked Cycle State bit that silently dropped every second transfer on the reused control-transfer ring.
Vendor/product names, without hardcoding. “Added iManufacturer string fetch for USB vendor names” factored the existing iProduct fetch into a shared xhci_print_string_desc helper, called once for iManufacturer and once for iProduct — decoding the real UTF-16LE string descriptor live over a control transfer, no lookup table. Also cleaned up the register-dump and completion-code debug prints left over from chasing the bugs above, so cmd_usb’s output is just the device/vendor/name lines.
Comments 0
No comments yet. Be the first!
Sign in to join the conversation.