From 43808da33268d99c9e766ec33ceaf2f2185cd4d8 Mon Sep 17 00:00:00 2001 From: xamidev Date: Mon, 15 Jul 2024 19:07:22 +0200 Subject: [PATCH] Add: framebuffer color output functions --- com1.out | Bin 154 -> 154 bytes iso/boot/kernel.elf | Bin 19996 -> 20044 bytes kernel.elf | Bin 19996 -> 20044 bytes kmain.c | 23 +++++++++++++---------- os.iso | Bin 495616 -> 495616 bytes stdio.c | 36 ++++++++++++++++++++++++++++++++++++ stdio.h | 2 ++ 7 files changed, 51 insertions(+), 10 deletions(-) diff --git a/com1.out b/com1.out index c02424cb412d8cbdeb2a1d9996a86fc9bf5fba38..ecf28e3f66445e0736d2abf8a92c16dfbbc060bb 100644 GIT binary patch delta 12 TcmbQmIE!&Y@WdRwiQbX`9K8fO delta 12 TcmbQmIE!&Y@Wf8RiQZ-a9QOoQ diff --git a/iso/boot/kernel.elf b/iso/boot/kernel.elf index 774221aa9434edffc39fa6130f9a2f106ff5c3a8..620fe760433b65b9972c3db429d708b3f60d5d15 100755 GIT binary patch delta 3713 zcmb7{3v5%@8OM)r{7UL1*N-HQA&#AgAt9t8t$Hh%koeUY&Y7y!xh~OebjXV1}AX6Z_=wV~Fpcm;iqg~~sb4_V< zj#;fa1k*^GVaitho>rSORfk~7RGpzdTsP3Ira^@)z#I(dF%j|vZGK?kzA`Qu4E0L* zf!SmpN=qH$;ScRMc4yY z`Vf&HqiIQ}Hj7PbjU!}JI{k^ouB}9~H=WM5*vHR7v&u%u1U?p)Kp4x-1bpVh=f9P| z19rcSb|dm>G?!%1?<}tPFq+e{Q2ze?+Y{C~^xlnFcVFmnCLz+@1oY_DFNh2JKmI|M zJ<^8;C{Boylo&AxL4UVmXp0(-CiNSxDTbd#4SC7^q3$XMPsG5&BZ{o(DxveT_{Xt4 zr`-3D7H+-Ea0~jA!m`}%mgLr6x%HmhDh2&kXgty>Y*_R;A#_730E~QQuTz>N^wk zZ&cLNW8;O{THLV(++l?E1pS{V=4aS!NXPFEtNhEu@hh$e-1@+*r(cAow*O1wC#rSJ8TSeT>ari)l8>1sri z{3rLrt zSE<(0>qAq8rU&%#&}!l66Izj%OK0a*>dxW}Xk00DYhHnVJ=(s|4;FeUuUEJ8IT&O! zJ)J*9zX)w#=)9Re$}iWwzzplmv~<`s{bih3U#Qef>9FBr-hIH%$1GVX@JJcl43Y_EO|y|U41Y(z0lU%{3XAmO@DbMUu5+&JAb4Qa>=9{3VVOQz@qAP4Y$!Cv z>Dd|bbxlsBts}mQzw!`Ov|o^J(HX_Hbbqlk>F4uW-kR6!ShRR<%i?*B^nCGVZ_~Wy z=7o;e7d9_!d84)2v1DOObEDIlKswmz!om|BEmj=#haq1;F8`lWGj=TfZPit8TN-)bb23*bYTJUU+H-Kky@je8f4L zcpFtsALy_I26d*Wd<8HEKbUd>eg(GLMY1@W@CV>WoP8tM$rbQSAS4k5#^!Ac>>?7x zM~jl+4waV>0~9!qiee8Op63Gm0la5OWCl!vhIE6!)4X9Z%6}I zaSM1S=f4y@9y8V(iRUF=D0cN%s3z;dTe!Wu5xkcRum$`Cd%rN6&;f8g5{PZ$!{Cve ze;2rd<5S>X6j-42_r{UGLUE3pvPQoDcpB z$3@`!D0@YsBBfA##W_@fi6|=Pm#t|vcqq4~HQ)-~*8*HlbS_c?$|lim3b#GSQti%SV-zlft_4GF(cF*<}Q~6yZ`b3YW4HT*?`i zDfj|wu^we*v|-$ec;!9$cI)Croqrp*TSZrn5B95Gr{aVw^v;CQf?7@U>s+o~_&X5$ zMGiXtEDD^)zX30Qz|{Z% delta 3398 zcmb7`dr(x@9mmhz7Yjl6?h{yWSzar%0%CYcd=!ukA%G!Gq?HlFDli+w#3Cd$Y1wYK ziDM}SJ=NBV24mvT2Q`#Du#;HKijFaLOth^t8mB%|Hp!;Ngqp`hZolX5E}ZnQc6WZ~ z{yx9g{hf2qeY`Uu3=9bUcH!i%v<$UfO^AJ0b+V?%LP(Egr2U4d*qBBi&=(c05eOmW z^R>??D(0yx{Yqt>FcFAXsYIB|Am=g(QQ^pbcF4n!1N4|aLm}ztRlQ9}q;5k(EOU)P zoOFR9LpV&!4XMIWcv6KE)Q7Q;9x^1yr68giC#*6c)e^^&egtebP^ZzRc@gS96J2d| zSkFVP$e24bOS}nNjfKwWts0erkR}WLz0u~(hMJo|NFE~id9=y12=`ozn34o~8|T;p z^`Qi6HCZ+NP@hYn_n2&&SD+>)()F-jggTf=drUUx7f`1X3Hknil~!yC*S5o+q9mj; ziJn4{GN_x9Xq?fiX@-`!dwFG)!t_WHN5IUF&Vb)$j$rNF^kA zA|AugJPgkH7@m(M#2?bOEBpMOPbH~7SbG-?Cq-sc^!cBaZA-slJ1E;SzhN7eZQ`5_ z_1=_iU&j&RMZw_fSk=?6>2%EHv}@`IIQ03?A!LUuBy~?o-P2NcsLy{%PTGNufSl8= z;Jv4E$SK!kx$d}Y(jQXQOWnaff8uAX)0S`$I`wS0B}sk$QrTP=HLE=TIzD{WGxIiC zk5k<*JC{VAT2G;2=IuUzqinW@&0{!_V-T|M^Dj}izR%ww`@h11qMu%uwzui)Gl4Zb zK6uCG?5ssJ_4-==${CnqDK!N%VHQBjypNev(47 z(^Jj5*NE=;coXZ+9}F>uO324am{K^;ABwLJ z&d@wZ@;uBfGnkGTU*Huh-R)SR82F67>u@SMX6PNqc-6~T6XBBd_g>d@FFU22y6280 zv3=v3R(&{u6_lN_XYI_K=eO{{*q#+^y+c*mH?=3R34MWv#L=njTtRq_+ME_e;WRCF zmMf;dqT8HVbkKQE%q47Eb(@7=bLMCdLH7j;EY!Rx6f=Syr~a0iYI7E9z0iFDy_uHe zl*Cjr$9pE)oztMbfi36@bergfoZOYJX|{KoB)O-Lm!X+H|7zJ*9kDHxZEIy)QN(7H zZSHBhGB;JxK20CVO^jKFvg$KN+LQZ&b|-ElU%+mp*?Emg=dVlB>?Orw#s_V1tAA&p z`}4l1eL>4Y3k}q?cuAs@4`o|w9lYv~^t5Slu{K$b9M+HSUu;lnWASM9y+!BKSMRB=qxcd34kR3Z zUsU0Zb2b*V62hNgFp~V~Y!T)kZ7=#o+{k#LK!vhY@0LuF_#oRM2O+r-iL%B zUqZ}TB3S@g0$BlRfVd%BA5F3wb)Ndeu&YNFvmXz?=#Qw zcJLXFf5x)7{9Rx>$9uskT)q9^?VNv*kOFd^GrWX=3NGO{;1@anQSfaG&8s;0?aO+R zlmZRtTZQNGM3P9RBP@a^ts*Il@B;8A_}NcHd>YuFERx}fKMP!GrnXf!uThAG38Vz( zSCJ4-6UYkiA#^v2BRg#kj#HffL2!1xNHj>$lQ{A)_)na_5xg-?Bw8F5BM&3jUn)_k+{839y&(UASJ+b=nKRhz9X~mK*#P zI3CR26|CVw!ArbGGUKmVJU9$(lF0McWxW_BQ)=V<#K}>(IdR2piCf_{pf>O9Z08QpQIO;8^fQj&)!yw`6Qc!R|x$*kW6; zvzVT%wa_z!N2z{whFXt@)+l|q*7zTG CL{rxQ diff --git a/kernel.elf b/kernel.elf index 774221aa9434edffc39fa6130f9a2f106ff5c3a8..620fe760433b65b9972c3db429d708b3f60d5d15 100755 GIT binary patch delta 3713 zcmb7{3v5%@8OM)r{7UL1*N-HQA&#AgAt9t8t$Hh%koeUY&Y7y!xh~OebjXV1}AX6Z_=wV~Fpcm;iqg~~sb4_V< zj#;fa1k*^GVaitho>rSORfk~7RGpzdTsP3Ira^@)z#I(dF%j|vZGK?kzA`Qu4E0L* zf!SmpN=qH$;ScRMc4yY z`Vf&HqiIQ}Hj7PbjU!}JI{k^ouB}9~H=WM5*vHR7v&u%u1U?p)Kp4x-1bpVh=f9P| z19rcSb|dm>G?!%1?<}tPFq+e{Q2ze?+Y{C~^xlnFcVFmnCLz+@1oY_DFNh2JKmI|M zJ<^8;C{Boylo&AxL4UVmXp0(-CiNSxDTbd#4SC7^q3$XMPsG5&BZ{o(DxveT_{Xt4 zr`-3D7H+-Ea0~jA!m`}%mgLr6x%HmhDh2&kXgty>Y*_R;A#_730E~QQuTz>N^wk zZ&cLNW8;O{THLV(++l?E1pS{V=4aS!NXPFEtNhEu@hh$e-1@+*r(cAow*O1wC#rSJ8TSeT>ari)l8>1sri z{3rLrt zSE<(0>qAq8rU&%#&}!l66Izj%OK0a*>dxW}Xk00DYhHnVJ=(s|4;FeUuUEJ8IT&O! zJ)J*9zX)w#=)9Re$}iWwzzplmv~<`s{bih3U#Qef>9FBr-hIH%$1GVX@JJcl43Y_EO|y|U41Y(z0lU%{3XAmO@DbMUu5+&JAb4Qa>=9{3VVOQz@qAP4Y$!Cv z>Dd|bbxlsBts}mQzw!`Ov|o^J(HX_Hbbqlk>F4uW-kR6!ShRR<%i?*B^nCGVZ_~Wy z=7o;e7d9_!d84)2v1DOObEDIlKswmz!om|BEmj=#haq1;F8`lWGj=TfZPit8TN-)bb23*bYTJUU+H-Kky@je8f4L zcpFtsALy_I26d*Wd<8HEKbUd>eg(GLMY1@W@CV>WoP8tM$rbQSAS4k5#^!Ac>>?7x zM~jl+4waV>0~9!qiee8Op63Gm0la5OWCl!vhIE6!)4X9Z%6}I zaSM1S=f4y@9y8V(iRUF=D0cN%s3z;dTe!Wu5xkcRum$`Cd%rN6&;f8g5{PZ$!{Cve ze;2rd<5S>X6j-42_r{UGLUE3pvPQoDcpB z$3@`!D0@YsBBfA##W_@fi6|=Pm#t|vcqq4~HQ)-~*8*HlbS_c?$|lim3b#GSQti%SV-zlft_4GF(cF*<}Q~6yZ`b3YW4HT*?`i zDfj|wu^we*v|-$ec;!9$cI)Croqrp*TSZrn5B95Gr{aVw^v;CQf?7@U>s+o~_&X5$ zMGiXtEDD^)zX30Qz|{Z% delta 3398 zcmb7`dr(x@9mmhz7Yjl6?h{yWSzar%0%CYcd=!ukA%G!Gq?HlFDli+w#3Cd$Y1wYK ziDM}SJ=NBV24mvT2Q`#Du#;HKijFaLOth^t8mB%|Hp!;Ngqp`hZolX5E}ZnQc6WZ~ z{yx9g{hf2qeY`Uu3=9bUcH!i%v<$UfO^AJ0b+V?%LP(Egr2U4d*qBBi&=(c05eOmW z^R>??D(0yx{Yqt>FcFAXsYIB|Am=g(QQ^pbcF4n!1N4|aLm}ztRlQ9}q;5k(EOU)P zoOFR9LpV&!4XMIWcv6KE)Q7Q;9x^1yr68giC#*6c)e^^&egtebP^ZzRc@gS96J2d| zSkFVP$e24bOS}nNjfKwWts0erkR}WLz0u~(hMJo|NFE~id9=y12=`ozn34o~8|T;p z^`Qi6HCZ+NP@hYn_n2&&SD+>)()F-jggTf=drUUx7f`1X3Hknil~!yC*S5o+q9mj; ziJn4{GN_x9Xq?fiX@-`!dwFG)!t_WHN5IUF&Vb)$j$rNF^kA zA|AugJPgkH7@m(M#2?bOEBpMOPbH~7SbG-?Cq-sc^!cBaZA-slJ1E;SzhN7eZQ`5_ z_1=_iU&j&RMZw_fSk=?6>2%EHv}@`IIQ03?A!LUuBy~?o-P2NcsLy{%PTGNufSl8= z;Jv4E$SK!kx$d}Y(jQXQOWnaff8uAX)0S`$I`wS0B}sk$QrTP=HLE=TIzD{WGxIiC zk5k<*JC{VAT2G;2=IuUzqinW@&0{!_V-T|M^Dj}izR%ww`@h11qMu%uwzui)Gl4Zb zK6uCG?5ssJ_4-==${CnqDK!N%VHQBjypNev(47 z(^Jj5*NE=;coXZ+9}F>uO324am{K^;ABwLJ z&d@wZ@;uBfGnkGTU*Huh-R)SR82F67>u@SMX6PNqc-6~T6XBBd_g>d@FFU22y6280 zv3=v3R(&{u6_lN_XYI_K=eO{{*q#+^y+c*mH?=3R34MWv#L=njTtRq_+ME_e;WRCF zmMf;dqT8HVbkKQE%q47Eb(@7=bLMCdLH7j;EY!Rx6f=Syr~a0iYI7E9z0iFDy_uHe zl*Cjr$9pE)oztMbfi36@bergfoZOYJX|{KoB)O-Lm!X+H|7zJ*9kDHxZEIy)QN(7H zZSHBhGB;JxK20CVO^jKFvg$KN+LQZ&b|-ElU%+mp*?Emg=dVlB>?Orw#s_V1tAA&p z`}4l1eL>4Y3k}q?cuAs@4`o|w9lYv~^t5Slu{K$b9M+HSUu;lnWASM9y+!BKSMRB=qxcd34kR3Z zUsU0Zb2b*V62hNgFp~V~Y!T)kZ7=#o+{k#LK!vhY@0LuF_#oRM2O+r-iL%B zUqZ}TB3S@g0$BlRfVd%BA5F3wb)Ndeu&YNFvmXz?=#Qw zcJLXFf5x)7{9Rx>$9uskT)q9^?VNv*kOFd^GrWX=3NGO{;1@anQSfaG&8s;0?aO+R zlmZRtTZQNGM3P9RBP@a^ts*Il@B;8A_}NcHd>YuFERx}fKMP!GrnXf!uThAG38Vz( zSCJ4-6UYkiA#^v2BRg#kj#HffL2!1xNHj>$lQ{A)_)na_5xg-?Bw8F5BM&3jUn)_k+{839y&(UASJ+b=nKRhz9X~mK*#P zI3CR26|CVw!ArbGGUKmVJU9$(lF0McWxW_BQ)=V<#K}>(IdR2piCf_{pf>O9Z08QpQIO;8^fQj&)!yw`6Qc!R|x$*kW6; zvzVT%wa_z!N2z{whFXt@)+l|q*7zTG CL{rxQ diff --git a/kmain.c b/kmain.c index 37cc297..de43e15 100644 --- a/kmain.c +++ b/kmain.c @@ -7,25 +7,24 @@ int kmain(int retvalue) { - gdt_install(); - idt_install(); - isr_install(); - - // serial testing - init_serial(); - log("serial connection established", 3); + gdt_install(); log("initialized GDT entries", 2); - log("kernel started", 2); + idt_install(); log("initialized IDT", 2); + isr_install(); log("initialized ISRs", 3); + + log("kernel started", 2); clear(); // printf testing // TODO: Framebuffer upgrade: color output + // TODO: Serial printf to dump registers on kernel panic + // TODO: Fix scrolling bug (framebuffer driver) int age = 34; int problems = 124; @@ -41,10 +40,14 @@ int kmain(int retvalue) printf("such hex %x %X\n", 0xcafe, 0xdeadbeef); printf("such pointer %p\n", (void*)0xcafe1234); - + + for (int i=0; i<10; i++) + { + colorputs("hello colorful world!!\n", i); + } // Div by zero exception - printf("Lalala, what a beautiful day! %d", 4/0); + //printf("Lalala, what a beautiful day! %d", 4/0); return retvalue; } diff --git a/os.iso b/os.iso index 8d5f6675923af42570ed6abe766434dd6dc8f0a0..3f8b453eb0b6f0ff111e7d38b3a3f2ad5301ad53 100644 GIT binary patch delta 4008 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 TowT~su)5Q@y3@3?(|q{fs23+I delta 3692 zcmb7{dsI}%9mnU+J|XB{7FeDx3krIOQV^DhucBdNtx8A}ZS|-D1rAX(7Qw_MW!-Fp zT8bf|Izhx>Ogw0!BBEfTR)cR_i;9+WG@klMS(8nR2{n%s*?#Blu1xY*yPV(5e15O_ z&D^;U);62hHk(^BoDo@RS=Q9_Z2kC@@#!gp=DUr7-Ply@z@wORIE}#jU3!H5Lsa7B*u&jn-C~2&po4 zEL~6U$aF~@d#Zt2t#c&IJ9W7JbvkXBCfBJ_&6ZAe1*z3C)H#rgqX=RXVNSx6H* z+(1WCkAdB6pk^t86>g#70o>XNNn#_m(2>#(HgyY)mG*ICtaO4ocvs7|Z=unFF>ouu z#M6yDgDH@Qt_2quSyCf4Yv04TA(Z7c(!{84jHitpDuTz}g>I&a4K~myt(p?D(8Ts4 zE@=$L~xz z+(Z)tS}`t(!}|71eSw=>sNP*VPAHkJ_Ai6AsB!_XuRNApeqAx^h`sjAjl`jy9% z@0#@(6ene_qqWXzMVIv>-8Mxx>PNagicTKVA>UC&_d_5db|iFlV297x2I8@xGq(O$ z(bYOH!exWa?WyedR1SD5-L=kMC1?ZA2V&0HTu+`JOHSMRrW%gf`kZcczNgYv>x}rC zS6bwCLZzjP?|VG8&TK_J+pkua{`=UTo27&2$s$bkOU0P#H|k5%jf3ZFo%0oSlvmw} zjvR)NhHt(@-uzl;nPUGQJBoU0Z2FpoKb-5Dv*EL6obFIpa2Vg#9c=k7Ix3|{r}!8; zY!6CKxb%iY$9aa*s|a;(}hkUYbP92HC^C^!W5vY>?FJ`A3aypoUMZgl~H2@$f@r8&Kanh3!;~ zie=v5kmUndpj?{ZDt^e+t@N(`B#xw`Yi>kGe=8j)NpCQ78#U4N0hZB5r_%oK*_t+* zz?$3W1YIxAv8KetZne>|`t1NmSDJ~19iVRAejG#1&%>C$osQPq0gkTVFqYX)Gj+M# zbUBn&w$r)#J2;w-uF6n$rJatOVjJLxYN1D|?~92jtk#*Q=w|qIqZQpeMQ8QtLKI!$ z0Go1<#?qw&?74$9LN^haHRnQD)j|5Mej{!%N0%jpjX6Z;M|R)#cphDC>~E0E47=t- zBWpZFf2)62&z;kaEVP5BMkI;O{KPGQS@U@?Ti8J}^wEm%p5Ttg4r)~C1MpmSd{RH0 z9sG!14`}%hmb2lC%f%W#rZa{wD=uGATxMBSQCMD4T*PjDOyimH2yL>HS%qcz8*6#7 zw6MZbXjxobSXuFWNoAR(sBlf3C83Cv)YawVN<~6&Sjnc(Jf2e!4M6WF2H1 zWEbQ(yS;59sj3Hf8q)D&RP1YJ=ervdiFvdNE+!D6z{`fnh>xX{GMRn z2Yz5;$>-^|UtJHDNjBJs!qs?ipNf>pfRANxUzAL8d^`fY40isL;U5QfM$2T6&z=Cz z4P)jD)NBut{C*P2g#I8Rym1nl4Bn3V4xs1r&P3lY*q;WE$(M;10l_4YJPZD_V4n|O z5+@TqdLCbjKIb<>{>vp|Cnrb9WTvmMHE^gG5>$bEV`Ng{v;P77jbN_>#|aDI@9xKN z#rzw!8Fm>3;&rYRxCI;p=5G~VaI<75pr&2m@oqhBFlvTpTM_x5_pVoO{anDaf$q=eg@bf zB+LV6;mM895{Qb-1#5)(1>kbw5|gqQ3X6)%lUI@1?8@Kh3)yKIBzabb6-|07Z&J{t zW%DKrjWvxo9IXmw@)3`)TG=bzw5mgOiSCrtD=RCOu$IeoBg?r$ud|pQI*A@vvH3kT zF|iz<+y0;T?k37=`0dD_Ui?IsXRwPs)WnYT&>$^;2&`5V@mhXAzU(swU8Of@zm|P| zmBwpYrW5i!3%-Vb!GiG!JHRgW&=A&rma04QuhCZNO*y5ymsa= VGA_WIDTH) + { + VGA_Y++; + VGA_X = 0; + } + if (VGA_Y >= VGA_HEIGHT) scroll(1); + move_cursor(VGA_X, VGA_Y); +} + void puts(const char* str) { while (*str) @@ -111,6 +138,15 @@ void puts(const char* str) } } +void colorputs(const char* str, unsigned int color) +{ + while (*str) + { + colorputc(*str, color); + str++; + } +} + void printf(const char* fmt, ...) { int* argp = (int*) &fmt; diff --git a/stdio.h b/stdio.h index f1c2106..c89d3fc 100644 --- a/stdio.h +++ b/stdio.h @@ -14,12 +14,14 @@ void move_cursor(int x, int y); void putchar(int x, int y, char c); void puts(const char* str); +void colorputs(const char* str, unsigned int color); void clear(void); void putcolor(int x, int y, unsigned int color); char getchar(int x, int y); unsigned int getcolor(int x, int y); void scroll(int lines); void putc(char c); +void colorputc(char c, unsigned int color); #define PRINTF_STATE_START 0 #define PRINTF_STATE_LENGTH 1