I haven't seen many tutorials other than our one at
UEFI_Bare_Bones, unfortunately (there are hundreds of tutorials for the old system) -- though admittedly I haven't really been looking
I really think the UEFI Bare Bones article needs to be rewritten (both simplified for new users and extended to cover more material) and made the first starter page on the wiki -- the first place all new OSdevers begin (it should be the first and only place to direct all new members) -- and while doing that, mark all the old tutorials and information as deprecated, hidden from casual browsers and newcomers
you really have 3 choices:
1) limit yourself to emulators and very old computers and continue using the information you already have
in this case, what you have is a good start, you just continue building on that, it will work on most emulators and all very old computers
2) use GRUB as you are doing now, but don't rely on any of the older technologies
if you want to keep what you have now, all you really need to do is tell GRUB to give you a graphics mode (its an option in the multiboot header), then your code should load on real hardware, however it won't print anything on the screen (either on real hardware or on QEMU either, since you will be using the same graphics mode on both)
to print to the screen you will need to create a font and paint it to the screen -- rendering a simple bitmap font is not hard, but it is beyond the scope of this post
your keyboard code may or may not work (it will probably work in QEMU, unless you change how QEMU is configured) if it does work then that is great (because USB is not an easy beginner project)
3) use the new system (which means changing how you do things)
this would require starting over, getting some new tools, and learning to interact with the firmware, however it does have advantages, since UEFI will provide functions for almost everything you might want in the early stages (including printing to the screen, keyboard input, graphics mode setup, file loading, etc)
however this won't work on really old computers and emulators might need to be customized to run it
after completing what the tutorial covers (which isn't much), some additional steps to consider:
-print any diagnostics messages using the firmware print functions
-setup a graphics mode (select a graphics mode for your OS to use, and obtain all the information about it)
-load any additional files you might want to load with the firmware's assistance
-obtain the memory map and call exit boot services (these must be done at the same time)
-print to the screen in graphics mode (this will require rendering a simple font to the screen)
-properly correct the memory map (remove duplicate entries, resolve conflicting entries, reorder entries, combine entries, align entries, etc.)
-initialize paging/physical memory manager/virtual memory manager/kernel memory manager