From 861d843dccb3ac5fb5e4b9d516e72e7d5ced9892 Mon Sep 17 00:00:00 2001 From: Tom-on64 Date: Fri, 8 Mar 2024 21:57:53 +0100 Subject: [PATCH] Added IDT Logic (Didn't actually add any IDTs) --- src/kernel/bool.h | 8 ++++++++ src/kernel/idt.c | 32 ++++++++++++++++++++++++++++++++ src/kernel/idt.h | 10 ++++++++++ src/kernel/idt_c.swp | Bin 0 -> 12288 bytes src/kernel/idt_h.swp | Bin 0 -> 12288 bytes src/kernel/main.c | 4 +++- src/kernel/main_c.swp | Bin 0 -> 12288 bytes src/kernel/stdint.h | 21 +++++++++++++++++++++ src/kernel/system.c | 3 +++ src/kernel/system.h | 6 ++++++ src/kernel/system_c.swp | Bin 0 -> 12288 bytes src/kernel/system_h.swp | Bin 0 -> 12288 bytes 12 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 src/kernel/bool.h create mode 100644 src/kernel/idt.c create mode 100644 src/kernel/idt.h create mode 100644 src/kernel/idt_c.swp create mode 100644 src/kernel/idt_h.swp create mode 100644 src/kernel/main_c.swp create mode 100644 src/kernel/stdint.h create mode 100644 src/kernel/system.c create mode 100644 src/kernel/system.h create mode 100644 src/kernel/system_c.swp create mode 100644 src/kernel/system_h.swp diff --git a/src/kernel/bool.h b/src/kernel/bool.h new file mode 100644 index 0000000..98349dc --- /dev/null +++ b/src/kernel/bool.h @@ -0,0 +1,8 @@ +#ifndef BOOL_H +#define BOOL_H + +#define bool _Bool +#define true 1 +#define false 0 + +#endif diff --git a/src/kernel/idt.c b/src/kernel/idt.c new file mode 100644 index 0000000..9e78727 --- /dev/null +++ b/src/kernel/idt.c @@ -0,0 +1,32 @@ +#include "idt.h" +#include "stdint.h" + +struct idtEntry { + uint16_t offsetLow; + uint16_t selector; + uint8_t zero; + uint8_t typeAttr; + uint16_t offsetHigh; +} __attribute__((packed)); + +struct idtPointer { + uint16_t limit; + uint32_t base; +} __attribute__((packed)); + +struct idtEntry idt[256] = { 0 }; +struct idtPointer idtp; + +void idtSetGate(uint8_t i, uint32_t offset, uint16_t selector, uint8_t typeAttr) { + idt[i].offsetLow = (uint16_t)offset; + idt[i].selector = selector; + idt[i].zero = 0; + idt[i].typeAttr = typeAttr; + idt[i].offsetHigh = (uint16_t)(offset >> 16); +} + +void setupIdt() { + idtp.limit = sizeof(struct idtEntry) * 256; + idtp.base = (uint32_t)&idt; +} + diff --git a/src/kernel/idt.h b/src/kernel/idt.h new file mode 100644 index 0000000..89e7e97 --- /dev/null +++ b/src/kernel/idt.h @@ -0,0 +1,10 @@ +#ifndef IDT_H +#define IDT_H + +#include "stdint.h" + +void setupIdt(); +void idtSetGate(uint8_t i, uint32_t offset, uint16_t selector, uint8_t typeAttr); + +#endif + diff --git a/src/kernel/idt_c.swp b/src/kernel/idt_c.swp new file mode 100644 index 0000000000000000000000000000000000000000..0059092e93e18f3c84bb2f04f8fb2508846aa9b9 GIT binary patch literal 12288 zcmeI2zi-n(6vr>jv><-$M~W&3Av;M$0EHHcgrE{2B%npAD$B7i%_&Z7>@%p1Dn@oT zc2Ff)_#aqU8G#uV24*(C=O0O2sp`-v=$-VDop(Rpd!JLLq*GsCd%&-ob%t@8vGb$f z;^9TczAiGRf`Jq3_z}ZT`cAwWhQ8Qvl-oOWwY47j$w0)`ldIOYRK28Q^+hza;>b;3 zgl|btneL$n&;%JE1II8h$CjFn^sBy5y}-|&d3ubqXe${Y17v^a^RVNqz4%w17v^8{7hEEi>qnN+ttjfDDiUGC&5%02v?yWZ?fcu*WzC{o_YKsWBC-c4>NQDKl+!aCBh*gxhN^iY0RMAe2U*gRxtu}iRNRP)tCE=Q?y8FS)QWaS=Zvw477V55}MC#<4jczaVLJ!Z@W&z#8I8PSR%ZqYT3lm|F z0w@+ys=du7@l>RaZo=di3LEh{-)lo4w`~UoWG7L=whbe6+`jN?xuk#(xCY;yQ?d*!IUj!C3s=0JFS2h;Us5>VZO9J+qu30{qrhjz?f Kbt(o+I`9wR+ZN>j literal 0 HcmV?d00001 diff --git a/src/kernel/idt_h.swp b/src/kernel/idt_h.swp new file mode 100644 index 0000000000000000000000000000000000000000..d202a49f32cab807375790e190426528cf25cfc1 GIT binary patch literal 12288 zcmeI&%SyvQ6b9f^mx3tz0x=b-AW1La1y=<@yKrT#3l}BLOw8Cc3CW3|8=uTqP<#g6 zx$_A;Y2!vHUAd_IfuETa<(aSG{g;TU(n~i*G>(1Rwwb2tWV=5P$##AnoMxpu(P}l;evQ=<0|X!d z0SG_<0uX=z1Rwwb2tWV=ODNzeB72=^Bq@LY|M~v^CF>8#yW~~!B6*gKC3g~EGQDRB z&x}Wg00bZa0SG_<0uX=z1Rwwb2>gLSUB}71;zkA`fSeXE>y z+A>dqAlE!Av<{?@>qz^YWV2G)&JU^XGG}`yvmK?sNPCJKQlPqt{ismdvU66lsT0~# UR5~!RwtA=i;kmQ~u@tJ+H)w8Lc>n+a literal 0 HcmV?d00001 diff --git a/src/kernel/main.c b/src/kernel/main.c index f23560e..4088bfe 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -1,6 +1,8 @@ #include "screen.h" +#include "idt.h" void main() { - print("Hello, World!", 0x0f); + setupIdt(); + print("kern.\n", 0x0f); } diff --git a/src/kernel/main_c.swp b/src/kernel/main_c.swp new file mode 100644 index 0000000000000000000000000000000000000000..1d8d77e08e9a0273bf1018f3966f4c7ed203987a GIT binary patch literal 12288 zcmeI&ze>a~90%~Lchwn3f769KuZ&zJV`k{xqZ?=un!_9}UmgvFDR5YeWyz4-sw=y>1hkJPUN)|3^uy zNuW=QA{Cc`iITaq`6y4TOlW?7$gibIs*q1askknq=0c=A3#9U*xhr4*0uWe8pfcm# zqZK;X-)mm=zO%_T)-M)X3O7Lj0uX=z1Rwwb2tWV=-4rlIkM8Z(m)h+ww{`DV-8NA{ z00Izz00bZa0SG_<0uX=z1R&5sfgmOlt3;1B_5c6x@BdHRez$qEd9iu6d9s<=G;=%n ztk^OHAOHafKmY;|fB*y_009U<;C~9-5woQzr82HlpOyEnl(WP9TYo$_X~wiLRWXc> kYuh)uj9Gnx-W{+hQD3Sktzy9(85=Kgest)l6hhT~U&>oYPXGV_ literal 0 HcmV?d00001 diff --git a/src/kernel/stdint.h b/src/kernel/stdint.h new file mode 100644 index 0000000..ae0b2a3 --- /dev/null +++ b/src/kernel/stdint.h @@ -0,0 +1,21 @@ +#ifndef STDINT_H +#define STDINT_H + +#define NULL ((void*)0) + +// Signed ints +typedef signed char int8_t; +typedef signed short int16_t; +typedef signed int int32_t; +typedef signed long long int64_t; + +// Unsigned ints +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +typedef unsigned long long uint64_t; + +// Other +typedef unsigned int size_t; + +#endif diff --git a/src/kernel/system.c b/src/kernel/system.c new file mode 100644 index 0000000..43c43e3 --- /dev/null +++ b/src/kernel/system.c @@ -0,0 +1,3 @@ +#include "system.h" + + diff --git a/src/kernel/system.h b/src/kernel/system.h new file mode 100644 index 0000000..1305e5b --- /dev/null +++ b/src/kernel/system.h @@ -0,0 +1,6 @@ +#ifndef SYSTEM_H +#define SYSTEM_H + + + +#endif diff --git a/src/kernel/system_c.swp b/src/kernel/system_c.swp new file mode 100644 index 0000000000000000000000000000000000000000..aa7fc04dc714939013421676708cf020b7c84342 GIT binary patch literal 12288 zcmeI&!D_-V7{Kw*c@~GhK&`{0QFj;~J?^lZx|>jIuwtskq>P>R0(&m+zJ~50R;6A9 z5xf=uf$$}162AN(htf_vE%HWnc$MV)SR= z!szO3HC~%E)>aMQ)O_KhbgGtmvr={wo*LRH`)!?$+u_wccz^%`_Xb23m8?g=n1Q0*~0R#|0009IFDBzNk{A77Q<++#hSh|RLmw*5Q2q1s}0tg_000Iag zfB*so6bNP_+p5SutH*lS zC&x$StM2aaIlJxahI)<>KmY**5I_I{1Q0-AodmM9B~P}YjjE~5D!2aSYDq!>0R#|0 z009ILKmY**5I_Kd6%_D%k(X_eHyg$O|KIQbZ@d1qv9$4FdTN5@9 literal 0 HcmV?d00001