From e372c12dae8e9dc7225dc7e400686779e417ec96 Mon Sep 17 00:00:00 2001 From: c0repwn3r Date: Fri, 13 May 2022 20:48:59 -0400 Subject: [PATCH] prepare for transplanting of new shade into shade64 base --- Makefile | 20 ++-- bin/shade.bin | Bin 11224 -> 1056296 bytes bin/shade.iso | Bin 26593280 -> 26591232 bytes obj/boot.o | Bin 1296 -> 0 bytes obj/kernel/kernel.o | Bin 1900 -> 3272 bytes obj/kernel/platform/drivers/ports.o | Bin 680 -> 0 bytes obj/kernel/platform/interrupts/int.o | Bin 1200 -> 0 bytes obj/kernel/platform/interrupts/int_lowlevel.o | Bin 2240 -> 0 bytes obj/kernel/print.o | Bin 2796 -> 4984 bytes obj/kernel/strings.o | Bin 1100 -> 1848 bytes obj/kernel/util.o | Bin 796 -> 1472 bytes src/boot.asm | 52 --------- src/gdt.asm | 33 ------ src/kernel/kernel.c | 9 +- src/kernel/platform/drivers/ports.c | 26 ----- src/kernel/platform/drivers/ports.h | 4 - src/kernel/platform/interrupts/int.c | 35 ------ src/kernel/platform/interrupts/int.h | 43 -------- .../platform/interrupts/int_lowlevel.asm | 101 ------------------ src/kernel/print.c | 10 +- src/linker.ld | 33 +++--- 21 files changed, 28 insertions(+), 338 deletions(-) delete mode 100644 obj/boot.o delete mode 100644 obj/kernel/platform/drivers/ports.o delete mode 100644 obj/kernel/platform/interrupts/int.o delete mode 100644 obj/kernel/platform/interrupts/int_lowlevel.o delete mode 100644 src/boot.asm delete mode 100644 src/gdt.asm delete mode 100644 src/kernel/platform/drivers/ports.c delete mode 100644 src/kernel/platform/drivers/ports.h delete mode 100644 src/kernel/platform/interrupts/int.c delete mode 100644 src/kernel/platform/interrupts/int.h delete mode 100644 src/kernel/platform/interrupts/int_lowlevel.asm diff --git a/Makefile b/Makefile index 3e8a13a..1d7164b 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ ASM ?= nasm -CC := i686-elf-gcc -GDB := i686-elf-gdb -LD := i686-elf-ld +CC := x86_64-elf-gcc +GDB := gdb +LD := x86_64-elf-ld C_FILES = $(shell find src/ -type f -name '*.c') CO_FILES = $(patsubst src/%.c, obj/%.o, $(C_FILES)) @@ -10,15 +10,15 @@ AO_FILES = $(patsubst src/kernel/%.asm, obj/kernel/%.o, $(ASM_FILES)) KERNEL_O_FILES = ${CO_FILES} ${AO_FILES} +BOOT_O_FILES = obj/entry.o obj/entry64.o obj/mb2.o obj/vga-print.o +BOOT_SRC_FILES = obj/entry.asm obj/entry64.asm obj/mb2.asm obj/vga-print.asm + iso: bin/shade.iso -obj/boot.o: src/boot.asm - $(ASM) -felf32 $^ -o $@ - -bin/shade.bin: obj/boot.o ${KERNEL_O_FILES} +bin/shade.bin: ${BOOT_O_FILES} ${KERNEL_O_FILES} mkdir -p bin - $(CC) -T src/linker.ld -ffreestanding -O2 -nostdlib $^ -o $@ -lgcc - grub-file --is-x86-multiboot bin/shade.bin + $(LD) -T src/linker.ld $^ -o $@ + grub-file --is-x86-multiboot2 bin/shade.bin bin/shade.iso: bin/shade.bin mkdir -p isodir/boot/grub @@ -33,7 +33,7 @@ obj/%.o: src/%.c obj/%.o: src/%.asm mkdir -p "$(@D)" - $(ASM) -f elf $< -o $@ + $(ASM) -f elf64 $< -o $@ run: clean bin/shade.iso diff --git a/bin/shade.bin b/bin/shade.bin index bc273ebae2a62cff654d3369d75f11dfaf4cb632..8b749dbc91fb333cb008057da5bdd20cb51ee8a5 100755 GIT binary patch delta 8223 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 BJhlJ; literal 11224 zcmeHNe{@sT9luFa4JDA^DJZkJ2LlEwp$VXZIAJ9~l|rQy5f(y7UT7dq;(IT}?x0iy zt~pt1=RA|cIorYMcD9|lIgge)cUViIwHrbYx{b-sWXH)#rDFLpK~b{L_rCX%SH>Uv zYx^g!z4v`T_xruy@4esqefN9cYj=89EH#--Oux*mgb{M!XD;r`Z&x{UnZV3!1}kHu zI3H{-MUp$mFkVWvCaz5&HiS^V3Q}0d*bN$=ZpEwUfuaYB9w>UC=z*dKiXJF>py+|3 z2Z|mjdZ6fmq6hwW9x%W1@~tH>cV*S;e}>va?Z0E29PD$uY5XmCasOy4-tMg|)ahVt zC)x(uy4p^)WwX^*#y-Dz=1UT9uTOpW@Y=fMkTspKrfY1M{%&8Mu)0oWUYkyH2(@>< zedNfIly@lEW4d%YHJtJecYjopS@^6eH}i6`tFm>;#2i}xoV+}0=euc-b$3_un6zg& z?H%g1m}Vt=%)OS0%-%6^*Gc7m*YQjfOATaJn_70@i$&t%?k?qa*YVW*XU1ygz_)iS z9B1#SFtt{UOI=AG#NCw4n&uzeaXNX(x?!Ww+oQ{>BgFXErt7VB_6~PycvqKF?dsPB zI%o!|w=&hRXU^N}KjY8^laG6#6rjM>kGB5QTY4MK=Ky_xsY`olL7?#~G_gcE^g`a=QCVH!_wuYVR0-8)B_<({Dy2UV51TS(v|%y*ipDh7nmWP)Kea z+wd;pG_&WGTNukO#iyio_Kv>wwf2sa4Sxb7I|ogVY}{(+V%cdxzIAmf>lT0)EKriE zXj!*j)71TerDPIm&VGjPR?zjx#)7ibX!5Pom7M@uw_a2BM}XuZM@GEJqlwlpIb=cT z+B?S3JTjJ+R8RM*Qs^&bEu&fHxm)+q?X~HcGt=j{JU4$JaRHN4$DoZV8zoC4=d}S% zkK~6^V;ssN0IWVnlMjjZ`cAT@E)oW2)4ZG6LyLm=>n#!RRJGRS=J#;>>3Ih4nyzAX zvV#^3A~n3;-f^f_b>LsnQW!&joH5l5v=m(a zG^rRlPnm4w*G~k>uirWVgUj`3!l;*WEN2Q{zLAXRpjOmeT0#p_J!r=LWb?^(W@ni}}5a5V9Xws?SfAHD?n4 z>Rd&l+6rJl*W_Qip1eJiIN#~LuDmi*KJV=5x@v8|ApPX;C0su5Z*?7!U-Hh?}e+p~7=h*BWYI6-W zzmI0EXE~a)I}t|ET1UK|LYK=R(d?te2e{eZPpK-j_tmg`NLskrmW&f&c zvS)v#YEnqk6tXx8Q3}<2sNo@%d4y<>N(*B^&j+1-30{BOOy=OE!q4^mW#3v9$V-WZx6*U`S(#WI)Hi9zk$;bLJbP6>3UlzWjj0tTS>Zx z(%xYKWcNo7Z>#O_G?3IZ9rs?#;i)8)JOjdn0@ z1>HzXn{LEl;abgo7T%3^20Y=(%R-{VZkj~8uZ;8u=7XKkvHRo`(~!e315-YtwDW+K z6yPBBKn@ukCo_7`weVM_GxSf_J9zrTVdJPv0`(z@a!CF&pwE-IhOVC`hH%|=k*+3&*Jshc|DoexAJ;CukE}Z#p@DYe~H*S zmc7L5bG$yo>koNN&&M$yzsIugaQbat_wl-$*KhLrbzc9P*FWd=i@g3Jub=1j_ozNq z=3u8$hEUFNyVnI-pp*T<`pj4ntL79Q#M45}S0A&%%Qj`@at5MdWY(xp7Y(V$2g6cr;vlPJmISX5w@ zPPfy|Rwts-aCD16EnIR|P;3$-v3R2xRaiA+)zPpL_D90s7K1`CEXO1MWQz4UshGMK$x*?W&KRS<-*fldA(8c zzxQhl3p7kP#ezW=wA-#dxVbX5Fw}se8x)I zBEm>z>Q%}fAOc4@^|G)vAgl&VCoqQrhk)txhI(08^cws)FlBZ1I+uGIgf7i6zh{8y z%ZPfJ*b5-;G2oYh?=|2~O_FZppM%%nKLA&nv6sVXW_a%XYxvn~@S$t)Ffg4UXwWA3 z=OQqr`WtX3{Mj|~Xv|+Uo=RZKGwNkx_X1PS(eYAX%0D`O2$*t_j=u#=c}d4xfGJ1m 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 delta 64588 zcmbuo34D#$^EiC(6>Ab=E3w8-6?ap6o7nfA+9L>pNDwV*D-~O$;gX}aP+EIyDGyb( zSFH`&qV}qy_O@#0oiopQO7G0czrXLxXHM?9b7nbn<}A)27Q%(l0+hfmO zARyFkv)L{m6f<)>-M;7cJk66AY#0e&+2r@~-{phm-*EGfZL_LhPcE>0>wvn=l6UsX zHT7WNkbDZi4*re@m_Bs$QzQ4om}QwaWXly|FXRg;*eG+MaGNbJew%exSfIVY#-Ol( zY$5-!+GVoxg_Vzg`Q>i)<>K=3q5rhpV}AKp0gwd$y80?q==T!4*Ti=F&ctrqxU$0X zj@h=lW!1gacg!B<8!^5{V7}_1HV5|9zH!JzhkfHWAB?c)byj`TUDfHdxt(sev#QGj z#l|KR59iAS&3y&u*2yi&Mr96u`N!9Ht_QIT=DwNt<=0lD!9M#6lltl0nhbTLkHZ}K zs{3L-jtKE5_I>qn1&O=z@!J&VomWcYI?rS1R?RCXaVO^0A#@wV=HCx8JF|jQx2MlO z*Hjm}!>GGs#cN1?YDG=2zrLZimMyZ|ZT*H0?`0cdo9dDVcTGK2QU0xX$~2m<;mUBz zcB5E1HjAYdMf+YXH>GNHTBmec$Lo~CZtEL2IAPcbn>SGE66ozF|JZEZES=UfI{C!< z(x}om>)&Ej3f@p!+Ss#!+SoUKLn);EY(s5^^3M$=&8}{&SyW@fp>eUpY(s@T#9@v_ z;zo|qiH#Qj?NWZJG3u7rWdBZXsYiY2^{qGl8Lj_?^-eWj zJ2|sg*kzi%^{%>%@s{o?i=8^Wi=!>NyEM*B7+YAu?Aaq`J@GP3e7jArq&I9+GoKyC5T3z1nHXZIePHyaX zZyVGpH?}7Znfg9H#K~!O*zD`5!<>x|95!{leVEhY?IR}V zzDGE$p|IzVaO2}TYI;qVqa1ea(Xu&Tv0_lYy1pd`sxd~a@O@eQR+&4nUgL-+Ev3PW zaI0BPyRCQssF=axgW~qKv(odM9+J-4B{toO*v09bUGAitcFA{)qm4Oc+I03Yu5VY5 znLQ6V&e296fBn@}BS$^aGu6&*ewUA%#?Ntr6Vm;JDJ1a(H#8?tn6%GXY^xtk?7Kg3 zoDcj^HqXC?rfuie?OSQql?FeWY7G97>+7B$O&`DeBPXcdPbTf4pE%lGKbbbZ`4iW{ zIw!FUBBj5bBi?$ln;cvb62qcnPa$uS5@Y9>Uq5BqC*(B4TXY{_FW?(}Ixh;CHo(rg z&!yAoKH~WRR({u?P5EO7vhq*{2?5EpfrbHom}hc;ST+<}AO+ zagMoY(xzPGI(+$}*`=UM9BubYrC(j6vNwznB_{GK@FlZ%4_Q7y)0+y64>X2xYx?%B&+@2dQ2_O8>foZPj)Rz|y>=ddE}U3;jn`4!X2kG{)# zv2n%RV}HBC@vrrpi5>78hu!g;>83YXY{XU5CWEeWw7agh$GJCeB&U|RGt!>lH{qJ8 zdZAHlo48TX#&O+jGmmd`N4A-u+7x=9=kvbg^Sk21x4H8^m@-kdDK?tpKx2v0V_4z`H_X*!8IOMNrim^+mZ!dnqQwdx{r)YJy8Jkn`pGSG9LwM46d!Zj z#I9noFBJBTI~?r?cV^=#FaCfP9DCPv-$i%1iE-<$x&AKd>ELEn?|bH~ns$$yH|Or* zyb;M0?F?F6nrP4K8}x@c<~e&gxHeI}9C>}$%r?H~e=z+M7kW90`-c8$vI&{QcJkbx zrdtI4#R&05{$=VJlF05Nr~krE&brT8pv`?mrcUO%=sR@Zz%LB-{!&+|2M~a z*Wbumq)cJes`0?Iea{DVi*ZM|5WB5^^oTygW8>u^E_~KQb%=Y&jdQ<;<^q`XkTcMQ zho+v{9x(&p>;A}e&S{UhUYvPk_G0jKwioRlo4pwIm=k>Du_^fP$DGm)o|sAxc)|(Z z_QVw2at15d^VAgFH$$xq3~(qGA@ zj2)7l#m9bZFCa!|x2s+JW46(qkL~%zQ>#&-d2COjbEuvq=U_FxkV9#jb3RKSHQ%0B z3<^}5OqUE z6&3MjBS!{t1qI!7vsd8)nC=2eBxOb>2H+)>@ImPL7xomfy@|^^2MbgY>+F zHQX~|lv0|GF2&LxDrM1^VlCm?WG^gwmR3sK z^|8}ve`zJ;c4>ARMU+wI7*K{4vZIU|&fj_b+hrAgKv|yN!v9{Dm0zcvl7BIk)!!&* z?}6?R^c8EwnDW+emuLB3E^qQr-NvFLD=6_HAG6+YY#S^Pe^jsrns3zRYiKm|b=4?j z9@~-AubYadR%H9prlLa6XC3ZPMWyHH`MjR<9fd`oHy_N>g>vt4D&p1W8X$0}QgW1hZE6-A$OH#;W|RIxWVR|hA{Kh~-E z&*SlToNDz5bFsrP#HHM6u8ZY=%cb}ia1Wolte4K>v%jVA&bL_o#=WKV3;Ud1ChuGHMc!sdf5_YRWjOj_U$8Ue*m2ktr-Z91 zvM8Ko61&b(RD?vRMvK?6oGzTO7Z>xaM(ZNj37e^|GFQqEtfUX>Dra0*mo=BYo-$YY zdMtjVga&gRY=rarwE9+e`9^VHI*N;Y4OFAo8?c^x}FrJ2$sz8UM6dzvY~yxELX!l={Se(L{6(2v;B+MYpZj;PSa z?4ys3%@Ir6nA-W+;2cr3t^L15=Llb0(^5V*JVyk#Go97P#^;FX?UasefR4!8-u_=B zbi~B=iWM7#Bc8Qa-DRV2#PANP8*CVkxYI#(gN?%xLpqw875jQ$2Zwh&b^`_`| z6geBIBQC#V&mdGs#C9_0yN`|45%)S-x^cleBDS+K8yl@7u6MTo$8a6dyNfa*8?PhI zbx|f{19n8$uJ->Nu_I1EW4QtO*pMC3s+;OE8?z%0bW@75K|A8@?ut1ZwId7*&4%p= zR}bZ9Y}}4m3+PuLifaRRM1@HE{~WoK+S6QzeFeGD9TD5pj#lEX#- ziIaU4H5&pXT16`~8v`T`MBD#+5RholSE<5A0f{|*)y!eTfJD81ikgiB61)1@@o~S8 z4FnP~{mqVOB7ww}{>m5lP#_T#8%!jIe4v!mMiUhlArqAS*pMPIe1clZ`IsVcV}hEg zY*3Mio@mac45Et6$b}3dibVW}N=1E0k$9}y2yIMJs2Dp*@nHjt#MMbkS3a^xL?xPC zWkZX^X@%uui$uH0ia8%#B)*?)Z-{=tMi+^gDQd;z!;8cvh4(>x5fj+ab*fs@3Ucv8 z;>1+7AhH2PqS-V>t&1osATCZ*re(v5M5F0SeLk*8>`-_g8(1W2Bq;^h$Re>mNvY3< z7Kw5*lyE+_NTeyePZwNNK)91t_jD0P`NamS2^(f43Vft=nNzj8d9w~J`)oB0Qm z;vs(YsV?c`f%1x8vrV%IO;FH**@}rK&L?7y!fWDuwpw^ioKKZh)nR>{PhRm=s!~!D z>{I+bxX)Nqs79KIpC!VcfZKJ!x$LPpcCOlMG!a3!EWAD<$UN20(*^^n?VOJTik)YA zn9#%lU7e>at&amTHv>%w(3$y)UK0Y;VS$pb2?08>K-oth0%Xe9NB@}p*9ZQX_)&b! z&!I(1e@)C!gEXbTKIX>^0oTR)ELQweG_gL5m8WJH>$5~TVTQ3jR-+7KeLhi~bg@34 zsNvAX`YcsPH(jjHQq>(@tj{uK4qdFzGG%UEtk0(kuZ#8hRPoox`s5YOKeOlm*K*gg zee?Pvq7j!+AvS%cIBEieDlS(&)&vH9y4)U*3xp;xC}xG_AbeoZPpvS9}+hi09G8WCN{ z(7OLe$j~~=qckBy>n)Gch75sq*W2^IdUrK@>w03QgPkG0H>eqqoI!Na?G38an&_f- z8x@lge00%)jjB_c=%a`)6T}z@v?u6n}l-QC<r%~0XT`sk(nV!{?n32g{de&N`v8foH~25wb8qKRX=vQ?Qw z6UWs3D}_(t7)fjFnU;-S?@6YSJ|xAN|Sd@vIPI~5SOcPmNyh^N9LVUKF0341!TM|qz< z?5ThlyjL;N#6F$etL(BK(Eg_p8>7{orA_t7+QPd|REb^%S?Q=9$D zn)yyEIiSp?34@A0sPHM; zFsM-R{Gd`o6AKl6$Wnrjg*tP{w3#Lrs?A|VewPn++J9J?Tode6=ZK=$1UqfA@Mn*( z%e(8SvVkTTYV}biUlR;f;(H}u6AU%~d;2K#22C(jOuA)0J{anfh1Uc_y>m?IrwN8S za!m2p2SY*B=W#3gM;j5P0;V$vhDtc097P`tg>e8v69?7r2Q_*1aZm-s(;xhfNFD2n zOPl#4(vQkAQ+{MO{*xB|>5r^uwE0PSh9>Un$WO|$nz*Y5Cly{FcV%A1W)yNY;gn_6 z3_`AgPOC=xkgEbB*=nSZy9yO~epZ|^3cgCU8tH?t%!7c8yJBv_jyaO%8NEPlR)-+9T-ybMYN|6&irMa}sOOF!-x zd&yTXWU|(e5K*`7F2)(|0jpP=W`m~3Zu1lRveJ6WWmc;nFDtDcUS_pw^sAyD^eY$8 zCbs{o2L4wbU-gQ@ce}zK3ct9b7L1>-unS6+-xR*fZ!G;<3xDc2mcG(eMc?TvOTYT6 zeE^P1!D}pi>@{_|nRkt)zjaMH=4;nk`hnM#{M73#{dEhU?{}6y=66Lu`*)W9>hDUw zd^dRd8w#I#gQdT2W&h^6$>O7Ls{SS4Wc}yNP31q&Z?gW=;+CIRH)yBx>K(WIyc(Kn zyxMhJd1c4j_S)=g?&K@wVk*bRCD`T`mhYV^Joi8jc$uIh#{u(|a^lGBU$DVBZ%Uzbf-(5wYbeE++eOKA*DNo<*o}!Px$I@@Vr|2)`BtJQsAWlq4StXBP=D*B|SEdA-HivB52-|U&9kAKE)c)Omd4ec6_ukl>rdp>97 zuYIoMr$1-)FaE;Ms%^Csc;*Z9x$m5UT*}Lwehz#e!<-}sa~zp-+JR=A^OU0%&Fm(z zh_`dpV!PcW7Z>d;eHDk}--nrY9d$EqiNo>l!wfXl_(tALN~`LbSgj^yQd+IZ#A@}x zqAwD_(#HfS`lJAs{!D-=KQ%K;-XgOikI&4K@5rpw|1~pv#;=;iVZH&QTNW0-*24e5 z57yOAAxlDQ=`%YA`qoBpUAe&`XG1Or`q-`I{-s@T!>M$Q-|HR`f7E<_5g;@Hv z7XD`*U!}0ayo~Bmn5Exn;eX-r)ru(jeTuO3TZ<_E*LZxLqK-H6z49)XoON5ZY9HC6 zL3I&P*1-i)>?*1R-Y&`-G@_Wp3@cA4#wv86n8UoT`-{gnDX#Dd#d-STj^^fSAI9Qi z!xa5o9)By$Vcvu(R)X_45nDn{$yp^>{#Q#V{&`BW_xJrs~S1WvYaNBRhn$(@gOOm zC|=G{2qo1n$1;IN7|A3GmS^#?<*n|P=T7$D)GE zTwrzSRW5UN(WO_p9se!8%5D0jF1^ZQPDx#Ql}G8QNw4xc{(E|rSFvK>fGl1BE3`GA zeKn@4vId`hb-$|WC7*p2_onJ4pM7=jO(mPpz8Y9fG1p{QRdZyRT~*y&MRnO#)h*e4 zc2x~!HBEL^4aa}ZuBxeep~bW=}?-NC5x_2l@6K|sgq5uv1C)AS~auAl6zmWIMhs;pM7DnXx3brpM7Jp*l(fP zS0;;kEv&&~)1$VxP@|(skMgusQ;ko6TG>+dj8A|n(MqBD1gM3rtP3bM0V<}oqUIBz zF1J=a;}f8|w{iT}1gH~jR44fas3vWd9_-tb#lE)6|M~o=h<1va&wn!7DcOAfQtHPWX)0Vk_b2Jcc9jxH7_Z6Z{tNVFR9*-+wM7iBd* z6KZ%@(`vd*s0Uruf}_cVdas+pYcio8bTh?kUa2hJ@2==InNUx6Rt!zsFt*-Jjd>72r9GMwItR?IaSPA3%J$7eXT=xfT> zyg*s(Q+Q2=)7$;jq6HaF1-W;g1i=fIMS2yx6W*GcC$+yi3-Sq11N$px+JvXn7-eWa z->F}W>Wn7e>4L&*@|`*lQ1bbFr(*-u`pxG%H5#adYx13TD0~L_PHhLN?&OQrg~3M_S0ldU7n!)Pm?tj zIZ^4a$(s6cqOz|hYpT_U%6^)xsY4cClQq>~lH#w=nlkO9$$_essPxz5Ky6A?_R-`( zxh5<5nwKN5p6oEAiS#*8aHyZ6j&k}$D7ZYBsv7CDq2NUhRwI2%l<5xoY$y|-Q6f~f z=}MD~5}~G8jr4Cv&M&ehS)BMBCrpHzVl~pgC%J&gF+*|6C=qI!)hMGxs2s@_C+%yK z3y37EktPx9L9%iiT_RK%yq_-RBgZ6M8#FIaj!Ch6i_eC-oTBDVkTx62987(7llkmZ zli1XGmYN%y#HH_NDg88wOAUM$y*6>Fu=v@h%&o~@ikPj0WR$&hbhcum$zFnYC&PQv z=cq;*r63)(8tLDn44hIePW-EsjZ`%-niM3LP<_&*AgvURLFT5xryvcSYx38mAYD~x zp-(}|FGhW=`k>E4$}b*UjWo$fQS;1>Xp)gmTWCHRsoi{KCVeuJ`KUIdJfxuu%zo(e zkj&@nniQkRh02tCcF-Ax&M?I&evvX|Mkz)&twx#@qc&-3vS?C_4y8GoqEBR$T{LB} z(nOP8bZ4=0yo|DoCM;1*G}%QrmMD|)*+ns*sHIPnU3B#mHR>VS>>_x#%2K6+CdKIb zQgtlRq!>jnQ`Xd{808m#EmJ}=N-;|KR5i*d#po}qktW5c>u1XDDSV32$=gn#Gq`x{iBHMu{3T6lf#54?2@-l>e;)h7U%R{)E(xj*KO(2UZ4LN=+M zWR&(Z+iIjw`!V+-ea26IF?X|)q)GdEv02$nllC**P=2OK`?+qI_to`jKX5&=Md_f= z{RtIWwyH*&1fbZhN>NP$(B-X4QGEgs{FcL4N{A*4=*(Bj4f!k}`F7p>7c(JZRTwzt`Gm;^(PGZKt%k2|9B2Yfs1WPhXLHOJ*LK|zz(wqM)cW|M!7^+%m9yAk#< z=3-X=GJodOH!|gH{%Ui`_<(dczQ(`(F%xwb@!Ldw_;6 zN1``VqBkJXn>o>&CDEHT(VH#Nn?2E+Bhed}=nYEr1}A!RCVF!vdP5Suxf8v461{m7 zz4;Qo`4hdbC3*`adJ86cLleD)61{~Jy+sneMH9Wn61~L}yBFXDZ}wJ+*;wUvp#@FH*=*yZi=&P1o;wlu z6zVpxzWire&StZ|7rRDW&MP8UWXoLV)ZL;;+U@;j+PeOnQ&h0GckBuMVsh76! z`4Ia!xFuXT?XEGv9w18PaTfJ&2>iz~-$jVRd7VvI#KyeNHvWikr!$`@o6lKG%*pRe zUKBD2r2U!C*}%V@R7*_F?+g+XZ&s-%-`(FVbxiL7QSLQo3IDdhGeU^hoH;Yk0;5e7 zGjltqim>Y40z|a}&T9Uxk@JoMz&R?PGdXQ%_hFzy_kzwR{tcnSb;RA!J^^BRsFRrc zRH(CV&WfkZfwE<>*(xT9_>s;Tis9Bm&Z-_nZyv=gY-7loZWI4Y6;&Z+>hy@<28 zKlYoV&IY1NQD>+>0<{n8-aSAF1`A|8Sc>q&Q2}CLF=rV+tg)z=bAjFOOCc?9Obv5Z z;xKhZmXgkI{YldMIqQj{rD#7}FY(qBl}bCe6N>rZ3gZU314Y9!&Yk{PP@%3k+}0H& zdX;s4$zuDKa~@<7xj^wc;Az+2 zaIPm<+20$LoCo|7vPVWh6=!9CqZ)w8;{T=SSpuX8m-Bm$kJxz=EVJ9~{Kg-9u_KVZ z=m1td>!Ef->?JR?0uJA!s&tfa9I{k%9`+Z6`jx8g+~tqhc^fpST7x1`_($74fue0q zsyJ#8Rf}p6Ul#@_t~TRYY8=Say12sC(wO&_a}hDB^K0NW=4()4cDVB^f6dWH(juID z{167H5I}gLWACfyJn7e3phw-RPkVv}c+!Be{v`037V}(z@XIGuEgXWyJH0`|+n72w zj>C>pFyO75&;du|b!bYx8xaGW(NRKaqnkT-`*#Zw$t|3F{SZdamd;beIv2CJVWDsB zJml9}gs%g{r)`Ll<)TwpY-#KK&Y$A$H5jyG?WhBwJs0i*v)yd({F)_u)PY(X$#TC# z`JpLGbfP+kjRXzqbfzPU9@DG~m4VLjQBfF`!Cjr3S=EMjqZ(jW&us*OZds6+;w4Zl(2Z;?)&Mp4h;Ci;L7u5#I4)&&V6)8^lp%gfYuSaXV z>TzE(xCT%-i1VP}k}<^91bS7q0gPa|nKT+mM+jNn{1g`Jo`dN0Ky05_qLz>YVT>8< zGNP;gg+5$*`P-l_GKq)#~CY zaL_SRHFIz~r)15yM8FHaKn?$E2_T%>%bdQjTwD7n4z{2r7*;$)d8mHCt6uL_w z$HginxGY{eKd<<5}G)KdK%}q~`D4oj8&YeJ3LD1PAF0EW+F6Gy{ z4s0&1J|>%s5jKz6!EyB-KA-Z(W5T2bls|g${Du57W2{)@oJIPMmYTMhx(f1Ixr9o` zy`y3+SV;DMLX8sk$k|f-u$1l&=wTO@@wy3E0=YAGJ@M=_ssZX8w1O@l=qMFd(kX-+ zSG`qKI2gX3XtUaR!Ov05?SA|k&D@%|mN|gH$-!9rxpM}wF70_4w`J zBwII-*5<+O*hc3ze_e6EJNG4VD}g)i+LEwDJ>5jNc{HQLpj|}&D!PTP5}sWenpOGqUd9&k0_ed$Dg$kiYd@WxxWJeBjta+JsoDWbfg{xXAmeLtjqP!Wo zN1p#gT^A`rPtj39;jAJDIfDIOQC*1}>v;nI34YIqyv3 z=-@i!BDG0)7EfKV;1XrnIv7sTYk#3V#9ilz!y72lFFQB*&rtNS6TdQK(v^O{LIvSf z#gpGOM}mVr;J9A$8X+^l{d1CTqV-$-PNkz-{cg}i z8QX6=ClVFVGiKh^NLqbQBMC1{j{ZUVX>Jhb|Dg+uI|A}(@E2c2bo zQQD()c~w3=-5qFLEavJ+tc|`jIgBtgfFYe^DBdVZ9SqrgU&=-9;9@_2E$t!~&q#4( z5A-unS&ey0mvhm3tMYK;DNi-PMWf-u5fXWS3f8dcFn&g0m_>2J7>`A-P+`?Zw_ ze<4?QV_#+0NMc(YlaHJlhfQt$`*EgAKP=08(TD3vH5;a|0{cUGmO_9aKA|nXAWNB81Y9Mc2 z8lB&A-5}ORBg_uh_)@l1=<9|E7rBRSdTw1hanN>u)^m}2%XsBbxPj}8e>YJB+)LXw zbdfvTi0#&h>W7{i*O;!sICYDL!j(-@6H10gO>0V*D!jJZ(TpOH;zD!k!l>HcEnMuQ z93!Nai##t8xEO!bni>Jkc5W|t!u~d{O{|IFkrJ8LsKU?fG>B{MUF4QD?(0DvUH*^3 z3>Z;zW-zw`cP9=1@XnM!TB~yxx}>3R#&xBWK=#2H+s(D6vVXVnnEC#6$_rPOnMsrv zN?$UAnE+DA=gBV3T@F|y$eM<>T|AQ?Uh&l|N`VW&As^KjkFu9$yZ8rkFXm8vaf$~E z7yB$u;L*rEmo8~&bY3 za?Kxn+tW|l7=4kKTN(UA- zX!sR9_`xH*mZI-AdPc|NZQR%7h-R*7)3#GqQiieU8<*xzN77E>5CZ!T&+*8`1{!|T zZi+w(IKUB$SvvqZqhi+|?xSlkj(XPpR0b{{#lNGjg<81|Xei+LOteA@e5}{!5VbL? zHs~;KN-_QjMaWwe#+;+BG~&a^>%(-?O#}8!dLe|ZR~@G#f~(B76SVKv{vIe!{Xma= zNOt8%Y5)}U*H5%3I9alv(ohsUO*&#a-j=*@qH_OCPmd_*%`>z|h-i40?AQXQQulK% za?@8HjSP66_dPK(E;>^$y8Q1Ln7Vy_$;Cg$JNgT~5<#`#F&?=@K}4P_bg@80<=^O; z0r&YvSE*YfMUQKg0w>FR*XcTs9h~_)Wo16IxIqyp1A`4I2sEn<8F9^y?P z=0#q!?oxem*24q5K(YCr#xeH(K~+G0zy3+LUx`S&TQCIz#T@r38jqPp|EA{+yb`JP zK(i=ze8{VicJax0kTmL%27R~kI6yCYOm{!*z=|i-sm&)DPnrEeK5+Z~8AV7|#;?zr zi*bpWGtKS)Ku=y`wiLVVZgR5#w}z7rH-FiEGn1Q~1<`KL0^DSM#8n_T3t?rz9c_A4 zz)O?ZH{?+vo15I%!u7mKb}9rXdgmNOi22wjF3?Txtbs}3nQaiIzyX;R>?V(YapJ(? zBGC9cr+WnPY}`^J*TQ5-32~DvUnHKBn~Lk18}9I}&ciAQAv1ZYrNa(+;2~i?Dg!k? zmETP+MR7Fmzvd=KW!$@R6{NzgE5r-_7aS;~c_BAB?joXZVK=$EhKLbG-2RtS0QkIa|>eQf1U@3xnb^gtZrWqhFGd)CEVn$C;A~g&fDcrX0BqT-2MlDBc-&P zMuwp+uau!Kh__hom!K1^UhmSiol0;J(^KgsMX-+ZhD7CKIxv^f=&b6 z24o1Rv8<&#nHU<;@Mu0zB)6u+iQ@3t*k^6%;)+iWSGRTZ7awr^3lhiMkv@HFT1MauP z6MN$gNO+h>`iY38Q51oT^tN6EVWjkS7bN`AT#x$DwHO!a?0u=P;YCc*er|G`374^2 z{i&lP1w8r+6zyZ^3WjEk96-s?nFbA{OB?R25E)O-NyzG>SjtMS?Z(2v?$xCKC}eIt z6@oWNRu7^5M;{7M5W2(7`1td&M+OP(uD%G zf`^La)N7fNTq0mV%EBb-F^E__L$l_zbmY-6jpx#19ZtS?KBmIW=P~mr0*{W9=Q9Xc zTE(ITWLpuqz7N$xw6EIKKlx)Gg1^}xKH^V$T3u1z|BRv9LO`H zeUqDih*)8>n}3Md-k{fEsMUZi)QpH2v6UjwCnkSI{S~KI+BQ0c(e>AVO%Mj$m(>Kt#`Hj01LF1i~IXmf6hy%E37u5@Ua(FjANF(C6JrsfKx_uutBRX-VZ%I$g z6$FltA%exE%$~K3 zpy$kYEycX7p3nUeiz`4F;M{CfhJ^?g>$7{f%f1M)Er*9Y>LVhjxE$!&$Vz({4Ds%N z1bN7axo(jMo2CXeH4x)fC(1!Lp)?K5W6b3hwRuE0)oHtP`e}cd|qA;0f=Cc zDL=IdlI48OL+<-n2uNTn;2~=_V(S;wDA_C2Lyi?V{7HpDjfsUkB;dos5_jrZ)YD2V zE#mpYe^dbR)c-rwYJ8X{$kqi@Gq_?ttVm^8h+vVs5XFiKnH)kp(Gu-H?T zO2Yx!`6fdqI|qnhak`p@?5FA)vR`V@0Y*VLYicL}5iBy-rh<0XrUMM$wGxHjqK(lw ze5vcyR@Y~Xuh$Yhlce?0|J&v8{dF-3BGG3 z&NS3?=~N?)YJdn9_Zm|&RPA;XN@gM8_GB}5I@J{+Er4n6<{IAvEa?$4E!0vY4G{29 zv=v>;kZf#g4H+O{g0!K1!$Dcx4wx=(>mhg2Ei6$I5v$r$X%+$|NC(XzpLz#$Inhxw z$bcoghn$XSVMin3{_FG3p6ud&Cx-Z+HU_l$JkWowhj%K3i^tKPrv3;Bi>N2&^!1Qi zL3mbuG#2v6zv<^8k24UPYakfzTz}6lf2N4N6XPLQ=@uD}s4_^SMvGXUl@UAGbCS$W z6f!5C@G<~Vh_uGV?&qPJE&Z=y8br?F8btYbDFS3fh=}(*+OoI)K_UQ!reO!d^s>hH2>soFC={?F%(kXas0xMMFL zbI_Ojar|r#xjl>*Gx*YqxpO?^xhP6skV?l1r>7z4xmU)iiQ{vL=a~897e4lo=ZRME zb71OxGM|^j#SR&8ynj$)p@%##9pB5_(rCEIbCZx@KPD`u=UKcx2M?eF#V1QB7H>!x zpHNA7BXnyIcyM-hDYY6hUDzG4HfLkAPC*jtKeYiSSVrM&Uc=bn|krKhYT{%T%;FIrEH zjN`v?1DzC*{#Z}!+vp)TQSdRutuJXua9EyfA`6j`zFBv8Ex(1>+l)$Ru$9^aRo&4J z2Dax{%n?DF5wY)XqgR-CZx0@R?ed@DI4tmP7XJs_LPiD}pMT?-#u*th>vpo2z;(s4 zU5t_C{NJ*huEeO;u|2e}=){-y5?h-7^=KbOAVu!|8di{Q9Vp)Tjz30-+6U;Gg%2s@ z%~H|vAelx6#97cufetYIFjWB&pmdO!d4#!c1?w2|j(QgJmY$wYEsdkL{1_cIn3wg$ zw&PRoF#fKNk@S2;e`AUyV9uh5r6YR+YZPfG{?J**HUDqH+{Z0@@ z>l@7F9I}CzG?3d;cms6bE$RVsZ8Xl^_VgpB#_5T(aPeJD-#6c*w}McGAO4^!;DeM~ zf6{#hDYD%6kbp!)l>M8YCJ+(+fC|TlRgn+Lky+qP<}r`xyhK)WA8UkfdEy~Sfk<)o zDV=_ZxcN+DD|oL&kdgC+=M7?LNjGPj*Z;(3PLIWQFNyO*Z-(qu^;5D!RooFMyfS2By!7Zp#C?j32E;S2zFZvrC?K+^am)zAw#D_(^DLoyN>i7@ z`F*R5mmKA>Bls9TPdTQWa)is2_mU$MzM-Xl1uwb3kNldx&ajfkzxeBW0itI`FL~O5 z&srefmCOa?H@1?OK2ZUFMp9+(8sfx20*5vywI{mK5*HC-#Jj!pVjB-^kbgpNjL4Vu zUH3BlzXpW;O*+E3BNV7c1e;lY6{=GTe1!LQ4TeI#da+GSIwD9BU5kz|BF5F$P{4EE zK(VL}wXau{3&rM{QHfcv$9 zX1-#=e~w1f$xvE>#?(aUWX>jDa?y^6=1nOAqxfQ)F>8#xQ~PdnvNxDZ^yC)Q22zGG zucenJ6XDIFDXke^axTqn8YsSQ%a~2hX1H!53k{xTPqx>L=x-fJ{|$KI z0gdOw8B@FyS*Fb^nOdExVBBxob)h4ItYW)T3RD$dr32yR-Ix)UFFJ)A0{$BXYGA;9 zgh^zzKuM64#~WpN6yasS-4D8_;yo()!Vd9kZ>kq!@AaWV(803xr6Y-(Sc!gKa>o$2 z`bPcfSmE>acVei6;c;T%0J@Oj!E)+Ay80j@Z4l$#((%^B@*ZhG%sCBb!c)$~crUqY zh$9L4q=90?5W0`xBC~ZU?G0KC0`Z9NU)YRgW4*J8|DvHLkEbeGfyQvh?E^2lu){lU zt0&N5!9&OQ6Db0B&p$sThi3yQG?%<(CzF1guQ91Lg?b}S#LiPSCLA=4Zc%8hQPaul zWZqX2Nwg10@zo4Eu+rm=Bgx)j#J)J>GgGKqcz5*EnbfV2V*4yQtx)=LpO;+rA_W9B z2Byv-sx42S<0VSrSdwV#=_8-g z2?R0gEycCZn0-`U-rQJDDXq;*T+K`K9$SSIVMdp7!`Oj4md-xS^t@V;C zf4LeMk)M0%LorO9oV?CUZt~(z1Gy>w3$&54!K-;%_IM+`wuTXDDcqa9khXQ zXT-M$8G$>z4ak&4hHxQ8E)~&LH}0aYiaX=3-4ubWj_#pK<2rG5FP(^pfPE=Y+6panonfK~vl0onkx1!xD*9-sq2 zM}T(#IstSB=mO9cpc_DUfF1ym06hVs0D1xR2IvD24bT^$A3%SA7=Qr)0|5pB!~zTk zhy#cR7y>X9U>HCGz;J+f0p0@`0WcC^6u|ocqXEVMj0G46FdpCofC&H-0X_tn1ds?Y z8DI*)RDfv!(*cqIW&k7ud<2jJFcV-FfDd3cz#M>700A%;;A4P!0P_JB04xMp1ds-> z7+?v&Cjd(UmH~VU@EO2zfE55M0agL523P~I7T|M$F96m7tOwWtuo2)(fK33K0StgG z09ygR0@w!dHNbX&Zvb`x>;%{aup3|xz+QlT0N(=a2lx))0Kh?jLjZ>XjsP45_#Pk~ z;26MhfD-^e0Q?B>6TnG;Qvjy{eg-%La2DVkz`~`3y;BSBj01p8k0XznH0`L^z8NhRZ7t{M3 zvVR013x_N+$s#}&nPrhh7FlJHO%~Z@kwX@NvIvqzuq<-QB9|;eWRY7Id1R4S7Wrh6 zUly;)qJS(4$|6)2g=A4!7DZ%HR2Ic#QCt>bvM3>olCmfzi_)?vBa5=KC?|{ZvZx@7 z*JV*r7H`O+k}N9AqKYh>vT(`5Eenq8OwPjI97H`So zZCQlNB0?5*Wl>KS^<~jO77b<5NEVG{(L@$aWzkF)&1KO-7A~KC+0GMPFI;lSO}7 z#K>ZREC$MAkSt5VWR`L8 zlRx8v)0#r1PXELwK7nP?9|Rg6@I&p8vjOf3*_K57hr^D1M?Izv~ znBE{;uFb*4(kgdNvWHh0EGho2Usw35^FJ(Gyvi~>Z6Q#Vh2HIjzg0Zf;Ww5#O}*PC z*XF&g%^sYDZ(b4~_y>Qtqlq`t%60?0R7sSWf6E;vN&m4+G}QjFOQ*C+Ks6lXK7qe) zRM`ZUGpS9kpF;g5sW7p7x+t9{r*-U}WWNs7;XRV<6{`<{pWpJ6-2=XQsdj6qP3;~8 zwwvDl>HY@UlQ(2IeLOmhPIRVJumSO;Un;h3`(m5 z_{L2WB)%jNT`T$mF>~b?ZOm4O<>v~>hhe*2gr!QV~*eZVyYwDF;n;T@C-XW;()S!JO!T+YW2-_;pCx6gu;!gX-hhf7v=du@-%%A+bPcNWP7smBXxz-F!^!>F4 zSiX&A4JHCzmL;$(jAec-b77es%S>2413P|y?E#keu)Klg6)Z1cc^b%cl z+7Ybm$8r~z+pye(O0q_vuIY0oIF9$#fz-s_S z07?Rs2dE6-1*l&Wig1920L=l~0(1iC0ni6v06;vzy8xpBCICzUNCub{lNHb?JrXzk4qd;e*xMX1n*|BdE*O*!*X=ErAu?R{fPP z)&i#1EA=g^sr(ZF40ij~4?^AP0F#1yIc#>@1wZ^XzxrOk`dyHZJ}=d_+cMk!f(Ftz zVNJ*SBR>N8@}GZFAt%)3c$@$1wpvh^V{g?PLS6cSRc`}z=@VAH+c@|_I*9c}Kd4J* zvFbyiE*;0JkAb>$BC9?H>e8XCx)18oxvcsks7pt)>Z_nGozAL{+YDbw546764Rz^_ zR{bc{rDt08pP??D)T;jmb?LBH{ST;1=e6q3p)MWSs^@@pS~|6=kF&i7Uq}zP8kB^( z^meOW8S2vWt$IzU%UNL68$w;q2&>)}>T-5ib-7K*nPSxkKwZun^B>s%UHC#yA*;az zsLSbO)svwvrO}ir^O1L$ZX}YODGKi3fo_RQ);B(}8}4st3c? z7Y?&%gR19&`uOZ2wqdGXSmHsUDNr9L1-5_>Fo|pxRf96nARPp>RrNQZ-Wn9hr|Pw# zE)O@b-P>}*tO62gs7-}1y5HqN9Z`-h;y{in29y&OBP?h*WQ3-wH zhQ?Nj8JrM3bm;K-gkkby>lKl%mog(=FJ+F4biE?g^@>>6 zD{@`02zI|B*!_xN_bYaHJdMRyU33enqhR6~XRT1bbc)>~WPGaqp$w1w;iz42w>P?DLOPq!k>LWG_{+ciiy73AXsSp$U<_ zMkYi@#tjDtum&+9s@I_Cw8qe|dhX~Ey`$q3V&Voz_KzCeXHfLev~lqL7;*H|Y*`k? zCfP$Ogav`0TL09_RRZdAe#xKmmB-+)A~st)ac^xv-n8aG6qH4tR}+e)^?=Ij_Tp(% z;cuxd#lxU=DVbST@|YwS--)&dq}`Q-!Cv?}9WFs&Pqoz%xfcc$&Kv-z$lKyl zWRFsr|EK_RjG5D-YXv07C)tzZX8=KWHiMPbe8Qx>CQ!2)9)YGS9d}Oqs7$?+z>M2V zBLxSz5~FB0_0EEsT6A1R++q|FZ>&MNgk|1={0Yc&IQIebS$r;Q&SRzP&BE~+HY29q z4H)(tBlHAue1D#o`K(9oV5Q@Jz;PZn#xcgkW!}9x!@OVhJ71xu5{7`UHYL(8HlwrB z`BCyBJBO{~r$D|P!!{!;?`LKFWxO^1G@gvNw||FWxbyS-ANU~l;QqSmw>(dY-SU00 zJFarYR^10M_^ZAeDYpgma1d+FN8NQDNfbrL^>*#1FEr;Q;Hjtb?_{z+>6;)=cbq&Y zhmf7r48jxONmdYYW|FKRyhuNK2n7kk%h;1%2H~~HZng}&C-Fv*k=s;L$;vV??=P0D z+ygK($0x6Vv-PoLWeAYwkHC}sAbbj*k>2 z^)y!3^+)Y_-mdNX1F79~s+IDR)QYvrQmHPbs#9)A%_&z3Qn*ztEH>`e#8+;6t=aOF z@&=kHZ$o+=)r4!LBGmRe-3UbELSJ{-i49%9J?d{LZzP5KLb2H>mSw?Nb|RoF#LC9# wcy6cZcYCrnaQj2i_EmS-Gni#lavIp;$DxI@VBx~~Ezus$2YzW6z%yw4UqPRt-T(jq diff --git a/obj/kernel/kernel.o b/obj/kernel/kernel.o index 4c9546179a8f865c05dfa0cc86a35fbe1ac7bb28..3f1f6737f73ea2ea0a58e4411d1304157666cd5d 100644 GIT binary patch literal 3272 zcmbtWJ!~9R5Po+KP6+kq@FQc1Ct)NAUTP3P5Jy^7yqZ^2*ZWZvL>-MtmbuV2+a`>Yo{3T% zGRkTcq=6p>d#0`1flESvpk2S!GR|%G!*FmqPg9LJ8Q7rHP4#^1f;JaZ~w5(&`ZJq zGIo4x{U{yCvLW$$*JvD|4uh77oY5^m(i?!qeIWExz32vR@ycpr`D$YsmmtM~0G65_ zHt~kB0AohGxNlpqzSbCQa=FoXMbBTpdh>#=*1W1$p>;R`TEp`YJP=i7RXRY7r9?iT z^(QD$+PkhwyK|*8QzuV-1i?ALpXC^7^tsPxh%L>`y(D8H{oG z>M{5&z_ITEXq0SSK;MOD98c#MeES$&<#)?#sdm5D8#Ghn(k9#=J4oUHu2CLt?&Q}~ zB^JP@OD$U_ZMNbtWB9tn(-El4Cj~& zt~0*+Se_vR&)`XT?jPoIUf^(ahWPV@GtU(H6_GD_UKP0HSt{`G_%4Zj$@4}b|4H(B zzl!6(BY0$AzreFV{-(&6eXYPH&p_b#3F38on{ZyAi{!s2@+JR=0+;-s6nI`I|5K4K zc|I4on6!(3ylqWF%SCs!HY0Q`VHAVSF9!>dW(D<;tNCxBlj#w|?2VCH}K`-?; zln0kO*Il-(34Jd$yQ%Wpe(Ec4!#U;I7#&QndesNrmy`z|@$B>KMR97pPSp3{izOt-lS-%7*%|EJbak4uDmD5Xx$9IYS6csO5$~A;(S=@Vo)VDY&kbAir{_?sp@F*B#>#5Nm JCz3AK{|!X1`*r{T literal 1900 zcma)6F>D+~6#eHjiHRYE1OyUD3?YD{$ZPwO1_}r|Ok@-pK@wsRXtmy*+)cc@vznPZ z`;ZWYX;MU@prfHgg3>)mL5e7-k{Z!O0u%|+(12wA+nq6MH}Ivo_uu<}{{Ef&JD)6H ze52FpP_Pbl>0d^)^FR|hSHm35(vgr_$g@r+h3GBzdXac7&qW=w!bmI4SY}cEr(PZ^D=MQ0 zhI1QttTKMc$;8epdr~B2CQ2>jR>d2w&_<}D$`xm9CdMSCo3yvpMK2GfKvN=DsVuD& zX;O-H*7S&rB~C2ZiCwt3(qCTfFXMe3nqbYz0uPAxVhS-StR9(^57S7A2VCg)Ulwy0 zRB5!1@HgTnGs9M-TtT#wyE>=8;XzdAJ zohhQH8K({ry$C!^6nP!rC-hgmzU=ikz5cf6?|Pm9c|UFu)GfTe<@Jw&GekHS#Bccc z=RW?0*T3}o*IvI3-QKtU83K>`HK1-$Yb%R*Z%_N{-<~#kaw67{HW(A zJbx1SFyEQT=l&?NlfotIjLtMT44#pBgS4YLM&ir0g@&hvu3K23yo!7Cu0Y3)DnIUhl7X{#25K+mv` zz5kWB==by(VW@{$2!?uCxX6JaZ->b&1aIgMbk!s3!oKC%IMKNEFLJ`-(4O68@-s7> i0cv64Y{0`iuuD5kZo=^vT6mOsJMROY9ene_Lf$`QkB=e% diff --git a/obj/kernel/platform/drivers/ports.o b/obj/kernel/platform/drivers/ports.o deleted file mode 100644 index a5820f9c2cbdcb4cbf06958fdfeab740903f0191..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 680 zcma)3O-sW-5S`efQHt>cym*NqT0s`$$Hj|6iM@!o979dognCFL$x7|1XOV&je~Pp} zAiu?(8>Zupjs#+2j!#IA)OZU)Up43#oa05*XXG`K=B4#2l4hiT#P7rszL4d6@O-N? Nxg%_x&;|w0{Q&WZP)Yy* diff --git a/obj/kernel/platform/interrupts/int.o b/obj/kernel/platform/interrupts/int.o deleted file mode 100644 index 0a99241b4089783cb61db7fd7a126cbf91595890..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1200 zcmah|O=}ZT6ur}=T5F(bjBZ2>iV~?jn&L(mS}C;=R78lbO325A4CITM3Di{=L1+j{ z_U?4&T8b`&NQwOm{((XfH|_+5c+Sjw&fvxach3Dd@7=j?-t2BZxMx|G7+8{!C=$sf z!pe<+^0FwWj5OfV@M!Qo+oXT|dp4VuJ}$r=9xd%}E{sa4#xOO_ATfHFZVa>2G~CbM z(%XBf=~=i;odbVKPO~66Xp9f%Pr#w>!|Ws!ZDRZX0_PjkiIso6c>>2}J^N~hkkUFo@yls(iSD0{YFuG?PCb$Wg`OgS9~ zi#->bezojZsx4b;-G0YsE6!)(uB5g=rim0mRiE_IPs4l32s9Lw( zw!_h|W diff --git a/obj/kernel/platform/interrupts/int_lowlevel.o b/obj/kernel/platform/interrupts/int_lowlevel.o deleted file mode 100644 index 98f9819729ccd5f2ab8a6c189699a2d00e5536fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2240 zcmdUxJ7^U_7=>q&7$ZcuQHuyZNrd}mH7#Eh^T}uB9+|HOnw>9|N^k$)pLm4w z9@K(Mpn7N()Cg^WTA@y;2igYhg!V!QphM6AGy;WC1WiDvp)=5V=pu9lx(?lj?m-Ws zC(v_9HOIk3teT6X#W;#HgK(2sL*^(5%{_AWUuE}8E>x)>CHDq7xqa>cvV3=Y=42=P zk>%MtIT&JdCV~DXmVz$oiPl>MV?`l__0*URgJruffO~n$qenjI5_AtscY3 z+M3epC5)`IDXm_^$eNqd>H~~CgDI`Pz{p;h(&{^m?29R_e!~nf$@4D2g2{fF(y9(w z_Ri*&$g+<%uSb?WwYdXX_SfdE$g%UQDd0do0Vl?Sx)>?JS-J;U{Bj-{|3su&Hm91Wse5VjP;Ogxg0 zvMpn|IEbS0LR=J^4)Z6%;5d$9rkGX1#86O($MU)KXeKut29X*oM(JWaKA3Jzte03n zv2BTMPi#kGI}_WL*zUw`PORs)bNYEsL(l2xIW0Y>r{^^FoUWeJ)^qy$PG8^Y>pOjY zr?2ny^_{-H)7N+U`c7Zp>D%V?ZFBnKWf2D4QS)xDXi!T2ZU`5XOG$bE%lK+?9VvfP zWL(aRu#4P6_K~~DedIy%Fqt8bkXf=wPLflkyg#Jh1@aPkmApaTA@7rq$fx8BavIbX zO1&ay$T#FW@;&*H{6u~xzml`$H*${rN&X_|N%@tM{#9fRSxctKWn?|Mf?Pv3l1=0$ PQvOen`P<2EvWNTwb}hQ# diff --git a/obj/kernel/print.o b/obj/kernel/print.o index 30f77e571a811c6f94346d04fd06b516f7371739..91008f8053ab6de309d5a400d30db65035fe9234 100644 GIT binary patch literal 4984 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 diff --git a/obj/kernel/strings.o b/obj/kernel/strings.o index b0718e1d6d0f21da1139782e2e2c86fe90d02bce..07d9acf9e251ac0fad5624a25b1a888fc3cf113f 100644 GIT binary patch literal 1848 zcmbtUQAkr^6#nltmvgn5)`Uf_BvPo$ZWxpdyGzY0WJD$PP}E#^D!9$IyVye5U@mqM zVUIob7`@cfD4(tlM8Qn<7QOV4;Oh*^2wdmf{r|jNq=!22-*e7)&iT&y|1*{zx^dmY zafAs+`pLe>P(qT8`?jc?B55HuGN%6WtG^|6=jZ1Uwc=m=xW2ybkUk9wnxt;s2^G{; zbz@L1jbxX&5y#tQe^%q9rR}Z-Uxusp>}6NH{`}Lbx}h#*_nOn?q1>00eKe?DTWPdh z7+e^zP@81>h;mt23l$`FRRXSz&qfm8bDGj6y%g3Qoy1Y>wKFhR`sTBPhY zcV#vGO`3nWyH*N0ItK~KTqR1sPzGmCzlEf3O4()LbJh6H0AE?>v%7%P3Op`M$lI+t z-DY~L6bkXIynuY}MSQUuKjWKqRY_u}R1h>{I?lf<<*G`Dl>4Ey3FU&LXg`s+JF&&w zTB1@i=YK$ItT+zgRzY(V+hGum%ipTbl@k@DaYMu!GR#L5Kcpk?VdCF?GQuZp5G>1(#g5)*24uz_5gMg10Zkk<3H+r zVR>+*$)9bo%tI1DPBleELvq_EQx1n((s}e@t-^d|l#7Y$`Gl=YwQQi3SL`G5Hy) zX*q%_IFr&W!iIw7*94nn5F_xt`%Pt*(-^KfbR~*t;>T6%6z4Fy_Haf!wR9`qy0l2fotwLI3~& literal 1100 zcma)5-%C?*6#ss=QCC}Ctx>E-tRT~ETK(t-$}y2!QEhA zE`!lu(R0M5r?|S14Hkq*FG4}!h}^^a0SX1{oO!=$z0`rj=bm#u=X}oDy;~Z&bBj_+ zgi+!o`w<~-=WeCH1>Hm{e&j56NnPU~w~pCzP?ycYPTBO)yswl0)K>th{+V81 zN!Ro@(q#C7RubIZ4PpNYBP0c7vyV5j77M5qK``+GUM>Vc&#|Xh+3FAk)DpviD@_+es>L@!ATvOi8}`#Jni+JE)HW=F{h%K-#w0^?=PIl( zx4{(E`g6X=nfFj=%dVxq8QL#iuI!xv1JnxSD!eRmc+YEmfk8vV7XlMc<6$We%muz| zdYmvUf3J!2K-1T%o`h=aUZ|s(UB?^9=zkBp9WN}tk;zsuit@SAawugxPi z;RWDv_@X)hE%2}%p91tl(-}KH3pfOEz>Y5f79k$DW0GX^Gl@q@B}!)4Yy`vk*aE_n zSOOtBx7dP2ln^Dk7-x|wKsLXNkHr&=E||2Eti?>%I9 z3;}+^gl%{$+BtAc+kYW)-htVD6D=1ZC4v8ocNsX?BVGW`I{~pUtO-9Tbq#_!sNuet hcY))MZQw!^9?5ekqJ}WBUne9E^45WORgeG$?>AaB_5J_= diff --git a/obj/kernel/util.o b/obj/kernel/util.o index ddd8515aba38c86ad2470959cc6746ca29fbb9af..7cc7d31061c7e69ba365c60d0867e9ba4c16aec9 100644 GIT binary patch literal 1472 zcmbVL&1(};5T8wBV{LTf2Y%3EA{DftOCuGmg6vXjU!aO8#e+!Q#*K+IA0!)W6l@_@ zx=0{@MsMB(Jv9wjga{f0!MotGrQkGG(T4oqg|H}jhr=4BTqrmp)G1%xPY z6}BURqV3uCb=TFQANIjg^Z6i)H>0a+c#&ZBO)#(=>}BOug^jHhH|mLmriNd*3^lA{ zy?w%IvWov$LJeO7VC8j1Uw+bNW9!AOdZIe*v<#;ebGCkci#Z#{+mDS#LuFs1ZRUKx zqlUrx3Vfif5+-h{){Tc^CFMap+_ZsCM-xN0Mr2hL$ zd--9ry;DI?ckAse^*iLj#cnFc<^7Iw{1$KF?nr*oPR(g?NL%T6u0*C_*^tWEGj?{y zEW}f(4k6Mpct>!RhcGJPVlI<#F&DH#DQ%mxXzhH*CWU8P^EPM?P1^)*wom{qo=vB% z3}TtAZE24(MJ<=l=B&J30xfUNnVOZHN#xD6CAQhU9Y89*L9f(8=kYrU4@oiIpZK27 z%dKchbt0r%ubjbv-gLM8bI7Hh;{NEmBIX|!0Jmbkuon>zpwjz#CBzHlzViS129l^$ z=IflF^fpCb<}<|T`_xgr@_;v_JPGmWjRgNVfhar8CVYj@uTp^0he|h=`2wdJuUz8u bhrA&Aylodfh@Sj*lw9HbyWPr;BlG_Oua20> literal 796 zcmb<-^>JflWMqH=Mh0dE1doB?4wPd8R-nPa!N3kv3Z_Flp9Xiw3bfv?Q|)%;=nmy! zJlwlQ4J6gO4Mg&9<7hs>*nEhw!|T80jnWU@v42j&Rg|bP0QGl=3IMh8Z}a78y;LH} zcnC#5P;-aJf6GIq-(nB5k?2ew*JTmc#HQOaoAQ!j7|N&YbD={m^`n z@%!V>8=dD4zGCjRnZ)>C^GA0rPxAqT4j2CaK=I4XKRD|z0qt!)P|4Np`{5Xixo-18 zrfyfBV=NpD%|}?G@D4(IUBr``ZnIShdH@Tn^L=~r&Fl6SH#Fym9Cl)7XW->77 z6<6k#Bqjmrk|GG50b`Y> 8)); - port_byte_out(REG_SCREEN_CTRL, 15); - port_byte_out(REG_SCREEN_DATA, (unsigned char)(offset & 0xff)); + outb(REG_SCREEN_CTRL, 14); + outb(REG_SCREEN_DATA, (unsigned char)(offset >> 8)); + outb(REG_SCREEN_CTRL, 15); + outb(REG_SCREEN_DATA, (unsigned char)(offset & 0xff)); } void kernel_msg_ok(char* msg) { diff --git a/src/linker.ld b/src/linker.ld index dfc6a97..f5b8dcd 100644 --- a/src/linker.ld +++ b/src/linker.ld @@ -1,32 +1,23 @@ -ENTRY(_start) + +ENTRY(entry_x86) SECTIONS { - . = 1M; + . = 1M; - /* MB header */ - .text BLOCK(4K) : ALIGN(4K) + .boot : + { + KEEP(*(.mb2_header)) + } + + .text : { - *(.multiboot) *(.text) } - /* Read-only data. */ - .rodata BLOCK(4K) : ALIGN(4K) + .idt BLOCK(0x1000) : ALIGN(0x1000) { - *(.rodata) - } - - /* Read-write data (initialized) */ - .data BLOCK(4K) : ALIGN(4K) - { - *(.data) - } - - /* Read-write data (uninitialized) and stack */ - .bss BLOCK(4K) : ALIGN(4K) - { - *(COMMON) - *(.bss) + _idt = .; + . = . + 0x1000; } } \ No newline at end of file