From 2da757d6a93de26064d4ab735703bc5cd9734ec0 Mon Sep 17 00:00:00 2001 From: Jonathan Turner Date: Fri, 15 Sep 2023 11:36:42 -0400 Subject: [PATCH] Completed Part2: 07_timers. --- Part2/A4/07_timers/boot/bootsect.bin | Bin 0 -> 512 bytes Part2/A4/07_timers/boot/kernel_entry.o | Bin 0 -> 480 bytes Part2/A4/07_timers/cpu/idt.o | Bin 0 -> 2948 bytes Part2/A4/07_timers/cpu/interrupt.o | Bin 0 -> 2128 bytes Part2/A4/07_timers/cpu/isr.o | Bin 0 -> 8276 bytes Part2/A4/07_timers/cpu/timer.o | Bin 0 -> 3428 bytes Part2/A4/07_timers/drivers/keyboard.o | Bin 0 -> 6736 bytes Part2/A4/07_timers/drivers/ports.o | Bin 0 -> 2788 bytes Part2/A4/07_timers/drivers/screen.o | Bin 0 -> 5204 bytes Part2/A4/07_timers/kernel.bin | Bin 0 -> 8320 bytes Part2/A4/07_timers/kernel/kernel.c | 4 +++- Part2/A4/07_timers/kernel/kernel.o | Bin 0 -> 2116 bytes Part2/A4/07_timers/kernel/util.o | Bin 0 -> 3500 bytes Part2/A4/07_timers/os-image.bin | Bin 0 -> 8832 bytes 14 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 Part2/A4/07_timers/boot/bootsect.bin create mode 100644 Part2/A4/07_timers/boot/kernel_entry.o create mode 100644 Part2/A4/07_timers/cpu/idt.o create mode 100644 Part2/A4/07_timers/cpu/interrupt.o create mode 100644 Part2/A4/07_timers/cpu/isr.o create mode 100644 Part2/A4/07_timers/cpu/timer.o create mode 100644 Part2/A4/07_timers/drivers/keyboard.o create mode 100644 Part2/A4/07_timers/drivers/ports.o create mode 100644 Part2/A4/07_timers/drivers/screen.o create mode 100755 Part2/A4/07_timers/kernel.bin create mode 100644 Part2/A4/07_timers/kernel/kernel.o create mode 100644 Part2/A4/07_timers/kernel/util.o create mode 100644 Part2/A4/07_timers/os-image.bin diff --git a/Part2/A4/07_timers/boot/bootsect.bin b/Part2/A4/07_timers/boot/bootsect.bin new file mode 100644 index 0000000000000000000000000000000000000000..3bdf9705f16ca3ab1fdbe4c50f0ae547aec63d0a GIT binary patch literal 512 zcmb_YK}#D!6n?t~(=_NV6(ZOk20isqhzg?Mu@^x>EMBCAjP7g+F*`6>L1DKDdr5Lw zBnLqeyeSk93TbG&2(f#SmPL=f>7`|GRrIKbj6=kK;CFfNd*9>ZeXpGP=pMpa z@-*;1;7H-u5VvyG5jVZW)IdgodqJ3jVB zO(cVY^Y%|UdGtHs9VziyU^=`ZaF|`rNhK@ z{Zqf`pZoj}AO)36o{`qUhRe@d{JIr@-q5S^g?vDS!HNsO*M$&#rzYh6@WIB+CI-q| zXmI4+eBMSg1TUf~Y7m&jmhmVJ54ELfMr|2J&K`A&jlA_46$rD)qO`CnDv}~)D^Dq( Iq0WAN0E(5l$N&HU literal 0 HcmV?d00001 diff --git a/Part2/A4/07_timers/boot/kernel_entry.o b/Part2/A4/07_timers/boot/kernel_entry.o new file mode 100644 index 0000000000000000000000000000000000000000..05e8c663aa6a71866904f2cb5630a33c7faeb2c3 GIT binary patch literal 480 zcmb7BI|{-;5S=w4YNwUh2zG)HEj&OPt-M1>U_me+*`2~vUdf|)48h7?TxXJ9TuTR* zH}B1xw_$VH?sq~6a3vssF9S&IVAJ9PBIr5mU&xt!BD=LF()SWZwr4Hy^n`p%k8=js zn2!G?CmJNAg>-nIku#^36SQ?D-^>w0mp7+==;=2a42W|UdpM8z{bh`Kys5JlqdX(T z`k+x^mQ&Z19a^qr(Rtj)54!tV4B=_~A^(YqC$w*r*EOz=QdP1@WreDVGhITeF;hrh J&g*#(_yO96C-ndT literal 0 HcmV?d00001 diff --git a/Part2/A4/07_timers/cpu/idt.o b/Part2/A4/07_timers/cpu/idt.o new file mode 100644 index 0000000000000000000000000000000000000000..cbc1a9bd1f2bb0748f2ca6e859b98f6464b85d13 GIT binary patch literal 2948 zcma)8+iM(E9RAJB?q-|KZjvU|q$zZxt*z9|?k4HB*4}Gu1Eq$RpbwU1b~Agidx^8N z_Cl!-rC=#YD~O5(k%APY;DbVa@$#uZ zcjk`2Vi<;KF~pL`n#fYT>zNH;yNt@PEMEQn+T6g^AFj>C%U4HN=pnrqSusK5RDO!A zM3fyg3i=*WzW-yWmlcEU`sp80>n;OtF|~Y;k+Rwsm>u%&dju!u`E<8(l-EzM548(4@WL9W}NYs+4p$>(Q%YCJG;f~cW5x;-vki51c=71 z{;z$D~Iqm{n4TNi79+>C9eJ^32iNNk*ZggnaWh&9TXn8ZJ!vY~}G8nedl)0m-Y zV^A;lGWo<-w5G&&QrYw^+I5%F7{O$Zlii%aK>M38?Sg9Fki@niAV|Csk%1lX8v~4; z4C0d<`Cb@PY*x7zGa!StC10$~FMviZM99#ypjP@mXxAXdu(35YlCV+}sbOP%Z0Kq9 z_mo)iJ&BhR^CJk}B8kL)_%UroaWJAIMk2uw10k`bSgCIO?gSPMs!FFCM>XZeL~Y~1 zcvsyv&i)RLeRz1BMf#(?EOSgG0aayD9k4~`^|C~ghA}_FBRs;i)%_e^N=b!6m`E8Kvcp2$s|?@uv9am)*8qC8aGO zSec;qhJAnia_3Gwvwz>G?_V}?v5ac1QZ2N~<+kffr`fJmn(k7X2en*xDs6G8ZxdG#bCtboW(UjI36I>UgE_)&O?v<*bA}LBc~0P1W%z>5#870Bo^M;uvpR`R^jI>_*g8#)eVUy zgCULel9GmnA4?C*qgD3E*NAT$b)CVrT8{(IwbPFeb#*D8*ud^VQ>QNI)kunLL@x0; zg*kax(pbmwb#a42KFtO$;Up3BnNfC*m+`#c#3hAi6rNMa z=b!$Y3U4d?TH((Me^vNE;hzd05z&7V%fdRF6h1?Q{eaRJh**b3r8`8-H<%xez>unQ zNMRaiBLAR5vD@bxzEcGHUKgvHd2ZeI-E+R!OOEe|U2M0-rg6zFb}EHhv)qC!;7+mV zxo?NPj^{Kh?wW*pt?B9n^dWYs)o8f5vUaoOyEYz$DctAMnQj@kS}1!?1NZj-3V&KL z{b26Q;p-cIlj);O;KPyzYe0P&i**dR9v@?PX0he6Rq6VseFi-&y50^L8UJ5#!LLE6 z0PB@?5pYej;NkJz#rW>S#_?fGd*eF@u5&=85BvI%M2YsDgswSVenKo9r( z5iTBuf(^ty0MbPlMDVdDG~qec517{c{#qaN$99$y<>?=5iVaNd*_>hTYV7E*o} z73#PzP#~{^l#g*&6xXf?>?kC<^vAG~V>tr(4RNn4PS9x|fQRStWoTXarZJB5;v1sR s0H}P2xLYJjbid&~>Dr4;9fA>mLGX%p>v7%LXSm*RoP#Z}Y0>rm1xyrJZ~y=R literal 0 HcmV?d00001 diff --git a/Part2/A4/07_timers/cpu/interrupt.o b/Part2/A4/07_timers/cpu/interrupt.o new file mode 100644 index 0000000000000000000000000000000000000000..9569f5690c192c81c1a2ca527f651f58d5decc3e GIT binary patch literal 2128 zcmb7_PiRzE6o>C5nMq>Qj9S~qT2mYU+l+ZHYN}l{LM^nGViwZ0UBrndIG0S!yKf?j zNDCrG(J4hmsGwva6-o)Tl-896+l3U7;zB_L#f2W;qGaL5l*ZpVb6-7*n?AVreBXWd zciv-iC-cSDkKWH@GA6w;rrta?V|x9K^-@=voT*E<{;$eCdE|Vm3(~Aw<^6giYQ1MJ zy^yua(|4PPH5E5w*vF#*>sbu0+_Mcs_q&T1_#|zDdnqmjH)Et%Z&NMLS>D6_uw-@) zAHTJI_}9Ft-m3mqy<2_w@SmBPnf}y@hktLHzW(A(pI2{JuT<|>liH@o)>xBFa>*nY zxzr^STNuDiP|I5!e_GOy#^a?%j^eWx))J8WvEuyQQ zUZcyN7Sqq3UZ?LpEujfd?R3V|8}y@4#xA9cLUr~{Iww?bJLr^9gIz|)gtB%yeJPZ) zD`=lkqg_cOLQQrR4GJ~e)zmLE%dVl1g<9-ddQWJ!eTy~=&9R--B{bI-XoXO#T}O*S zI16$WDnt7#rV#ImE3Q%;1RW^Xs&_XuQrnXzo~h~i2M~0enaKPv8g2FM+3&bMI;8 ze}J?8kI0|zpYT@Yf5F?7--LH4=Vx~+zYp(GPVg^5E3(A*)CzY=TUs7HGUs2u-zNUN=_@?rA!S|GJ1t-e+ zvv{Pu4?LsX>>3+iR~oGhIX6C5DHP+fDaCGJPjPhj$dEH77d>UH@7h}~?;Rb8E8~N5 z?-`F>7l#9$LY}<F=u4o;LE-!_(V5ZQ?1YMI;kQD3DYju|RTx1OrJ15)C99N;a%L zPqLw8L&=7c4J8{&Hk52A*>1^pBkLldi-gd`Md;xov~UqRxCjkgguIIocM;OqT#HDC a-x@2D;TnlhxW=} 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 literal 0 HcmV?d00001 diff --git a/Part2/A4/07_timers/cpu/timer.o b/Part2/A4/07_timers/cpu/timer.o new file mode 100644 index 0000000000000000000000000000000000000000..0a7a49e4e06b78f7cee27bb5f1f2dd001dd23b6f GIT binary patch literal 3428 zcma)8O^jPt6+X|;W514PocU>CCJDkL5;e5Uvu856(==@-jfOT#Xh(&V7KGeq`;Pr) zJhpl7IX|WRR6|iBRH;D%u_%kG?7Cx7AvXL=bO8%i2#^4YN?FXJB}G&MF?`?kz0S*s z1;={#JKs6yp8J2VzqWqiQ;y?^6-QjT%|wol4?QayPRKnnBNwl~^U|J&sMl%S{i*YY z#=VI)@#eqx_xE>yIi;P~f4;ltz4G!0|JmQ)c-ne)_a=-fWohSAbzgn^7ieU6Zw|F} z(yfvW{n4LRX5`0g=$`}c`uh9dT7UoA`Yn_{yXjq9|2rydRkzOC=tFO<--2mlYb|AA zP|AYFL_QlfwojF0T>gl0Wtm>G&RZxas6NgD^1C5OW^i&@GPw$953)eOb`H1%vw#a8!ns@^yD z3D~VZ1^X3azZ-R}K9^Gss~^p&!0M&^{bQoEC4ADL0z%-gO;?a~BFx)Lv`DHU6SDa-f+TQh1YWk`DLAyI+xs zFM?kIn`E)id0d84yq96K%(6r6wco%v&duh`vXjg-Pc}DXokN}8WpU;&Xy0~WnUxL? z*_KR2qZBgB8H#!Foguk*o~^CTefP0>rWhX^1!d+$3M+Te3CB4% z%dp7>IX7EI(xUG?I{!a29YR&pd1jiro$1ke8ssRx3`cHuH8s19sdI)havr7Q{Hr*L zQr`xg;zoZU_{zRt-d0gpb*RxONw}jTzrmX#x!PB;-)0+O96^B%6Q-LyeBNB;CsJEpWNqHlPlI8N5m2%~QVf7eYZfuKA8Y$Eq#46%( z(#dO$pwp=b2#DLgC@GCP!5*<D@)Z%wenzTap&YR zie%7L54RM$5;j1CsL_5ntgco|i>=b)X1BN44;7TnNU1mpy3MfL5|A$mIuyoWTmEB?~*#}D*T z?&hjMoEM%J=S9ysGLg+*!%}g3@S`BN$eE(|a^|tgu}ttQglOMsb%ltDkKwXx4SDw007b*+9iQMKM6VUv8;9SnEI;9=sJ$VY)0 zbVOgn@IOdCE&76>osSvgzF^{dgMTxa#|C8nS%ZA`$g2iV6Vc9j!=E$wWrJTg_)Q|> zzGL_s27hAkw+8<}#60Qo;V%r=koBH5SOR9i*9?juU)@Q9IxvZb*tS}vI)0+AB;q%N zBoM!j$JUQ}Lqca$)dwxC?q&}mS`X^=NL@nI$QwjKx20HdWa@-nWhTlIc2cw zDtzg2w9$#bz{YWKAJ}o|JqvE-U3B0*OMo`t=Tkb}f5m`GRE*d-p1pLtPk?a0v0d72 zyZVn4xD^Kuo=+<_UkF1w-?Jc`Pv*ms8RfeQopm^ml*`EXkWB(kmESiE+PEL$o~XiR z#m2n?L#n#mL|j^|?{yPr*Nt&JS5`P)%J=c5$MHOfofjhGI4<5fcCSE{KH}b_V#Kyf hv~AM0hDF_g5!ac1A()SO*=9Q5tJu#9HY+yYe*tE@>8t<% literal 0 HcmV?d00001 diff --git a/Part2/A4/07_timers/drivers/keyboard.o b/Part2/A4/07_timers/drivers/keyboard.o new file mode 100644 index 0000000000000000000000000000000000000000..095bf31da97d0cd48de019ced22c9ce8b748678e GIT binary patch literal 6736 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 K56w+(eg6fAJYNj} literal 0 HcmV?d00001 diff --git a/Part2/A4/07_timers/drivers/ports.o b/Part2/A4/07_timers/drivers/ports.o new file mode 100644 index 0000000000000000000000000000000000000000..fcd68269ce5f88edfda44d5bf87b7ad80755c72c GIT binary patch literal 2788 zcma)8OK%%h6h1R!J5KX{&^8JIhXyrB_1I30DJ4mhMkWM8sVD(erE>ik$A)+ujmK$& zq5=Y>L}5V|6$m0l2z~&oc2Nl-5E39*!S0&B^nvDZxL-bc}!fuF!fL;&8_|L+IH`HGMHaWZg<>DZm)g1y_($XxS8Dh z@-smO*XM%k$=3YZ+|Fw94v0G)x8`OL`Q!{;yBF8Qjl1nI$XkhRG4V=VR-^evhu+_w2`o>iX{>El6N8iiZ=GXXo8NFVH8@Me( zyo^QiKgZ?(lcQ)}mW~N}S%RqbbB|YJiJFHw>)0iH2U*+nqK`H7A+1I5UE2NaJuOCi ze|wkK9q2rQ(GF2d%Q##_hE#)Cjl*OFPq#eMGSh=4Ftsy%Mmw9w`(}DLbK>aRXZtj8 z0Y7=nOpkt)s43oH2J15$@|ypV!4&RB)6vw3&4Ch*m?Kik{z6$cgzrRALB zlI2uLV#G8f*~Kc+V%c#kW|oh#yS!*s%!1d0U-WatIP}HV6VYINWBjYzz_BeIr(Ubt zmEyc@B0v2F8>KNAC2w zxzJQB7JAT(o6*onG?s`aq7R3{rIRE0xK-O4o40JsDQ01&oor#Om^hUPh37-zyj>12 z7A+`w$FeGJ+Rhd2c`+KwrQI||3gwa&ajOpUBTrpOop;JFSXno6KJB<8k;!-@`cTR( zmUz7mOlp4~wQ2Jj(Dc;Q>Co_8rfR!YZ^+?9Ramj>v4k0oo3W7x4$Ot97dyqGz4SC` zD?zQl)#qEqPVhc+W8rH;lkLGb^s{aLi=QLH<3=UNm!ZaA+UK8#n`8csUje7CMlJuc zmk+8zFr=FJ==Z&v0j2R3WZOHTD#n1PUJUsvDW5?Br3y4iKBUrXQ1b!4<$%o((!Lmk z+gc|Ewbm-|T6W{89|o%DhwUNQYOUCg!B%U-cI}pk6WVaPg~6wy;qdMoOoL zYM4%!#JeQ+F=E*U8S%o1hYN9&l7CF%MTu7=S`y2Q$iFV_HzmF&@qNjEB<+tSek1W) z$^R(rKO`EMI*+%R5%qheeV;_$In7V_rSteFC5C`H;wL0tk@$*4GAqj^H=O~xj)w)M zxz;t8OmR)kOr=7mV=b6DD^s1vi;^#c5_&q5ajd0!HtnSCd8;8|p=etw0rknumP;iI z_tmt^u4Uqh3FCFhzUY;)3aPx4F7cxNPw7V-mZElo&|`F*W1CJ KJp-Q-RqroSn0B`S literal 0 HcmV?d00001 diff --git a/Part2/A4/07_timers/drivers/screen.o b/Part2/A4/07_timers/drivers/screen.o new file mode 100644 index 0000000000000000000000000000000000000000..be5044fb19c5555b502e31fbcd7a742b03a14325 GIT binary patch literal 5204 zcma)9du&tJ89(>haW3THgzyNW6Gl)0S>q%uOSd*aD7`$k7E+kIflBF|>7MWWzSsHA_nn7*Qh#QLq9{x@g}GP>G1gvhN!mHtz?QOl7RcYp%{JzSs@d^J zazl0O`10JWHlMAV&sI<0pP!%4U9ZdQb2CjGV3eD!p3lyeM0E=p)wlE_`JZ{Fpcl_| zEBQb%f3=`%%7pg{^Zt3P&ue+_F8TNpP78se^l@e^``Y>UukpaO+^oBAzHfd$t4Vj3 zXn$^YT_KSXOcONUUi!*Ea5@(gG z-Yfdlh-xJd;c&*}h?>)j>gk~(1?T4nO@+rf>xWq#@8@cnuxQJ zv)E-=?zc;jgR9)oT;uQ`V9?jNKtHcfV=fr58E+vlSJ0=GiJQm-j7|^DT>^i2`gEdr z8H4iGVhx4E_eH51$#re)BNwxm4ei*+4(z=$Ha@8#b)@Qjn5qKrdQlmZTLJqce|7xs zYGvZD_wqV+#=_~KFn&+NBoK9%P5j0Ap!*<2x$hd0kcmpF0pC_~%dh1D(RQDu6!|#B z84%cu8e&|0QlC5VG0n+JnMN+`a#*tz0@eA6@kv!d=N3mu89PiHzwoT~ZZr~!MnH0@KO5|^`NG@ zD>V?8yCR;(D97(6K+#=;H6tR}fT|(NG;_o^Yxk z=rNAm9y9f#jkL-*X|AwjF)hxNHP*PFEpqRI%zc;?n#lJm8eRMlz2(12_-BiQ2utZC z!;kQtCv-84-V+9!yr`pxtSGpWIx34x>SeWUWSuABEAU|DaU4~v zCtewW+^n{btbRaNzlYUV$mPZ7U}eR|1+ZdXD!x)6y}v+@?}v+)4rh`MQ|gsRYa6Ou zwX16Dl_j3K70B&6R#mkHEbKEe#GZ5em8~mXwNF$%S+#y8sdhE~?5UMX1E#HD7Jqkx z+KAWzHBz%+WqX-a19V6ic`?^+I9cp;zq_Gqf~qP+xx|CYm6R5!)RZJ;rnM#h`jyh= z6)SG<;KCzUY?dzyN8EQg?^CIWmEZm$geaD$-?0a zupw!K(?^Z2aJH>hJF7lbQ=z_n11enBDP(jl+4AplG4p|S2%o&xZTZtVmup11aScw$ z|0#U(lC^czL-rh(A(t0yNglW5W01?swIuJc<&%)htJ9W?82S3JR(VO<@&ncyNbZAN zUXHf>h$V-(tU=XoZuXyf8(>iWi=HrUTt{;`E)rt9tf$h}a54OBaWogBXTH>2Y;g%- zIXN+AMzz zr!i#?;ubqL_<+mn819f@&tS#~rm{GzHi{?9&%E_`pd1?!zlt(EP818|zjx{x`##|% zjQvpXUnL6uZK5@JsIgQP_B#aKPZWNlMB!&x@FxWQm!O{$MNwDasUiCSQTztT5?#*N zS)zE~FAMypz*7Q$E@&OLF6plq^fXcUJ4Y1${!SEe;6Y{zy~;!vG5l+_DF4|3Ob@97 zpKFL>J8uy34na2y`m~_m7PMQ?=ZV7J5ctP}zA5MxA-^Fo?L~^?pMt*(`5?SjQ2t{J zcq?J}{f^-CpHtvx1V1PE7X%I1JR`39$@FZt=M$5?`U3{Pv(V6 zB5g2aAHv^fG!RY7LcmUcU2sNz$RE96(%<(mCL3BewcAh{lum$YNZ$!TrQUWpq5DHN zsdp9(hdCQ8e=cp=FNB^f!3pTm-$B`Axqk|Va~->|j$Po!3SN?g0$hdFcIy m2BJyVMCF_$dZ)_zJB)umc$qDKFy(VP{q2JAb?{}A{{9ceASj0b literal 0 HcmV?d00001 diff --git a/Part2/A4/07_timers/kernel.bin b/Part2/A4/07_timers/kernel.bin new file mode 100755 index 0000000000000000000000000000000000000000..e74ef9e68d7d470ec58790347bd8c7a0d348828c GIT binary patch literal 8320 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 cKGIi1ra*3lEQQYGw*xze$T$KKfdt# zt4b-cq{Nj6lE{gvOtX@*C3!^VW$UxwckdPd_-Ai#@BZ$+nd^sBxclQ=%0K`4hpR9y zqz(l&2A`S5_GEe>^0eVj;SiBqmKjq> z>SXyy$t^FI=hedW++%P#A*Iqe93iBEMY#I%@^QC(w)9eohHJ;ZTtAKwPhdG%woD>h z7x6hPN1ny5)cx`-_VkKyF=|K0k?xCR+;3;MHI+s?+I{z#U*2(WgK8X&!fvEH9-GT- zs}q-MZ#dA^WQ<60^^G^1oAL0vZYR~vAWoL6=U1w=7n(^p(D6tnaoW8gmUJ8ShH>Ie z6im<@C2*CCm$$r)dfj{8U-4_+a;@H|HEJ(QE1X{$Akl5v)y(io>w{iAxrudVp?Yz z3+5#w_2Cs!w~K0Vrcn44_sB26MM`h}e7ShXS)ZM{dKVVid47k>gbMQK-b4V{Ke3eE zyc*K}fUcOKHdd~rlQ{8l1(TB_R}SYS#-BMLW9V|^%ELK{_Op`+>~#S%GoQ1V1GcY& z$CQ@{3{ieCZ{}NvqqrGH_)z`6gi)Ae1CzlWeXBJL;tt%{nS=5c$WhkgI@@d08aEFh^AKe-x zK?^*IGv2c()_p(GHxuzYK@y1H8jZx~VMn*dU39-aget{Bs}<`H^4cH{qORWO&<`VR z9gsu(_HZ!Jm~B5ACfdjAso*}_J6RarYi`HEK%>V0Nl(F!bIP7c{LSS3S)z`#h=r?^ zH7wF^7}sOq{6@6lv~mJZ8re?s7UVqHc+cUG_WxzadaMuQFkV1l$m(j4^Y#6Wz&)I? zKE51V-x{#>0hI5t)(8w)-4)0dQ}q{?M_|b6ETf0-3U%m%R*6t1th%Gf?mnWU}6s;`iD4u?m8`A^Mw Rym#iz$NLV#!G2*P{{pca?b-kU literal 0 HcmV?d00001 diff --git a/Part2/A4/07_timers/kernel/util.o b/Part2/A4/07_timers/kernel/util.o new file mode 100644 index 0000000000000000000000000000000000000000..9cceac149148b2f432fa2876af97147410a0d3b6 GIT binary patch literal 3500 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 literal 0 HcmV?d00001