From 1dd56e1db65360f3f70661b0abe5a593438e0c09 Mon Sep 17 00:00:00 2001
From: "Hazal2.Veziroglu@live.uwe.ac.uk" <hazal2.veziroglu@live.uwe.ac.uk>
Date: Fri, 6 Dec 2024 10:11:47 +0000
Subject: [PATCH] Update 9 files

- /tiny-os/source/fb.c
- /tiny-os/source/kernel.c
- /tiny-os/source/io.c
- /tiny-os/source/link.ld
- /tiny-os/source/loader.asm
- /tiny-os/source/fb.o
- /tiny-os/source/loader.o
- /tiny-os/source/io.o
- /tiny-os/source/kernel.o
---
 tiny-os/source/fb.c       |  37 +++++++++++++++++++++++++++++++++++++
 tiny-os/source/fb.o       | Bin 0 -> 1008 bytes
 tiny-os/source/io.c       |   6 ++++++
 tiny-os/source/io.o       | Bin 0 -> 536 bytes
 tiny-os/source/kernel.c   |  16 ++++++++++++++++
 tiny-os/source/kernel.o   | Bin 0 -> 868 bytes
 tiny-os/source/link.ld    |  15 +++++++++++++++
 tiny-os/source/loader.asm |  17 +++++++++++++++++
 tiny-os/source/loader.o   | Bin 0 -> 608 bytes
 9 files changed, 91 insertions(+)
 create mode 100644 tiny-os/source/fb.c
 create mode 100644 tiny-os/source/fb.o
 create mode 100644 tiny-os/source/io.c
 create mode 100644 tiny-os/source/io.o
 create mode 100644 tiny-os/source/kernel.c
 create mode 100644 tiny-os/source/kernel.o
 create mode 100644 tiny-os/source/link.ld
 create mode 100644 tiny-os/source/loader.asm
 create mode 100644 tiny-os/source/loader.o

