From 0c2bba8c336463bc72f5cc6817cfadf4b17362a1 Mon Sep 17 00:00:00 2001 From: Tomas Date: Tue, 15 Apr 2025 11:22:50 +0200 Subject: [PATCH] Updated docs --- docs/bootloader.txt | 17 ------ docs/building.txt | 25 -------- docs/escape.txt | 83 ++++++++++++++------------- docs/fileStructure.txt | 16 ------ docs/fs-spec.txt | 57 ------------------ docs/img/filesystem.png | Bin 20515 -> 0 bytes docs/img/graphics.png | Bin 51814 -> 0 bytes docs/img/logo.png | Bin 6458 -> 0 bytes docs/img/setup.png | Bin 9074 -> 0 bytes docs/img/shell.png | Bin 20771 -> 0 bytes docs/magic-addreses.txt | 8 --- docs/modules.txt | 38 ------------ docs/{filesys.txt => os-filesys.txt} | 4 +- docs/syscalls.txt | 16 ++++-- 14 files changed, 57 insertions(+), 207 deletions(-) delete mode 100644 docs/bootloader.txt delete mode 100644 docs/building.txt delete mode 100644 docs/fileStructure.txt delete mode 100644 docs/fs-spec.txt delete mode 100644 docs/img/filesystem.png delete mode 100644 docs/img/graphics.png delete mode 100644 docs/img/logo.png delete mode 100644 docs/img/setup.png delete mode 100644 docs/img/shell.png delete mode 100644 docs/magic-addreses.txt delete mode 100644 docs/modules.txt rename docs/{filesys.txt => os-filesys.txt} (93%) diff --git a/docs/bootloader.txt b/docs/bootloader.txt deleted file mode 100644 index a882ef3..0000000 --- a/docs/bootloader.txt +++ /dev/null @@ -1,17 +0,0 @@ - Bootloader -============ - -Kern uses a two stage bootloader. The first stage is the 512 byte bootsector. -This code loads the 2nd stage, which is in the next seven sectors. -Together this whole bootloader takes up the first filesystem block (4kiB). - -Bootframe ---------- -When the bootloader runs the kernel, it pushes a 32-bit address that points -to the bootframe It follows the following structure: -* Memory map -* Video memory -* ...todo - -It is defined in the libk header 'boot.h' - diff --git a/docs/building.txt b/docs/building.txt deleted file mode 100644 index fd52b71..0000000 --- a/docs/building.txt +++ /dev/null @@ -1,25 +0,0 @@ -Building & Running -================== -_If you want to try kern for some reason, you can._ - -Tools ------ -* [NASM](https://www.nasm.us/) -* [QEMU](https://www.qemu.org/) (for emulation) - -Unix-Like Systems -***************** -* [GCC](https://gcc.gnu.org/) - -On MacOS -******** -* A cross compiler: `$ brew tap nativeos/i386-elf-toolchain && brew install i386-elf-binutils i386-elf-gcc` - -Commands --------- -```sh -$ make # Or 'make os' -$ make run # Run QEMU -``` - -_I personally wouldn't recommend running this on real hardware, because it's untested and will just probably break you pc, but if you really want to, you can try it, but don't blame me if something goes wrong._ diff --git a/docs/escape.txt b/docs/escape.txt index 335d0b3..bae0d0e 100644 --- a/docs/escape.txt +++ b/docs/escape.txt @@ -1,46 +1,51 @@ ---- Terminal Escape Sequences --- +Terminal Escape Sequences +========================= -Escape character: - char: '\e' - hex: 0x1b - oct: 0o33 - dec: 27 +Escape character +---------------- +* hex: 0x1b +* oct: 0o33 +* dec: 27 Note: the escape character will be denoted by ESC here -Syntax: - All escape sequenced start with the escape character followed by an opening square bracket '[' - The sequence can take any number of arguments in a semicolon separated list - If a argument is skipped, it will be implicitly set to 0 unless stated otherwise - The escape sequence must end with a uppercase or lowercase letter +Syntax +------ +All escape sequenced start with the escape character followed by an opening +square bracket '['. The sequence can take any number of arguments in a semicolon +separated list. If a argument is skipped, it will be implicitly set to 0 unless +stated otherwise. The escape sequence must end with a uppercase or lowercase +letter. -Available escape sequences: - - Cursor Controls - - `ESC[#A` - Moves cursor # rows up (default: 1) - `ESC[#B` - Moves cursor # rows down (default: 1) - `ESC[#C` - Moves cursor # columns left (default: 1) - `ESC[#D` - Moves cursor # columns right (default: 1) - `ESC[#E` - Moves cursor to #th row - `ESC[#F` - Moves cursor to #th column - `ESC[#G` - Show (# = 1) or hide (# = 0) cursor - `ESC[{row};{col}H` - Moves cursor to specified position (if not arguments given, moves to [0,0]) - - Erase functions - - `ESC[I` - Reserved (Falls though to erase screen) - `ESC[J` - Erase screen - `ESC[K` - Erase line (not implemented) - `ESC[L` - Erase column (not implemented) - - Text Style - - `ESC[#M` - Sets foreground color to # (default 8) - `ESC[#N` - Sets backgorund color to # (default 8) +Available escape sequences +-------------------------- +Cursor Controls +* `ESC[#A` - Moves cursor # rows up (default: 1) +* `ESC[#B` - Moves cursor # rows down (default: 1) +* `ESC[#C` - Moves cursor # columns left (default: 1) +* `ESC[#D` - Moves cursor # columns right (default: 1) +* `ESC[#E` - Moves cursor to #th row +* `ESC[#F` - Moves cursor to #th column +* `ESC[#G` - Show (# = 1) or hide (# = 0) cursor +* `ESC[{row};{col}H` - Moves cursor to specified position (if not arguments given, moves to [0,0]) +Erase functions +* `ESC[I` - Reserved (Falls though to erase screen) +* `ESC[J` - Erase screen +* `ESC[K` - Erase line (not implemented) +* `ESC[L` - Erase column (not implemented) +Text Style +* `ESC[#M` - Sets foreground color to # (default 8) +* `ESC[#N` - Sets backgorund color to # (default 8) -Color codes: - 0 - Black - 1 - Red - 2 - Green - 3 - Yellow - 4 - Blue - 5 - Magenta - 6 - Cyan - 7 - White - 8 - Default +Color codes +----------- +* 0 - Black (000) +* 1 - Red (100) +* 2 - Green (010) +* 3 - Yellow (110) +* 4 - Blue (001) +* 5 - Magenta (101) +* 6 - Cyan (011) +* 7 - White (111) +* 8 - Default diff --git a/docs/fileStructure.txt b/docs/fileStructure.txt deleted file mode 100644 index 96d20c3..0000000 --- a/docs/fileStructure.txt +++ /dev/null @@ -1,16 +0,0 @@ -=== Project Structure === - -Root contains the Makefile that is used to build kern and some documents. -It also contains these directories: - src/ - Kernel source code - boot/ - Bootloader code - libc/ - C Standard library - libk/ - Kernel library - docs/ - Some documentation (mainly for me) - other/ - Things like screenshot, etc. - usr/ - Userspace files like fonts and programs - bin/ - Intermediary binaries - -After running the Makefile and succesfully building the OS -a 'kern.iso' file will be created in the root directory - diff --git a/docs/fs-spec.txt b/docs/fs-spec.txt deleted file mode 100644 index 36d65cd..0000000 --- a/docs/fs-spec.txt +++ /dev/null @@ -1,57 +0,0 @@ - Filesystem -============ - -Sector = 512 Bytes -Block = 4096 Bytes - -Reserved sectors ----------------- -* Sector 0..7 - Bootblock, constains bootloader code that gets ran by the BIOS (4KiB) -* Sector 8..F - Superblock, contains metadata about the filesystem itself (4KiB) - -Superblock structure (4096B) --------------------- -* Device ID -* Max File Size -* INode Count -* INode Bitmap Block -* INodes Start -* INode Block Count -* INodes per sector -* Data Bitmap Block -* Data Start -* Data Block Count -* Root INode Pointer -* First Unreserved INode - -INode structure (64B) ---------------- -* Type -* Size (bytes) -* Sector Count (size in sectors) -* Mode -* Extent[4] -* Single Indirect -* Double Indirect? - -Extent (8B) ------- -* Block -* Length - -Directory Entry (64B) ---------------- -* INode Number -* Name (max length 60 Bytes) - -Filetypes ---------- -* File -* Directory -# TODO -* Link -* Device -* Stream? - -These structs are defined in the libk header 'fs/fs.h' - diff --git a/docs/img/filesystem.png b/docs/img/filesystem.png deleted file mode 100644 index f6f85d10b313bf875d3061785aacd4f9e3242b0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20515 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 diff --git a/docs/img/graphics.png b/docs/img/graphics.png deleted file mode 100644 index 68a1120cd9f3819f84c43dedbd5ec3767a5d6b29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51814 zcmeFac{o)2A2>dyQG=F2i53kiB1=hRov2jSQe+9Olq{t}mYGv3-3slB(AA9=OE(ND zrf#?0(t<)vDYfFGAm*{n!oq%qg$31qm;csnJGKxAYA5!@nl1mw zlk%^}4y#KOKTy>^#NNAiY2^`xn#<`QW=!0)w#;vZi^Du$vy)M~11TL0pY`9^-~K#$ zz`%&S|A4ZAp``iZ><3*_a?(Fcf7BCPV-h`T--jui9OY?OzgN9IpPgNJ;?$p|QOPru zH&XQe*)V7A`ef;_j%M$g#q6HFr$g7f>a}hO)ZK>4h;!RTKT)c^I& zl_Ia$xTkVULPu2B4#PjVv9}aB5?&_kqZQA$FSH1=sPUPYWBfyQr+G_R@pvs~qlcB_ zx;uj}-N`i%XKW{Ln`r-V{!D9&E7q$^HhxQ*{#VYa#o}YvzIn6%h_YLi?TP!IC*mU) z?OLF7h%_(g^d*i*U+)Ij>(fTbj-!6c(YqKC5JB^*W#+tBq1B8j$%xzPW0o{&$_B4M zxA6w15=#`r`}UBc_R(Io_H^8C(Qo|JM{sjA6C3q>c$1UqtY_+i=sKaM6 zLG1800tr5e!M{`BUjkv&$wP!O@Lw7DcS$l)@aq^x@+iS)k^%bQVh4*AE8xEln|5v4 z;uq-czkB_?OtbNZMezbS8Ky&|BYL;f_($fB?RMOL-^>sW%mYZuTZS)uId0IN!!gs?` zWAs}?`)$Enb~rED<_qM3Jxu5680Z-D77Y5Se@oobb-1OA=8G)F{WNgt+Q2QlEc|_8 z)7_^1yy5SQ|B=7YSR2J1M+=P5yl;Whrjo|mLav!g-m5(MkU*djRxDY(CRptIJDa_q z9-q)Edu%x6+}0QM#i8TwGTjz8H>D?!F`;XgTozArU%EDA{_iT*s{m&hw_th8m2EM=HKq6D9GzLM8IP?d~QuaBu;|&LfeE?ey-a2r3KLnV|f(qAvjof9C{ zp(q}aWTv4XHh$EzdaFlXKAP_wO74DZY52W5by~;wmc1>vy4-&`eKR%6$S+E5xm6f$ zI~>ZNCUR7h150cwNqZ%XB~@A`@7vScTNUNe(nN0wmmb%)WVnUTHK~Ne(B8df3|1A> zGW1}APnSkY-mj28|E3I~=Uu%8qq6Nk>+Y7G+x^@NL?Q);-uCL)%S7>xtPg;^mS5e)o`mUDJ zcl&z6BCPtXCUcp|jY?Y93{ zx3525=*5_7R3_~V%kE7nRb2G0vdD~1@9U}m+}YLo`IcqnnZVE7hC;pir+U#tiw})K zix3kF=vAl^L(E9-2kBPURvlXJn4fD_AO9=xuZJ)7n1Q$YLOqca}UyE_7_zkUsuza?@hk_h)A>QFuTqC)!Q7})BS68OH$^$uAb{tVve;} z?3yt==InECn!ZL85GP{h{i2kP8RHy$Iy$z~(@R?RxP;c-YK-p8{kiJ!aI)vE!XC$7 zSaOY$rp{5DX55%wT5XtAS$Dg=zRO>J%W=I%?RWIi-+MYgH){51{^D$>XO?KEuP-^1 z_^gBZ(YdEC^Q+IWd@p1%`+8dFJ-M&9N=Tp0*cm+>5PYrel;X;k^>`(Z8t#plye249 z38n{MC=bUbY?lUYDxukI)byd*Ab^BD5%I5!xU1FcPe@w*@Beru)qXu|Dy#g+q>-!) zh{;qClc`>7N47@x>uChHi|dBtE8mV~OH&BUosI_u@D8o9<>I9OzyhK9k6M^G{U=+P zZTL?U`PT101A!UN{|v-`1_JNA|1%K(83>UG>^}qXpMm&)#y}u?M1Ql|3b!v)hD(S% z7t;uL7#}B!$nctD#6byU1nr7u1S&^*MGVs3<6z*MooZh(~Y&tBb1&XDO?M{uXR5vJ0eMv zFER*u7jssQ41Ah8m5}k&XXkKI!H;!hA$7dvcw}VY*Fx&JHbisS8WK;KkiEe5y%p*s z^E3Gx0I#0;FIxFvpJ7$UFrWSE`c=NAWLTUvfN~nKZssE79EdwI7B(O2@KR-DUOAG< z3@2)SW%6E)QF)!XUW;s*p+BB{A}j^I=C_>lHBr0Tx}gPKiozM?T4n%&g6@ zqgUKX#bK&Oe5A6>LEVW@W{te#V=9yrb!M5!j3{cJ2N{H5@sm~~Yf~&3n1l^0_stwp zxLJ~7VjRht=TKpxO-GnB{LeLZ_+0!q9aLMC8hnsuPoxm+40gND9_h87*6`N2z#NSc zN%!BYP!9fIqE+PN;I1Eg^COB5wKyCYM(S{8d`Mnn0)~hKGl|jvqelODCW!6=&Ab0Y zbpJo%_5NQam;4fT)1&Ioojrz+{dNr3E_ncz$w%i8+Ky~L0+!PVVNs>U!^jTbJVdEb z3DLSz7kSQRSgNpN83ZmRDSl)dNwI`hfR~)1(nzL-!BPToR5H~c)-~|}rba`AQZje< z|8P(i;GitR{6;ip4B9jZ01})V{)dA)3=Zlrx5j!H!^u}B1K82vR@wh>P~#!)oA4w5 zJZgh;CGYeE7q}I9Fl)c;8_uBq-|`7VI{_3I>H(neKd0N4kBsjmz<1Jet&w?38x0gb zH0SGy;kQF~`TtwcVPMJE=6xj_9fzf0Ap|o;vD^{aAVypS(c+@|E5o*Yu;pQ38t6(t z#D>*m-ebEUxaKt{N3OKF7egAc}xY>b56*b&1g z_E9iKQb#6?2s|~`0m7$1zuP052G(RSMw4Y`jBNg>sh}$LHM?yfUD}N%hFX;^mAk`z z;)W6T%`y;DUO4MMGEK4|SafIY{9~Ax@Ig8cR_Xkeznq3M92no{f(%U#NcbO#&}`7s zE8D)F8F@!3BHh)Xej@T!ytgNl`AoaWrc`GxtEgzbR#Er9>3iu5m+?h4cowI+sCVb@ z_D1@h+s{J=KuA5o&}Ybwv%20S?)Sb$b7q^rF=BS#<9%=NfgBa=SoU>=l>G;wk}fhKXrfar{pa+5DjvWZdlZW?Pft}B1iM+X|4cB#{I!Q}rKr37zg72JZvmsFkwTyh_0~lp&_sg11!UIU+tubDFwtXo|~=IywLfefRd)rdv?0yV17qw zK&WIi_2R5a6e4p*0*84w{}0Tb(dHs@u+hySHj0Cd;sRf+-31#Jh)L3`ov-s}KORi< zR_K+3uLnuU4-kK#SIS~iB4dg^%IdU<#1YOZV6!NKCxHkm@`NJ7TXmZlJA%*f_+Cc8@SN0^R5dCsI&Ke`8#2FJkp^i*93*a8Y zOir9VHIVE2aMlnI3W`*UfL77pWO~sBEDH8;NSrJ&pe|$Y0kyokb>hV9fY!OAoS^cQ56XP2?TG-R=4%ZhxqHC2?Fmn} z^*qITu9U?IdX@5FBYzPM0Zt9M=og6luN~>up66J{&_$IgA7=9xQ4wI(kc;-fqCIZu zE7`FuYgp7#mhxdMe-QyWKg^YezbluVlZcp_1Xe!$GSN(IXluSt>VOj#*}8J|BO=bZ>10qkR} zHPwPVx7()Oe%m?heFp1cpQJV9J3?E)-$#cD#kJ<&)#1C4#~>K`zyJ9w9ODr?3-Hl- zzmyzSQzj__n+_O@;KK9OKRk&ji&{J_ zU_s0$DWgnsD~YtgZ>fFDs#c3K1x zChYN0hSFORpGwIS8gc%{o^v5wUDui&|3rM>A=vTB4AW{=?9E#D>pCZZe=NKyid!rw zasvI(UK;xVEe3Y%+CVDgry@|l>&=~dn=+{EEsUMB)XL_Q*{JNChe55A%-}HV><_YfzONOD#u2_3o{m@$^-#KB zdXdM=n8_4*8jV{`k1}WX>XwNnGY_D){wV%PG&w=tUIk!FG*mvykGUj(=sOS1CJm}* z(8huo9b43}pSBj!MTNY4l{3Gyu$)TmKCVAgDd5iehA4rk@|e&GGLD7?$yZqlAV|!w zk0cmsd^8q=pB8AMBS*s1cx99!%s5{1$`TK@h~ zxk#2aBSDl9bAWgb$KKACxFhvl0yMWJqTfPOdcT}6pcs_i*ezPp6<9!OHtQ^^gZoZj z;KMhCOr}qzCb^lD!{(>)EdXDDsAnLPDbHJA#WqItP`hdDufeC@BB0))`n`=VFP*GOe*x5=NAKe{XNNG(FkDo8l1 z_g!B`O<<*a^tl8n>3lHERBJkoB>oqC{Y3c~*d( z0){E&a0}U5!@jor?(`l$8OhJpsNK`)-^|%RymlNGF&F{)WQK`2iR`wL8=9i#PuwI( z?w`-3c3O?v{ ztaU*7n_sr+lNQ1pG5s0j49f5Mig#=-fERN6S*R>gyUV~zgbMs5BanEQgytbxIKQL< z(rcOUE!RW>VTR=MvmCx%-vw?b@cD{!B-=^rWP8u<$L|K1P2YCmQM)q9^h>>;h|ott zOD|eqcDi($de$sRmT+N`&VB|bC~{6>!5Ae@exjp*v^?vI6asREz1L*D)w5K)HOJv% z?pS9UH$G(Fp3up}%3nE#eCfqd%;tC3XikXAd;e{2Xd-cr#BX9+oio5VejAjaAS+c} zon))0RVm0!U=#$g8Iz>Qr2`)+dy51mBp_~mp_M2MpydWf0og3!DX zT}UKX;o=|YN6~ey=Qzfgv)8qjjS~TP2Y~C}x=RmPL)5!pN2K;gb+pZ3Oh0{n&}>8I zO;F>@rbs=|rhZ`wWx1xkZnvfmjuT73Y%fb#nUNUD%K!40s|Y8!Q1$q}f~u2DJIY~Z zN%V)S6hLh1wki3c(!~12q-K1!rUUXH{P1dZYZ+1VpE}|k9DpPMFmleZ@&lCM8zEI9 zcrAlKKE`xISNuveC1Kz~{f0Tz?xw3|dwrESZ(4JV@bDdjCWGR(3+?lBXr&w`3zt-v zS%AT}2+z1+&d&eh%fzeBW9Ye-7%mEz&6ACy^q$>|OG><9E8nXoL7GaOnpS2gek);H zZ!UR>B;6_=N5E{b#JTp4AKhu>u*~qTrxGE|82QVXj{0LeXNS5B7bSxqfAnOW_ z$~D`~DmjJrMO47DEFmDXEH=@EWtutVB9$m8N)Xvz^G#JL%h4ny0H^3#OJUj4XE`RY z%;ZseU{sEu^ihU{OvT1R8!s(!c3^1ho;MksU`4(6 ze?J*#XF&xDE`M~}3_16wuMNlX%DoA6`%z-%yIFGbi@G&8;jA-+t(*=BTVav|892!y z4-F6FlDSQr2j?lx;7vQG6qd}Tl1hwC?#c?nZQ!S%lw*>`0+uPH;8>X+-*sG3PPUl&6;Fj$EI7;EZQ?7R6hp0Pz8+ifvevqvLW6h_Q z1KS2n<+Iv=*QZh%sXa4tmjaRk%To5A1J($tCp3RCC8rjN zv>9tzeSu3}KWR9MO80!J9piSZ9LzW$TH5`*0rh4n;NUIKUk;Cyqx2@~D=Kk9&N^bM zdKdEiyPwLBt3y0&s1S~VLfee!iEX<~3%dTfqSmtG&9{2Aef3-mPAK(AWc7UmC|Zvk zWYx#JU^T;RD1;~5-j(pmH3bg^xbJ+HrSI6kKIf^618fNUcK*PDth z^r5OqZydLV>{eRwlt;AWGeE&J*@mk?cvh*VXrtont;v}i=O(*7w^=Xn?kqdq$Hva6 zLb0zy+;;tl9T`rgbekO9xl>w+qa1UJ_ZsR!C?WnEx4?NZ*le-#ljxTeciLn5pe3dE zH|QQU(!B^6dai(>j>{jXAr}FaivdP{vcwizpcK!2lV?*&;}=qz)=Z}KI;uMILJuO@ zSaN*Q!DC`o<@aR~FJ0X_RZmkeSu_e*;n>CAo2H@Jk+URZNAwJC`^TnTJrO>IGm_iUFWFaF^)!xi0C%^T>S_t&3z=Tjahyg|_BO(Xo&nC`X$h3toTWcUxS*SG&Ey_Ds3`4{Om#96EYAkVw| zP9*3>(kJ}5xa$^$J8{`jEb__#pODf0hZBSnjt_DcpcpTZrhL)cpm;5c7M!-TYOEOX z3E284qp!S+1L7D2N)v@GXO=r);=ZV3=_Ck5E*>jHRRBoI2IE?zD28wp^*YdR(4;yk zzJS~foAh2Lw;rSzJXc$QHFWnvi7n_={=7I4l{d6(3ls@EaZ;h(wuH2qR7wWP#~DEC z22pF5rx-wvX2Nj#?Wh#6#q$}@lp>=6fzgjwt^p7nKj#>r2qaJgW^_i3|7g3eRtCc5 zu!zwnN%34asOusVfSePi6)I)9gSOXRt2|@QcK`W}=Sh)P5PYc5Tulcro6g*hN(wxd zmJ0=paPj6*8%llaoYQO>G*jSl;rXuy3;>x$am=NX+$BEGN9B`BSw|yJ3pQ{Gg@hp- zEeODu4Ko8~B)oIUn^10;b9pXOOzbF4_u8kMG?h$=vj;QszRdSGVBZnv5mRuGW%9Zl zt2EXFcT0a|yO@9^nYe18$bxI{Vth9>a4p)eA@N`mx7#|j_G8IPFA|w=sux`XklvT| zZg<9|ZcD*@&7773!G4PEG7kVK&Voi>_$Z<2=XF*%^?N=0dW;=>$+u|xz~}~zamjLx zWZfJ6=X4%cS+L;FsA5eUQe=@$+$1!`LB6^xV8@KV(!W9f* zOq~bfUF-9y7t%=d+#xU8(HB$7s;6E6D65vV0k4rC;w!WERDTU;>-Cm2#R7sqZ@sVI za`(K31V!LeFP{W{$n1Eu1q{rGBCLU4y8bnfKQuO|H&;CNRWX28oHhw87rVY z5?@IPD|lD>!gdK$ni^{h)epbTQ~Wdoq@;SL+Ogao#b2F{8aGxLNYL-CioTET*Llmn zm;e&=aH1Mg9v-Fl#kT1WS~${`q+;g!>+V`AO;Ai$AoVtGHcy4 zQ;=fQzjp3NZT5J{)6{DuhcV{@jnIa9GrhKZYz83^N_}XNV9vwK{7MYZAe{x-wK6QZ z2w|{^!z&k576W9}kXKEOUDR*wcj<60Ym%DTfe5YY+mJi6euEmc+N9$OH#Dd}2aIWZ zvQm<+IyJ8eG$Q$Lnnc`6_L}?zC^){M2J{7f_1ZHk!AgQchEb96x{}9v76er|*lZ1i z&}+(iN`Viho5OgO4p-93*xd#7rk+)QAM%l)cx%{4IQDes?r}O!Km>J!{ur1V2Zs6$ zZM3%~*N8>&MSuhs#a9Nb*?+mDNzIPI8V_vnFneW0cxTR_Ie-c}`27nT3tr%@L?!uM zGPWG|zGYfqt`z|FT81K1elkZ3lFM0R+jVP$#$S`Aa@?T(T=P(Y2Q;=;1}u>51nuRG z_v@$!%0>e|GLqzjGUIKYk@k|w`-7764-$~sK(N`*|LEV33V8~-#v=UKh5L2$zIaat zB6w?3xxShiiikXMKU+SqOk9lE0?UG=JoxS$B^1=aD8Z~tjGylgFkg}n=TfF*|>+q`*$C*pF9mQJvq+003K>kqjH;~ zG8Z6`#0amM(=MEqm^qmV*Sz-zOlEYaa;5J4%uBxSTSm`42PE?(iuw20>TGtM z8SBQDBXzAm6BbpaS_a`vjf6YuIR!g^04zTif4Tu}TCWu@=uza~;*oQH*G}l=5D3^^ z0AAi>NLyv{=u^45EkAp#N4KwJu=YZMWUp?J;4Sbvoh%UGJMSgweEaE{$uLX3?NkyD zUPw;uUS{2mABaZaY!adfUR{BV*S+^GK~IUAgYl^9*F zbJhtdGKISy6XFvX$y^0P>8}2PCcKv|pG7sc*2~Z?zEFqFYj_%p-D}yc!rVY~kl;?& zFVFKm%bG3bPw@Y+i(h!=5nop#Sk|B=`(P3D+yj9!3A5OxmlJ1g10VONB==SsFUafx z`518enF#h_)P(vKKKJWXbHIrBy6~DPG7vQ!-;Z{AU4RBjQ!DW?@&+vgI1<{dI zGA;FB5pw9#B-nB{g;U`_X7?;Gp-OCDHf2*83DE&U>7g9jG4*Jq5kpvLnBj;kBY4ulhSyw@q<<_~20;NOZ4Q;2e$~g9 zNcvl{rf6JPwZ(7K#)vkXA=!Ep%x^8{prAjWP2tohx~g4Y%%E*WWV$=U&xic6Pc_R9 zV@^{+`TBm@g6P4C)*!#B{R?H&_}hRv%?hM4_qF3u0JEbM@9s08^X97je{x_2% zPX@_PD*EImUHKB=BCD~}>lhX<;3R{E1lPpqwSn&;kPI=7oumg&b7<^1M!?Uwy6XkM z3uSgCf(m{l2kZJKI9GvB{~_L8a@}qcDapN9 zQ|YmXC}>dPvKCTq_~-ocHk!>knbCW9FvJHf7zL>{Zj?r1Ihn3I1`yj!9H&1`T$ zx5;wqlRK)V=pEJhr(l=!q(~`jrI#FcIMQcvVW%2vOrQklN) z8E6i+OpNZn;N$ByYX<8EIJHv4kS?gc5C&9VVwcg<^8MB%R4mFz2d~bH-}wb~=6$L( z&#hubMP7-8cfDZG4WZ7S;H%>Ea$)s?IHjnS@De zTa!sVj5`fnCP&$2syO4^BP~^SJRQ3d*s+(3sYN#an0XWY`NhikRT)w0R_?$2nn3 z5WeJ7a`dD)&9N7Kiw>CP=0be{IZUkW%2-j zAlDn+XIu@Iu~m|*-BW+@?nTItlF8gtWiYlx^ML5kgIYIaL zD}IHSWdUBqLT-jknii+2I{`N4|_ra^sb#_VhYk_tXFb%Cvr zz_FJNU$sjFcyq3I`C z4PZdflGwKglIV+}&u8u#Lqu93v=COv_&b)1E2Ay)Z<}~!rS*_Jt$#BKwGgiXt*ejx zTPFblC)sQAYCC+%MC6DjXzTi@1UP2`(hfVde^Ez?#Y%#m>|iHYgbtd3APJ?pSbQJ4 z)0a(-vG6rMlNSg1LJx&3gsfEGGygPxm9)4EI$aQD$4CUVfVi9+${(2sh=#;_n&oxD zHANubg56kDq9$~_Tc{I``U0M8sH1ksM){-Ef=LoeUKe>mETmxxVT>w#bD1WcrT{8% z^lx;!5*>Vq*0U>sS_5l2&;qsi=|I5rf6H;UjzL?BOhH@nA6Rp3fELj}i)ijjUadqO z&{Cg0S$e49`e!RHT<)UaeH)K%cbFwVl$3Z(Gj z$Mac`0)GMBD$x%#LSxo6*lLxkkB1kURJ_iX6EF+q+J4C!=&Zrw!>O9^{%KI9QzY$% zq63K>2}6X3rye=9AF8wm#w{@tiW7WDo0Wx{ET5~cXd@sT01WS0%cJ2w*lS;|V~I96 zT{8Ihy^Rhx2vD|Hk>A6v`8PXd!mM zs*ZR6I>E;B(7rKxxuA)6ArHUsQ4CR2;+~)FcUQ9O`Z^z7YjooeS5m-i+Vusk*z@s; z8dTvP~PW`rd>{@vNhK-HthwlaBck*q|1%$QsN zqsGr}hFVOKU+Q^<6Lk9g+c9_ok}1KnU;=2?r|vdlQFrgMNJ?<$BLap%gDPiHTTgd* zQOTOwv8!3GtT~Uaz<9$#a&TABsIyQ_fh0~%%wKGRo^AXhHMmuY+|a%Va?8NyZ+T5W z2F(ER+R$>V^dDcE1x9}euiyJy`R1UaLj4os_77{?URyxQXR*HcG*I#MrdPZ|F6FTX zNBvXy9@CbRJ+{dgSlaZW-kZ5h#&v1eI1y!`sX^k9w$uB{DX2Th-uW9QK>Cju#M*lL z<`uNx-c6VSf`lTK3q2pEcm7%Q^HvIlSgNxn)D1dJsBL5;U>C&xh{41dOi}Kk+pd{r znGOQ4BL+rJ>`<~eD#_$IP+Et<4n0_`zu$4|T+mqod_8`fPi9eIwVw)Q1*@8M;>xATL{bHCtWqr>oA@(^fn6B? z18QRf7d7RgbhM>j{Xl$Hm{<0321%k;idB{!OE@7 zI(yLxLc^BtP1pq04H@t0PjfSvlJ}O9K9GZ@1|Qn02M<%aGg}g>@aDWKJSI+m&@y#$ zo!z?nus+wS+2<@NAh9Y2V?jyN!qC_s>S7 z+jI{*U;?BKMS_zOkHJ`?ry2bq}JsoUR7$;nhmln5QG!PaDFrM!?wwu#^AF=}e?<&klURIpUuyu4jD zAdzUToo(Y;ioH9|mb&lpl)FV=73HU5ir4~bAgC@vRAA1Qd%8UvT7%5jjz0Uu{E2pb zWC98i;!OHG^15?p!sq;(c0AqUz(i-|CXD=@WHQo~cijbA*luWvEfHedq?ZPmwmhUf zmb-#2rd6H zA@GO19+B?!gg!5Q$CE5}8iUD*k-TjN#ZH5#Gu!4}gu>G86V*ECTaRhQnk*@5v7hzIU9XDlNEEaVxt6Cx9sMZOH+v{QeflTB&vDEgUyow zi;5>-yFiZHr%}ktVEX2h(Ete;ltWB8d^x4XzbRq8el{aHsNqM|GUCqfL$Y|p10D!JWqRnae==eo~=AfBz-jxHo1A7PV^ha83TkLB?He2nN5n3(U~-I|3SBmZn7X zE>a)AP0<;j9q{mMg}??)1XbZYfvUpkg*?aVCU&X*(c7QghW7<+#LU{C;0sL{<0#a! zHLU6)oBT-_zf(cyP*ds%ZpdkW&Rj$n{GZo$7hda}yn{m7Yx?lRPl4=sLMOREaNoyr zFfXu_0)gW!IWwwyPTxifakVZ?}G__ zop|JhYQ<6R)py)5cYxb74N4#xV|RoQ^@m+Fc4@5-31H=uQCX-=O96z7jrzmZk}0C&?HLp-p@`6 ztTN!{rAI#45ItL&)J|Cf#@7<<55uJnMB$|l>r|+B+)~;)r$i5)D~Iq>052raEG&VB zYL^sQvvm5r(m<1Rxs|N=`{0Zei0{FEPK{VH1(UE;a6M>yI|0_4D!krB+6UlFV`rs3o`dT9X`SYm1+uJ}w=GSLr~?z|$QC z*iUz2I?r5NNRm~$j-3gG=EZdh^3m%rT;gcp2>PzfxWtzq3xM79LH!q5Fq*0xUH+iW z1o^qVt$`Oyo0G{(UC{`gUpq;@4UJdBo0uu#&ruxmUrjLXj`9uI3dZ*ND`pV-E0;t?-Zni|-!ER*va-Jg%EVE2rs97k;hO+)O`CXKIq_B`LjFAT#} zGL!Cb-0Bu@F#rI;s;mabob9h&Vgz+-0&y0pP%xMKN}~H6z1K!Rknaw08(PnWD&djC z{*8eWrzyc1>#O^3t%Y8eYu}C5ipI*I4=Z6ZMk2Tio$|p72UQZ_ec|pG4S zQML@?^@q-ri2Rre-;sous<-gqZt72>hBm#CK)V4P}|JFUFGv2<^i)OEAI$V@ON)t;nmXYgRB$!Au%;w ze`==Ua&rKir4DP*q6AD^kkR=u(V=To$>6RIbpD(N7WBwLk-pS7S3<;5xh#XKlLM~s z+mC9rbtXau0rz9Ap{laOvuYOBn_h1tcn-ONx)TUK;#r%3A*OqO%)#CfU=56a)LnBI zjHNs3r;sA>4vM_w3`b_c2B5NGV0XF|zQ)qz!EnT_@)lmDK+OYX5VVO zD767J3|LU$XHBR%0-pGfb`TXH_QeI zNV^S!)%dMzreHc?0d6HYYTlu$NP@v@g9R4UBnXJ=p7)xC2F2DsJaJj2I+w%+pz)~SDI=CjS5=6d&-<1(Pb`&jbX@nRz2Yp@ zQLc%!Nx+{oD;m)@3i`OcCF|=u!&?=6#$zgkT}tMlO&Se(@R$j#cA;E3NRm&cPCNQ1 z*=`U6n~h5bA^7DzwWBo1j04&vuHmK; zM3_j4f|^ORfu5c$7E!Bh5%H6FySNR^)wX3Qrk%)0s{8?E;pzb&5F+R+(V{{bT56Fj zUF*f;gj7utParCqh;_-nku>Nj(EEY5En&5eJ8KU6hi;S`LNNH*_SzO3g<+k>m(4|x zhO!*t@YM7BC14ns_$V>yo2Z%TM;gfo@&}e$?jfxPoE@UqItXDg60aG(PZhLuHzlB} ze*EKHzP>lh1x#%y`1-VH6~V1ng}`8eqI2Yf3WQ{xHktB9QNMM(Kz(_T$-}`9MK6CZ z;%893&t^n|fGAtUBcE=u%=~eLl+b(8TYe>4_koj`K~yL#yb%zBn^%S5ES+>PgHU@>~l_QlHI`c+Yc{Hh! z0o+{YC#nV%GOEpz{CAAOkbo=Ss%gwyH~v0J$a{ME*9s~Fl$#ZM8aE%+Pg4{?YfUIO z?lb;F#oi94>-@hM@+)KHB@~0k>}Kc2WjbqBkX1z6zUY%oZ44z&6sUMiLwRT>A+PrN z9&68iK-e~w)zslI*0~BMkf#HCKnH%=F^0R(o`8gcXm_NAKx+_s2(0ySzQWluopmhV zWK^~PBGvTfzs`f1QWTY!5_#ix-#(F85li4MaFLRwmYG8~ZT@14P(B8H0DB_FvnMo9 z0EYd3j_^o~=Q+TuAWm3t#pK8cATmO)m16}1np}l60hi!j?B%XKvdMi7M8Cdi;rqYw zdjN7`Or(9$8|dTIrhJ0S7Oz06U^j2{Qk)3%`+f9fvS?_a82u95KFBt6b|PQ2Fv&wY z#1neM>mFUl@Sx2F^SG(lXGsp+{Qs?eCXKBGU|EFK@(=qD-UWtu2&#%1739sJV_u0F zwE~I$MRND(?d)9dZdU2z_DFcd$odfqz_GtmVos zbU;M73H}4tWnopR*rPL`TV8hJeJCqJj7hKc{|qrOx`vtvD)1=YIr9&3*4@iZ77W%` z@Vl>$_=*x8w~;jjafxBHrz+@N1BDxR?)tD+$PFx_TkC5$Hsk^3!Blik0k;9~g2wVE zjqx<}mV}>TKD(4;kK>7|7gWFI9yfugAur=B<*sb$anU;JU+}Lq`*-BK?dBlf_J|ax?t%hl)31Iza zuv#7QBqvP-3(Bx?z@l|(024@AXLGLoIFX&5QZ6q>JO_|ijiU>UgeXISdw)a5dCS(( z1B%3GBqC!s=m`N^pMY9D8GQ|AmTIAjTh#J#tpE@toLHI^5wS1)w@=-_8GzGuFmXYj za}_Y@&^ZD?+0Bny@f2?Tn@`>XH4rdeHKkRyIF^cRi?z}H3t%ek2w2>ci`5SBNn`Kk zxoGK~gxT!_Ld0|cE*%bTKp_>_mv>^0FuV~czkt_V8YCKGvFBi(NfT_eiN`x(gbtS8 ziq+9qae?W_k2#pc!ZF-*%g;$9)|u2y$T)jpP5a^joA;yfH~5rW)~lg(XAHSnL{zEp zwz65`XIq-r7yeTzz=RLa^O+zC+oo(+qItp%7{O{q#lwp7Xpn@_QD;G6VnAI>=k5_& zS{j3Qj50pEhMkaTVE(TIGq82u|^N5fT(GOel6Mp;K-{1COi#-99ybnKKkX z;ck(bUrb&X4xUcl&-&SO?^y>qRCFnF7T`I1p+cDksWSx)r?67e;2l;1RjiIVpCXZK zAO$aUD(MnDqenU`d*|5-cbG9hTU}QRJw`BMIP{yXxmKWc|Suv9P%*2SFL8Cq|%h)gs9F%2n zRo&J#lCx-@v%w=+zp}?peLz?42CFqSDG7|d;hG1#dVZRs(>gfnm$`tkcX_>!L_Q5A z$8!of%Z9^19x#YoHRm(|Q2-2dZI{~MUbF^9VD0R5tT0bwD~i>P3X5@x?m!RVu9^%J zQ_x$U@PMf|93?q`LHD75Ccr!MK&8Wy;)8I?B+xia;Cw;8d`;4qF=!h=L*Kvm5qj|f z8fvW!8nK!36yzLEG8sIYwnvaL8>n--zt*Q#o-2wjEdGT<1eMZ!=pQb+3WFqRT2xX- zuS6LzK=_CWIL<<26MAROCJmt&-%N}HerMFflT3-Ep}1bXfBhSn(nU>`_j=+WvJ0Eib8%1!!GjO-;L;RL ziQ>?ih8#5^{60DkJcK`hxg*e~`tt`@La7ES^R~urysA0+Xs=3ESSHNR7AoT34B~Vd zqPfe3cO@ulP$bsU^D7oc)G%4`C#&(=tv=o3t~)s)?)Ll#ZHlT!hdVJ z1CcZvjf!+gvv6{VhY)!H=HS6UIO4aQKE0kN_Y`fQo~lo|$}v^>g~Y zXF=jZ9`V7s1?JuBi3{58p8;ObjPR51@bC~|lnq!1?XS4!aKwdLW(#hn z3o>S4bpXfQ9Y7b%XM5g&?Qayl8_p1H21D@a>(z?{BpYas#Rlk$>}i7V#@BFtqN{uB z08z$(yVFZy3+B@Eq_Ia2RBh1+l+0k!u(bG0}0g=$pcZMT) zzgCk$PsSS?|25n@ZQ-4^Ww{W<(_n5oKx(Ov0Kk&T!M$y*l`R#Wjort;>59gu>SxFL)yf?E08#7f#}Y z#b7R{^XKQr^w(xHB9in4_>;pXuZu`>iOBp3!4h0FhXzabOCX}(Tvo-8=*=bO*8MIB z>&P51meK&*HDC4BMiGEcwkbBRJOo@cY7`*wIQcYGco7resR=fsgsHPA&9N&buImy> ze?a1Obi8}@FhoJmWxjcY8c=k&M&j@_-uM!@lpCy{Cah;2VgoG$IHkNI0_=;=|Cy^8V zW=i5`v{1t>csdn&!geV+s5$%sj=fY@>P-K8L`VmHLNF5FT;gH5ES#@UopNY3_7-q7 zexufJui;HL3Es^Lfa)(tS`8&g57?AJ6+@1r=kL4QfA>69$plum?AU{jN5%sy;}^J#fGvOrUVaG>xb!GB7_hGa zgIHKsA~Mv7<2#H}6WPwHDO&L8Zm>Z?v|Kpf)DN+MdhiX*Oc0u*e9`(YT%1Bm+^N2O zI9hiAty=HhXr173zQ0DXO#4McFqtCqp%C^$YAJx_J*aPsB@*!!p_f@z`c1ncx;0)uyKSMa8O zLQ!u3@xM1rL;(#1*41~q3>RbJ0+{8{dbFLt+;?a}qbY#jIKRpVZBqip5I)6*dRWIC z+^G4xL_i73U~q03%3wn>pXLnjeEY%&Ek-;7VSF@1%b33qCya{$qs3!VcMMHXH7MR_ z>260`^Zz5GW+@QOF5XPjlh`a1+*7B0zUqY(vX%I(?l_#(8xmZUW1x)$R2!|;s5KV? z)K(5BRDgTl9JXAU{PCsU=Vtz&brps{msFFV#izM2idv*%V3d!1Qj3Am)`{M za`VeyE<=+>@Nfe=}%19+KcoR(u@3S;G_a2M||3 zx^Qkg&dmsb!J!ZU$A8g!?8rMt&4OCHo_6`rBE{Pd-pRfKz24c!Cl3X4|JD>MNW6U9 zuL)a>{XgNz!mC%d?q-)qf*t82%h+&)x-1RR{qL{8K3iRg;NJ-W zA;g@lZpEB#)6XY(mli%W#8<8d!I})QYu@AJ9MS270m##^Q#Xz1@rMCF^?!pX1AUbb zRPcuShd>omu-`!6-(EL(w>u10IsP|)KnQnqtV{f`d!bj?}uI#F*Pc%MQ5|-h-|Tkv2nLeCAUYWFPw7~-#51W zLy>!*!Zr7Q``-w~pt{n&z&6bce#H?um^AM)?fMVe`ZMa_6GG%%a;o7GHN$+0|-%ziDcmL{{vvdITA`jC{ zfGu~=HxAo!KruuvgL(@`4RAOo?`O1#W$0`%;R}(acvxS{s+(?=QjEZ22i|zBfE>70 z7(5ffMov~N#2>>M^bFE-W2=B9|BWz5sB9l&P^i_u)6@*dAA%EiQ1Ea@2@3y zw|!AH69S37=LspI?_=p;L6Z-oX`>|g2@N;&5%8nd!s2%oc7&Q3(pS?7tB#J6&bThcH1r@t$RcKsEC9b^!~ zl??$f6K1?c_PL`GppaWDxw&pVJ92Vn`MgaRRkQu@7pg#ER~_WuaGkHvaKRfrMGkaWq=K2f-$V>yn50!N+zv4Q1`5?t!8>xM#NjEcK5EQRU)_4kz61raTQD`^HCKSS3h*g zN8asb$Nm{RHStyy+BPt?B-*w?LP(KGc6R&OA*M0vN?DT7s#<%Wj!_(0iS|}sW}7vy zC3N59U!x|FR<=2f6N>yuGLzgtsOdfrkeS!K7a!9@FYsQ=BNbT^ePB(-0K(3&j7*Vp zy0PY-679o^#CPj`*_o+AQdr`4qb{ zc`r`B0Oloq;g6o4+v05z8cuk9gDzv)&cvPWiK7!!)kW)Kv?Z|9gR58h7dK=0Pk?Ku zW{`~EH<`0#2OMMF53;h~q7vUjK+j6ImUzISq8)4GoILN2+g&q$4OCKiy72}b%c^*w zTL)gVPP1F&bn91iVaz(Rao@2u%LN<Atn8|_jWl=}%s0tD6rpq2or zWyik%BooP-RP6snjDI~(S{Po!G0yY=-S5^3u99aN!|;%C>0ISC%7kd0S$cR8^*qdY zRb&)<((S{Mq$zW3%PvWSe$S``NoNrbmhB_kvb zsFJZ1VPv#Jtvv7H9QKsJiY=iq6jd#_w2|Vi3amGJwp~MlaoxtPs9ytcj22k6%TRns zou2*>_tWFKu>8x{+RAtbR!4rwWIQx~gEZcOAgT+BD#wP`qrpcG{b7`8;VF2vr$o(TBc zZP3g~BjgE3;dl#R%ruprV#n$3yaZDsSyVHDB$KO!NEdo zJ!?6<)$-e;s_Hptov~>eYCIlITZ6Tku1Uc>*e^R;e6KjmcUn3=D!}2*hXi>KuYa#% zKS=5rtg$eYTdE_jhk;?#oCWtJI0RASu{$zD~-0p!Hj6PT; zeNSVXK{(pm!Eow6-Ae2#rMSf~tgCP(Hgz=mSAD(-r@sd+Lz(#jK>jd;(1cSPog$b@ zDm6=S*4RC@0on-}Z($_1ziF2bQ=-Lsr3$yD2||np(}Mp^G6LzE*q^gRIL-rPmxO_M zf=}XYY$EU$4BHwtZr)fqix6#MR*r)v){WJabZSDLMX2AXcVchlM7X{jxc)-t^kBB= z#K6E~>vMDLPry=Bz}zUL8d};7j`?^T5rN+rlBtNevVO4^Zs`n!5Du#%H__42U!{cw z1cR=~UwAHxybj#}-yIMLi#M^T???SB|Ds-*^c}x!)w05(&z7Eo=3oa<1~(y62}*Uh z`NLb@-xd~J04oG(zz3E+*f;x#cpL%w=4=TCM!D~wevSEwFOvg0gL)OVq}jutt^H%4 zz+?<22Ko)lNlYv&M)WT`@ScSG0Bprtgns}yzySmgI$7R8K)OkSFtSirluZ#3boPxdeZFa0mzmiU|`1-g!vgp;K9$ z_0{sm5bRQfMk&^M27a_c)LMVhCg&-MRX#hzV-OASYBqYY ziK>G}C4tWuPZFHz5MVHv8c?lT0#)VBu~mbgfh(2f^rx0(R-hE_FWcX0K&egRvmqYP z-4nTxf+wQcc(hTKdI9Tah>NKc3?;QeQ?z4eE;i;SuL*z50Zt@%fOL2`{FsKvY_MI0 zzjwkIHQwgQU|d_J48;3`Z$)VcdcaAWpk1Xa899Sx4h97gY)}xeg_GIw!FducvIJH6 zKL;EwAE+H!5d4IX9}F7IH?Svij^v%iO7x?^kxXa!J+lB8WZ|YIsN18&rkNpi5j~&3 zc9`{kXI{GaQgUum%IDTkqN5+fmUxkSpw|-=8BIK#XeyxBQy05@fg4;nSMSJ)WOo=X zIZT*l;$JE80Pb;knCS5r3@4tsk}h)D`XDh_4Fx=h7^lF&wAKY1Zv1M&Ys@pXOTkeR z2#h~Mrt{G&S>%?xntmCG&kRLamSFO{eoq6F2R@7voamf}Iq>h0bT+TrRcsB^I)4Q& z*dMql+)8fFmf2Ln3!G=dl}NMYH{Sa{?OknHjO+HFrYTcto0O2KQKTG+sBC1&OOBLx zDJopjkunNJ(Tv3QR{Q)NLP_3AByW2wFV!RL&V@{N2&E=_Q(I`*+bK!T?|$Z`XX@GZ zmvj9;<9GhMVe$6}enoF%kmldh7=Q^J7Y`Lvc@#FQrSpK{)c^OaQMQxfOSg zUFU`}9f6KENst5>JkFINOnDT~L4rimj>}bV4sX=w--IS|yO%wO4grsZ5S&*PeKBO+tHolSMCr)iBZ=DJ3GGoJ4C+r@IMX7;0RPGTpMEt zueIakj0nqT%v#`w>3Afa4SfegcyC28^E>S{LaPy~>#GoWAN9Hd4z>Jg0yWpIP*TJpCanzZzsGMQl1chdLtWA< z7~nd!pi(ASdXlO-4!_bIn()%@`S0=m?{{a}G1hEmCN|8Im&S!W`K{VY)Z&RsD+0H7 z;vZ=@18F>kNaGm}6E}LZaF7=EAc>?P+~4^*pk~$Uk6CFHfosJ)xJK&60rEc9Aa0|f z1N^PQ)BVpfhEs`b4Omz+C(>44mn`_aJ9G|Oigba53+$U_wE2hDM`nWn` ztK}L1A)%R^E?{%BY$duL1)CWPoxDK1#ecXE#VZZM;j7|#ohBmzS7qIyc()>|>dDFMBn+5zaS>AnN>LxM za_`kU!9~@McU^=6Sz`VqJgyER9|C9w$e$2 zNY1!M_6@{#3563tvx`I?u(zPB+zA5qpJ)YiQ@fu#PqHjnQ z(;<-#0`CXyxw0rzL8Od1b5Rg63Jyjqi#VuAkp+ddy4W6psnL5)d)ec}^xPOj2BG-a zs6d=W24j%BWi$Jz#hD0|1&G{d{JMpc(S5gK9x0D4HT`DpG@7nxrWLdI)}C89eQu58 zFblfjHVw^NvlGy~^~5Z$Gqm6Gw8W=mis=a`EP%~69E@`Io~yp$qKC`_5UW7P`F>eZ z_4cht%(w^^A;tn*A0sTYXpRrY{bMk^2$3Y7&me&X?{ zPpJ!;S5IjCjILgj9njv(+(C%`RQ%NSS2hr2m@yc&dsO}V)zZWL0*ed@eUz>T9t3mc z!+8O%ukX(fGT4;dcrr!DFq2*Lb~0iu?8t z3gYF@$}7ToWG!6vTD}t^&0K=x1;+^c>6nBJcT z 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 diff --git a/docs/img/logo.png b/docs/img/logo.png deleted file mode 100644 index 53ffc6ef54ec887ed6e66805b91b636915e4d536..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6458 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 diff --git a/docs/magic-addreses.txt b/docs/magic-addreses.txt deleted file mode 100644 index 3dbf630..0000000 --- a/docs/magic-addreses.txt +++ /dev/null @@ -1,8 +0,0 @@ -Magic addresses -=============== - -This is a list of magic addreses that are used in kern. -The goal is to minimize the number of these addreses. - -0x1000 - Memory map location, bootloader.memmap is a pointer to here - diff --git a/docs/modules.txt b/docs/modules.txt deleted file mode 100644 index c1a6032..0000000 --- a/docs/modules.txt +++ /dev/null @@ -1,38 +0,0 @@ -Kern Dev Struct -=============== - -Independant Modules -------------------- -* Each MUST have their own directory (eg. 'kernel/', 'boot/') -* Each MAY have their own internal independant submodules (eg. userspace programs in 'usr/') -* A module MAY be dependant on it's own submodules, but it's submodules MUST be independant of each other -* Each MUST have a makefile in their directory (eg. 'libc/makefile') -* Each module makefile MUST implement the 'all' and 'clean' targets -* Each module MUST be listed in the 'make.defaults' directory -* Each module MUST be self-contained and independentally compilable -* A module SHOULD output binaries into the 'bin/' directory - -kern (Root "module", is dependant on all of it's submodules) - |- boot - | |- bootsect (stage1) - | '- bootload (stage2) - |- kernel - | '- libk - |- libc (C Standard Library) - '- user !EXCEPTION: Userspace programs are dependant upon libc! - |- coreutils - |- fdisk - |- init - |- mkfs - |- sh - .. - -TODO -==== -[ ] boot -[ ] kernel -[x] libc -[ ] user -[ ] makefile -[ ] make.defaults - diff --git a/docs/filesys.txt b/docs/os-filesys.txt similarity index 93% rename from docs/filesys.txt rename to docs/os-filesys.txt index ea0a32b..7e2f1be 100644 --- a/docs/filesys.txt +++ b/docs/os-filesys.txt @@ -1,5 +1,5 @@ -Filesystem -========== +OS Filesystem +============= Here's how the filesystem is layed out: / diff --git a/docs/syscalls.txt b/docs/syscalls.txt index ea54056..9fd7fc9 100644 --- a/docs/syscalls.txt +++ b/docs/syscalls.txt @@ -1,11 +1,17 @@ -=== System Calls === +System Calls +============ -Syscall handlers are prefixed by 'sys_' -Syscalls can be called using interrupt 0x80 -The EAX register should countain a syscall number on calling and it will contain a return value (if applicable) after calling +Syscall handlers are prefixed by 'sys_'. Syscalls can be called using int 0x80. +Arguments are passed in registers like this: +* EAX - Syscall number +* EBX - Argument 0 +* ECX - Argument 1 +* EDX - Argument 2 ---- Syscall Table --- +If the syscall returns, the return value will be in EAX. +Syscall Table (TODO: Update this) +------------- | NR | SYSC NAME | RETURN (EAX) | ARG0 (EBX) | ARG1 (ECX) | ARG2 (EDX) | | 00 | reserved | - | - | - | - | | 01 | sleep | - | uint ms | - | - |