From 8d9002d3ca3b0494ab3ef02bd6788fdc34fb0957 Mon Sep 17 00:00:00 2001 From: SpookyDervish Date: Wed, 28 Jan 2026 10:33:13 +1100 Subject: [PATCH] print integers and doubles still need to add hex but i gtg so ill do that later --- OVMFbin/OVMF_VARS-pure-efi.fd | Bin 131072 -> 131072 bytes kernel/bin/CustomOS.img | Bin 48000000 -> 48000000 bytes kernel/bin/kernel.elf | Bin 9560 -> 10000 bytes kernel/lib/cstr.o | Bin 0 -> 3016 bytes kernel/lib/kernel.o | Bin 1824 -> 2160 bytes kernel/src/cstr.cpp | 90 ++++++++++++++++++++++++++++++++++ kernel/src/cstr.h | 6 +++ kernel/src/kernel.cpp | 7 ++- 8 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 kernel/lib/cstr.o create mode 100644 kernel/src/cstr.cpp create mode 100644 kernel/src/cstr.h diff --git a/OVMFbin/OVMF_VARS-pure-efi.fd b/OVMFbin/OVMF_VARS-pure-efi.fd index f68160999ced675b81246b26150b7411e611bfbc..344dbbec0817138266bcb74fa06dbf0edfe31189 100644 GIT binary patch delta 75 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 diff --git a/kernel/bin/kernel.elf b/kernel/bin/kernel.elf index 4615a03771abbd32a57a17fb6967cdbac1f6fd50..a0de7ed70b97f7994f15efdc4bde1f5a60bb5ea8 100755 GIT binary patch literal 10000 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 diff --git a/kernel/lib/cstr.o b/kernel/lib/cstr.o new file mode 100644 index 0000000000000000000000000000000000000000..2e7992654cba6450c0e9acd6d9391cf8de1f5249 GIT binary patch literal 3016 zcmbtV&2Jl35TCU}lR(mS5CudL@&O_O>EZ-|XjD-{wDcV)RHYUlN@X0!P6}~st=BZE zRBFixY*kS?!ifu~{sB2~Kz3T0wgSmgiWNGPU3B6Xa`d`M>IeK_lF96mbI?#%nm z{AT9OduyLFUwy@+X`n=d7h!v)Pyp7mZ3np-guT!YAy)XA70y=6W*yjhv&sr)V{H(v z2K(x}Z-ua}pID*7N>wj;^(C{OD{6VO&T?lPy{E62%}rRd*!iPX2c>X@Sf!gtLFSJh zrd60$WJ4uZxRwuX@lrb%sA7SwMHbMPLUlAZhn87%nJw<4rt^J1f_V8&EMM(C{mFkS zd>iSvcTG-vW1q=-l;-c^QDnozO1~e*v9qBHo}Xj98#s)*w*1dS)-S}H&F25? z%rWxa3WkKUvitaRzXodhfVom=R~KNVGqBUTChz_1}td{TXxR zg9mx+hW=qcg~jzZOFYfmLv#`KB_FEwypQF~s)nz1O~CL`G4lht%3yFWTy=c)CW}T!po_5Ifqy7rzrV{cYi+NJNK=xniKOEb6r|XF3d$>3B&zomGC{SIHVP zZ&+W5j?~4xdWp6qC94df9}mKj@$oVLlSf_)4f#i&Ge(UO|7c+J`M^lvSsv1bZ$CcN zECzuGv?5{ZH$;=`Uc^Wq5DK(2$3dI-Y5V)Sdp^bBM-iuo3^inzmNN+>kdVsU2v;;hXVm`YZvWaFW+rDb}udmFq4w3G#*2J zzatOd8)En2L-ASEBw79j7)DL;Dvs|Ju`zsjergyc%ijRUP*eOxj{x}I$&99L%ZR2@ zkU2GHpGbz^u&q;b)30ajRK|wzI|uD#7$Xo$w5?`gDw&y_jqS#mngO^d%Hes_`~d#K z51gc1_UFb`UvB(~4)M%^@4@_kiu6rg?voVZs&2Le{&@%d%MSQ8iPN6C9r?d^#M57) zs(Z_UdmZ=$El|i!W*;q3zINcwJbvyK@iHYxf-YR$i+5ePI)57(+ zn~fNDY~BWADq=^#m`ta^u##dCO(qhtIrPmX?U;ez@`1D+iM}t_({mXkWhGNF%U(bZ zWs1#&<5naQlbzh1@*|y&oX*rKLAkgr=cat}dZ;DrM~luZ*g}Nyf=qZ!66m`llV(ry zuuw3Fns8Sc=%S=Mh`T<0x0KV(?~(khi{N+V9Kkh(IM1F!6kqj87>Q4)*83n@#1FI( zVfbZz_1mi4svV_YMu)Oh4CzDva{tFMmcAEv|3S%j_oe1fHAvpWhw8ieDaoIwAcwg5 zbPFjo=!hXRPfejPq4@7E{TC^|n(I!riBgsI*Cn66V}jg#%IQ9PqO9~S7iUTgG;8H|2Ll?pI86@ literal 0 HcmV?d00001 diff --git a/kernel/lib/kernel.o b/kernel/lib/kernel.o index 8546a3baa41cace749fb3f089de5f901aed8d294..c2b5c75debcde403f57437b442bade1bee1d5120 100644 GIT binary patch delta 621 zcmZ3$_d#HS2Ga+YiCV$+`xR~oF}z>^0*}r^9=)y)_Wl3=AILrq7CY|x03>zX^@$Kj z#qr}0)ZhLmLbVD=bvG+W?|vpAk>2>52Xk&8bWn((S!_F~zA+ywE0T!0YHH4V zOriCbCHe8iB}JKe>A4K?QGSNTPKm{t$w8@kDXB%NMWz8jnG)Bm0Pkd=EJAG#3NIxC zWIux?m}FpJ0n%(h{0A5~AmEH7&W)6{{VS4OBU+29pEhk%Nja> z)B^#K&%g}CfBr*2AV?4hSb&%vh+*Psn+;jy85wgX2eO)T&H(8Gf`rKvS!vD-0nO!j2AXZpc3 lxr^P7D}fQB?*PN(OYCNx3Q&6rCkt|zb83Lx2?Qk|GXeC7O3(lR diff --git a/kernel/src/cstr.cpp b/kernel/src/cstr.cpp new file mode 100644 index 0000000..7916ca4 --- /dev/null +++ b/kernel/src/cstr.cpp @@ -0,0 +1,90 @@ +#include "cstr.h" + +char uintTo_StringOutput[128]; +const char* to_string(uint64_t value) { + uint8_t size = 0; + uint64_t sizeTest = value; + + while (sizeTest / 10 > 0) { + sizeTest /= 10; + size++; + } + + uint8_t index = 0; + while (value / 10 > 0) { + uint8_t remainder = value % 10; + value /= 10; + uintTo_StringOutput[size - index] = remainder + '0'; + index++; + } + + uint8_t remainder = value % 10; + uintTo_StringOutput[size - index] = remainder + '0'; + uintTo_StringOutput[size + 1] = 0; + + return uintTo_StringOutput; +} + +char intTo_StringOutput[128]; +const char* to_string(int64_t value) { + uint8_t isNegative = 0; + + if (value < 0) { + isNegative = 1; + value *= -1; + intTo_StringOutput[0] = '-'; + } + + uint8_t size = 0; + uint64_t sizeTest = value; + + while (sizeTest / 10 > 0) { + sizeTest /= 10; + size++; + } + + uint8_t index = 0; + while (value / 10 > 0) { + uint8_t remainder = value % 10; + value /= 10; + intTo_StringOutput[isNegative + size - index] = remainder + '0'; + index++; + } + + uint8_t remainder = value % 10; + intTo_StringOutput[isNegative + size - index] = remainder + '0'; + intTo_StringOutput[isNegative + size + 1] = 0; + + return intTo_StringOutput; +} + +char doubleTo_StringOutput[128]; +const char* to_string(double value, uint8_t decimalPlaces) { + char* intPtr = (char*)to_string((int64_t)value); + char* doublePtr = doubleTo_StringOutput; + + if (value < 0) { + value *= -1; + } + + while (*intPtr != 0) { + *doublePtr = *intPtr; + intPtr++; + doublePtr++; + } + + *doublePtr = '.'; + doublePtr++; + + double newValue = value - (int)value; // get only the decimal places + + for (uint8_t i = 0; i < decimalPlaces; i++) { + newValue *= 10; + *doublePtr = (int)newValue + '0'; + newValue -= (int)newValue; + doublePtr++; + } + + *doublePtr = 0; + return doubleTo_StringOutput; +} \ No newline at end of file diff --git a/kernel/src/cstr.h b/kernel/src/cstr.h new file mode 100644 index 0000000..eca6b26 --- /dev/null +++ b/kernel/src/cstr.h @@ -0,0 +1,6 @@ +#pragma once +#include + +const char* to_string(uint64_t value); +const char* to_string(int64_t value); +const char* to_string(double value, uint8_t decimalPlaces); \ No newline at end of file diff --git a/kernel/src/kernel.cpp b/kernel/src/kernel.cpp index 06b55af..beb83ce 100644 --- a/kernel/src/kernel.cpp +++ b/kernel/src/kernel.cpp @@ -1,6 +1,7 @@ #include #include #include "BasicRenderer.h" +#include "cstr.h" // supposed to protect against stack smashing but we have no way to actually like @@ -11,7 +12,11 @@ extern "C" void __stack_chk_fail(void) { extern "C" void _start(Framebuffer* framebuffer, PSF1_FONT* psf1_Font) { BasicRenderer newRenderer = BasicRenderer(framebuffer, psf1_Font); - newRenderer.Print(0xFFFFFF, "Hello, World!"); + newRenderer.Print(0xFFFFFF, to_string((uint64_t)1234976)); + newRenderer.cursorPosition = {0, 18}; + newRenderer.Print(0xFFFFFF, to_string((int64_t)-1234976)); + newRenderer.cursorPosition = {0, 36}; + newRenderer.Print(0xFFFFFF, to_string(3.141, 2)); return; } \ No newline at end of file