The VMM doesn't consider the start of the region it's managing when returning an allocation result so the first allocation will always return zero, rather than vmm.start + 0. In addition the start of the kernel's VMM should be changed to the second block so that it doesn't allocate at address 0, which Zig considers to be null pointers.