diff --git a/tiny-os/source/fb.c b/tiny-os/source/fb.c
new file mode 100644
index 0000000..b75f30a
--- /dev/null
+++ b/tiny-os/source/fb.c
@@ -0,0 +1,37 @@
+#include "../include/fb.h"  // Header file for framebuffer functions
+#include "../include/io.h"  // Include for outb function
+
+#define FB_COLS 80         // Number of columns in the framebuffer
+#define FB_ROWS 25         // Number of rows in the framebuffer
+#define FB_ADDR 0xB8000    // Starting address of the framebuffer
+
+// Function to clear the framebuffer
+void fb_clear() {
+    char *fb = (char *)FB_ADDR;
+    for (int i = 0; i < FB_COLS * FB_ROWS; i++) {
+        fb[i * 2] = ' ';      // Empty space
+        fb[i * 2 + 1] = 0x07; // Default color (white on black)
+    }
+}
+
+// Function to print a string to the framebuffer at a specific location
+void fb_print(const char *str, unsigned short row, unsigned short col) {
+    char *fb = (char *)FB_ADDR;
+    unsigned short pos = (row * FB_COLS + col) * 2;  // Calculate position
+
+    for (int i = 0; str[i] != '\0'; i++) {
+        fb[pos + i * 2] = str[i];  // Write character
+        fb[pos + i * 2 + 1] = 0x07;  // Default color
+    }
+}
+
+// Function to set the cursor position
+void fb_move(unsigned short row, unsigned short col) {
+    unsigned short pos = row * FB_COLS + col;
+
+    // Send the position to the VGA cursor registers
+    outb(0x3D4, 0x0F);  // Low cursor byte
+    outb(0x3D5, (unsigned char)(pos & 0xFF));
+    outb(0x3D4, 0x0E);  // High cursor byte
+    outb(0x3D5, (unsigned char)((pos >> 8) & 0xFF));
+}
diff --git a/tiny-os/source/fb.o b/tiny-os/source/fb.o
new file mode 100644
index 0000000000000000000000000000000000000000..2f2b810f70b79fb02495e712d657f02db491f7a0
GIT binary patch
literal 1008
zcmb<-^>JflWMqH=Mh0dE1doBCg9##I0;V(=I2kw?LOY)}zY#d@`h%f?o8h?YACS~*
z<!;wMj0ZXob-Vsxyl{*`0nF_UV1)A7n_d4fHrD<*&(6S5cV)talZU~kNOXttbh`?q
zb%wr4>vVkqHIsjP=$p<92OlsoUO4!GrSlN~cGnk-7Z?wub-I3o*=N}u`ls8KgYg3Y
z_Rw$LzJC}`GM?(Z*d6+V@f80yh7KnF?XKUtL;o;dV!VLn3b@8?3@ryrcfj4E(H+Xs
z?aGtZ8Turx)Aa%W_RuG2j(EU$0px_{Hyl~~8CRGY7+(DO|NnpU5dn~8{M!yRzu^eT
zxQZkWQpty*GVS0C4s5C?oIK3n?(A%(pyBQps;OXTqGzOM018|*j2u5K3?KiqLFL^T
z7#M^Y7#a8(7#Kk89w=Xefq~%?0|P@Rl&=6)526G>L|T$wGDBKYd~!}|ViAZ@P?VWh
z0%GLmm!&e~mzE@flyNgMFfg$)FepQ5Qz#t>r5W^!D|1T{lNj`hONt<L28>mdnxj{e
zT2aEFmy%eL$e@>0T+E=CoS&PUnpXlcn^-K*zyMC4Fh7IRWi(QNz?jku3=EtM3=9rX
zgLRk~7(o68=>w@@VPIh3U|?WSg__3<Ro4%agt9>tjH?Y*Pe>gozCe0FG)O<lJYf(6
zia~NP49!|#nI()23<(Sj4D1XH3?Olk`#^C6@&n9HkU|zFh?_xd5C)kAq6HZk7?9QZ
OFflM#f+V0ArVaqv4%r9*

literal 0
HcmV?d00001

diff --git a/tiny-os/source/io.c b/tiny-os/source/io.c
new file mode 100644
index 0000000..a2b731f
--- /dev/null
+++ b/tiny-os/source/io.c
@@ -0,0 +1,6 @@
+#include "../include/io.h"
+
+// Function to send a byte to a specific hardware port
+void outb(unsigned short port, unsigned char val) {
+    asm volatile ("outb %0, %1" : : "a"(val), "Nd"(port));
+}
diff --git a/tiny-os/source/io.o b/tiny-os/source/io.o
new file mode 100644
index 0000000000000000000000000000000000000000..3c958d2b55d271c55f1db8cb66b558a73a24701a
GIT binary patch
literal 536
zcmb<-^>JflWMqH=Mh0dE1doB?22{cXOlvT3Ft9U(c0O%>!_ghe(e28U)*1Sz!}SOM
zHrF5g+e81nn{e_lgS)e{m4b%5U#O;np^2W6o&i`dDuHYV3&Y3%Y*1-=1_lNpkP9;N
z^^zI#OG}a%81#xOb4wDF81#xuiXe0bj8&3aQNo~?l30?+pqEr!%%GQ?pPQSSR{}MS
zFeS~v0J4n%W<SWEAUD8t!rZ9{RmTjK2!_%y3Z_n-fq{X8fq{XLIvuEau&@D{Ck!(T
zDhDzXgqe`UGZ+{cKzcy#1&OmTFfa%(Ffec;*$GlUgMop88^nNOkU1cxAey?x3=9mW
KAPFdjsRIBQO);_n

literal 0
HcmV?d00001

diff --git a/tiny-os/source/kernel.c b/tiny-os/source/kernel.c
new file mode 100644
index 0000000..9ff22ef
--- /dev/null
+++ b/tiny-os/source/kernel.c
@@ -0,0 +1,16 @@
+#include "../include/fb.h"
+
+void kernel_main() {
+    // Clear the screen
+    fb_clear();
+
+    // Print messages using the framebuffer API
+    fb_print("Welcome to Tiny OS", 0, 0);  // First row
+    fb_print("Framebuffer driver is working!", 1, 0);  // Second row
+
+    // Move the cursor to the third row
+    fb_move(2, 0);
+
+    // Halt the CPU
+    while (1) {}
+}
diff --git a/tiny-os/source/kernel.o b/tiny-os/source/kernel.o
new file mode 100644
index 0000000000000000000000000000000000000000..3eea2b44b3c8d8dfc8bf4fc8bbb6de451d50929c
GIT binary patch
literal 868
zcmb<-^>JflWMqH=Mh0dE1doB?3Y234R-nPa#lXoB+WEBk4abW=|NsAQe#4T*kj0Pz
zl7$Ey5rBv>W{5B_Fd)P@vKX?MVBFXL!c%jS^K(-bO7ay#GV>}G{DT=7+=>!&Q<F;5
z(o%~QQi?LmQi~KaixtZAi?TEG(iIsP+?}1R6g1rZLNyf(P4tZP3_!M`VW@M#qAUy_
z|AQG&f|-GpfeXrZVPIeoVqjztgYrR?00RSqJct3sAif5a4WdANhV0a$ywn`MWGEv(
zH!(AhAuTCBIVUx-2*fBT%FHVPF>>?EQW@A87#NsX7#M^Z7#J9t7#Ji#d{zbqbtqp4
z%C`p5Yzzzxdc~EwC5cH4dc`G05IO_KDoV}KD@m;=VbDuSEJ<Y0ODZmA&@0M^aFX+L
zb5rw5K<*?KgZv5#FOan$J)k%Sg$sxc!XP;iEzQ8dz{$YC-~i$<Ffb%AGBAL`9^^NW
z8Wsiy1`Y-W233%s7#J9sq3SB2G>ihN1+lfE>Ita>*#XkS1k%L7zyLDO7|I4wAbUZy
z1=L=UdJum#10=jbY!C*S0mCq}K;j1&7#IqW+yXKW6vrUH!rTT@X8`pthz-IZvp}>U
Tl3zjm35*O3jvxjU!_)x)T<~s4

literal 0
HcmV?d00001

diff --git a/tiny-os/source/link.ld b/tiny-os/source/link.ld
new file mode 100644
index 0000000..0a0ade3
--- /dev/null
+++ b/tiny-os/source/link.ld
@@ -0,0 +1,15 @@
+ENTRY(loader)
+
+SECTIONS
+{
+    . = 0x100000;
+
+    .text : {
+        *(.multiboot_header)
+        *(.text)
+    }
+
+    .rodata : { *(.rodata) }
+    .data : { *(.data) }
+    .bss : { *(.bss) }
+}
diff --git a/tiny-os/source/loader.asm b/tiny-os/source/loader.asm
new file mode 100644
index 0000000..4213733
--- /dev/null
+++ b/tiny-os/source/loader.asm
@@ -0,0 +1,17 @@
+global loader
+extern kernel_main  ; Declare the external C function
+
+section .text
+align 4
+
+MAGIC_NUMBER equ 0x1BADB002
+FLAGS equ 0x0
+CHECKSUM equ -MAGIC_NUMBER
+
+dd MAGIC_NUMBER
+dd FLAGS
+dd CHECKSUM
+
+loader:
+    call kernel_main   ; Call the C function
+    hlt                ; Halt if it returns
diff --git a/tiny-os/source/loader.o b/tiny-os/source/loader.o
new file mode 100644
index 0000000000000000000000000000000000000000..b9e7e9aa55b23c173d132449bcddbb2e2b3245f1
GIT binary patch
literal 608
zcmb<-^>JflWMqH=Mh0dE1doBi0V-hvrZpJY7?{8;QVEcmAj}5UXu!z8AOvNDC;<?`
zz`(%Hz`(!^WrL^yMg|6L5Ce)qW`LN23=AkPX<%evXkcJqU}0cj0NDYeL1s##nFrG3
z1Tp}MVdg0^FfedJ#XwX569WSWR4+&k$UG3AX~SA+ko-UYpeHZ>{Qv*|3y6n=^-5AJ
zN*MHtGm1-!N)nS8^olEUAvBa<l$rxkgQN+;1la}Su`qo64`YL9P|V1K{0(&j1H;Gv
zIv@!+{`lXBfq?<!Hi*#2|H2Rkm;{A~H3I_!517ZmAOMQ#;{4L0<W&8f{KS;hBE7`o
zT!!q_qP*0c_}s+IJO*D!cTeYdzffN%*B}NrA4m6K24@dfXYb%pUj~R4s97+I7vw%r
H1V9A<)Ez$v

literal 0
HcmV?d00001

-- 
GitLab