From c68b5b688db76e00126302bbac669a5639949943 Mon Sep 17 00:00:00 2001 From: James Barnett Date: Sun, 26 May 2019 15:32:53 +0100 Subject: Reorganise files --- Makefile | 4 +- kernel/gpu/text_mode/colours.h | 16 ++++ kernel/gpu/text_mode/display.c | 64 +++++++++++++ kernel/gpu/text_mode/display.h | 7 ++ kernel/io/keyboard/keyboard_handler.c | 8 +- kernel/io/vga/colours.h | 16 ---- kernel/io/vga/text_mode_display.c | 64 ------------- kernel/io/vga/text_mode_display.h | 7 -- kernel/kernel.c | 167 +++++++++++++++++----------------- 9 files changed, 177 insertions(+), 176 deletions(-) create mode 100644 kernel/gpu/text_mode/colours.h create mode 100644 kernel/gpu/text_mode/display.c create mode 100644 kernel/gpu/text_mode/display.h delete mode 100644 kernel/io/vga/colours.h delete mode 100644 kernel/io/vga/text_mode_display.c delete mode 100644 kernel/io/vga/text_mode_display.h diff --git a/Makefile b/Makefile index 57d03f1..25e1afd 100644 --- a/Makefile +++ b/Makefile @@ -7,11 +7,11 @@ default: build setup: mkdir -p bin -build: setup kernel/kernel.c kernel/global_descriptor_table.c kernel/io/vga/text_mode_display.c kernel/io/keyboard/keyboard_handler.c kernel/kernel-bootstrap.asm +build: setup kernel/kernel.c kernel/global_descriptor_table.c kernel/gpu/text_mode/display.c kernel/io/keyboard/keyboard_handler.c kernel/kernel-bootstrap.asm nasm -f elf32 kernel/kernel-bootstrap.asm -o bin/kernel-bootstrap.o $(CC) $(CFLAGS) -c kernel/kernel.c -o bin/kernel.o $(CC) $(CFLAGS) -c kernel/global_descriptor_table.c -o bin/global_descriptor_table.o - $(CC) $(CFLAGS) -c kernel/io/vga/text_mode_display.c -o bin/text_mode_display.o + $(CC) $(CFLAGS) -c kernel/gpu/text_mode/display.c -o bin/text_mode_display.o $(CC) $(CFLAGS) -c kernel/io/keyboard/keyboard_handler.c -o bin/keyboard_handler.o ld -m elf_i386 -T link.ld -o bin/kernel.bin bin/*.o diff --git a/kernel/gpu/text_mode/colours.h b/kernel/gpu/text_mode/colours.h new file mode 100644 index 0000000..a019fd3 --- /dev/null +++ b/kernel/gpu/text_mode/colours.h @@ -0,0 +1,16 @@ +#define COLOUR_BLACK 0x00 +#define COLOUR_BLUE 0x01 +#define COLOUR_GREEN 0x02 +#define COLOUR_CYAN 0x03 +#define COLOUR_RED 0x04 +#define COLOUR_PURPLE 0x05 +#define COLOUR_BROWN 0x06 +#define COLOUR_GRAY 0x07 +#define COLOUR_DARK_GREY 0x08 +#define COLOUR_LIGHT_BLUE 0x09 +#define COLOUR_LIGHT_GREEN 0x0A +#define COLOUR_LIGHT_CYAN 0x0B +#define COLOUR_LIGHT_RED 0x0C +#define COLOUR_LIGHT_PURPLE 0x0D +#define COLOUR_YELLOW 0x0E +#define COLOUR_WHITE 0x0F \ No newline at end of file diff --git a/kernel/gpu/text_mode/display.c b/kernel/gpu/text_mode/display.c new file mode 100644 index 0000000..3659e60 --- /dev/null +++ b/kernel/gpu/text_mode/display.c @@ -0,0 +1,64 @@ +#include "colours.h" + +#define COLS (80 * 2) // 2 bytes per char +#define ROWS 25 +#define FRAME_SIZE (ROWS * COLS) + +char *video_ram = (char *) 0xB8000; +int cursor_pos = 0; +int char_attribute_byte = 0x07; + +void scrn_clear() +{ + for (int i = 0; i < FRAME_SIZE; i = i + 2) + { + video_ram[i] = ' '; + video_ram[i + 1] = char_attribute_byte; + }; + cursor_pos = 0; +} + +void scrn_print(char *msg) +{ + int j = 0; + while (msg[j] != '\0') + { + video_ram[cursor_pos++] = msg[j]; + video_ram[cursor_pos++] = char_attribute_byte; + ++j; + } +} + +void scrn_println(char *msg) +{ + scrn_print(msg); + int current_line = cursor_pos / COLS; + cursor_pos = (current_line + 1) * COLS; +} + +void scrn_set_text_colour(int foreground, int background) +{ + char_attribute_byte = (background << 4) | foreground; +} + +void scrn_putchar(unsigned char byte) +{ + video_ram[cursor_pos++] = byte; + video_ram[cursor_pos++] = char_attribute_byte; +} + +// TODO - jump cursor to prev non 0 text char rather than reversing through whole array +void scrn_backspace() +{ + if (cursor_pos != 0) + { + video_ram[--cursor_pos] = char_attribute_byte; + video_ram[--cursor_pos] = 0; + } +} + +void scrn_newline() +{ + int current_line = cursor_pos / COLS; + cursor_pos = (current_line + 1) * COLS; +} \ No newline at end of file diff --git a/kernel/gpu/text_mode/display.h b/kernel/gpu/text_mode/display.h new file mode 100644 index 0000000..f4f3724 --- /dev/null +++ b/kernel/gpu/text_mode/display.h @@ -0,0 +1,7 @@ +void scrn_clear(); +void scrn_print(char *msg); +void scrn_println(char *msg); +void scrn_set_text_colour(int foreground, int background); +void scrn_putchar(unsigned char byte); +void scrn_backspace(); +void scrn_newline(); \ No newline at end of file diff --git a/kernel/io/keyboard/keyboard_handler.c b/kernel/io/keyboard/keyboard_handler.c index 2578ebf..26b4586 100644 --- a/kernel/io/keyboard/keyboard_handler.c +++ b/kernel/io/keyboard/keyboard_handler.c @@ -1,5 +1,5 @@ #include "../../interrupt_descriptor_table.h" -#include "../vga/text_mode_display.h" +#include "../../gpu/text_mode/display.h" #include "scancode_map.h" extern void keyboard_handler(void); @@ -70,13 +70,13 @@ void handle_keypress() { switch(pressed_key) { case '\b': - vga_backspace(); + scrn_backspace(); break; case '\n': - vga_newline(); + scrn_newline(); break; default: - vga_print_raw(pressed_key); + scrn_putchar(pressed_key); } } diff --git a/kernel/io/vga/colours.h b/kernel/io/vga/colours.h deleted file mode 100644 index a019fd3..0000000 --- a/kernel/io/vga/colours.h +++ /dev/null @@ -1,16 +0,0 @@ -#define COLOUR_BLACK 0x00 -#define COLOUR_BLUE 0x01 -#define COLOUR_GREEN 0x02 -#define COLOUR_CYAN 0x03 -#define COLOUR_RED 0x04 -#define COLOUR_PURPLE 0x05 -#define COLOUR_BROWN 0x06 -#define COLOUR_GRAY 0x07 -#define COLOUR_DARK_GREY 0x08 -#define COLOUR_LIGHT_BLUE 0x09 -#define COLOUR_LIGHT_GREEN 0x0A -#define COLOUR_LIGHT_CYAN 0x0B -#define COLOUR_LIGHT_RED 0x0C -#define COLOUR_LIGHT_PURPLE 0x0D -#define COLOUR_YELLOW 0x0E -#define COLOUR_WHITE 0x0F \ No newline at end of file diff --git a/kernel/io/vga/text_mode_display.c b/kernel/io/vga/text_mode_display.c deleted file mode 100644 index db0e028..0000000 --- a/kernel/io/vga/text_mode_display.c +++ /dev/null @@ -1,64 +0,0 @@ -#include "colours.h" - -#define COLS (80 * 2) // 2 bytes per char -#define ROWS 25 -#define FRAME_SIZE (ROWS * COLS) - -char *video_ram = (char *) 0xB8000; -int cursor_pos = 0; -int char_attribute_byte = 0x07; - -void vga_clear_screen() -{ - for (int i = 0; i < FRAME_SIZE; i = i + 2) - { - video_ram[i] = ' '; - video_ram[i + 1] = char_attribute_byte; - }; - cursor_pos = 0; -} - -void vga_print(char *msg) -{ - int j = 0; - while (msg[j] != '\0') - { - video_ram[cursor_pos++] = msg[j]; - video_ram[cursor_pos++] = char_attribute_byte; - ++j; - } -} - -void vga_print_ln(char *msg) -{ - vga_print(msg); - int current_line = cursor_pos / COLS; - cursor_pos = (current_line + 1) * COLS; -} - -void vga_set_text_colour(int foreground, int background) -{ - char_attribute_byte = (background << 4) | foreground; -} - -void vga_print_raw(unsigned char byte) -{ - video_ram[cursor_pos++] = byte; - video_ram[cursor_pos++] = char_attribute_byte; -} - -// TODO - jump cursor to prev non 0 text char rather than reversing through whole array -void vga_backspace() -{ - if (cursor_pos != 0) - { - video_ram[--cursor_pos] = char_attribute_byte; - video_ram[--cursor_pos] = 0; - } -} - -void vga_newline() -{ - int current_line = cursor_pos / COLS; - cursor_pos = (current_line + 1) * COLS; -} \ No newline at end of file diff --git a/kernel/io/vga/text_mode_display.h b/kernel/io/vga/text_mode_display.h deleted file mode 100644 index 6c46185..0000000 --- a/kernel/io/vga/text_mode_display.h +++ /dev/null @@ -1,7 +0,0 @@ -void vga_clear_screen(); -void vga_print(char *msg); -void vga_print_ln(char *msg); -void vga_set_text_colour(int foreground, int background); -void vga_print_raw(unsigned char byte); -void vga_backspace(); -void vga_newline(); \ No newline at end of file diff --git a/kernel/kernel.c b/kernel/kernel.c index fbef9d4..80f110d 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -1,96 +1,97 @@ -#include "./io/vga/text_mode_display.h" -#include "./io/vga/colours.h" +#include "./gpu/text_mode/display.h" +#include "./gpu/text_mode/colours.h" #include "./io/keyboard/keyboard_handler.h" #include "global_descriptor_table.h" void run_kern_demo() { - vga_set_text_colour(COLOUR_LIGHT_GREEN, COLOUR_BLACK); - vga_clear_screen(); + scrn_set_text_colour(COLOUR_LIGHT_GREEN, COLOUR_BLACK); + scrn_clear(); - vga_print_ln(" _ _ ____ _____ "); - vga_print_ln(" | | (_) / __ \\ / ____|"); - vga_print_ln(" | |_ _ _ __ _ _| | | | (___ "); - vga_print_ln(" | __| | '_ \\| | | | | | |\\___ \\ "); - vga_print_ln(" | |_| | | | | |_| | |__| |____) |"); - vga_print_ln(" \\__|_|_| |_|\\__, |\\____/|_____/ "); - vga_print_ln(" __/ | "); - vga_print_ln(" |___/ "); + scrn_println(" _ _ ____ _____ "); + scrn_println(" | | (_) / __ \\ / ____|"); + scrn_println(" | |_ _ _ __ _ _| | | | (___ "); + scrn_println(" | __| | '_ \\| | | | | | |\\___ \\ "); + scrn_println(" | |_| | | | | |_| | |__| |____) |"); + scrn_println(" \\__|_|_| |_|\\__, |\\____/|_____/ "); + scrn_println(" __/ | "); + scrn_println(" |___/ "); - vga_print_ln(""); - vga_print_ln("Supported colours"); - vga_set_text_colour(COLOUR_BLUE, COLOUR_BLACK); - vga_print("blue "); - vga_set_text_colour(COLOUR_GREEN, COLOUR_BLACK); - vga_print("green "); - vga_set_text_colour(COLOUR_CYAN, COLOUR_BLACK); - vga_print("cyan "); - vga_set_text_colour(COLOUR_RED, COLOUR_BLACK); - vga_print("red "); - vga_set_text_colour(COLOUR_PURPLE, COLOUR_BLACK); - vga_print("purple "); - vga_set_text_colour(COLOUR_BROWN, COLOUR_BLACK); - vga_print("brown "); - vga_set_text_colour(COLOUR_GRAY, COLOUR_BLACK); - vga_print_ln("gray "); - vga_set_text_colour(COLOUR_DARK_GREY, COLOUR_BLACK); - vga_print("dark gray "); - vga_set_text_colour(COLOUR_LIGHT_BLUE, COLOUR_BLACK); - vga_print("light blue "); - vga_set_text_colour(COLOUR_LIGHT_GREEN, COLOUR_BLACK); - vga_print("light green "); - vga_set_text_colour(COLOUR_LIGHT_CYAN, COLOUR_BLACK); - vga_print_ln("light cyan"); - vga_set_text_colour(COLOUR_LIGHT_RED, COLOUR_BLACK); - vga_print("light red "); - vga_set_text_colour(COLOUR_LIGHT_PURPLE, COLOUR_BLACK); - vga_print("light purple "); - vga_set_text_colour(COLOUR_YELLOW, COLOUR_BLACK); - vga_print("yellow "); - vga_set_text_colour(COLOUR_WHITE, COLOUR_BLACK); - vga_print_ln("white "); + scrn_println(""); + scrn_println("Supported colours"); + scrn_set_text_colour(COLOUR_BLUE, COLOUR_BLACK); + scrn_print("blue "); + scrn_set_text_colour(COLOUR_GREEN, COLOUR_BLACK); + scrn_print("green "); + scrn_set_text_colour(COLOUR_CYAN, COLOUR_BLACK); + scrn_print("cyan "); + scrn_set_text_colour(COLOUR_RED, COLOUR_BLACK); + scrn_print("red "); + scrn_set_text_colour(COLOUR_PURPLE, COLOUR_BLACK); + scrn_print("purple "); + scrn_set_text_colour(COLOUR_BROWN, COLOUR_BLACK); + scrn_print("brown "); + scrn_set_text_colour(COLOUR_GRAY, COLOUR_BLACK); + scrn_println("gray "); + scrn_set_text_colour(COLOUR_DARK_GREY, COLOUR_BLACK); + scrn_print("dark gray "); + scrn_set_text_colour(COLOUR_LIGHT_BLUE, COLOUR_BLACK); + scrn_print("light blue "); + scrn_set_text_colour(COLOUR_LIGHT_GREEN, COLOUR_BLACK); + scrn_print("light green "); + scrn_set_text_colour(COLOUR_LIGHT_CYAN, COLOUR_BLACK); + scrn_println("light cyan"); + scrn_set_text_colour(COLOUR_LIGHT_RED, COLOUR_BLACK); + scrn_print("light red "); + scrn_set_text_colour(COLOUR_LIGHT_PURPLE, COLOUR_BLACK); + scrn_print("light purple "); + scrn_set_text_colour(COLOUR_YELLOW, COLOUR_BLACK); + scrn_print("yellow "); + scrn_set_text_colour(COLOUR_WHITE, COLOUR_BLACK); + scrn_println("white "); - vga_set_text_colour(COLOUR_BLACK, COLOUR_WHITE); - vga_print("B"); - vga_set_text_colour(COLOUR_WHITE, COLOUR_BLUE); - vga_print("A"); - vga_set_text_colour(COLOUR_WHITE, COLOUR_GREEN); - vga_print("C"); - vga_set_text_colour(COLOUR_WHITE, COLOUR_CYAN); - vga_print("K"); - vga_set_text_colour(COLOUR_WHITE, COLOUR_RED); - vga_print("G"); - vga_set_text_colour(COLOUR_WHITE, COLOUR_PURPLE); - vga_print("R"); - vga_set_text_colour(COLOUR_WHITE, COLOUR_BROWN); - vga_print("O"); - vga_set_text_colour(COLOUR_WHITE, COLOUR_GRAY); - vga_print("U"); - vga_set_text_colour(COLOUR_WHITE, COLOUR_LIGHT_BLUE); - vga_print("N"); - vga_set_text_colour(COLOUR_BLACK, COLOUR_YELLOW); - vga_print("D"); - vga_set_text_colour(COLOUR_BLACK, COLOUR_LIGHT_GREEN); - vga_print(" "); + scrn_set_text_colour(COLOUR_BLACK, COLOUR_WHITE); + scrn_print("B"); + scrn_set_text_colour(COLOUR_WHITE, COLOUR_BLUE); + scrn_print("A"); + scrn_set_text_colour(COLOUR_WHITE, COLOUR_GREEN); + scrn_print("C"); + scrn_set_text_colour(COLOUR_WHITE, COLOUR_CYAN); + scrn_print("K"); + scrn_set_text_colour(COLOUR_WHITE, COLOUR_RED); + scrn_print("G"); + scrn_set_text_colour(COLOUR_WHITE, COLOUR_PURPLE); + scrn_print("R"); + scrn_set_text_colour(COLOUR_WHITE, COLOUR_BROWN); + scrn_print("O"); + scrn_set_text_colour(COLOUR_WHITE, COLOUR_GRAY); + scrn_print("U"); + scrn_set_text_colour(COLOUR_WHITE, COLOUR_LIGHT_BLUE); + scrn_print("N"); + scrn_set_text_colour(COLOUR_BLACK, COLOUR_YELLOW); + scrn_print("D"); + scrn_set_text_colour(COLOUR_BLACK, COLOUR_LIGHT_GREEN); + scrn_print(" "); - vga_set_text_colour(COLOUR_BLACK, COLOUR_LIGHT_CYAN); - vga_print("C"); - vga_set_text_colour(COLOUR_WHITE, COLOUR_LIGHT_RED); - vga_print("O"); - vga_set_text_colour(COLOUR_WHITE, COLOUR_LIGHT_PURPLE); - vga_print("L"); - vga_set_text_colour(COLOUR_BLACK, COLOUR_WHITE); - vga_print("O"); - vga_set_text_colour(COLOUR_WHITE, COLOUR_RED); - vga_print("U"); - vga_set_text_colour(COLOUR_WHITE, COLOUR_PURPLE); - vga_print("R"); - vga_set_text_colour(COLOUR_WHITE, COLOUR_BROWN); - vga_print("S"); - vga_set_text_colour(COLOUR_WHITE, COLOUR_GRAY); - vga_print("!"); + scrn_set_text_colour(COLOUR_BLACK, COLOUR_LIGHT_CYAN); + scrn_print("C"); + scrn_set_text_colour(COLOUR_WHITE, COLOUR_LIGHT_RED); + scrn_print("O"); + scrn_set_text_colour(COLOUR_WHITE, COLOUR_LIGHT_PURPLE); + scrn_print("L"); + scrn_set_text_colour(COLOUR_BLACK, COLOUR_WHITE); + scrn_print("O"); + scrn_set_text_colour(COLOUR_WHITE, COLOUR_RED); + scrn_print("U"); + scrn_set_text_colour(COLOUR_WHITE, COLOUR_PURPLE); + scrn_print("R"); + scrn_set_text_colour(COLOUR_WHITE, COLOUR_BROWN); + scrn_print("S"); + scrn_set_text_colour(COLOUR_WHITE, COLOUR_GRAY); + scrn_print("!"); - vga_set_text_colour(COLOUR_WHITE, COLOUR_BLACK); + scrn_set_text_colour(COLOUR_WHITE, COLOUR_BLACK); + scrn_newline(); } -- cgit v1.2.3