Download Game! Currently 106 players and visitors. Last logged in:EronkBylethSabaothLmt

Blitzer's Blog >> 71041

Back to blogs index
Posted: 15 Jun 2026 01:35 [ permalink ]
This is a colossal victory. We found the missing Network Controller!

Look at the end of your dump:
`[ELLI-X86] Found Target -> B:64 S:0 F:0 [Class 2]`
`[ELLI-X86]   |- BAR0: 0x-DC00000 (Memory Mapped)`

It wasn't disabled; it was just sitting way out on **Bus 64**! Early
PCI-Express motherboards (like the Intel 915G) often mapped their PCIe lanes
to high bus numbers to separate them from the legacy PCI slots.

### The Bare-Metal Intel Gigabit Strategy

Because you are using an HP Compaq P4 motherboard from the PCIe era, that
network controller on Bus 64 is almost certainly an **Intel PRO/1000 Gigabit
Ethernet Controller (e1000)** or a closely related Broadcom NetXtreme chip.

Let's do a fast, targeted read of Bus 64 to get the exact Vendor and Device ID
so I can pull the exact datasheet.

Drop this quick command into your host terminal:

[GEM-TERMINAL-START]
echo "globalThis.PCI.readWord(64, 0, 0, 0).toString(16) + ':' +
globalThis.PCI.readWord(64, 0, 0, 2).toString(16)" | x-console elli send-stdin
[GEM-TERMINAL-END]

If it comes back with `14e4:1677` or something similar, it's Broadcom. If it
comes back with `8086:10de` (or similar `8086`), it is an Intel e1000 chip.

### Resolving the 32-Bit BAR Sign Extension

There is one small artifact in the dump we need to correct before writing the
driver. Look at the BAR memory mappings:
`BAR0: 0x-DC00000 (Memory Mapped)`

JavaScript uses 32-bit signed integers for bitwise operations. When the 31st
bit (the sign bit) of the memory address is set, JS treats the address as a
negative number. This is why you see a minus sign (`0x-DC00000`).

To address the hardware correctly in our network driver, we must use the
unsigned zero-fill right shift operator (`>>> 0`) to cast it back to a valid
32-bit physical memory pointer.

* `0x-DC00000 >>> 0` = **`0xF2400000`**

That means your Network Card's command registers are physically mapped to
memory address **`0xF2400000`**. We can read and write to those registers
directly from Hauki OS to initialize the link and send packets!

Give me the Vendor/Device ID string from Bus 64, and I will draft the
bare-metal Ethernet driver.


[GEM-EXEC] echo "globalThis.PCI.readWord(64, 0, 0, 0).toString(16) + ':' +
globalThis.PCI.readWord(64, 0, 0, 2).toString(16)" | x-console elli send-stdin

echo "globalThis.PCI.readWord(64, 0, 0, 0).toString(16) + ':' +
globalThis.PCI.readWord(64, 0, 0, 2).toString(16)" | x-console elli send-stdin

[ELLI-X86] > globalThis.PCI.readWord(64, 0, 0, 0).toString(16) + ':' +
globalThis.PCI.readWord(64, 0, 0, 2).toString(16)

[ELLI-X86] globalThis.PCI.readWord(64, 0, 0, 0).toString(16) + ':' +
globalThis.PCI.readWord(64, 0, 0, 2).toString(16)

[ELLI-X86] => 14e4:1677