I finally got QEMU+TianoCore to load my OS (unusually I was using real hardware to test before I got the emulator set up!) I'm currently working on a NUMA physical memory manager, so I tested my SRAT capabilities (thankyou ACPICA!)

- QEMU with 2 NUMA nodes
The architecture of my OS is UEFI->osloader->Kernel, so BIOS should be easier to support than I initially thought. The osloader does need to load PE files, so I went and put a DLL linker in it. The result is a dynamically linked kernel C library, ACPICA, and there'll be a Hal. Should make driver development simpler.

- Lots of DLLs
To be precise, the OS loader sets up paging (well, reuses the UEFI mappings for now), which means a very simple physical memory manager. This involves pulling the first entries of the UEFI memory map and creating a free stack. I create a used stack when allocations are performed, rather than updating the memory map. This gives the kernel access to a page allocation system very early on, which is nice. The kernel can use this to initialise the hefty physical memory manager. Likewise, a recursive mapping is set up, and the slot is passed to the kernel.
Other than that, there's memory map information, framebuffer information (the loader sets mode from configuration or a prompt), and a puts() function.