#pragma once static int _debug = 0; unsigned short * textmemptr = (unsigned short *)0xB8000; static void placech(unsigned char c, int x, int y, int attr) { unsigned short *where; unsigned att = attr << 8; where = textmemptr + (y * 80 + x); *where = c | att; } static int x = 0; static int y = 0; static int attr = 0x07; static void print_(char * str) { while (*str) { if (*str == '\n') { for (; x < 80; ++x) { placech(' ', x, y, attr); } x = 0; y += 1; if (y == 24) { y = 0; } } else { placech(*str, x, y, attr); x++; if (x == 80) { x = 0; y += 1; if (y == 24) { y = 0; } } } str++; } } static void print_banner(char * str) { int len = 0; char *c = str; while (*c) { len++; c++; } int off = (80 - len) / 2; for (int i = 0; i < 80; ++i) { placech(' ', i, y, attr); } for (int i = 0; i < len; ++i) { placech(str[i], i + off, y, attr); } y++; } static void print_hex_(unsigned int value) { char out[9] = {0}; for (int i = 7; i > -1; i--) { out[i] = "0123456789abcdef"[(value >> (4 * (7 - i))) & 0xF]; } print_(out); } static void clear_() { x = 0; y = 0; for (int y = 0; y < 24; ++y) { for (int x = 0; x < 80; ++x) { placech(' ', x, y, 0x00); } } } #define print(s) do {if (_debug) {print_(s);}} while(0) #define clear() do {if (_debug) {clear_();}} while(0) #define print_hex(d) do {if (_debug) {print_hex_(d);}} while(0)