The way I understand it, the following code is based one of the assumptions you can't make without x86 BIOS, can you?
/* video memory begins at address 0xb8000 */
char *vidptr = (char*)0xb8000;The way I understand it, the following code is based one of the assumptions you can't make without x86 BIOS, can you?
/* video memory begins at address 0xb8000 */
char *vidptr = (char*)0xb8000;I quote-unquote frame buffer because it's text mode, one byte for the ASCII code (extended to 256 characters in configurable and often confusing and incompatible ways, MS had "codepages" and ISO has the equivalent Latin-1 through Latin-14 or so), and one byte for the attribute.
Many modern cards used to keep the basic VGA compatibility upon boot, until you switch them into more sophisticated modes. I'm not sure if they still do these days. QEMU, which is the actual target for the minimal demo kernel above, pretty sure supports it.
BIOS used INT 10h for video operations, from mode setting to printing characters, code that calls INT 10h is actually relying on BIOS. IIRC next to nobody used it except for mode setting, you could much more easily and flexibly write the right bytes yourself (with a little bit more work for compatibility). Plus you could use DOS INT 21h to actually print output strings with a bit more of a concept of a terminal.