#include #include char* print_screen = (char*)0x0400; char* print_line_cursor = print_screen; char* print_char_cursor = print_line_cursor; // Print a number of zero-terminated strings, each followed by a newline. // The sequence of lines is terminated by another zero. void print_str_lines(char* str) { while(*str) { do { char ch = *(str++); if(ch) print_char(ch); } while (ch); print_ln(); } } // Print a zero-terminated string followed by a newline void print_str_ln(char* str) { print_str(str); print_ln(); } // Print a zero-terminated string void print_str(char* str) { while(*str) { print_char(*(str++)); } } // Print a string at a specific screen position void print_str_at(char* str, char* at) { while(*str) { *(at++) = *(str++); } } // Print a newline void print_ln() { do { print_line_cursor = print_line_cursor + 0x28; } while (print_line_cursor>4]); print_char(print_hextab[b&0xf]); } // Prints a char as HEX at a specific position on the screen // row and col are 0-based indices inline void print_uchar_pos(char b, char row, char col) { print_uchar_at(b, print_screen+row*40+col); } // Print a char as HEX at a specific position void print_uchar_at(char b, char* at) { // Table of hexadecimal digits print_char_at(print_hextab[b>>4], at); print_char_at(print_hextab[b&0xf], at+1); } // Print a single char void print_char(char ch) { *(print_char_cursor++) = ch; } // Print a single char void print_char_at(char ch, char* at) { *(at) = ch; } // Clear the screen. Also resets current line/char cursor. void print_cls() { memset(print_screen, ' ', 1000); print_line_cursor = print_screen; print_char_cursor = print_line_cursor; } // Set the screen to print on. Also resets current line/char cursor. void print_set_screen(char* screen) { print_screen = screen; print_line_cursor = print_screen; print_char_cursor = print_line_cursor; }