From 71e80f73bb7a12b77ab4b82dab14dc233b1924ca Mon Sep 17 00:00:00 2001 From: Tom-on64 Date: Sat, 9 Mar 2024 19:33:28 +0100 Subject: [PATCH] Made screen.h actually good --- src/kernel/main.c | 5 +++- src/kernel/main_c.swp | Bin 12288 -> 0 bytes src/kernel/screen.c | 53 ++++++++++++++++++++++++++++++++++++---- src/kernel/screen.h | 29 +++++++++++++++++++--- src/kernel/screen_c.swp | Bin 12288 -> 0 bytes src/kernel/screen_h.swp | Bin 12288 -> 0 bytes 6 files changed, 78 insertions(+), 9 deletions(-) delete mode 100644 src/kernel/main_c.swp delete mode 100644 src/kernel/screen_c.swp delete mode 100644 src/kernel/screen_h.swp diff --git a/src/kernel/main.c b/src/kernel/main.c index 4088bfe..9569bab 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -3,6 +3,9 @@ void main() { setupIdt(); - print("kern.\n", 0x0f); + clear(0x0f); + + print("kern.\n\n", 0x0f); + print("> ", 0x0e); } diff --git a/src/kernel/main_c.swp b/src/kernel/main_c.swp deleted file mode 100644 index 745ad5a631893f2d9bc40c57d27158186c2c8f00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI&PfElv6bA4&g5X9Jy+G`^=zug;7b5P3S-8_#x#^$i1lzQP(djCYE%K;#<9}2; zFUX1{%I40Lqatf^Rm<}ud9CfZiRF!|jI67qy-=CVBW;3Y?kczm0SGK6uug{u`|YdV z_jbhg*2QAW;3)_|00Izz00bZa0SG`~DFtlVqX*vkO1Jy9uI>G5yDl0CKmY;|fB*y_ z009U<00Izz00fp$AWDhU2GKLe{r{hR|9^4+gY(XL<4ifPoEMIp`@}&(00Izz00bZa z0SG_<0uX=z1R(Gq0{0}i%1RsSd+w}!aA~|f5#EJYgOm1Nt!z^cQ|oj8w$Q0?C+Piw am=N`~NwOwY!qce@#@>&CI;oU0ZtNROY(wq< diff --git a/src/kernel/screen.c b/src/kernel/screen.c index 08d72c6..526a217 100644 --- a/src/kernel/screen.c +++ b/src/kernel/screen.c @@ -1,8 +1,15 @@ #include "screen.h" +#include "stdint.h" -unsigned int cursor = 0; +uint16_t cursor = 0; -void putc(char c, char attr) { +void putc(char c, uint8_t attr) { + if (c == '\n') { + uint16_t line = cursor - (cursor % COLS); + setCursorPos(line + COLS); + return; + } + int mem = VIDMEM + cursor * 2; *(char*)(mem) = c; *(char*)(mem+1) = attr; @@ -10,12 +17,48 @@ void putc(char c, char attr) { cursor++; } -void print(char* s, char attr) { - int i = 0; +void print(char* s, uint8_t attr) { char c = *s; while (c != '\0') { putc(c, attr); - c = *(s + ++i); + c = *(++s); } } +void putcAt(char c, uint8_t attr, uint8_t col, uint8_t row) { + uint16_t offset = calcOffset(col, row); + *(char*)(VIDMEM + offset * 2) = c; + *(char*)(VIDMEM + offset * 2 + 1) = attr; +} + +void printAt(char* s, uint8_t attr, uint8_t col, uint8_t row) { + uint16_t offset = calcOffset(col, row); + + char c = *s; + while (c != '\0') { + *(char*)(VIDMEM + offset * 2) = c; + *(char*)(VIDMEM + offset * 2 + 1) = attr; + c = *(++s); + offset++; + } +} + +void clear(uint8_t attr) { + for (int i = 0; i < CHARS*2; i += 2) { + *(char*)(VIDMEM + i) = ' '; + *(char*)(VIDMEM + i + 1) = attr; + } +} + +void setCursorPos(uint16_t offset) { + cursor = offset; +} + +uint16_t getCursorPos() { + return cursor; +} + +uint16_t calcOffset(uint8_t col, uint8_t row) { + return row * COLS + col; +} + diff --git a/src/kernel/screen.h b/src/kernel/screen.h index 04ba67d..ff19157 100644 --- a/src/kernel/screen.h +++ b/src/kernel/screen.h @@ -1,9 +1,32 @@ #ifndef SCREEN_H #define SCREEN_H -#define VIDMEM 0xb8000 +#include "stdint.h" -void putc(char c, char attr); -void print(char* s, char attr); +#define VIDMEM 0xb8000 +#define CURSOR_HIGH 14 +#define CURSOR_LOW 15 +#define CTRLREG 0x3d4 +#define DATAREG 0x3d5 + +// 80x25 VGA Text mode +#define ROWS 25 +#define COLS 80 +#define CHARS (ROWS*COLS) + +#define CURSOR '_' + +void putc(char c, uint8_t attr); +void print(char* s, uint8_t attr); +void putcAt(char c, uint8_t attr, uint8_t row, uint8_t col); +void printAt(char* s, uint8_t attr, uint8_t row, uint8_t col); +void clear(uint8_t attr); + +void setCursorPos(uint16_t offset); +uint16_t getCursorPos(); +uint16_t calcOffset(uint8_t row, uint8_t col); + +void setCursorChar(char cursor); +char getCursorChar(); #endif diff --git a/src/kernel/screen_c.swp b/src/kernel/screen_c.swp deleted file mode 100644 index 90291f2a9ceb8e1ce1d034e225de7da28149e265..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2zi!h|6o*d`3=Gh!h=u7i8Dhs(oP+_Ps1tvrw(?fO&@S%HRbt`Tk*`fFRTYoG zyD-txi8pA+zCye32Apd<0(B@NTczKXzFgL+9{JPsC8LLEZK3?k| z4~gDCBFfWQXzcnwMp@U5Qx(Q{R{EnfE@s;JyRZC7luwHT|C7!V-(;%1(6Mh+rghR) zcjjOd24G+r15fDXpkF@ft>!vETl=s~2+qI&48Q;kzyJ)u01UtY4BS%#`Mg12r1uAP z|Ih2Waci#MVuAq}fB_hQ0T_S*7=Qs7fB_hQ0T{T42Es8>@RaCOu)qH=zW?8>5M2wG z!iDfn_$nL;`@)_O2s^^I;0iB<$HFhkx)Od0=fas_^S=uiFaQHE00S@p126ysFaQHE z00S`ae+Ev7WmK>BO7SLl9K#-aUgQqRuGuj!a^t=<&PPekk>vJ<^f`^jJkMmsv1J`L8&!RoD*;rsqKeFM}CB&33Zl`aeaz|Y(c1M@)^A#qK+Yl$P>ByP(@Yl9DY&?GvYCsJw8$;uYA+;h+% z009U<00Izz00bZa0SG_<0ucC9Kr5R}{3swAq>(TBS(K;^FLbgkk#CD~ARMK#&EtB% wP+qkyyq~+I`7($SDeUfv)v<&*bX%s$|M`yBFWVQL&iTz5X;F}Ht@vK}0=!dE$^ZZW