nostr:npub1srhg4hk63ew68kepu0znazgf9tdl089dkur5artp440htxqrc8zsqz8g90 output is a lot easier than input tbh. A long time ago I was curious about how bare metal stuff worked on x86 and hacked together a thing that was able to print to the screen well enough using the legacy text memory area, but never could get input interrupts to work. I couldn't figure out what was going wrong because the whole VM always crashed when I tried to enable the interrupts and eventually I just have up. Interrupts are so horrible to configure on x86 its ridiculous.
Discussion
nostr:npub1v96a5ce23jgc0fpk3uxg44nm3fhgsnck63tf2ja98vwkq6tvgpus2v8jt9 I use teletype output, int 10/ah=0x0e, it prints one character at the time. I only tested it on real hardware though, I imagine most virtual machines are not meant to run real-mode code at all.
Now I'm figuring out how to transfer control from the MBR to a partition boot sector. On the arch linux iso, 'LBA start' is 0x40, but stuff at that offset (0x20000) doesn't look like valid machine code to me