It turns out that the problem is before the print statements I inserted. For some reason, your domain's IO resource is only giving you 0x7ff of IO space. That's not enough. I can't see anywhere in the code where that would be coming from, so I'm assuming memory corruption. At this point the limit should still be 0000ffff.
Could you try increasing the stack and heap sizes? If that doesn't work we'll have to find where the limit is getting changed, since it's correct the first time that the resources are printed.
PNP: 002e.b resource base 290 size 8 align 3 gran 3 limit fff flags c0000100 index 60 PNP: 002e.b resource base 5 size 1 align 0 gran 0 limit 0 flags c0000400 index 70
PNP: 002e.3 links 0 child on link 0 NULL PNP: 002e.3 resource base 0 size 8 align 3 gran 3 limit 7ff flags 100 index 60 PNP: 002e.3 resource base 0 size 1 align 0 gran 0 limit 0 flags 400 index 70 ... PCI: 00:06.2 20 * [0x1cf0 - 0x1cff] io PNP: 002e.3 60 * [0x2000 - 0x2007] io
Never mind about the memory corruption. PNP: 002e.3 has some resources that aren't "fixed", so the allocator is trying to allocate them. In the SuperIO code where those resources are declared, set the flags to match the other resources.
Thanks, Myles