From 96ed9e6785ef932ef6824fc404b7c01eac64d3b6 Mon Sep 17 00:00:00 2001 From: Jenny Curle Date: Mon, 1 Apr 2019 12:46:40 +0100 Subject: [PATCH] Update system to minimum working status --- arch/i386/tty.c | 17 +++++++++++++++-- include/arch/i386/vga.h | 34 ++++++++++++++++++++++++++++++++++ include/kernel/tty.h | 1 + kernel/kernel.c | 8 ++++---- kernel/syscalls.c | 5 +++-- makefile | 20 ++++++++++---------- 6 files changed, 67 insertions(+), 18 deletions(-) create mode 100755 include/arch/i386/vga.h diff --git a/arch/i386/tty.c b/arch/i386/tty.c index a1b5663..a1c9651 100755 --- a/arch/i386/tty.c +++ b/arch/i386/tty.c @@ -42,7 +42,16 @@ void term_putentryat (char c, uint8_t color, size_t x, size_t y) { void term_putchar(char c) { unsigned char uc = c; - term_putentryat(uc, current_color, terminal_column, terminal_row); + + switch (uc) { + case '\n': + terminal_column = 0; + terminal_row += 1; + break; + default: + term_putentryat(uc, current_color, terminal_column, terminal_row); + break; + } if(++terminal_column == TERM_WIDTH) { @@ -59,6 +68,10 @@ void term_write(const char* data, size_t size) { term_putchar(data[i]); } +void term_writes(const char* data) { + term_write(data, strlen(data)); +} + void puts(const char* string) { term_write(string, strlen(string)); term_putchar('\n'); @@ -68,7 +81,7 @@ void term_scroll() { int current_pos = 160; //Start of the second line. unsigned char* term_buffer = (unsigned char*) vga_buffer; - + while (current_pos <= 4000) { term_buffer[current_pos - 160 /*The character immediately below it*/] = vga_buffer[current_pos]; //Move each character up a line term_buffer[current_pos - 159 /*The color of the character below*/] = vga_buffer[current_pos + 1]; //As well as its color diff --git a/include/arch/i386/vga.h b/include/arch/i386/vga.h new file mode 100755 index 0000000..8dcf15a --- /dev/null +++ b/include/arch/i386/vga.h @@ -0,0 +1,34 @@ +#ifndef ARCH_I386_VGA_H +#define ARCH_I386_VGA_H + +#include + + +enum vga_colors { + BLACK = 0, + BLUE = 1, + GREEN = 2, + CYAN = 3, + RED = 4, + MAGENTA = 5, + BROWN = 6, + LIGHT_GREY = 7, + DARK_GREY = 8, + LIGHT_BLUE = 9, + LIGHT_GREEN = 10, + LIGHT_CYAN = 11, + LIGHT_RED = 12, + LIGHT_MAGENTA = 13, + LIGHT_BROWN = 14, + WHITE = 15 +}; + +static inline uint8_t vga_color_set(enum vga_colors fg, enum vga_colors bg) { + return fg | bg << 4; +} + +static inline uint16_t vga_entry(unsigned char uc, uint8_t color) { + return (uint16_t) uc | (uint16_t) color << 8; +} + +#endif \ No newline at end of file diff --git a/include/kernel/tty.h b/include/kernel/tty.h index 19881bb..25f63cf 100755 --- a/include/kernel/tty.h +++ b/include/kernel/tty.h @@ -9,6 +9,7 @@ void screen_initialize(void); void term_putentryat(char, uint8_t, size_t, size_t); void term_putchar(char); void term_write(const char*, size_t); +void term_writes(const char*); void puts(const char*); void set_cursor(int, int); void term_scroll(void); diff --git a/kernel/kernel.c b/kernel/kernel.c index 45470f0..893c8b3 100755 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -7,13 +7,13 @@ int kernel_main(void) { screen_initialize(); //Print a copyright message. - puts("(c)"); + term_writes("(c)"); term_setcolor(GREEN); - puts(" Project"); + term_writes(" Project"); term_setcolor(RED); - puts("RED"); + term_writes("RED"); term_setcolor(WHITE); - puts(", 2019\n"); + term_writes(", 2019\n"); for(;;) {} return 0; diff --git a/kernel/syscalls.c b/kernel/syscalls.c index 5f013a9..cfa788c 100755 --- a/kernel/syscalls.c +++ b/kernel/syscalls.c @@ -1,4 +1,4 @@ -#include +/*#include #include #include #include @@ -44,4 +44,5 @@ int unlink(char* name); int wait(int file, char* ptr, int len); -int gettimeofday(struct timeval* p, struct timezone* z); \ No newline at end of file +int gettimeofday(struct timeval* p, struct timezone* z); +*/ \ No newline at end of file diff --git a/makefile b/makefile index 4a3149a..cd00da8 100755 --- a/makefile +++ b/makefile @@ -80,16 +80,16 @@ install-kernel: red.kernel cp red.kernel $(DESTDIR)$(BOOTDIR) gen-iso: - rm -f red.iso \ - cp red.kernel iso/boot/kernel.elf \ - genisoimage -R\ - -b boot/grub/stage2_eltorito\ - -no-emul-boot\ - -A ProjectRED\ - -input-charset utf8\ - -quiet - -boot-info-table\ - -o red.iso\ + rm -f red.iso + cp red.kernel iso/boot/kernel.elf + genisoimage -R \ + -b boot/grub/stage2_eltorito \ + -no-emul-boot \ + -A ProjectRED \ + -input-charset utf8 \ + -quiet \ + -boot-info-table \ + -o red.iso \ iso -include $(OBJS:.o=.d)