From 48efc0e2f0a1fe54567a11d74fee884b330eec23 Mon Sep 17 00:00:00 2001 From: zeb33n Date: Wed, 18 Dec 2024 19:29:51 +0000 Subject: [PATCH 01/32] restarting the project --- boot.bin | Bin 512 -> 512 bytes src/one.asm | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 src/one.asm diff --git a/boot.bin b/boot.bin index 8061b669dab5b22639ec9ed42c288ff4ea782943..22002acc7e70b956afd8baf40bef645c95b99521 100644 GIT binary patch literal 512 zcmXpwu-l|&1J_xBEevPHw(y-5=wNrY;Vof${T?X3g%2cSaI%ZthN0v-P>$dE_2<|B M7)HS`34zd60Ao)V<^TWy literal 512 zcmdnPz|i@03&UA48{QK3EqrGM0$zXIz|i?7AibMKrTGohS%Kys3?)pjKfJ!hFbalS I2!yTz0K2Uez5oCK diff --git a/src/one.asm b/src/one.asm new file mode 100644 index 0000000..11e1f10 --- /dev/null +++ b/src/one.asm @@ -0,0 +1,58 @@ +[org 0x7c00] + +xor al, al ; set al to 0 +main: + mov bx, string ; pointer to bx + mov al, 10 ; newline character + int 0x10 ; print interupt + + loop: + mov ah, 0 + int 0x16 ; wait for keypress + + mov ah, 0x0e ; teletype mode + int 0x10 + + mov [bx], al + inc bx + + cmp al, 0x0D ; enter key + je printBuffer + + ;need to compare size of buffer with offset + + jmp loop + +printBuffer: + + mov bx, string + mov ah, 0x0e + + mov al, 10 ; newline character + int 0x10 + + xor cl, cl; initialise register for cleaning buffer + ploop: + mov al, [bx] + + cmp al, 0 ; if end of string + je main + + int 0x10 ;print + + mov [bx], cl ;reset buffer needs to use a register to know size + inc bx + + jmp ploop + + + + +jmp $ + + +string: ; buffer for input + times 50 db 0 + +times 510 - ($ - $$) db 0 ;510 bytes minus previous code define as 0 +db 0x55, 0xaa ;special code that defines boot sector From fd1108a1cd4a3626051e33d9217f4b91256331d6 Mon Sep 17 00:00:00 2001 From: zeb33n Date: Wed, 18 Dec 2024 19:40:56 +0000 Subject: [PATCH 02/32] lets be carful we dont overwrite the buffer lololo --- boot.bin | Bin 512 -> 512 bytes src/one.asm | 10 +++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/boot.bin b/boot.bin index 22002acc7e70b956afd8baf40bef645c95b99521..d17b1f37279a61c0ac567eb0a65c05d2a9746c5b 100644 GIT binary patch literal 512 zcmXpwu-l<#3*QE=vjS%YHrN5N!dZbW3}?l*@SPRtV0X6REn#~79t_exn@; literal 512 zcmXpwu-l|&1J_xBEevPHw(y-5=wNrY;Vof${T?X3g%2cSaI%ZthN0v-P>$dE_2<|B M7)HS`34zd60Ao)V<^TWy diff --git a/src/one.asm b/src/one.asm index 11e1f10..ca29d7d 100644 --- a/src/one.asm +++ b/src/one.asm @@ -1,10 +1,18 @@ -[org 0x7c00] +[org 0x7c00] ; set required offset for dereferencing characters from buffers xor al, al ; set al to 0 + main: mov bx, string ; pointer to bx + + mov ah, 0x0e ; teletype mode mov al, 10 ; newline character int 0x10 ; print interupt + int 0x10 + mov al, '>' + int 0x10 + mov al, ' ' + int 0x10 loop: mov ah, 0 From 6d5e04ebc86d2d74867cbc324d3c6bfdb2f84fe4 Mon Sep 17 00:00:00 2001 From: zeb33n Date: Wed, 18 Dec 2024 19:44:26 +0000 Subject: [PATCH 03/32] nice changes --- src/one.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/one.asm b/src/one.asm index ca29d7d..582fc59 100644 --- a/src/one.asm +++ b/src/one.asm @@ -32,7 +32,6 @@ main: jmp loop printBuffer: - mov bx, string mov ah, 0x0e @@ -40,6 +39,7 @@ printBuffer: int 0x10 xor cl, cl; initialise register for cleaning buffer + ploop: mov al, [bx] From 0721d3b0d042284c1438d8ae3195baee6c16b688 Mon Sep 17 00:00:00 2001 From: zeb33n Date: Wed, 18 Dec 2024 20:16:15 +0000 Subject: [PATCH 04/32] getting there with the stack --- boot.bin | Bin 512 -> 512 bytes src/two.asm | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 src/two.asm diff --git a/boot.bin b/boot.bin index d17b1f37279a61c0ac567eb0a65c05d2a9746c5b..d650fcad13d5f6fbbc65d28d31dc12cf8334166c 100644 GIT binary patch literal 512 zcmXpw(D`Ny-v+L;0%rv_*a5M^S%EDKXT`SgofWX*EnyCL{ShMF`L2t_@>$8nvjWZU S7+-&W{f}W34EYcUT?GKe038hg literal 512 zcmXpwu-l<#3*QE=vjS%YHrN5N!dZbW3}?l*@SPRtV0X6REn#~79t_exn@; diff --git a/src/two.asm b/src/two.asm new file mode 100644 index 0000000..0db7a50 --- /dev/null +++ b/src/two.asm @@ -0,0 +1,60 @@ +; [org 0x7c00] ; set required offset for dereferencing characters from buffers + +; lets refactor this to use the stack instead of a buffer + +xor al, al ; set al to 0 + +main: + mov sp, bp; reset the stack + + mov ah, 0x0e ; teletype mode + mov al, 10 ; newline character + int 0x10 ; print interupt + int 0x10 + mov al, '>' + int 0x10 + mov al, ' ' + int 0x10 + + loop: + mov ah, 0 + int 0x16 ; wait for keypress + + mov ah, 0x0e ; teletype mode + int 0x10 + + cmp al, 0x0D ; enter key + je printBuffer + + push ax + + jmp loop + +printBuffer: + mov ah, 0x0e + + mov al, 10 ; newline character + int 0x10 + + mov si, bp ;source index + + ploop: + mov al, [si] + + cmp si, sp ; if end of string + je main + + int 0x10 ;print + + sub si, 1 + + jmp ploop + + + + +jmp $ + + +times 510 - ($ - $$) db 0 ;510 bytes minus previous code define as 0 +db 0x55, 0xaa ;special code that defines boot sector From 52c0805a950bb06f134cc7a1fb2607e90b0a526e Mon Sep 17 00:00:00 2001 From: zeb33n Date: Thu, 19 Dec 2024 10:57:04 +0000 Subject: [PATCH 05/32] nice changes --- boot.bin | Bin 512 -> 512 bytes src/two.asm | 23 ++++++++++++----------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/boot.bin b/boot.bin index d650fcad13d5f6fbbc65d28d31dc12cf8334166c..dbda28718102838e96b458d5eae3dabe1018cd21 100644 GIT binary patch literal 512 zcmXp!(D`Ny-v-{Z0vou_3IItvAXYdlVDRLu*cQIC0yexQtOid4UVj8C0xIZyXZft; Zbn`o=E|#+buRp*3$1n$8nvjWZU S7+-&W{f}W34EYcUT?GKe038hg diff --git a/src/two.asm b/src/two.asm index 0db7a50..f018ff9 100644 --- a/src/two.asm +++ b/src/two.asm @@ -1,13 +1,13 @@ -; [org 0x7c00] ; set required offset for dereferencing characters from buffers - -; lets refactor this to use the stack instead of a buffer - -xor al, al ; set al to 0 +[org 0x7c00] ; set required offset for dereferencing characters from buffers main: + xor ax, ax mov sp, bp; reset the stack mov ah, 0x0e ; teletype mode + mov al, 0dh ; for some reason need carrage return here + int 0x10 ; i.e move the cursor to the left + mov al, 10 ; newline character int 0x10 ; print interupt int 0x10 @@ -16,8 +16,9 @@ main: mov al, ' ' int 0x10 + xor ah, ah ;clear ah + loop: - mov ah, 0 int 0x16 ; wait for keypress mov ah, 0x0e ; teletype mode @@ -26,27 +27,27 @@ main: cmp al, 0x0D ; enter key je printBuffer + xor ah, ah ;clear ah push ax jmp loop printBuffer: mov ah, 0x0e - mov al, 10 ; newline character int 0x10 mov si, bp ;source index ploop: - mov al, [si] - cmp si, sp ; if end of string je main + + sub si, 2 ;move pointer + + mov al, [si] int 0x10 ;print - - sub si, 1 jmp ploop From 462add570e0cc9454eddc739a00aa25d44663b04 Mon Sep 17 00:00:00 2001 From: zeb33n Date: Thu, 19 Dec 2024 16:05:37 +0000 Subject: [PATCH 06/32] welcome to zeb os --- boot.bin | Bin 512 -> 512 bytes src/disk.asm | 62 +++++++++++++++++++++++++++ src/protectedmode.asm | 95 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 157 insertions(+) create mode 100644 src/disk.asm create mode 100644 src/protectedmode.asm diff --git a/boot.bin b/boot.bin index dbda28718102838e96b458d5eae3dabe1018cd21..c64df1c2201858340183526b412584e1ba456646 100644 GIT binary patch literal 512 zcmeAW>#O<2&nRYG!>@24t@#8aztVwMmNgsf&hl$xtE+lyU&dH5?Ua s`1_%R>Gg}P6J9@g{jWSVCpkYiRiPwbAu2V=KUfiF<0wt15C~lb0Kj`U`2YX_ literal 512 zcmXp!(D`Ny-v-{Z0vou_3IItvAXYdlVDRLu*cQIC0yexQtOid4UVj8C0xIZyXZft; Zbn`o=E|#+buRp*3$1n Date: Thu, 19 Dec 2024 17:59:08 +0000 Subject: [PATCH 07/32] added proper boot loader --- boot.asm | 47 -------- bootBuffer.asm | 21 ---- boot_0.asm | 17 --- buildcrosscompiler.sh | 50 ++++++++ ourSolution.asm | 33 ------ pchar.bin | 0 src/bootloader/Binaries/OS.bin | Bin 0 -> 10832 bytes boot.bin => src/bootloader/Binaries/boot.bin | Bin 512 -> 512 bytes src/bootloader/Binaries/full_kernel.bin | Bin 0 -> 80 bytes src/bootloader/Binaries/kernel.o | Bin 0 -> 1740 bytes src/bootloader/Binaries/kernel_entry.o | Bin 0 -> 480 bytes src/bootloader/Binaries/zeroes.bin | Bin 0 -> 10240 bytes src/bootloader/boot.asm | 115 +++++++++++++++++++ src/bootloader/kernel.cpp | 6 + src/bootloader/kernel_entry.asm | 5 + src/bootloader/run.sh | 14 +++ src/bootloader/zeroes.asm | 1 + src/protectedmode.asm | 2 +- src/two.asm | 1 - zeb_alphabet.asm | 23 ---- 20 files changed, 192 insertions(+), 143 deletions(-) delete mode 100644 boot.asm delete mode 100644 bootBuffer.asm delete mode 100644 boot_0.asm create mode 100644 buildcrosscompiler.sh delete mode 100644 ourSolution.asm delete mode 100644 pchar.bin create mode 100644 src/bootloader/Binaries/OS.bin rename boot.bin => src/bootloader/Binaries/boot.bin (62%) create mode 100755 src/bootloader/Binaries/full_kernel.bin create mode 100644 src/bootloader/Binaries/kernel.o create mode 100644 src/bootloader/Binaries/kernel_entry.o create mode 100644 src/bootloader/Binaries/zeroes.bin create mode 100644 src/bootloader/boot.asm create mode 100644 src/bootloader/kernel.cpp create mode 100644 src/bootloader/kernel_entry.asm create mode 100644 src/bootloader/run.sh create mode 100644 src/bootloader/zeroes.asm delete mode 100644 zeb_alphabet.asm diff --git a/boot.asm b/boot.asm deleted file mode 100644 index 1b29f5e..0000000 --- a/boot.asm +++ /dev/null @@ -1,47 +0,0 @@ -[org 0x7c00] - -; create the buffer - -; create 1 bit buffer - -; record keys -; if key is enter -; print buffer -; add char to buffer -; increment buffer pointer - - -mov bx, buffer ; initialise buffer - -start: - mov ah, 0 ; i dont understand this - int 0x16 ; record keys - cmp al, 0x0D ; representation of enter key - je printBuffer - mov ah, 0x0e - int 0x10 - mov [bx], al - inc bx - jmp start - -printBuffer: - mov bx, buffer - mov ah, 0x0e - loop: - mov al, [bx] - cmp al, 0 - je exit - int 0x10 ;print - inc bx - jmp loop - - -exit: - mov bx, buffer - jmp start - -buffer: - db 0 - -times 510 - ($-$$) db 0 -db 0x55, 0xaa diff --git a/bootBuffer.asm b/bootBuffer.asm deleted file mode 100644 index 51c2430..0000000 --- a/bootBuffer.asm +++ /dev/null @@ -1,21 +0,0 @@ -[org 0x7c00] -jmp 0x0000:start - -char: - db 0 - - -start: - mov ah, 0 - int 0x16 ; type interupt - mov [char], al ; moves al into char - - mov ah, 0x0e ;moves ax into teletype - mov al, [char] ; char into al - int 0x10 ; prints - - jmp start ; restarts - - times 510-($-$$) db 0 - db 0x55, 0xaa -jmp $ \ No newline at end of file diff --git a/boot_0.asm b/boot_0.asm deleted file mode 100644 index c248629..0000000 --- a/boot_0.asm +++ /dev/null @@ -1,17 +0,0 @@ -; add to ~/.bashrc alias sto='cd ~/workspaces/github.com/lregs/os && nasm boot.asm -f bin -o boot.bin && qemu-system-x86_64 -drive format=raw,file=boot.bin -nographic' -section .text - global_start - -_start: - mov ah, 0x0e -loop: - inc al - cmp al, 'Z' + 1 - je exit - int 0x10 - jmp loop -exit: - jmp $ - -times 510-($-$$) db 0 -db 0x55, 0xaa \ No newline at end of file diff --git a/buildcrosscompiler.sh b/buildcrosscompiler.sh new file mode 100644 index 0000000..e91c627 --- /dev/null +++ b/buildcrosscompiler.sh @@ -0,0 +1,50 @@ +# nasm and qemu +sudo dnf install nasm +sudo dnf install qemu +sudo dnf install qemu-kvm + +# GCC cross compiler for i386 systems (might take quite some time, prepare food) + +sudo dnf update +sudo dnf install gcc gcc-c++ make +sudo dnf install bison +sudo dnf install flex +sudo dnf install libgmp3-devel +sudo dnf install libmpc-devel +sudo dnf install libmpfr-devel +sudo dnf install texinfo + +#cURL (needed to clone some required files) +sudo dnf install curl + +export PREFIX="/usr/local/i386elfgcc" +export TARGET=i386-elf +export PATH="$PREFIX/bin:$PATH" + +mkdir /tmp/src +cd /tmp/src +curl -O http://ftp.gnu.org/gnu/binutils/binutils-2.39.tar.gz +tar xf binutils-2.39.tar.gz +mkdir binutils-build +cd binutils-build +../binutils-2.39/configure --target=$TARGET --enable-interwork --enable-multilib --disable-nls --disable-werror --prefix=$PREFIX 2>&1 | tee configure.log +sudo make all install 2>&1 | tee make.log + +cd /tmp/src +curl -O https://ftp.gnu.org/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.gz +tar xf gcc-12.2.0.tar.gz +mkdir gcc-build +cd gcc-build +echo Configure: . . . . . . . +../gcc-12.2.0/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --disable-libssp --enable-language=c,c++ --without-headers +echo MAKE ALL-GCC: +sudo make all-gcc +echo MAKE ALL-TARGET-LIBGCC: +sudo make all-target-libgcc +echo MAKE INSTALL-GCC: +sudo make install-gcc +echo MAKE INSTALL-TARGET-LIBGCC: +sudo make install-target-libgcc +echo HERE U GO MAYBE: +ls /usr/local/i386elfgcc/bin +export PATH="$PATH:/usr/local/i386elfgcc/bin" diff --git a/ourSolution.asm b/ourSolution.asm deleted file mode 100644 index 75bde78..0000000 --- a/ourSolution.asm +++ /dev/null @@ -1,33 +0,0 @@ -[org 0x7c00] - -mov sp, 0 -mov bp, sp - -start: - mov ah, 0 ; i dont understand this - int 0x16 ; record keys - cmp al, 0x0D ; representation of enter key - je printStack - mov ah, 0x0e - int 0x10 - push ax - jmp start - -printStack: - mov al, 0 - mov sp, bp - push ax - loop: - mov ax, [esp] - sub sp, 2 - int 0x10 - cmp ax, 0 - je exit - jmp loop - -exit: - jmp start - - -times 510 - ($-$$) db 0 -db 0x55, 0xaa \ No newline at end of file diff --git a/pchar.bin b/pchar.bin deleted file mode 100644 index e69de29..0000000 diff --git a/src/bootloader/Binaries/OS.bin b/src/bootloader/Binaries/OS.bin new file mode 100644 index 0000000000000000000000000000000000000000..768fd546246baebb55465523d2c3ccfc2fac7bab GIT binary patch literal 10832 zcmeIuF-yZh6bJDCovlXH&y$qMIMVNg*wT zQV59R65`m=MX08Oi;F|!rAWVlgYbWF+~eJQ_u%K1cJ)dWL_xQMn%{3jHDxHh&jy;f zmv!?R&${Dfc`Q>E+U;#!pD5#~7_0U4E5zMctiBylI?>KjR6Tzd&T{l|rY)p{eb+s7 zF^ViR=}m&+eU)Gydm5;=6oPK>V)nlVy$&!5zyE%4J?t9IGWjck%56`Yztcg*e`}#O zg(qxY?mU>%-0w4!wVC3^qv^;C3<^+y0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1^%1B56cx! A!vFvP literal 0 HcmV?d00001 diff --git a/boot.bin b/src/bootloader/Binaries/boot.bin similarity index 62% rename from boot.bin rename to src/bootloader/Binaries/boot.bin index c64df1c2201858340183526b412584e1ba456646..d4dd9580a01b0b190ea72105d0089f60a72726fc 100644 GIT binary patch delta 142 zcmV;90CE3-1b_r!h!$UbF~E+%j@Z2bfQjt801&nUv;v6mwE(sNu>y(~Uwq9Iat1sC zbpq=Uv<|yje2ND=0CWY-5JT(rv;eRJ%@Fzz0Ty_C4bCUCOQx!_`6{1p;{DT!YE{tWIxIu&|bQJ)XHa4jM diff --git a/src/bootloader/Binaries/full_kernel.bin b/src/bootloader/Binaries/full_kernel.bin new file mode 100755 index 0000000000000000000000000000000000000000..b8fcb3e6b4d118777f6be9a1566f64832e20ea9c GIT binary patch literal 80 zcmaFC#K6Gt`d?`0(;W;A+ziJU0w=^C1`3G)F$geL1u-zza4<^qu&{J6GBC&h#X$J{ Z|NsB_KnfiBI9i#Ucv-!U0#z_D001XB5hnlu literal 0 HcmV?d00001 diff --git a/src/bootloader/Binaries/kernel.o b/src/bootloader/Binaries/kernel.o new file mode 100644 index 0000000000000000000000000000000000000000..7301eab53b79f8cd6b8011d53e2e5cd4a827f838 GIT binary patch literal 1740 zcma)6%W4!+5UtxYt&vH_Jk&%ZWFm-OrrANAD?#Y)o@+c=C5A28Kn!(k=NTm{L-HQBRu^v>V;nxGXslz}odFAD0Db|_|U0l(n z;)SqzLzkmg@rqwQf4SHS%f(W&87(#aMIHV(FV#8)<@C(V;lge#evetVY~n^CYUPrs z2W_gqJ)2#{q3}ehl=vi%=i44TCpz5O_h2OP^vJWcl9jJNET&!iV(71Jkdbw1I`SL- z@a=0!!Wn7DFA=V-o41(SW_-Aaw?X;tI%qLPH|=_nEyix6#Rc!6bwzg3g6EkySEca2 zJB=UnP(Mr`cFfo*lP|#Hb)Z4(UL*2Luu+)UnnjVm8;Q5*N4|KaR!h7PFJMuZZdVuT zL8XaQjQvt6)OXTZKlFpDUQ@7C540^ne+wC2i2ZW2(a-_r<0QJaPzn8p#`^wK`oZJ9 z+S}nbp8l%roevtG`74kU@Y7;>JYU|)zj&kI*c$d>ze5B@Y>xN9mojbQZ*lg-yf3~m zD(5=_wKafpA38)}#OBVyx0tC{&;o%Go12B7p7%TE<(yPJi(m8lz_tbu|A!(M35?j> zJp6ROb{tRvG4^BJ?xO+Bno%gF7tYB9#v^moyT)4Hbp&t4jAXF9)jxP2k?8pg@44Y& zo3VTb@1VgnTp#5bG`){u?1Sgeeem7beQ;Ne0XN34U;^p#T5? literal 0 HcmV?d00001 diff --git a/src/bootloader/Binaries/kernel_entry.o b/src/bootloader/Binaries/kernel_entry.o new file mode 100644 index 0000000000000000000000000000000000000000..4f3e52496f26673ef7ff5e491ba8455068b62640 GIT binary patch literal 480 zcmb<-^>JflWMqH=Mh0dE1doBi0V-hvrZpJY7?@y6Nuoh!f-oCYmjRH&j%0!WlnoMN zMiO@bs?$c|gUkQ{K_EtUNdZv80Vu`-#32138f2ywqLRcUAgeMLLPPmQsW}ie zFdZl~%zls{3&Y3%$daI#5JD0Fhf#KFQC@0Jd}>}vQKepDaV|q{VrCvf5y(6yqyPi} DldUBl literal 0 HcmV?d00001 diff --git a/src/bootloader/Binaries/zeroes.bin b/src/bootloader/Binaries/zeroes.bin new file mode 100644 index 0000000000000000000000000000000000000000..9df64990f7be3c1f7194a0c22852a1ab3a09f3c5 GIT binary patch literal 10240 zcmeIu0Sy2E0K%a6Pi+o2h(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM P7%*VKfB^#r47?2tC;$Kf literal 0 HcmV?d00001 diff --git a/src/bootloader/boot.asm b/src/bootloader/boot.asm new file mode 100644 index 0000000..73be6b7 --- /dev/null +++ b/src/bootloader/boot.asm @@ -0,0 +1,115 @@ + +[org 0x7c00] +KERNEL_LOCATION equ 0x1000 + + +mov [BOOT_DISK], dl + + +xor ax, ax +mov es, ax +mov ds, ax +mov bp, 0x8000 +mov sp, bp + +mov bx, KERNEL_LOCATION +mov dh, 2 + +mov ah, 0x02 +mov al, dh +mov ch, 0x00 +mov dh, 0x00 +mov cl, 0x02 +mov dl, [BOOT_DISK] +int 0x13 + + ; error managment +jc error ; jump if carry flag is set +cmp al, 2 +jne error + +jmp endload + + +error: + mov ah, 0x0e + mov bx, errorMsg + +eloop: + mov al, [bx] + cmp al, 0 + je endload + int 0x10 + inc bx + jmp eloop + +endload: + +mov ah, 0x0 +mov al, 0x3 +int 0x10 ; text mode + + +CODE_SEG equ GDT_code - GDT_start +DATA_SEG equ GDT_data - GDT_start + +cli +lgdt [GDT_descriptor] +mov eax, cr0 +or eax, 1 +mov cr0, eax +jmp CODE_SEG:start_protected_mode + +jmp $ + +errorMsg: + db "error", 0 + +BOOT_DISK: db 0 + +GDT_start: + GDT_null: + dd 0x0 + dd 0x0 + + GDT_code: + dw 0xffff + dw 0x0 + db 0x0 + db 0b10011010 + db 0b11001111 + db 0x0 + + GDT_data: + dw 0xffff + dw 0x0 + db 0x0 + db 0b10010010 + db 0b11001111 + db 0x0 + +GDT_end: + +GDT_descriptor: + dw GDT_end - GDT_start - 1 + dd GDT_start + + +[bits 32] +start_protected_mode: + mov ax, DATA_SEG + mov ds, ax + mov ss, ax + mov es, ax + mov fs, ax + mov gs, ax + + mov ebp, 0x90000 ; 32 bit stack base pointer + mov esp, ebp + + jmp KERNEL_LOCATION + + + +times 510-($-$$) db 0 +dw 0xaa55 diff --git a/src/bootloader/kernel.cpp b/src/bootloader/kernel.cpp new file mode 100644 index 0000000..458f6e1 --- /dev/null +++ b/src/bootloader/kernel.cpp @@ -0,0 +1,6 @@ +extern "C" void main(){ + *(char*)0xb8000 + 2 = 'Q'; + return; +} + +void write_char (unsigned char c, unsigned char fcolour, unsigned char bcolour) diff --git a/src/bootloader/kernel_entry.asm b/src/bootloader/kernel_entry.asm new file mode 100644 index 0000000..6abcac1 --- /dev/null +++ b/src/bootloader/kernel_entry.asm @@ -0,0 +1,5 @@ +section .text + [bits 32] + [extern main] + call main + jmp $ diff --git a/src/bootloader/run.sh b/src/bootloader/run.sh new file mode 100644 index 0000000..154e73b --- /dev/null +++ b/src/bootloader/run.sh @@ -0,0 +1,14 @@ +# TODO make into make file + +export PATH=$PATH:/usr/local/i386elfgcc/bin + +nasm "boot.asm" -f bin -o "Binaries/boot.bin" +nasm "kernel_entry.asm" -f elf -o "Binaries/kernel_entry.o" +i386-elf-gcc -ffreestanding -m32 -g -c "kernel.cpp" -o "Binaries/kernel.o" +nasm "zeroes.asm" -f bin -o "Binaries/zeroes.bin" + +i386-elf-ld -o "Binaries/full_kernel.bin" -Ttext 0x1000 "Binaries/kernel_entry.o" "Binaries/kernel.o" --oformat binary + +cat "Binaries/boot.bin" "Binaries/full_kernel.bin" "Binaries/zeroes.bin" > "Binaries/OS.bin" + +qemu-system-x86_64 -drive format=raw,file="Binaries/OS.bin",index=0,if=floppy, -m 128M diff --git a/src/bootloader/zeroes.asm b/src/bootloader/zeroes.asm new file mode 100644 index 0000000..eed89f3 --- /dev/null +++ b/src/bootloader/zeroes.asm @@ -0,0 +1 @@ +times 10240 db 0 diff --git a/src/protectedmode.asm b/src/protectedmode.asm index 6bd7a9c..ab3d026 100644 --- a/src/protectedmode.asm +++ b/src/protectedmode.asm @@ -16,7 +16,7 @@ mov cr0, eax jmp CODE_SEG:start_protected_mode jmp $ - + GDT_start: ; must be at the end of real mode code GDT_null: diff --git a/src/two.asm b/src/two.asm index f018ff9..900869c 100644 --- a/src/two.asm +++ b/src/two.asm @@ -56,6 +56,5 @@ printBuffer: jmp $ - times 510 - ($ - $$) db 0 ;510 bytes minus previous code define as 0 db 0x55, 0xaa ;special code that defines boot sector diff --git a/zeb_alphabet.asm b/zeb_alphabet.asm deleted file mode 100644 index 638e012..0000000 --- a/zeb_alphabet.asm +++ /dev/null @@ -1,23 +0,0 @@ - -mov ah, 0x0e ; move to the first half of ax say its a character -mov cl, 'A' -mov bl, 'b' - -nacho_loop: - cmp cl, 'Z' + 1 - je exit - mov al, cl - int 0x10 - mov al, bl - int 0x10 - add cl, 2 - add bl, 2 - jmp nacho_loop - -exit: - jmp $ ;) -times 510-($-$$) db 1 -db 0x55, 0xaa -;qemu-system-x86_64 -drive format=raw,file=boot.bin boot.bin -nographic -;nasm -o bin - From 3f4a751db081b93e35a716563fa185d656c7c3ed Mon Sep 17 00:00:00 2001 From: zeb33n Date: Thu, 19 Dec 2024 18:16:32 +0000 Subject: [PATCH 08/32] added function to write anywhere on the screen --- src/bootloader/Binaries/OS.bin | Bin 10832 -> 10976 bytes src/bootloader/Binaries/full_kernel.bin | Bin 80 -> 224 bytes src/bootloader/Binaries/kernel.o | Bin 1740 -> 2460 bytes src/bootloader/kernel.cpp | 16 ++++++++++++---- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/bootloader/Binaries/OS.bin b/src/bootloader/Binaries/OS.bin index 768fd546246baebb55465523d2c3ccfc2fac7bab..5ae2075a115171d7130c13e344c2e447f65756de 100644 GIT binary patch delta 208 zcmcZ*@*s2rBU60}0|UeBf1#aEo8QQE`*L)L@^rfjbojpM2z}Av`hyv{ISUL{@ z884b2@N-^B>va9s9V*dz;ot)%Mj!!{>vk1kyuiwEfR%yqK&R^upwc(|`$PX7e8j0r_FCaDBqR&GpH_2P~b3fQ%Q- z5BNDRq;kgIZym0UV6C;oS%5}SnFkWC~IKaxlc%aku2T&2vElL&U}**b^07?O delta 52 zcmaFB7$EY3iGhLP^}o>0r#l!LxEYQy1Wt&Z*rFnF{{R2~d_XA%M?Q{LCMRB2ucJIH HEDQ_)0do+e diff --git a/src/bootloader/Binaries/kernel.o b/src/bootloader/Binaries/kernel.o index 7301eab53b79f8cd6b8011d53e2e5cd4a827f838..bd5aca0a0a262da0f188329432220edc72385fb0 100644 GIT binary patch literal 2460 zcma)7Urbw782`>~4-^V*`QrvcMlr)paV>x5zX6kp6^Cv!n@vy`@wUCCMcU%+g$+W~ zg_uBUqDwSUvj-Cs_1Q$@gUN^bhjQEH|pim&{+wB24h<15AMO0m%LneFBH)^cn! z_-$-+b;G;z1IX6WMzCf*y%M`qinpw+uWlFu6MUsuvsjmOLz1|$61$Di?cnwJoz*{l zHS4AL?evQA!L2n^m@=jgO^K=6sZ(43?Ck6;{n-2+Z{gP3FPO2|%bIM$)XB`x6XdNj zP}Tb&qBb-LNMN+Hdac?kvw4SnKGuw?3jh`l5ZAupIZ0tg<7Hlkeg*9~xbuB==X zmnqJ9jjMHHo-USY$TJC($N#>md{@|D$O52-gKE8Nm`O91$ki#>@|6gE0bRbc@LA{f70&>pbHJ6E70WkbhLFeh{meWL87V%J=KaN z{sDIZn}=H#TZyXGGIYQf5xX(@KsjciRiLLekJ4#CZ4fn>xb1U$KyKf8<9A!ld=W#! z_b?FG>F+>2179QzkPgugZio&eXuJwWX`bW+NjGbgJm8y^hsNaLK^cumzazUdvS(91 zILl#sa&N<#Z19=!hDs|s_<;Sn4Qd9sjyo+XJ+$sDP!3dyIzDuBO@omNAdU%sVC=FH}eD$ z3+G8J`b1lu*Sn0fX@`vm3%>?*D&Tw9c)DI1ulY&pBoS=-6elV!cc0Xs;_@E7YL#b;H2%{};#m z(Q7yd=lhk367B1OUb(*z_O}ch?+^6u{)WNz8c@0deMxSyO$-xW~WKwK9SC7g$a`&1eCJL-P!ddicI`xl*TLVN%K literal 1740 zcma)6%W4!+5UtxYt&vH_Jk&%ZWFm-OrrANAD?#Y)o@+c=C5A28Kn!(k=NTm{L-HQBRu^v>V;nxGXslz}odFAD0Db|_|U0l(n z;)SqzLzkmg@rqwQf4SHS%f(W&87(#aMIHV(FV#8)<@C(V;lge#evetVY~n^CYUPrs z2W_gqJ)2#{q3}ehl=vi%=i44TCpz5O_h2OP^vJWcl9jJNET&!iV(71Jkdbw1I`SL- z@a=0!!Wn7DFA=V-o41(SW_-Aaw?X;tI%qLPH|=_nEyix6#Rc!6bwzg3g6EkySEca2 zJB=UnP(Mr`cFfo*lP|#Hb)Z4(UL*2Luu+)UnnjVm8;Q5*N4|KaR!h7PFJMuZZdVuT zL8XaQjQvt6)OXTZKlFpDUQ@7C540^ne+wC2i2ZW2(a-_r<0QJaPzn8p#`^wK`oZJ9 z+S}nbp8l%roevtG`74kU@Y7;>JYU|)zj&kI*c$d>ze5B@Y>xN9mojbQZ*lg-yf3~m zD(5=_wKafpA38)}#OBVyx0tC{&;o%Go12B7p7%TE<(yPJi(m8lz_tbu|A!(M35?j> zJp6ROb{tRvG4^BJ?xO+Bno%gF7tYB9#v^moyT)4Hbp&t4jAXF9)jxP2k?8pg@44Y& zo3VTb@1VgnTp#5bG`){u?1Sgeeem7beQ;Ne0XN34U;^p#T5? diff --git a/src/bootloader/kernel.cpp b/src/bootloader/kernel.cpp index 458f6e1..e93505d 100644 --- a/src/bootloader/kernel.cpp +++ b/src/bootloader/kernel.cpp @@ -1,6 +1,14 @@ -extern "C" void main(){ - *(char*)0xb8000 + 2 = 'Q'; - return; + +void write_char (unsigned char c, unsigned char fcolour, unsigned char bcolour, int x, int y) { + short colours = (bcolour << 4) | (fcolour & 0x0f); //background in first 4 bits foregrounf in last 4 bits + volatile short *where; + where = (volatile short*)0xb8000 + (y * 80 + x); + *where = c | (colours << 8); // load the value into the pointer + +} + +extern "C" int main() { + write_char('A', 0xA, 0x1, 30, 2); + return 0; } -void write_char (unsigned char c, unsigned char fcolour, unsigned char bcolour) From d3032149ca9b10c9c4f706a033b29d3d677cf368 Mon Sep 17 00:00:00 2001 From: zeb33n Date: Fri, 20 Dec 2024 19:13:01 +0000 Subject: [PATCH 09/32] added printing for numbers --- src/bootloader/Binaries/OS.bin | Bin 10976 -> 11512 bytes src/bootloader/Binaries/full_kernel.bin | Bin 224 -> 760 bytes src/bootloader/Binaries/kernel.o | Bin 2460 -> 4284 bytes src/bootloader/boot.asm | 18 +++---- src/bootloader/kernel.cpp | 63 +++++++++++++++++++++--- 5 files changed, 64 insertions(+), 17 deletions(-) diff --git a/src/bootloader/Binaries/OS.bin b/src/bootloader/Binaries/OS.bin index 5ae2075a115171d7130c13e344c2e447f65756de..0d885b0223346eea9aff50f1ba3a0eb7bfadebd0 100644 GIT binary patch delta 712 zcmZ{gL1+^}6ox00RMr~ZC^;+`G~z*9FCM(rqelv*mRBnQETY$0ZRyGf-A9%csK|G)oz^Hx;%!qWg9 zei$I6*;Uy$y%pmriK}4_5hK+yRNH_xxe9Cbl@NQKm#Z_wbf}0gwB%Q6x4tTEwYci$ z8Lhl+`28ErYR3S#nUt$3SFWlZ4$=c6S8Jl6h(h$t*|e<*A@ny<0g`|yhvzJ!GJ3J4a5aK0Jv>l`BvD+tCI4J*O$4pQ>903jo=P0C)Zn3eEaR)UAJzF+=l756Y;}m&>!l(Zj4x(1`4(gNm c{((GkKX@;s572BQv6L_qUfi> delta 171 zcmewn`5<%yBa>zd0|UeBf1#aEo8QQE`*L)L@^rfjbojpM2z}Av`hyv{ISUL~! zZ=0;mq-g}?zv15>`tRT)4$ceRp+C|(nI@b(4Ah;)lqHwNn8lUl_@d|k|NqTLM0NlT zW;l6xGB1m=Sv*iE3B-5g<7j1a;$>xuJIcet!XN__vH{|SKzR@wE*}As-pt7QU47yP FZU8_?KrR3P diff --git a/src/bootloader/Binaries/full_kernel.bin b/src/bootloader/Binaries/full_kernel.bin index f3077e39010105f0a9d371098a4807f04851e0d8..db6f58e1b41e003745a7818a8bca5658a4245d95 100755 GIT binary patch literal 760 zcmZ`#L1+_E5dFJJWLu*fC5MFujW@-M2XA^waKwY5v1RoT(~31~S(IK3La{2W)%|{g zx%TG4qo;yUE5wblUF>N+h$1MZR9Hz4f(zL~%y<5#l`43cKc9Is^WHrFi9|@duhVZ< zC&LN~(~}HRcA;bIz73md12&uMar(xMj=!idXItfn5YehS2bQuUl=R;CgF+GJ7g9}^;MO*tMHZFAM zlGLl6JAs-Q{E$3*%}(LbOVG}ZEVph~ZcNSGtYmM^WM?Z^N5_vK7I}(UnjIt39Yq>R#^W|#pTU}l zkH0v-hMDB{EAw)GUqZgJf-Mnt8p|WdGxZlf8R1#1UB;L|e0ev1#)`>{E3KU!_Yn)Q sXV31Qe6%9sc#8GU|G|$U=7>Oi8uK5GXCK8L#;t^0YUNgQZcc3b4Fwu0DF6Tf delta 162 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 G>GxlH#MUeT literal 2460 zcma)7Urbw782`>~4-^V*`QrvcMlr)paV>x5zX6kp6^Cv!n@vy`@wUCCMcU%+g$+W~ zg_uBUqDwSUvj-Cs_1Q$@gUN^bhjQEH|pim&{+wB24h<15AMO0m%LneFBH)^cn! z_-$-+b;G;z1IX6WMzCf*y%M`qinpw+uWlFu6MUsuvsjmOLz1|$61$Di?cnwJoz*{l zHS4AL?evQA!L2n^m@=jgO^K=6sZ(43?Ck6;{n-2+Z{gP3FPO2|%bIM$)XB`x6XdNj zP}Tb&qBb-LNMN+Hdac?kvw4SnKGuw?3jh`l5ZAupIZ0tg<7Hlkeg*9~xbuB==X zmnqJ9jjMHHo-USY$TJC($N#>md{@|D$O52-gKE8Nm`O91$ki#>@|6gE0bRbc@LA{f70&>pbHJ6E70WkbhLFeh{meWL87V%J=KaN z{sDIZn}=H#TZyXGGIYQf5xX(@KsjciRiLLekJ4#CZ4fn>xb1U$KyKf8<9A!ld=W#! z_b?FG>F+>2179QzkPgugZio&eXuJwWX`bW+NjGbgJm8y^hsNaLK^cumzazUdvS(91 zILl#sa&N<#Z19=!hDs|s_<;Sn4Qd9sjyo+XJ+$sDP!3dyIzDuBO@omNAdU%sVC=FH}eD$ z3+G8J`b1lu*Sn0fX@`vm3%>?*D&Tw9c)DI1ulY&pBoS=-6elV!cc0Xs;_@E7YL#b;H2%{};#m z(Q7yd=lhk367B1OUb(*z_O}ch?+^6u{)WNz8c@0deMxSyO$-xW~WKwK9SC7g$a`&1eCJL-P!ddicI`xl*TLVN%K diff --git a/src/bootloader/boot.asm b/src/bootloader/boot.asm index 73be6b7..82f7137 100644 --- a/src/bootloader/boot.asm +++ b/src/bootloader/boot.asm @@ -1,5 +1,5 @@ -[org 0x7c00] +[org 0x7c00] ; start of data segment KERNEL_LOCATION equ 0x1000 @@ -12,16 +12,16 @@ mov ds, ax mov bp, 0x8000 mov sp, bp -mov bx, KERNEL_LOCATION -mov dh, 2 +mov bx, KERNEL_LOCATION ; we want to load the kwrnwl to the kernel location +mov dh, 2 ;might have to change this number. number of sectors to read mov ah, 0x02 -mov al, dh +mov al, dh ; number of sectors mov ch, 0x00 mov dh, 0x00 mov cl, 0x02 mov dl, [BOOT_DISK] -int 0x13 +int 0x13 ;load from disk ; error managment jc error ; jump if carry flag is set @@ -97,10 +97,10 @@ GDT_descriptor: [bits 32] start_protected_mode: - mov ax, DATA_SEG - mov ds, ax - mov ss, ax - mov es, ax + mov ax, DATA_SEG ;segment registers + mov ds, ax ;data segment + mov ss, ax ;stack segment + mov es, ax ;extra segments mov fs, ax mov gs, ax diff --git a/src/bootloader/kernel.cpp b/src/bootloader/kernel.cpp index e93505d..cf7052b 100644 --- a/src/bootloader/kernel.cpp +++ b/src/bootloader/kernel.cpp @@ -1,14 +1,61 @@ +#define HEAPLOC 0xF0000 -void write_char (unsigned char c, unsigned char fcolour, unsigned char bcolour, int x, int y) { - short colours = (bcolour << 4) | (fcolour & 0x0f); //background in first 4 bits foregrounf in last 4 bits - volatile short *where; - where = (volatile short*)0xb8000 + (y * 80 + x); - *where = c | (colours << 8); // load the value into the pointer +// print the value of ds to find where the data segment starts +void write_char(char c, char fcolour, char bcolour, int x, int y) { + short colours = (bcolour << 4) | (fcolour & 0x0f); + volatile short* where; + where = (volatile short*)0xb8000 + (y * 80 + x); + *where = c | (colours << 8); // load the value into the pointer } -extern "C" int main() { - write_char('A', 0xA, 0x1, 30, 2); - return 0; +void write_string(char* string, char fcolour, char bcolour, int x, int y) { + while (*string != '\0') { + write_char(*string, fcolour, bcolour, x, y); + string++; + x++; + if (x % 80 == 0) { + y++; + x = 0; + } + } +} + +// need to skip ascii values 58 to 64 +void write_base_int(int dec, + int base, + char fcolour, + char bcolour, + int x, + int y) { + char* outstring; + int counter = 0; + while (dec != 0) { + outstring[counter] = dec % base + 0x30; + dec /= 10; + counter++; + } + for (int i = 1; i <= counter; i++) { + write_char(outstring[counter - i], fcolour, bcolour, x, y); + x++; + if (x % 80 == 0) { + y++; + x = 0; + } + } } +void heap_init() {} +// best fit or first fit +void* malloc(int size) {} + +extern "C" int main() { + // register int* foo asm("ax"); + + write_char('B', 0xA, 0x1, 30, 2); + // write_base_int(*foo, 16, 0xA, 0x1, 32, 4); + write_base_int(56789, 16, 0xA, 0x1, 32, 3); + char string[] = "welcome to zebOS!"; + write_string(string, 0x0, 0xC, 79, 10); + return 0; +} From d9b2d63eb1607a42256e22192b11fd84fc74783b Mon Sep 17 00:00:00 2001 From: zeb33n Date: Sat, 21 Dec 2024 10:34:51 +0000 Subject: [PATCH 10/32] added base x printing --- src/bootloader/Binaries/OS.bin | Bin 11512 -> 11520 bytes src/bootloader/Binaries/full_kernel.bin | Bin 760 -> 768 bytes src/bootloader/Binaries/kernel.o | Bin 4284 -> 4356 bytes src/bootloader/kernel.cpp | 10 ++++++---- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/bootloader/Binaries/OS.bin b/src/bootloader/Binaries/OS.bin index 0d885b0223346eea9aff50f1ba3a0eb7bfadebd0..2d2716aa315c12769b7fde34938967e3de1fc2ac 100644 GIT binary patch delta 210 zcmewn*$}mXk%@7}WG1HPF1FpS95cVy@^oHkK48${`o5v|y=5IAkaVc$=yHAEe1QEm zGm!4~{m~uzf$>xa6HL7;$A8x!&9xj1rF$opMzPQ0ux&CE=@j~?b>VPTK~3O4}p*U3|X>Tgfp3M3D1zRIGk0RYiIPb>fc delta 224 zcmZpO`VqN-k%_T?G85BtYm;tQj+x(Uc{(rjdKh$v{^)l7z<8nKREI#fFUOAbw6wJE zFFP+B{K0har+nur%?q8b9RFQ^G}m%4lpdR`%dE?|X>v4km}B(6|Nonhh-5KmDP%Eb zab*c)T)oS{@Phk4NLZrR_0jG>f(#71gcukYI*)hW>%91R2~d@P7EcxfP%_{}{p3%~ zYLmrT6dA8iwq%iKl%5>PBCi?;G<6qH3xgvcM=O&PFRM#4Gt;J{hk0077-WFL4M6;5 U@?4<$Ta)(!$pf43vM6f+0M^f0U;qFB diff --git a/src/bootloader/Binaries/full_kernel.bin b/src/bootloader/Binaries/full_kernel.bin index db6f58e1b41e003745a7818a8bca5658a4245d95..33514c1def4980d8dd2fd9b995f7cb8b8ff10ed7 100755 GIT binary patch delta 206 zcmeyt+Q7#2V#Y+K=PtJ0t{gMJ*Yb2;Xg*-j;rhOz_Pu2tACPpY=jd{M-+X}mH8YUz z_WjWv`hoFO2NO)aE60D=AI-HK45fP~t1#*^uACgi7^V{R@BjbiBO+PMSqfQ@=Hdw$pTCYjOQmCGRZRvPYz^~R}BMdKg<9G tj(i-gOisM4F3rqLyN@2`VPRpA0SY$&@z=>yf$DEh-U=iSPQJ>d3;+|*PFer} delta 220 zcmZo*`@zceqJJXOb8C}sSB{zAYk4{^^m-U{hyLhx{lIvk<5Y)0w=c(z^t80J?=L$q z9Q?s_@TYv|Da{L=t{neee>B%}Fq9sftjnm&xM^}UW0+&~zyJT6kBDS3XDMVcW^rW+ zWL&+=!0>|mKS)@j*Y(lvKY|PlyM!1R7&?!4-s`;hc?nRJe-=*`15h&HMg8PYjB1m` znG_kXPqt)|XOx~C$t15D2Q+mTPz!@2A4e;b6ECYvGc(hsqlbA|SQuo0!VN(DW%690 Q`dgFt0?7lD?=mR^00{wDkN^Mx diff --git a/src/bootloader/Binaries/kernel.o b/src/bootloader/Binaries/kernel.o index 2eae291f3e98a3bb333f4ac5977ef02b2195110d..b07ad92ee15f35e126577f051fd013797a3d9b44 100644 GIT binary patch delta 1196 zcmX|=U1(HC6vxk*xpVK`+|T6Ny1PjmZ=zXzNTO{eCMFu&EM)`HE+wVkq(ozav9-{Y zD#j?=f+i|i4lF1U5qyvqN{jfUg%l}~;)738szM8ef?8r9q`vrZX7{ES=Kq`j`IuQ| zX0OIyx6H4>tL6C7K;K;6KK~=<(d} zL;UraSgFt3&+?B;(>6@~L`AH~&a6ZCusD+!01D6m{%kF=7Do$zPqD_-_e|^xcQPs* z8`pM0JNYI{pZyN2D8CPNhMM^F3vl+aALHR_sRzTb-s6dZW*2vR{XEA_)((IfIM4HW z4w^c)pdCJ7+0>v{7i9q72rlU8tLDFq+5bz`Ubfk1EK5AD@xX-<&Wc^TMizb z#j0(!KWyXOKjMfv0qfmba1y|xvP`>+oI`z9Zf1lo%OZA>Wel$E;^PI z?FU1sG}kxithJSfwX&K+~RaQg-E119)J@Yg@~`M9@qJiBbytW>#@NMR|BLv za9c+DJx;A&hx^lqGRW0+Yr%20I+8EjK`cZ%=EhKnI{DH)YFACR&r7ojsHoCb=%8+= zqpI6mc@F$zp-4;W+y^o>s4RPxVoW@^fl{TMBf*Z^dys%l;()#XGny zqB~r3h5qq#_yfHVWJ`D2=Suy~lm5ktQx1*Y*1P$V_2bW^|K^?J8wHUhwh2$%gq#Vk33wK` zhR&BjUaxilrl1WQS~1Le38CA06;YITQ^J-bqem%u2z&^`HKCqtJN`N*HpiYtwYLd# zUKig^G)|W>KMyfxw2EQ;7s9%f=`PAdb+&)isD;==z?r93c@Q-H1Ys8A8w{@OLRJhO z7@%|}D(90(WFlsB1+1aL>`s*T^DNe<#)$3}$7y9`RN@3RMe}9WJ=mKQ)!yY{>sPRB zyw?73(1aEDK~W>bZC*`%8*gKlkk26LVF?<<7{K7lbx3T!nU^sQ^$*r|?$C|)*3}(2 z2~j>~T|zP*K38Rj$rdsVU&>@->vhQp2xuD~KH3C>zET ztI2iyT+1O!G8aRJ+09WgEZ|_hPJTXP`5WCHx7!`{i=nCAls=g;t~xY_$M2;7dzKtT zfy;*AeK(Nh)Or*{k;Wna*H&MV9d!%X_0rR%=jBKFoigrpNo!0t7i8PC40`4AUfK4V zOn1seL3+-F^t+{Z@Y>y2gV6V#137c1^n&l46PxSgixZak>bqN>ZPQA~r!mgxu|$^7 z>x+m}`g-E0wWcCPOs|+MHefE5;coz!E}7vY;8Xf$aw4}CE|DO*9N`Uv_yV_pY!UsU z-*jikR~d%iqbtHbgE)~r5#Jx-V5A?3xY>iLdpE+bBfJ^mj6w97kNBSvDrlyzxrTxY z*FN=jFfZu(Ak?0(#Dk=6_SbN`KIE^^dwo@% quicker void write_base_int(int dec, int base, char fcolour, char bcolour, int x, int y) { + char c; char* outstring; int counter = 0; while (dec != 0) { - outstring[counter] = dec % base + 0x30; - dec /= 10; + c = dec % base + 0x30; + outstring[counter] = c > '9' && c < 'A' ? c + 7 : c; + dec /= base; counter++; } for (int i = 1; i <= counter; i++) { @@ -54,7 +56,7 @@ extern "C" int main() { write_char('B', 0xA, 0x1, 30, 2); // write_base_int(*foo, 16, 0xA, 0x1, 32, 4); - write_base_int(56789, 16, 0xA, 0x1, 32, 3); + write_base_int(0xb1A2F, 16, 0xA, 0x1, 32, 3); char string[] = "welcome to zebOS!"; write_string(string, 0x0, 0xC, 79, 10); return 0; From 9d72e734e7953c1fb57d0c42046899f589f9dbf4 Mon Sep 17 00:00:00 2001 From: zeb33n Date: Sun, 22 Dec 2024 11:29:26 +0000 Subject: [PATCH 11/32] nice changes --- src/bootloader/Binaries/OS.bin | Bin 11520 -> 11592 bytes src/bootloader/Binaries/boot.bin | Bin 512 -> 512 bytes src/bootloader/Binaries/full_kernel.bin | Bin 768 -> 840 bytes src/bootloader/Binaries/kernel.o | Bin 4356 -> 4592 bytes src/bootloader/boot.asm | 44 ++++++++++++++++++------ src/bootloader/kernel.cpp | 22 ++++++++---- 6 files changed, 50 insertions(+), 16 deletions(-) diff --git a/src/bootloader/Binaries/OS.bin b/src/bootloader/Binaries/OS.bin index 2d2716aa315c12769b7fde34938967e3de1fc2ac..96007dac7e61156caa39e6ba03b72e20b4247562 100644 GIT binary patch delta 290 zcmZpOIuSKtviWWX21W*hlN%j7xYN3scQQ0^Go%?_O54rFkoNtv!IO^54TlZ3v!``R zHXme4YyQDd`tYUM%ag1n~#WeyME|m;NN#3izQ0|BopvL2O^Qh3=zl@$k3PKW_WQ2EG*IMdT+P35Cg+5 zAZF-1-g&R{;^!qm1O2mjvKWAp0WSg|`gZ{38G2K{M90O)9-hp~B0O1)MTv3wWJ?x# zrq_QbN3qB;>P@a>QD!_lc`l1Q<7OZ!&3XW+XXfO+EYh40fUJ6;Ngb0PvWRe3A9g(E Sc--+Q4-3m?M%Mr8j0^xdt#j}I delta 211 zcmX>R)etpdGV9BX$^ZXv4rEPZWC>mMV#a1Brg@Ae;bFneZxphavgEQDv$(RHUIhL7 z|G)W&NEUOJ0$4;KLtl!U;RVxwkg!Cr>!aPQlYcQwu{;WRQ8rnEMQySJivr{M$%!oT zio!sx$qYc?$j8yj(4VUriKC^LSYe3V7r>NZd<8&C|c)(NbX gK?5js0EiC)FWC>*GOK~&2xC0iJ=ykofTU&^MVHXfHbRO@#*Lm^t5}<+p zSv*+`K*@j?0TBH=fbtBzsb8Yw;$sg_W@QqdEXJh7xO}oDlRVSwzmubw$I;5<#LLPQ zf0T!Xg+T!*6a&OzlNT~6Gk%?Xlu6#@Hc%}aPz#M+_=NokdX;sb-a+@V4r{`%Vnq9!T?(W)+n}5dyZe-3b`k|Ixs04qtp~q^$!zS4?`b&69##dLs%@g1QnAf z8jBasm-3y(>I!wT`Oacn3Ty(M#X1UALg*~^U_tgM@{i2sm|p?pBXhCb9(-DDXoj47 z3h@W?xt;X|R(NY?Q-R61c3SS_cG^{Ly$db6!F;ZTN&Q1)4*Nqg^TGsijkm%al~!}V zoFv9ccef^3tKDL!eXWd0oHlA3wvcY!rR6nb+bLUj5f~;rVWfScz-AKP8ZkZ{$7zXg zjLKLr!fIXL);Cmah_I;Xm10mu1ux%bt9T3Z##q{C2zL^c_8T$S?q;?vjy7!B#h9D+ zWo&!dbXU5#WkMN^$-&k=76(<2drkUKf@!9yiClQEn$Z=!))Xs z38#5fd}rQU>re7n8;_>A-^R;QJl@7jQ#`o9ooBggCAibWBh~|=GVq#cwBq9Zz^-tA zZ*$Yr!`c1=quC>a6O-bF~}k zLWY3>gl!3{cwg7-+h5j?8M9n_UVI(=sbK&v#XA(mPhJ$!$#s*cD)0MH*waoqVt=@f zC!rjM*%vt|-*LnTP##Bz{o==PlHCyhhEWBd))&n4MVsfDhrui+c6inNvLhRt@{(q@ YL>{ep8_F!YeIZ}xn&Qi3BlI1=`AFm2s58xWht>o&&PJU=QFFd{c_n6*C@#dC1-e z%WKb4iz%k(=E<1_KY-~f6DQM*?8m}nRv)sxA*@+%vm@AO)68UbuuU0tI$j%N zYp73mYx+EYnc8(=z+a&bz20DrQ>PuK95k*WH5+ZzsZAL_g5@G%scKL_^%vl=rfI7i zI%kL?DplNzJr~tz0&^Ub)mPzKWa|FhbSMa?Vui5SJkAHUJ!DlJ&m9g`T^!Hd9j*h4 zUr}9L^u2sq8B8BaQ+KrUt6?2EPnH;C&7%^ze$Hk@|YdabCK$h)r`kiu;rx56q zlQqjpytX*ICzf=Kj<$|COISfGQB)oknP*zG3ZA3GSUJfM>}IK)?8dY7itORE5gTxn zCgE(URBK<$686mHV5wH28(Fr{%H(MpPQBGQ8z7ZW25qq037KGO= zHps87em_dww7P|>;9U`unMm(liNhi}C{iVn9u%!5;Yks06{5v2fy^NKmC1s;YjGF}EJBS$g;mWLG#=G>Tp>P})OYS>m;^#iP4_q)WS$SljV zeqKx=a<{yS)v`%clz;hoenH4wP~acAax^H2?*!3axe(;}sw+>!(W6?GUj%tJBYz3H z`1iI<#0%Csp6pGMrFc$UcUAexc;5OJpKYDw2{ quicker -void write_base_int(int dec, +void write_base_int(int integer, int base, char fcolour, char bcolour, @@ -31,10 +38,10 @@ void write_base_int(int dec, char c; char* outstring; int counter = 0; - while (dec != 0) { - c = dec % base + 0x30; + while (integer != 0) { + c = integer % base + 0x30; outstring[counter] = c > '9' && c < 'A' ? c + 7 : c; - dec /= base; + integer /= base; counter++; } for (int i = 1; i <= counter; i++) { @@ -47,15 +54,18 @@ void write_base_int(int dec, } } +void set_bitmap() {} + void heap_init() {} // best fit or first fit void* malloc(int size) {} extern "C" int main() { + char* foo = (char*)0x10000; // register int* foo asm("ax"); write_char('B', 0xA, 0x1, 30, 2); - // write_base_int(*foo, 16, 0xA, 0x1, 32, 4); + write_char(*foo, 0xA, 0x1, 32, 4); write_base_int(0xb1A2F, 16, 0xA, 0x1, 32, 3); char string[] = "welcome to zebOS!"; write_string(string, 0x0, 0xC, 79, 10); From 5e3a3e055cf431bd870a7ff7f7f20797d24d51db Mon Sep 17 00:00:00 2001 From: zeb33n Date: Sun, 22 Dec 2024 11:36:11 +0000 Subject: [PATCH 12/32] added links --- src/bootloader/kernel.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/bootloader/kernel.cpp b/src/bootloader/kernel.cpp index 9d1505f..0515c2a 100644 --- a/src/bootloader/kernel.cpp +++ b/src/bootloader/kernel.cpp @@ -5,8 +5,10 @@ // TODO: // 1. interrupts // 2. malloc -// 3. paging https://wiki.osdev.org/Paging +// 3. paging https://wiki.osdev.org/Paging, +// https://wiki.osdev.org/Setting_Up_Paging // - identity paging +// - uses the ps register // 4. processes void write_char(char c, char fcolour, char bcolour, int x, int y) { From 121f4ad45212f59787e61d4938d5c7382312ff20 Mon Sep 17 00:00:00 2001 From: zeb33n Date: Sun, 22 Dec 2024 13:53:43 +0000 Subject: [PATCH 13/32] file reorganisation --- src/{bootloader => }/Binaries/OS.bin | Bin 11592 -> 10752 bytes src/{bootloader => }/Binaries/boot.bin | Bin 512 -> 512 bytes src/Binaries/full_idt.o | Bin 0 -> 3752 bytes src/Binaries/idt.o | Bin 0 -> 3600 bytes src/Binaries/idt_entry.o | Bin 0 -> 496 bytes src/Binaries/kernel.o | Bin 0 -> 2924 bytes src/{bootloader => }/Binaries/kernel_entry.o | Bin 480 -> 496 bytes src/Binaries/printing.o | Bin 0 -> 3508 bytes src/{bootloader => }/Binaries/zeroes.bin | Bin src/bootloader/Binaries/full_kernel.bin | Bin 840 -> 0 bytes src/bootloader/Binaries/kernel.o | Bin 4592 -> 0 bytes src/bootloader/boot.asm | 2 + src/bootloader/run.sh | 14 ----- src/kernel/idt.asm | 7 +++ src/kernel/idt.cpp | 48 ++++++++++++++++++ src/kernel/idt.h | 7 +++ src/kernel/kernel.cpp | 26 ++++++++++ .../kernel.cpp => kernel/printing.cpp} | 31 ----------- src/kernel/printing.h | 12 +++++ src/{ => practice}/disk.asm | 0 src/{ => practice}/one.asm | 0 src/{ => practice}/protectedmode.asm | 0 src/{ => practice}/two.asm | 0 src/run.sh | 22 ++++++++ 24 files changed, 124 insertions(+), 45 deletions(-) rename src/{bootloader => }/Binaries/OS.bin (91%) rename src/{bootloader => }/Binaries/boot.bin (78%) create mode 100644 src/Binaries/full_idt.o create mode 100644 src/Binaries/idt.o create mode 100644 src/Binaries/idt_entry.o create mode 100644 src/Binaries/kernel.o rename src/{bootloader => }/Binaries/kernel_entry.o (51%) create mode 100644 src/Binaries/printing.o rename src/{bootloader => }/Binaries/zeroes.bin (100%) delete mode 100755 src/bootloader/Binaries/full_kernel.bin delete mode 100644 src/bootloader/Binaries/kernel.o delete mode 100644 src/bootloader/run.sh create mode 100644 src/kernel/idt.asm create mode 100644 src/kernel/idt.cpp create mode 100644 src/kernel/idt.h create mode 100644 src/kernel/kernel.cpp rename src/{bootloader/kernel.cpp => kernel/printing.cpp} (63%) create mode 100644 src/kernel/printing.h rename src/{ => practice}/disk.asm (100%) rename src/{ => practice}/one.asm (100%) rename src/{ => practice}/protectedmode.asm (100%) rename src/{ => practice}/two.asm (100%) create mode 100644 src/run.sh diff --git a/src/bootloader/Binaries/OS.bin b/src/Binaries/OS.bin similarity index 91% rename from src/bootloader/Binaries/OS.bin rename to src/Binaries/OS.bin index 96007dac7e61156caa39e6ba03b72e20b4247562..31f750f53932d875f7cdbcebab797ac472de2515 100644 GIT binary patch delta 28 jcmX>R)etgaGV9BX$^ZXv4rEPZWC~pcq`#|Ae833+$bAhH literal 11592 zcmeH`T}T{P6vxlZ?#A(>&XO+4Hj%RJQ^C@hmqLkwuF36F#Emj7r8S18JA@%c5SJFa znuUq&jDyRPJeh}(hd@ZkLnLaoi+0Q=-CB@rlNTRK*cJnm?t+3_oEGEs%&dwjwB$8# zF5C~!|J?gO=QoVDuP1rfOq=PYSxD*SECi?c30_;Bgee&3M^IgSwQo-=pWsWuiN@^5 z$&s2?=npIgkCpzMfZM*s;NK#*@2jL3F=h29PJGk+V<;&=X*1r}*V_j>!*TF<`2l$Q z#Rsq-PA386=^&(+(gpM{rmb0kT5xLs4q6t*qguUe_+}tg5AxxMa<&fS^|h8|?NKV% z@?DLrzoyRfvT8%(x2Nx3^4{HXqr;04kZxL6IKZzZ=}**hlhH01QiH*QT6FwrNOVy)a+oIb2XQScoeGzzhIq>dba?%i<5x=KSwMZNZRi zS?4ngInQI;K-$olU1}5O+HG-8+Ax?f0^*$MB*IQ2bh0yMDURc)_d*U692P=@nHaV- zw*Hr17&a4i4h!d5$ZgWQdBIFfW~vrlYB_93LA+7zAkS}FQc za|T=GmbMyb!XDfPZftHf5H?u&-_qj4A zTai3lb$<BPFy15B7hyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CY lfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5P_G8z&{wglj8sY diff --git a/src/bootloader/Binaries/boot.bin b/src/Binaries/boot.bin similarity index 78% rename from src/bootloader/Binaries/boot.bin rename to src/Binaries/boot.bin index 2b21f2d46aa7e567319ac8325b1cd7d01b6f2969..d4dd9580a01b0b190ea72105d0089f60a72726fc 100644 GIT binary patch delta 22 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 G-+uw^4)9+9 literal 0 HcmV?d00001 diff --git a/src/Binaries/idt_entry.o b/src/Binaries/idt_entry.o new file mode 100644 index 0000000000000000000000000000000000000000..9c18e1dbb2ab167f949a506d71ddc1d8facf9a6d GIT binary patch literal 496 zcmb<-^>JflWMqH=Mh0dE1doBi0V-hvrZpJY7?@y6Nuoh!f-oCYmjRH&fn$bBHQKx#ndf%yE4vOtpIFo*yHy^_?55(d5EjN+1_lEfq+t1=ftL-|FiIS@54 z9Vj%+evlvw!^i)~lAxG?g$qbr0LYg@QUI3APA$qy&C$ literal 0 HcmV?d00001 diff --git a/src/Binaries/kernel.o b/src/Binaries/kernel.o new file mode 100644 index 0000000000000000000000000000000000000000..f59853f1c28a3f732c75a2d4dcaa4aa10e8812da GIT binary patch literal 2924 zcmb7GU2IfE6h3qB-tD%#Y_}BU&)BU2twDC%QV}Z%r64vE3Y4D!LcP1a-M#Dn)Vp{2 z3keVPfj%^1(8LE#Br)-U#1|hlN@5HsK4~=Z#Rv5PqluVcd@-R({m$H(_OcRxCYke{ zIp>=*GiT17-SazlKO=-7-2|DmI3ijT3p@i7dgwk{Mzg!uM5b@vo_}fX;LJ~l4~^}c zzSZ-~-2D9fjh#0Mv!`z*N=E6yk|?#6woAwK^)wqJrL;8eTQtT>rZT3A*;R4Up4pw> ze9TLJv=n0I#?1FKU;ptA$7m~!mJ%g`f3N0#$i!La_K{;J#*fe1bJtEe<$SH;r2Sg@ ztdkoZ>!uXWWRZw4GqM$;n>CKj?Q#HQT!Lb)gxG^Fq&UEu6vtR&K~{tfrigwAh(;{8 z>XXq6y#<|KL6^Kh+$(_bHaO;ah!2>&NNHNAxG1d9$bBQ0ORLc*evPEayp>q;{@*lj!&f3iDT zO>SN(U^drKJpOdtOd??&Vr{ZBZg#Ei>JUq#spZH(JG?wQs%R*amJG>2am0yp80=Za zmZp(Tp1p0wIT^oofXvvSau_R!+F(eA4RIkxI(aLJZfrCg$Ce*JH+b(PZ&GUd@^~t6n!ok0*4QpO5}okG5RoGw%3^&x53 z@bF-|2g!O=x537h!cA7k4ix@K$}$?Xqup#wMN=(C z<6J6gG)|{Xqv0DDJ_TXu+R*1iH-N7NOtgwa$3=i^*dv?8Z3SG**wQ zvYN!Tz1U1zvN(WdQj!wN!sl6vYVHUzQqUi28gFbGk2a0NiI>;^x7xT@VZrvlYMttkOJ^BCBx@NtEM z3b!g8VMN?C&;U}Vex~BvIiT+aSk#*5lrz3_+NaEf?c0>e)$5e;YQcb=6HcyCz*jt3 z14Zg~F6TKX!CLUzo?R_CJaNHPcB_t_fVH&B=5aa3k7mWehcD+i#qmkct~l81e{5ag z@pq!DeE>Swt8VP$wi>+^eH%Kr7chbIC+`}_pC3|6YteZQ%0sqq6>8A&*1^F1f8)tJ z0*}+rjpOOR06f<5HivY!|BSv&J3~JHl?k8YBF^y!Y#ftwpwICv^w4y=gTec->85>0 zVbD7J-c$9`%sT`_c-Li1j0;=KzVe(o2V=3Q1ieQ#I6dwzix?2m_U zp@+{gg>!IS@Hsd?m=?S*KphJzt-yQpBaqkD`C~rox~8DgpWschq8jgy8^6V2-f66R KMS23Ed4B;%H=o7; literal 0 HcmV?d00001 diff --git a/src/bootloader/Binaries/kernel_entry.o b/src/Binaries/kernel_entry.o similarity index 51% rename from src/bootloader/Binaries/kernel_entry.o rename to src/Binaries/kernel_entry.o index 4f3e52496f26673ef7ff5e491ba8455068b62640..410a555a3e7c0e9b0defc56b1dca19f280660550 100644 GIT binary patch delta 67 zcmaFB{DFDG7e=LtUzHgjOqOJ9myu;a009s)DL=m?CqFSIwMc*RMn?I`)r_1xOw0&H E0ArL6YybcN delta 56 scmeys{D67F7e?`kUzHgzOqOJ97ZhSZ009tl@*YNc0Y)H$i5VdS0D)=<*#H0l diff --git a/src/Binaries/printing.o b/src/Binaries/printing.o new file mode 100644 index 0000000000000000000000000000000000000000..94c44987f78eef8ed239522a1421a4cbd00e81f7 GIT binary patch literal 3508 zcma)8ZERcB89wJ;ANx9X?0mI2ZAP4`?TSk6CWJw00x99PP)OIcSc*1KYCG4lA+dvf z%}3S3)PNM%Xi6tmQLPe4+mB7!Bs2+4Xj+z%qEIAIeoPzE{*)mY-3%llO-zun7i6j9W$zl zVAX7!AGcz2C2pPjyWwB0CTf|Aws2wD$)OS?ZqA#vD-VYk$7-GBF`L4QY)Xgp=c<&&}J@e&PmDSgl$}M#>vSM~o1J24yIu}q9(lz$XE_HFChc=(L+|_0H!|ToK}G+<%9Ix2VtEL(+b8i z20!~T&F3(!>n2t^#rS8y^-}WiPaxf~;m?lk2>%H%BBiIa7g@LTYtvq08zkQ)(rlyQ zu9(tKV?~euZ_fIxz8Cl%pPOmczZHc&4UNdL%|TZ=%~*>^-9*23=_uwHkZe6hYK#JnHgoEbteK#=XC#P#{Xc z&;AaPwKU`F-Q|-`Xnvg3XQoM=KH_6&RKOMkkK5+op;iK?dq>f$^}})iL*u<#SWA#! ziY772gcF&IE~6}Z_KQtJVnyJb}^TqViP~?AAF&hv#p6#vSdx*{mA9g>0FKs1FpgK zJeYRW&Au#MDCcdf$o3sbL`S!8@4qkFKM)&;?Tqf2xn}^AUCvv>xqI&a9{6N2ot6Al zbVnvrw5*by%uiAosdQnwP%g4U*_MSh=B8qHx{7obVVp`(sx^hwq+uDke$9zdKd6tw zmRKoUDB4ka`(MafMTSB%b;qc^6RCPjd6le$!$2FQ*mi zZ$90O{S-MgTt0^po)AChJJ(8x`>BHvt*w{1fe;r3)ruRHeU}h^cT3zU?GH(LOyZ9u z<|O`H;;$wCo)B^WD&@~4(j8CnzmWE?r0hezq+cg-NaCo(eT0aYlJcy?(-MCv@m+}s z#kkH`o6O_%hrYLx40QSe-YaFNKg5qh)_@}tk4R*((n~XTG6l4YE@l;1w5DUW^`gyU zlSwy7n9k)bwE#I3OX>+nP8Vio zEWGqi5-U5ADJEwu6#6Zx7k=0#Mtejwh|&1fAsf*~3_r#Q2GN^1Othcv801559G$N% zQpR>WMBnU2QsQi&w-~k)Hl(aX!4fJIy2d59FwU0PUArr91nL=ey`u=C-6SdzY;~t?+g^gMS2KYq~3&ydKDFH@p-bWZbT1SC(ai6PC4(T zrIlhifyr?O2{qSJWm|;}u?`!JW>kAq!Y^BCiX&D@gFcfb&1y7x4iAJ3lAIMIdW>+o z2ClDdiLd2;uIGa`Mb%-lm@C zDQ}Y=2p%NS;6QuM&l;p{?lKod{-@bD7-XKB)Xa?>FEo6@iprnb5^;5$80v zjjNGu2JSd?HG@Hi`@A(k3TN;Kc--F_Kw=>M-F?ag$#2VpE`#n-aOa;?tE|uqwp1voyD=zCUgkl2<7Qs%F$7pwITFC`@oz=Y1$`w`#=b2BrMRx)kC{?5c^9|mR4YW zb$k~gFENN_YU|pk?+@|82^yyaVcyP%_n-Sct`xiHFHRSXo5gE0v)7C18?))T;^m2{ zeLf8S0cLJ)l5n>LZcjWKRdGovtoiZir{`V4OfqA_5}(}}<1ekDBw)v|>>!`{gHH!M zjkOCH2eA=jn4eT4{OX!9cw-USN7QT^)?|Yx0*?n+fBGM;Bd`5~??=|eSU|2~{yoE~ Tdy%_QCC1+}GVd~G#&`P#N034O diff --git a/src/bootloader/Binaries/kernel.o b/src/bootloader/Binaries/kernel.o deleted file mode 100644 index 0fe3359a477a69c6e57e1834b063d404a3b8545f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4592 zcma)9ZERE589w)3AIFYkJ0FHR5EUl{3Im)3Sj$I}C9qo>S_*@irnEFT&UI`zu`~M` zN>(T$(8gF*ldalTDf^PpG-;LgXH~a$WnrPqzJ6rde(YD5O-zjh5^Re^rlDrfd+#~M zK}_qB&UxPN^Pcyf5BpX9=_eFLVX`SqWA`}5e(19`+b!6@R> z_3E($H^(CLWBPUf75)0vIY;4_aZvN4bAI=1yr6$tj06j_SLaj(1C&KQpv-bM#hEfy z&=<+}rvDd_Pp|&X<(@4@7UKnV{5R9q9CCul-7$Uf#vcEb1B?DEk-J6Rb&2_}OfBVu zOZmW;4j-DoyR@`4dM&V|yO#6-CivMQr2F=re-~yiPUS0?^x%vhpaoc-7pC&>j@wfl z8NC@SMylaquV6-BB(odsFns&YnX1C<=v2#?e(T(sTRYGCFm}G`x}@J4ovOH@0gDF~ zi;>&PZ^u+=PYEoJo^i4Khco&D74pW@NE@Yz%op{=P5MG%x~Sh){wx;IfHf>zK(MF> z@6WzrMh{Y2OZq}lU)ZfLo_%M0ymfw}HW8wK1dyh|_G6rLrAtPjFLL)}s!6S{#P#MEFcaW8vhDI7ZG@z}8mRjWu2Bow5 zIA9X>8zXj-I7d8_VO{Qikm^K2+Xvj|8n(Ej%;Vt6w8@-F@LX{ogJ%`d=g_@0)G+R- zcn*ZG6NA!G@eJT6=-+^;lSGrmDJ#Hs)Y5$F1Y>?j#fKo zC9sVn7-#|0=*r|pXq62Z8tX+sbf$eZO0BaqI8u+=hLs1YUa42$=dMxK`RY8{n$>H_qxvCibz$$Z6SV``)*dmn z3)@&xy6Y%{w~=+%HRHVa%Kg&5?mC$QS^1GEY^ps9NwM#j8<(5bejWi)uLg9g8}^Dd z(jbo`(NUC_L-#q*cq;zm^AbQv4+V%d$~MrdvPSi*&x2xd8u(s(8X~kRg$G=D-msrH zwec-s?mo{qCV2QdU)#goCik`TnjT)ipZnT)Wtb}i{HYGExf;2@nOC3Z{vPgewR2}X z_q22VYwmiAyW4rCHe&MH9?;VLNzz8-J*SyC=B!6!&3C-X30q5H8mM_hTWIpq1xT7pl1LnMi2w zrcJGnhg!FWw}x9nTZXo6#bD;sMtgGGj>kYpv$2Gr2SQuo@vLFw%xJnlnI2$6(ZRt? zjOENMalOYLvjs^um`M+W^66Z1AZ_%A=#o5@O`1k;Uo>a*65D&Mb^CHrG8u~{lZ-4# zyVcg(p%29@-Km6;HCQ~B8O-FfEMY{45i4mTjbxg9T5O+K0y*2kgemEAhS}SfG>4+Y zCq*)3$1-_Sq#w)V)25MSx#S3Cu(K5ZBtyo=0I5nbST2#tn%2tfIdUSX3`VhEGO}r7 zFdQ2mX3Yt_OU-zcnh#|&DI;d)n!g;49X!&U%f_1fG8uC)6Ya+gpVh7`bQ#I^?cKX8 zv;m)Wqxhn@U+FlYDISccV=1B zO205{p~k#rT8igmRYF3wuf?Sn0uoKNCjN1ttS#~M<5Jd<_!Hn|-H1&mAgU-tTICBs`_@Lf@rk0>Fa<$02i4b+(EU;DJZlMnWRrq!a zJR$Icz{>)!3A`?lg>$Ee%xE9b%-WccR2H|TX}oN*aDUW{vT$E6$HLi+&5*L+=*th_ z(vN3gV$spQzN~Q)RwZpT8%+-w4YOB$)^{tu_zkvO|18D7OpaUHxXY0_(2gkr_J*abelkqk| zNcR8Ft_3#aBg0TUno~9zkM4U(lP(3jq;x9NQO@P-*o@080Y{2S`$(?i$ub|1?2k~; z-x%2>c?<$clTJgB5D}tD-BIx6^S*^^mG&#mOL95y5NPQGl0AZWMwvj8N$ASsT}HeR zWE2mdrWB9vQu3iXQX9j0>Xkvj6G{DoKxy|0KF(JllTF&a1p(30t_Mlbk7C)R-S;6N zT7H5-*ttj`8m*Vwx6#YjaSiK``-rx(z{7l@hGy%;`{$xk?M9Vz|l9?#RSt3M} SDb#>3x4VmZe "Binaries/OS.bin" - -qemu-system-x86_64 -drive format=raw,file="Binaries/OS.bin",index=0,if=floppy, -m 128M diff --git a/src/kernel/idt.asm b/src/kernel/idt.asm new file mode 100644 index 0000000..0a13831 --- /dev/null +++ b/src/kernel/idt.asm @@ -0,0 +1,7 @@ + +global _idt_load + +_idt_load: + [extern _idtp] + lidt [_idtp] + ret diff --git a/src/kernel/idt.cpp b/src/kernel/idt.cpp new file mode 100644 index 0000000..ed3791d --- /dev/null +++ b/src/kernel/idt.cpp @@ -0,0 +1,48 @@ +// #include + +void* memset(void* dest, unsigned char val, int count) { + unsigned char* destC = (unsigned char*)dest; + int i; + for (i = 0; i < count; i++) + destC[i] = val; + return dest; +} + +struct idt_entry { + unsigned short base_lo; + unsigned short sel; + unsigned char always0; + unsigned char flags; + unsigned short base_hi; +} __attribute__((packed)); + +struct idt_ptr { + unsigned short limit; + unsigned int base; +} __attribute__((packed)); + +struct idt_entry idt[256]; +struct idt_ptr _idtp; + +extern void _idt_load(); + +void idt_set_gate(unsigned char num, + unsigned int base, + unsigned short sel, + unsigned char flags) { + idt[num].base_hi = (short)(base >> 16); + idt[num].base_lo = (short)(base & 0xffff); + idt[num].always0 = 0x00; + idt[num].sel = sel; + idt[num].flags = flags; +} + +void idt_install() { + _idtp.limit = (sizeof(struct idt_entry) * 256) - 1; + _idtp.base = (unsigned int)&idt; + + // Clear out the entire IDT, initializing it to zeros + memset(&idt, 0, sizeof(struct idt_entry) * 256); + + _idt_load(); +} diff --git a/src/kernel/idt.h b/src/kernel/idt.h new file mode 100644 index 0000000..b52b56f --- /dev/null +++ b/src/kernel/idt.h @@ -0,0 +1,7 @@ + +void idt_set_gate(unsigned char num, + unsigned int base, + unsigned short sel, + unsigned char flags); + +void idt_install(); diff --git a/src/kernel/kernel.cpp b/src/kernel/kernel.cpp new file mode 100644 index 0000000..d37b7f7 --- /dev/null +++ b/src/kernel/kernel.cpp @@ -0,0 +1,26 @@ +#include "idt.h" +#include "printing.h" + +// TODO: +// 0. sort out file structure +// 1. interrupts IDT +// 2. kmalloc -> needed for page frame allocation -> first free aligned address +// after the kernel https://wiki.osdev.org/Memory_Allocation +// 3. paging https://wiki.osdev.org/Paging, +// https://wiki.osdev.org/Setting_Up_Paging +// - identity paging +// - uses the ps register +// 4. processes for malloc https://wiki.osdev.org/Writing_a_memory_manager + +extern "C" int main() { + idt_install(); + char* foo = (char*)0x10000; + // register int* foo asm("ax"); + + write_char('B', 0xA, 0x1, 30, 2); + write_char('Q', 0xA, 0x1, 32, 4); + write_base_int(0xb1A2F, 16, 0xA, 0x1, 32, 3); + char string[] = "welcome to zebOS!"; + write_string(string, 0x0, 0xC, 79, 10); + return 0; +} diff --git a/src/bootloader/kernel.cpp b/src/kernel/printing.cpp similarity index 63% rename from src/bootloader/kernel.cpp rename to src/kernel/printing.cpp index 0515c2a..746e2a1 100644 --- a/src/bootloader/kernel.cpp +++ b/src/kernel/printing.cpp @@ -1,16 +1,3 @@ -#define HEAPLOC 0xF0000 - -// how can i map out how im using my memory - -// TODO: -// 1. interrupts -// 2. malloc -// 3. paging https://wiki.osdev.org/Paging, -// https://wiki.osdev.org/Setting_Up_Paging -// - identity paging -// - uses the ps register -// 4. processes - void write_char(char c, char fcolour, char bcolour, int x, int y) { short colours = (bcolour << 4) | (fcolour & 0x0f); volatile short* where; @@ -55,21 +42,3 @@ void write_base_int(int integer, } } } - -void set_bitmap() {} - -void heap_init() {} -// best fit or first fit -void* malloc(int size) {} - -extern "C" int main() { - char* foo = (char*)0x10000; - // register int* foo asm("ax"); - - write_char('B', 0xA, 0x1, 30, 2); - write_char(*foo, 0xA, 0x1, 32, 4); - write_base_int(0xb1A2F, 16, 0xA, 0x1, 32, 3); - char string[] = "welcome to zebOS!"; - write_string(string, 0x0, 0xC, 79, 10); - return 0; -} diff --git a/src/kernel/printing.h b/src/kernel/printing.h new file mode 100644 index 0000000..fe4c15a --- /dev/null +++ b/src/kernel/printing.h @@ -0,0 +1,12 @@ + + +void write_char(char c, char fcolour, char bcolour, int x, int y); + +void write_string(char* string, char fcolour, char bcolour, int x, int y); + +void write_base_int(int integer, + int base, + char fcolour, + char bcolour, + int x, + int y); diff --git a/src/disk.asm b/src/practice/disk.asm similarity index 100% rename from src/disk.asm rename to src/practice/disk.asm diff --git a/src/one.asm b/src/practice/one.asm similarity index 100% rename from src/one.asm rename to src/practice/one.asm diff --git a/src/protectedmode.asm b/src/practice/protectedmode.asm similarity index 100% rename from src/protectedmode.asm rename to src/practice/protectedmode.asm diff --git a/src/two.asm b/src/practice/two.asm similarity index 100% rename from src/two.asm rename to src/practice/two.asm diff --git a/src/run.sh b/src/run.sh new file mode 100644 index 0000000..78071a3 --- /dev/null +++ b/src/run.sh @@ -0,0 +1,22 @@ +# TODO make into make file + +export PATH=$PATH:/usr/local/i386elfgcc/bin + +bootloader="bootloader/" +kernel="kernel/" +binaries="Binaries/" + +nasm "${bootloader}boot.asm" -f bin -o "${binaries}/boot.bin" +nasm "${bootloader}kernel_entry.asm" -f elf -o "${binaries}/kernel_entry.o" +nasm "${kernel}idt.asm" -f elf -o "${binaries}/idt_entry.o" +i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}kernel.cpp" -o "${binaries}kernel.o" +i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}printing.cpp" -o "${binaries}printing.o" +i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}idt.cpp" -o "${binaries}idt.o" +nasm "${bootloader}zeroes.asm" -f bin -o "${binaries}/zeroes.bin" + +i386-elf-ld -r -o "${binaries}full_idt.o" "${binaries}idt.o" "${binaries}idt_entry.o" +i386-elf-ld -o "${binaries}full_kernel.bin" -Ttext 0x1000 "${binaries}full_idt.o" "${binaries}kernel_entry.o" "${binaries}kernel.o" "${binaries}printing.o" --oformat binary + +cat "${binaries}boot.bin" "${binaries}full_kernel.bin" "${binaries}zeroes.bin" > "${binaries}OS.bin" + +qemu-system-x86_64 -drive format=raw,file="Binaries/OS.bin",index=0,if=floppy, -m 128M From 85fc72f8164d61f830bed02f58afd20b5adeadd4 Mon Sep 17 00:00:00 2001 From: zeb33n Date: Sun, 22 Dec 2024 21:43:16 +0000 Subject: [PATCH 14/32] idt loaded --- src/Binaries/OS.bin | Bin 10752 -> 11916 bytes src/Binaries/full_idt.o | Bin 3752 -> 3692 bytes src/Binaries/full_kernel.bin | Bin 0 -> 1164 bytes src/Binaries/idt.o | Bin 3600 -> 3568 bytes src/Binaries/kernel.o | Bin 2924 -> 2924 bytes src/kernel/idt.asm | 2 +- src/kernel/idt.cpp | 5 ++++- src/kernel/idt.h | 11 ++++++----- src/run.sh | 15 ++++++++------- 9 files changed, 19 insertions(+), 14 deletions(-) create mode 100755 src/Binaries/full_kernel.bin diff --git a/src/Binaries/OS.bin b/src/Binaries/OS.bin index 31f750f53932d875f7cdbcebab797ac472de2515..478afc87ac35d11595edeaa6ce1b44b1ca8faea9 100644 GIT binary patch literal 11916 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 delta 493 zcmZ9HPbfrD6vofF&l|(sHyK%AX5@Ly6Q#(4@@HegFdLf;Np~6rYH& z4MTK{L*YIIz^1xw05A;}koPPYv~C#W6D@7;oDA?vDZd!!^Hu4MWeD3DHbj2i2+^eI z>gZODjA}pQl$Q#13yZ2UVw@Tcr&JKZ@EIE-@2wkPVpaXcZ@C&+1T?G9=vI_P+Fv>_ zhJ~CPOe`kX6H6-#$xP|N%>Hxcy%Kj`)DRCqMe|MbLs0;D)D+&gGy{t4_vkvRIjcFZ znNs9)SzVLno+h{C|3c}pCWg30y}nJnrbC}&mc0O-bjR5%U!SHgpM#@hOBX+Bf;B;F z(iO6n3Nm6gn*bwpE**^1GjEOQbtDJ&C3{%aRLA?&jpeI delta 14 WcmaDO_C{>OQbtC$&C3{%aRLA?r3H%s diff --git a/src/kernel/idt.asm b/src/kernel/idt.asm index 0a13831..86431ac 100644 --- a/src/kernel/idt.asm +++ b/src/kernel/idt.asm @@ -2,6 +2,6 @@ global _idt_load _idt_load: - [extern _idtp] + [extern _idtp] lidt [_idtp] ret diff --git a/src/kernel/idt.cpp b/src/kernel/idt.cpp index ed3791d..9e3211e 100644 --- a/src/kernel/idt.cpp +++ b/src/kernel/idt.cpp @@ -24,7 +24,7 @@ struct idt_ptr { struct idt_entry idt[256]; struct idt_ptr _idtp; -extern void _idt_load(); +extern "C" void _idt_load(); void idt_set_gate(unsigned char num, unsigned int base, @@ -37,6 +37,9 @@ void idt_set_gate(unsigned char num, idt[num].flags = flags; } +// now we just need to set interrupt request functions using assemblt +// first 32 are a good place to start + void idt_install() { _idtp.limit = (sizeof(struct idt_entry) * 256) - 1; _idtp.base = (unsigned int)&idt; diff --git a/src/kernel/idt.h b/src/kernel/idt.h index b52b56f..d2cda77 100644 --- a/src/kernel/idt.h +++ b/src/kernel/idt.h @@ -1,7 +1,8 @@ -void idt_set_gate(unsigned char num, - unsigned int base, - unsigned short sel, - unsigned char flags); +extern void idt_set_gate(unsigned char num, + unsigned int base, + unsigned short sel, + unsigned char flags); -void idt_install(); +extern void idt_install(); +extern void _idt_load(); diff --git a/src/run.sh b/src/run.sh index 78071a3..e585368 100644 --- a/src/run.sh +++ b/src/run.sh @@ -6,16 +6,17 @@ bootloader="bootloader/" kernel="kernel/" binaries="Binaries/" -nasm "${bootloader}boot.asm" -f bin -o "${binaries}/boot.bin" -nasm "${bootloader}kernel_entry.asm" -f elf -o "${binaries}/kernel_entry.o" -nasm "${kernel}idt.asm" -f elf -o "${binaries}/idt_entry.o" +nasm "${bootloader}boot.asm" -f bin -o "${binaries}boot.bin" +nasm "${bootloader}kernel_entry.asm" -f elf -o "${binaries}kernel_entry.o" +nasm "${kernel}idt.asm" -f elf -o "${binaries}idt_entry.o" i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}kernel.cpp" -o "${binaries}kernel.o" i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}printing.cpp" -o "${binaries}printing.o" -i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}idt.cpp" -o "${binaries}idt.o" -nasm "${bootloader}zeroes.asm" -f bin -o "${binaries}/zeroes.bin" +i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}idt.cpp" -o "${binaries}idt.o" +nasm "${bootloader}zeroes.asm" -f bin -o "${binaries}zeroes.bin" -i386-elf-ld -r -o "${binaries}full_idt.o" "${binaries}idt.o" "${binaries}idt_entry.o" -i386-elf-ld -o "${binaries}full_kernel.bin" -Ttext 0x1000 "${binaries}full_idt.o" "${binaries}kernel_entry.o" "${binaries}kernel.o" "${binaries}printing.o" --oformat binary +i386-elf-ld -r "${binaries}idt.o" "${binaries}idt_entry.o" -o "${binaries}full_idt.o" +i386-elf-ld -o "${binaries}full_kernel.bin" -Ttext 0x1000 "${binaries}kernel_entry.o" "${binaries}kernel.o" "${binaries}printing.o" "${binaries}full_idt.o" --oformat binary +# i386-elf-ld -o "${binaries}full_kernel.bin" -Ttext 0x1000 "${binaries}kernel_entry.o" "${binaries}kernel.o" "${binaries}printing.o" --oformat binary cat "${binaries}boot.bin" "${binaries}full_kernel.bin" "${binaries}zeroes.bin" > "${binaries}OS.bin" From c346d4f6b74d96065c773b8fa6aa4352c3462aac Mon Sep 17 00:00:00 2001 From: zeb33n Date: Mon, 23 Dec 2024 17:31:51 +0000 Subject: [PATCH 15/32] attempt to debug looks like the kernel is overwriting .bss or something?! --- src/Binaries/OS.bin | Bin 11916 -> 12452 bytes src/Binaries/boot.bin | Bin 512 -> 512 bytes src/Binaries/full_idt.o | Bin 3692 -> 0 bytes src/Binaries/full_kernel.bin | Bin 1164 -> 1700 bytes src/Binaries/idt.o | Bin 3568 -> 5028 bytes src/Binaries/idt_entry.o | Bin 496 -> 1632 bytes src/Binaries/kernel.o | Bin 2924 -> 2936 bytes src/Binaries/printing.o | Bin 3508 -> 3552 bytes src/bootloader/boot.asm | 9 +- src/kernel/idt.asm | 241 ++++++++++++++++++++++++++++++++++- src/kernel/idt.cpp | 112 +++++++++++++++- src/kernel/idt.h | 9 +- src/kernel/kernel.cpp | 11 +- src/kernel/printing.cpp | 8 +- src/kernel/printing.h | 4 +- src/run.sh | 6 +- 16 files changed, 367 insertions(+), 33 deletions(-) delete mode 100644 src/Binaries/full_idt.o diff --git a/src/Binaries/OS.bin b/src/Binaries/OS.bin index 478afc87ac35d11595edeaa6ce1b44b1ca8faea9..998878f5d02119e5e19f3902b9d9bdf85b872afa 100644 GIT binary patch delta 1052 zcmZ9KT}TvB6vyw(&g@P)I-9N^`LPN{MTVq(SrqB!P(mO2u-Jn_QZCCNM9@|b(g;(L zZEYL#COsGl)k_#cEcznqYC=#1MfBuLFw@-#L_&5qw{vD@)!JeA|DXTwo;zpG-G_bS z{qe_4!JGIUM(x&8KBK}#$fCT`+;ZSxXi@%sh&+;4w3MI}DD?^hzuqq63`2-EU$3P^ zg;o4k8ZZXQM#wo!yN#Z$p}n%h2;@USapgA+H&qqxCC0Bj65&Y~6j34JhB88o>vo<1 zA<=W$rO9zN#^`O_iGUE5g=pJ;ZEZMGh7I}PVw7TKz^Go&<)F(vue& zjyJzJ&TYPToX4ECT&vP*;vwNK+sxOFD=^0$S7?qpPBi0=D>Cm9)h;QfDppGL7K)c% zL)lIhloEOwrIhxf_-GKNjGjj+r>9XWXd6l;J&Lk}wxCqeMwDv06QzdMqSVrI6hDgW+6-4zNC6G|@m-O`x!GL-O=*w@%hY&m9(EO#Ze5;)h77o}IyGf!Q=HZOb#4-5`o z)m!Y14TS5C!yAQNH4_0z{CIWD;s- g;+yqj8~iE6XW{SS-pT_O#soi;qwba6PbNHn0sW_W^#A|> delta 533 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 M@VWT6^014^U#>HAFaQ7m delta 527 zcmZ3&+rv3Qq&_?>II#JR#)|_?3=GFzpD-{mGBm&8$zsZq%VNyp%5r*<&%nUYd_(~x z$daW177Tn51ry}RVulI|WavwAGrVAD1S{`#y|i0Hn1NxJ5Kv|3@y>gl7e6lnnZcFi zpT(2K0F)1SQNh3<2r_#IPz^(G>W9eaxcJzOd;1vq(k39o$=*!1lP@x<)Gt$EVBp^t z`ls8KC#{p^>H;v=_0KVuqf3BHsMHUT)FP-*v$SqvE`3EZkl};{Tm2hzYGGu^w^`HO$7XoPp7am3iPXSh@QU(`(=F$Q-0d}U+ z8UZ$@(h31)rqU9oj)Oo2j)xtOIUaXB>deE!0yap&=>yP!6p#Uqd>pMzPQ0v42}eP) zAj55d*yQj3|H&xw@nCrcpjZqLm;ar7iPegU=ig*LHaRAhf0O;#q+~!6Isg9uHwDsg JgA2j>7y!*GrtAO! diff --git a/src/Binaries/idt.o b/src/Binaries/idt.o index df29c82b1590f22c9450bcd4ca4fba2204bd426e..5afce6eb280e4fc805cfe65fe0e961bad69cd178 100644 GIT binary patch literal 5028 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 literal 3568 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 diff --git a/src/Binaries/kernel.o b/src/Binaries/kernel.o index f99f46ba9809bd3469352e8ab7c2c49a3a534208..13289d88c223ea6d1dee6239d0db397fdbd8d6eb 100644 GIT binary patch delta 1057 zcmZ`&ZAep57=F*a_iX3hJ99R*l!%R$D+qI@Q5u=B{ZK1E5TXy*<}$ajCd|zs1P%RT zWhHO@E2uw4L_}0nA{1npL>T>x=tt0xiXkM}2MG3_eb65}aG&Qn@AJOzdGFm>ru=vL z6(_5ibUAl+j%G@~uB@)E&iR+TwY%z0&G~=U!-RinG$Ue0%o$^Z_Ks}I=&WRO=W@Ic2L8;d2uWFnu5Z?&slxsx#TLM;W4-&~GXJ*&`5E_@HEEQ5K z=_Hu4qfReu(beHA(cEh$*6pjHLJTOC zcwX64RQM{?4U)K^bnSLKp{H0(azms!JE{m^EZ(2!bILDqCK*lj z2Evh05=YdYBY|Vyx?HFyG|(HMjCeF0jz(c1m5e6(fP8QCWQvS|R45)F%-0u^rC*z? z&lPmEg=INv+7q17Hdbw;AveiMX=MlZ*%-9gxsrzFVl_QvQEpQJ?Ytc0LSPLaVbl14 zdsriW;J&goXTuk2S=WCK&RrhG0H~)E6%(LUvJD`R=Tx5MuOt0i#7qU4!f{KxE-xCh z0-VOrmJQzL`Q2=u-{kpSo2{-Sy035(^;bx0?Pk8tuB>_1O z%m{mSXGNyF`7(t|a6751RB;nKNm;1roowz!-Oldg4c)`)@Rjc23*-#q58cgtSY~** zpGIHCX2Z=J=wEb}lmmwhJ9~r^9VxDUOin~%|}-j(P4 E1wnK0)Bpeg delta 1148 zcmb7DUr3Wt6hHTVyW98e+uS!b{}r*NFdx!1EXpif>VrgS8kL!@Ij3%zoBAz9gbBX5 z2T8dI20bVgJp{e@V3bgyW-pZnzVuK8K}7~ZFG7Ny`)wjcFI~9jcmDj&x#yhi+sxX? znsAYVNw+KG@}Kfgk5da3nB$%d36mFrVLtFsBY!ZNSR9G&G^LU9NE(*;M%|a6bm`OM!Vt$8UHnC8T z4zvVy3tqT|*We|^zY5S9^qM$l7qXkq&*W}I?N~I$b z0pe6d!!*`zT@aCMS%he;0aQ`chAXfM;RMNKd5In%jLWooe*viKDOHlO{bH!hmD0-9 z6Y6obC#?cEA@g3E=TOQ(l9TS*44T6ewA{Y4G*KzaS80RqBvYE0eLz0ToOoqMpKkaxt45A- zx7EYW;GEz1Icq*C;=NW6xzBH-cLCRbjW44&%DA{7WZ)V>7d~cR_tL{VH zg$O>JiC#h90s^Rj3ecwmo5x^T>m@t1kJM9=ITD?{L)Ei6!vPD1x>nBk&^FGMa2D?bXlsT<;P@1T~70YJ4Pf2 zDB{Y%I@1Ye0Te~$Ts(@J$=RTwc7{BIH&nUOzLV0YNsW+LBskSejW9u`-o#CQ4Nlx0 zbZFR|co{sxEf8~~)|qD#b5q!UP(MdJ z0xQ6XDt!UEKf5c}`(5oI>zz^TGCGXDfD~lE<@L=m;0b0cc86qNr@_y1zLmI2O9aP5 zNJn1QtxQVc9=51FV4u{)wvt`U)u+l?Cwo9)m4~qa5w>ia5^PStRYHfbh7SpW!XwFU+A)C*oB77c6GDU$> zI$yM_5vNy45L?EQ4}_!1VlJ88SRnQ`U7*z}upe|k?*A^sF6kG` zuV~?@0r16h{3h^+z+W6CT0i|0ejX4Q71%FukHGyLDZeEA(*myvye;sFgR@uNdlB!m zpPp0rh8;6nw0WIRWRpg-%4C4&?2*x;9-?O)VNoN%{uq9oXI?X|PEf3kEqDTKhv~<6 zY`~0bH&uE8$j+I~c!%Afq_~SHvl%nMzEaW_wq(X7#lvFW7$x+3<7%45?XGq{@Aa$o J9)M}?{ROZV?KJ=Z delta 1007 zcmYjOO-NKx6h7zuPw$NxlQ#Z^qvlWq{b0nTi2Yzm6yYX{!u0uc9?8t`=9x;1fp%@G z>552@xR!_xtWW-#K&Mm%6)kml|>M zc47uAo*;k@r~xhOFnfvdg0_>+RVIZ++RtcX=@pMpDOA<)qf!K1BCM87!`H;t)xIs? zox%%*amh|7<4_~tRVouuE6;0n7wRmLF|1BeMt$TH#ez~ytKD>HFh!|cq?MXHNs8`6 zizCDlfK{6AXF@R0ctLk2chY7lSdA10X}h$s)K1CtBfW;(^VWH@R;wr-mYcQO1j{Mo z1+aFD8V+@99T4YAu-{P@qH&9WFJ1vlcgR|C0jov+VA&hj3nm7En+4;8z|@L0c1dgX zD_JR#vQ_a+gSt#qjXmbh#T*!l{(}UEUz-ouMYWxMR_izDZJ=7a64-91?4Fns2QXT| zwmWULg5IqLJE8T&n5}JM9a=3q?5K7{IoQd5X^)J282FiCcGZgQ@O{_yeds&BZTnc@ zhhCq!JK~mQAr18By*@r^H#?dMy#Uyp-c=ZIvm@Ej0J5W@$btV2xZ_qKxas~t*pY`f zO!-`aA(_AO2zVhX!fo@APiKR$k(V7ydw~b1y&&U_Y{^mUA@6?C$j^6}^@u5U%-X|B zR@{_-hCQ?{7vA%)V*o5kGmFra!J0$LvxSu1vACNpJaZ2KKiT5Ou z6`%_9Zz6{fr&+>2iwkVVZZ>XO0L#Fh+fDj86<~pVx0|t>t#Oh#%Tg4FSU<%%cHT)E z(>lN(VE3ISoMInI))_{V7-t)!N##R?^+sE9l1)UD`aZJlWjCVD@t+ZZYgGN;qK3-r EFJSQ1@Bjb+ diff --git a/src/bootloader/boot.asm b/src/bootloader/boot.asm index 9d979ee..0517def 100644 --- a/src/bootloader/boot.asm +++ b/src/bootloader/boot.asm @@ -105,16 +105,11 @@ start_protected_mode: mov fs, ax mov gs, ax - mov ebp, 0x90000 ; 32 bit stack base pointer + mov ebp, 0xA0000 ; 32 bit stack base pointer mov esp, ebp - ; mov ebx, 0x10000 - ; xor cl, cl - ; mov cl, 'A' - ; mov [ebx], cl - ; ; print digit - ; mov ax, [ebx] + ; mov ax, ax ; mov ecx, 0xb8000 ;print digit ; print_dec: ; xor dx, dx diff --git a/src/kernel/idt.asm b/src/kernel/idt.asm index 86431ac..876f11a 100644 --- a/src/kernel/idt.asm +++ b/src/kernel/idt.asm @@ -1,7 +1,246 @@ - +section .text global _idt_load _idt_load: [extern _idtp] lidt [_idtp] ret + +global _isr0 +global _isr1 +global _isr2 +global _isr3 +global _isr4 +global _isr5 +global _isr6 +global _isr7 +global _isr8 +global _isr9 +global _isr10 +global _isr11 +global _isr12 +global _isr13 +global _isr14 +global _isr15 +global _isr16 +global _isr17 +global _isr18 +global _isr19 +global _isr20 +global _isr21 +global _isr22 +global _isr23 +global _isr24 +global _isr25 +global _isr26 +global _isr27 +global _isr28 +global _isr29 +global _isr30 +global _isr31 +global _syscall + + +[extern _fault_handler] + + +_isr0: + cli + push byte 0 ; A normal ISR stub that pops a dummy error code to keep a + push byte 0 ; uniform stack frame + jmp isr_common_stub + +_isr1: + cli + push byte 0 + push byte 1 + jmp isr_common_stub +_isr2: + cli + push byte 0 + push byte 2 + jmp isr_common_stub +_isr3: + cli + push byte 0 + push byte 3 + jmp isr_common_stub +_isr4: + cli + push byte 0 + push byte 4 + jmp isr_common_stub +_isr5: + cli + push byte 0 + push byte 5 + jmp isr_common_stub +_isr6: + cli + push byte 0 + push byte 6 + jmp isr_common_stub +_isr7: + cli + push byte 0 + push byte 7 + jmp isr_common_stub + +; we are beginning to overwrite the kernels stack?!?!?! +; maybe the string literall? +_isr8: + cli + push byte 56 + push byte 56 + jmp isr_common_stub + +_isr9: + cli + push byte 0 + push byte 9 + jmp isr_common_stub +_isr10: + cli + push byte 0 + push byte 10 + jmp isr_common_stub +_isr11: + cli + push byte 0 + push byte 11 + jmp isr_common_stub +_isr12: + cli + push byte 0 + push byte 12 + jmp isr_common_stub +_isr13: + cli + push byte 0 + push byte 13 + jmp isr_common_stub +_isr14: + cli + push byte 0 + push byte 14 + jmp isr_common_stub +_isr15: + cli + push byte 0 + push byte 15 + jmp isr_common_stub +_isr16: + cli + push byte 0 + push byte 16 + jmp isr_common_stub +_isr17: + cli + push byte 0 + push byte 17 + jmp isr_common_stub +_isr18: + cli + push byte 0 + push byte 18 + jmp isr_common_stub +_isr19: + cli + push byte 0 + push byte 19 + jmp isr_common_stub +_isr20: + cli + push byte 0 + push byte 20 + jmp isr_common_stub +_isr21: + cli + push byte 0 + push byte 21 + jmp isr_common_stub +_isr22: + cli + push byte 0 + push byte 22 + jmp isr_common_stub +_isr23: + cli + push byte 0 + push byte 23 + jmp isr_common_stub +_isr24: + cli + push byte 0 + push byte 24 + jmp isr_common_stub +_isr25: + cli + push byte 0 + push byte 25 + jmp isr_common_stub +_isr26: + cli + push byte 0 + push byte 26 + jmp isr_common_stub +_isr27: + cli + push byte 0 + push byte 27 + jmp isr_common_stub +_isr28: + cli + push byte 0 + push byte 28 + jmp isr_common_stub +_isr29: + cli + push byte 0 + push byte 29 + jmp isr_common_stub +_isr30: + cli + push byte 0 + push byte 30 + jmp isr_common_stub +_isr31: + cli + push byte 0 + push byte 31 + jmp isr_common_stub + +_syscall: + cli + push eax + push word 0x80 + jmp isr_common_stub + + + +isr_common_stub: + pusha + push ds + push es + push fs + push gs + mov ax, 0x10 ; Load the Kernel Data Segment descriptor! + mov ds, ax + mov es, ax + mov fs, ax + mov gs, ax + mov eax, esp ; Push us the stack + push eax + mov eax, _fault_handler ; checks if interrupt number < 32 (if it represents an exception) + ; prints exception message and halts system. + call eax ; A special call, preserves the 'eip' register + pop eax + pop gs + pop fs + pop es + pop ds + popa + add esp, 8 + ; Cleans up the pushed error code and pushed ISR number + + iret diff --git a/src/kernel/idt.cpp b/src/kernel/idt.cpp index 9e3211e..2d1b630 100644 --- a/src/kernel/idt.cpp +++ b/src/kernel/idt.cpp @@ -1,5 +1,42 @@ -// #include +#include "printing.h" +extern "C" void _idt_load(); + +extern "C" void _isr0(); +extern "C" void _isr1(); +extern "C" void _isr2(); +extern "C" void _isr3(); +extern "C" void _isr4(); +extern "C" void _isr5(); +extern "C" void _isr6(); +extern "C" void _isr7(); +extern "C" void _isr8(); +extern "C" void _isr9(); +extern "C" void _isr10(); +extern "C" void _isr11(); +extern "C" void _isr12(); +extern "C" void _isr13(); +extern "C" void _isr14(); +extern "C" void _isr15(); +extern "C" void _isr16(); +extern "C" void _isr17(); +extern "C" void _isr18(); +extern "C" void _isr19(); +extern "C" void _isr20(); +extern "C" void _isr21(); +extern "C" void _isr22(); +extern "C" void _isr23(); +extern "C" void _isr24(); +extern "C" void _isr25(); +extern "C" void _isr26(); +extern "C" void _isr27(); +extern "C" void _isr28(); +extern "C" void _isr29(); +extern "C" void _isr30(); +extern "C" void _isr31(); +extern "C" void _syscall(); + +// todo move to memory file void* memset(void* dest, unsigned char val, int count) { unsigned char* destC = (unsigned char*)dest; int i; @@ -18,21 +55,39 @@ struct idt_entry { struct idt_ptr { unsigned short limit; - unsigned int base; + unsigned long base; } __attribute__((packed)); struct idt_entry idt[256]; struct idt_ptr _idtp; -extern "C" void _idt_load(); +typedef struct regs { + unsigned int gs, fs, es, ds; // pushed the segs last + unsigned int edi, esi, ebp, esp, ebx, edx, ecx, eax; // pushed by 'pusha' + unsigned int int_no, err_code; // our 'push byte #' and ecodes do this + unsigned int eip, cs, eflags, useresp, + ss; // pushed by the processor automatically +} __attribute__((packed)) regs; + +extern "C" void _fault_handler(struct regs* r) { + // write_base_int(r->int_no, 10, 0xE, 0x1, 1, 1); + // write_char(r->int_no, 0xE, 0x1, 1, 1); + if (r->int_no == -0x80) { // heh, unsigned, lazy + write_char('e', 0xE, 0x1, 20, 20); + } + + if (r->int_no < 32) { + write_char('e', 0xE, 0x1, 20, 20); + } +} void idt_set_gate(unsigned char num, - unsigned int base, + unsigned long base, unsigned short sel, unsigned char flags) { - idt[num].base_hi = (short)(base >> 16); + idt[num].base_hi = (short)(base >> 16) & 0xffff; idt[num].base_lo = (short)(base & 0xffff); - idt[num].always0 = 0x00; + idt[num].always0 = 0; idt[num].sel = sel; idt[num].flags = flags; } @@ -42,10 +97,53 @@ void idt_set_gate(unsigned char num, void idt_install() { _idtp.limit = (sizeof(struct idt_entry) * 256) - 1; - _idtp.base = (unsigned int)&idt; + _idtp.base = (unsigned long)&idt; // Clear out the entire IDT, initializing it to zeros + write_base_int((unsigned long)&idt, 16, 0xF, 0x1, 1, 1); + write_base_int((unsigned long)_isr0, 16, 0xF, 0x1, 1, 2); + write_base_int((unsigned long)_isr31, 16, 0xF, 0x1, 1, 3); + write_base_int((unsigned long)_isr2, 16, 0xF, 0x1, 1, 4); + // write_base_int((unsigned long)_isr3, 16, 0xF, 0x1, 1, 5); + // write_base_int((unsigned long)_isr4, 16, 0xF, 0x1, 1, 6); memset(&idt, 0, sizeof(struct idt_entry) * 256); _idt_load(); } + +// theres nos issues with the code. just where it is. its overwriting itself?! +void isr_install() { + // idt_set_gate(0, (unsigned long)_isr0, 0x08, 0x8E); + // idt_set_gate(1, (unsigned long)_isr1, 0x08, 0x8E); + // idt_set_gate(2, (unsigned long)_isr2, 0x08, 0x8E); + // idt_set_gate(3, (unsigned long)_isr3, 0x08, 0x8E); + // idt_set_gate(4, (unsigned long)_isr4, 0x08, 0x8E); + // idt_set_gate(5, (unsigned long)_isr5, 0x08, 0x8E); + // idt_set_gate(6, (unsigned long)_isr6, 0x08, 0x8E); + // idt_set_gate(7, (unsigned long)_isr7, 0x08, 0x8E); + // idt_set_gate(8, (unsigned long)_isr8, 0x08, 0x8E); + // idt_set_gate(9, (unsigned long)_isr9, 0x08, 0x8E); + // idt_set_gate(10, (unsigned long)_isr10, 0x08, 0x8E); + // idt_set_gate(11, (unsigned long)_isr11, 0x08, 0x8E); + // idt_set_gate(12, (unsigned long)_isr12, 0x08, 0x8E); + // idt_set_gate(13, (unsigned long)_isr13, 0x08, 0x8E); + // idt_set_gate(14, (unsigned long)_isr14, 0x08, 0x8E); + // idt_set_gate(15, (unsigned long)_isr15, 0x08, 0x8E); + // idt_set_gate(16, (unsigned long)_isr16, 0x08, 0x8E); + // idt_set_gate(17, (unsigned long)_isr17, 0x08, 0x8E); + // idt_set_gate(18, (unsigned long)_isr18, 0x08, 0x8E); + // idt_set_gate(19, (unsigned long)_isr19, 0x08, 0x8E); + // idt_set_gate(20, (unsigned long)_isr20, 0x08, 0x8E); + // idt_set_gate(21, (unsigned long)_isr21, 0x08, 0x8E); + // idt_set_gate(22, (unsigned long)_isr22, 0x08, 0x8E); + // idt_set_gate(23, (unsigned long)_isr23, 0x08, 0x8E); + // idt_set_gate(24, (unsigned long)_isr24, 0x08, 0x8E); + // idt_set_gate(25, (unsigned long)_isr25, 0x08, 0x8E); + // idt_set_gate(26, (unsigned long)_isr26, 0x08, 0x8E); + // idt_set_gate(27, (unsigned long)_isr27, 0x08, 0x8E); + // idt_set_gate(28, (unsigned long)_isr28, 0x08, 0x8E); + // idt_set_gate(29, (unsigned long long)_isr29, 0x08, 0x8E); + // idt_set_gate(30, (unsigned long)_isr30, 0x08, 0x8E); + // idt_set_gate(31, (unsigned long)_isr31, 0x08, 0x8E); + // idt_set_gate(0x80, (unsigned long long)_syscall, 0x08, 0x8E); +} diff --git a/src/kernel/idt.h b/src/kernel/idt.h index d2cda77..3c8cb53 100644 --- a/src/kernel/idt.h +++ b/src/kernel/idt.h @@ -1,8 +1,3 @@ +void idt_install(); -extern void idt_set_gate(unsigned char num, - unsigned int base, - unsigned short sel, - unsigned char flags); - -extern void idt_install(); -extern void _idt_load(); +void isr_install(); diff --git a/src/kernel/kernel.cpp b/src/kernel/kernel.cpp index d37b7f7..3c950e2 100644 --- a/src/kernel/kernel.cpp +++ b/src/kernel/kernel.cpp @@ -14,13 +14,16 @@ extern "C" int main() { idt_install(); - char* foo = (char*)0x10000; + // isr_install(); + // char* foo = (char*)0x10000; // register int* foo asm("ax"); + char string[] = "12345"; + write_base_int((unsigned long)string, 16, 0xA, 0x1, 32, 10); write_char('B', 0xA, 0x1, 30, 2); write_char('Q', 0xA, 0x1, 32, 4); - write_base_int(0xb1A2F, 16, 0xA, 0x1, 32, 3); - char string[] = "welcome to zebOS!"; - write_string(string, 0x0, 0xC, 79, 10); + write_char('D', 0xA, 0x1, 30, 4); + write_base_int(0xb1A2E, 16, 0xA, 0x1, 32, 3); + write_string("hello!", 0x0, 0xC, 79, 10); return 0; } diff --git a/src/kernel/printing.cpp b/src/kernel/printing.cpp index 746e2a1..87d5d17 100644 --- a/src/kernel/printing.cpp +++ b/src/kernel/printing.cpp @@ -5,7 +5,11 @@ void write_char(char c, char fcolour, char bcolour, int x, int y) { *where = c | (colours << 8); // load the value into the pointer } -void write_string(char* string, char fcolour, char bcolour, int x, int y) { +void write_string(const char* string, + char fcolour, + char bcolour, + int x, + int y) { while (*string != '\0') { write_char(*string, fcolour, bcolour, x, y); string++; @@ -18,7 +22,7 @@ void write_string(char* string, char fcolour, char bcolour, int x, int y) { } // maybe indexing the characters from a constant would be easier -> quicker -void write_base_int(int integer, +void write_base_int(long integer, int base, char fcolour, char bcolour, diff --git a/src/kernel/printing.h b/src/kernel/printing.h index fe4c15a..77c2813 100644 --- a/src/kernel/printing.h +++ b/src/kernel/printing.h @@ -2,9 +2,9 @@ void write_char(char c, char fcolour, char bcolour, int x, int y); -void write_string(char* string, char fcolour, char bcolour, int x, int y); +void write_string(const char* string, char fcolour, char bcolour, int x, int y); -void write_base_int(int integer, +void write_base_int(long integer, int base, char fcolour, char bcolour, diff --git a/src/run.sh b/src/run.sh index e585368..a66a9f7 100644 --- a/src/run.sh +++ b/src/run.sh @@ -14,9 +14,9 @@ i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}printing.cpp" -o "${binaries}p i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}idt.cpp" -o "${binaries}idt.o" nasm "${bootloader}zeroes.asm" -f bin -o "${binaries}zeroes.bin" -i386-elf-ld -r "${binaries}idt.o" "${binaries}idt_entry.o" -o "${binaries}full_idt.o" -i386-elf-ld -o "${binaries}full_kernel.bin" -Ttext 0x1000 "${binaries}kernel_entry.o" "${binaries}kernel.o" "${binaries}printing.o" "${binaries}full_idt.o" --oformat binary -# i386-elf-ld -o "${binaries}full_kernel.bin" -Ttext 0x1000 "${binaries}kernel_entry.o" "${binaries}kernel.o" "${binaries}printing.o" --oformat binary +# i386-elf-ld -r "${binaries}idt.o" "${binaries}idt_entry.o" -o "${binaries}full_idt.o" +# i386-elf-ld -o "${binaries}full_kernel.bin" -Ttext 0x1000 "${binaries}kernel_entry.o" "${binaries}kernel.o" "${binaries}printing.o" "${binaries}full_idt.o" --oformat binary +i386-elf-ld -o "${binaries}full_kernel.bin" -Ttext 0x1000 "${binaries}kernel_entry.o" "${binaries}kernel.o" "${binaries}printing.o" "${binaries}idt.o" "${binaries}idt_entry.o" --oformat binary cat "${binaries}boot.bin" "${binaries}full_kernel.bin" "${binaries}zeroes.bin" > "${binaries}OS.bin" From e581ff231f4a806e9ec4acfe9c8b9d6ab320f770 Mon Sep 17 00:00:00 2001 From: zeb33n Date: Mon, 23 Dec 2024 18:37:44 +0000 Subject: [PATCH 16/32] working interrupts --- src/Binaries/OS.bin | Bin 12452 -> 12080 bytes src/Binaries/full_kernel.bin | Bin 1700 -> 1328 bytes src/Binaries/idt.o | Bin 5028 -> 4436 bytes src/Binaries/idt_entry.o | Bin 1632 -> 576 bytes src/Binaries/kernel.o | Bin 2936 -> 3088 bytes src/kernel/idt.asm | 232 ++--------------------------------- src/kernel/idt.cpp | 95 +------------- src/kernel/kernel.cpp | 5 +- 8 files changed, 17 insertions(+), 315 deletions(-) diff --git a/src/Binaries/OS.bin b/src/Binaries/OS.bin index 998878f5d02119e5e19f3902b9d9bdf85b872afa..f1cc6ce5628c7768456bae43ce73d9c4aae54526 100644 GIT binary patch delta 610 zcmZ3IxFK$XBvS?>GXuj5e;{$(^_`)Su}Ru-*H5Mly{_+?-*9AcWhrDa0!e{@7ZHpM z49!Orn&0qbF=fetMV(&MFu(;_ph^Q@q$3MLRJyzfnq0#qssA4##g*ls#goO5u}&Ch ze+xu>2ha|Noj}Ym^ZUDv;n2>fK>wv3XLZnJVEE6z z1Ehbk6OavNfxONLhWsF}`~Ca>AMACO30>|Noz#9LO%pxMy-YyQb4FAU_49%8`$wmC1>hl_}vU4+{%e ztqoB4A5cCSMLr%ZuK*N_0b<9$lP|GbF`f83nU6zG>A~Os|K*TXM}ZZCO#`XE_jj@% hhn$fb(4oP|%9#A&md*i+M*`(#k>w*d&*Naz001Xz$D9BF delta 955 zcmZ9LT}TvB7>3Wx&dg4_I-9P4sk4?*L=dh0UlfMs(#(FsEY#CLz0{)A?pkuEenWyz{=_+4G%mW~cfl z`lssnff^q|i`qt{<<#l;qW0$udai94>#|;=H|ZSx4tCp@IfRV)CSyII^SbJ}QF{pO zngT1mZujgp3zeOA)O^I(g?|;J68)MU&{3kf3L*P$!Jl5{SGl%PO&)DOX>1KAt6;Yf zy*RyGAGGUtT$i@+FAv}QFVAnAlR_l5a0DUcUCbHP0`U=Hb;i5ZoCP5}PbG`CAev>- zv)Ja-P&P~NGRt$Zk?-{A@kMdw1VXOgg7vRvsrD31h4U^2rqWz!$+9cyAZWzvT#BY% zCbNu$3Yo9C?B}+363b!Bgkto$5E<)20?7!`2|)w)L+{6eb}2nUp~=k6xp+q58lla( zoK7pTOrKFMMJ0!KXdRe5-ek&$e=sHBHKs)Tg((StWXg|cJ=LnWVvBkE@FY_uc!H@? zJjPT2XP7F(Pf)6`aXCrB{tCGd2$DO1{X_>;kO4p?=>>#H3{XX`0;9z<;_0nJb%$K$0YSokK?*su(qRIe#}S9L|)4V1OYWrtCxO; m9rK%{o?W74Fw0`u_-@$?YG0u*g0we}LOdPuyGQB275xP#P++M5 diff --git a/src/Binaries/full_kernel.bin b/src/Binaries/full_kernel.bin index 0c84f609316ffae33c141bcc830eb45a7a95a15e..66e826876b400b371e817f28f0d4a953a8dc4031 100755 GIT binary patch delta 608 zcmZ3&yMb$hWCkNM1H%h{AaUIFouQGjN!oGOPo@mLuJ4-PaAa|1DP%DMNr8YD5sVBB z%|{fP-|%EHWyyg>onF*1zy(>LN&{b{BMU-Qy1WRQSR<+bA0fk)<)6iq#gMU17-)S9 zM0^L(3Wl9P%rNu&&ra7b8@F6#6aZN$0)&iNd|9b4)c#FA!em(Qrpmy;zb*7nw<}Lt zC(Bg_FxU0ZF_xn)Kqge`2S~~ZD%BPGr9#5`kO5--KmY%qpB%_4%D888I;*DBE+9Vzq{@+xqm{{tmz62uC=Uw@Sgj3E z_#aR{8AU!GEUy3*iveQCzmqSqS}~pYJDHD7PU*ql|NrHXRY!ppgG~dezV~;sADf(o b8qlG^$jX@f;g-$;ibn$FWs&70A;tgzmUPAx delta 945 zcmZ9KUq}>D6vprT*>zf1XVdjx>a1l15ky*nC6q1>B}Cc7VhP6Jmgdhow=*gF0Zr2D*LUu=|duDE~#4z*w=KIdwd+wQi9h$7j zH4N5C2rcMqZS6;oB^UHR$I)Yb%~(}%2)AH?JtKYgSpgwquEkglV-ahf8@Gqiwkh+{ zi+2A`)35BY<4^82#D0~M5WaxJ7^PZk5VCLj{+q>Rp>s@E#=4Fe8zbo&*el8|0axN7 zyK&2PSp)y_*scHa;-)zzwq@oIAf&!cIAeM^IVvwtd#}1PFX!i&}oa!7KvEMu++;Gp3$hE zNu^~!H@%Zs4qqmhqR)P0tjZ~*AjAd)4cK?RAB))K>;!(3xy!T3oGLU!o3jPXDv83r zP$9#lK(<&Nm?Bx{N+LhFlF15J0rG{bAo<8u8JY1^2ksyi_jZvfu0mvzt8y~VRhZ&_tU7&9oMvQ56uQol2oEnHoV9UDbl>g!(dRMNsx@b~?L~wMSR_ETf8j*QHD9 zEA?4f?3yvBd`b-s4`1KQ&R{xHy}2YQjqeMt`;Hl?CoG`eNI*=ZZdFR(35qYw-_k*` zt!QepCZ>z#DF&-(UXf3VryX-#*7o%~uGiMuNqb6nzuzSQYzsXw1 a2UZ5NER{`cmpx_nIrc{g?#$y}jQ#=~WL>iW diff --git a/src/Binaries/idt.o b/src/Binaries/idt.o index 5afce6eb280e4fc805cfe65fe0e961bad69cd178..6a58e5527184f5663ddbfbd94022ad3b9e82adc5 100644 GIT binary patch literal 4436 zcma)9TWnlM8J;R8FRdq6vYpG>^_8r3 zHT&+(>;~!Ij;>5>tYqKiKf0D(Up6+gU^X7eMi+0v?2R8wKWk~db2f<|pAFACw>CC6 zHUao97ts-)wPLtmXkLGINgsmbCX!M8GMD{1+tXX(z=Dr=ogudj_dT6*3BZb7@K89 zGFRfLL_ef-E`AltS!;Z@VF4vMynh)-&w_E8c}E0x={uT?GioW?z6QdI)}S(efhHCw zl7;F{nen(}4CA+uBw`C_O{0P~DQRKULGO?@Z7g5}ClM;Ztv^EA_69Y(zJ=C!4o#0A z*0=_f+oDp;0%mXms?PmrXpmjhY?AoPAi||-kMTR=FM<{UG%WHGocW#6CmWLB^N@(( z{b&Q$-ysfOM{_%w$>uJiKHO*|OAY!Egi%wJsvdG~`yYhX_aO=d(40eU@{_yi=hzi-Ti46&nWJN#t7MIqJj;E&@)`UPB=*Un9<(0%;|Q zG*+2du*=Nq^Shlk3#1#QaT%*t@+>*E$InR9xg90OJA%H>W8LOXle`!gY%Br$E*1zM zN%IFn_lL$3!y!!DUKR>H7z*G_o1$51?80y%u^Q$iX-n`xI27__X^SIfFvE`Z=&0$~ zNDq?Ba9?DgqjXy}Jkmp!?JbrN$9TN$_^w5Gbj0|+a3U1w-Q7#V=uYfp1PYQlrBu|J)K}1(Y zcv8eZDca%IX%z)OCz8iRNheAPKxIy8JQXxq&f6b1yMpgKpqa zaH@`5%F90I)EH#y{l!|v>A&nu^^d!?Stsw+`yaFOXCLjayLooOajQR^yzDabsOGxNRRA9X*oj!v^_~+8cOd_=R77gz-g-@9s3sWt<2)PE@H3Q*$D0 zeaZM}m+)@D!q<%`9o@SP{rN5Zry$nXd_!+cO9P6%h^jvhTl%vN{TlT8gVNBS^W#I+ zQs^M-VzPg3YMQY1l|{UKk2FjIEZCrZ`;KjV=Qh5JwJQnDO&nJU?p43gWr%BLH*uip z0Y!WoNVYUrWIq7ZB?{tWsCuqQe-6B!8{%iRF_7$+w(-w^*KU>NbR zz0&_h@qbhJZzZP>D&?0}*sl;G#__RDkfddLZqVR}9Izwci0vf>M3ZGDT zMd9-bS*Cue;@ML`&-JmWDc31yJm<3>%S_vz%`#KRq-;fLahircS zkd6x7OV~V^||yw2s!cIlmVvKPV|by0vwF$3bf!knBw)K>Jb`O+EsFrb+i{1W6I0iq<_0 zzPaB%9Ddq=)GrN3_e)EneL%7&5$|_IsG@Z?_~v-Sh(}|icsRO^c%K1HKBS{EiOv6- z4g#J?s`RaFw(CYx7a-F`+kFLsX1g!Ij-JQ5XghhALa3ME>#%!88v$v&ROn7>9!C-5 z=!1;Lfh)B!4vMQ|fn=xQGyq{7G(t-|noo+Q_X)vFkv}4`#JnzSO&wD=a^;60HpW~b}w{WJjI}&5hh8@dx2^}oTn%T&?KhDfY=aTia z$@#gYaV~lLMsk7de+kcxEX*Zu^Eb{X=V!IWB!q>BlHuuFaQoStvYi1s*PocV{q*GO znfdzhD1LlAG;ZEnSX^A3c`N4H+fJ@*zn}uu&mBN4^cbBzu#iI%vo~jxA0n&QZ-pCQ z9f8XCD?gGV4lRk4W8L)DG$??MRH_5VMN$ZRW#^rE> z({O43l*jK|YN?F@D2;?s0q7^8>}n#)c-1VjZpk(MUr_W!rcnFzUGUj1xzIbnACNwN z=F1$yu{;v1kp#rA9>9z$F3EyOo*GXowc-oec@cn|UW^}VPE zW&DKx6mgltc5W6X*pSrs@=TQt$!`1f99)K4scFA{45J%rCqBfhRhA48-Al8S01+ir zx;Tb9AbyW}lQ==@Ri8(*z{{Xf4U;OX^~5&TDk)NhSmH%^hJB(?wlPQkK}f6q3yYlR zFVvc>)HpH$KVJ14X!8v`bj0|jri}!ne%erf0)0_xo9WizhyCwB`wS>;V1DT);`_^! zC3d)-Hj{SI4$yuWX@5aVK0j@`FKwg^s9l^0&{jL5Jc}&a3X$)P^ujufhhO?9g|pb+ zZA7$-jMe=P`ql4}u_F)#9GAmljN0%^Bn3tgr6WodE&NmIBJ1dIlF0^U$<`&O>!Pvd zZR&4JQ%br{tSvBpU%;{1ti@MHjTmoWy0NpJKNQ>%9B%FnBC24+&6rOZLQ4$3O)MCE zIH-rPXmPf?)it+A`dTp#;SHp<&?k!dGV4sEBtgU%Rsw^CP)P=%JN!YY4U zND-C4Y*G$U@mlX7 zNYR2xz~I;hJlG#7@+y?fz5Ph|Gadn34-oIe|AZO{u=eye1ZmUm2d5pUfj8<0$?`Z= zC#Vv=Ovv#1y<9Z?NYv$pZi^t(e0ry-C+HI)g2!=}0gi|WfcJ^IX9eFS68gHhs4ECP zCmN56I^%$1+}JNV2E=EK%Oa2y(S0H?Bi8H_(LN%M7>4p?(X>zS%OW};8plNFqKG_i zT&AB`WjrtHjlAGTMRd2|`o=yD?{}U$)|EJE6>Kw=$)~MMCQ~S|)UgLkW~pl02dDA{ zhTAt)C|B)tvB**oCZq<|)L7a!rC^qA>ojx1jHat5{B1T_H7&Y1C(G5sSlP_Rr~_80 zTD548JUS8^+`6^vv$3x3cy~Mz+g9r7MrBWy&0U3_-Uq>vQ(p10*tT5GGEJmX&KAmJ zjJjgge8sY3wN9vK%6P)Im@^1gtdz%=I;4vy)2FKmm9fkV^U&qVZHlFG>B*v<%A>EM zY017)n2jYJ<%(&%Yn*YF?NqtKiiJ|aW?AHjxvE;-vQ9A5@ucZX6)Wki6Ruccre&ov zm8{7!l}Ti7nTRJ-xijfg&H!j&uxwvC%f*6RG3s!T%-z(3yEgffotFvpbg|BSrDS%V zF-JQOT9t7#V^=#5r!$Xzv9oGr*psGJHjABT8_!Hkd=g)pW9jSSgoOmLC~@5Ej|>j( zjCEjjx2T21x1v+{nL~_E8+?7e&qtRloke=6^inktGM>}+Gzj}TJRDn}veAjF*|nr} zpteuoc?OUCCUV#JtpHl0vtDTYT*Ai!LWz`n625 z{8+5H=qym@%}o>TA6(Z?p-UHc)OwP@>D5beJCJ;7uE;+DbPIjH z58-j=itI-ryK_VGxa$lg|Cwd-xn=T&W%75H$yXq|b4&4S+va0ejJjHuojUC36>g`M zb~zni@0q#lQK4g*a8HGMM$u9pOSD>g3n2d^cr+}{NrgWIaxBbi3g1#lU$~_IK;b_K zvBV!K`F~2*F%9Im2Bm(sv`tG+x4tLQCOkg=ZC>S4eA4{x2!K zL5Td`QSxsIF%R!4d5ZFf|5p{hr0^AmKUa8D;jb0GtMCJbw-o+W;aZH1;%-)WpTbUs zhZG)Fc$^SVUda`ORi!_xYdU zoX%TqeXwr#kPJ*Hd_dt&g>;t5KL*r*{R&Sgd|KfZg)Ck@U9!`oK-+RK?=s6Q#%=SI z&Ena#oo4Y-{NIR^GHZ@bj^Tx!tH30AdUVt>r@Yp*l`fCr-<799u~0VM2I#}3q)tgW zQz@13)!?)-^QoMbE}2O56P7mkVcF%qM@{J8h4&kdY*gre#8#AZLvjla$M=CaUa~!2 zG4kAORx*}BmK$yWCA;EQ$aKzJzxQGAlR}l4LdwT&Ln`t!-9{c8t*tk|pCG?$@TL54 zMCBJMh407XjhBS+sz>3{L(BYbVROZxbBpWuC=}j)PvIV-{YU*$f9|}{lDKU^nSuTI zHzKOIwlrjKyjjGfu~9r6{aU;)gHs!_QTaFG(K&VtQF`c|?e%*P!Jl-Ul#T3PU*qJmFO_fO@s8sf#?b*CjRUkc4vOo>0%cMBu{a1N-MQ}k i(R@-Y&$6>D-XpI-=N5`Xh2net-bZIwrNyaSzyAa3Z5KlT diff --git a/src/Binaries/idt_entry.o b/src/Binaries/idt_entry.o index ab4a5f373fa634f2fde52e8cc719a7c7df545766..f5fbb1b50fcec1437c426c212ba168c9c376fb7e 100644 GIT binary patch delta 140 zcmaFBbAV++4U-(h#5yIW0LF=n)btt{85jx}7#LW9m>Eh70BK1mA4q}02cS9|hKb*l zm<*UEOEJocCCIVyFW_JC>&2h{|NnpCU&+6aT|V*r;CL6FC%f_dt=A{;8 UCW8$C8O{i_MG#0cu`)0K01Fu&ApigX literal 1632 zcmb7^OGs2v9LCSpaU8Rp(aO?%6hs7q&b?}BZHyjnN`wduf@#zd8}De%jG-%qps2;r zqBhl{*CJblt#Vb-YgH5!5w)>ap3b6zC=klN|2gO8pLQKM|L^ymd(L+s=iWQDcmF=e zaYWD@Q7o375MA~_o7Sx&EQ*4u|D}{kJ#1ISVRo|<#q4+~wAeDqG)~vVe6XYvWBf{H zVQ6j$<3Xp)8g!l)FA<_42*I%cH-XF0gVu`+rS-Iy=1^t?J?hk>ipPs-krpz7Lqv}J zjX|O!`Q1{n{A?*C=Pi}Ux0b^4xusJ1NK;3;L(bW;GI__+3VG8~xx8d)r95wGl{{^! zLQT=>qiTXArcRJlsx(QJ8X#G%j*zTThe+0{9+GO+O|njPk*rspBsIz-sZ~uR8`Nf! zI#o|nuc}EJRFtGqMHYL9hNp!RM;pS?tI=CSb1_kPS9n;MFD#s$@1;8uORxH(Gtq0M zjmc9_A}?uVxi#lg6M4~`8_wmk`D8z6GGo;GY|1xtme()}_K$`_;@c8Cq~GKUOsM@k z$NRfs~}APQ>Cia zld&bsmxjjT7689aM0_LDNt1PAoRtJ!>KSqrrWuq&?4ac}<*t6xcsd29tXNKx zM;ZZ&>LP)*3TO{dNG)qERlF@W-)}bCTEdIvJpW`ZY>A2^9w?=)jUeL~NoIS1m(WG{ zS+zG{D!a;d`B}bZ71J4fVA3ibG?Yv4t|I@Ssp!-{j`AHi&BJ-y*CpG?;1WM^sz>N& zg@0b;>DTlQy+inE`t+=D>1kp760C>oz*zi3VmO#ijKzi%(V?Kc!ki+>cruoX_6?2< zBq27I?29GFQUmcgo>nefeZ6&c|7jWgphWcXk%3e+6HVf7^&!rw)po9@!yX3hmf&e< z^C{^o8h=hg+nYlkRRvtpi?K>fvPFC(!ghmf-We9*v2BM?`u+GtG^(;Ns#@0(`Ka6g zpeq7y0<=i<0CY*r0~m7fl7r~1KPF@fz>M_0ct@LPo|h86;X4OEI{4YauM#=Hn&SgK zyNtJ=>~Xa+YTqvcIH_A=K?697clAoHF!YKdT+*#=x=!l~ZFJ?LgKkU6-y6avccmzx zWKZ!NvAtAgHWzV^B9_Su=De3~i!I=LcUWwYHj&dT!(z*58(}R&=P6^@X;iQ*jv8TZ p3VdLMcu?Rgf&v|X7$Gqv0DfYjSt+`y&x^Sn$4yJ@q^~q1y?=votPTJG delta 781 zcmXw%O=wd=5XWcty?tMsua_2^D$=B>2?Z_MCI?%wMv_A;wxGFag<7RBAz# z9z?0MjJxl&NCu(LYk>fpS|d<@0J8q&nQDPCZHlXuA0c5AvRr%MSQjq}H*o z!(~Au&_+o=NSSS+hGL*#cG3K})GVsq1B30FuU`(xqq5{X)=p>Q3g7E@63`51TX+c9 zc(=Ft^x=>%wczT0_>5aB29h1>sm#!On3D7%NVd@?muW*UN><#Mq_D z@iH!JH?dDoyY*bPbhVH#Olx_7zw;*oE)q_6n6lU6y_4(l%fYOxh1iO4hn^(@?rL329tUWH76 zj}3lNcc+u}qb=k7rH;Ka#^339o-kwL h9T^iI0q_-{%c%H8ULHToXlRyte@1niMt?}%{sUSEj5PoN diff --git a/src/kernel/idt.asm b/src/kernel/idt.asm index 876f11a..d88def0 100644 --- a/src/kernel/idt.asm +++ b/src/kernel/idt.asm @@ -1,4 +1,4 @@ -section .text + global _idt_load _idt_load: @@ -6,241 +6,25 @@ _idt_load: lidt [_idtp] ret -global _isr0 -global _isr1 -global _isr2 -global _isr3 -global _isr4 -global _isr5 -global _isr6 -global _isr7 -global _isr8 -global _isr9 -global _isr10 -global _isr11 -global _isr12 -global _isr13 -global _isr14 -global _isr15 -global _isr16 -global _isr17 -global _isr18 -global _isr19 -global _isr20 -global _isr21 -global _isr22 -global _isr23 -global _isr24 -global _isr25 -global _isr26 -global _isr27 -global _isr28 -global _isr29 -global _isr30 -global _isr31 -global _syscall - +global _isr_generic [extern _fault_handler] -_isr0: - cli - push byte 0 ; A normal ISR stub that pops a dummy error code to keep a - push byte 0 ; uniform stack frame - jmp isr_common_stub - -_isr1: - cli - push byte 0 - push byte 1 - jmp isr_common_stub -_isr2: - cli - push byte 0 - push byte 2 - jmp isr_common_stub -_isr3: - cli - push byte 0 - push byte 3 - jmp isr_common_stub -_isr4: - cli - push byte 0 - push byte 4 - jmp isr_common_stub -_isr5: - cli - push byte 0 - push byte 5 - jmp isr_common_stub -_isr6: - cli - push byte 0 - push byte 6 - jmp isr_common_stub -_isr7: - cli - push byte 0 - push byte 7 - jmp isr_common_stub - -; we are beginning to overwrite the kernels stack?!?!?! -; maybe the string literall? -_isr8: - cli - push byte 56 - push byte 56 - jmp isr_common_stub - -_isr9: - cli - push byte 0 - push byte 9 - jmp isr_common_stub -_isr10: - cli - push byte 0 - push byte 10 - jmp isr_common_stub -_isr11: - cli - push byte 0 - push byte 11 - jmp isr_common_stub -_isr12: - cli - push byte 0 - push byte 12 - jmp isr_common_stub -_isr13: - cli - push byte 0 - push byte 13 - jmp isr_common_stub -_isr14: - cli - push byte 0 - push byte 14 - jmp isr_common_stub -_isr15: - cli - push byte 0 - push byte 15 - jmp isr_common_stub -_isr16: - cli - push byte 0 - push byte 16 - jmp isr_common_stub -_isr17: - cli - push byte 0 - push byte 17 - jmp isr_common_stub -_isr18: - cli - push byte 0 - push byte 18 - jmp isr_common_stub -_isr19: - cli - push byte 0 - push byte 19 - jmp isr_common_stub -_isr20: - cli - push byte 0 - push byte 20 - jmp isr_common_stub -_isr21: - cli - push byte 0 - push byte 21 - jmp isr_common_stub -_isr22: - cli - push byte 0 - push byte 22 - jmp isr_common_stub -_isr23: - cli - push byte 0 - push byte 23 - jmp isr_common_stub -_isr24: - cli - push byte 0 - push byte 24 - jmp isr_common_stub -_isr25: - cli - push byte 0 - push byte 25 - jmp isr_common_stub -_isr26: - cli - push byte 0 - push byte 26 - jmp isr_common_stub -_isr27: - cli - push byte 0 - push byte 27 - jmp isr_common_stub -_isr28: - cli - push byte 0 - push byte 28 - jmp isr_common_stub -_isr29: - cli - push byte 0 - push byte 29 - jmp isr_common_stub -_isr30: - cli - push byte 0 - push byte 30 - jmp isr_common_stub -_isr31: - cli - push byte 0 - push byte 31 - jmp isr_common_stub - -_syscall: - cli - push eax - push word 0x80 - jmp isr_common_stub - - - -isr_common_stub: +_isr_generic: pusha push ds push es push fs push gs - mov ax, 0x10 ; Load the Kernel Data Segment descriptor! - mov ds, ax - mov es, ax - mov fs, ax - mov gs, ax - mov eax, esp ; Push us the stack - push eax - mov eax, _fault_handler ; checks if interrupt number < 32 (if it represents an exception) - ; prints exception message and halts system. - call eax ; A special call, preserves the 'eip' register - pop eax + + cli + call _fault_handler ; checks if interrupt number < 32 (if it represents an exception) + hlt + pop gs pop fs pop es pop ds popa - add esp, 8 - ; Cleans up the pushed error code and pushed ISR number - iret diff --git a/src/kernel/idt.cpp b/src/kernel/idt.cpp index 2d1b630..febc0e6 100644 --- a/src/kernel/idt.cpp +++ b/src/kernel/idt.cpp @@ -2,39 +2,7 @@ extern "C" void _idt_load(); -extern "C" void _isr0(); -extern "C" void _isr1(); -extern "C" void _isr2(); -extern "C" void _isr3(); -extern "C" void _isr4(); -extern "C" void _isr5(); -extern "C" void _isr6(); -extern "C" void _isr7(); -extern "C" void _isr8(); -extern "C" void _isr9(); -extern "C" void _isr10(); -extern "C" void _isr11(); -extern "C" void _isr12(); -extern "C" void _isr13(); -extern "C" void _isr14(); -extern "C" void _isr15(); -extern "C" void _isr16(); -extern "C" void _isr17(); -extern "C" void _isr18(); -extern "C" void _isr19(); -extern "C" void _isr20(); -extern "C" void _isr21(); -extern "C" void _isr22(); -extern "C" void _isr23(); -extern "C" void _isr24(); -extern "C" void _isr25(); -extern "C" void _isr26(); -extern "C" void _isr27(); -extern "C" void _isr28(); -extern "C" void _isr29(); -extern "C" void _isr30(); -extern "C" void _isr31(); -extern "C" void _syscall(); +extern "C" void _isr_generic(); // todo move to memory file void* memset(void* dest, unsigned char val, int count) { @@ -55,30 +23,14 @@ struct idt_entry { struct idt_ptr { unsigned short limit; - unsigned long base; + unsigned int base; } __attribute__((packed)); struct idt_entry idt[256]; struct idt_ptr _idtp; -typedef struct regs { - unsigned int gs, fs, es, ds; // pushed the segs last - unsigned int edi, esi, ebp, esp, ebx, edx, ecx, eax; // pushed by 'pusha' - unsigned int int_no, err_code; // our 'push byte #' and ecodes do this - unsigned int eip, cs, eflags, useresp, - ss; // pushed by the processor automatically -} __attribute__((packed)) regs; - -extern "C" void _fault_handler(struct regs* r) { - // write_base_int(r->int_no, 10, 0xE, 0x1, 1, 1); - // write_char(r->int_no, 0xE, 0x1, 1, 1); - if (r->int_no == -0x80) { // heh, unsigned, lazy - write_char('e', 0xE, 0x1, 20, 20); - } - - if (r->int_no < 32) { - write_char('e', 0xE, 0x1, 20, 20); - } +extern "C" void _fault_handler() { + write_char('e', 0xE, 0x1, 20, 20); } void idt_set_gate(unsigned char num, @@ -101,11 +53,6 @@ void idt_install() { // Clear out the entire IDT, initializing it to zeros write_base_int((unsigned long)&idt, 16, 0xF, 0x1, 1, 1); - write_base_int((unsigned long)_isr0, 16, 0xF, 0x1, 1, 2); - write_base_int((unsigned long)_isr31, 16, 0xF, 0x1, 1, 3); - write_base_int((unsigned long)_isr2, 16, 0xF, 0x1, 1, 4); - // write_base_int((unsigned long)_isr3, 16, 0xF, 0x1, 1, 5); - // write_base_int((unsigned long)_isr4, 16, 0xF, 0x1, 1, 6); memset(&idt, 0, sizeof(struct idt_entry) * 256); _idt_load(); @@ -113,37 +60,5 @@ void idt_install() { // theres nos issues with the code. just where it is. its overwriting itself?! void isr_install() { - // idt_set_gate(0, (unsigned long)_isr0, 0x08, 0x8E); - // idt_set_gate(1, (unsigned long)_isr1, 0x08, 0x8E); - // idt_set_gate(2, (unsigned long)_isr2, 0x08, 0x8E); - // idt_set_gate(3, (unsigned long)_isr3, 0x08, 0x8E); - // idt_set_gate(4, (unsigned long)_isr4, 0x08, 0x8E); - // idt_set_gate(5, (unsigned long)_isr5, 0x08, 0x8E); - // idt_set_gate(6, (unsigned long)_isr6, 0x08, 0x8E); - // idt_set_gate(7, (unsigned long)_isr7, 0x08, 0x8E); - // idt_set_gate(8, (unsigned long)_isr8, 0x08, 0x8E); - // idt_set_gate(9, (unsigned long)_isr9, 0x08, 0x8E); - // idt_set_gate(10, (unsigned long)_isr10, 0x08, 0x8E); - // idt_set_gate(11, (unsigned long)_isr11, 0x08, 0x8E); - // idt_set_gate(12, (unsigned long)_isr12, 0x08, 0x8E); - // idt_set_gate(13, (unsigned long)_isr13, 0x08, 0x8E); - // idt_set_gate(14, (unsigned long)_isr14, 0x08, 0x8E); - // idt_set_gate(15, (unsigned long)_isr15, 0x08, 0x8E); - // idt_set_gate(16, (unsigned long)_isr16, 0x08, 0x8E); - // idt_set_gate(17, (unsigned long)_isr17, 0x08, 0x8E); - // idt_set_gate(18, (unsigned long)_isr18, 0x08, 0x8E); - // idt_set_gate(19, (unsigned long)_isr19, 0x08, 0x8E); - // idt_set_gate(20, (unsigned long)_isr20, 0x08, 0x8E); - // idt_set_gate(21, (unsigned long)_isr21, 0x08, 0x8E); - // idt_set_gate(22, (unsigned long)_isr22, 0x08, 0x8E); - // idt_set_gate(23, (unsigned long)_isr23, 0x08, 0x8E); - // idt_set_gate(24, (unsigned long)_isr24, 0x08, 0x8E); - // idt_set_gate(25, (unsigned long)_isr25, 0x08, 0x8E); - // idt_set_gate(26, (unsigned long)_isr26, 0x08, 0x8E); - // idt_set_gate(27, (unsigned long)_isr27, 0x08, 0x8E); - // idt_set_gate(28, (unsigned long)_isr28, 0x08, 0x8E); - // idt_set_gate(29, (unsigned long long)_isr29, 0x08, 0x8E); - // idt_set_gate(30, (unsigned long)_isr30, 0x08, 0x8E); - // idt_set_gate(31, (unsigned long)_isr31, 0x08, 0x8E); - // idt_set_gate(0x80, (unsigned long long)_syscall, 0x08, 0x8E); + idt_set_gate(0, (unsigned long)_isr_generic, 0x08, 0x8E); } diff --git a/src/kernel/kernel.cpp b/src/kernel/kernel.cpp index 3c950e2..fe4786e 100644 --- a/src/kernel/kernel.cpp +++ b/src/kernel/kernel.cpp @@ -14,16 +14,19 @@ extern "C" int main() { idt_install(); - // isr_install(); + isr_install(); + // asm volatile("sti"); // char* foo = (char*)0x10000; // register int* foo asm("ax"); char string[] = "12345"; write_base_int((unsigned long)string, 16, 0xA, 0x1, 32, 10); + // write_string(string, 0x0, 0xC, 79, 10); write_char('B', 0xA, 0x1, 30, 2); write_char('Q', 0xA, 0x1, 32, 4); write_char('D', 0xA, 0x1, 30, 4); write_base_int(0xb1A2E, 16, 0xA, 0x1, 32, 3); write_string("hello!", 0x0, 0xC, 79, 10); + int whatever = 1 / 0; return 0; } From 60120bd533de8bf53b797fca86978e1eed1b0939 Mon Sep 17 00:00:00 2001 From: zeb-smells Date: Sat, 28 Dec 2024 22:25:37 +0000 Subject: [PATCH 17/32] improved printing --- src/Binaries/OS.bin | Bin 12080 -> 12300 bytes src/Binaries/boot.bin | Bin 512 -> 512 bytes src/Binaries/full_kernel.bin | Bin 1328 -> 1548 bytes src/Binaries/idt.o | Bin 4436 -> 3992 bytes src/Binaries/kernel.o | Bin 3088 -> 2784 bytes src/Binaries/memory.o | Bin 0 -> 2140 bytes src/Binaries/printing.o | Bin 3552 -> 4584 bytes src/bootloader/boot.asm | 4 +- src/kernel/idt.cpp | 13 +--- src/kernel/kernel.cpp | 20 +++--- src/kernel/memory.cpp | 9 +++ src/kernel/memory.h | 2 + src/kernel/printing.cpp | 120 ++++++++++++++++++++++++++++------- src/kernel/printing.h | 11 +--- src/run.sh | 5 +- 15 files changed, 125 insertions(+), 59 deletions(-) create mode 100644 src/Binaries/memory.o create mode 100644 src/kernel/memory.cpp create mode 100644 src/kernel/memory.h diff --git a/src/Binaries/OS.bin b/src/Binaries/OS.bin index f1cc6ce5628c7768456bae43ce73d9c4aae54526..b0c40caab394f52e65a801af6a1d883959790665 100644 GIT binary patch delta 1128 zcmZ`(Uq};i9RJSp>`2Ly)C~>l&g$4vN%Cr{L{U zCif)tP}xJ#i(!Zr$zU!Ef_w=KdgvkHZ1*r|(8{ap`@7A#qB!pN=kxh||NVa7yO|5O zJDg*#iv#tEiNwUpOEfHLFAz6JPC9QATb{%v;^Zk3A$14_QDed=jMO;<>qQQ4Iiap% zD^hO}1;in^oS=TXp>POpynm42E6*$=QJH6^YibdadB?O5=6HKDD6P(8$XtmUr=|_V zka&Gf1Ut~jP@_HKmU&(FQ{w>w7E*wMaS3RI44z51WAX&XWX?2T7ZPXMAX{5N^?@^S z(TO=U9*COe92l9vvjBLQ`u1H~9!*5bG4!txrpu88JK6`n{wIpR!G)X^wHoz+nSVwc zWKiUg%x7erZbn9Jfv^{H3LjP{e-)C-Yy`|eO=}+^8)b&v=}8X{rjHJl!RU`NF+MFO zY-ti^`E*VWYRW2E9le5G;+iwK=G=ZhDqMbc-ZC76dZ?^Xn!5twQU~TPdCF_)F=Tl2s%>0nA!@? zpe@ziFz4;&U++LjI5Gi1mWTVv!*F3)QyDXAY2HS+r5qH6P!ΜjIAPUdkWe zp;H&|2~>) delta 945 zcmZ8fT}TvB6uvV%?hLj%3r@16=^AKBXxR@G7Oac+Eps&nGAtEyTLz)0rH9lNMq$?} zS(%rFf})p%2qO~9S{BxA^GRO7BhN zh0A+}n&Ol3$m(f$asip;` zSaB;1>`tF?n?XojbgOBH!YWl3>NSSY5y<7G9maz~FsE!aIuAiXu^ko-G@dwCgA8&= zIiOR!;!sfFT^X1f%i(%II~D>nn(WZ9Gc0Gr*xc}nu{KkT$yp5x6G)83Nzg@tQb(uH zPzWLFqC~Jju%uz>lMm`l@9aia#^b?af?X*r0fMZ|v3T%fG`f_KBfoB`X_qEDAtNjs zVZ5HgCY5bm2Vwp6&afl0qQ=jM@z&_@*42?x*gYX(0&l5te!~WTt4`L=qa_W>)h)E5R!DIdhQr>C&+4f0LCd?4sQX&S*H(jLng^(WrJeyOhw^ zimp_EUAPfC3kg0(DOCoHI;);r-{%@awFrrG^l}{j2=~Kd9dY&>mu!VFPnneR=BWue z6PA(~PPxl~>i$%brvV)B^ECgp7h)@-?}D*Dk-m$YxwdMW3m^d@7@nuL3#PYc;ZEZe zG|bhUe+E+xOu|_ad{({})MVUdaFe diff --git a/src/Binaries/boot.bin b/src/Binaries/boot.bin index 8b6655471edd53f8ac76552f19ce8bbe522439fc..3249177edff41648387039376e289f10faf9c58f 100644 GIT binary patch delta 34 qcmZo*XkUl+ delta 34 qcmZo*X#glT6EdsyhGW5(Y%yPK?H&|Thp-}n1{ z|K9h$ab?Dsx3%=zuwretqPIiS`Spb5r`=Z*jJXTgEMJ{vv&_8)L+hqNs!+9c}TWi0l zdz-=x@{YW`PB{cuSB9QJTCS}O<6NF5v_eoUS-#1I3Ksp%_(` zauNh5r(kbT`7Gk9H%;U#gb5>d&{wM`rqHZZ&K*WD>t>ob*7Y{v6YJM=2td7PE>?>N z2>Q1Sam342eeohf?Pk=u-RqV=`nv{i(}R0&Qg-T2i@Fm$%iB&(a9_GxW_^7M|J*LB)2EgLYn1)ZCjG5wSoEHu zEqMDV4;HSFSGSLJuWb`C9mXSo!L@v?FhY|#5VykUbPp)aA2)=VwzDC|EU=q4M__Hu zHS}vHAmz?+j0(v>Nga(<9{!-zCm?ny44iUjyi1kMwwBcdK+MBsag{*2QRcoaN0>n#9_2>Kh1q(o zaBgny!XY*{a~}V92F}DMV=4ab8|N-wdh5dZLlgv^jDOPmQ%owU(&L(<*m(QHKnJnD z{v(RsBZ~=5Vv|NvF0wH_Q7r9|^8m)`FT;Mf801fD12N80jIn*{qCEa^Qa)XWTg)8; zJRC;R{(gQcreppT@Ppt7`uXEKdX3;q119sd&WP4Jn1{$z*$ub$rDCGKCb Cw;whD literal 1328 zcmah|U1-x#6uwDQ7d0*c^H6loDJp{aub`-~)g3{w?vH?q;)YsF5Ja#q(y0)IWS2=F z6?{;9Q4rsh`8PXjt@>hL1fOKcgbNLBXu&A4@!YhXRS*gH@B7X<-#O>rFp&^au8!_o zAz4#1!5QChKJ{6y&V&ddtOuteeBQWe^Oj^0zHB9<@Y!-@bDr5@3OH-M?0`Us^`gUa z6;m|ZLp07Z7_<&bb<;j}vKg#dcC-ElD4UT+(A2s`^9c(YjDkWvrec!Ry@i<5r5Zkl zy5u1aa_!r92P$KHOB4R<(IG#NMObbdO~}+xC}?)VwGC#&lsXPm6O)qjJc&DIO{#NC zNe8Obh&iQ+Nm0NFNea49ijrKE2ssBlZtJSgjOxTkd2WdsUeXb>uWK3&0mHY!E63IG zgr|-hJ_UJ%sN=aH9ShQWUw;Uil-E5W~@#|f}f)yKFOaa?j1fQFhHOl+s3C~BswZ#DN;O_t}gIUOp z?($cq<0qJ{<_WecOrfLEdxhUGU>My__;`(;U9!2pGQl+Ufq{_pZqG_W_#RPy>Z94kW6M(VF}mD54O)yZ>YC_u&?M| zQSYcXTb2&JO`SM(>hv;nB;jMhRXEpAgp4dKRwT*B+gy!U8;0`+ON=eTeI)kF!ZeUB=YUe{Gs1G*ZzQfs+kv$&*q*%oWG@k UKlq+m{yO3ZkzdlxAFRdy1+*dEaR2}S diff --git a/src/Binaries/idt.o b/src/Binaries/idt.o index 6a58e5527184f5663ddbfbd94022ad3b9e82adc5..42f68a9e2988f5a31aef8e9c8a8eadb74bb75e30 100644 GIT binary patch literal 3992 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 diff --git a/src/Binaries/memory.o b/src/Binaries/memory.o new file mode 100644 index 0000000000000000000000000000000000000000..b31a5942548e2db5f2fdb2dba6ea693810467df1 GIT binary patch literal 2140 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 Oo5j5ENKd}gynh2TllyG| literal 3552 zcma)8Z){sv6~FhrckSocv7N+pP8t@cTDwkN?I!DB?GhGR9@V;KEA5OT*hn4cIW{DA zu%GuQYCC9{h-*G%AU;&9#D{%ANPO6riJ@&-N+@9iM34X>flxIS5vfHjsA5KxncsQu z-qnuApCjM$0R ztMO(v_L<|yHg7eX&BY(bnwHtLVp!mZ$B^#%_x@4acwx2L(X`_0R*VX8XMSz9`s%W` z#EHdg@p?Ln8D0hJR)fN>jw0~a4#DALB(q&MqUV~=&SwpO=p@ZZS-`cXq$0r9#O z-*z9TStKZ|Z1 zZ4HfI_yzU9Mc3O$s`et|C179guU*UF3&8Dtzjv*Z{3T$&w4T(SWgnGsQSCW)r_^Kq zEE_Pr88iCpn2`wl*`1%)F98Sr9`}4;7ZQ64BmM&09r6Ze88Zw)sdN~kP;{8VeP>|> ziBC}HyMfMp8QnBm7L8vx0wO*J)f^y|s-V0BaW4zU&AUTd^T<1Rhqqh^d55GPW#U~- z3jGTm=f1B4NN5#)VU1|BjBoQ8r(J%2r)PQl!teDg+82J{Ha{Qp^r*fGDlOnrz4)~5 zz|wnu>E=7n3{CtI1D)g*@1SE`Fg<*5kUtna5PY~t!=u+QVz!Ow`?tmzcd=mb6G1%; zng|OH8V~ni&yxJ1UPU(OD~7vxw{I+ds+Ys*2S+=r*~NE;dxHAF_5liv-hr(Qa#HbF zBtMQ>a2F%;kR%UMqKbOKrS81njbQy$I2s@+zEKez72>DDd_)9BMTfrNi0%o&^}tcle_Z&@ zA)!}AS4zZ}g?~iEN5u}N89XP30D4ZuT|j5}lGuFB@cBl>HbMjwOo&c`ln4=gM|3|R zLbF15D2*Lw#ZF}62p=+OO+!blRuUfp@Dah!X?|?Zk;l@B!+Z7&eLOKVoE%Q>OYEJy zZy23ZE!v}n`yTih^h`OMm-ssaj^)e5Onj_IVS?%zCjh0KQ?*=Ph>Z5zk+$I&$@F zsakaGGMg=RX}AjDPsqWZ%RZ8t$VLpeMx7{T6l-;>zkKL}}Y3_7URJpj>guvbzZp zcdx{K(*KaO$0dGVVnO0d62B+$2ZZ3=kT%`t#QPVCf0OukLc|H=Oa2~-gA&IjJ|S^} z5b+ghe^uglCB7>0ClW!)xXxHquH)8;`gf5Hbn64&FKxF@@F!qvz%hv@C9-7Yxj82@ z1$4?D=9N~qXOoWotizJi87IS%QY1sjvi)?cH&f0OXY95K zvxTCqCSVPv((t5fXG?Q)Hm(YH5j#JbD`)0xB>I2K0OGJsjP{6RKU(XTh2cM9yI--Rifg)fdSH0 z+}(H|@L%QwQE}%nLONaxS4I#=Ybc@oNWP8MT8Dw;>CZaV5kXURv~ppXy#~HlfOJQx i{fj~;E_GI*vOJt8NRdK3B*fnu*N=5yc0FFF;{FZxTT>SR diff --git a/src/bootloader/boot.asm b/src/bootloader/boot.asm index 0517def..2d508ac 100644 --- a/src/bootloader/boot.asm +++ b/src/bootloader/boot.asm @@ -12,7 +12,7 @@ mov bp, 0x8000 mov sp, bp mov bx, KERNEL_LOCATION ; we want to load the kwrnwl to the kernel location -mov dh, 2 ;might have to change this number. number of sectors to read +mov dh, 3 ;might have to change this number. number of sectors to read mov ah, 0x02 mov al, dh ; number of sectors @@ -105,7 +105,7 @@ start_protected_mode: mov fs, ax mov gs, ax - mov ebp, 0xA0000 ; 32 bit stack base pointer + mov ebp, 0x90000 ; 32 bit stack base pointer mov esp, ebp ; ; print digit diff --git a/src/kernel/idt.cpp b/src/kernel/idt.cpp index febc0e6..4be8e03 100644 --- a/src/kernel/idt.cpp +++ b/src/kernel/idt.cpp @@ -1,18 +1,10 @@ +#include "memory.h" #include "printing.h" extern "C" void _idt_load(); extern "C" void _isr_generic(); -// todo move to memory file -void* memset(void* dest, unsigned char val, int count) { - unsigned char* destC = (unsigned char*)dest; - int i; - for (i = 0; i < count; i++) - destC[i] = val; - return dest; -} - struct idt_entry { unsigned short base_lo; unsigned short sel; @@ -30,7 +22,7 @@ struct idt_entry idt[256]; struct idt_ptr _idtp; extern "C" void _fault_handler() { - write_char('e', 0xE, 0x1, 20, 20); + sprintln("Exception!"); } void idt_set_gate(unsigned char num, @@ -52,7 +44,6 @@ void idt_install() { _idtp.base = (unsigned long)&idt; // Clear out the entire IDT, initializing it to zeros - write_base_int((unsigned long)&idt, 16, 0xF, 0x1, 1, 1); memset(&idt, 0, sizeof(struct idt_entry) * 256); _idt_load(); diff --git a/src/kernel/kernel.cpp b/src/kernel/kernel.cpp index fe4786e..292ba9d 100644 --- a/src/kernel/kernel.cpp +++ b/src/kernel/kernel.cpp @@ -2,7 +2,7 @@ #include "printing.h" // TODO: -// 0. sort out file structure +// 0. TTY // 1. interrupts IDT // 2. kmalloc -> needed for page frame allocation -> first free aligned address // after the kernel https://wiki.osdev.org/Memory_Allocation @@ -15,18 +15,14 @@ extern "C" int main() { idt_install(); isr_install(); - // asm volatile("sti"); - // char* foo = (char*)0x10000; - // register int* foo asm("ax"); - char string[] = "12345"; - write_base_int((unsigned long)string, 16, 0xA, 0x1, 32, 10); - // write_string(string, 0x0, 0xC, 79, 10); - write_char('B', 0xA, 0x1, 30, 2); - write_char('Q', 0xA, 0x1, 32, 4); - write_char('D', 0xA, 0x1, 30, 4); - write_base_int(0xb1A2E, 16, 0xA, 0x1, 32, 3); - write_string("hello!", 0x0, 0xC, 79, 10); + cursor_init(0, 0); + + iprintln(0xb1A2E, 16); + sprintln("hello!"); + + sprintln("lananas\nbanana"); + int whatever = 1 / 0; return 0; } diff --git a/src/kernel/memory.cpp b/src/kernel/memory.cpp new file mode 100644 index 0000000..9742f46 --- /dev/null +++ b/src/kernel/memory.cpp @@ -0,0 +1,9 @@ + +// todo move to memory file +void* memset(void* dest, unsigned char val, int count) { + unsigned char* destC = (unsigned char*)dest; + int i; + for (i = 0; i < count; i++) + destC[i] = val; + return dest; +} diff --git a/src/kernel/memory.h b/src/kernel/memory.h new file mode 100644 index 0000000..7b79787 --- /dev/null +++ b/src/kernel/memory.h @@ -0,0 +1,2 @@ + +void* memset(void* dest, unsigned char val, int count); diff --git a/src/kernel/printing.cpp b/src/kernel/printing.cpp index 87d5d17..e11ad0b 100644 --- a/src/kernel/printing.cpp +++ b/src/kernel/printing.cpp @@ -1,3 +1,14 @@ + +typedef struct Cursor { + int x; + int y; +} Cursor; + +const char BACKGROUND = 0x0; +const char FOREGROUND = 0x7; + +Cursor CURSOR; + void write_char(char c, char fcolour, char bcolour, int x, int y) { short colours = (bcolour << 4) | (fcolour & 0x0f); volatile short* where; @@ -5,29 +16,89 @@ void write_char(char c, char fcolour, char bcolour, int x, int y) { *where = c | (colours << 8); // load the value into the pointer } -void write_string(const char* string, - char fcolour, - char bcolour, - int x, - int y) { +// void write_string(const char* string, +// char fcolour, +// char bcolour, +// int x, +// int y) { +// while (*string != '\0') { +// write_char(*string, fcolour, bcolour, x, y); +// string++; +// x++; +// if (x % 80 == 0) { +// y++; +// x = 0; +// } +// } +// } + +// maybe indexing the characters from a constant would be easier -> quicker +// void write_base_int(long integer, +// int base, +// char fcolour, +// char bcolour, +// int x, +// int y) { +// char c; +// char* outstring; +// int counter = 0; +// if (integer == 0) { +// write_char('0', fcolour, bcolour, x, y); +// return; +// } +// while (integer != 0) { +// c = integer % base + 0x30; +// outstring[counter] = c > '9' && c < 'A' ? c + 7 : c; +// integer /= base; +// counter++; +// } +// for (int i = 1; i <= counter; i++) { +// write_char(outstring[counter - i], fcolour, bcolour, x, y); +// x++; +// if (x % 80 == 0) { +// y++; +// x = 0; +// } +// } +// } + +// this my cursor we should move the vga cursor aswell +void cursor_init(int x, int y) { + CURSOR = {x, y}; +} + +Cursor* cursor_get() { + return &CURSOR; +} + +void sprintln(const char* string) { + Cursor* cursor = cursor_get(); while (*string != '\0') { - write_char(*string, fcolour, bcolour, x, y); + if (*string == '\n') { + cursor->y++; + cursor->x = 0; + string++; + continue; + } + write_char(*string, FOREGROUND, BACKGROUND, cursor->x, cursor->y); + cursor->x++; string++; - x++; - if (x % 80 == 0) { - y++; - x = 0; + if (cursor->x % 80 == 0) { + cursor->y++; + cursor->x = 0; } } -} + cursor->y++; + cursor->x = 0; +}; -// maybe indexing the characters from a constant would be easier -> quicker -void write_base_int(long integer, - int base, - char fcolour, - char bcolour, - int x, - int y) { +void iprintln(long integer, int base) { + Cursor* cursor = cursor_get(); + if (integer == 0) { + write_char('0', FOREGROUND, BACKGROUND, cursor->x, cursor->y); + cursor->y++; + return; + } char c; char* outstring; int counter = 0; @@ -38,11 +109,14 @@ void write_base_int(long integer, counter++; } for (int i = 1; i <= counter; i++) { - write_char(outstring[counter - i], fcolour, bcolour, x, y); - x++; - if (x % 80 == 0) { - y++; - x = 0; + write_char(outstring[counter - i], FOREGROUND, BACKGROUND, cursor->x, + cursor->y); + cursor->x++; + if (cursor->x % 80 == 0) { + cursor->y++; + cursor->x = 0; } } + cursor->y++; + cursor->x = 0; } diff --git a/src/kernel/printing.h b/src/kernel/printing.h index 77c2813..db6e142 100644 --- a/src/kernel/printing.h +++ b/src/kernel/printing.h @@ -1,12 +1,7 @@ -void write_char(char c, char fcolour, char bcolour, int x, int y); +void sprintln(const char* string); -void write_string(const char* string, char fcolour, char bcolour, int x, int y); +void cursor_init(int x, int y); -void write_base_int(long integer, - int base, - char fcolour, - char bcolour, - int x, - int y); +void iprintln(long integer, int base); diff --git a/src/run.sh b/src/run.sh index a66a9f7..52acfa1 100644 --- a/src/run.sh +++ b/src/run.sh @@ -12,11 +12,10 @@ nasm "${kernel}idt.asm" -f elf -o "${binaries}idt_entry.o" i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}kernel.cpp" -o "${binaries}kernel.o" i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}printing.cpp" -o "${binaries}printing.o" i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}idt.cpp" -o "${binaries}idt.o" +i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}memory.cpp" -o "${binaries}memory.o" nasm "${bootloader}zeroes.asm" -f bin -o "${binaries}zeroes.bin" -# i386-elf-ld -r "${binaries}idt.o" "${binaries}idt_entry.o" -o "${binaries}full_idt.o" -# i386-elf-ld -o "${binaries}full_kernel.bin" -Ttext 0x1000 "${binaries}kernel_entry.o" "${binaries}kernel.o" "${binaries}printing.o" "${binaries}full_idt.o" --oformat binary -i386-elf-ld -o "${binaries}full_kernel.bin" -Ttext 0x1000 "${binaries}kernel_entry.o" "${binaries}kernel.o" "${binaries}printing.o" "${binaries}idt.o" "${binaries}idt_entry.o" --oformat binary +i386-elf-ld -o "${binaries}full_kernel.bin" -Ttext 0x1000 "${binaries}kernel_entry.o" "${binaries}kernel.o" "${binaries}printing.o" "${binaries}idt.o" "${binaries}idt_entry.o" "${binaries}memory.o" --oformat binary cat "${binaries}boot.bin" "${binaries}full_kernel.bin" "${binaries}zeroes.bin" > "${binaries}OS.bin" From 9d18a9574ae86e75d5a82546175ed7663987c651 Mon Sep 17 00:00:00 2001 From: zeb-smells Date: Sat, 28 Dec 2024 22:53:13 +0000 Subject: [PATCH 18/32] added logo --- src/Binaries/OS.bin | Bin 12300 -> 12560 bytes src/Binaries/full_kernel.bin | Bin 1548 -> 1808 bytes src/Binaries/idt.o | Bin 3992 -> 3992 bytes src/Binaries/kernel.o | Bin 2784 -> 3192 bytes src/Binaries/printing.o | Bin 4584 -> 4492 bytes src/kernel/kernel.cpp | 4 ++ src/kernel/printing.cpp | 86 +++++++---------------------------- src/kernel/printing.h | 11 ++++- 8 files changed, 31 insertions(+), 70 deletions(-) diff --git a/src/Binaries/OS.bin b/src/Binaries/OS.bin index b0c40caab394f52e65a801af6a1d883959790665..be716c13401bb10cb74b5269e6428a0a314e73e1 100644 GIT binary patch literal 12560 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 Cw;whD diff --git a/src/Binaries/idt.o b/src/Binaries/idt.o index 42f68a9e2988f5a31aef8e9c8a8eadb74bb75e30..919bf8c99220d1d739b6a8cd652bd221a004e43c 100644 GIT binary patch delta 14 VcmbOsKSO?lFB2orW%xQ@aa8Z5)i`zCPt|lgq4(7- zs=lP5dNFF#DskjCex!Y~rkc`R&2)H_Qf51MU2nd)>^haAv+B;3onpyd$yV}(MW=kP zTyd9U&5l0XkaIn+7y~a`pkLXZQw+JhvyfeYcl5pmFoOt07@!6*nRZE_*zyVZJ|&%X zg3I(U1tan-V2JxfK||yV72rFRhi?;P>0uJUGzx?P7JN%&EfVlOf{vF28}u;QM*+|l zIKg@&sx!HAI@`7toia!80h@^qKwH~zTfm~m$0!}`rlxTi?Z!ivY;Ueh_aKKUe#P<<@1h}F3rsk#HvEU;{JAF3$#aSwt z#Xn|0`-m}XkT7dRaMtQP{)x($=x@^u1J|qwAL97jit`N<_lQ^kzY{$RU{@&4FIqSh ziihO2L9c z5ivXkm0tAV!P-;3^x&m>R`KXbK|!R)9x5pDKg;f0-v9T1Z)e`jvKz&3g-5&OQ@33n zY)@?ICd9A5ola-&Lw;^8+i~c`Jmi6J7YH>Dxw*^C$g6%qEM6HzUx&&D;+yN7#^*p^FlD&gsbjpd*2eStHt`xX6G zV-`R0D`JVi`#t>G&&RHR?-G`8MW!JVa|lemZM`Sn7ld+Ma~+r$d>1H5ehn-b{t|?` zDv7T0zn~)D7%pc*xhVNK@KEt2;5qyp*x~Rh@Wb$L;F81L*-+Lr4`jpQnjy0PF^%*B F{{hV0a>f7v diff --git a/src/Binaries/printing.o b/src/Binaries/printing.o index a15624077b24ea3923c2fb549b132b2381c33037..d441b53863ac8a1bb275a88efc20bc604a0eb9fd 100644 GIT binary patch delta 1803 zcmaJ?Z){Ul6u`)}c2!rsOw;CrE2NNfBEd_C*ttV|VV3TpF5)gJX1>2NM(V z4;-4Fq9vP?*X?A#!Qx9&3uqmuc}o+G@2JkrcktRc$```(7};z+4m)V(qxs*PntwEWdt@>dzR7Ni$5O$yL4{qsX|7 zR`$5j;p7p11#zXjfLbzp`B7x6^sKMj9>QuHR*WdCx2Tv9nNEBf7hFUFG(vv{LkYcB zYVE8v`w#@ydu-b zKSYbKz;akOa|v*xoKGs~a@w^ze=+lT8a$d03x4J)cWo$;r7$i3fRH!$@^Az@C>Q6& z6KlY%2R;XO10|joup+>ZL$Cp~dT=iXXaOG+F1``G1lvF-s0V*F*k{3yexn?`E#QfO zT@U#!03U&GBbZuW3o%pkJ_p!UiSy#%kD&cH08ZIXJg{8W>Mt%k3rh}xzZbO%8f8cR znWN!qq8S#@qIF=7;w<^SzHe1+to=Y|G}hk7cD`Iw(;DyD-_^4-8jJQuqij!WS7%qe zhwa(Dzn!&q#bdqgJ?y~V_MUbbGeSmZS1eK%jrGd+jT(8ySfr~_pSfMUgobPL z(_VP#yye30_z^6u!5Cy*4(~6HPoT9qL7=2UZ|4AWzD8z4(j(xbC zgGGo`cMdn=QmSKrwbIjBy_UVJjAxYLOU1udctPQ1(s6;`9h57qj}w<^IX7c73jZR+ zbLyuStUs)NSdo6+W-9N$IaBzDr@7svlN7lf^1_R0*Fd;he&&3U4XYK0o4p zfr~jVfALkoLi{-{N$>|nrI4?hMY7Rv^QCgLzY>Db-(4`r z7@cJ}C2ERek6MOhj?Xd23PYAT!mit+)7nJVeFmciVkvn10sLzoQcOM1G0PlVXpZl+ z#jZz2eju^dOkOsz-|B=n1kcpspm}mHY0H+wudM2BNA3U7SHy(#f<;b6gvw4~42~DOt%@a_k&A zt-&gxvpdx!bf}`8WGC4#geiaAVcOVkiaLGnwoS&*l-))dwF}ZAH`zmTDEJp86)}?{ z%J^Ow&Ht8ISiT59%4p&J;x>`Nu2D)LoLd58xAGj73!0 z|FAM=zRfQr63J}emULfBS8rFQs|z-)-_j1rbhbCs-Ush@w)eF|%i2V(CrY(vw(>80 z@e()Y*L;b2J?Y+5Wmj(o9%_KX_7oM^(wXkdxMaE~O^skf(s54BRu#5Z+!c6LQ~RZc zFfKhGQWSuvDJ8D|)Mb3YOQ#({C2>VsQ{T@6eo0=I%h~xMrwYHMmGPqg@=Vd96c}tI zoGK||aaG+C{G&iJ^ymrs{lNUVMZBZ|To)Lk4}orxh&KwP7{mn&@!x`<V5EC^7~k7+UXDgQ~UVMYFjW6Sj#JWM<0^JRJr zU!t?O^3CL3rI+;_->pUYpl(QV2|uI9*(dxa$zvq|U-F0%W1sVRMh#x}0ldlA8!@b) z_Gy07i1MOgNC*A=D;aC{pIKQGr{{fKp BvfKaw diff --git a/src/kernel/kernel.cpp b/src/kernel/kernel.cpp index 292ba9d..d334c7b 100644 --- a/src/kernel/kernel.cpp +++ b/src/kernel/kernel.cpp @@ -18,11 +18,15 @@ extern "C" int main() { cursor_init(0, 0); + sprintln(WELCOMEMSG); + iprintln(0xb1A2E, 16); sprintln("hello!"); sprintln("lananas\nbanana"); + sprintln("hi dad"); + int whatever = 1 / 0; return 0; } diff --git a/src/kernel/printing.cpp b/src/kernel/printing.cpp index e11ad0b..b89674d 100644 --- a/src/kernel/printing.cpp +++ b/src/kernel/printing.cpp @@ -16,87 +16,37 @@ void write_char(char c, char fcolour, char bcolour, int x, int y) { *where = c | (colours << 8); // load the value into the pointer } -// void write_string(const char* string, -// char fcolour, -// char bcolour, -// int x, -// int y) { -// while (*string != '\0') { -// write_char(*string, fcolour, bcolour, x, y); -// string++; -// x++; -// if (x % 80 == 0) { -// y++; -// x = 0; -// } -// } -// } - -// maybe indexing the characters from a constant would be easier -> quicker -// void write_base_int(long integer, -// int base, -// char fcolour, -// char bcolour, -// int x, -// int y) { -// char c; -// char* outstring; -// int counter = 0; -// if (integer == 0) { -// write_char('0', fcolour, bcolour, x, y); -// return; -// } -// while (integer != 0) { -// c = integer % base + 0x30; -// outstring[counter] = c > '9' && c < 'A' ? c + 7 : c; -// integer /= base; -// counter++; -// } -// for (int i = 1; i <= counter; i++) { -// write_char(outstring[counter - i], fcolour, bcolour, x, y); -// x++; -// if (x % 80 == 0) { -// y++; -// x = 0; -// } -// } -// } - // this my cursor we should move the vga cursor aswell void cursor_init(int x, int y) { CURSOR = {x, y}; } -Cursor* cursor_get() { - return &CURSOR; +void newline() { + CURSOR.y++; + CURSOR.x = 0; } void sprintln(const char* string) { - Cursor* cursor = cursor_get(); while (*string != '\0') { if (*string == '\n') { - cursor->y++; - cursor->x = 0; + newline(); string++; continue; } - write_char(*string, FOREGROUND, BACKGROUND, cursor->x, cursor->y); - cursor->x++; + write_char(*string, FOREGROUND, BACKGROUND, CURSOR.x, CURSOR.y); + CURSOR.x++; string++; - if (cursor->x % 80 == 0) { - cursor->y++; - cursor->x = 0; + if (CURSOR.x % 80 == 0) { + newline(); } } - cursor->y++; - cursor->x = 0; + newline(); }; void iprintln(long integer, int base) { - Cursor* cursor = cursor_get(); if (integer == 0) { - write_char('0', FOREGROUND, BACKGROUND, cursor->x, cursor->y); - cursor->y++; + write_char('0', FOREGROUND, BACKGROUND, CURSOR.x, CURSOR.y); + newline(); return; } char c; @@ -109,14 +59,12 @@ void iprintln(long integer, int base) { counter++; } for (int i = 1; i <= counter; i++) { - write_char(outstring[counter - i], FOREGROUND, BACKGROUND, cursor->x, - cursor->y); - cursor->x++; - if (cursor->x % 80 == 0) { - cursor->y++; - cursor->x = 0; + write_char(outstring[counter - i], FOREGROUND, BACKGROUND, CURSOR.x, + CURSOR.y); + CURSOR.x++; + if (CURSOR.x % 80 == 0) { + newline(); } } - cursor->y++; - cursor->x = 0; + newline(); } diff --git a/src/kernel/printing.h b/src/kernel/printing.h index db6e142..1842e52 100644 --- a/src/kernel/printing.h +++ b/src/kernel/printing.h @@ -1,4 +1,13 @@ - +#define WELCOMEMSG \ + "\n" \ + "__________ __________ ________ _________\n" \ + "\\____ / \\______ \\\\_____ \\ / _____/\n" \ + " / / | | _/ / | \\ \\_____ \\ \n" \ + " / /_ | | \\/ | \\/ \\\n" \ + "/_______ \\_____|______ /\\_______ /_______ /\n" \ + " \\/_____/ \\/ \\/ \\/ \n" \ + " welcome to zebs operating system! " \ + "\n" void sprintln(const char* string); From 09f9e736540f9c752c502fd870b3fe2c73e38c21 Mon Sep 17 00:00:00 2001 From: zeb-smells Date: Mon, 30 Dec 2024 17:31:08 +0000 Subject: [PATCH 19/32] tweaked printing --- src/Binaries/OS.bin | Bin 12560 -> 12728 bytes src/Binaries/boot.bin | Bin 512 -> 512 bytes src/Binaries/full_kernel.bin | Bin 1808 -> 1976 bytes src/Binaries/kernel.o | Bin 3192 -> 3060 bytes src/Binaries/kernel_entry.o | Bin 496 -> 496 bytes src/Binaries/printing.o | Bin 4492 -> 5228 bytes src/bootloader/boot.asm | 2 +- src/bootloader/kernel_entry.asm | 4 ++-- src/kernel/kernel.cpp | 6 +++--- src/kernel/printing.cpp | 31 ++++++++++++++++++++++++++----- src/kernel/printing.h | 2 +- 11 files changed, 33 insertions(+), 12 deletions(-) diff --git a/src/Binaries/OS.bin b/src/Binaries/OS.bin index be716c13401bb10cb74b5269e6428a0a314e73e1..d5e923c521ed1dacf8843438ae621eb7337688a7 100644 GIT binary patch delta 1080 zcmah{Ur19?7(aKr%cD(qA7+MT3jGBk%NL=1(C`Qak!33bM_Mq(g`$T>FS?~SVcUf< zxlctGLp->X)j|;Nx2y@lp*76aGnuU88UYVC*$#j zS!*v+#-T$de=?3#X;l<#&X7<+vHl;5a|o4+e<~G!N4r3_ATZ8LwkNpV6pDMfcF&4e zB{+)ODgqVs17t9QS5B*yJXWpeO>sITMdtZN!HB|=wac(H&e`?^w~%C^SKY9Kd*6RV zvZH#yK}VpRRsF6WxKD2ZqAz|!Q>xdrHr@kcRfaGM98jydpjG31H=mk(l) z{92{>r3eA3JrSEjbIl03COxJ~oW6+oQMVv5=frdhmPN|o)J&0zdh%g+It{3F;MfNT z(F%hrOY;2046K!$=tmeK8Tq-7o`Yg=k7*P93wcQl_q)X(1BZ-ZO!O4=49EOZtqt!N&S(>54WTih zz1!%^X{RWnJ>ctu?>+GS+xWf>eh~asKN+jr%3rc*)Cj%@@RbA4<2K|w6ua$qdX{T6 xB2@Ca{=C(her)lLqax9zPIe$^9*&CgVu(PM#SHtNaLxSSOWf~!T#)OcdaB&nz zcnd+i>JSuL>~k}4`2cqlyky`!g^nY%0szgI zf2a9Uo`m9{x;}eLmB#5dX?(tFHwmI$8;$pkZudvXEf$1Ss|9 z6NSV}{18xPowykm6o>GbLy1$Oi>#v;hk~Si{5<~lSMQJeLH~0}iZYSZ@L@ldZoZT* ziu@k6eaP8$qq5Ff%~rju1yE^xN#sjc_{x*lcm}XIqUz4z0?DOaAV>aO@8$r@(q-0@ z>Ib9t<**6|JCuJ#A2%%?HE&TpT_A3Q z@n&Ds=3zzw8-)fOES*3;yD5=0)6XE`ldstrM%u8rDOK`t9Vzc0O=}@?UlTV;`y1Ji z3<9H76w()gZ>{Ge2YeFpy}&=H=jnU8zzw+t7y|H0Js%KE^p0F4i#TCVUoGuapJcUm cP(6|d{^L^CdQ2L%a@34;*LsP1u?V>9AA9#ft^fc4 diff --git a/src/Binaries/boot.bin b/src/Binaries/boot.bin index 3249177edff41648387039376e289f10faf9c58f..1656d9268d7f61fe74c3650a2bdd8580013d0d17 100644 GIT binary patch delta 29 lcmZo*X%{;E6O=yai-9hBc|aR2U*2>GXhc0=3VGM& z8Gtx=-=tZ@Vi8jTrDl+hFvhfuj}cRwFt0?{8L_kp>sWL#k*Mg%IaeAh`7h_nRK1E| zXO5_4#nyi)t^rh=f2lTqPy11}EHKAg_RMp;FO&%K9ft}*ok(%;*G6jTN338(DqPm< zc&^^chvKv<$JY6xXhh+&z2%HN$Jw5FZn4NluLp612S0ws^3&;vi%wxXyZilg=BWNZk->UEu%9i$Xn z(aDyOKR9OmKO_Eaz9cFzQqoE30x_dc=p0L_p_ZXA=g@x7PShe_X! e^X}6^qcQGo6J%o&?T9gl_O`L??iQlxH~stUjG!#_+^&_i3B;lM%HQF`fMUPkOeP!{np?ID}k zWy4B9817&xqIa2e7b$dc?l#no9X(8V(j0auw9c^jy`*(r;N^Y4@Avz@_j`XzLf)Ij zG(xC)uz0thQFiyNhh{SOYfLfxxDEuq;6g|-_zcP*ybVHS&8HY1>1!8o^%mwcKI!7= z;|Qmy|B65W6k9EYN9rM1Kg0tBuOJj8ElW^`R$-u}`k$OwE0ItgH8&RTnXjg$tSa)w z;5kT%o?<`D`H2d+ERZm4C)Qa)lh2{5X(*XTw>snw{LO+-kWKA*L1{OiEz584V?g;0;$~bie9BWE$!FC7 zS;sC;#7XB%e#L0kAq@+Rotq$emp!C;rmz<^#*x4Ob{T3`T`dNfQosD#vVvZ77;w7(E7I zlWGtu+N9=_wHJO}1mtWRnoq5>;Y$cvT#3{dqYx_wBOxBatC2_!k3uuJXAE((uJi<+ zkoMEn-IW)pUQ%C~JmVJL3Lo~d_u~m>n;JY1;vN|9_bqD)W)$;KXvD|TGKvT;dB#mY zheSlb?O_;glMPa)7IODx!+$O7B#}qF{2U$aWD`0FoK|T_Ujx3oolhO|GmyUm{G)cB zeqalNkXweK0B^MOF~vpi>J_qxANKT}?WKmaV_Y9KsD5Q5K#-Im2C>bAcBZ!(Y8ep(V}1i7lqyT=d0j_ch0%@-T&UZ@4mmbrxKlO zJowxO-wylO47;EnF3x_t_0#_TcYS?*3+@hIFm=wmH_IQ!aQX>L1t@h$H8RAts?)$$ zs1g|OSwt2YdU&7@r}dnaYM#lIYP3)SW0`e$iXq1XHGn1cA`;D)Om?0@+|b}z8uRsx zhLP3!m6kZm7~%oABjRttQm=py0TuM^GzpZHL-vMCGqSyAV!X(AGgg4hBe^2|mWv(SnyTT{ zdBB@CHiV_Tjo_b5pH7>9qLZFo7QHn}TwUc90Qwq=(l0gBr)TQ`fot5f2&?3#$Ngg6 zw$1O|=AWY#v%#zuLSM`S&Q>WDw)PMBO>(%Y{GD(CYBjUNR}N?Z?9+Y?z#+{ZKxYs? z5yZ~~et+O!3j8dUt?NhhOF`aZI^c4^cLJUZ_{t$Vn@Y8~BXcoP>(-CJQvgYK3EEDmw}6rl(F?ELrr)NvUD3WrY4Y3Gv#Z zCO4(ta^N$abrWJfU=4C3JS%=l-C>dWzhXGN=7v@6n2~{Kj$6}6vZlJKH5L$2&35Uct zMP-+fG?hhS382fUUEK&_oJ0UP)EJ^dw8u#L83g(S!M%bo1LK$`8c6`T3#A=n^^Gv2 z2*#XH1(sY6rPvZ#a!T6a5H3w7&|(nspspn?rHZ@JM-P|{J}u^MDkW$u6=0gprsBrV zwUEnDLiU!M(cyScBo;|TBG5k=j>CTzpH%Mzi^ak?$fXlN#&lBVQq^mC`_<@) z{fZ&?7<3T`S&SwjP@p8oG&+Sw;MqaU=e=wpB$A4NK%p$jfrYdyFW#3Ix8=pBct9&t z#i4kgw!0wj5PVkK*(F~Ybpm*?mYM*5!T1Jik%@q_!0MnV>O*zoX-ZqXVCcN>-DH4if{ zZ#OJkB~ZQPSB)yxh^5c@s^ModxaeK}9+f!6JSR>+TR>GVn>9HtTCek?&Puk1W>lIp zXa;qD3(X3AR3G^dr-y$))4}*RG_NoKk2Gsci_Kva($tR(Mv%B*59G=M(Y N?iD6Y>HsSu`U~r}!}S0F diff --git a/src/Binaries/kernel_entry.o b/src/Binaries/kernel_entry.o index 410a555a3e7c0e9b0defc56b1dca19f280660550..f453b914c42f145e7bf30dd52f839c5b31b33cf1 100644 GIT binary patch delta 47 jcmeys{DFDG7e(e delta 33 hcmeys{DFDG7e=LtUvIGFCT8YME@TwuVPa;00|3_;2)+OS diff --git a/src/Binaries/printing.o b/src/Binaries/printing.o index d441b53863ac8a1bb275a88efc20bc604a0eb9fd..fdd6bebb0a83193e42b32aa290cbe0a2659223a9 100644 GIT binary patch literal 5228 zcma)Adu&tJ89(PnY(gSiqh`PF_#DTf z>$W4E^ZVZ4cV726dDhytiF3|$gK@p(xS2Gko8%%qiSgE%5{TdfHG@U@-e|i1mhz^ z);QVTE`6)xvnwCFi^j4Yca-!*uC|OHcA16%GP4oiL;m z&ijIdKW9wG{-cilOPMtn{}M%Pe1*o*e4carXkP8N_GK;iSyo@1DV83SmiyM$Yzf(B z=V4%^_77d7HN)WGAIb=W{!656e1%5%NbV;)z`T6_pF?A3MlwQ%lfj=K$$V3Cxtg;3 zCghs758U<-oOH9ylI#r1Cu6kjpfx*GD^0Oz694j3sP!r|Am+>WPkM*O21aTJtvjbr z-dS_Xhq3Wl_gU-Cz=-RX3CwOE&vxA9zZf*Mz2%mxgoHmEweHcuy0tTFjn`QB=pfwX zV};ZHUvvJV2~S%0vevyPt?^Trr=~1tjC`)I8I0kq(QKKQhH4rrX+ZlPwA4yUP@J0^ z{!L(tjxm#v74c-VQQnT}EcFp?hekl4C0q4%aEL#pf`1o!`KivvyX(z3C(HKL+s+ARk@>%3MP7 zN+ON(%)AUmQ#F-roOc)zw#7|ZjPo&mAGo!sQQCF$SHU&Aa(0IuPhb&jvWv4eZ%){Q z#18RW2wfDxxfw%kCx&`NI059tJ)q1+lFuO$>6wcbqr4d$uW=?pSA(1bF0D4ON%IuasCMZ0XTofdC47S!Vt?5qLQ?(7celsl9|4>)%;1% z8qbyrqY7S-xTi@>@t}>v!^?QN6PvS`c|7YprVon}Mt4LQ+^#)Jt~ zNQktU#|(!V5@iJL=Y){BOUwfDdfaNmVc23uj^odWvhAWcCcN(TQxPi31+fU+FaBpw zUytCsg@2tWZV;YMDu7=Qi`EIVSroywQ}`%DvnV0hEnEZ*qM}aBi;9I&5rB(3BuYAk zCno$2qP$ax?+9PBC^j>l#1)%9OmR0QdAM7c8Bt0_UJwGY_7Yzf5>@Aft6o$!h=mkA zD(V1cR8&d8;BW>-DbVSx7c&WAOwcK-a)yMLxC^3uwea@P^jC(&s^>&SCl$F0MFw?| z{@7H7as_wl6)YagRcYW`&o{Sp1e$7U>Q)8nRs>fBYXi%BA6tPTok`dY@yAv_0Xm$F zbSpX*SRRcgZ9A0?Cl1CFF_uavB^(B%dlD?t*VC6trr7>Ht5Zt0qdCGhwYFKC+gdwX zHbS#1VIS>@C+s7vr!Nr;WD==(EMXrE(6iCr)Mi;N}a>0v{^Klhef)>Nf_7F$y})jN=vA)6b)hGs*0XCJDQBA?fufFFOyc47dWyeRNj|l z+J$wgEC^-CkUQ1gmrTntk+OCwTqF{S$C;WHYwBogZ*60`e)iOcre-zwXY6Fc?g`19 zShir~@L?9}?(4Nf$L+4rj%42z6%mvk^9b&DlUb ztzl~U=3sxH%rhXS|AHr8FuW78ksk*?Un0>tUMkgKGCVK^&1CqP7c`UMEhuOvD=FY8 zpHF^xNl2b$_z*u144{v>ay+d$HQJMMR6&m?(X`5yJnt;!i82yFhWi1th;$6~0D@ zJfliaKgr1M_asMseA$SxNrn9iPb$6K7ubJQ$QoN-wuJEYBL4|blIRC7CabEhgq;I zm14nUUydQ=LAxsx!!sJ~gNdZWU0q4Myum4LI2lgFY;w#y(Ce%nkV}&!-Y@w`UvICC z2Uhyn-TR}-a4-E`^nbPmu){Xwzn=6zlfoaRq@zZE5MhhtS`mL(UIuj+z&p_Co-9Ep z9~^VpKEnDIHXW}9LbBI(*I{=TcTBf{BIMqI)?vs_(`2IK(YIOCB>xyjFBKSS-D>Ej z%>(!QB9wHe=^W{KJPlg=fMosncgDH`fhOhMCIi*pK#+iDfZFa$pbPW*aaifRQeKkl zyz<)sUbo*N-lPr!p(f*?3*!Y4Y#C$}51)>FynfK+L+eQG11x$%2LVqc_2(68yN$Rf zeURy seHW9gg^+UV`I0@w(q{@J`w-tt`U74!ibJgoz0mF$oWCzMxk20g8yx3Z6aWAK literal 4492 zcma)9TWpip9Y5#$e0+%=+qsY>Z0&OX~* zBA`_RQiA(Hq;^_2Hio)A?P1eY9#(ZMlvR{HWlx*>GBhzM9Z0Yit*KU({r<=2I8N79 z`%6B*|NZ>W^*esq+Pi~u&NOjmvPFrp?ZKjDlY|zwjMcK}^xr4%t|;vD7NUWI6`tC6 zcPctRW!(;4wQgU#<(hsk0d9WsR>(J(n6|zsMC+&LuH7;?8W;;!EuRx?Rxmz0Z7q=R z-O%r&UtIf}*Ed&)E+nRn3pcN$kAmfWi+U|sfwx@13onxPGO;~UaYK-qsA#%#7$N6b zXGOkZ{_}?*%X?>6p^^d$%g9ZdLsw_N)qj*7_4G-n$v@OyCR>l}3n5baZ68!`e)`$; z+_~Ajkd89=>}>wWQYw~saPn?=^0b%b*A$jfH!`-rkFp z{Pc8SdTw&IZOXd$%ISMs&IHl+yzD)1-J6{C+%bWLeG7%?eg4NOL;G9aht`7Z@OL+? z2eeLi4lW(w!g}k$^!0*upa11N``V%YuW>%K9u%wx&sYm*eo-9vi=W@T&X^}?Fordw zVX_Kpny9Iz2J{IP1M+`_#>qxC+XP9w; zyqc&AW5(r;vrS&gZ_Fh5UxAx_H54*4!ry@Ol&9!79zF-{Ff`s2>k1T=qo~j&K7dkC z2G343D`~$_q=O&7*iE^5z^+^_*%|oK_^Ot}!0X)j4gGwKzGG>nPpCBe!6Oht4a~Z-1b2V9o2Myz!m>JyK#GmnR@$afJ z>JcTrtTCbSF7a_a%KZLqeiIjq2r++?YgY|6NM*^b$+N4b!;g85@a_hkzsa2rR`F_g zPyML|4u3DYUYgeT)$SA0y`qY*3D)?{)yr2?mhd;QQERvv^!vB^sd`EoP<44R1$8tG zX`$kRYZ*aE4p(Wr8)&>?Kc{?H*a(xwN~V)cDha+PJOo`L)F#63h!Fg}O`>u@_>&^sC8`I6_^Al)5f$dK0g@`r%H0A{>yR%m zLP@w^5&~HclU&s*>MsaSr>O4|&6GDG+5u)l)Js6)a!0U7442#8De4H}OfVqpakq*9 zNtZ-*hX{-cGbci=qWK-M=2a2Op|fVHEu35|%!IpfP%Hy*Ou~5-hb_zb&i&EG-u3I- zpKfg57}*$UYuqsQ_HOa@i^i~GwEa_-LEJhr3x5Lu}nUv zD(sb6n6|Nm>JTw@5`ASyGEPorC>pX%Rm*y#{Ra>9v&A0SbIxaEPmi%Yu1T>y|I{$Ey=b-U^{zzw>Gw5)gDs| zR{9R{iGIdUdHM2y%Qc0gL+6fuM08QIXM^5z#&eazIPyMRq^(og=;kfi`=wdh4@0eQ z>yrJui}q8n>$|^XH`3Cf5w?r?=}%M1zJ1a(Zohw>YWOnIsn_IU|9q%k_A&w zH2H4hkXOM^-5kKuBT1$)8E&gGG8yi>GBO#i-ZC;-Wtl|%1?3$@N{Xz)owZqc(EL`T z$6Y|;X+BAQ0jTGX}BCGI>!m|p`EBraozyi>Nh5WB5yh-{1WArQ`{ht-mTZ80}$xaK0;S$yX zNiQD=z!uUYzD?OLDEki-zOC%y+Pqg@+U-2=PiAQ}S_zlS)6OWLjSu&ySRRNg+LTsGr{`c~;?v3g;F6ix7Sx z8V~AiP`FBAGa>BlO12d4RoJKOFDUtl!eOOf*Lvn=9diUJvj?V)@U-;_iKE|QN84LSJYL>8?vCzejy6j%zNuaXWxUz#QL zpp@g8u`wH87a3!Z3?`h|n2mz}Pg)H>Ok?Q=qW_fTZy>S}(W@9!Ea!;idhDY)pxm=S z7k;##*WgDn*p8CcVP4Bg=UWdY`D?!x_>ruM@)5~31L`#7r+KpLeDuB0Jn0{YQ+1i6 zwspW(K8|^egZ3qjgZ7Ue$MfKI3|Q6)!xLo+&B`-K4vI!_wKr-3sQtbJzP#TK9D3TP z)Gz6Ezw!)2)-;8DXLJ%MHJbuop6_|&Yk`jPVMwKXC&5z;%_ET;_f3yZ0-0F)omHs) zc3?3w&}q_suR}q+_PYW Date: Mon, 30 Dec 2024 18:25:02 +0000 Subject: [PATCH 20/32] added scrolling to vga drivers --- src/Binaries/OS.bin | Bin 12728 -> 12936 bytes src/Binaries/full_kernel.bin | Bin 1976 -> 2184 bytes src/Binaries/kernel.o | Bin 3060 -> 3128 bytes src/Binaries/printing.o | Bin 5228 -> 5892 bytes src/kernel/kernel.cpp | 7 ++++++- src/kernel/printing.cpp | 19 +++++++++++++++++-- 6 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/Binaries/OS.bin b/src/Binaries/OS.bin index d5e923c521ed1dacf8843438ae621eb7337688a7..8c0dfa98f0ec2aacf37dcc204efd4b60b77c129f 100644 GIT binary patch delta 1028 zcmZuvUr19?7(e%Vuin|_hG?$Rl`k<2)Ot~}2aPVoz!YRJks*XOt+yORwY!I#;dTjv z^U}Wu|E!205R91M!_wxA9`Ysdp+bV-fCGsJ-OXF4@4MTYffvqqzu)(Lzu)=JcTV!k z^yq?9jCxt0L z!x_4Uc&CVy@FPpG$fIBRn3_wX`+hYT`>to3>1{D4ru?+Jsw=8mnAr|wRMU344b{3o zD8x42ZixaI$q1UlhMe*f689MWR%{&;U?ij86xQv;w1=yv9x(^B6|P!(#A?zOGHTA& zt25M`+}laW8X;WG>5<%kmYq$2-1&L1Uh<&Sl_w+5Koq}>obb~?)rlzXYV(TfUyABp z?E_o>!+DWuYxSZQ@X88yP&d7r%yzJH7*9U5J#45-oSdl**RmB3pQ>yJ3>Q+37Nla@ zQ#oN&*esoI7PGzcXn|y-r9tQvhr2PA3d`&U$l2<5Q{l&K6c9UvI~&86eZV0->(L_$ z33nKc_J%GLtBkoc$~Dr-{7C-%n{#?m8oyrYZf|S*b+%tyH=zd@J6uAKYHA4<0?e90 zyWAH%HGDgh_;$jyLp~LK4wvPA6SNG~ITn*X&Dc=2)}(X-+)~QK)LbbQ59X#D($4^u zFH;$VyXb~t)g+NWKL@^^l|n=zWP*e+#x8&uyj%ujDDjfX214kT+*0orT9Cdv;;VMg zxL*{QYq7ritI%{c&$$Nmq_0ky63@D1@mAU?N%Uh)tN1EU+Z3PpBToa0ueH6vdHlc1 zdss=DA$AAWLprV;IsO#9O{i?!TRCPIl4B5ChV`vLUn;(%Ti~AF<=le*zwOWIRbno^ lT5h4ROKTlI@#ijWbNGZFI_qenBMwCvqT`M(;qoG2|6fcHkih@| delta 804 zcmah{L1+^}6rJ7drju>btdJOK$yO1KP|)5&v4<*d4~0UtM0*LS#Sm5y1#=Ni(6x|s zK~e?;#e*dZ9z2KziFhzgHmzPn4}$bia!?p-P9%|??rU8Q}HIB2B9O-#m^Z&+r@7f z9&cfi=I`^h2-)k3`ovNMIp3;iM#xv!5F_>o`!eIUZRg)tV!3aNCbWzdSX|w0&&L@x zy%9H5JdZ}Dlte$lgstL@3B$*FjWCmDw48glT;n+i0{2C%K{YEcGIFfIBFs4G^%NL+ z@N+x&ajuk_5a}I|bJXvaQV;2MK=kErFlEG>j<0FGF6*~2N*ywSY(q!n%#?<-9&MN& zgjU@Q&{3Q8ikCB8NB^_)uNRRnfS9c|47G7w-AX^9w*k|)zrbJH3tS4jCzG9W#@ShJ z9UfGTNoQWu^w7+K?1dfl8adB#hO;ZgAIt7{1c2OjAofGcd+2}!K&SZjMgY+Aj-b+v;20)p@7-EnnREv`59|T@xax5P1N$(; zRm0~wW}MC$j^JgEH_JGQKUl;C4}TY9Y9V>=>U}ZgBQ~KYs+!!N^Ji4UGJ18@yfZAs z*574C0XInx7{a=o@&Ux%`k)zG;{n_xeb5lrtiX($sfHFdh9b*MHMOwW5_y$T3zlAk zt`_9}Zh%z)rWUktVJMQHOQ77D1>8Mw_rr=c26slDMKAv{a>7Ua!qF(NYVpeIU(4#A z$Va-g%~+XfY4vk0maYmUnAm z1wvhVvsKW^#cE@&jB*vasgIMt{9%lo6DO|Jy4%^>Zk_Gc)^+Rw$BviKry7w24I-wk zs9o&~Ul)HaQ~bGvNLStQ=rg=5*V}-ptB&!Q^m*2Ts<|qq6KGaK1`o|wLh(RhrYZdt zQS~yFalDIO9F{%F`3v)CYk4UM3cw@;xsRSjF?_5P$57!VlT835Ti4d;652R@Wz1`H z&AOhKsPlEB^i62FRAelI`7qF+OpB+SvUnrykRj9at9X#>`tqsiV*qJ$QCBk9!E#dlJA}?&-Ls>LWY%yly|6lpjTAf%( kuT)zoZIODrSNyd_I_zGdkIdOy$e3LbM#zM{N4UW8U*EQn761SM delta 828 zcmah{L1+^}6rJ7dX2&#XwvZTU%~lc3p`g8mVh>f^9twqOiS`oEO9(57g1Lxx(KV2C zK@;Yrc(6plgC_-vcrZ;itzJYAg7hFcC=5+bC1Tyiu75U3D|qm*f9L)G-us_FlN%}r zb;=`znmdX7ccX>rJr6>3g@s`bA*1C_FN6T(7_ekuXma}a@BpHl{fs~TGz^T?9)8a7 z`91uG;pr|eLo@Wg=5{-1&SJB8Kg%~_WIq=Vh?N+tBD5x2G4hQYV}&99fIjUwPQeu| zTR@pAvADKNFC>}Yd^2gPcnMAVGCukV6po6UGiHEs%_y^GWjX(DrNMI$1n!I2fNV}) zX2q!zi=c7Q>p2+X!Ovg$kJ(CQMx=MZ&UL?A$vmXj0nrybFqE0>xO2@LE!nt*QRb)_ zW({4Fb8{NfByF4?0jgnz=%hmiJeT#oiT*dvzq5$62xgAjHr4h?b!+hny$zVY{SEW= zW`Rp$_hzxJ>uzVcyFAFUjgudqQGN9ULcv#wj;Z=ndEs-#g=%M2s9SLCm9|)^+AA$3 z+PP4@4yf;jQ*Z}ySejI3`cf6nMoUN|jF5)XEJx3R89W?12LGHHfqP>43;6G5i*W3ca==wIJd~~AM&0*umAu6 diff --git a/src/Binaries/kernel.o b/src/Binaries/kernel.o index 3fb02565eae19d23f803f9659fb6e60360e32233..a0359e38a0629ac34a6ef5b0f9f37bce1202572d 100644 GIT binary patch delta 461 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 QTPW4}KIy14h`7S+9}U~?Q2+n{ diff --git a/src/kernel/kernel.cpp b/src/kernel/kernel.cpp index 73f58af..3b099b7 100644 --- a/src/kernel/kernel.cpp +++ b/src/kernel/kernel.cpp @@ -21,12 +21,17 @@ extern "C" int _start() { sprintln(WELCOMEMSG); iprintln(0xb1A2E, 16); + // iprintln(0, 10); sprintln("hello!"); sprintln("lananas\nbanana"); sprintln("hi dad"); - // int whatever = 1 / 0; + // for (int i = 0; i < 2000; i++) { + // sprintln("a\nb\nc\nd\n"); + // } + + int whatever = 1 / 0; return 0; } diff --git a/src/kernel/printing.cpp b/src/kernel/printing.cpp index c14cec0..60cdb1b 100644 --- a/src/kernel/printing.cpp +++ b/src/kernel/printing.cpp @@ -26,6 +26,18 @@ void printscreen() { } } +void scroll_without_render() { + for (int i = 0; i < 24; i++) { + for (int j = 0; j < 80; j++) { + SCREEN[i][j] = SCREEN[i + 1][j]; + } + } + for (int i = 0; i < 80; i++) { + SCREEN[24][i] = 0; + } + CURSOR.y--; +} + // this my cursor we should move the vga cursor aswell void vga_init() { CURSOR = {0, 0}; @@ -43,6 +55,9 @@ void vga_init() { void newline() { CURSOR.y++; CURSOR.x = 0; + if (CURSOR.y > 24) { + scroll_without_render(); + } } void sprintln(const char* string) { @@ -52,7 +67,6 @@ void sprintln(const char* string) { string++; continue; } - // write_char(*string, FOREGROUND, BACKGROUND, CURSOR.x, CURSOR.y); SCREEN[CURSOR.y][CURSOR.x] = *string; CURSOR.x++; string++; @@ -66,8 +80,9 @@ void sprintln(const char* string) { void iprintln(long integer, int base) { if (integer == 0) { - write_char('0', FOREGROUND, BACKGROUND, CURSOR.x, CURSOR.y); + SCREEN[CURSOR.y][CURSOR.x] = '0'; newline(); + printscreen(); return; } char c; From f9da92b0d9cb604ef9d2821c305264f5e7011596 Mon Sep 17 00:00:00 2001 From: zeb-smells Date: Tue, 31 Dec 2024 10:07:52 +0000 Subject: [PATCH 21/32] keyboard irqs hell yeah --- src/Binaries/OS.bin | Bin 12936 -> 14060 bytes src/Binaries/boot.bin | Bin 512 -> 512 bytes src/Binaries/full_kernel.bin | Bin 2184 -> 3308 bytes src/Binaries/idt.o | Bin 3992 -> 6676 bytes src/Binaries/idt_entry.o | Bin 576 -> 864 bytes src/Binaries/kernel.o | Bin 3128 -> 3156 bytes src/Binaries/portio.o | Bin 0 -> 2156 bytes src/Binaries/printing.o | Bin 5892 -> 5892 bytes src/bootloader/boot.asm | 2 +- src/kernel/idt.asm | 62 +++++++++++++++++++++++++- src/kernel/idt.cpp | 82 +++++++++++++++++++++++++++++++---- src/kernel/idt.h | 2 + src/kernel/kernel.cpp | 13 +++--- src/kernel/portio.cpp | 10 +++++ src/kernel/portio.h | 3 ++ src/kernel/printing.cpp | 3 +- src/run.sh | 3 +- 17 files changed, 162 insertions(+), 18 deletions(-) create mode 100644 src/Binaries/portio.o create mode 100644 src/kernel/portio.cpp create mode 100644 src/kernel/portio.h diff --git a/src/Binaries/OS.bin b/src/Binaries/OS.bin index 8c0dfa98f0ec2aacf37dcc204efd4b60b77c129f..76d6201560df53b34680b9d4031fb8c8a5f98c67 100644 GIT binary patch literal 14060 zcmeHJe~cVe9e*>o+nX-e?ivnyg{#a}(aNu@1|y``q$tlA!i5X4QNo_RLif5|O0T&e zX(4+nIu>Vl(z9qZlz?1Q6P2i-*2`&I+}?3_1yZ}lG-(Wk3t)V(8{3%0TgrOl=e?Po znZ<4JAOA3UvzeLq{d~Uf`~AMpoB7U~S8mOGwlGncICp|PmMb44v8nc>s(InJWQzPs z&4WFC`S6M!bxbYAj;=m-Unbw$Lq@}=V_z!0ca*%)ayoV~s$97*6V(fY#wjJbzVL1~ zqmj~ba(H-Xn0SY6WBAk=BJSTiL)MUi3?YNlF*0#(qKN#96YK;bD@m^WPU`!@%bP0) z|0@OJ&oLFTOUv=xUyZWH)`kdSNq(6N6Y>FjRw2YFx25jv0MrRrG7(UzLz_Pf6QJh%Vi*lxN`t5>t)Z5EB0y=61bO!{{8Mf#ZYc$ z5F=(RMpqUGb9C8?cjSsE7gYrpkQQxMieXX+6Qz)&Rqk7k{vp16@=a}J(TZ0GbLzpD zXT_3Y3$(_?E8V_8t77muD_--1!5g9U8wtsi=!*q=tY(i@(Ou z^{(tGo7Rl+T1R&3;C}?aqaOSgi`EYGDNW#jdt!B|LdEA@hXTv|@}`?#h-AhfwZUj_|8rNtnRo$3mDBV&pEpyI$S8ODtUk zcUJj&eU-1W{mZuBIffKU^6zUb(+sV zqGD{6Ln)#Wk|rsRv2V4AHo$b;y?MMTO!Fpi7ImXZIK;HMhLF?*vZuAaG+`UDP>)2X z;mzh_X`StGLJBiA33nFv5k1|-zU-SDQir+2%{~%>!?nJtIu4inhysUDz;qn`QEzV= zIzktFD_}Yfe{zt(8nv|UlsDx&>!|-H%{+mBw-N7vO6dXiq=TAtDLO@$M8oZ4YaQLV zjulDEIQ^p_+{J$G!VTW**$y9&j$9)GVB-7Nj(6RpWppaEg!;D-T>?Fzs?6kR*;LW-@zvTyV;KfF z_q&N+!oSUEBsJbhs(Fg0SNnVYNk>=>9O9O9Gi8(7d1}8r8`J1yHC zsGDDeCG3PV1msX6P{7@dfn9702gNnsvgRpU+lp zI~AO(Zujcz0sc4ew*>i7r#?P6fzt+$j_v1;`+Np)75us&@5m=|KMnjn@V^Z5>T_QH z=+`afM2NWLR zqjdc`dSWx({+oH%1na%uueS$yKjK~;=kP1izqyka_sen{KDj*e* z3P=T{0#X5~fK)&#AQg}bNCl(=kP1izqyqn6 G3j7;%ZOyL$ delta 838 zcmah{L1+_E5S`s@%xX8uA~Bkp^kBsXi^W#_IFM7S8}vnD+JUZQQghLyvpaj%woEF zFz*G3%Zc%Zy1M+0=gt*Yvep2U!-u;y3YbJMcP=SpIM~8?@c&IYr7vpm0e6Ea#1H|MxB7GUMhF?U) zW`#4ZW}TIS>KAGmjnL|ML%4seqxwHd(tBn;xmTpwP0{S`{xJ-kWr{7E`==N1;`XIL zBjJ~Vs<57JLVu$q6tlQ(Q&pno+f+PIi8+cd5p7RK4C1vSks;*fvrNX}M z_Tlqbys+mU$3Aztm|GGZw`ztFK`9uuiI4a(tC@dLd}=++zpk+(QV;*D#?GP}sIwrt z=XLfNUAfK{(0#A7l5~h4-eNzc;j#LbVYqe*1&We@FW8N-5nP+dD?54qMl*r4I-dO$u?Vcn) diff --git a/src/Binaries/boot.bin b/src/Binaries/boot.bin index 1656d9268d7f61fe74c3650a2bdd8580013d0d17..e9aaf3630cdb779b0b24de20cd72e9ed7d55478d 100644 GIT binary patch delta 29 lcmZo*X?niQIKu{;+)xxjC@~lzj06m?F~o%hXw=Zj2J0wwFv7O*k*$85 z;I$VN|ImOz*@B55Q8AhB(KT@rny3{VB6(zyV1u|Ra` zoEd~2&Lbt!EB&LM z#6S~9Od9o1Pcc4Oik4LXyOPwoh%(sqNVqi51tf$5d67&XuY( zD|Kc!#LufVCw1n^;yp+I<$QhK`3i;Rj?}sw{RfnqT;e=m1uh zIS;JV<+RP-B&7pVr$E|+%57S_ncSJR6-K#-$uhQ(PrmfGs{Z;ZLgdS{8s3jjbe1Gi zQr|L}jz8TwzA`=w*ELTGNjfg|6^|9+j-69NS6yGo?!2A~+72T0XV^GA<78~JLbHo$ zhCi!UT`7A3{%iG4OW%)mV*BwhtfJZY8!QT&RUrTT+VRHmmx%_HP^ny#!#k6eQ!<}X z($50^o)93<#cB5w!pA_lNi>t@hCM?b3=IlzkLRM>ppv1CTsq{1m4DKNCOiVGu}Q_f zeEumn#!}i7B?2Ka66F|swn%FOOvK%s$D2YgZvq#QH=2Y_^vbgdiN1j7F`+g_*fK2C zB++Sjv$-WEvK_ih&5U+I&O#O<#;Vvumboz6%>~OX!~?+s%XI64TP?%|fyZX*fiEJ6y%yHQ)mEeD<;vdjdA$Ryx6Vv-t)*Y)^0@o8biC!!mk7dJEKx*kvbpF&lP*?`5Z*;3e#s z6TFl?;{*p;%z$}ejosUFBfncsN9{kqtCGJ?gY~yh^LP2*y3W4B+>HNie|Pb`hOZ5j z&B5;7jD3VE+>Eu`Fzx$Sig#V6X>=;Ig#5P?EI>l#SXwCqO5$5(3=4RkQbjPE9T z3I8^uk>q$I$tEe9Uhen&lMc56IQUH`2GTNBlT^Jh=-X-@A`a8oY7PrvUzjU66yz7p z((JH41f)}%qoB{w>1t8z;FECK8q^SOh7BittL~Lsj4@S1NiYLvX8c)qr0CUsu3CZt`K^--1sT@P|#l1NiC*Rjn`J!zOp6?bb-)i7>@H^MeKdSTp0J9K~0RR91 delta 811 zcmah{O=uHQ5T1SAG;6vstHf$*(}NWa7K>UBQY)l|6$Pt;bIZz#1p>UIH*})ll{zIF3o?C(X2#m}c~Mb%6D1E20{aPR#JN@EBo1 zw+OE_a2_3e#067-s!6?)Z>N2^@a)c0HXq_{>DvDJ5I{;xkJge)3tyRpMoy2e zOG_@~A4$C@!p8tg079>r4=b1A_H+&l&drj|lneEHXp62aLi!e6xe#BG`beFz-o2C- zt|zy0P=ODzBLl>xgH)N;m6X;xUs}b(0TS9Yk>OdgLRS#+DRw4Muk%tc`Gs0WBRBe8 zWA~1>RR1SQdN0~e?pA1O<21F~n?m3eGkl?~Z(%Wo3?C#0uTd(V%9|z!$U2+PqQwc_X7+V zlNg98mt$a^7mdEkg=nVn`=lW07OwZS`?9__j^)La3SV}I@nO8Xpxl-C=N$pw?NR(U zt3t$43Wj$okJ*UV#qJlMcN}DItNf6shyAMZv*`LA9!2-k;ZM-5I(!b@H;0!z2iV{S z|KS-NaW;eqY!`|YRTvj` Js)wa|(qA787Tf>; diff --git a/src/Binaries/idt.o b/src/Binaries/idt.o index 919bf8c99220d1d739b6a8cd652bd221a004e43c..8d16bdeed08762ad088a67f53602e24bb8187319 100644 GIT binary patch literal 6676 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 a3UUZa-ut>}5y!X2FN(|Oq;>*ozyARd55R~3 literal 3992 zcma)9ZH!!189wLE+}YXA?0j!&Y3t6^QmeJI-Q~lzEG(s2U`v5TU8O)AW@hhvl=;}) zxx03os=z|BrO~*F7=M%?io`%jh(A!GXpB~3f{~cWKVxDvA*L}Jn@G|o>+_s@&g`9H zjBj$z^M0Rm-t%#1zB+s2E-9rjBt=MUNkYuWealS>4v0~a6AS15x^^kLb}8PV^8Kru zo11IDN`2!uzf^|!`TL^hXH(}Fa_je9t(}|wVEx_o*~{l=$b>lW&?q>O3a7(%v*U?Og}Qj;alj;f*oka-24Km^A0gzX zz(@WJ?&d?_-UP$?$qSLE0H1gn-IHijN;mpDXL$Du$?i zA{M(n7D`|NwwTMJ3RxLS#A3czAu6G=i(+P{2`r?iku5TyigXfbnTg!7<19==wg^T0 zgIGIoHlWeN77BA&s)p0@hD0_N8rwC-$kcT>FPL2PNNj6vF)8P=96w&b%*HX>k(&Z8 zGdr0m0ae08`Kn}5s_Cj!oy1&rdMC4_l2|H^kzO(GOlHv0cgxa^g~;t!^%xy=^4EDr zW!$cdpa$A1fY^;{^KPP;s%Q6JpA+J{;BDBZfOv_nBt{6>R=z`E#;i|*pF^|2C&Tl! zJjCuXc1?EnUSX>-Lf1(;p&bk49gxhiZ22xIMIHZ$ED5rpfqX3d+~)%yC=3 zVCRn7$-14|uoDm2!;jeUXv3B#?c9u=yv>%;x`h`}mTKkYmRD+&JBuyH6?fmikUw_t z;KZl$6O+Zs;^F+E_KlP1yycE_Tl2=LTfmpyYD4q&{GnRSb)24u_-3armOH&>z2hwA zd3kEBa=j;dOD=>~N0c6(GW`6#RZ%JToKmAHaD7Y74l=Y_qSfux^8-0r&34m6=)^?8 zZ$$+yd9I(N)fMH|m&&WX!&~E58)a9huGw?@`I)2Vc%^#Tb3}WOrGcDW~f7#y?lCKJeM`o?8`eBz^%Q2O&L5$pWSBnjyN{@X3EABpa z>`49qHu&RuZ}G+RNuK$PkY}TES3DeE$KmA3W+U-U5l0izXRJF%?1hW)@NLuD#s{o# zw-%KHV;@C(5{;+7Z}+z1&qDnsn)=k3{3m@oLxRLRV<;^CxoLRf;8&fp`grzTLW1Aq zEei278laHCYZ0K37zs$smk`57gU~c?wDJJY%#`trC}OQLxZQiTOh}E`&xblXd&qjiCFks)Mtcv zhcY&WJ1epM+#fl_S_7fvHT$xwe6KFK+pBDVK~=m6+P#)CyI+@uPlm{UQZO=t}oEI=v0>Lc-U)QxG26{skqJx zy!zI%Tkg~y2KH60X2&rB7|XC!my}%Xw%d5W{TQcFs=4KM@Iqql|BJ?8L>c?94*y>S ze-+S1+J%Orp=v|GcagOmSr?_NRVUW zU%c%E1>1|XR1$G9le2E>8_0U+%M#By*xBSQ?74WdBuSwL(A z;sAjF10zEPgbC#{Fth<#Zj+xfy4S~Nr&cEACl;l|XC&sOF( delta 72 zcmaFBc7SC<4Wrz|T4lz7i3`9bLjfMR~sr=ASNpVmVgkwQEO(pKAC(t1#XHMKQ(QY(PUtUc`gci-UCg`G&8hVIV$8WnlSf44`mk7ipfs7`Y9-kvL zREYULrp6f4FHFS~LVYLE=Id^xc_Q%u1g^@Mk_w73+?0JC(3Lczo!$wr!z;$NiFT_y zaWhG!yC@_DO`wrs>r%`sIAio49#lq2d6`nf&NRL&1EeV$Qi2fW>$TzW8k9@9TxEQ$ zT&a>C8M!fQPI>=noHP&OlKC#lSK^MmbeBTZuFI1Vg&TGZ7aSXx)PxwtBi6C>)`hs% zr|4zUTC6YNEvrZAzPN1VaotLsiIXoQ0DCA417I)fD8Nz9Z2*Oq&u6oLwx!RtG=C7@ zcTsCR9h%#DpDlX+hpqgKvs~N^bqX4EUd6E6@zoCt;4=0*S@8(xojA@ozGi`VjPIR5 zMd^)S>T28d)exPxfVCs*%sX>-DD8B51=a-t_SM&)H+O3d^+>ST2u=+b>B= z5C(fPMu@X&X3(16PN1)o@XLg53Zc-)&kRE@P%;g9xljcCHR<3aAx|L~U>OCXAlnq9YK=E5G7}sQ^I0bo4-n0LVuX_0qBnEUZ>mT zcErtsmyY6wc4k2QH{JelNHm*0k*O$v(+-WjWNQ)XwVV4<(3Fade;>|z6tC!~_eghm zxE5%u)ui=9I^U!?t7#xa_IfctQN%C$3{DxTz|Bkf;>eAW2`n3Hac<1POEo;=1@3CS zO;Vd&4H|S9zO{GZqP!!fF>W3T^=@xf^obd~W%l6*GnEB(Sq@z;*_sOw;!Fj75C|Qh zmFp&egPc8pu7=;!@Q*j@Q;qsuqt2-sFIWrSB3pD1OPsCeUZ7LZT<`2Kp0|BjH34!s zZYRVuHT4tQS1Ku9;HI6Ft@P#_3^@sTf@Xb;9i%>y_W<*xuF;4w)vM(ATFt_z&OUjM z%rRwF9bXvu$4SaxlV*wPEx@mC Uo1CK=v#R0#pf8Wo@3F+yUkJ01=>Px# diff --git a/src/Binaries/portio.o b/src/Binaries/portio.o new file mode 100644 index 0000000000000000000000000000000000000000..0765eede5e01165c2850a78c26b60345b7a9d5d4 GIT binary patch literal 2156 zcma)7&u<$=6n?Yzx&}LL5?7@qg*X*If=cZ)2?YXe1Cd)5q88Cc{3cpE>(~&l&3aSX zs1isBksln$fmagN{N+plXMn zx{4+<*h1@UFS()L6Lla<#@YT<9F_5CI&PI=vuKo)X#gn9q;_-$XDH4Psmthej>QSO z;9W@-X2#S@xfgR6i_Q^{Pe?9zHkT^kqleU!g<>u>Ix;$>hBJeYh@{Kv+|g8aCdUCm z;bM`*?2)yjs))r-i>2aR8691)(KZ&JaEzY;MMmASu{%QhZKw;b48)23Qy3udte`MP zoeJ!Er~~_;bA`-@Y~17G>dZwqm3`e+tM1{mZt55J;cZu)aU2Z3aA~15cjCmU=S!z1 z%ai4a(#iJJB${Y7@XxfSUN{Zg3+qi|FPBa>8lms^A}?5K1f9 zh7-K>W0r;uIRvGswKqlG%&L)mI=zlfKJzklj6pGk&;f9O6xcb}h^ zyy@Y$52Gp$18MVH=_mJS|19hgiDVJSyE#C_^uxphqVo_RrH?{7PQ<&QD-m(0O+RlO z$N2_V41Qwpy1|=7#J(BX07kN^y^?Fhc{gv{PUt3*XYz2)DC~bSSTIgR(vR>!~%Xn)N16Epr zZwDa1HQBwW{d%X}_HiHd7{9sL2)#Bp=K)2(d5Gn{Q1}KXUj$oUW9X-?UsPZKO^S_s z8l61j|BKW6oJhcY-zR*V?^*P*DrXIsN9}wLo972pE9c{#v14G$FdWu`70X>hhqcLV z!YR=(V!7AgC+GbdlW|Te%4Ba|54IfxQ+|N+J`E$5`v872-wyJPqmTL6&$VzJZ79b~ zKq(p2TsJm#OOC4R9BAXNA+Dt(;>O0U!%gP<9dY<)?1_!j_XEA4wfqf(e*-K0KFT&U zxsIO_`%(aB*TK9t7fhK)LEHikLAg%G*|pnRL6`L5JWj(1^H4Z08TT6!e5aYXv2p(b Dbv%P%zSHhYiNW3M(}x{zf5$pb`VIu%WXeYm5b@ zjj_?tTiL6njfK6nt#3I3#m&9>=Iz^`X1bYve&5m>htHnyAAnBNjq_dEdn-B$L1eRT0icVQdB3XpwlppfIg> zFj|5g(w4W>)hFB!$F`O0`cC;H=#IzrRgEu$=oo|*=|Fvo2+OHo;iPhrvKvbteVWmI zbZl9kLq9<#^@_H_;79m&^}Joh=?#6&P2D!g=|^7xtZG=N@F1Fe-^7V*6_#<^ pj=B%DC$dPk)w)dBLF-3Hwl4V#7LTYadB^Nd$dhF((8+sW1OE?KL)icT delta 477 zcmYL_JxD@P7>2*|bMN)a^(yvr1Jizl0xN|aqRCo}pha3L2$G6YM64u~h8DLbIS~zx zEzwfAH?>z|OGA5eYwz)j4)?q7_k8bp&rd7eN#}BOYD%hePmnq}+cR}m?p~O|)n7vL6ydPj2zISTq z<ao7@FRTtdfutw^ju$aTenRbA4FdOtZUdHZx~I^HwhwFO_;M` qH{n0ffy^S=Rhwoq9JYUSWcyOQU~xoUnRm?XMy)Jkp>96#>iz@m>qE8x diff --git a/src/bootloader/boot.asm b/src/bootloader/boot.asm index 7b7dcf1..1907a17 100644 --- a/src/bootloader/boot.asm +++ b/src/bootloader/boot.asm @@ -12,7 +12,7 @@ mov bp, 0x8000 mov sp, bp mov bx, KERNEL_LOCATION ; we want to load the kwrnwl to the kernel location -mov dh, 4 ;might have to change this number. number of sectors to read +mov dh, 20 ;might have to change this number. number of sectors to read mov ah, 0x02 mov al, dh ; number of sectors diff --git a/src/kernel/idt.asm b/src/kernel/idt.asm index d88def0..02a36aa 100644 --- a/src/kernel/idt.asm +++ b/src/kernel/idt.asm @@ -10,7 +10,6 @@ global _isr_generic [extern _fault_handler] - _isr_generic: pusha push ds @@ -28,3 +27,64 @@ _isr_generic: pop ds popa iret + + +global _irq_keyboard + +[extern _keyboard_handler] + +_irq_keyboard: + pusha + push ds + push es + push fs + push gs + + call _keyboard_handler + + pop gs + pop fs + pop es + pop ds + popa + iret + +global _irq_under_40 + +[extern _less_than_40] + +_irq_under_40: + pusha + push ds + push es + push fs + push gs + + call _less_than_40 + + pop gs + pop fs + pop es + pop ds + popa + iret + +global _irq_over_39 + +[extern _more_than_39] + +_irq_over_39: + pusha + push ds + push es + push fs + push gs + + call _more_than_39 + + pop gs + pop fs + pop es + pop ds + popa + iret diff --git a/src/kernel/idt.cpp b/src/kernel/idt.cpp index 4be8e03..a418e29 100644 --- a/src/kernel/idt.cpp +++ b/src/kernel/idt.cpp @@ -1,10 +1,17 @@ #include "memory.h" +#include "portio.h" #include "printing.h" extern "C" void _idt_load(); extern "C" void _isr_generic(); +extern "C" void _irq_keyboard(); + +extern "C" void _irq_under_40(); + +extern "C" void _irq_over_39(); + struct idt_entry { unsigned short base_lo; unsigned short sel; @@ -21,10 +28,6 @@ struct idt_ptr { struct idt_entry idt[256]; struct idt_ptr _idtp; -extern "C" void _fault_handler() { - sprintln("Exception!"); -} - void idt_set_gate(unsigned char num, unsigned long base, unsigned short sel, @@ -36,9 +39,6 @@ void idt_set_gate(unsigned char num, idt[num].flags = flags; } -// now we just need to set interrupt request functions using assemblt -// first 32 are a good place to start - void idt_install() { _idtp.limit = (sizeof(struct idt_entry) * 256) - 1; _idtp.base = (unsigned long)&idt; @@ -49,7 +49,73 @@ void idt_install() { _idt_load(); } -// theres nos issues with the code. just where it is. its overwriting itself?! +extern "C" void _fault_handler() { + sprintln("Exception!"); +} + void isr_install() { + // for (int i = 0; i < 32; i++) { + // idt_set_gate(i, (unsigned long)_isr_generic, 0x08, 0x8E); + // } idt_set_gate(0, (unsigned long)_isr_generic, 0x08, 0x8E); } + +void irq_remap() { + outb(0x20, 0x11); // Initialize both PICs + outb(0xA0, 0x11); + outb(0x21, 0x20); // Set vector offsets + outb(0xA1, 0x28); + outb(0x21, 0x04); // tell Master PIC theres a slave PIC at IRQ2 (0000 0100) + outb(0xA1, 0x02); // tell Slave PIC its cascade identity (0000 0010) + outb(0x21, 0x01); // have the PICs use 8086 mode (and not 8080 mode) + outb(0xA1, 0x01); + outb(0x21, 0x0); // set masks + outb(0xA1, 0x0); +} + +extern "C" void _more_than_39() { + // sprintln("more"); + outb(0xA0, 0x20); // EOI to pic2 + outb(0x20, 0x20); // EOI to pic1 +} + +extern "C" void _less_than_40() { + // sprintln("less"); + outb(0x20, 0x20); +} + +// not working try timer one instead +void keyboard_handle() { + unsigned char scancode = inb(0x60); + iprintln((short)scancode, 16); + sprintln("key pressed!"); +} + +extern "C" void _keyboard_handler() { + keyboard_handle(); + // sprintln("finished"); + outb(0x20, 0x20); + // sprintln("double finished"); +} + +void irq_install() { + irq_remap(); + + idt_set_gate(32, (unsigned long)_irq_under_40, 0x08, 0x8E); + idt_set_gate(33, (unsigned long)_irq_keyboard, 0x08, 0x8E); + idt_set_gate(34, (unsigned long)_irq_under_40, 0x08, 0x8E); + idt_set_gate(35, (unsigned long)_irq_under_40, 0x08, 0x8E); + idt_set_gate(36, (unsigned long)_irq_under_40, 0x08, 0x8E); + idt_set_gate(37, (unsigned long)_irq_under_40, 0x08, 0x8E); + idt_set_gate(38, (unsigned long)_irq_under_40, 0x08, 0x8E); + idt_set_gate(39, (unsigned long)_irq_under_40, 0x08, 0x8E); + idt_set_gate(40, (unsigned long)_irq_over_39, 0x08, 0x8E); + idt_set_gate(41, (unsigned long)_irq_over_39, 0x08, 0x8E); + idt_set_gate(42, (unsigned long)_irq_over_39, 0x08, 0x8E); + idt_set_gate(43, (unsigned long)_irq_over_39, 0x08, 0x8E); + idt_set_gate(44, (unsigned long)_irq_over_39, 0x08, 0x8E); + idt_set_gate(45, (unsigned long)_irq_over_39, 0x08, 0x8E); + idt_set_gate(46, (unsigned long)_irq_over_39, 0x08, 0x8E); + idt_set_gate(47, (unsigned long)_irq_over_39, 0x08, 0x8E); + iprintln((unsigned long)_irq_keyboard, 16); +} diff --git a/src/kernel/idt.h b/src/kernel/idt.h index 3c8cb53..12ece1a 100644 --- a/src/kernel/idt.h +++ b/src/kernel/idt.h @@ -1,3 +1,5 @@ void idt_install(); void isr_install(); + +void irq_install(); diff --git a/src/kernel/kernel.cpp b/src/kernel/kernel.cpp index 3b099b7..d8c958a 100644 --- a/src/kernel/kernel.cpp +++ b/src/kernel/kernel.cpp @@ -15,23 +15,24 @@ extern "C" int _start() { idt_install(); isr_install(); + irq_install(); + + asm volatile("sti"); vga_init(); sprintln(WELCOMEMSG); - iprintln(0xb1A2E, 16); + iprintln(0xB1A2E, 16); // iprintln(0, 10); sprintln("hello!"); sprintln("lananas\nbanana"); + // int whatever = 1 / 0; sprintln("hi dad"); - // for (int i = 0; i < 2000; i++) { - // sprintln("a\nb\nc\nd\n"); - // } - - int whatever = 1 / 0; + for (;;) { + } return 0; } diff --git a/src/kernel/portio.cpp b/src/kernel/portio.cpp new file mode 100644 index 0000000..7677c34 --- /dev/null +++ b/src/kernel/portio.cpp @@ -0,0 +1,10 @@ + +void outb(short port, char byte) { + asm volatile("outb %0, %1" : : "a"(byte), "Nd"(port)); +} + +char inb(short port) { + char res; + asm volatile("inb %1, %0" : "=a"(res) : "Nd"(port)); + return res; +} diff --git a/src/kernel/portio.h b/src/kernel/portio.h new file mode 100644 index 0000000..c2fd9fa --- /dev/null +++ b/src/kernel/portio.h @@ -0,0 +1,3 @@ + +char inb(short port); +void outb(short port, char byte); diff --git a/src/kernel/printing.cpp b/src/kernel/printing.cpp index 60cdb1b..673e80b 100644 --- a/src/kernel/printing.cpp +++ b/src/kernel/printing.cpp @@ -1,4 +1,5 @@ - +// TODO support coloured text +// TODO move the vga mode cursor typedef struct Cursor { int x; int y; diff --git a/src/run.sh b/src/run.sh index 52acfa1..963c10d 100644 --- a/src/run.sh +++ b/src/run.sh @@ -13,9 +13,10 @@ i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}kernel.cpp" -o "${binaries}ker i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}printing.cpp" -o "${binaries}printing.o" i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}idt.cpp" -o "${binaries}idt.o" i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}memory.cpp" -o "${binaries}memory.o" +i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}portio.cpp" -o "${binaries}portio.o" nasm "${bootloader}zeroes.asm" -f bin -o "${binaries}zeroes.bin" -i386-elf-ld -o "${binaries}full_kernel.bin" -Ttext 0x1000 "${binaries}kernel_entry.o" "${binaries}kernel.o" "${binaries}printing.o" "${binaries}idt.o" "${binaries}idt_entry.o" "${binaries}memory.o" --oformat binary +i386-elf-ld -o "${binaries}full_kernel.bin" -Ttext 0x1000 "${binaries}kernel_entry.o" "${binaries}kernel.o" "${binaries}printing.o" "${binaries}idt.o" "${binaries}idt_entry.o" "${binaries}memory.o" "${binaries}portio.o" --oformat binary cat "${binaries}boot.bin" "${binaries}full_kernel.bin" "${binaries}zeroes.bin" > "${binaries}OS.bin" From 86de9ff35e926f65272f75b995143dff43339751 Mon Sep 17 00:00:00 2001 From: zeb-smells Date: Tue, 31 Dec 2024 15:58:58 +0000 Subject: [PATCH 22/32] added a lot of keys --- src/Binaries/OS.bin | Bin 14060 -> 15096 bytes src/Binaries/full_kernel.bin | Bin 3308 -> 4344 bytes src/Binaries/idt.o | Bin 6676 -> 6364 bytes src/Binaries/keyboard.o | Bin 0 -> 5244 bytes src/Binaries/printing.o | Bin 5892 -> 6200 bytes src/kernel/idt.cpp | 6 +- src/kernel/keyboard.cpp | 118 +++++++++++++++++++++++++++++++++++ src/kernel/keyboard.h | 2 + src/kernel/printing.cpp | 11 ++++ src/kernel/printing.h | 2 + src/run.sh | 3 +- 11 files changed, 136 insertions(+), 6 deletions(-) create mode 100644 src/Binaries/keyboard.o create mode 100644 src/kernel/keyboard.cpp create mode 100644 src/kernel/keyboard.h diff --git a/src/Binaries/OS.bin b/src/Binaries/OS.bin index 76d6201560df53b34680b9d4031fb8c8a5f98c67..1a0dfde797c733db44c40cc7685d5b0cb971ccc9 100644 GIT binary patch literal 15096 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 Wa1i>o%$UEA<&SWS;Zu6HNjK$I=p_R)3l|wal z(GR__KXl*SA7lJk3n>XbT@H2fB8IMi)7LK-*1C6 z7vA$M99M#wwuH0q>ZraX|CpS`0-3sLOwQ<&`;}nUb_Q*@lGZVnWWMvmS~ROgGhr4k z4)C3tro}FnYH}vlliAvPMU%6!o@`m~VBh~Z-)uRrR^;r-fTN&)zfzw~T%lFqbSf;Gk%_m8-kqW+DZB%4W zlGS*lUOs{XYO+V&tSq9Gl;xBniT!pN9M{Ym43Kc+8G6G;=gtPOikGH8OpKoxj=Fg# zyy?!54@Xb&R&e|-3am6{_08TMOZ#Iz9u}=smgw;oku!TM%yM65ReUuWU;mG$iQgcE zRh}=w`%BY3C5iFaa8+EMJk~S0p?5Lf8^7a8%9F9-Vzme(c1{W2bo?&vwDe_g{%|4qGrY18yoQ$* zg4c3KA^5ZWeOwHjqM=zKKgZuH1mDNc6@n}Ik4=~gOFQBZaQU`%I@|h;Kc8bc-GDW~I3d;#zkdrrlU9v8nN?664Lm@Li^)++jKY@7HV zVTVNA#&(Er6BZE>8+$_RCG3c3vaz7pPFPfIv9Yg-FB7&;RNL5Av6iq7vC_r@Vkuz< zh2O?%MG;}mf_}M}Yuhd+!K69`x3Nv)9l~0~A8qVmF-BOM7`CymieC`6SNzn*9uY4S z77{Po*k+*+78b`X%$54OdNlPd^%*@2S89veo@!S^CikTJRO+buq{;161F0@`i^+XO ztxN4uA2PXbsOwYDs8uFcr>;uvR_`&nN7b^_0kzcR>Q!%Qzq%kLsm>HLPf!^;eYlCg zU|h|(Je`!Mj}IRyJJvJ(T4Vv;bCgP4|9*8b7d|?Zi>c9bK%)2Z1NO*G0uH1AM>}?A70X?FS`S9{bsVT*?9|-` z^_DSq0`xrS1<)zb0O(cF&p?BqH$axYHC_aE4U`74yBI44tp?SA0-zR97s%4L#^-^Z z2K^Fr1#}&B6XZfZWuR4NUY5Q!t_NNR3V@yhwS$g=;vh?B?)U@9O6lC&B?ogCm?T{C2z>d`+;ADd`-T*O&2o>*g4Q!kdvR>nrdT3&cl~R zDMtzL1ZeG)re!habT&a}%FrnX>_Ux-{;g?`^+5C0l z=gT8T{$$$#>V_Og!p<#d%ew(bAzz*^H_EHW?gxGd^4Ig_&ewAB&k=sBaQ(_5x(@O} zPUj<6n;mxiEMO<(^TjVm-897iKE|AV(Mbn+xKrJJJzcmi|Bu~@{CvM@=UW5(Ed1g> o8SH!>H{^Hn+Yh@s{93Tr@sN`&sZQkg{D+!G-?NUjMVNr-~38j?CJ zmf;1CK#vweqc{Ut8X9bozoT_3jh z%Xc{s$>dHsJP7qj!Rop0$roQS2MZspR=7!v%R?@5h1)6+iXfzVV}bVAk&fsf5B`US z*xL6hoGM0|upm&`Z^FWR$P`xwsWC2G3v^$~Rri2+Qi)5;!4%AAVL`9ZBk9lPKEi_$ z>XHVTao-SIRj&XVxsCVQSb&wW?zgO3Sa_|}U%0i58B;m`myl(4*Ue35@ULgHxc zT+o}{*v(I&lo_^uq!{N0svo@*S~XV zVu3!JSJlw-T!egAp%b!D172Y*W$3;U7tp6^yu{m0ZE}gmz@;=|hRf)%8TQayW_Sy|WQMo;shsAl zx9JHUpIw+(W1sOaa{27_2-iDThy&u|Bz+CBG4Y8wn7RJ+n>3{k7~pa?0)1G{E-*%> zGh0UrvsyUo*@jlvx$_Op%?)P?5RoJsxoZ`0?hJWoEyqV^$S124-<%;y5FciUBgcuW z;$%07_Bg2naV1XLa@_b!oZQcGK)ee-P)HIC-xcBzomf@KZV-w>>OlNaNE?Vig4_Yo zn;>JN)7_a+)je?O(Ec2u6CbczTE??^_%!DM%7c&YKmuYND=J}oFF}&x4t#Q!luIcg QOHSJf=-WDD{4p*5A4)+%S^xk5 diff --git a/src/Binaries/idt.o b/src/Binaries/idt.o index 8d16bdeed08762ad088a67f53602e24bb8187319..613b8d6c68c47784b2eb731143787297cae09d4a 100644 GIT binary patch delta 1749 zcmZ9MUuYav6vpqpGk112yV=bC%kIP^Y&IsOtzZIG(zKA6phRsbBGM*CLTVySjN3Mi zjiEGasfGF?iMRM-AT20Xu!VM^R8dJEv`Q^lL{YI|O~EKF{=o->Hu{~}6CWJ7_dCDu zoSC_E@7X=E`Mb8coH~&{m%lDc9qN*N)s7SoDsu*AJVBv|9vGbvG7*5Xx{*l655l*tImD?T*481!>7d3DN`=-?prktwapOhgoa`yY z*6RrU@^h`*Fls!ql~8u*C{mTppo`J&0s5 zJ%R{drT>5`>AVI>l4suw-wjj97B2EOW=(G>nFfnM-hL8aklIg zr=eSD!S5pA2R#YA?*0j)HZ5Oh~bET!IE$it!#RD<-nCh<7{U1ebv_BnvE#9##ODgt??5CQ9km3uf<%?Qq1!MgX zD8IU%gi=0)XRKeu>Hl%wtX5s~*4H$&XSgsjF*<2pj8q#Z-cdO;&_1?r63sYKm>4si z@f*dfc!0u@enXlP;%CyN5WhfWjS$qKDuQ0ZCdj++LMU+^G4l5?Z)Wacraq?p0P}9< z{me6EE{fx9%yGdY^IOE&whPQ3GGAr>lKCd{E#|+NE&N>R{sfd3T*JJ9xh>!pG%Xvw zT(FaQh!|fyPF!c6NxoOafe0DG50{m?hB(Vw&)USgk(K^RsO}-wKGvPAPq9AD`U2}L z>#?$qi#OPKoAnGSKKLT@2h5)^)9F(FYv$|BE6lf9e`Eh|W@&DuI{mG*rC4?+DaJ15 z17;?@Bm6MhPrCS1FrTJ(m|XRWoHF6e-8S0NHEo$jeHt4ljI2qTiHxU~EHj&F)=MxW zf%$&M(^o)8%rzAECa8E7(RN3OL#83ys4wH)xuAA1>#5$9DP)`Vk1(r|PMUYJp5BF) z?KPKBdcT1lBTzxrQl>g4qR delta 1975 zcmZ9MTWnNC7{|YvbLQ-6ciY|Wc5j4Uwl^vbCQ4JwtrtuY6trm6LR6@9rKM|IXq6z8 zC8?q&gir?`AT_ZMMiU4Zt0jF-^9*WToZMPk?Fv$?Z3~>&(Dv15qhm{Hh7_Jc4XS!6>48dqN3YR zL=!i}l+fp*N>5t;Y;SsB`M{p^;9$BdMITBcMZ!iE`7a=(O4yp~td%qFMyMO?N3{MF zM4>QS3Jj(*B#Jzc)c6Jg=-H@Woz@LsI&d`@mATCsF7wf_LKMu-0kV zMDD)UEhLg5PD_%u@3ps)O{a&4LvhTt~I4z}88032u z-m;#8EKw;QHOfU}&P~WO0?f-L#^OO((cxS|`YW_mUUnWXv6$@^Z!P3#KRJ8AkDlQk zuf{3E$c-<9mwK$812-RmzlwGympcT>Ha>=;i*UI|IvHU7+u$Uc7*qTC9`7S`gLwwT zSTfC0<~)FV^2I%3EU)i{=cz2kA1OzN@^3-QKlZ@R;~kZ%;N2xh2l9CvRpjb26AwC7 zA|jfTmb=ow%D=+jSGXavIw>N0*w>ag0E17eC#x{myCEX+fk}PFw=BA_jd52h#Vr-t zv_{YPYN}N`Qlf*yb`HH9hB&BN;zh;^r*w;ZFp_9iWjj^X*UG=fO(}6xRX6ELcZ)l? zqqA>Ee^+`Uk=H7mt;?~61}C1(-zW4B{*sAVzY?Xq7}Q$mz9QEasJ&kXZ2WD!DvR+d zLh6?Si=5T4rE+3X!BNq}9VR z_zlA+neoN%Feml8@F&?BEQs(C@#bfpGaBYe1y>tgX>^@YK4iInv(dECUZcB>9yZE{ zFV}0M{C|Si(nluoDJv#~PYo`-Z1}3-YexCR;<_2br2mLCZ{aoNQEOPy)*Ier*jrol zKW*}zCZ91pXmqd1A2WPPw-!Gl9@ZxiTlDqf8{({Mv{L-4OJYkT*?L{9 zhJR;D=-shOm4LgbPr!BaaiBkkn{tRw>CSjW&&5LWfU67RHS$nYH^ghym`hZFzDjj0 zO4OoXhx;s#Xh5HbyE{NMtVJTCr{f`cDxmLR$Rv^-`mRK!x`H9?dNW)CNBE512j}8P PXw>6yAXTqlY*7vQ)0g8`r3yRxBaKv zgOlyk6&Ks5C+@dYys*M2#A*NY3D(Lv1WnRMuugu05%SIQ4#9f) z5y1xeCxRCF0YQU&4={0}R5&I1r{!;mdrn^QxM$>#i2IVvdtAHx4so_T=W(6#MdGq@ z(&G-uFB9iT$K#%rgTx(^eIC~(_Y*fNqaN2GHxZYT8$52WTt!?)F88>7ashE8veM(8 zk|uF6IgLHywe6RGhLO+7TOPMf{(-oDdEMi-%eRReke5Afhx`F?gYpfJ+bO?ATvDF( zxLxuzafjt8&H3}Y-SPYpcTCN~pO3mj`5`ySR*!oqKkoLh)$Q)fA9bT_ZFRTg6K)$@ zUv!)DV{QXmTinO;akq}GJ#KA2?bfjM1$SWib@Z(EqNDsJ@jd{U5b_a<%!JNJ1V@18tyS2$G_ zKX1Q_kTVVLBISGk3CEha-#l7Yh=n5%u5sq-TSBxU8%gRwJq~GrtcSEg+96TMen<}_ z2GRZ+li-d+&Oly+T!Op{xdFKY31Y0p5bdwA0o*o7H)IHM67n+S0_07|uOZsE80nj! zuY|rE`jY6|S^`-ODfTPYTgeChmN5L7k_bdlEhDXlDwJQrgGvcazr_DEYNIQlfRgA5 zbQYr7cntOH#uC&Qh0kA70wp+w%2yTmDj*HuNoGhq8sNd3bLdS!?9?H)ii={3j1QL6lVG25Uk}Q6lx2ZHdPGKAm8jDK( zetL`2Z!-xMy8Xmc<-zBDTgoi6&G$?AP}@dsqnmN2-FK3jiJ4W@EzOKy{N+J$J#&eA4 z8DC?(!1xAZp7Do_ml)q{=R$FufW!IPP6EInv*=K?j9O53^v#?va%y~<8xhKFrjjA}qT**lPp4cnOXe^{2n z4_hZ_->5V}ir>}LMr9EM+pPA3>{2Au1|Z)2s=psdxwe9B9HlCM#~v0J9gluP$zS_T z!;fOzs=C~9H5Gum_S_-q1BCOD~?xF zA;ibvC?4G)I$jjI?gLc>Fxc-%;iB6P!PYu8y$`=IDO_}05A5P`{YYf|sd15>Gvli7 zjQbKyBi?nrnXq-dVd%y2Y7k7HTPfP~I@I?Hy8%Mw8an;0psJeUkxVjbzpI$kgz_j< z+VAW`eo@>tw0F8_zwd$|U7v3s{JOOhP@nIs(2Lg*#X9h(V$Nef%BSL3FvTUr`xsaQ jfvVzBKZ;efUE%^ZBMwd%ibI8B7yBJVXZq(`7wz{CeRkma literal 0 HcmV?d00001 diff --git a/src/Binaries/printing.o b/src/Binaries/printing.o index 54e18056a10f54a35705d242e0e70d7b765a7bd7..62381e541ef626b0611be767d69f23fb3597b3a3 100644 GIT binary patch delta 1555 zcmY*ZeQZ-z6hHU9cVA!o`nmVo%xqa&3d0C7j2K}9mnu~GaLA@8tCKRjvQ=k0=r$xO zGftDiLeg=3#RTm+zcjR*EXu?9&U<>d=;bKM!BgMw7-!a&9!N0l=t_0_^){W>#SoG^ zepNFAV7gjQj`|jH!@H9xcZzhTe?=nnlt}KT;Fd|M1J7YxqAkkmnrl?3V-$S)QHqs& zwNpe34^U{KUaf?z{2N7A1`1W8p)%GFTAE0kM(tV^fH|jV8!6sGq0JUl83R6rCGEDr z?W9uftmE~l(>SfgGrGpF(OrgUsJ%oX(L>=p)jUtg%45WMLija;QZq2b|Fepu*h>8p z@smXFAY^6j7||td#5WSz?s(U+nK#6$NY_0_VTR28PGU1nY=2I)ovubK@q5DBa;k`Y zN4kryC+K43LwJ!l4Ba3eNK;lUkz{2LZ3}HiAX3?kF8&$Wfx3#?&QA!nw4yp(&qAQ_ zesYvCuWJtk5)~d)lhiWk7Oj-ALG@#*2w4$F^?|PNEtC#ZRs$oXBI*tJlU}=mb5Q+F zF}BKVG}l{7HGsYlOtaZk{WKCKjsGQ$0GKgty@l1TAAL7Z5B(Axno^9N%0eFQ;GqwB z%?@6-gL{l_Zf@oNZmw?S-gfR!an`P=IN;e3O{eb8^zF*!`!kSEtsLy`Oy}~s{z1q& zW^W$9_S7sZN&&rve0OvpU(9vqvt3cT3m#t6mP~GfCo_fK!oV)5^uii*xhI`kkPW(R|ERDJbHk`OERLm(|wNu;P&2Jc)3x-*`p2&&QRPGgC)>YngkJDx55y_rGu6 zGU(KSz#7*0IBh920XiiX1$qHqka}3+h{S`0N(kTxo(sM^bcLETH^6m?e+Z=0BSsRw zI9vjkN^Fw2P9W8FO8vCNK8gJ@KP>eTiQ^LAtmKE_ZD~wOe6Ny#GZKH0_`A&iDe-UV zduRwTNL*r*MDfy!!5@{Fl73F&UI$kL9F_&IOMF8Xd?58%iB~1gN%X1sTGgOpF!Weg z**M;?;=C&e@FK?Sxbm%v9bf~7!g0RN0Ejxp4~B!vmlkdd*Yh4SU&R^Q!ZMi`EPRJd@#IhA_u)93#DBtz zd5pfQ7P5$it0O^v7pW+=M&ewfZ)^hh5PO7Pq|G=%>_h@xig#0Zg!L1*)7(TZl`Xrjjge$iP5rXnovtj4F*i8rfnM1tznx# zw~eTaP(>_4)~{F}7L272N)c=q(FdgnQV|r281ca>7K`>lvC!&+ZSmZhn+x|l=X~F} ze=~RH(|eC?Sz0eYOP}2^Zt=Cu`n%n~C6OXw6Iw!tybc*1&<3ptTLNyj3%!9L5{^|s z(mDYii_e0p(4>TO9-{S-E>0mdnIe4De2ky7?>eY#_hqe?5E9Nih|ySQ6HLQbp`XNd zZURNU2PwN(=QEnh8ri2&7|!=2%9<@EXf&o5leH-;0moQVG4vg@KHzp0RF$n(P}p7$2LUY;^Pk_9w_D*F|cty$#-EXQcMTj#5vwqj+qQiV;m& zyD=iwr00>figgyMHT_qpW=Ki(7^d)b)x9bt|L1hIE3#T1%8OpF$J?2fYw*@KlILyr ztQI_3?sV^5>n6#|+dI?P8q6_m&L<-`SKUjA)q8}sXueU3%}Oa1-)?^Vf%%!aQh8yz zOcRHv4?jOQPvc|VtGV5~Ca8aCc*nr-(8v>gs61GnJThG>PgeN2cSjt~%GAE`Qn|EH z;f8k~U-L#%rPcZNM-%d3{CAwCu`MA)RMF!?J6 zZyWTns9v~JBR0}y@P3o;GdOB+*3>HoUkLLXiB6crDT5abesA!KIol`SX{BRayLBmYqwUq<3+Gts-8$OR(DUAYeVTAasn1yzsZgT8)Xg7) e)$y+?@(S2bxP<5URxVhR!u2}?>uST33fuprTgxZ_ diff --git a/src/kernel/idt.cpp b/src/kernel/idt.cpp index a418e29..0852d90 100644 --- a/src/kernel/idt.cpp +++ b/src/kernel/idt.cpp @@ -1,3 +1,4 @@ +#include "keyboard.h" #include "memory.h" #include "portio.h" #include "printing.h" @@ -85,11 +86,6 @@ extern "C" void _less_than_40() { } // not working try timer one instead -void keyboard_handle() { - unsigned char scancode = inb(0x60); - iprintln((short)scancode, 16); - sprintln("key pressed!"); -} extern "C" void _keyboard_handler() { keyboard_handle(); diff --git a/src/kernel/keyboard.cpp b/src/kernel/keyboard.cpp new file mode 100644 index 0000000..5f266c4 --- /dev/null +++ b/src/kernel/keyboard.cpp @@ -0,0 +1,118 @@ +#include "portio.h" +#include "printing.h" + +char get_ascii(unsigned char scancode, int shift) { + switch (scancode) { + case 0x02: + return '1'; + case 0x03: + return '2'; + case 0x04: + return '3'; + case 0x05: + return '4'; + case 0x06: + return '5'; + case 0x07: + return '6'; + case 0x08: + return '7'; + case 0x09: + return '8'; + case 0x0A: + return '9'; + case 0x0B: + return '0'; + case 0x10: + return shift ? 'Q' : 'q'; + case 0x11: + return shift ? 'W' : 'w'; + case 0x12: + return shift ? 'E' : 'e'; + case 0x13: + return shift ? 'R' : 'r'; + case 0x14: + return shift ? 'T' : 't'; + case 0x15: + return shift ? 'Y' : 'y'; + case 0x16: + return shift ? 'U' : 'u'; + case 0x17: + return shift ? 'I' : 'i'; + case 0x18: + return shift ? 'O' : 'o'; + case 0x19: + return shift ? 'P' : 'p'; + case 0x1e: + return shift ? 'A' : 'a'; + case 0x1f: + return shift ? 'S' : 's'; + case 0x20: + return shift ? 'D' : 'd'; + case 0x21: + return shift ? 'F' : 'f'; + case 0x22: + return shift ? 'G' : 'g'; + case 0x23: + return shift ? 'H' : 'h'; + case 0x24: + return shift ? 'J' : 'j'; + case 0x25: + return shift ? 'K' : 'k'; + case 0x26: + return shift ? 'L' : 'l'; + case 0x2C: + return shift ? 'Z' : 'z'; + case 0x2D: + return shift ? 'X' : 'x'; + case 0x2E: + return shift ? 'C' : 'c'; + case 0x2F: + return shift ? 'V' : 'v'; + case 0x30: + return shift ? 'B' : 'b'; + case 0x31: + return shift ? 'N' : 'n'; + case 0x32: + return shift ? 'M' : 'm'; + case 0x39: + return ' '; + default: + return 0; + } +} + +enum keys { + LSHIFT = 0x2a, + RSHIFT = 0x36, + LSHIFTR = 0xaa, + RSHIFTR = 0xb6, +}; + +void keyboard_handle() { + // preserve between function calls + static int shift = 0; + + unsigned char scancode = inb(0x60); + + // iprintln((short)scancode, 16); + // if top bit set key released + if (scancode & 0b10000000) { + if (scancode == LSHIFTR || scancode == RSHIFTR) { + shift = 0; + } + return; + } + + char cout = get_ascii(scancode, shift); + if (cout) { + cprint(cout); + return; + } + + switch (scancode) { + case LSHIFT: + case RSHIFT: + shift = 1; + } +} diff --git a/src/kernel/keyboard.h b/src/kernel/keyboard.h new file mode 100644 index 0000000..551e8ca --- /dev/null +++ b/src/kernel/keyboard.h @@ -0,0 +1,2 @@ + +void keyboard_handle(); diff --git a/src/kernel/printing.cpp b/src/kernel/printing.cpp index 673e80b..4e73560 100644 --- a/src/kernel/printing.cpp +++ b/src/kernel/printing.cpp @@ -105,3 +105,14 @@ void iprintln(long integer, int base) { newline(); printscreen(); } + +// we can probably abstract this out in the other functions +// be careful calling print screen for every new character though +void cprint(char c) { + SCREEN[CURSOR.y][CURSOR.x] = c; + CURSOR.x++; + if (CURSOR.x > 79) { + newline(); + } + printscreen(); +} diff --git a/src/kernel/printing.h b/src/kernel/printing.h index fa2fdf2..2fb58f7 100644 --- a/src/kernel/printing.h +++ b/src/kernel/printing.h @@ -14,3 +14,5 @@ void sprintln(const char* string); void vga_init(); void iprintln(long integer, int base); + +void cprint(char c); diff --git a/src/run.sh b/src/run.sh index 963c10d..1b38629 100644 --- a/src/run.sh +++ b/src/run.sh @@ -14,9 +14,10 @@ i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}printing.cpp" -o "${binaries}p i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}idt.cpp" -o "${binaries}idt.o" i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}memory.cpp" -o "${binaries}memory.o" i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}portio.cpp" -o "${binaries}portio.o" +i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}keyboard.cpp" -o "${binaries}keyboard.o" nasm "${bootloader}zeroes.asm" -f bin -o "${binaries}zeroes.bin" -i386-elf-ld -o "${binaries}full_kernel.bin" -Ttext 0x1000 "${binaries}kernel_entry.o" "${binaries}kernel.o" "${binaries}printing.o" "${binaries}idt.o" "${binaries}idt_entry.o" "${binaries}memory.o" "${binaries}portio.o" --oformat binary +i386-elf-ld -o "${binaries}full_kernel.bin" -Ttext 0x1000 "${binaries}kernel_entry.o" "${binaries}kernel.o" "${binaries}printing.o" "${binaries}idt.o" "${binaries}idt_entry.o" "${binaries}memory.o" "${binaries}portio.o" "${binaries}keyboard.o" --oformat binary cat "${binaries}boot.bin" "${binaries}full_kernel.bin" "${binaries}zeroes.bin" > "${binaries}OS.bin" From 6588d492425b8f6303e397cb5babf00e25876dad Mon Sep 17 00:00:00 2001 From: zeb-smells Date: Tue, 31 Dec 2024 19:26:56 +0000 Subject: [PATCH 23/32] added cursor movement --- src/Binaries/OS.bin | Bin 15096 -> 15392 bytes src/Binaries/full_kernel.bin | Bin 4344 -> 4640 bytes src/Binaries/kernel.o | Bin 3156 -> 2888 bytes src/Binaries/keyboard.o | Bin 5244 -> 5676 bytes src/Binaries/printing.o | Bin 6200 -> 6988 bytes src/kernel/kernel.cpp | 9 -------- src/kernel/keyboard.cpp | 23 +++++++++++--------- src/kernel/printing.cpp | 40 +++++++++++++++++++++++++---------- 8 files changed, 42 insertions(+), 30 deletions(-) diff --git a/src/Binaries/OS.bin b/src/Binaries/OS.bin index 1a0dfde797c733db44c40cc7685d5b0cb971ccc9..afa21b4555cc82489f7faa9916b4175a923542c7 100644 GIT binary patch literal 15392 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 literal 15096 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 literal 4344 zcma)AeQ;D)6~DXLCCeJv)d@pdg1l6U2-<{-HB4hAkyk5{vIW-Cnv?{Ru&jYlvReWs zk(q^dcVE#sopD+wV@c7O+HvYSIx#54kN^SuhZ$=f#^N;7LA|$cHH?j9Th=^(=Y8zk z#LeK#oOkc}ozHvjz2_}(Cu2;V2`2s;OM7_O#TXx?*E?>;Zu6HNjK$I=p_R)3l|wal z(GR__KXl*SA7lJk3n>XbT@H2fB8IMi)7LK-*1C6 z7vA$M99M#wwuH0q>ZraX|CpS`0-3sLOwQ<&`;}nUb_Q*@lGZVnWWMvmS~ROgGhr4k z4)C3tro}FnYH}vlliAvPMU%6!o@`m~VBh~Z-)uRrR^;r-fTN&)zfzw~T%lFqbSf;Gk%_m8-kqW+DZB%4W zlGS*lUOs{XYO+V&tSq9Gl;xBniT!pN9M{Ym43Kc+8G6G;=gtPOikGH8OpKoxj=Fg# zyy?!54@Xb&R&e|-3am6{_08TMOZ#Iz9u}=smgw;oku!TM%yM65ReUuWU;mG$iQgcE zRh}=w`%BY3C5iFaa8+EMJk~S0p?5Lf8^7a8%9F9-Vzme(c1{W2bo?&vwDe_g{%|4qGrY18yoQ$* zg4c3KA^5ZWeOwHjqM=zKKgZuH1mDNc6@n}Ik4=~gOFQBZaQU`%I@|h;Kc8bc-GDW~I3d;#zkdrrlU9v8nN?664Lm@Li^)++jKY@7HV zVTVNA#&(Er6BZE>8+$_RCG3c3vaz7pPFPfIv9Yg-FB7&;RNL5Av6iq7vC_r@Vkuz< zh2O?%MG;}mf_}M}Yuhd+!K69`x3Nv)9l~0~A8qVmF-BOM7`CymieC`6SNzn*9uY4S z77{Po*k+*+78b`X%$54OdNlPd^%*@2S89veo@!S^CikTJRO+buq{;161F0@`i^+XO ztxN4uA2PXbsOwYDs8uFcr>;uvR_`&nN7b^_0kzcR>Q!%Qzq%kLsm>HLPf!^;eYlCg zU|h|(Je`!Mj}IRyJJvJ(T4Vv;bCgP4|9*8b7d|?Zi>c9bK%)2Z1NO*G0uH1AM>}?A70X?FS`S9{bsVT*?9|-` z^_DSq0`xrS1<)zb0O(cF&p?BqH$axYHC_aE4U`74yBI44tp?SA0-zR97s%4L#^-^Z z2K^Fr1#}&B6XZfZWuR4NUY5Q!t_NNR3V@yhwS$g=;vh?B?)U@9O6lC&B?ogCm?T{C2z>d`+;ADd`-T*O&2o>*g4Q!kdvR>nrdT3&cl~R zDMtzL1ZeG)re!habT&a}%FrnX>_Ux-{;g?`^+5C0l z=gT8T{$$$#>V_Og!p<#d%ew(bAzz*^H_EHW?gxGd^4Ig_&ewAB&k=sBaQ(_5x(@O} zPUj<6n;mxiEMO<(^TjVm-897iKE|AV(Mbn+xKrJJJzcmi|Bu~@{CvM@=UW5(Ed1g> o8SH!>H{^Hn+Yh@s{93Tr@sN`&sZQkg{D+!G-?NDxdZ5jr6iHlSMQH$b$XuLb4n z?_s5Q49y@&^vBDNSgw~?HKA&EdvGySvnDb~?Ns-W9~hR9RH{ih2Sq>JxlR&msF;Pw;HC z>tqeRL_~DJ^N8nh&r_bWp65L;dMR|T@Pr^0u3OBe3_X%z!?YEkZgD~Rf*^1ggaz0IN zAh{*tO(bU|(Putt6Rz7>lzG~YsfT#SB+cEiaqu$a2euL%ig?{t^f%Og692NJ>Z>A} QOZ)BYi`5KX=BfMo1FD8>CIA2c delta 900 zcmZ9KO-L0{6vxk_v$1Ib0XairfJxavb>-a2=T~OpyH+ zy8JTSAk5N^%3@9daD@8-P-DCzT1%fGZE+XggOR8VqiT@)L~)ZuJ9RbKv0Xt&uruKn zV!InqPf~9U_O**>DPjFv6G%HP6a;$$JBE8yiPl(6U^g{3Rf%dhtV4rlRiU9u>Ini} zNu{EK-nz4p*IV}1U%-L18D_yyJ@VSEjYR7#f3r@?W!1d=lY8tJwfSOUEUpJ}>co!h z_&KP2A)jU6X;f<=w>Ve$vC|@o{L#4we^DM2L;PBvt=PD!!%e5R;|!~ks2dbEksgwT z3m!7@Q4{My>-Ez->UNd3>ZpuppJAWjVZ)r^gyE!N$#B~6lHsi3b;BEmbB6adF(y~j zp+`YkTHs=xDk*;osfNHFn%2K@fcy-YXx&TrRLzam&jXQ06fI)xHihK{j4LT_nX zM15>4se7hvXIn*W+7{C$wnu5bwj8Zw%h%IVjXo`4e2l8K)l!UYHQCx~=wB1IhHj&T z3tU2fvenU~wpN;8d!35f+UZ-iH|Zi<{{K6El0IjAmCosjTS&4Uq+xAslxORwL2WP6 zezwEZrR{lYXFEhK+McEjY

)w&(J+oUxB;G`7$KYzL@HTO(Dl?Ic6nR=R_?7Q8`! zql8c43HqI_i>_+hNSE1mQ$gD%y2Q38Pl3j#=u^gS8qv0yK49BN@0QIDo>6ZH`_+-s zCG8-q4g@`_Cmd~4oxu^63r8KQEf`cS;b?=}80=C_;phdmIv7}{R)xbRRU33FKO8ly zc|otL4oA-_H+W4|29>f$yq_=NL*QhvqIzUAl0yz6?;sx|qsULl6{I}BTyMheAs!y3 zkE}(Skxpa)IfwN|L#WZ#s*U-6z2<(`H)FKT?7AYSzvu=a)FEW4}M?OT( zA*0C5c{BSz$Um%wv$Gb~iLK&mZtPaHX1kng?_HCNT*sh@GaP3e`3G$U6;w~XD6NE1!JDW{^J z$>HeBv)#IE)-mgxYHQXqXTd&aQPD{@j(s$%Xv$Y&i|6xFj7B$lLNp~Ds~~=k+x9%r zI;1E+iA^MUhKKKWZAp&C&(!`35edV%gKA>M_rsb%U&QcsxVnb%xHZ<0sI<+jG}CGM zQYtCNUD=!RoguzW`K6bZ=Yd0({656L3WBnc24cGfdgpzy*RXWkLDLf+)~nm9_jYrM059X_^)US|}h|t01OE zL`^UPIV6}!fCMhMXwn0F0VGPefC6eF7larzN(>UdoPY`83ODNeHM5yc@|<_R=X^7B zcINERtn!S5Ps?QOq3ra*X;O&&&OU+TzdL#^O+c;ZktMSqoUp&!}pq|1?elg_dGfOO~v(YTaOvfM~VqsG_h0K0eT z%gDV>AF=DF{>Z&Wo7wH6uE?#UR(9`GF>)*EWp=%^Fmh{YrZot;gX$vLOcS{A9r7c$ zglu-*RK{Bhe_bp6jY7Xi_aoOxzp{IqZbohyU1hh4E=6uRmDp{jA%W+IH(Wu-S@zI3 zQR6Dw&u$BSR&kDAZFcLeW?=LxM;A?>?lV1M)owcVZqpuCZKhd&Xo_L=swwCVrXj4} zF!S|*$?u)c-^$Silhf->Hk@oS6ZLizgw+}o*W1)1`8C$sfQ`Upv7To^9xMP2U@0hq zR?rT*L8ZTvJ#c%#L2wG32S0&3;4!Gid!7U;{guqaH4b8E1AX8Va2T8h-+>=MrFm@f ze&ij>dzN=G@9W8678u(%_Pm~Z(C-S%!J0&D4u)rhP74rnvqE(TY1NVTWm&52kY&jGYG*pFh9DbL z>S8)4@7n4fA{eKO|#Ob7Zh?Wjth+%%%|0>u& A5&!@I diff --git a/src/Binaries/printing.o b/src/Binaries/printing.o index 62381e541ef626b0611be767d69f23fb3597b3a3..8d3f87a980e3df4a7957d4adc5585f98468da218 100644 GIT binary patch literal 6988 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 Lgx>eXbTIH=n!hqU diff --git a/src/kernel/kernel.cpp b/src/kernel/kernel.cpp index d8c958a..a946021 100644 --- a/src/kernel/kernel.cpp +++ b/src/kernel/kernel.cpp @@ -23,15 +23,6 @@ extern "C" int _start() { sprintln(WELCOMEMSG); - iprintln(0xB1A2E, 16); - // iprintln(0, 10); - sprintln("hello!"); - - sprintln("lananas\nbanana"); - - // int whatever = 1 / 0; - sprintln("hi dad"); - for (;;) { } return 0; diff --git a/src/kernel/keyboard.cpp b/src/kernel/keyboard.cpp index 5f266c4..bc16b79 100644 --- a/src/kernel/keyboard.cpp +++ b/src/kernel/keyboard.cpp @@ -4,25 +4,25 @@ char get_ascii(unsigned char scancode, int shift) { switch (scancode) { case 0x02: - return '1'; + return shift ? '!' : '1'; case 0x03: - return '2'; + return shift ? '"' : '2'; case 0x04: - return '3'; + return shift ? '$' : '3'; case 0x05: - return '4'; + return shift ? '$' : '4'; case 0x06: - return '5'; + return shift ? '%' : '5'; case 0x07: - return '6'; + return shift ? '^' : '6'; case 0x08: - return '7'; + return shift ? '&' : '7'; case 0x09: - return '8'; + return shift ? '*' : '8'; case 0x0A: - return '9'; + return shift ? '(' : '9'; case 0x0B: - return '0'; + return shift ? ')' : '0'; case 0x10: return shift ? 'Q' : 'q'; case 0x11: @@ -75,6 +75,8 @@ char get_ascii(unsigned char scancode, int shift) { return shift ? 'N' : 'n'; case 0x32: return shift ? 'M' : 'm'; + case 0x1c: + return '\n'; case 0x39: return ' '; default: @@ -96,6 +98,7 @@ void keyboard_handle() { unsigned char scancode = inb(0x60); // iprintln((short)scancode, 16); + // if top bit set key released if (scancode & 0b10000000) { if (scancode == LSHIFTR || scancode == RSHIFTR) { diff --git a/src/kernel/printing.cpp b/src/kernel/printing.cpp index 4e73560..91b81df 100644 --- a/src/kernel/printing.cpp +++ b/src/kernel/printing.cpp @@ -1,5 +1,8 @@ // TODO support coloured text // TODO move the vga mode cursor + +#include "portio.h" + typedef struct Cursor { int x; int y; @@ -53,12 +56,32 @@ void vga_init() { printscreen(); } +void cursor_set(int x, int y) { // Does some I/O black magic + short pos = y * 80 + x; + if (pos >= 0 && pos < 2000) { + outb(0x3d4, 0x0f); + outb(0x3d5, (char)(pos & 0xff)); + outb(0x3d4, 0x0e); + outb(0x3d5, (char)((pos >> 8) & 0xff)); + } +} + void newline() { CURSOR.y++; CURSOR.x = 0; if (CURSOR.y > 24) { scroll_without_render(); } + cursor_set(CURSOR.x, CURSOR.y); + printscreen(); // slow: calling here renders twice in some instances +} + +void cursorlr(int d) { + CURSOR.x += d; + if (CURSOR.x > 79) { + newline(); + } + cursor_set(CURSOR.x, CURSOR.y); } void sprintln(const char* string) { @@ -69,11 +92,8 @@ void sprintln(const char* string) { continue; } SCREEN[CURSOR.y][CURSOR.x] = *string; - CURSOR.x++; string++; - if (CURSOR.x % 80 == 0) { - newline(); - } + cursorlr(1); } newline(); printscreen(); @@ -97,10 +117,7 @@ void iprintln(long integer, int base) { } for (int i = 1; i <= counter; i++) { SCREEN[CURSOR.y][CURSOR.x] = outstring[counter - i]; - CURSOR.x++; - if (CURSOR.x % 80 == 0) { - newline(); - } + cursorlr(1); } newline(); printscreen(); @@ -109,10 +126,11 @@ void iprintln(long integer, int base) { // we can probably abstract this out in the other functions // be careful calling print screen for every new character though void cprint(char c) { - SCREEN[CURSOR.y][CURSOR.x] = c; - CURSOR.x++; - if (CURSOR.x > 79) { + if (c == '\n') { newline(); + return; } + SCREEN[CURSOR.y][CURSOR.x] = c; + cursorlr(1); printscreen(); } From 688c6830245397bc6ff67349819f5bcd9f32710d Mon Sep 17 00:00:00 2001 From: zeb-smells Date: Tue, 31 Dec 2024 19:39:28 +0000 Subject: [PATCH 24/32] added gitginore --- .gitignore | 1 + src/Binaries/OS.bin | Bin 15392 -> 0 bytes src/Binaries/boot.bin | Bin 512 -> 0 bytes src/Binaries/full_kernel.bin | Bin 4640 -> 0 bytes src/Binaries/idt.o | Bin 6364 -> 0 bytes src/Binaries/idt_entry.o | Bin 864 -> 0 bytes src/Binaries/kernel.o | Bin 2888 -> 0 bytes src/Binaries/kernel_entry.o | Bin 496 -> 0 bytes src/Binaries/keyboard.o | Bin 5676 -> 0 bytes src/Binaries/memory.o | Bin 2140 -> 0 bytes src/Binaries/portio.o | Bin 2156 -> 0 bytes src/Binaries/printing.o | Bin 6988 -> 0 bytes src/Binaries/zeroes.bin | Bin 10240 -> 0 bytes src/kernel/kernel.cpp | 5 +++++ src/kernel/printing.cpp | 2 -- src/kernel/printing.h | 18 +++++++++--------- 16 files changed, 15 insertions(+), 11 deletions(-) create mode 100644 .gitignore delete mode 100644 src/Binaries/OS.bin delete mode 100644 src/Binaries/boot.bin delete mode 100755 src/Binaries/full_kernel.bin delete mode 100644 src/Binaries/idt.o delete mode 100644 src/Binaries/idt_entry.o delete mode 100644 src/Binaries/kernel.o delete mode 100644 src/Binaries/kernel_entry.o delete mode 100644 src/Binaries/keyboard.o delete mode 100644 src/Binaries/memory.o delete mode 100644 src/Binaries/portio.o delete mode 100644 src/Binaries/printing.o delete mode 100644 src/Binaries/zeroes.bin diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..188ee95 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +src/Binaries diff --git a/src/Binaries/OS.bin b/src/Binaries/OS.bin deleted file mode 100644 index afa21b4555cc82489f7faa9916b4175a923542c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15392 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 diff --git a/src/Binaries/boot.bin b/src/Binaries/boot.bin deleted file mode 100644 index e9aaf3630cdb779b0b24de20cd72e9ed7d55478d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmeAWi?1;}(08Ek#$JYo&NsUm1h$E6Ve0s>m0=shMy4*H>{;O=HXEi=rq=>n_;yFu zbg|nol(3!^aDM%D3&RHHvjV^P8O17U_!SPMHJ@PQS32;ju7-o*^}p1jqWmHTIQah` z$eeYa0ZdOi&mhi_P{Y8GwnKoS??&GRp#2Z}UhHLH;AH50^D<*HSQT9FD1%lZ5V{Hg DR0ut< diff --git a/src/Binaries/full_kernel.bin b/src/Binaries/full_kernel.bin deleted file mode 100755 index 465d80d6930b3176b20dd0dc9b6f59f76fdee400..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4640 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 diff --git a/src/Binaries/idt.o b/src/Binaries/idt.o deleted file mode 100644 index 613b8d6c68c47784b2eb731143787297cae09d4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6364 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 diff --git a/src/Binaries/idt_entry.o b/src/Binaries/idt_entry.o deleted file mode 100644 index 477eaafc0f18bf96cb4afda86db377ebb21a8157..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 864 zcmb7C!AiqG5S_HORXn5~6|8!Zg3uQ2Me*Rpp2QCjVNK0yYtuwGQQDI?&jo)#Z~7O4 zAE2M%Rq!N2e3NYK+FJ)UGw;2bM>d(;{ezZeS(JrEc^V_4JuNhoT%{uAvev0Gd-5sj zsRqE2;ZW9f2{~`@BlK+;m_0ZaaLhM(f$$ElfWz~g*>h22q$EZdy3YV|=C_7=&fps` zsRFYX_pskAj%_XDNv|iBqWxe$eSiGKar|XJ+mEFc=S{N-IW5Pwh*~5E5!J#@7^%o< zqZ;;CiFYtmZ4KmDqni_t{c^yuulSo@B+t8s!I}Q&b1ebj^n$YR3Jko&ZRF^ z_mo6W4%>mFTtik@e=G@4hM|ZsE1C_ALc8`|sS?x=luWg)?NkeHAOZY~WFN2$$^Oj{ TtwYUWX?Hkdf%tpm=EozyJ3)G( diff --git a/src/Binaries/kernel.o b/src/Binaries/kernel.o deleted file mode 100644 index 5b9bc3ca7b020f101b6fbe5014b9a77a30ad9ebc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2888 zcma)7&u<$=6rSDnx`~}QKN_GRNZC|PDT?B4(gGm_T3WRwBG8H^NR2Ga+S%Bq{*kV? zhJ;8+1Q3V|haM23LR`3TLPFxo0d8El@ed$XA_tJT6%oE~c4octq41=6-}h$TyqS6P zcJ|#%E0+z!5LygjiLQm-zG&pEgj3=nF(%eN{%vo+@7~`B2M1ksU(&t(fhs*C*ZF%cfyvl zPyJ2s7di5^4)0#Vnh1P*Y^1RFK&Sg!Mg$IgtJYu!NSP z5_W1CI&GwX035jhWxNMv=8lnm4rSR#NT*4yTckgc8ec=pN-&0oKLw|7E#r&+lwE6v zV0m$F+{!IxpUplqm2T#i#u0eLn9d!|T9Xr#BgSZY_z{H48?jrKUdB=E&KAo6dq`xn zBX`cQSchHb6e+2iZBCCrrZmuVtUu^oCr zD2nTIbG6`BvDSoLuXoU~(5ZN^Yhg#!+JPPsS6*3jF3!x%J?+fR=jZdMo!Q2jd8qJq z(|@jZX5lGtFDO?PuQ;=tn}P2mY;yyp60OvY*AaRdF4^7+a6$FvwU^2wv7KnrMyNN@ z5!z9dt6m^#-63()51M}6jUZp%+7fORMeCws-D^SXO}`wr-BquA^}5>*$`2llf~b%( zRwAt2Do&KIa(!rV<>JLf=M)n3gvt#rVGNC8?7S+B-9BStAeH(ESI8=64N&C0zmV(u zz`QVMM_q?BZ(U1D{CS``vF8PZeK>+8(n)uW%TFWjvqU!LB$gQLv2$WT^>Ck~s6SMF zEW=oUF(0t+F0bpvkg%aK-l26246=V`hXri-{wT(8j^= znF|v~o&*|JbQTleGP7hLmCS~L$$Yd7bUv)`Q6fIB<3yzRaU%Tk3NIRI4iCB-f$p@8ri`U1#PSOURR>(V`y{PbGAs#e#tjZ`+cSS^u2utKh~BOm{RUSC(p5hbFeOW4(5k`v>8{&0u}c# m@CT4<>-^E5T-Ow+_|+DoM52UoD16hBeydpb8#xjw?e{O1ypeeT diff --git a/src/Binaries/kernel_entry.o b/src/Binaries/kernel_entry.o deleted file mode 100644 index f453b914c42f145e7bf30dd52f839c5b31b33cf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 496 zcmb7By$ZrG5WfCUb<@$oL2wX+>fi%((aCoxDFy`lBWVUZ`AR;Lqu}H&#=ADbbM)Z& z?)&cUOGqx8-PZFwaN$7!Uj~ra#=6BhMBuy8zmPmBBfGUi(qj%oTay+rJ;AvJ~XFJsK(jg^g9%d>{K zKGa%ikzv&o9a^qr-p#m;A9UxF7{b%=CjG>O3GEwYRi*Pv?4?>Br7C5f%2KN)7Igt> Ot%cHTqr1D$9`pmkzbc3T diff --git a/src/Binaries/keyboard.o b/src/Binaries/keyboard.o deleted file mode 100644 index 2b2b535557b58704867bf8bcdb450c21eaa82004..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5676 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 M3Vf|I$zXJU0~MR_(~&l&3aSX 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 P7%*VKfB^#r47?2tC;$Kf diff --git a/src/kernel/kernel.cpp b/src/kernel/kernel.cpp index a946021..e992d38 100644 --- a/src/kernel/kernel.cpp +++ b/src/kernel/kernel.cpp @@ -23,6 +23,11 @@ extern "C" int _start() { sprintln(WELCOMEMSG); + iprintln(0xabc, 16); + sprintln( + "thisisareallylongstringthatimadetottesthowhethermyprintingworksproperlyi" + "dontknowwhyIdidntputanyspcaesinitlololol"); + for (;;) { } return 0; diff --git a/src/kernel/printing.cpp b/src/kernel/printing.cpp index 91b81df..3097ed3 100644 --- a/src/kernel/printing.cpp +++ b/src/kernel/printing.cpp @@ -123,8 +123,6 @@ void iprintln(long integer, int base) { printscreen(); } -// we can probably abstract this out in the other functions -// be careful calling print screen for every new character though void cprint(char c) { if (c == '\n') { newline(); diff --git a/src/kernel/printing.h b/src/kernel/printing.h index 2fb58f7..0a46b87 100644 --- a/src/kernel/printing.h +++ b/src/kernel/printing.h @@ -1,12 +1,12 @@ -#define WELCOMEMSG \ - "\n" \ - "__________ __________ ________ _________\n" \ - "\\____ / \\______ \\\\_____ \\ / _____/\n" \ - " / / | | _/ / | \\ \\_____ \\ \n" \ - " / /_ | | \\/ | \\/ \\\n" \ - "/_______ \\_____|______ /\\_______ /_______ /\n" \ - " \\/_____/ \\/ \\/ \\/ \n" \ - " welcome to zebs operating system! " \ +#define WELCOMEMSG \ + "\n" \ + "__________ __________ ________ _________\n" \ + "\\____ / \\______ \\\\_____ \\ / _____/\n" \ + " / / | | _/ / | \\ \\_____ \\ \n" \ + " / /_ | | \\/ | \\/ \\\n" \ + "/_______ \\_____|______ /\\_______ /_______ /\n" \ + " \\/_____/ \\/ \\/ \\/ \n\n" \ + "[ Welcome To Zebs Operating System! ]" \ "\n" void sprintln(const char* string); From 2baa52365b018b3cca4bb035b28dc69ef2c959d0 Mon Sep 17 00:00:00 2001 From: zeb-smells Date: Wed, 1 Jan 2025 11:07:34 +0000 Subject: [PATCH 25/32] added some bits --- src/kernel/idt.cpp | 3 +++ src/kernel/kernel.cpp | 8 ++++---- src/kernel/keyboard.cpp | 2 ++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/kernel/idt.cpp b/src/kernel/idt.cpp index 0852d90..43aa88d 100644 --- a/src/kernel/idt.cpp +++ b/src/kernel/idt.cpp @@ -61,6 +61,9 @@ void isr_install() { idt_set_gate(0, (unsigned long)_isr_generic, 0x08, 0x8E); } +// moves the irqs from the default position to start at isr 32 +// since by default they overlap with the protected mode isrs +// reserved for exceptions. void irq_remap() { outb(0x20, 0x11); // Initialize both PICs outb(0xA0, 0x11); diff --git a/src/kernel/kernel.cpp b/src/kernel/kernel.cpp index e992d38..0ce2536 100644 --- a/src/kernel/kernel.cpp +++ b/src/kernel/kernel.cpp @@ -23,10 +23,10 @@ extern "C" int _start() { sprintln(WELCOMEMSG); - iprintln(0xabc, 16); - sprintln( - "thisisareallylongstringthatimadetottesthowhethermyprintingworksproperlyi" - "dontknowwhyIdidntputanyspcaesinitlololol"); + // iprintln(0xabc, 16); + // sprintln( + // "thisisareallylongstringthatimadetottesthowhethermyprintingworksproperlyi" + // "dontknowwhyIdidntputanyspcaesinitlololol"); for (;;) { } diff --git a/src/kernel/keyboard.cpp b/src/kernel/keyboard.cpp index bc16b79..c36e220 100644 --- a/src/kernel/keyboard.cpp +++ b/src/kernel/keyboard.cpp @@ -1,6 +1,8 @@ #include "portio.h" #include "printing.h" +// TODO: add arrowkeys and backspace + char get_ascii(unsigned char scancode, int shift) { switch (scancode) { case 0x02: From 9b5685a141591ec5ed4f64cf234709dab3f4dba3 Mon Sep 17 00:00:00 2001 From: zeb33n Date: Thu, 2 Jan 2025 14:52:33 +0000 Subject: [PATCH 26/32] added stuff --- src/kernel/keyboard.cpp | 24 +++++++++++++++++------- src/kernel/keyboard.h | 14 ++++++++++++++ src/kernel/printing.cpp | 37 +++++++++++++++++++++++++++++++++++++ src/kernel/printing.h | 8 ++++++++ src/kernel/shell.cpp | 9 +++++++++ 5 files changed, 85 insertions(+), 7 deletions(-) create mode 100644 src/kernel/shell.cpp diff --git a/src/kernel/keyboard.cpp b/src/kernel/keyboard.cpp index c36e220..e456eab 100644 --- a/src/kernel/keyboard.cpp +++ b/src/kernel/keyboard.cpp @@ -1,3 +1,4 @@ +#include "keyboard.h" #include "portio.h" #include "printing.h" @@ -86,13 +87,6 @@ char get_ascii(unsigned char scancode, int shift) { } } -enum keys { - LSHIFT = 0x2a, - RSHIFT = 0x36, - LSHIFTR = 0xaa, - RSHIFTR = 0xb6, -}; - void keyboard_handle() { // preserve between function calls static int shift = 0; @@ -119,5 +113,21 @@ void keyboard_handle() { case LSHIFT: case RSHIFT: shift = 1; + return; + case BSPACE: + cdelete(); + return; + case AUP: + cursordu(-1); + return; + case ADOWN: + cursordu(1); + return; + case ALEFT: + cursorlr(-1); + return; + case ARIGHT: + cursorlr(1); + return; } } diff --git a/src/kernel/keyboard.h b/src/kernel/keyboard.h index 551e8ca..ba60164 100644 --- a/src/kernel/keyboard.h +++ b/src/kernel/keyboard.h @@ -1,2 +1,16 @@ void keyboard_handle(); + +void keyboard_load_mode(); + +enum special_keys { + LSHIFT = 0x2a, + RSHIFT = 0x36, + LSHIFTR = 0xaa, + RSHIFTR = 0xb6, + BSPACE = 0xe, + AUP = 0x48, + ADOWN = 0x50, + ALEFT = 0x4b, + ARIGHT = 0x4d, +}; diff --git a/src/kernel/printing.cpp b/src/kernel/printing.cpp index 3097ed3..69c4386 100644 --- a/src/kernel/printing.cpp +++ b/src/kernel/printing.cpp @@ -84,6 +84,17 @@ void cursorlr(int d) { cursor_set(CURSOR.x, CURSOR.y); } +void cursordu(int d) { + if (CURSOR.y == 24 && d > 0) { + return; + } + if (CURSOR.y == 0 && d < 0) { + return; + } + CURSOR.y += d; + cursor_set(CURSOR.x, CURSOR.y); +} + void sprintln(const char* string) { while (*string != '\0') { if (*string == '\n') { @@ -99,6 +110,20 @@ void sprintln(const char* string) { printscreen(); }; +void sprint(const char* string) { + while (*string != '\0') { + if (*string == '\n') { + newline(); + string++; + continue; + } + SCREEN[CURSOR.y][CURSOR.x] = *string; + string++; + cursorlr(1); + } + printscreen(); +}; + void iprintln(long integer, int base) { if (integer == 0) { SCREEN[CURSOR.y][CURSOR.x] = '0'; @@ -123,6 +148,18 @@ void iprintln(long integer, int base) { printscreen(); } +// have a buffer and buffer delete in a tty echo server fingee +// maybe need malloc for that +// can maybe depreciate! +void cdelete() { + cursorlr(-1); + for (int i = CURSOR.x; i < 79; i++) { + SCREEN[CURSOR.y][i] = SCREEN[CURSOR.y][i + 1]; + } + SCREEN[CURSOR.y][79] = 0; + printscreen(); +} + void cprint(char c) { if (c == '\n') { newline(); diff --git a/src/kernel/printing.h b/src/kernel/printing.h index 0a46b87..b02b21e 100644 --- a/src/kernel/printing.h +++ b/src/kernel/printing.h @@ -11,8 +11,16 @@ void sprintln(const char* string); +void sprint(const char* string); + void vga_init(); void iprintln(long integer, int base); void cprint(char c); + +void cdelete(); + +void cursorlr(int d); + +void cursordu(int d); diff --git a/src/kernel/shell.cpp b/src/kernel/shell.cpp new file mode 100644 index 0000000..7a9a63d --- /dev/null +++ b/src/kernel/shell.cpp @@ -0,0 +1,9 @@ +#include "memory.h" +#include "printing.h" + +char BUFFER[256]; + +void shell_init() { + memset(BUFFER, '\0', sizeof(char) * 256); + cprint('>'); +} From d078ce440671afcc45331c44095d6cf0addba13e Mon Sep 17 00:00:00 2001 From: zeb33n Date: Thu, 2 Jan 2025 16:44:16 +0000 Subject: [PATCH 27/32] refactored keyboard driver to use a lookup tables --- src/kernel/kernel.cpp | 2 + src/kernel/keyboard.cpp | 139 ++++++++++++++-------------------------- src/kernel/keyboard.h | 20 +++--- 3 files changed, 60 insertions(+), 101 deletions(-) diff --git a/src/kernel/kernel.cpp b/src/kernel/kernel.cpp index 0ce2536..4789754 100644 --- a/src/kernel/kernel.cpp +++ b/src/kernel/kernel.cpp @@ -1,4 +1,5 @@ #include "idt.h" +#include "keyboard.h" #include "printing.h" // TODO: @@ -20,6 +21,7 @@ extern "C" int _start() { asm volatile("sti"); vga_init(); + keyboard_default(); sprintln(WELCOMEMSG); diff --git a/src/kernel/keyboard.cpp b/src/kernel/keyboard.cpp index e456eab..6208db8 100644 --- a/src/kernel/keyboard.cpp +++ b/src/kernel/keyboard.cpp @@ -2,89 +2,47 @@ #include "portio.h" #include "printing.h" -// TODO: add arrowkeys and backspace +// TODO figure out modes -> rewrite? +// have an array of all the characters -> index is the scancode +// this is the mapping +// function pointer to handle what to do for each thing -char get_ascii(unsigned char scancode, int shift) { - switch (scancode) { - case 0x02: - return shift ? '!' : '1'; - case 0x03: - return shift ? '"' : '2'; - case 0x04: - return shift ? '$' : '3'; - case 0x05: - return shift ? '$' : '4'; - case 0x06: - return shift ? '%' : '5'; - case 0x07: - return shift ? '^' : '6'; - case 0x08: - return shift ? '&' : '7'; - case 0x09: - return shift ? '*' : '8'; - case 0x0A: - return shift ? '(' : '9'; - case 0x0B: - return shift ? ')' : '0'; - case 0x10: - return shift ? 'Q' : 'q'; - case 0x11: - return shift ? 'W' : 'w'; - case 0x12: - return shift ? 'E' : 'e'; - case 0x13: - return shift ? 'R' : 'r'; - case 0x14: - return shift ? 'T' : 't'; - case 0x15: - return shift ? 'Y' : 'y'; - case 0x16: - return shift ? 'U' : 'u'; - case 0x17: - return shift ? 'I' : 'i'; - case 0x18: - return shift ? 'O' : 'o'; - case 0x19: - return shift ? 'P' : 'p'; - case 0x1e: - return shift ? 'A' : 'a'; - case 0x1f: - return shift ? 'S' : 's'; - case 0x20: - return shift ? 'D' : 'd'; - case 0x21: - return shift ? 'F' : 'f'; - case 0x22: - return shift ? 'G' : 'g'; - case 0x23: - return shift ? 'H' : 'h'; - case 0x24: - return shift ? 'J' : 'j'; - case 0x25: - return shift ? 'K' : 'k'; - case 0x26: - return shift ? 'L' : 'l'; - case 0x2C: - return shift ? 'Z' : 'z'; - case 0x2D: - return shift ? 'X' : 'x'; - case 0x2E: - return shift ? 'C' : 'c'; - case 0x2F: - return shift ? 'V' : 'v'; - case 0x30: - return shift ? 'B' : 'b'; - case 0x31: - return shift ? 'N' : 'n'; - case 0x32: - return shift ? 'M' : 'm'; - case 0x1c: - return '\n'; - case 0x39: - return ' '; - default: - return 0; - } +char MAPPING[128]; +char MAPPING_SHIFT[128]; + +const char MAP_DEFAULT[128] = { + 0, ESC, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', + '-', '=', BSPACE, TAB, 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', + 'o', 'p', '[', ']', '\n', CTRL, 'a', 's', 'd', 'f', 'g', 'h', + 'j', 'k', 'l', ';', '\'', '#', SHIFT, '\\', 'z', 'x', 'c', 'v', + 'b', 'n', 'm', ',', '.', '/', SHIFT, 0, 0, ' ', 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + AUP, 0, '-', ALEFT, 0, ARIGHT, '+', 0, ADOWN, 0, 0, 0, + 0, 0, 0, 0, 0, 0, // 90 here +}; + +const char SHIFT_DEFAULT[128] = + { + 0, ESC, '!', '"', '$', '$', '%', '^', '&', '*', '(', ')', + '_', '+', BSPACE, TAB, 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', + 'O', 'P', '{', '}', '\n', CTRL, 'A', 'S', 'D', 'F', 'G', 'H', + 'J', 'K', 'L', ':', '@', '~', SHIFT, '|', 'Z', 'X', 'C', 'V', + 'B', 'B', 'M', '<', '>', '?', SHIFT, 0, 0, ' ', 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + AUP, 0, '0', ALEFT, 0, ARIGHT, '0', 0, ADOWN, 0, 0, 0, + 0, 0, 0, 0, 0, 0, // 90 here +}; + +// void keyboard_load_mode(Mode mode) {} + +void keyboard_load_mapping(const char* normal_layer, const char* shift_layer) { + *MAPPING = *normal_layer; + *MAPPING_SHIFT = *shift_layer; +} + +// TODO this is borken +void keyboard_default() { + keyboard_load_mapping(MAP_DEFAULT, SHIFT_DEFAULT); } void keyboard_handle() { @@ -97,21 +55,17 @@ void keyboard_handle() { // if top bit set key released if (scancode & 0b10000000) { - if (scancode == LSHIFTR || scancode == RSHIFTR) { + scancode = scancode ^ 0b10000000; + if (MAP_DEFAULT[scancode] == SHIFT) { shift = 0; } return; } - char cout = get_ascii(scancode, shift); - if (cout) { - cprint(cout); - return; - } + char cout = shift ? SHIFT_DEFAULT[scancode] : MAP_DEFAULT[scancode]; - switch (scancode) { - case LSHIFT: - case RSHIFT: + switch (cout) { + case SHIFT: shift = 1; return; case BSPACE: @@ -129,5 +83,8 @@ void keyboard_handle() { case ARIGHT: cursorlr(1); return; + default: + cprint(cout); + return; } } diff --git a/src/kernel/keyboard.h b/src/kernel/keyboard.h index ba60164..9a358d0 100644 --- a/src/kernel/keyboard.h +++ b/src/kernel/keyboard.h @@ -1,16 +1,16 @@ void keyboard_handle(); -void keyboard_load_mode(); +void keyboard_default(); enum special_keys { - LSHIFT = 0x2a, - RSHIFT = 0x36, - LSHIFTR = 0xaa, - RSHIFTR = 0xb6, - BSPACE = 0xe, - AUP = 0x48, - ADOWN = 0x50, - ALEFT = 0x4b, - ARIGHT = 0x4d, + BSPACE = 1, + SHIFT, + AUP, + ADOWN, + ALEFT, + ARIGHT, + ESC, + TAB, + CTRL, }; From ee37280e106a0b34e12979765c7914207e444f24 Mon Sep 17 00:00:00 2001 From: zeb33n Date: Thu, 2 Jan 2025 17:11:23 +0000 Subject: [PATCH 28/32] refactored slightley --- src/kernel/keyboard.cpp | 15 +++++++++------ src/kernel/keyboard.h | 13 +++++++++---- src/kernel/memory.cpp | 12 ++++++++++-- src/kernel/memory.h | 1 + 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/kernel/keyboard.cpp b/src/kernel/keyboard.cpp index 6208db8..968af75 100644 --- a/src/kernel/keyboard.cpp +++ b/src/kernel/keyboard.cpp @@ -10,7 +10,7 @@ char MAPPING[128]; char MAPPING_SHIFT[128]; -const char MAP_DEFAULT[128] = { +char MAP_DEFAULT[128] = { 0, ESC, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', BSPACE, TAB, 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\n', CTRL, 'a', 's', 'd', 'f', 'g', 'h', @@ -21,7 +21,7 @@ const char MAP_DEFAULT[128] = { 0, 0, 0, 0, 0, 0, // 90 here }; -const char SHIFT_DEFAULT[128] = +char SHIFT_DEFAULT[128] = { 0, ESC, '!', '"', '$', '$', '%', '^', '&', '*', '(', ')', '_', '+', BSPACE, TAB, 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', @@ -33,11 +33,14 @@ const char SHIFT_DEFAULT[128] = 0, 0, 0, 0, 0, 0, // 90 here }; +KeyMap KEYMAP; + // void keyboard_load_mode(Mode mode) {} -void keyboard_load_mapping(const char* normal_layer, const char* shift_layer) { - *MAPPING = *normal_layer; - *MAPPING_SHIFT = *shift_layer; +// i dont think this is safe! +void keyboard_load_mapping(char* normal_layer, char* shift_layer) { + KEYMAP.normal = normal_layer; + KEYMAP.shift = shift_layer; } // TODO this is borken @@ -62,7 +65,7 @@ void keyboard_handle() { return; } - char cout = shift ? SHIFT_DEFAULT[scancode] : MAP_DEFAULT[scancode]; + char cout = shift ? KEYMAP.shift[scancode] : KEYMAP.normal[scancode]; switch (cout) { case SHIFT: diff --git a/src/kernel/keyboard.h b/src/kernel/keyboard.h index 9a358d0..dc4831b 100644 --- a/src/kernel/keyboard.h +++ b/src/kernel/keyboard.h @@ -1,8 +1,4 @@ -void keyboard_handle(); - -void keyboard_default(); - enum special_keys { BSPACE = 1, SHIFT, @@ -14,3 +10,12 @@ enum special_keys { TAB, CTRL, }; + +typedef struct KeyMap { + char* normal; + char* shift; +} KeyMap; + +void keyboard_handle(); + +void keyboard_default(); diff --git a/src/kernel/memory.cpp b/src/kernel/memory.cpp index 9742f46..8c15610 100644 --- a/src/kernel/memory.cpp +++ b/src/kernel/memory.cpp @@ -2,8 +2,16 @@ // todo move to memory file void* memset(void* dest, unsigned char val, int count) { unsigned char* destC = (unsigned char*)dest; - int i; - for (i = 0; i < count; i++) + for (int i = 0; i < count; i++) { destC[i] = val; + } return dest; } + +void memcopy(void* dest, void* data, int count) { + unsigned char* destC = (unsigned char*)dest; + unsigned char* dataC = (unsigned char*)data; + for (int i = 0; i < count; i++) { + destC[i] = dataC[i]; + } +} diff --git a/src/kernel/memory.h b/src/kernel/memory.h index 7b79787..53d2447 100644 --- a/src/kernel/memory.h +++ b/src/kernel/memory.h @@ -1,2 +1,3 @@ +void memcopy(void* dest, void* data, int count); void* memset(void* dest, unsigned char val, int count); From 3ae0e3379d0609dc2f1026a2734253c7f7345d61 Mon Sep 17 00:00:00 2001 From: zeb33n Date: Fri, 3 Jan 2025 13:27:28 +0000 Subject: [PATCH 29/32] added stdin buffer --- src/kernel/kernel.cpp | 2 ++ src/kernel/keyboard.cpp | 34 ++++++---------------------- src/kernel/shell.cpp | 4 ++++ src/kernel/shell.h | 2 ++ src/kernel/streams.cpp | 49 +++++++++++++++++++++++++++++++++++++++++ src/kernel/streams.h | 4 ++++ src/run.sh | 4 +++- 7 files changed, 71 insertions(+), 28 deletions(-) create mode 100644 src/kernel/shell.h create mode 100644 src/kernel/streams.cpp create mode 100644 src/kernel/streams.h diff --git a/src/kernel/kernel.cpp b/src/kernel/kernel.cpp index 4789754..ebaeec3 100644 --- a/src/kernel/kernel.cpp +++ b/src/kernel/kernel.cpp @@ -1,6 +1,7 @@ #include "idt.h" #include "keyboard.h" #include "printing.h" +#include "shell.h" // TODO: // 0. TTY @@ -30,6 +31,7 @@ extern "C" int _start() { // "thisisareallylongstringthatimadetottesthowhethermyprintingworksproperlyi" // "dontknowwhyIdidntputanyspcaesinitlololol"); + shell_init(); for (;;) { } return 0; diff --git a/src/kernel/keyboard.cpp b/src/kernel/keyboard.cpp index 968af75..cd5f1d1 100644 --- a/src/kernel/keyboard.cpp +++ b/src/kernel/keyboard.cpp @@ -1,15 +1,13 @@ #include "keyboard.h" #include "portio.h" #include "printing.h" +#include "streams.h" // TODO figure out modes -> rewrite? // have an array of all the characters -> index is the scancode // this is the mapping // function pointer to handle what to do for each thing -char MAPPING[128]; -char MAPPING_SHIFT[128]; - char MAP_DEFAULT[128] = { 0, ESC, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', BSPACE, TAB, 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', @@ -37,13 +35,12 @@ KeyMap KEYMAP; // void keyboard_load_mode(Mode mode) {} -// i dont think this is safe! +// need to think about how to expose to user land safely void keyboard_load_mapping(char* normal_layer, char* shift_layer) { KEYMAP.normal = normal_layer; KEYMAP.shift = shift_layer; } -// TODO this is borken void keyboard_default() { keyboard_load_mapping(MAP_DEFAULT, SHIFT_DEFAULT); } @@ -67,27 +64,10 @@ void keyboard_handle() { char cout = shift ? KEYMAP.shift[scancode] : KEYMAP.normal[scancode]; - switch (cout) { - case SHIFT: - shift = 1; - return; - case BSPACE: - cdelete(); - return; - case AUP: - cursordu(-1); - return; - case ADOWN: - cursordu(1); - return; - case ALEFT: - cursorlr(-1); - return; - case ARIGHT: - cursorlr(1); - return; - default: - cprint(cout); - return; + if (cout == shift) { + shift = 1; + return; } + + stdin_put(cout); } diff --git a/src/kernel/shell.cpp b/src/kernel/shell.cpp index 7a9a63d..cc87da6 100644 --- a/src/kernel/shell.cpp +++ b/src/kernel/shell.cpp @@ -1,9 +1,13 @@ #include "memory.h" #include "printing.h" +#include "streams.h" char BUFFER[256]; void shell_init() { memset(BUFFER, '\0', sizeof(char) * 256); cprint('>'); + for (;;) { + cprint(stdin_get()); + } } diff --git a/src/kernel/shell.h b/src/kernel/shell.h new file mode 100644 index 0000000..22f3942 --- /dev/null +++ b/src/kernel/shell.h @@ -0,0 +1,2 @@ + +void shell_init(); diff --git a/src/kernel/streams.cpp b/src/kernel/streams.cpp new file mode 100644 index 0000000..5edb509 --- /dev/null +++ b/src/kernel/streams.cpp @@ -0,0 +1,49 @@ +// we should use malloc to define arbitarty streams but lets just use a buffer +// for now. Needs revisiting when we have multiple processes. + +typedef char Mutex; // maybe better as a struct? + +typedef struct Stream { + int count; + Mutex message; + Mutex slot; + char queue[1000]; +} Stream; + +Stream STDIN = {0, 0, 1, {}}; + +// RACE condition? what if 2 processes are waiting at once +void wait(Mutex* mutex) { + for (;;) { + if (*mutex) { + *mutex = 0; + break; + } + } +} + +void signal(Mutex* mutex) { + *mutex = 1; +} + +char stdin_get() { + wait(&STDIN.message); + char cout = STDIN.queue[0]; + for (int i = 0; i < STDIN.count - 1; i++) { + STDIN.queue[i] = STDIN.queue[i + 1]; + } + STDIN.queue[STDIN.count] = '\0'; + STDIN.count--; + signal(&STDIN.slot); + return cout; +} + +void stdin_put(char c) { + wait(&STDIN.slot); + if (STDIN.count >= 1000) { + return; + } + STDIN.queue[STDIN.count] = c; + STDIN.count++; + signal(&STDIN.message); +} diff --git a/src/kernel/streams.h b/src/kernel/streams.h new file mode 100644 index 0000000..828d6e7 --- /dev/null +++ b/src/kernel/streams.h @@ -0,0 +1,4 @@ + + +char stdin_get(); +void stdin_put(char c); diff --git a/src/run.sh b/src/run.sh index 1b38629..89962d6 100644 --- a/src/run.sh +++ b/src/run.sh @@ -15,9 +15,11 @@ i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}idt.cpp" -o "${binaries}idt.o" i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}memory.cpp" -o "${binaries}memory.o" i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}portio.cpp" -o "${binaries}portio.o" i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}keyboard.cpp" -o "${binaries}keyboard.o" +i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}streams.cpp" -o "${binaries}streams.o" +i386-elf-gcc -ffreestanding -m32 -g -c "${kernel}shell.cpp" -o "${binaries}shell.o" nasm "${bootloader}zeroes.asm" -f bin -o "${binaries}zeroes.bin" -i386-elf-ld -o "${binaries}full_kernel.bin" -Ttext 0x1000 "${binaries}kernel_entry.o" "${binaries}kernel.o" "${binaries}printing.o" "${binaries}idt.o" "${binaries}idt_entry.o" "${binaries}memory.o" "${binaries}portio.o" "${binaries}keyboard.o" --oformat binary +i386-elf-ld -o "${binaries}full_kernel.bin" -Ttext 0x1000 "${binaries}kernel_entry.o" "${binaries}kernel.o" "${binaries}printing.o" "${binaries}idt.o" "${binaries}idt_entry.o" "${binaries}memory.o" "${binaries}portio.o" "${binaries}keyboard.o" "${binaries}shell.o" "${binaries}streams.o" --oformat binary cat "${binaries}boot.bin" "${binaries}full_kernel.bin" "${binaries}zeroes.bin" > "${binaries}OS.bin" From 1f54cbfd84b59ecdc3631264c45f911d3069ba3f Mon Sep 17 00:00:00 2001 From: zeb33n Date: Fri, 3 Jan 2025 16:54:49 +0000 Subject: [PATCH 30/32] added echo shell --- src/kernel/keyboard.cpp | 2 +- src/kernel/printing.cpp | 7 +++ src/kernel/printing.h | 2 + src/kernel/shell.cpp | 97 +++++++++++++++++++++++++++++++++++++++-- src/kernel/streams.cpp | 9 ++-- 5 files changed, 109 insertions(+), 8 deletions(-) diff --git a/src/kernel/keyboard.cpp b/src/kernel/keyboard.cpp index cd5f1d1..d98f765 100644 --- a/src/kernel/keyboard.cpp +++ b/src/kernel/keyboard.cpp @@ -64,7 +64,7 @@ void keyboard_handle() { char cout = shift ? KEYMAP.shift[scancode] : KEYMAP.normal[scancode]; - if (cout == shift) { + if (cout == SHIFT) { shift = 1; return; } diff --git a/src/kernel/printing.cpp b/src/kernel/printing.cpp index 69c4386..b9390ce 100644 --- a/src/kernel/printing.cpp +++ b/src/kernel/printing.cpp @@ -160,6 +160,13 @@ void cdelete() { printscreen(); } +void clear_line_from_cursor() { + for (int i = CURSOR.x; i < 80; i++) { + SCREEN[CURSOR.y][i] = 0; + } + printscreen(); +} + void cprint(char c) { if (c == '\n') { newline(); diff --git a/src/kernel/printing.h b/src/kernel/printing.h index b02b21e..be90a69 100644 --- a/src/kernel/printing.h +++ b/src/kernel/printing.h @@ -24,3 +24,5 @@ void cdelete(); void cursorlr(int d); void cursordu(int d); + +void clear_line_from_cursor(); diff --git a/src/kernel/shell.cpp b/src/kernel/shell.cpp index cc87da6..e023339 100644 --- a/src/kernel/shell.cpp +++ b/src/kernel/shell.cpp @@ -1,13 +1,102 @@ +#include "keyboard.h" #include "memory.h" #include "printing.h" #include "streams.h" -char BUFFER[256]; +// causes issues when stack allocated / doesn't get allocated on stack when +// called in a function? some compiler funny buisness? +// should have plenty of room on the stack +// Use these to print esp +// register int* esp asm("esp"); +// iprintln(*esp, 16); + +typedef struct CmdBuffer { + int cursor; + int size; + char buffer[256]; +} CmdBuffer; + +CmdBuffer* CB; + +void buffer_reset() { + CB->cursor = -1; + CB->size = 0; + + memset(CB->buffer, '\0', sizeof(char) * 255); +} + +void buffer_remove() { + if (CB->cursor < 0) { + return; + } + for (int i = CB->cursor; i < CB->size; i++) { + CB->buffer[i] = CB->buffer[i + 1]; + } + CB->size--; + CB->buffer[CB->size] = '\0'; + cursorlr(-1 - CB->cursor); + clear_line_from_cursor(); + sprint(CB->buffer); + cursorlr(-(CB->size - CB->cursor)); + CB->cursor--; +} + +void buffer_insert(char c) { + if (CB->cursor >= 255) { + return; + } + CB->cursor++; + for (int i = CB->size; i > CB->cursor; i--) { + CB->buffer[i] = CB->buffer[i - 1]; + } + CB->buffer[CB->cursor] = c; + cursorlr(-CB->cursor); + clear_line_from_cursor(); + sprint(CB->buffer); + cursorlr(-(CB->size - CB->cursor)); + CB->size++; +} + +void buffer_left() { + if (CB->cursor < 0) { + return; + } + CB->cursor--; + cursorlr(-1); +} + +void buffer_right() { + if (CB->cursor >= 255) { + return; + } + CB->cursor++; + cursorlr(1); +} void shell_init() { - memset(BUFFER, '\0', sizeof(char) * 256); - cprint('>'); + buffer_reset(); + sprint("> "); for (;;) { - cprint(stdin_get()); + char c = stdin_get(); + switch (c) { + default: + buffer_insert(c); + break; + case BSPACE: + buffer_remove(); + break; + case ALEFT: + buffer_left(); + break; + case ARIGHT: + buffer_right(); + break; + case '\n': + sprintln(""); + sprintln(CB->buffer); + buffer_reset(); + sprint("> "); + break; + } } } diff --git a/src/kernel/streams.cpp b/src/kernel/streams.cpp index 5edb509..db655aa 100644 --- a/src/kernel/streams.cpp +++ b/src/kernel/streams.cpp @@ -1,18 +1,21 @@ // we should use malloc to define arbitarty streams but lets just use a buffer // for now. Needs revisiting when we have multiple processes. +// TODO put mutexs in there own file + typedef char Mutex; // maybe better as a struct? typedef struct Stream { int count; Mutex message; Mutex slot; - char queue[1000]; + char queue[10]; } Stream; -Stream STDIN = {0, 0, 1, {}}; +Stream STDIN = {0, 0, 1, {'\0'}}; // RACE condition? what if 2 processes are waiting at once +// need to use a counting semaphore? void wait(Mutex* mutex) { for (;;) { if (*mutex) { @@ -40,7 +43,7 @@ char stdin_get() { void stdin_put(char c) { wait(&STDIN.slot); - if (STDIN.count >= 1000) { + if (STDIN.count >= 10) { return; } STDIN.queue[STDIN.count] = c; From 1fbeb1c6dc152999a4ce39a12baeb6534e600ad3 Mon Sep 17 00:00:00 2001 From: zeb33n Date: Fri, 3 Jan 2025 17:14:21 +0000 Subject: [PATCH 31/32] optimisations and tidying --- src/kernel/shell.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/kernel/shell.cpp b/src/kernel/shell.cpp index e023339..04bee5c 100644 --- a/src/kernel/shell.cpp +++ b/src/kernel/shell.cpp @@ -10,6 +10,9 @@ // register int* esp asm("esp"); // iprintln(*esp, 16); +// TODO get rid of the flicker. only have to reprint from the cursor not the +// whole buffer + typedef struct CmdBuffer { int cursor; int size; @@ -34,9 +37,10 @@ void buffer_remove() { } CB->size--; CB->buffer[CB->size] = '\0'; - cursorlr(-1 - CB->cursor); + + cursorlr(-1); clear_line_from_cursor(); - sprint(CB->buffer); + sprint(CB->buffer + CB->cursor); cursorlr(-(CB->size - CB->cursor)); CB->cursor--; } @@ -50,10 +54,11 @@ void buffer_insert(char c) { CB->buffer[i] = CB->buffer[i - 1]; } CB->buffer[CB->cursor] = c; - cursorlr(-CB->cursor); + clear_line_from_cursor(); - sprint(CB->buffer); + sprint(CB->buffer + CB->cursor); cursorlr(-(CB->size - CB->cursor)); + CB->size++; } @@ -66,7 +71,7 @@ void buffer_left() { } void buffer_right() { - if (CB->cursor >= 255) { + if (CB->cursor >= CB->size - 1) { return; } CB->cursor++; From 919baf8b80bb94e4a8fb4739fb7d3e9a8bb69199 Mon Sep 17 00:00:00 2001 From: zeb33n Date: Mon, 6 Jan 2025 11:14:13 +0000 Subject: [PATCH 32/32] ? --- src/kernel/shell.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/kernel/shell.cpp b/src/kernel/shell.cpp index 04bee5c..6f03d8c 100644 --- a/src/kernel/shell.cpp +++ b/src/kernel/shell.cpp @@ -10,9 +10,6 @@ // register int* esp asm("esp"); // iprintln(*esp, 16); -// TODO get rid of the flicker. only have to reprint from the cursor not the -// whole buffer - typedef struct CmdBuffer { int cursor; int size;