From 8d33440ceda227c8312bcf5bcc73fb81c8d338f2 Mon Sep 17 00:00:00 2001 From: xamidev <121681048+xamidev@users.noreply.github.com> Date: Sun, 19 May 2024 15:00:55 +0200 Subject: [PATCH] Add: working puts implementation --- bochslog.txt | 113 ++++++++++++++++++++++---------------------- iso/boot/kernel.elf | Bin 9524 -> 9708 bytes kernel.elf | Bin 9524 -> 9708 bytes kmain.c | 3 +- os.iso | Bin 485376 -> 485376 bytes stdio.c | 72 +++++++++++++++++++++++++--- stdio.h | 8 ++-- 7 files changed, 128 insertions(+), 68 deletions(-) diff --git a/bochslog.txt b/bochslog.txt index 570b6ef..817d9ae 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 0x7fb5595dc010. after alignment, vector=0x7fb5595dd000 +00000000000i[MEM0 ] allocated memory at 0x7f6755ddd010. after alignment, vector=0x7f6755dde000 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 0x55fee5417090 +00000000000i[ ] lt_dlhandle is 0x55b16dc75c30 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 0x55fee5bcce70 +00000000000i[ ] lt_dlhandle is 0x55b16e42bb40 00000000000i[PLUGIN] loaded plugin libbx_pci.so -00000000000i[ ] lt_dlhandle is 0x55fee5417170 +00000000000i[ ] lt_dlhandle is 0x55b16dc75d10 00000000000i[PLUGIN] loaded plugin libbx_pci2isa.so -00000000000i[ ] lt_dlhandle is 0x55fee5394f80 +00000000000i[ ] lt_dlhandle is 0x55b16dbf3de0 00000000000i[PLUGIN] loaded plugin libbx_usb_uhci.so -00000000000i[ ] lt_dlhandle is 0x55fee5431120 +00000000000i[ ] lt_dlhandle is 0x55b16dc90240 00000000000i[PLUGIN] loaded plugin libbx_acpi.so -00000000000i[ ] lt_dlhandle is 0x55fee5394380 +00000000000i[ ] lt_dlhandle is 0x55b16dbf31e0 00000000000i[PLUGIN] loaded plugin libbx_hpet.so -00000000000i[ ] lt_dlhandle is 0x55fee5bd7620 +00000000000i[ ] lt_dlhandle is 0x55b16e4362f0 00000000000i[PLUGIN] loaded plugin libbx_cmos.so -00000000000i[ ] lt_dlhandle is 0x55fee5bd7e30 +00000000000i[ ] lt_dlhandle is 0x55b16e436b00 00000000000i[PLUGIN] loaded plugin libbx_dma.so -00000000000i[ ] lt_dlhandle is 0x55fee5bd8640 +00000000000i[ ] lt_dlhandle is 0x55b16e437470 00000000000i[PLUGIN] loaded plugin libbx_pic.so -00000000000i[ ] lt_dlhandle is 0x55fee5bd8e00 +00000000000i[ ] lt_dlhandle is 0x55b16e437c30 00000000000i[PLUGIN] loaded plugin libbx_pit.so -00000000000i[ ] lt_dlhandle is 0x55fee5bd9820 +00000000000i[ ] lt_dlhandle is 0x55b16e438650 00000000000i[PLUGIN] loaded plugin libbx_vga.so -00000000000i[ ] lt_dlhandle is 0x55fee5bfae60 +00000000000i[ ] lt_dlhandle is 0x55b16e459c90 00000000000i[PLUGIN] loaded plugin libbx_floppy.so -00000000000i[ ] lt_dlhandle is 0x55fee5bfb6a0 +00000000000i[ ] lt_dlhandle is 0x55b16e45a4d0 00000000000i[PLUGIN] loaded plugin libbx_ioapic.so -00000000000i[ ] lt_dlhandle is 0x55fee5bfbeb0 +00000000000i[ ] lt_dlhandle is 0x55b16e45ace0 00000000000i[PLUGIN] loaded plugin libbx_keyboard.so -00000000000i[ ] lt_dlhandle is 0x55fee5bfc7b0 +00000000000i[ ] lt_dlhandle is 0x55b16e45b5e0 00000000000i[PLUGIN] loaded plugin libbx_harddrv.so -00000000000i[ ] lt_dlhandle is 0x55fee5bfe880 +00000000000i[ ] lt_dlhandle is 0x55b16e45d6b0 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 14:30:46 2024 (time0=1716121846) +00000000000i[CMOS ] Setting initial clock to: Sun May 19 15:00:39 2024 (time0=1716123639) 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 @@ -234,42 +234,41 @@ 00000000000i[PLUGIN] reset of 'usb_uhci' plugin device by virtual method 00000000000i[ ] set SIGINT handler to bx_debug_ctrlc_handler 00000004662i[BIOS ] $Revision: 14314 $ $Date: 2021-07-14 18:10:19 +0200 (Mi, 14. Jul 2021) $ -00000317812i[KBD ] reset-disable command received -00000318931i[PIDE ] BAR #4: i/o base address = 0xc000 -00000319158i[UHCI ] BAR #4: i/o base address = 0xc100 -00000324993i[P2ISA ] PCI IRQ routing: PIRQD# set to 0x0b -00000325009i[P2ISA ] write: ELCR2 = 0x08 -00000325029i[UHCI ] new IRQ line = 11 -00000325094i[P2ISA ] PCI IRQ routing: PIRQA# set to 0x0a -00000325110i[P2ISA ] write: ELCR2 = 0x0c -00000325130i[ACPI ] new IRQ line = 10 -00000443430i[VBIOS ] VGABios $Id: vgabios.c 288 2021-05-28 19:05:28Z vruppert $ -00000443501i[BXVGA ] VBE known Display Interface b0c0 -00000443533i[BXVGA ] VBE known Display Interface b0c5 -00000446176i[VBIOS ] VBE Bios $Id: vbe.c 292 2021-06-03 12:24:22Z vruppert $ -00004098346i[BIOS ] IDE time out -01047918503i[BIOS ] Booting from 07c0:0000 -01048013887i[BIOS ] int13_harddisk: function 41, unmapped device for ELDL=80 -01048017558i[BIOS ] int13_harddisk: function 08, unmapped device for ELDL=80 -01048021229i[BIOS ] *** int 15h function AX=00c0, BX=0000 not yet supported! -01206143903i[ ] Ctrl-C detected in signal handler. -01206143904i[ ] dbg: Quit -01206143904i[CPU0 ] CPU is in protected mode (active) -01206143904i[CPU0 ] CS.mode = 32 bit -01206143904i[CPU0 ] SS.mode = 32 bit -01206143904i[CPU0 ] EFER = 0x00000000 -01206143904i[CPU0 ] | EAX=0000002a EBX=0002cd80 ECX=00000008 EDX=001001a3 -01206143904i[CPU0 ] | ESP=00067ecc EBP=00067ee0 ESI=0002ced8 EDI=0002ced9 -01206143904i[CPU0 ] | IOPL=0 id vip vif ac vm rf nt of df if tf sf zf af pf cf -01206143904i[CPU0 ] | SEG sltr(index|ti|rpl) base limit G D -01206143904i[CPU0 ] | CS:0008( 0001| 0| 0) 00000000 ffffffff 1 1 -01206143904i[CPU0 ] | DS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 -01206143904i[CPU0 ] | SS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 -01206143904i[CPU0 ] | ES:0010( 0002| 0| 0) 00000000 ffffffff 1 1 -01206143904i[CPU0 ] | FS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 -01206143904i[CPU0 ] | GS:0010( 0002| 0| 0) 00000000 ffffffff 1 1 -01206143904i[CPU0 ] | EIP=001001bf (001001bf) -01206143904i[CPU0 ] | CR0=0x60000011 CR2=0x00000000 -01206143904i[CPU0 ] | CR3=0x00000000 CR4=0x00000000 -01206143904i[CMOS ] Last time is 1716123052 (Sun May 19 14:50:52 2024) -01206143904i[SIM ] quit_sim called with exit code 0 +00000317288i[KBD ] reset-disable command received +00000318445i[PIDE ] BAR #4: i/o base address = 0xc000 +00000318672i[UHCI ] BAR #4: i/o base address = 0xc100 +00000324507i[P2ISA ] PCI IRQ routing: PIRQD# set to 0x0b +00000324523i[P2ISA ] write: ELCR2 = 0x08 +00000324543i[UHCI ] new IRQ line = 11 +00000324608i[P2ISA ] PCI IRQ routing: PIRQA# set to 0x0a +00000324624i[P2ISA ] write: ELCR2 = 0x0c +00000324644i[ACPI ] new IRQ line = 10 +00000442944i[VBIOS ] VGABios $Id: vgabios.c 288 2021-05-28 19:05:28Z vruppert $ +00000443015i[BXVGA ] VBE known Display Interface b0c0 +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 diff --git a/iso/boot/kernel.elf b/iso/boot/kernel.elf index 3bbd49d15c261c46dcf04eec88597d0851677449..06a2b1dac85c1b88876118f0aff07a1047b3f4e3 100755 GIT binary patch literal 9708 zcmeHN?Q2_Q6hAjjUF^~(oAqUG;&m%pr@OSHzI2qgB6^g^phI|TBIFiOstE)^W5AfEgcBrw|nSw zpXZ$4Ip;ag@3}Yhx!gBZPm3f;WQvVSh_$*BH`SrPxy?Z8NCr|(<>VANx!KMaH)ZT3 zT4~-SvdIhqM-yJqAIReeZ)rU|TrKNh5NTHfmToa%F<>!ZF<>!ZF<>!ZF<>!ZF<>!Z zF<>!ZG4P)l@TYG1^f`OBvV`c&%s&; zZ{H2Z_81s@yA1E`1@9G}8x4ELtb(f!!B*PHHTd15{-tzgDVNKko=ZkG*SVVO(u8!? zbwOPkwPi&4+2=XR$x-+5*C!-thEuvTN0%3T8?>C6{H20uT3uw$XVqzSUJR79e=)7j z4^XE!8$t#8HRm|L%t&1^fP=8>hFw?ZCBap_Iv>BTtBcb3CV1AXi}A0fb-T>@FoW)p z#emXcl)9Q07-&MOQ}=iZ_c9aMz{;#ol=l+K!=gvkMb~9@QNLTJt<&$8YfsERQ%G*4 z#2Ql~_iTLun%%)+>GM2$>ZkO1uE%?@Gdm_`bmoiTNJcV-{tc5|KNH`yDsdt0T8sGl z@0E+d(z54~s5DUyYBymKt_$S4j9bO&%|0r~bL-en19*EP`CA6tnR&Ol%F&zdsP>=vj;edf+W-G5{5Ku*VQEs8}mvjKW9boTw2Aw+!u~SVr8Lt@I<&Q8a`QeG8T{Y zP=?pTo5EX|-cmK0wpUHszWi)6RJzyEd2?WUb_zGz>^i- z*oeDhtvcL@lYvhFH`m9t)xqY2ZLQjPDoZQ|ECwtFECwtFECwtFECwtFEC&832Hsk~ zB5`X|(=NH%A4*2Gq+DC8)G0MPYLh~(J-u_MQd9SA-n=4ADEPO2S?sisdvIAJVtvCZ z{gGArldJS<=;pbL5dT6E&iZcXd>%8*3%O<<@S#J3i^A{oi%Q(jc5Zo#F?uqKi@`M34IRxW6%v; zqD#>Edk8~+fWCz~kNkWN;{1Hhsx0#V5&BliO?*aU{04e?Ilql&p--S57B}#D^jnJJ z??A5w!skeiw_$^>ARo`e`a0E_b{2zz@1Lia9rNNq*(W3@vIH`5_ z1>@W&=um4z;0Of*BQL+G91m-O;qHLemy8Z7!4ZMAsqL+8UDO*AVX;UoF3hjCH+QvB zcO;BFYXpZzD3;Vh)YReW=%k_8iEyAh8BZXXC(jow5*;=uVGbhUD3OvlHKYYY=(V`f z_n9LtJfe}pS7q%f?~7qA0^3DOxG&Hf4-SP%=?Q8!II4;L z{WlkW!NFTDzSF@S!GAJd(wSo1DMU}fVEXa>C_lu{cR?6qc?He%>04@6s7y0pXZ-<|g9rD8Y zxSc}dUki~>#`jFJc#L5&#GLmuR4%6`Z)d;f@?-88GaIkLlsz&=Fz_!i-rtEinQQ+2 eETW(GYz6n6ATQ>Se^-nBj&37*$8 delta 1001 zcmZ9LUr1A76u{5D?vAT2@7*R6xN2^9M3FDiiv*G3APmu#gNP(8w{(@Gm46jg+6QOn-|w9BosZq@p|RS; z=EBE}2zvlv*Fc5aJjMcyu>-YR8E&-wju0JW0Js$aK+anF6E}bAx-Xtq7ZH~;qT=P1 zrq!2ee|+hPoGn#55bjOSAdQ(|+^fl1K2*{+UjU#MV-8D%M_w&Bq4L6b3X=_OZ)xs_ z(T>uBLBBU5LKN{0=#-I2teb05e_@boq+^>bN}Z_qOJhwdu{tg0UshtPx~?mJo|zNI z{VOpm{%RA8ruZ8)mg95sXF*Bi5ic*N7-qI`CcY38*ZN0|#RhReZ(1t>nD%OD!#9uO z*KkQ@Ru~82SqeSob%+nK4L7BglzzU31d9_O~5=QG_qOV5cgG!@h z`cB_Z&WdU!V%+uokk$MUlT4OuTgpK(NomC)rGb5Lzno@r^}a8mooaQCRN1#j9XVa6 zwNPEcUu6$$;%elAz*O2|G69Gf-j8w%FNJRYIPtd;#fo*^G_tOa4I70{4ELb4BGZg| z19S8ra~ohU3?X#vf5>M*^a3fAZR;*T-(w!-RgQeHmpx3Bo-ZC9ddCpP`H_9jkVWUd z=v};dGa@!%pdWP-|D^QTSQe7h5JjN-SiubUP@6DMuR!?`)Wd)I0+>X<`HwGRej5Es z>`!;6{2SEtBcO+NT>!A>P5P)5_=NflLw36ciPdc{Zs~#GN$8HWUknh@?XaB-cLh$I z>Wo|nN8oI@r8N*C_3ndgOAop1c9AFU!=y+m+mXZ%VC@*Q04gv*!)6q^VbY45kZPx$ z9G5I+y2G%QbVx4q2$~~SazkS8!j<*8?{Fr?4p;+|r|ulf3nN92+& IfNRwI4aE#CD*ylh diff --git a/kernel.elf b/kernel.elf index 3bbd49d15c261c46dcf04eec88597d0851677449..06a2b1dac85c1b88876118f0aff07a1047b3f4e3 100755 GIT binary patch literal 9708 zcmeHN?Q2_Q6hAjjUF^~(oAqUG;&m%pr@OSHzI2qgB6^g^phI|TBIFiOstE)^W5AfEgcBrw|nSw zpXZ$4Ip;ag@3}Yhx!gBZPm3f;WQvVSh_$*BH`SrPxy?Z8NCr|(<>VANx!KMaH)ZT3 zT4~-SvdIhqM-yJqAIReeZ)rU|TrKNh5NTHfmToa%F<>!ZF<>!ZF<>!ZF<>!ZF<>!Z zF<>!ZG4P)l@TYG1^f`OBvV`c&%s&; zZ{H2Z_81s@yA1E`1@9G}8x4ELtb(f!!B*PHHTd15{-tzgDVNKko=ZkG*SVVO(u8!? zbwOPkwPi&4+2=XR$x-+5*C!-thEuvTN0%3T8?>C6{H20uT3uw$XVqzSUJR79e=)7j z4^XE!8$t#8HRm|L%t&1^fP=8>hFw?ZCBap_Iv>BTtBcb3CV1AXi}A0fb-T>@FoW)p z#emXcl)9Q07-&MOQ}=iZ_c9aMz{;#ol=l+K!=gvkMb~9@QNLTJt<&$8YfsERQ%G*4 z#2Ql~_iTLun%%)+>GM2$>ZkO1uE%?@Gdm_`bmoiTNJcV-{tc5|KNH`yDsdt0T8sGl z@0E+d(z54~s5DUyYBymKt_$S4j9bO&%|0r~bL-en19*EP`CA6tnR&Ol%F&zdsP>=vj;edf+W-G5{5Ku*VQEs8}mvjKW9boTw2Aw+!u~SVr8Lt@I<&Q8a`QeG8T{Y zP=?pTo5EX|-cmK0wpUHszWi)6RJzyEd2?WUb_zGz>^i- z*oeDhtvcL@lYvhFH`m9t)xqY2ZLQjPDoZQ|ECwtFECwtFECwtFECwtFEC&832Hsk~ zB5`X|(=NH%A4*2Gq+DC8)G0MPYLh~(J-u_MQd9SA-n=4ADEPO2S?sisdvIAJVtvCZ z{gGArldJS<=;pbL5dT6E&iZcXd>%8*3%O<<@S#J3i^A{oi%Q(jc5Zo#F?uqKi@`M34IRxW6%v; zqD#>Edk8~+fWCz~kNkWN;{1Hhsx0#V5&BliO?*aU{04e?Ilql&p--S57B}#D^jnJJ z??A5w!skeiw_$^>ARo`e`a0E_b{2zz@1Lia9rNNq*(W3@vIH`5_ z1>@W&=um4z;0Of*BQL+G91m-O;qHLemy8Z7!4ZMAsqL+8UDO*AVX;UoF3hjCH+QvB zcO;BFYXpZzD3;Vh)YReW=%k_8iEyAh8BZXXC(jow5*;=uVGbhUD3OvlHKYYY=(V`f z_n9LtJfe}pS7q%f?~7qA0^3DOxG&Hf4-SP%=?Q8!II4;L z{WlkW!NFTDzSF@S!GAJd(wSo1DMU}fVEXa>C_lu{cR?6qc?He%>04@6s7y0pXZ-<|g9rD8Y zxSc}dUki~>#`jFJc#L5&#GLmuR4%6`Z)d;f@?-88GaIkLlsz&=Fz_!i-rtEinQQ+2 eETW(GYz6n6ATQ>Se^-nBj&37*$8 delta 1001 zcmZ9LUr1A76u{5D?vAT2@7*R6xN2^9M3FDiiv*G3APmu#gNP(8w{(@Gm46jg+6QOn-|w9BosZq@p|RS; z=EBE}2zvlv*Fc5aJjMcyu>-YR8E&-wju0JW0Js$aK+anF6E}bAx-Xtq7ZH~;qT=P1 zrq!2ee|+hPoGn#55bjOSAdQ(|+^fl1K2*{+UjU#MV-8D%M_w&Bq4L6b3X=_OZ)xs_ z(T>uBLBBU5LKN{0=#-I2teb05e_@boq+^>bN}Z_qOJhwdu{tg0UshtPx~?mJo|zNI z{VOpm{%RA8ruZ8)mg95sXF*Bi5ic*N7-qI`CcY38*ZN0|#RhReZ(1t>nD%OD!#9uO z*KkQ@Ru~82SqeSob%+nK4L7BglzzU31d9_O~5=QG_qOV5cgG!@h z`cB_Z&WdU!V%+uokk$MUlT4OuTgpK(NomC)rGb5Lzno@r^}a8mooaQCRN1#j9XVa6 zwNPEcUu6$$;%elAz*O2|G69Gf-j8w%FNJRYIPtd;#fo*^G_tOa4I70{4ELb4BGZg| z19S8ra~ohU3?X#vf5>M*^a3fAZR;*T-(w!-RgQeHmpx3Bo-ZC9ddCpP`H_9jkVWUd z=v};dGa@!%pdWP-|D^QTSQe7h5JjN-SiubUP@6DMuR!?`)Wd)I0+>X<`HwGRej5Es z>`!;6{2SEtBcO+NT>!A>P5P)5_=NflLw36ciPdc{Zs~#GN$8HWUknh@?XaB-cLh$I z>Wo|nN8oI@r8N*C_3ndgOAop1c9AFU!=y+m+mXZ%VC@*Q04gv*!)6q^VbY45kZPx$ z9G5I+y2G%QbVx4q2$~~SazkS8!j<*8?{Fr?4p;+|r|ulf3nN92+& IfNRwI4aE#CD*ylh diff --git a/kmain.c b/kmain.c index ecddbdb..ad503d5 100644 --- a/kmain.c +++ b/kmain.c @@ -2,6 +2,7 @@ int kmain(int retvalue) { - write("hello"); + clear(); + puts("hello\nbrave\nnew\nworld"); return retvalue; } diff --git a/os.iso b/os.iso index c5b96f1b60e109d69e962098dbef6b4563ddaba8..4e4617ffe90f6c901e5dae602d13838a8208f830 100644 GIT binary patch delta 1868 zcmZ`(eN0=?)-iUnb_*))K>jG0Bsr`sQdQC7wfVJU^N#Mt3e z()xmF)|fjM4f7v^z_g$NX53O>1Qt!~j5GVg%|y54B{YUC4MAnpbKe774Bqti-gADx z^SkGq``$Yr&Nv^=2<{i2D7IQ(v{|jXLTh1>wYb1mAUgs_g$#|n`>I2D;boNx03^ffQZ z#N5YJ&Di=A=t#$aD%{{qQ~XNHjHEM7h5)p;-e%Y#1!HWJ!p@7cw=h!_ zzh7)vyE#|q@jVbCYRLgkO&Lp~j`P;7iT<@%ECvZ(Rnl2x=`7+9o;6MKYhL1qNZ$kL zITod7QUAjiLKugcBL1&RSNR)TJ zSy9HIQ6P10-NVk{Hkz@KV2zyM0Z0(a_VQ8Fbv`PrCcBe_Rf9WYDL1aJXhM}fS$xSB zhnAjaVPb$C@4F=iSVH!yYH46yu4*HTkOx8;y#zUzl8^?y*Ft!oi$v(j>gdyWLJ>;@C9S61I| z%ai8U=(RzT>$wb1Q~~ps8g=iJGJ~dEP@SHi)2rdF;lN!2^J7R2OnF$~zZT{o#Pu^z zLL7NV2}}ofFU-GzV@u?8&&#?DzX;R(C`N}a!OLa=V;bf&(6Av`w}?_j)B^5bV15dm zd04k_uEh^V@RXFnWo~ycE64(P2=L8$x0%y(CCzptKC&k0$S8`BAe;X#Rc&4BU zOeqCq2Vm_dar*+;dMk&R(ql*`my`|P9yU^l3Vi|VF0d6GqpJ+yHf=5X7R+VPFNBrp zv#QJq{2vhVpe)QG))Gdz4Xfqf0|;6II|K=_!2!MuYkGpf3fKjJuzOsI%McK(AIF zt*l0Gb@n(Lo4Z|I5X@9iduP*0XOg0HjD9piDzJmz8zH;t-4UXrc$8Gp+EHRA78Pw9 zC7D{*GfOJ{aFk^2U>B5~ijbO?4wF>+{V36E_knL;D!m7IatZ890JmeBJVtsjNBhP| rB|(J#I7YIxhq4gbgXv$eCk=b2GOv(4(jSDMsz0di4{AOOYN!7JQq&GZ delta 1252 zcmZ9LZ)j6j6u{3t$$LC)miN+@I!LRvwv3Ir#Ttbo8><+QF{yTq=vZ01*{I#tVw~C! zj?_KYz4&ls1a{dfOo(VPDWp!?!p4@GiWNUBoeo6yw@mh6Wvlo;^h0TOZeF{^T{t=a ze&?KfE_s86y1_zScDr5^+!_dO4+NCvKyxs#ZA;6RQXu(?UMH2TFZ=Z8UvPQXKbO3a z+fhwgIW1L{DTpT7%!Z_Q>Tn4fnA%@imR(`TSiO98W;gQ&n}AMJ(1|Da-zua1tDVQ# zPWft~lTkx|vTODrHC)MUauB~V#$7~Lft%!O2yhMg%LcAz z(!@~%zffbG0Z5A~fIjazm-y^qvDhBZTXR&TPitmKF*}!T<-_p@uj=#FRv*D<^0$em zOe7w%^?9Y&d*rSQz^b4em8cUTJ2GV{>UfTldyo7ea(_GR1g$#sPfkRQ5&jr@!$~B{ z=6bA06qGu|*iMhRM>E6KM(3ij$2P(Xrm<8k7R|82X4UcVqT!=oduq-dzeC1Cd{+NW zH4`Nyr06-u3Ttl1?;F}`|CqBFrvYd3win=L$R->9Y%;?(Ey)V%IH=#`$YbC4D!sV3 z-8xJIX;VF9GkUb*3B{_V3W~IZ?9(#|r*$N8c2}bkF*_RFe~I_g=QV3HVbaH?Axotp zZk<2)9P9jGx*PLmZDSrVJL(sy<+k?Ud!MmdmwC%DJ{7B7E*3>Kw0e~fapx1#F5T60 zBkys$0W=D~L^4d*BDZwv>9>Q#M|Gz}q^u76ox*ww50D%pri=7r%z^)y^8h>G0zt3+ zA8L0Xae*AkhO!HY7r9IF-7^1q7;7dH=kZv@nD!&%Yy^M7ZyBE(!53o}>GoZORRV)^ zq*L^V6{ivrQo_(Q5IgxmhD)T~lo!_!e1`Ppe|Z;NC%CJ{LR!~>@WB`q{Rmz zj_7(HpsHkwhZVrDq~B(|`3iFGOJh|<_W(rRgj3O@@AYskjkT5U_Mhx|0KcBWlT6|*qu7RnjGrCF2I*_+`-jtJdK5J& g)d293@YhW&kdL2elS5e?%DRTK?xC!7DJxI@1FCIuJpcdz diff --git a/stdio.c b/stdio.c index 7ec7474..a855291 100644 --- a/stdio.c +++ b/stdio.c @@ -3,25 +3,83 @@ #include "string.h" char* fb = (char *) 0x000B8000; +const unsigned VGA_WIDTH = 80; +const unsigned VGA_HEIGHT = 25; +const unsigned int COLOR = 0x7; +unsigned int VGA_X = 0, VGA_Y = 0; -void move_cursor(unsigned short pos) +void move_cursor(int x, int y) { + unsigned short pos = y*VGA_WIDTH+x; + outb(FB_CMD_PORT, FB_HIGH_BYTE_CMD); outb(FB_DATA_PORT, ((pos >> 8) & 0x00FF)); outb(FB_CMD_PORT, FB_LOW_BYTE_CMD); outb(FB_DATA_PORT, pos & 0x00FF); } -void putchar(unsigned int i, char c, unsigned char fg, unsigned char bg) +void putchar(int x, int y, char c) { - fb[i] = c; - fb [i+1] = ((fg & 0x0F) << 4 | (bg & 0x0F)); + fb[2*(y*VGA_WIDTH+x)] = c; } -void write(char *buf) +void putcolor(int x, int y, int color) { - for (int i=0; i= VGA_WIDTH) + { + VGA_Y++; + VGA_X = 0; + } + //if (VGA_Y >= VGA_HEIGHT) scroll + + move_cursor(VGA_X, VGA_Y); +} + +void puts(const char* str) +{ + while (*str) + { + putc(*str); + str++; } } + + + + + diff --git a/stdio.h b/stdio.h index fa0b61d..1266f81 100644 --- a/stdio.h +++ b/stdio.h @@ -9,8 +9,10 @@ #define FB_HIGH_BYTE_CMD 14 #define FB_LOW_BYTE_CMD 15 -void move_cursor(unsigned short pos); -void putchar(unsigned int i, char c, unsigned char fg, unsigned char bg); -void write(char *buf); +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); #endif