#pragma once #include "stdarg.h" #include "stdint.h" // https://wiki.osdev.org/Text_UI #define BLACK 0x00 #define BLUE 0x01 #define GREEN 0x02 #define CYAN 0x03 #define RED 0x04 #define MAGENTA 0x05 #define BROWN 0x06 #define GREY 0x07 #define WHITE 0x0F #define VGA_ADDR 0xB8000 #define VGA_WIDTH 80 #define VGA_HEIGHT 25 #ifndef pr_fmt #define pr_fmt(fmt) fmt #endif void vprintf(const char *format, va_list ap); void printf(const char *format, ...); int VGASetup(uint bgColor, uint color); void clearScreen(uint bgColor); void clearScreenLine(uint bgColor, uint line); void printInt(int integer); void printIntDetails(int integer, uint color, uint bgColor, int startX, int startY); void printCharDetails(char str, uint color, uint bgColor, int startX, int startY); void printStringDetails(const char *str, uint color, uint bgColor, int startX, int startY); void printString(const char *str); void printChar(const char str); void vgaScrollUp(void); void cursorEnable(uint8_t cursor_start, uint8_t cursor_end); void cursorDisable(void); void cursorMove(int x, int y); /* * Dummy printk for disabled debugging statements to use whilst maintaining * gcc's format checking. */ #define no_printf(fmt, ...) \ ({ \ if (0) \ printf(fmt, ##__VA_ARGS__); \ 0; \ }) #ifdef DEBUG #define pr_devel(fmt, ...) \ printf(pr_fmt(fmt), ##__VA_ARGS__) #else #define pr_devel(fmt, ...) \ no_printf(pr_fmt(fmt), ##__VA_ARGS__) #endif