Well done, but quite frankly I'd focus on I/O being serial to start with because of the many different types of video configuration.
Thanks! Have no worries, the UART (no matter if it's 16550, PL011 or FTDI chip) is also initialized and configured for 115200 baud, 8 data bits, no parity and 1 stop bit on all platforms and ready to be used by the kernel. All you need is an RS-232 cable and minicom / PuTTY running on the other side. The loader also takes care of the many different video configurations (and firmware, like VESA, GOP, VC MailBox etc.), so your kernel gets a consistent, 32 bits packed pixel linear frame buffer no matter the platform.
When I did this sort of thing it was bare-metal '386 in protected mode, and I ended up writing some of the tools as well.
MarkMLl
Yeah, I've given up protmode long long time ago. This is for 64 bits only (x86_64 and AArch64), and one of my goals was to use vanilla compilers and toolchains without patches and third party tools as much as possible. For the kernels I've used just the native language to be multiplatform, without Assembly hacks.The only tool I provide is the bootable disk image creator (which is a dependency-free all-in-one portable command line tool).
Cheers,
bzt