From 841dee9e18df1413261ced2cba8c885880084c0f Mon Sep 17 00:00:00 2001 From: xamidev <121681048+xamidev@users.noreply.github.com> Date: Sun, 19 May 2024 15:09:53 +0200 Subject: [PATCH] Add: framebuffer driver and scrolling --- bochslog.txt | 84 ++++++++++++++++++++++---------------------- iso/boot/kernel.elf | Bin 9708 -> 9780 bytes kernel.elf | Bin 9708 -> 9780 bytes os.iso | Bin 485376 -> 485376 bytes stdio.c | 39 ++++++++++++++++---- stdio.h | 6 +++- 6 files changed, 80 insertions(+), 49 deletions(-) diff --git a/bochslog.txt b/bochslog.txt index 817d9ae..14f0b6a 100644 --- a/bochslog.txt +++ b/bochslog.txt @@ -44,45 +44,45 @@ 00000000000i[USBCTL] Pluggable USB devices 00000000000i[USBCTL] mouse tablet keypad keyboard floppy disk cdrom printer 00000000000i[USBCTL] hub -00000000000i[MEM0 ] allocated memory at 0x7f6755ddd010. after alignment, vector=0x7f6755dde000 +00000000000i[MEM0 ] allocated memory at 0x7f59fd3dc010. after alignment, vector=0x7f59fd3dd000 00000000000i[MEM0 ] 32.00MB 00000000000i[MEM0 ] mem block size = 0x00020000, blocks=256 00000000000i[MEM0 ] rom at 0xffff0000/65536 ('/usr/share/bochs/BIOS-bochs-legacy') 00000000000i[CPU0 ] WARNING: 3DNow! is not implemented yet ! 00000000000i[DEV ] will paste characters every 100 iodev timer ticks -00000000000i[ ] lt_dlhandle is 0x55b16dc75c30 +00000000000i[ ] lt_dlhandle is 0x555b0a2aef10 00000000000i[PLUGIN] loaded plugin libbx_soundalsa.so 00000000000i[WAVOUT] ALSA: opened default PCM output device 00000000000i[WAVOUT] changed sample rate to 44101 -00000000000i[ ] lt_dlhandle is 0x55b16e42bb40 +00000000000i[ ] lt_dlhandle is 0x555b0aa651a0 00000000000i[PLUGIN] loaded plugin libbx_pci.so -00000000000i[ ] lt_dlhandle is 0x55b16dc75d10 +00000000000i[ ] lt_dlhandle is 0x555b0a2aeff0 00000000000i[PLUGIN] loaded plugin libbx_pci2isa.so -00000000000i[ ] lt_dlhandle is 0x55b16dbf3de0 +00000000000i[ ] lt_dlhandle is 0x555b0a22cea0 00000000000i[PLUGIN] loaded plugin libbx_usb_uhci.so -00000000000i[ ] lt_dlhandle is 0x55b16dc90240 +00000000000i[ ] lt_dlhandle is 0x555b0a2c91b0 00000000000i[PLUGIN] loaded plugin libbx_acpi.so -00000000000i[ ] lt_dlhandle is 0x55b16dbf31e0 +00000000000i[ ] lt_dlhandle is 0x555b0a22c2a0 00000000000i[PLUGIN] loaded plugin libbx_hpet.so -00000000000i[ ] lt_dlhandle is 0x55b16e4362f0 +00000000000i[ ] lt_dlhandle is 0x555b0aa6f950 00000000000i[PLUGIN] loaded plugin libbx_cmos.so -00000000000i[ ] lt_dlhandle is 0x55b16e436b00 +00000000000i[ ] lt_dlhandle is 0x555b0aa70160 00000000000i[PLUGIN] loaded plugin libbx_dma.so -00000000000i[ ] lt_dlhandle is 0x55b16e437470 +00000000000i[ ] lt_dlhandle is 0x555b0aa70970 00000000000i[PLUGIN] loaded plugin libbx_pic.so -00000000000i[ ] lt_dlhandle is 0x55b16e437c30 +00000000000i[ ] lt_dlhandle is 0x555b0aa71130 00000000000i[PLUGIN] loaded plugin libbx_pit.so -00000000000i[ ] lt_dlhandle is 0x55b16e438650 +00000000000i[ ] lt_dlhandle is 0x555b0aa71b50 00000000000i[PLUGIN] loaded plugin libbx_vga.so -00000000000i[ ] lt_dlhandle is 0x55b16e459c90 +00000000000i[ ] lt_dlhandle is 0x555b0aa93190 00000000000i[PLUGIN] loaded plugin libbx_floppy.so -00000000000i[ ] lt_dlhandle is 0x55b16e45a4d0 +00000000000i[ ] lt_dlhandle is 0x555b0aa939d0 00000000000i[PLUGIN] loaded plugin libbx_ioapic.so -00000000000i[ ] lt_dlhandle is 0x55b16e45ace0 +00000000000i[ ] lt_dlhandle is 0x555b0aa941e0 00000000000i[PLUGIN] loaded plugin libbx_keyboard.so -00000000000i[ ] lt_dlhandle is 0x55b16e45b5e0 +00000000000i[ ] lt_dlhandle is 0x555b0aa94ae0 00000000000i[PLUGIN] loaded plugin libbx_harddrv.so -00000000000i[ ] lt_dlhandle is 0x55b16e45d6b0 +00000000000i[ ] lt_dlhandle is 0x555b0aa96bb0 00000000000i[PLUGIN] loaded plugin libbx_pci_ide.so 00000000000i[PLUGIN] init_dev of 'pci' plugin device by virtual method 00000000000i[DEV ] i440FX PMC present at device 0, function 0 @@ -90,7 +90,7 @@ 00000000000i[DEV ] PIIX3 PCI-to-ISA bridge present at device 1, function 0 00000000000i[PLUGIN] init_dev of 'cmos' plugin device by virtual method 00000000000i[CMOS ] Using local time for initial clock -00000000000i[CMOS ] Setting initial clock to: Sun May 19 15:00:39 2024 (time0=1716123639) +00000000000i[CMOS ] Setting initial clock to: Sun May 19 15:09:18 2024 (time0=1716124158) 00000000000i[PLUGIN] init_dev of 'dma' plugin device by virtual method 00000000000i[DMA ] channel 4 used by cascade 00000000000i[PLUGIN] init_dev of 'pic' plugin device by virtual method @@ -248,27 +248,27 @@ 00000443047i[BXVGA ] VBE known Display Interface b0c5 00000445690i[VBIOS ] VBE Bios $Id: vbe.c 292 2021-06-03 12:24:22Z vruppert $ 00004097883i[BIOS ] IDE time out -00847008580i[BIOS ] Booting from 07c0:0000 -00847103964i[BIOS ] int13_harddisk: function 41, unmapped device for ELDL=80 -00847107635i[BIOS ] int13_harddisk: function 08, unmapped device for ELDL=80 -00847111306i[BIOS ] *** int 15h function AX=00c0, BX=0000 not yet supported! -01027874000p[SDL2 ] >>PANIC<< User requested shutdown. -01027874000i[CPU0 ] CPU is in protected mode (active) -01027874000i[CPU0 ] CS.mode = 32 bit -01027874000i[CPU0 ] SS.mode = 32 bit -01027874000i[CPU0 ] EFER = 0x00000000 -01027874000i[CPU0 ] | EAX=0000002a EBX=0002cd80 ECX=000000f0 EDX=000003d5 -01027874000i[CPU0 ] | ESP=00067ecc EBP=00067ee0 ESI=0002ced8 EDI=0002ced9 -01027874000i[CPU0 ] | IOPL=0 id vip vif ac vm rf nt of df if tf sf zf af pf cf -01027874000i[CPU0 ] | SEG sltr(index|ti|rpl) base limit G D -01027874000i[CPU0 ] | CS:0008( 0001| 0| 0) 00000000 ffffffff 1 1 -01027874000i[CPU0 ] | DS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 -01027874000i[CPU0 ] | SS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 -01027874000i[CPU0 ] | ES:0010( 0002| 0| 0) 00000000 ffffffff 1 1 -01027874000i[CPU0 ] | FS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 -01027874000i[CPU0 ] | GS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 -01027874000i[CPU0 ] | EIP=0010033b (0010033b) -01027874000i[CPU0 ] | CR0=0x60000011 CR2=0x00000000 -01027874000i[CPU0 ] | CR3=0x00000000 CR4=0x00000000 -01027874000i[CMOS ] Last time is 1716124666 (Sun May 19 15:17:46 2024) -01027874000i[SIM ] quit_sim called with exit code 1 +00716758940i[BIOS ] Booting from 07c0:0000 +00716854324i[BIOS ] int13_harddisk: function 41, unmapped device for ELDL=80 +00716857995i[BIOS ] int13_harddisk: function 08, unmapped device for ELDL=80 +00716861666i[BIOS ] *** int 15h function AX=00c0, BX=0000 not yet supported! +00842722000p[SDL2 ] >>PANIC<< User requested shutdown. +00842722000i[CPU0 ] CPU is in protected mode (active) +00842722000i[CPU0 ] CS.mode = 32 bit +00842722000i[CPU0 ] SS.mode = 32 bit +00842722000i[CPU0 ] EFER = 0x00000000 +00842722000i[CPU0 ] | EAX=0000002a EBX=0002cd80 ECX=000000f0 EDX=000003d5 +00842722000i[CPU0 ] | ESP=00067ecc EBP=00067ee0 ESI=0002ced8 EDI=0002ced9 +00842722000i[CPU0 ] | IOPL=0 id vip vif ac vm rf nt of df if tf sf zf af pf cf +00842722000i[CPU0 ] | SEG sltr(index|ti|rpl) base limit G D +00842722000i[CPU0 ] | CS:0008( 0001| 0| 0) 00000000 ffffffff 1 1 +00842722000i[CPU0 ] | DS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 +00842722000i[CPU0 ] | SS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 +00842722000i[CPU0 ] | ES:0010( 0002| 0| 0) 00000000 ffffffff 1 1 +00842722000i[CPU0 ] | FS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 +00842722000i[CPU0 ] | GS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 +00842722000i[CPU0 ] | EIP=001004ab (001004ab) +00842722000i[CPU0 ] | CR0=0x60000011 CR2=0x00000000 +00842722000i[CPU0 ] | CR3=0x00000000 CR4=0x00000000 +00842722000i[CMOS ] Last time is 1716125000 (Sun May 19 15:23:20 2024) +00842722000i[SIM ] quit_sim called with exit code 1 diff --git a/iso/boot/kernel.elf b/iso/boot/kernel.elf index 06a2b1dac85c1b88876118f0aff07a1047b3f4e3..85511f93eeccdeff49642c58508bbb6722ae0989 100755 GIT binary patch delta 1444 zcmZ`(ZEO=|9RJ_-R*uoNPhWzJY%p&X*SN$n7n5cBVdD8g1zSk*3y?Y@&ZS{Vh4{e_ zbKX#z!=(D4S%_~W_(@|%Fk||mY?Nh4f*D2;62L@5a;E*z#7dg}ZP0eQ%Mtwxo9sNktyeThH%6s<3eBh}Gg=oA`4G>uyBqF2a`_Oo^ zQm@CYc@N+vX6mZB-~OqP%--E&lp@w1g%7aUzRNBfIIrJ3G-s)S=~<(s#)p4{+4|Py zU>FGu|0*n}R@7^h@45C|BZE;=tY18Qmi5V>dH6lnml}d%yl~x5w4hhe02OyE=w)Zo zZ6+(GULK*{acihvuN#+qKdb}eniH@dbFGG6mS*B$`t@?=ilJAenN|l?GUxb-VAtk% z?h9|WT!wX3CTe;XN%>XQ8e9xa(|$1k>$I>3{k+Duj=>nn&pLLa#H_TSZnYr2u4Z++ zcz8jtI%U3UCT&x%qMRd6IcgxkXzo-^-Hu((&Iu+Fw-QbTzGdlAS1NQ#J9Z^|%}iF~ ziQU$at26ZKSfizC=1W7j8!g$H<4$vCQjINU^~%G?_1DtF#^r4U|Nn92a*dtP9I@WU zh8Zsuef(N5DGx63uF#I~kIrNlGtDECwbzNK@UMcA#4GmN5o2>$Utm5>ejnaxD~9II z6B{sY-FF|U)Io)@&k z+prJV2(@vSkhh`rosc^_u@O=(IrzL>$%kNhy0Dg|LoW`R`f9HhayB0eT=8Chmr6Ml1h`p6MuMd zg=7zXhi6e@)GILb=kYua-qlNV5tvv5dubl9Oe^}IfhSh!ZxD@Er{IqPg&C+x$oW%v`F z|Hg8Sci;pOp@<&EEu!M+bb8B0h!j595$5}%KCc+}$p}9j)x48fPDc2rQEmMcmQ&D8 c@ww=N)WfrnbvC6noJ0I9R$q4#eIO$I2eEs=(f|Me delta 945 zcmY*YT}V@57=F*UIj3zqM|b=y9jBd{7GYVV5DnBi7g@+`2wh~zE<(ICZ@LmWWY{oP z-$iwmUUm~mVhc)UQ!EPlA-jr#e&B$+7&0VjZav?IrXQU1e$Vr~-}Aoj$2oHsQx{^j zv<)P1lIr2YyPiAG2 zk8M{lQ+6xDctQ!Xql|AT!N@wA8c%-l5Um&)3_xqfijgjCTB7}#sF5C~OCc+g&*#l0 zSG*L;M8ax%gd|$>~EI0RQZ^?#e1uKJ%>=?5ge(@z|e=&M9yr0o=7v<4x8hQv~kkVdTEWv~I<3S|OO z7%vzLE^*okc?#1JoQT#<->Y}89S{6q)&CUyfl I(JgW8ACT+}ZP0eQ%Mtwxo9sNktyeThH%6s<3eBh}Gg=oA`4G>uyBqF2a`_Oo^ zQm@CYc@N+vX6mZB-~OqP%--E&lp@w1g%7aUzRNBfIIrJ3G-s)S=~<(s#)p4{+4|Py zU>FGu|0*n}R@7^h@45C|BZE;=tY18Qmi5V>dH6lnml}d%yl~x5w4hhe02OyE=w)Zo zZ6+(GULK*{acihvuN#+qKdb}eniH@dbFGG6mS*B$`t@?=ilJAenN|l?GUxb-VAtk% z?h9|WT!wX3CTe;XN%>XQ8e9xa(|$1k>$I>3{k+Duj=>nn&pLLa#H_TSZnYr2u4Z++ zcz8jtI%U3UCT&x%qMRd6IcgxkXzo-^-Hu((&Iu+Fw-QbTzGdlAS1NQ#J9Z^|%}iF~ ziQU$at26ZKSfizC=1W7j8!g$H<4$vCQjINU^~%G?_1DtF#^r4U|Nn92a*dtP9I@WU zh8Zsuef(N5DGx63uF#I~kIrNlGtDECwbzNK@UMcA#4GmN5o2>$Utm5>ejnaxD~9II z6B{sY-FF|U)Io)@&k z+prJV2(@vSkhh`rosc^_u@O=(IrzL>$%kNhy0Dg|LoW`R`f9HhayB0eT=8Chmr6Ml1h`p6MuMd zg=7zXhi6e@)GILb=kYua-qlNV5tvv5dubl9Oe^}IfhSh!ZxD@Er{IqPg&C+x$oW%v`F z|Hg8Sci;pOp@<&EEu!M+bb8B0h!j595$5}%KCc+}$p}9j)x48fPDc2rQEmMcmQ&D8 c@ww=N)WfrnbvC6noJ0I9R$q4#eIO$I2eEs=(f|Me delta 945 zcmY*YT}V@57=F*UIj3zqM|b=y9jBd{7GYVV5DnBi7g@+`2wh~zE<(ICZ@LmWWY{oP z-$iwmUUm~mVhc)UQ!EPlA-jr#e&B$+7&0VjZav?IrXQU1e$Vr~-}Aoj$2oHsQx{^j zv<)P1lIr2YyPiAG2 zk8M{lQ+6xDctQ!Xql|AT!N@wA8c%-l5Um&)3_xqfijgjCTB7}#sF5C~OCc+g&*#l0 zSG*L;M8ax%gd|$>~EI0RQZ^?#e1uKJ%>=?5ge(@z|e=&M9yr0o=7v<4x8hQv~kkVdTEWv~I<3S|OO z7%vzLE^*okc?#1JoQT#<->Y}89S{6q)&CUyfl I(JgW8ACT+J7(VCC&F$63Icbe)~nB2(7i2diliOO+?nwOA0JZVPW_O;8Y192 zI&Z>`aplR$X&T1Zv@e zg*`#*Z$?h{%zZl{b4rqHv$StcNf?W2&6m`aL@PPy)tj@~ta{saV-q4~xCx_Y&8Vs* z=!6%MdLz;$-6AF8&0@|35`tCQ&WfDr2*?8@#%prkP77$e8H3i>4u z6xvxj0_B|;bxckffEt(eHjX_gzzGy7sAQJf=aiH&=@HGB(UcTUbjp}Wa!kgw{gS3+ zT=T(cjx>4oCSwNMD)qEUcQL1~;>7H4#v4wu{LE|#38i0MpHw}4Xf&5mg zA2uoq>|#GSo8HcB)EN(n{tZfGwcGH`mY{B?q<9j&`corQRuzewK+n|ahrIjA(CUZX z8h~vuxtaYw0LQ_XX7z*cBDmA6c@SO&SDFnBLIr4PHaQ5-!R0i2g!c8ZbT<1ne>07C z=`8Fmu)d~R;LF(=n;?)<3_rl%%Q$NFdQQtMhYdV~@rDeqwdDZkm!b;$k#C&KTuq1@ z2|Ezqjd&UA{Rr0^dfs2_=||3Q%Y4o)Wiryb(D$PP*wT1-pYs^|hdmsGt>d8!a4C<` zA@~D^1@`9<9OzuK$fO=wMTC+s(AwNG;n{^mA`zaAR{?*Dz(RgNyF_JD!+qqBqwPc7 zAwG3oTGX2MBL#qP-Nu%#x@nz)m z?=8&dlJk5C{d4OY*wOdk0KF^tcJvEy!@LjYms7mu_+`f*K6fP&q;(2Zqt6i!{_}(y z^cw_La|I@(_uo5pqNA-N!2Z4hRpN&y0v&B_Odf{PO&n=?H^5#RhJRh5+`BLe@p6Pb zk3U`+uT^7zAtxaMYaD`Nc60=6A{YIcNSFi(4<&>OY%Mupy}_4}we@gI}+2T%Y2 delta 1183 zcmY*YT}V@57=FKZKOJj7M>ooTW@~0zgiV{3WKhzDh!=-{#X-3u!fq)59Gr? z#i<*tQj}Gh&%Ez{&k7@ReFhnP6#2E7d(NT9+-U^pG!E=MhfnQmod$r@gFo#6+B^oJ zCM_4#Uq7;0zt)UIhvc9l1sgNZ2OB!R)vHOT_67OIE?jwVzb@Mcl!-$LO|tjL)uiNa zeM@;-jjmCl&EEP(R8~#9XE_V>dgoLNHEGmZkjJ~whpUlK5VriFxlRwhvjL1KX>m8- zl@TSCdngY!q=QPT4fgo8mTWew4q0MzNa;xELLJpry{;-L7W0!p z9_8n+V43UqqzI7z&yriWKG%G`jk~U5174WqN3Y`6O&!mIs?ja3OQH@B|IGd&RkaXh zn~qp%*oAb1_I|KGr3xu*D{w#agRrn`%HlJZLc*fyRLk^tnZzVZvFSC%R{e zsMAKZlOlJ1kxbN0JWi|ATai1$2t@$WehCT`jRc=VT>MSM5o6hi zOEVU75*JDZeGC60MytF)-f|aXytoHTd0h`K=0|%ljcx;P>%}6on9uFt7kkl@CoW^T z1Hj0)bfbg6>_v;YjA~^L{!!?g>3K8hex7#^M;P$&dsu9$@c=C2zvz)Q4!HX83%ew5 T4@58!F$5yUK*V%AVvhX= VGA_HEIGHT) scroll + if (VGA_Y >= VGA_HEIGHT) scroll(1); move_cursor(VGA_X, VGA_Y); } @@ -79,7 +110,3 @@ void puts(const char* str) } } - - - - diff --git a/stdio.h b/stdio.h index 1266f81..a3a427f 100644 --- a/stdio.h +++ b/stdio.h @@ -13,6 +13,10 @@ void move_cursor(int x, int y); void putchar(int x, int y, char c); void puts(const char* str); void clear(void); -void putcolor(int x, int y, int color); +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); #endif