From 9ff817b935d87c250fa2d94bb1f55be2e0b8fb01 Mon Sep 17 00:00:00 2001 From: Tom-on64 Date: Sat, 5 Oct 2024 15:13:36 +0200 Subject: [PATCH] Imporved text.h --- .gitignore | 8 ++++++++ include/screen/text.h | 12 ++++++------ include/terminal/terminal.h | 4 ++-- kern.iso | Bin 1470464 -> 1470464 bytes src/kernel.c | 2 -- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 8a3d186..f6da99a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,8 @@ .DS_Store +# Config +make.config + # Binaries bin/ *.bin @@ -7,9 +10,14 @@ makedisk # Object files *.o +*.out *.obj *.elf +# Font source files +src/fonts/**.asm + # Vim swap files *.swp +*.swo diff --git a/include/screen/text.h b/include/screen/text.h index e13f44f..c8fdd07 100644 --- a/include/screen/text.h +++ b/include/screen/text.h @@ -10,8 +10,8 @@ typedef union { struct { uint8_t width; - uint8_t height - } __attribute__ ((packed)) info; + uint8_t height; + }; uint8_t data[4096]; } __attribute__ ((packed)) font_t; @@ -19,8 +19,8 @@ typedef union { void drawChar(char c, uint32_t x, uint32_t y, uint32_t fgColor, uint32_t bgColor) { // Font info font_t* font = (font_t*)FONT_LOC; - uint8_t charWidth = font->info.width; - uint8_t charHeight = font->info.height; + uint8_t charWidth = font->width; + uint8_t charHeight = font->height; // uint8_t bitmapRowLen = (charWidth - 1) / 8 + 1; // TODO: Larger font support // Video stuff @@ -28,7 +28,7 @@ void drawChar(char c, uint32_t x, uint32_t y, uint32_t fgColor, uint32_t bgColor uint8_t* vidmem = (uint8_t*)gfxMode->physicalBasePtr; uint32_t offset = (gfxMode->xRes * y * charHeight + x * charWidth) * bytesPerPx; - char* bitmap = &font.data[(c - 1) * charHeight]; + uint8_t* bitmap = &font->data[(c - 1) * charHeight]; for (uint8_t i = 0; i < charHeight; i++) { // Rows char bitmapRow = bitmap[i]; uint32_t color = convertColor((bitmapRow & 0x80) ? fgColor : bgColor); @@ -48,7 +48,7 @@ void drawChar(char c, uint32_t x, uint32_t y, uint32_t fgColor, uint32_t bgColor } void scroll() { // TODO: Make this faster (still kinda slow, but memcpy32() helped alot) - uint8_t charHeight = *(uint8_t*)FONT_HEIGHT; + uint8_t charHeight = ((font_t*)FONT_LOC)->height; if (terminal->y+1 < terminal->height) { return; } // Check if we should scroll uint32_t bytesPerLine = charHeight * gfxMode->bytesPerScanline; diff --git a/include/terminal/terminal.h b/include/terminal/terminal.h index 02113e7..793222d 100644 --- a/include/terminal/terminal.h +++ b/include/terminal/terminal.h @@ -24,8 +24,8 @@ terminal_t* terminal = (terminal_t*)TERMINAL_INFO_LOC; #include // This needs to be here because it uses 'terminal' and otherwise it would be undeclared int32_t terminalWrite(const void* buf, uint32_t len) { - terminal->width = gfxMode->xRes / *(uint8_t*)FONT_WIDTH; - terminal->height = gfxMode->yRes / *(uint8_t*)FONT_HEIGHT; + terminal->width = gfxMode->xRes / *(uint8_t*)(FONT_LOC); + terminal->height = gfxMode->yRes / *(uint8_t*)(FONT_LOC+1); char* str = (char*)buf; uint32_t i; diff --git a/kern.iso b/kern.iso index 5f7c6d2e34270d9da4a79131313fd0e7ec6396cc..0d4121c9532e915c60e64403b4e8312ecdeb8f15 100644 GIT binary patch delta 1994 zcmYjS4Nz277`=}Lf)&_RK}Apg^jtCkVInPHS7aNe1NZkwK-y@xHl)I9rWYx*aoRp-9u6!nh5i=0iT9C~i|Me-}#-bDR+Z z+10^{_pD5)L@tA0##LaI`wXr#*t*3+YgD~)NH4OlF}Si>&z>CX0XY6YQ39!hYHGny z%HYxmtE&&Gx@lN1k49Bav7NK+xcjfguz?bVkc>=zmAzlKQ2LQ|l$oWg?5{HOieqN6 zok$9w&^if&ONU{OU}iAx85vMzE&{_*ZfEP9W@!~Ga++h}2g9WPA+c|!M?{s4Vi0kz zXHCvo(i3(UV-(Z7W~Ce+%rDV*4_;VYlUCst?3?*m)iqNEJ=AuT1%q}4p;iZb!xdGU z8Y^~h=5cc%*)aIO{8v#jGiklrm7av5UYGADpuJ)A2n=2_TYaLZ1>dgm+k$V>cwjR4 zdX2{jzDnaO1W(iWR>4b?w8=p+nXd6x!J{?)K=5#lhdl=_X?!WT|G$1kNl&La;2C`R z&`yi=T!)+T{|47;rFp6wJHjoV4)+pVoQcwHsvSIRhaMkzu-Si1b9bnwA6-$;8!9_Q zc)PNyP#4&t9h0Dp6}WhH4qg ze;@3&69$jKZ;anyb1LFWznMlzR<^x3lQ)CeHqu83($#pX{0M~HEK0>`IVDaDQ?pv4 zUI=9)mh2Tmfwn}gkt2jWb&0*0P8Tz)n#WA_UchWrZWgBM+C{9ZV)7~(A|Hjpzx1i1 zY}i2esdus#J$AQgT?^05%%BG#`^O=YpJg=ZCg&|6zI3H9P$@Lh&&4hFvE`M|2A>x6 zGRv==7kpOGci7>|i8F4-tKG9$GU+*?+O>Ilx<_X?5twM9?LuA0?o~!=6_&96%4r$j z33UvzE3uEBE-joIQyO#%ohMeSg{s$hG($_I6b8Q8DGvB`vFzi2v^;xijG7j*4Ex{RW%#Py{qp^!PIpf4i*EUcD*5kZ zx!2&VKw*#E<=Nd^WlHwQ6I`7oI*%M_;Wu!QZSM0I+u>+2F=eSM7pTRz5X36zq&~3WB017rLAm7%}-Jcd#N@audJfl1gYKI zP+KNRGK;J8NTi3cu(N>99Z4w-ZzjYf!O9^?(EzonDvSm!4@ zL#D()i|0)&qhYRO^_DfftqZ&P3;r$SF7cqQctbw5h3~%`!8SF;Oszv>&Y|)pe6L0^ z(i^Z)DB`1>Iodi z{F*bWr825T0s;UX5C{YT!N4;>2oMVBfl)vh5Dr8D2EYi62F3tmfyk3lEm1wq{{v)G B_Lu+w delta 2008 zcmYjSYfMx}7@f-kvbeISPz6yIL`9T`MwEhDqOP_v)Mcr_q6oIqPM28g1GR0GgJg)wUTvK6j~1>Rr$ME&Npr7#w9W2QKAr%lgn?i+R9YvC+4j*NjKTA zm8PX%n8b3zDDs5XOBh@_46_9@fpK}HL6x~M3|l#6%bX@@1uJoyqNfj<$?-m7-#|}_ zD(l1`>^z8_bS6ms>^8>nY`~e2(J<&w5AGg(uy`h|#TM)v_*gY-q6&JbttcM}+7*CW zw^)%YygWTltlq@qW<$!u;5+_8QF3$XX|*f9#GzhS9U!1M#4nNHJ7%c|d`0k5jsGTi zk;V;a;5izfA@~Z7uM|8(;~xlKo~#88BABZ2cEKlTyif4a8V`FFT+wdda&TYYb4AI{ zrX}DxJacHJWx-s+rhFa9TCJ3-+1L@;?bDELMizIXe3P2?A5QDfzWj58@0ga|t|tFN zSJeB4%DYA7axMFbn!PccUEr>|hMVR{BSzO+SkNpB4?+5UuQ>3*E4ySUla34Kn>9zP zRiW0}JygqB_4i=6-AHf)HqGy`sOstEmtzUZFR<^-liyeh zk?S$|k_QweFOPnz?j#F6mal7F8IWo5TZ|M{l{AV$*1FF0*j*pv( zUwn_|i-T`r#e3SN|5&0NBi&=G(f2yqHeNKtCS3x1>M6 zz*cyBwfqMxN|}L2qU;>+jTTKQH5;OI0iqX53g6Bi$(yC~Y<+FSqM3T)wG+Mr@2&V$ z?pM!PXhHm)k=hoah457)wezg0_KwuW_PCR><<$?3U$x0u-E%tS!rs?q^SxU0lQeU$ z(OHXD=Zp3-7=+w#ipp%}*hBNsnc7hw;L$r*3mM)7Pa( zx{xlAuf8-t?eQ3!0_GMIBDE^!UZ0&EI330|*R7ZSW#8A;Nt6}ueIUiK#rxu=XY9Rw ziPE>8L;ETveCsCGyQNE>ll8??PzC;}>@ob2$8fMkFFo_zITED{@`ge*@ll@sh7O%{ zkbQUJ!=TyG(Bk<8W^PQ9-tuf~{8(qW|2zIK%w6KBZg~by*~YN-=b~diLtpNq?0x*& zP$^*&@%DhXOeEfE5yac)`TShFU*M!Q^Rvnwp3x2C{&)Kq*iL)Br~Z zu?*z|&LDo^3~#OpZGFaTqK5Won80%L)3z<406DZDwn G=luW3-v6cm diff --git a/src/kernel.c b/src/kernel.c index 6bd4468..daa0d5c 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -93,8 +93,6 @@ void main() { // Run Interactive Shell Program // TODO: Make it in another file while (1) { - for (size_t i = 0; i < 0x20; i++) drawChar(0x70+i, i, 0, FG_COLOR, BG_COLOR); - printf("\e[6M\x80"); printf("\e[6M\e[8N%s \e[2M%s \e[8M", cwd, PROMPT); char input[256]; char* inputPtr = input;