c - Writing to 0xb8000000 yields output on screen without any print statements such as `printf` -
#include <stdio.h> #include <conio.h> void main() { char far *v = (char far*)0xb8000000; clrscr(); *v = 'w'; v += 2; *v = 'e'; getch(); } output is: we
i don't how output getting printed without printf or other print statements.
this x86 real-mode ibm pc program assumes cga/ega/vga compatible graphics adapter in color text mode mapped @ default memory location (b800:0000); era of ms-dos (1980s/1990s). in case it's old school!
char far *v=(char far*)0xb8000000; memory address (in real mode) of video buffer (use 0xb0000000 if have old hercules)
clrscr(); clears screen
*v='w'; writes @ row 0, column 0 character w
v+=2; skips 2 bytes (in character mode buffer interleaved: 1 byte character , 1 byte color. 1 bit flashing, 3 bits background 0-7 , 4 bits foreground 0-15, packed in way: foreground + 16 * background + 128 if want flashing)
*v='e'; writes @ row 0, column 1 character e
getch(); waits key
now link cga text mode format, feel need of knowing how "old generation" did it, before "windows" came (and before "linux" came :-) ). ah... , link (a wiki time) still don't know real-mode is.
Comments
Post a Comment