Hu€uY|1؎м @|ff19EE)EfDf\DpPf1DfD BpVff1f4T f1ftT D ;D}t*D 9EE)EfT L ъl ZRt Pp1۴rFÎEXE`11!`a}<.!KZ"!?!7#!1Loading stage1.5. GeomRead ErrorF<u p"0.97/grub/stage2 p /grub/menu.lst1؎Ўgf-$ffg$faBB)0D$%fD$f%áBAL$ Qfgf-%gf@% f"f#f؎Ћ$$ĉš$1@%$$ĉf ؎u# f"f#f1؎fUVSEff1fU f]؎1f2[^]USWVEŊEfuU f] eEfC1۾s1Nt0f^_[]USU AUrUu"uu0f[]USWUu?u`fyl$@}1$?}̈@} 1_[]US\$ ftff+f[]ËT$`_0f af'%U($LDB$;$BHB"BED$$uEt$ B B ÐUWVSEMEu)Ѓ XWX0UȉֈuˋE9EsU9w[^_]UM wt]1҉]US]M :u1u !ҍt&tT:Tt[]1[]UUvv.HBM 9s B1=B]áDBU 9r1=B]UMVuS] ~19[^]U]]uu}$t$Xt;] s$ߋu =Bu}!É؋]]ËE ~ƍ<;UVS]u$t$t~M ؍39u=B!É[^]US] t ][]$ ][]US]t$u[]UVS ] uMt A%Et‰$qMu [^]QAEuuD$u4$D$!4$bUBB"vÉT$$4AfÐUM=tAAB]áBABUVSu] x;B~m B Bʅx7)9/B;B3AtA@] u A[^])ӉB;B~1[B^]Ë B1[B^]áAU@ At]]UWVS,uBЋ}U\BCM9 At5D$B $ +EBABЉUM 9 BBM=B~Ev ~EE 1uM] ))ӉMM;BUE|E;}~U EED$pD$T$ D$BU$T$j=B;}BUBtM u4=U#=U=U =U}M);}~}BtwB)9\$t$U $Љ)؅~Ou ËB9v(T$$D$BB)9ډr؉D$D$4$B|$ML$E$)}U~B1U}U 1=B,[^_]É|$t$M $뢉Bvuv~#B$D$D$D$pD$D$ D$BM$L$:BB1D$p|$M D$BL$ E$D$B1,[^_]B1,[^_]UWVS}u,tEʍ[vt}Mu E=HD9|9tU ЋUUU% [^_]ËM(U uM$t$D$ D$U D$M $6&fU!U$1҉<^<V<Nt&uB1[^_]ËU:v=t$D$ D$MD$E$tI1Ɂ>WEVwB/E U(M$BE %=tE %=t1M E tB1[^_]B1 UM$EM  ʋMU~}t}t}t EtUWVSLB A9 ABBBt.D$B $  AB ABBE=BB AD$$T$ $D$ |$t$D$BD$BD$ BD$B BtPBtEz9tD=t1 AeDž,B1L[^_]9uȁL[^_]U$VUu1=BAAtA1BUVS]B=tgAށBt[vBu-BB{/tFB1[^]À{/tt1t&塜BAA1[^]áAt@4$A[^]B0[^]USU ]MD ;BrB1[]ËE B\$ D$% D$D$A$;[]ÐUE]AUS$HAx$"tPB3D$$(=ABt,D$$uvs$hAbAD$$D$PUS T$ D$  Љ\$$[]U‰ ]u} Ӎp 9sP= BtXi  B ]u}]É 6)9= Bt\r  B ;Bt' B !C  ('= BBt`C 6 )Ɖ B ?ta  ?É!؋t)  !ƍKB7UWVS<DžDžDž1һ  5(ˉ‰ơDC L!Ƌ=(ɉtXH   1ҁЋwJL BBt5X=LtX  D$ #<$؍D$  %=UJ$y7M9/u EE8/t  (%=@Uׄu$/t ۍ&tÉ$tۉDž H ;V B  ⍔  @#HVfXFLDFD$E$:FLUU1uMt$t  =Bۍ5BEƄ 1 ⋊hug  9t$<$B/}}Dž 늋1B<[^_]É\$M$L$j!(t$D$<$Oo1B<[^_]Ë  %=t/B1<[^_]Á<1[^_]ÉB9B1(B1U=Ax Bt@Bt2t*[vt[v t1Ã=B&vD$ D$D$$t1f=8SUWVSE E6E\$D$$2)] E B]]=BX ىx}ٸ] P! )9~ÅtB \$T$BE D$  4$.BJ=B!EE[^_]ÐU}}uu ]F<$s]D$#D$$E\$|$$Ku E9sD$RD$$fDžB\$|$$Hun]EF u_]]]RFD$ FD$t$<$uFFFF ]Ћu}]Às1ۍFD$ FD$t$<$u…u ^^^ FEu0F1FFFF rMEʃ?ENFF1F 9U8]]u}Cu[E1s1slj;;s2EUt$ |$D$AD$E T$D$E$?]u}]ËEUEEEEfUEEED$E D$EB$tSuCCSUC ET$U\$D$E T$ UD$$_Error %u ext2fs GRUB loading, please wait... internal error: the second sector of Stage 2 is unknown.>A<:=6` ]I}`IS]IN 8B k-w9B6PR]I`?]I]I]IA]I]I]I0]I]I]I%A\I]I\I޲\I]I\I޲h{_I_`I_`I !"#$&'(޲A\I]I:\I޲:\I]I:\I޲ :\I]I:\I޲A\I]I:\I޲A\I]I:\I޲J:\I]I:\I޲:\I]I:\I޲ :\I]I:\I޲HF:\I]I:\I&޲; :\I]I:\I޲A\I]I:\I޲:\I]I:\I޲K:\I]I:\I޲x:\I]I:\I޲$:\I]I:\I ޲+ :\I]I:\I޲:\I]I:\I޲HF:\I]I:\I&޲ :\I]I:\I޲ . .. grubkernelssources . .. menu.lst stage2# Pretty colours color cyan/blue white/blue title Real Mode Mandeleiev root (hd0,0) kernel /kernels/mandel1 title Protected Mode Mandeleiev root (hd0,0) kernel /kernels/mandel2 RV(^f-}|t>ff19EE)EfDf\DpPf1DfD BpVff1f4T f1ftT D ;D}t*D 9EE)EfT L ъl ZRt Pp1۴rFÎEXE`11^a}<.IZ=5!/Loading stage2. GeomRead ErrorF<u  v p0.97/grub/menu.lstt.lst1؎Ўgf-ffgfhv)0``0farD$S1S1S1S1۹SUSWLe7zUnw1۹0X Pf_[]UPVRvFج<.t<6t<>t<&tS11rMPu&S1f^_[]ø@US\$ ftffef[]USffGt[]USWVD$ǃƋ\$PAMSVf frf=PAMSfuff| fffffD$^_[]US1 ru11ff[]UWSEǃøOfz[_]UWSE ǃËMøOfJ[_]US]wOf$[]UT$Z$t@sf]ufa* *$*(*vD}@)$= D$`@)]C@)CvE+C $>|CvsDžu{ƉCK S9r9s9w);M&v D} =v D})É1+ Dž vp*Ch11Dž1z Dž@HdrSUfDž? fDž  Dž p*)߅ɍu9;* 9D}i1vvu[G%v|$$ ^v|$$ȗ9tD}u D} =v=D}vD$T$$gg v$ L$k^5D}[p*+*9vɉt%v $*D$v$ ]D$v$Ŗ;$ ]v* *$*Džw@)$= D$n]}@)vDžDžDžr Dž~ DžDž * 11Dž1z DžDžDž~  u D$|$ \$$ \M D$  $bt/ED$$ aEEfE D$ $NbEED$|$ YD}E$Ykmgw|1| .T$L$$bHdrSu fw*?) D$F D$$4dU $T$ mt,1 Dt 9r؋M D$  $ a~$lv|$$v誓D}\vut}=҃UvD} Dž75v$0 5$*vD$$Z *E1MA;*EƋP uދxt׋@ v!‹EvD$UuE\v\$$.`9v\$$~9؉Mv=vD [1f*ƅq -= v  fffDž Gf>$ XE$ D$3^E5D$D$ $x_D$ $>#|D}X|I$ XD}8v*ED$$ϐ UvEv$  *ED$WED$v$胐Uv9 *DžYExfiS9T CCmCeCmC=`*D$u$T$RKXfDž?fDž fDžE$ D$Z\9E`}vf|8D}ED$E$kSH |9t|8m ҹ АU|`)))i]Up@ t1U1i]Ë|Uu`)tD} ]1]U}=*M *]U1҉ىu|*9ЉrZډU1 UEUU)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~1E]u}]ËAUUTU TUA]U1]UED$*$Qt %*1҉UED$i$QɅUVS0]EE؍EE܍uEۉEuE]EEPEU< < D$E$QUuv< t&tUt< u9uMUA9~Eu]F9~8x4x0P*v"} ( ( Pv5Tvt&10[^]ÃU9D (tXCX+S1UEt0ED$E$"PtE9Lvt } Lvt 1øá(tWW&R1UE$ D$ E D$ED$RU(ED$E$OtUT$$ D$zR1҉UE$^D$[R1U]ˉu|u$E u { t)D}]u]ËE$ D$ RNjESC  B;EtJSBt' D}3Af]u]Ë3 fBEBҋC9uU|]ˉuuu'E u }t D}s]u]Ét$$ FQU L}tL}$Q1L}I$Q1U(*u$P1D$ D$D$D$D$D$ D$$D$P1U|u|$? VP1|$$ t! Ct)t؉D$<$>uȍ[*L [^_]à 1[^_]UD$E$>u |1ÍED$|$<ɅUWV1SLp]}EEEE\$$QD$D$$J=tD$ D$$.=uD$ D$$ =uD$ D$$<u*C EED$<$;WL[^_]D$D$$<u:CEUT$<$^;t} D}L[^_]D$D$$P<u EEE;pPu[^u[^u[^t$\$ L$$D$=L1[^_]kE8o/}uMԉMkE8oMԸ] EЀ;t\\$$OE؉$CooE8ED$$;uZM҅Utppk=tEEtLo1ۿou8EtW؅xk8o]kE8oEpruB9UȣpE MȋA4t &Сp@0t$fЅuEȉ£p@pB tD$$) 1OqU9ЉE=E̅uEot4o1Etp$;C88uӋEȣpE~EUU1D}!US]$Yju[]V1uD$$*|1҃[]UWVS }<$KA=o1ou-8t!D$ $9uk8o<$F@} t'} t 1 [^_]k8op 1[^_]Ë(t>1?fu^opopot$p:$L9$}R9/9 [^_]91]U8u։ƒ $h}]D$ T$D$<$5%=t5%]D$D$$5D$\$<$7%=t3ƃa]D$D$$G5D$\$<$7<$D$D$v7]u}]UWVS}$|$J?8uD}[^_]É<$|>4$t>EMɉt 1Ʌ>lj5t1Ʌu%&fҍvt#t& 9u9 f ÷1LD$D$$@D$D$$$@1[^_]ftt- $9u9]tYeE f $1D})D$ D$ $T>0)D$ &D$ $$(>1_UWVS<]$EԀ%EEEHCEED$E$3kE$;Ɖ\$$XHD$D$$4tD$D$$4u(CEED$E$93EED$D$'$@4u)CEED$E$2uID$D$/$3u\CEED$E$2bEq,&fD}<[^_]D$D$7$3uJCEED$E$82EuE&kD$ D$?$3{ D$D$I<$2E!D$D$L<$2ED$D$P<$2Evt*vEv<[^_]EEEt&sEt&cD} Ѓ<[^_]ËED$E܉D$ E؉D$EԉD$Ɖ$1҅/9UM)S4EEUU]EEEEE$br$Ѓ<hT$D$43*%=t‰D$$ 3*%=tƃaD$$2$2L}D$$kuL}bND}4[]ËU~3}Y Eh*u[^)؉T$ D$L$$[ _2$Z^S2Uhuu􉅰0)Eڡd*M]]ԉ}=\*EԹME鉅tiE8uh)E$d*\*`D}=\*5d*]Ћu}]D}D$D$U$/ )1ҋ)x9nu1)ID}xuL}D$ 4$jEL}L}~6D}ED$$-ED$s$6t4E$ 74$u7u)ÍED$ED$k-ED$ uD$ $09ED$` 4$D$_,} Eȍ\$D$ D$D$r$Q6Et$D$E$6Eȉ\$D$r$=PẺ\$D$ D$D$r$QU )ЉD$EčT$$6Ẻ\$D$r$O*}Eȍ\$D$ D$D$r$PGED$ED$ $6Eȉ\$zBUEU ]qUXE]u}$Jt:=ry*wft#D}]u}]øE$D$@EED$E$5+t́}E$D$?EED$E$+tE$D$?EED$E$*hr|$D$ D$D$$O1]E;*vD}E܍MU$EMEU؍]Ѓ$ƄE܈E䈄EEEЈE؈EԈEfLJU*E艄r|$D$$(M3U$d)R| |UVSӃ E8$7HYto*D}t$$\*rd*=EED$E$(ED}$_Q|D}uJ1=D}t [^]ád* D$$e+\*%=tT$$h+\*%=tƃaD$$>+$r2+CXvuY*D}\*rd* 1[^]ÉD$$l*\**d*rI 1[^]$:PD}t$^*U1҉E]UE]UXE]u}E$8F=ryf=**tftD}]u}]ËE$D$;EED$E$&}}ԍuE܉D$ E؉D$ED$ED$ED$r\$$|$ t$D$$PtJE;*uE؋UE*\$D$r$IUWVS1ہ\d*\*DžD}t]r*`Vtաrd**\*E$WtlD\$$u(Dž1}ErNU܅t=[v2t*t%vttE*UD}D$$UE؉T$ UD$ET$UD$E܉T$D$ |$D$$]NbD}7ɉd*\*D}\[^_]árUd**$\*V*ECtCaD$ t$$T$'Dž\1[^_]Ët$$~D$&DžU]]u$.-d)t=sD}]Ћu]Ãw$^1ҋ]u‰]Ë|p2=vD}Ћ]u]É$t$\$G-|$D$x5|1kUE ~D$E$~Ud)wE$薺ɅD}UVSpuD$$D$4$].D$D$4$z,1҉tȃ?D~xB]؉$D$D$ D$-\$D$D$ *D$$4^.t$$D$t$$$p1[^]ÅefyUEMU u U M]#t]EU M]UHuu}1]D$D$4$v"D$D$4$V"E t\]ED$D$ *D$\$$4^-4$)|$t$$$1҅u1]Ћu}]É4$.*=~ZD}D} 뾉t$$B5Ot$$&5`)D$t$$L*)`)D$D$$+1҉=):U}ZɅUWV1S]:D$D$$ \$$v4D$D$$ tD$D$$ t$(| =_D}[^_]D$D$$K [D$D$$+ 6D$D$$ D$D$$D$ D$$ubx|$\$$ (|D$ t$$D$d)1=|Ѓ[^_]D}USE$<D}t[]D$D$$)r$˞ft#D$$ fu1[]UW1VSE|]UE)ЉEϲ+EUUE⹉UEEعUEEEE\$$1D$ \$$9t͉\$$1E8dUt$$1$ED$1EEĉD$E$uNUED}U~$Nu9D}L}~|[^_]ËE$D$1ED$$(X4$;t Lu:vD$ D$D$$9Wtȡr*D$;D$EU$%uu8f=>tKD}vD$$L0ED$FD$$m%f=Uuvufz3t>9UBJyEEE t&LEEE$7EأL}D$$ >U#L}uUU G$-G$ G$ EG$M=(  1 ȅXveL$ t$\$$1FU(}}]u<$t]Ћu}]$qG$` G$OG$> G$-EG$M  1 ȣ((fL$ t$\$$)1GU(}}]u<$>t]Ћu}]$G$ G$rG$a G$PEG$AM  1 ȣ((fL$ t$\$$L1GUWVSt $D$$~u:~u1*$,D$*D$*@u1[^_]$50*,*E$lj;u}ǃ~8t/F VN^D$T$L$ \$|$$)t;u|1[^_]US$E]$5t_D$$>t>E$u E <^wE$$? &뮍T!1҃$[]USd)u?p@4t pod)vD}[]$K't& |ft6d*1 |ft9u$|V$d*D$|$T}D$@)D$*$胋藋*$D$|D$+ţd*{UWVSU MxMtbX tXx]ME1 ZWZ0E1ҍyEu9MsU9w[^_]ÅɾyduEىM-MUWVS]M }qȉu %t6E Vw$OtuM 럋D$‰D$E$UEtЃuM ]M K+][^_]UWVSE80 1EʍAw QЃ Uv5 Atv"EEU 82[^_]ÃWM1+E9wuED}#1[^_]OAw xODD}1[^_]UUBw ]UM wt]1҉]UWVS]}u t':'|/1LT8|8u1[^_]ø[^_]ø[^_]UWVS}u9}SӃuU YtE )ȉ9~*Bu19D7} [^_]D71[^_]U1ɉVSu]  t$8|8t 8}[^]1[^]ø[^]ápU]HᡸpU]HUS] tI tp]H []ᡸpPtһ)$ u[]$ tt&US]t$mu[]UVS ] uMt A%Et‰$2Mu [^]QAEB< w$O$m$v뒋4$D$‰D$4$5jUpxPpp9}1p$Z^p@$t $$PpP$t $P% t&t vtpP% u$PpUD}B"vËpT$$QD$lUWVSqEUY O$M1k_(_U9ЉU}H;GG $_;]}!9_~fGft؉$>;]|;wu4p@E+G~1$E+G9[^_]É$ ;]|띋UEҍt&WBTG()ڃ)ЉGE Q YQ(9|M)ڍCG$$ lw$G$&YD$w )]A$뾋GEhG)P%D$GG$pP[^_]ËM9O6$ u$<]_ $>US˃$ [1]U‰VSA(A;A}sAp@t;A()9QF $C9^(~:Ft$,፶P%D$FF$pP[^]Ã1[^]UVS˃A()y$A(t7C)~6Cp@t<~1ۃ$9[^]A ;A}[1^]P%D$CC$pP[^]ápU]HᡸpU]HUp@uH $ ɐU*D$$8QD$ *D$ápUUH,tU]]US]M :u!1u$ҍ&tT:Tt[]1[]UVS]t,Jwt [^]Ãu1UWVS]} ;t97؉t$8t :vu u9st;u1[^_]É[^_]U1U:t <u]UUvv.*M 9s D}1=D}]á*U 9r1=D}]UMVuS] ~19[^]U]]uu}$t$Xt;] s$ߋu =D}u}!É؋]]ËE ~ƍ<;U(]ˉuƉ}CI(S )D$ʉ$D$dCK(S{E))9S)Ήٍ]1u}]+}ىUWVS1ۃ8t <uO ;}G(9Et}AW +ED$M D$ ‰$\$t$G G($GًWO(_E9ЉO(}Sw)9|53)ʉ[1^_][^_]ÍCD$t$O $_+U1[^_][1^_]UVS]u$t$t~M ؍39u=D}!É[^]U1S U ]:t <uH$L$T$؃ []UVS @}i@)Ѓi@i@\$$D$nt$$u@}@} [^]UWVS\]$pBE\$$&Yu pP؃ tG tB#C^t&w֡p@! ,pP؃ up@u $ U1ۉ$\[^_]ËE ]ENEċEEE`EB p:u1 uPv+(E(EءTv+ (pU1:t <uU E1:t U <u}@EU ET$EЉ$MUEpP  Et t&v@]&tgvG^t&]&뒍$|P=?E@t&JE E?ƀ@?/U$[\[^_]ËE~Mĸ7Mĸ*uE;Eiv݉$v 9u &f{MĸvSG]^UMEE0EtщD$E$D$0EMƀ]|Mĉr뗃}U1;@}]Љ9t U];@}:i@)D$EЉ$U1:t <uEȍM1҉E}U1;@}p]Љe9t U]Ѓm}QE;@}Bi@1D$$ U1:t <uEȍM1҉EPTEȍM+E@E1E< uU2< tN]1;uEMɉˉM~,EЉM| t]B< t uE)ىL$EEr$ D$E)ƀ D$E$"D}x@EM+E t)$ D$U$!D}tE0=M' E;EfMĸ/UE9)ЉD$U$T$9EȍM+EEM~EMĸa8t&t&8|E$&\[^_]$ EEt:MЋEȋU)ЍD$T$E $u}tE;E|r1b]Ѐ; u1ىE< t<=< tkU<=t&< tPBviE@E 118iE@E t&1;uE@< 3<=t+UNΉӄ<  <=u t&EЉD$E $oUE S]҉t0 t% t&ېt=vt/҉t ۀ=u ft tu[]vù=fU[^UutQD$$QUWVS E0u]}it6i |-t$D$E$^u߉ [^_]ÉD} 1[^_]< t< t<=t}v< t&t< t&t<=t&u7eUWVS =,*rD}d*p\*X**t *@}5D}u)D$|$E $wE 8u& d)D$D$K$IE $~@tsu@D}f5D}p)D}xp [^_]ËE r$D$D$$V띉|$$^Fu|$$^{n 1[^_]$|R` [^_]UVS ]rD}d*p\*X**,*t *@K$)n,E $1D}D$D$ D$\$$Rhu';t$ft@uD}뛃 [^]áprt p\$$D$$VpJUWVSL$n$*n$*p*`*n1,*Eģ0*T$Eĉ$nUċ t ¡,*ҍDMģ,*LMuȡ,*50*E19uЉu *Mĸ9M u1۸ *19uwUċT9UЉUEăxuƋ@ V tԋuFV9wr9sӍt&11ɋuĉωUEE‹t9uvEUσ~uVF9rw 9Et&r͉щV N9wr9UsEt9uw]ȅuЉʃ? ȣ`*MĻ*u4*t$ 8*X*$tD$D$$EĈXEUăBE܉у fBEBEB ftffuUĉȃ+Eĉ4*tMĉt$$}sfl@*R<*kf=t D*f=*t *t$d*\*$suEt)L[^_])uL[^_]kzȁ <<`**0*q,*Hq q qqqq1ɋuĉωUEE‹t9uvEUσ~uVF9wr ;Et&w͉щV N9rw;UvEt9uwE̅uЉʃ?n` `*1щ *WUUt+sqH}]ÃuqH}]qáqH}]qUH}UM q qt%sqH}]Ãu qH}]ÉqH}]ÐrU tT *u$wDtD} 1]É%=t=wt ҍyȸ];)tD} 1UE;p* x*]ø]áX}Uur@ qt]]UVSd*Up}t}x}r*:(t$1"E[^]ÀzJtMRtƀ,tU)tPhÀf؉jcQcED$r$]t}t-rD} U<)<,Hx}rt}uCx}JA< =rCx}*IED$*$.*=u *>,]B<wa ȣ*FEƀ>)=x}u\**x}W1[^]Á=)AtGWEV;D}E U(M$M(U uM$*4D}1#UM$EM  ʋMU~ }t}t}vt EtUS˃4AD$$AD$ AD$A D$D$l*D$h*D$ *D$*AD$r${*K4[]UWVSL*=r 3r9r**h*t,D$|*$ar*r*l*E=**5*h}l}tɋEtvtJvtBt:\}=r-[D}dM1L[^_]Ë;*D}t=$;L[^_]Dž1aD$$LX _t%=tu$ X볅t]D}D}=ry_D}L[^_]*$WD$~5*t$$lXcD}1*됋ta=ry<9t+Ba]܉D$ L$D$W$$JBa]܉D$D$W$׍[t&]D$W$D$U$Ut5r1@qur r~=r t1=D}ËD}1uD}1USÃ( d*; rtZ\* r*;/t=CD}t;/u 1ۉ؃[]ÃuD}tމ؃[]\*;*u/t*=ruv닉$Kfur딃=r uaUE*!tG8/t D}r t$ D}u$@t*U qD}1UWVSE**EX}x*8/2E p*}uEr BE|$4$SEUt<,tEEE 0(Љ9EtK1]u}]Åt=0 묁uOf}u ,)9u~ ;sUT$ D$D$$wGtctPeEŋU 94 e뮁e렐U}  E1]U( ]u}EX d;} 0 E =t9 D$ |$D$$Ett}=}5}U =t+}]u}]Ë(11떡}9|}9?d}}}D}UWVS}  D}EF9E4!؍\#LnU#U)9~L} dP}E\$T$D$ 4$*])P}tJD}uT] *PHΉM EB0fD}u E[^_]EE[^_]EU=rx *t*[w!=l*w)1}}Áu=l*vD$ D$ D$$t=\TuUWVSLE 5xEġ`UȋdMЋ=EԉUD$ D$UT$UMĉ}!EMM؍$+U$躪nM9/u EE8/t ;%=@$UMM҈UuX}/t!EEEtE$>tًUUM1vU]苂{tWt*}/E߅}M9-t*~أt*C$E苀;5#H!El Pxg  PC9H!Ћ4D#L dD$ D$D$<$pEMD}1L[^_]ÍCD$U$腰(}uCME]UUM0tD$ $At*ff몋t*oEUD}L1[^_]D}1A%=uܡp*t 0x*M1U(]Éu5*}ωUօxhɸ~REу#u (L}t |uAEh*|$ t$D$r\$$`]u}]D}1|$ t$\$$XEUWVS u tp*~g‰ǁ E!)]*P}~?]1һ)9~L}MP} $uEE [^_]US=*t*[wr tk1ҹ$mtR=uD$D$X$fuPx* t1[]UWVSLUE/t*EuMUuut$蝥t΋EU@ REUfE1ҹ$r6EMu!MF^ Evuf|;1xM)‹Erߍ\!trރvu1E K|C)Ãwمt?E-=G 1ҹwG$1wU9Up*HuƉumuEf=NMvwrf=CEfF{6/$XD$T$ D$ͥuE$t$D$ìEf=RRtOf=PXf{#CE%=t =@EȀe}{S Uۍ؍KMCeE€~! Mu܉T$L$4$%E/t|t*tr~أt*EU$D$T$ΫMƁ$kGD}"AE||.qqufM9M/uf}&u_/UUWMuMFD}L[^_]ËE8/tt*xD}1Ӏ}tD}1뿋uF*F p*뛐U} ?~1ÍXD$ D$D$$@tҁXJFS1uƋEU}u'};}}1ɃË};} tšD$ D$D$ } t1$}}mرB}B}ÉsB}UWVSL*] }}EȉEб:ұ}=}EE?]UċO_M]GE%Eء}E̋EMƉ9u+|9Ew$E؋UEUE9։U9 E9Ef$M̋]u t1;uG6U E Mȋ]ԍ MУ*1҉]Mt]9uËUԋEЉ]UEU 5-]M]ԋ*MЉ]}D$ D$D$p } t14$} t}*EnM̋]u t1;u3$] E L}M̉\$P}ED$ E t1)EȋUȋ }T$G t1$A]*P}};}}|q u*+EL[^_]á }D$ D$D$ t1$}} }}x=}I U9UU؋MUMUMB;]+])] ;]fE)EM̋EUU t1)E U=l*w1ÍXD$ D$D$$@tҁXJFS1uD$ D$D$$hth}l} }UWVS\DžDžDž }Dž}%艅}}5}F^N%9 919ED$ D$% D$F V ) } t1$d }D$ D$ D$E t1$* 5=ˁU$蛚@M /uEEtNN1f?uu)߀>ut#V1f?u 9u;M9t*t/t9f t*xD}1\[^_]á}D$ D$D$X } t1ۉ$:} t}94};}}|o  }D$ D$D$ t1$0}}0}o}p5}Y3UD$$膞Yt-5f?u9؈uƄ5 ~ډt* $Tر}D$ D$D$A } t1$pt}QK1ҁt9}#D}119v։t$D$4$譞/8USt"E )؉ÁtuƄu8Eǿr| 5p*t$*4$'t-D}1zD}1i*5p*DU]uX^=}t*D$ D$D$$]} ]u]=}  }9}t'D$ D$D$$tZ}6 ]u]]u]D$ D$D$$wRD}]u]UWVS<DžDž D$ T D$D$$}}D$ D$$q%=iU$-|M9/u EE8/tI%=@2UM҈u(S/t-t$蜑tʋ1t>;5_ }PD$ D$D$$&=}f  tL:"D:D$U$v/t*ttM9~y}T fu,UTt*ąt&~أt*$ϱeD}1<[^_]ÃYU1uMt$袏t=p*%p*UƄD$$N*/ME/ t*xD}t*<[^_]É\$ED$Љ$ӗ>D}1%=uܡp*1D}1wD}1fUWVSu }EUiڸ)9~áL})މ|$ \$T$P} $H*]P}~ߋ* hy=D}!EE[^_]U=rx *t*Bv [wH=l*v;D$ D$D$$tf=tf=t)1Á t&t1t&}}ÐUWVS< &ff`׋ Džtn19},;u)э!¡‰+P |:#u T$ D$D$$4?1;h D$ D$D$D:#$;V99;uEV9U T$ D$T$ӥ$< [^_]Á< 1[^_]U]Ӊ}lju$ !9}U9<(t% "1҉4$Nt'9u<(]u}]D}1UWVSUEEE_11t@G1ɍW9s99w9uE9Bw uދB Bt֍QȋMDXljDʉMEE+Ey !tj1 9~Y92u]9ZuzuZ u !R19ˉG=D}1[^_]1ɺ UWVS  !X@9t1 !S [^_]þ9VUt9t($9 !NMM1WU;]S!¸TULS&tO ! !(m1US0D$ D$D$$z1҅u []ËEd\$$X薎~A\$$X肎~-\$$Xn~9U Ё[]\<=v9U UWVS< U艅 T$ D$ D$$u195E`# |$ D$D$$E܉D$$YH9;E t#T$ D$D$$舿;u;uqD=1ҋD 9~9wEff&1=D}< [^_]U(]u}  9AuUfyA qÁ*‰%9w"s=D}ut51]u}]9v u8=D}uˋ  9At+E붋A1҉Ӊ뀡*EA)EAfyEy fxx tm !eE9Em !U"P#U);} v}  L}t$ |$P}T$$XP}=*)} }A<HM9M<+};} v} L}tn!EP},4$eM)ʉUP}o@,D}~4E|$4$D$E.UWV1S<}DžDžDžDž t$誁t&Y?/t&t@/u/fÉ$Nt؀/t*Džl%9JBR ftҍDž@ Љ @u.9Z럋<$L$^t*~أt*$̡[1<[^_]Ët*x担D}<1[^_]Ã@1ۣp*u t$ytp*=CD$|$$Y* mAp*$D$;p*$/߉4QA뿄Džm^DžP%ߺoD}1Ru*Bp*fxuz  p*  9 D}D}1D}1D}1U=l*]u'=l*w 1]u]Í,t$ D$D$$获tʍ`\$$Xr\$$X訄Z\$$X萄B@D$$Xr^fDžX1Dž8fDžtfXf"!@ `f$D$D$$(9Xf= 98f&tC~L t*t./t)?t*~أt*t$$$Yqt$<$p=}5~ }~}D~9vA~}; $.r)Et*$ p~D$ .D$D$Ή$x}ƒց.}덉t$<$ot$<$o FD$ .D$D$}$.ۣp*EtÉ$n}}LUWVSL<t <t+L[^_]áL~dģd~L[^_]á~~EU%ED$ ~D$D$p~$L \~UEֆĉ׉ tL~E׺Ɖ1҃!΋ P~ t1MЉ5p~=t~L$ D$D$4$軧f}?EֆUd~EĉE\~֋]UċuĉEM tL~eȋ P~ƋEȉ1҃#E t15h~=l~~L[^_]UWVSL<<=~14~w ͉ȋ_%†߉؁  Љ $~ ։։1ҁ ~G  أ,~ ~50~=~ (~-d~L[^_]Ëd~@L1[^_]ád~t<~D$ D$D$p~$~~l~h~ tt~E؉p~$D$ D$D$豥EކUd~EĉE\~֋]UċuĉEM tL~Ƹ P~׃1#E t15h~=l~~UWVSt&v-<$ t&t$ h &tvfQU] U}|tt"|t"|tU|t"|tU]]uu |t$t$Y"]5u|t]UWVS= E_w/怨t怈Eu E}'~f=[ t[^_]Ë~ 180[t2u~ 1f; [tGu[^_]1[D$$BBD$Bl"[D$$BBD$B7U US1tD$$D$@B؃[]U1WVS M} q怍Y19<@[tu 1[^_]D[ftfE E E怸Q怸 Qf (vuotCo1 8t.D$$P9uk8o [^_]à [^_]ÐUWVSӃLT$D$$x[:uv?_MP_ufuG <t<t&uЉ1ɍw9uu|$$[9GEG $[D$9G w<{}V1ffUtQE1ɍ9u%t1D$t$$0\19$]%91L[^_]Á>PCMPuF:G ^(ft,E1ɍÍ9uF*H ]y^MA$ttT$$\D$8ttB0%RR  Ƃ!OTEuD$]̉4$D$2?EED$ $D$?E\$t$$]7UB"Ӄ,pgKMC|$$$]D$7C{vC$H]x7 <t=r<uCD$ CD$C$h]D$77CuL$]%7뮍CUD$D$$>MEL$C$]D$6p$Z^6v\UátD$ D$ދ$ !=p qg@Cttǀtp1qg$Z^)6t$]6R D$$\5ttttƀtG <<<< vttt  tD$$h\ 50&$\4t!D$D$]$t;G -D$D$]$t;"D$$\r4<t6tHuUpʉ]u}5qÉʸ =twa9vt.1=5 9rօtҺwuҺdu1]u}]ÐUWVSӃ p@$t $Ѕtp@$t $С*|$$.8$ y2**XB9'OB9tt$M2*B9~*tB9|$  2*B9֍B$|$7p@$t $Ѓ [^_]$1UWVS1ۃU$-1Cu$ 19u}8] ~Z1u9|\$T$$^291ۃ$-S1Cu$ B1[^_]$ .1ۉfUWVS] EEUEEED$*$6$01҅~u9E~5}11҉9u;t;u{9uЋEED$*$6;u=$ [0EEE *E[^_]5$ /0h$0UWVS1ۃ\EUMEEpBu} ~E ME LMD$D$ **P** $^.u1(*Pv* (*Tv + (*iik=t#/t/<tJix;;Eȉt=t&tši iD$$x^w/uii4$4p@_ MŰED$D$$^/|`)$^.p@ E $^D$.T=t=ixX>9EȉtL=&t>i p@E T$$`D$h.-i]-p@-ixJp@$ u-$ha .pi)@ ^vv&&c&Et&n & &&|1ۡ|5`)prp@P $a-}D$ D$<$5D$D$ *D$|$$3^6>t$*t)<$D$`)D$ $*u |ecMD$ $@p@1} )E EodO&b&]&s5ip@jM $HaL$+R** D$*${0XM ]1] M~u9U *D11ҋMm ] ]̅~u9] *DX]] C9E&p@NE .] *DD$*$/** D$*$/i$aD$j*U *DD$*$S/*)UM*] L$M̃$U|p@u3]1] M~u9U *D1`aM1M u~u9OE~a1҅ɋ]xu9}E\$4$))؉D$01m]u9] )E E̅tE*9)E̡p@($Y^ )MŰE$Z^)\[^_]Ë*Ű]̋M D 9EE])Љ!)ˉM̉] U̅UM m*T$* $M̃*B9E #1҅ۋM~u9] 1ҡ*D1ҋM] ]̅~u9U *DlUM *T$* $M̃1,$G-=pG4t pouu1u U~u9T$$K^u't|Mt EE )E$D$Z:)))U b)xWu1E`$\^&uM1M ]quu9Q)f뛋G0=ptЅu poiEE E E!E 5} ~0p@u%EOE9EEE O[E"$P_&Et$)D$F$- FEE@$*5*]č^t $С*\$$*$$**9~$$*9|$^$/$$*|$$@*$$*߉\$$*9u}$a$**9}$@$*9|$($p@$$zE&u1u ]~uu9U11;uEt<;uB1҉$E5)D$jUM *T$* $M̃:-ii1]($5ErD$D$ EСUD$$?^d*T$\*5-1M1uuEо @U;D$) T$$,*UЉt$)$T$*u`$_"$a""9** D$*$'t8U1ɋuu ]u9|&TUWVSL$*>p4*58* D$`D$$n $W(yt&t/&u`Ɓ)ʍT$D$$ $PD}$PD}u[޻u1Ep@0tЅu poUȅ|MȋUD$3$G8* 4*pʉUUEEEEEE111ED$$YtpE< t< t&t } fU\t1 !륅ue# ft vt`yƃ`K$`^2D}u_11EE g t&` 1E A@te}hEЋUEM̃EĉƉMD$`$"1]̈]uEu}U`uЅu2tD$`$0D$$SD}뷋]]Ѓ҈}uE딃}~UЋME]̃Uĉ]EƀMƋUă| t$D$<$%)x\1C)x8;E|)D$)D$)$;%~)]9||=))|)) )9zEމED$ $V~IED$s$#EEMEL$$&ED$ $Z9ED$$1)ƃ` ]uĉ])7|(UMT$ $ &mUW #VuS<^tU;u wA<\uA< wE1މ0 ^A< v;u v #[^_]A<w럍Aމu̓<>uf %CMƍB<]w$g&1ۅ~EB1ۀ<$& &&t & <$&£&t  &ƒ &D& &!1B< w҃LBB< v&&$& &&~<$&&t  &u1t<%u'ƀ&&[&Iv~&Iv<$&&u &? $'\$D$ %&$'&$'ƒ1L̅ &&$& &&A B1ɀ<$&&t &<$&& &ډӋ&&$& & B<‹ #&1W<%u?&Iv~&Iv<$&&u &$cD$` D$'&$'&$3'*M̅$UЅEE<&1ۅB1ۀ<$& &&t &5<$&£&3 &&<$&& &D$D$ %B<&%<$&& &‰ #N&1ۅ~DB1Ҁ<$& &&t &i<$&&Ӊۃ &D& &&1ۅ~ˍB1ۀ<$& &&t &<$&£&t &넋&11~GB1<$& &&t< &1ۀ<$&£&t  &ƒ &19D& &&B1ۀ<$& &&t &L<$&£&E# &&B<$&£&s &ƒ@$& &&&B<$&& &B<$&£& &…ƒ&$& &&<B1ۀ<$& &&t &<$&£& &Y&11~GB1<$& &&t< &1ۀ<$&£&t  &ƒ &19D& &&B1ɀ<$&&t &<$&& &B&&11~GB1<$& &&t< &1ۀ<$&£&t  &ƒ &D9'ƀ&%'&NF&$& &qQ&bB<$&£&J< &9&6&$& &A&2B<$&£& &у$& &&1a1~ҐfEB<&<$&& &‰ #B<‹ #&jx&11ɍ& &)Ӊ<&111IE1fsIvlIv &D&$& &&&Ӌ&&1&1i&1t&1~U@(]á(U]  (UUt+sdv$(]Ãu`v$(]dvá\v$(]dvU$(UM \v `vt%sdv$(]Ãu dv$(]Édv$(]UUBvBvB]ÍB]vÍB]vUWVSXMt((.(4 (W%E =iɉUE{Lv]U1+DD iD0E}b}U}B}v2~R}&tBDE  D D D0}}} PLL L0t&E  LL L0uE1E1ҍ 3}Pue0tźX[^_]úM12ЈPuX[^_]É  D D D0E  D D D0U ]]uu $w;(|;Pv|5;5 (|;5Tv}5 (f5.E]u]2(f,UWVS|E$ 51҅u |[^_]ÍED$ $>UD$ D$ti$]D$$>t}"uED$$g>tE< t< t&tٍUD$$@>t E0< vލ]D$$>tE< t< vtE0EMA< w'EDPЉEUD$$=u΍]D$$=tE< t< &tE0EMA< w'EDPЉEUD$$i=u΍]D$$R=t}"uEEEED$$=t}"uU$D$<]EÈ]1D$$, shtab=0x%x, entry=0x%x] [Linux-initrd @ 0x%x, 0x%x bytes] [Multiboot-module @ 0x%x, 0x%x bytes] linux 'zImage' kernel too big, try 'make bzImage' [Linux-%s, setup=0x%x, size=0x%x] [%d,%d,%d]Address 0x%x: Value 0x%x [%d] Debug mode is turned off Debug mode is turned on ,%s%d+%d%s%d+%d,%d[0-%d]%s%d[0-%d]%s%d[%d-%d]VBE2 VBE BIOS is not present. VBE version %d.%d CGA graphicsTextHercules graphicsPlanarPacked pixelNon-chain 4, 256 colorDirect ColorYUVUnknown 0x%x: %s, %ux%ux%u Mode 0x%x is not supported. Whole file: Partial read 1: Partial read 2: Checking if "%s" exists... yes no off Internal pager is now %s --name=--cursor-address=--clear-screen=--enter-standout-mode=--exit-standout-mode=name=%s cursor_address=%s clear_screen=%s enter_standout_mode=%s exit_standout_mode=%s saved--dumb--no-echo--no-edit--timeout=--lines=--silent (no echo) (no edit) (dumb)%s%s%s%s Press any key to continue. (%cd%d,%d,%c--unit=--speed=--port=--word=--stop=--parity=nooddevenfallback (nd): (hd%d (fd%d): (fd%d) (hd%d,%d) (hd%d,%d,%c) $1$Encrypted: %s --md5----type=netbsdfreebsdopenbsdbiglinuxmultiboot--no-mem-option 0x%x--force-lbaAERMH %d sectors are embedded. Running "embed %s"... %s%ssucceeded failed (this is not fatal) --prefix=/stage1/boot/grub/stage2/menu.lst--force-lba %s%s%s%s %s%s %s p %s %s Running "install %s"... succeeded Done. failed --all%s: %s blink---forceMSWIN--no-apmCHSLBAReservedUsable RAMext2fs/e2fs_stage1_5fat/fat_stage1_5ufs2/ufs2_stage1_5ffs/ffs_stage1_5iso9660/iso9660_stage1_5jfs/jfs_stage1_5minix/minix_stage1_5reiserfs/reiserfs_stage1_5vstafs/vstafs_stage1_5xfs/xfs_stage1_5escapeexclamnumbersigndollarpercentcaretampersandasteriskparenleftparenrightminusunderscoreequalplusbackspacetabqQWTYUiIOPbracketleftbraceleftbracketrightbracerightentercontrolFGjJKLsemicolondoublequotebackquotetildeshiftbackslashbarzZXvcommalessperiodgreaterquestioncapslockF1F2F3F4F5F6F7F8F9F10deleteblackbrownlight-graydark-graylight-bluelight-greenlight-cyanlight-redlight-magentayellowwhitebackgroundbackground RRGGBBblocklistblocklist FILEborderborder RRGGBBcatcat FILEchainloaderchainloader [--force] FILEclearClear the screencmpcmp FILE1 FILE2color NORMAL [HIGHLIGHT]configfileconfigfile FILEdebugTurn on/off the debug mode.displayapmDisplay APM BIOS information.displaymemembedembed STAGE1_5 DEVICEfindfind FILENAMEforegroundforeground RRGGBBfstestToggle filesystem test mode.geometryhalthalt [--no-apm]helphelp [--all] [PATTERN ...]hiddenmenuimpsprobeinitrdinitrd FILE [ARG ...]installioprobeioprobe DRIVEmakeactivemapmap TO_DRIVE FROM_DRIVEmd5cryptmodulemodule FILE [ARG ...]modulenounzipmodulenounzip FILE [ARG ...]pagerpager [FLAG]partnewpartnew PART TYPE START LENparttypeparttype PART TYPEpasswordpausepause [MESSAGE ...]printprint [MESSAGE ...]Print MESSAGE.readread ADDRrebootReboot your system.rootroot [DEVICE [HDBIAS]]rootnoverifysavedefaultserialsetkeysetkey [TO_KEY FROM_KEY]setupshadeshade INTEGERsplashimagesplashimage FILEterminalterminfotestloadtestload FILEtestvbetestvbe MODEtimeouttitleunhideunhide PARTITIONuppermemuppermem KBYTESvbeprobevbeprobe [MODE]viewportviewport x0 y0 x1 y1 Filesystem tracing is now off Filesystem tracing is now on APM BIOS information: Version: 0x%x 32-bit CS: 0x%x Offset: 0x%x 16-bit CS: 0x%x 16-bit DS: 0x%x 32-bit CS length: 0x%x 16-bit CS length: 0x%x 16-bit DS length: 0x%x No APM BIOS found or probe failed VBE version %d.%d is not supported. Mode 0x%x is not found or supported. Switching to Mode 0x%x failed. Header1 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x Header2 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x Max is 0x10ac0: i=0x%x, filepos=0x%x Differ in size: 0x%x [%s], 0x%x [%s] Differ at the offset %d: 0x%x [%s], 0x%x [%s] Splash image filename too large Failed to set splash image and/or graphics mode ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzWarning: the option `d' was not used, but the Stage 1 will be installed on a different drive than the drive where the Stage 2 resides. No MPS information found or probe failed drive 0x%x: C/H/S = %d/%d/%d, The number of sectors = %d, %s EISA Memory BIOS Interface is present Address Map BIOS Interface is present Lower memory: %uK, Upper memory (to first chipset hole): %uK [Address Range Descriptor entries immediately follow (values are 64-bit)] %s: Base Address: 0x%x X 4GB + 0x%x, Length: 0x%x X 4GB + 0x%x bytes Sets the background color when in graphics mode.RR is red, GG is green, and BB blue. Numbers must be in hexadecimal.Print the blocklist notation of the file FILE.Boot the OS/chain-loader which has been loaded.Sets the border video color when in graphics mode.RR is red, GG is green, and BB blue. Numbers must be in hexadecimal.Print the contents of the file FILE.Load the chain-loader FILE. If --force is specified, then load it forcibly, whether the boot loader signature is present or not.Compare the file FILE1 with the FILE2 and inform the different values if any.Change the menu colors. The color NORMAL is used for most lines in the menu, and the color HIGHLIGHT is used to highlight the line where the cursor points. If you omit HIGHLIGHT, then the inverted color of NORMAL is used for the highlighted line. The format of a color is "FG/BG". FG and BG are symbolic color names. A symbolic color name must be one of these: black, blue, green, cyan, red, magenta, brown, light-gray, dark-gray, light-blue, light-green, light-cyan, light-red, light-magenta, yellow and white. But only the first eight names can be used for BG. You can prefix "blink-" to FG if you want a blinking foreground color.Load FILE as the configuration file.Display what GRUB thinks the system address space map of the machine is, including all regions of physical RAM installed.Embed the Stage 1.5 STAGE1_5 in the sectors after MBR if DEVICE is a drive, or in the "bootloader" area if DEVICE is a FFS partition. Print the number of sectors which STAGE1_5 occupies if successful.Search for the filename FILENAME in all of partitions and print the list of the devices which contain the file.Sets the foreground color when in graphics mode.RR is red, GG is green, and BB blue. Numbers must be in hexadecimal.geometry DRIVE [CYLINDER HEAD SECTOR [TOTAL_SECTOR]]Print the information for a drive DRIVE. In the grub shell, you can set the geometry of the drive arbitrarily. The number of the cylinders, the one of the heads, the one of the sectors and the one of the total sectors are set to CYLINDER, HEAD, SECTOR and TOTAL_SECTOR, respectively. If you omit TOTAL_SECTOR, then it will be calculated based on the C/H/S values automatically.Halt your system. If APM is avaiable on it, turn off the power using the APM BIOS, unless you specify the option `--no-apm'.Display helpful information about builtin commands. Not all commands aren't shown without the option `--all'.Hide PARTITION by setting the "hidden" bit in its partition type code.Probe the Intel Multiprocessor Specification 1.1 or 1.4 configuration table and boot the various CPUs which are found into a tight loop.Load an initial ramdisk FILE for a Linux format boot image and set the appropriate parameters in the Linux setup area in memory.install [--stage2=STAGE2_FILE] [--force-lba] STAGE1 [d] DEVICE STAGE2 [ADDR] [p] [CONFIG_FILE] [REAL_CONFIG_FILE]Install STAGE1 on DEVICE, and install a blocklist for loading STAGE2 as a Stage 2. If the option `d' is present, the Stage 1 will always look for the disk where STAGE2 was installed, rather than using the booting drive. The Stage 2 will be loaded at address ADDR, which will be determined automatically if you don't specify it. If the option `p' or CONFIG_FILE is present, then the first block of Stage 2 is patched with new values of the partition and name of the configuration file used by the true Stage 2 (for a Stage 1.5, this is the name of the true Stage 2) at boot time. If STAGE2 is a Stage 1.5 and REAL_CONFIG_FILE is present, then the Stage 2 CONFIG_FILE is patched with the configuration filename REAL_CONFIG_FILE. If the option `--force-lba' is specified, disable some sanity checks for LBA mode. If the option `--stage2' is specified, rewrite the Stage 2 via your OS's filesystem instead of the raw device.Probe I/O ports used for the drive DRIVE.kernel [--no-mem-option] [--type=TYPE] FILE [ARG ...]Attempt to load the primary boot image from FILE. The rest of the line is passed verbatim as the "kernel command line". Any modules must be reloaded after using this command. The option --type is used to suggest what type of kernel to be loaded. TYPE must be either of "netbsd", "freebsd", "openbsd", "linux", "biglinux" and "multiboot". The option --no-mem-option tells GRUB not to pass a Linux's mem option automatically.Break a command execution unless the user is authenticated.Set the active partition on the root disk to GRUB's root device. This command is limited to _primary_ PC partitions on a hard disk.Map the drive FROM_DRIVE to the drive TO_DRIVE. This is necessary when you chain-load some operating systems, such as DOS, if such an OS resides at a non-first drive.Generate a password in MD5 format.Load a boot module FILE for a Multiboot format boot image (no interpretation of the file contents is made, so users of this command must know what the kernel in question expects). The rest of the line is passed as the "module command line", like the `kernel' command.The same as `module', except that automatic decompression is disabled.Toggle pager mode with no argument. If FLAG is given and its value is `on', turn on the mode. If FLAG is `off', turn off the mode.Create a primary partition at the starting address START with the length LEN, with the type TYPE. START and LEN are in sector units.Change the type of the partition PART to TYPE.password [--md5] PASSWD [FILE]If used in the first section of a menu file, disable all interactive editing control (menu entry editor and command line). If the password PASSWD is entered, it loads the FILE as a new config file and restarts the GRUB Stage 2. If you omit the argument FILE, then GRUB just unlocks privileged instructions. You can also use it in the script section, in which case it will ask for the password, before continueing. The option --md5 tells GRUB that PASSWD is encrypted with md5crypt.Print MESSAGE, then wait until a key is pressed.Read a 32-bit value from memory at address ADDR and display it in hex format.Set the current "root device" to the device DEVICE, then attempt to mount it to get the partition size (for passing the partition descriptor in `ES:ESI', used by some chain-loaded bootloaders), the BSD drive-type (for booting BSD kernels using their native boot format), and correctly determine the PC partition where a BSD sub-partition is located. The optional HDBIAS parameter is a number to tell a BSD kernel how many BIOS drive numbers are on controllers before the current one. For example, if there is an IDE disk and a SCSI disk, and your FreeBSD root partition is on the SCSI disk, then use a `1' for HDBIAS.rootnoverify [DEVICE [HDBIAS]]Similar to `root', but don't attempt to mount the partition. This is useful for when an OS is outside of the area of the disk that GRUB can read, but setting the correct root device is still desired. Note that the items mentioned in `root' which derived from attempting the mount will NOT work correctly.savedefault [NUM | `fallback']Save the current entry as the default boot entry if no argument is specified. If a number is specified, this number is saved. If `fallback' is used, next fallback entry is saved.serial [--unit=UNIT] [--port=PORT] [--speed=SPEED] [--word=WORD] [--parity=PARITY] [--stop=STOP] [--device=DEV]Initialize a serial device. UNIT is a digit that specifies which serial device is used (e.g. 0 == COM1). If you need to specify the port number, set it by --port. SPEED is the DTE-DTE speed. WORD is the word length, PARITY is the type of parity, which is one of `no', `odd' and `even'. STOP is the length of stop bit(s). The option --device can be used only in the grub shell, which specifies the file name of a tty device. The default values are COM1, 9600, 8N1.Change the keyboard map. The key FROM_KEY is mapped to the key TO_KEY. A key must be an alphabet, a digit, or one of these: escape, exclam, at, numbersign, dollar, percent, caret, ampersand, asterisk, parenleft, parenright, minus, underscore, equal, plus, backspace, tab, bracketleft, braceleft, bracketright, braceright, enter, control, semicolon, colon, quote, doublequote, backquote, tilde, shift, backslash, bar, comma, less, period, greater, slash, question, alt, space, capslock, FX (X is a digit), and delete. If no argument is specified, reset key mappings.setup [--prefix=DIR] [--stage2=STAGE2_FILE] [--force-lba] INSTALL_DEVICE [IMAGE_DEVICE]Set up the installation of GRUB automatically. This command uses the more flexible command "install" in the backend and installs GRUB into the device INSTALL_DEVICE. If IMAGE_DEVICE is specified, then find the GRUB images in the device IMAGE_DEVICE, otherwise use the current "root device", which can be set by the command "root". If you know that your BIOS should support LBA but GRUB doesn't work in LBA mode, specify the option `--force-lba'. If you install GRUB under the grub shell and you cannot unmount the partition where GRUB images reside, specify the option `--stage2' to tell GRUB the file name under your OS.If set to 0, disables the use of shaded text, else enables it.Load FILE as the background image when in graphics mode.terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules] [graphics]Select a terminal. When multiple terminals are specified, wait until you push any key to continue. If both console and serial are specified, the terminal to which you input a key first will be selected. If no argument is specified, print current setting. The option --dumb specifies that your terminal is dumb, otherwise, vt100-compatibility is assumed. If you specify --no-echo, input characters won't be echoed. If you specify --no-edit, the BASH-like editing feature will be disabled. If --timeout is present, this command will wait at most for SECS seconds. The option --lines specifies the maximum number of lines. The option --silent is used to suppress messages.terminfo [--name=NAME --cursor-address=SEQ [--clear-screen=SEQ] [--enter-standout-mode=SEQ] [--exit-standout-mode=SEQ]]Define the capabilities of your terminal. Use this command to define escape sequences, if it is not vt100-compatible. You may use \e for ESC and ^X for a control character. If no option is specified, the current settings are printed.Read the entire contents of FILE in several different ways and compares them, to test the filesystem code. The output is somewhat cryptic, but if no errors are reported and the final `i=X, filepos=Y' reading has X and Y equal, then it is definitely consistent, and very likely works correctly subject to a consistent offset error. If this test succeeds, then a good next step is to try loading a kernel.Test the VBE mode MODE. Hit any key to return.Unhide PARTITION by clearing the "hidden" bit in its partition type code.Force GRUB to assume that only KBYTES kilobytes of upper memory are installed. Any system address range maps are discarded.Probe VBE information. If the mode number MODE is specified, show only the information about only the mode.Changes grub internals to output text in the window defined by four parameters. The x and y parameters are 0 based. This option only works with the graphics interface.ٸϸŸg|CJY]kp X 1! =2@j'3#m24$p95%sA6^RG7&yQ8* |Z9( d0) ou-_ =+  qQwW{?eE-GrR>tTyYuUiIoO0pP[{]} -aA'YrsSa x dD fF!RgG") hH#jJ$\kK%lL&;:''"( `~)*!+\|+/1zZ,3xX- cC.5vV/obB0nN1%AmM27=,<3BI.>4%Q/?58 9Z:c;f<i=l>o?r@uAxB{C~DS444444444444444444444444444%q.[Hit return to continue] Error %u: %s consolehercules GNU GRUB version %s (%dK lower / %dK upper memory) ESC at any time exits. [ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible completions of a device/filename.%s ] Press any key to continue...grub> GNU GRUB 0.97Bad file or directory typeUnknown boot failureUnrecognized device stringInvalid device requestedFile not foundSelected disk does not existNo such partitionError while parsing numberDisk read errorToo many symbolic linksUnrecognized commandDisk write errorInvalid argumentFile is not sector alignedMust be authenticatedDevice not initialized yetNo spare sectors on the diskOverflow while parsing numberFilename must be either an absolute pathname or blocklistBad or corrupt data while decompressing fileBad or incompatible header in compressed filePartition table invalid or corruptMismatched or corrupt version of stage1/stage2Loading below 1MB is not supportedKernel must be loaded before bootingUnsupported Multiboot features requestedInvalid or unsupported executable formatFilesystem compatibility error, cannot read whole fileInconsistent filesystem structureCannot mount selected partitionSelected cylinder exceeds maximum supported by BIOSLinux kernel must be loaded before initrdMultiboot kernel must be loaded before modulesAttempt to access block outside partitionSelected item cannot fit into memory Filesystem type is %s, unknown, using whole disk partition type 0x%x Partition num: %d, %d,%c)%d) Possible commands are: Possible disks are: cd Possible partitions are: Possible files are:<%d, %d, %d>[BSD sub-partitions immediately follow] BSD Partition num: '%c', No BSD sub-partition found, partition type 0x%x  CD001Non-supported version (%d) RockRidge chunk `%c%c' ReIsErFsReIsEr2FsReIsEr3FsReIsErLB  %s     ??xjVp $ν|*ƇGF0FؘiD[\"kqCy!Ib%@@QZ^&Ƕ]/SD!7Ç ZEogL*B9q"am 8D꾤K`Kp~('09|eVD")*C#9Y[e }]O~o,CN~S5:*ӆ    1~3~5~6~ABCDFH4` 0% KScanning from 0x%x for %d bytes Found MP Floating Structure Pointer at %x Intel MultiProcessor Spec 1.%d BIOS support detected Invalid MP System Configuration type %d Bad MP Config Table sig 0x%x and/or checksum 0x%x Bad MP Config Table sub-revision # %d Bad Extended MP Config Table checksum 0x%x Missing configuration information APIC config: "%s mode" Local APIC address: 0x%x Processor [APIC id %d ver %d]: #0 Bootstrap Processor (BSP) I/O APIC id %d ver %d, address: 0x%x Disabling MPS support Virtual Wire OEM id: %s Product id: %s ISA MCA DISABLED Bus id %d is %s IMCR and PIC%d: %s The selected entry is %d Password: grub edit> Booting '%s' Booting command-list Press `ESC' to enter the menu... %d Use the %c and %c keys to select which entry is highlighted. Press enter to boot the selected OS or 'p' to enter a password to unlock the next set of features. Press enter to boot the selected OS, 'e' to edit the commands before booting, or 'c' for a command-line. Press 'b' to boot, 'e' to edit the selected command in the boot sequence, 'c' for a command-line, 'o' to open a new line after ('O' for before) the selected line, 'd' to remove the selected line, or escape to go back to the main menu. Entry %d will be booted automatically in %d seconds. The highlighted entry will be booted automatically in %d seconds. Highlighted entry is %d: Failed! Press any key to continue...iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii$iii/ii:iiiiiiiEiiiP[xxxxxxxxxxxxxxxxxxxxxxxxK^2sTsE&yp]E,tR0/* XPM */ Failed to read splash image (%s) jjkk(k#=!?P@#B=#C#UZZuf1)fffNo setup signature found... MykernelBB@fUffgfEgfE gfEgfEf]fÍtfUffWgfEfVfSfUf]f1ffffff@uf[f^f_f]ffUfffSgf] gfMgffgf]؈f[f]f fUfgfEf-fPgfEg$6ggfE fdgf$gfEg$f6gf]fÍfUfgfEgfUgggEgEggf]f fUffWf1fVfSf,fgfEfgfEgfD$ gfEgf]gf\$gf<$gfD$ff1gEgEff?t>ٞv f?ff)f؈gfEf@gf};$}6‹8MÈ 8ML8MLt&[]Í'UUt*?. ʉȉD$ E L$T$D$E$YÍ&) čv)Ѓ€ 1밍&$UMS)] ER$ $)$E$$[]UEUEE]É'UWV1S$}1ۍED$ |$\$4$Y1EE&t=ٞv؍)ȉ\$D$4$^RA$[^_]Ít&'U$(8 $($YU 4 = u,0]Ðt&U t$Ɖ$|$t< t70, 4؃O<L,~&01,!‰0$t$|$]Í&UWVS4} t&MtA%EtDMu4[^_]fQAEsdt( v릍ut&txvu؋҃dExM Mȉf0EQU1EtGMċE1 ~؃W֍vmuE9s9r]봍&Wؾ EMEE-EfMMȉTkA(null) . ..mandel1mandel2 . ..setup.ld compile.shkernel.c GPLheader.S/* * setup.ld * * Linker script for the i386 setup code */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SECTIONS { . = 0; .bstext : { *(.bstext) } .bsdata : { *(.bsdata) } . = 497; .header : { *(.header) } .inittext : { *(.inittext) } .initdata : { *(.initdata) } .text : { *(.text*) } . = ALIGN(16); .data : { *(.data*) } .signature : { setup_sig = .; LONG(0x5a5aaa55); } . = ALIGN(16); .bss : { __bss_start = .; *(.bss) __bss_end = .; } . = ALIGN(16); _end = .; . = 4095; .test : { BYTE(0); } } #!/bin/bash CFLAGS="-fno-builtin -nostdinc -O2 -I. -Wall -m32" LDFLAGS="-nostdlib -Wl,-N" gcc $CFLAGS -c header.S gcc $CFLAGS -c kernel.c gcc $LDFLAGS -o mandel.exec -T setup.ld header.o kernel.o objcopy -O binary mandel.exec mandel1 asm(".code16gcc"); /* pour header.S */ const char kernel_version[] = "Mykernel"; /* modificationd'une entree de la palette */ void set_rgb(int idx, int r, int g, int b) { /* la technique d'origine pour modifier la palette vga */ /* on modifie directement des registres de la carte graphique */ asm( "outb %%al,%%dx" : : "a" (idx), "d" (0x03c8) ); asm( "outb %%al,%%dx" : : "a" (r), "d" (0x03c9) ); asm( "outb %%al,%%dx" : : "a" (g), "d" (0x03c9) ); asm( "outb %%al,%%dx" : : "a" (b), "d" (0x03c9) ); } /* initialisation du mode vidéo */ void video_initialize(int mode) { int i; /* Je vous fais la version longue */ /* Le code assembleur paramétré (d'où les %%) */ asm ("pushl %%ebp; pushw %%ds; int $0x10; popw %%ds; popl %%ebp" /* L'affectation des valeurs de retour */ : /* L'affectation des paramètres */ : "a" (mode) /* La liste des registres à sauvegarder */ : "ebx", "ecx", "edx", "esi", "edi"); /* on se fait une palette simple en niveaux de gris */ for(i=0;i<64;i++) { /* attention au maximum de 64 (6 bits) */ set_rgb(i,i,i,i); } } /* affichage d'un unique pixel */ void set_pix(int x, int y, int color) { /* calcul de la position du pixel en memoire vidéo */ int pos = 320*y+x; /* Technique à la mano car gas ne supporte pas l'adressage 16bits * - on passe par ds qu'on doit sauvegarder * - la mémoire vidéo du mode vga 13h commence en A000:0000 */ asm ("push %%ds; movw %%ax,%%ds; movb %%cl,(%%bx); pop %%ds" : : "a" (0xA000), "b"(pos), "c" (color)); } /* conversion en coordonnées flottantes */ void convert_i2d(int x, int y, double*ppx, double *ppy) { /* on ne respecte pas l'aspect ratio pour remplir et on centre a droite */ *ppx = (double)(x-230) / 120.; *ppy = (double)(y-100) / 100.; } /* une itération du calcul fractal pour un pixel */ double iteration(double cx, double cy, double *ppx, double *ppy) { double tx,ty; /* p = p^2 + C */ tx = (*ppx)*(*ppx) - (*ppy)*(*ppy) + cx; ty = 2*(*ppx)*(*ppy) + cy; *ppx = tx; *ppy = ty; /* |p| */ return (tx*tx+ty*ty); } /* affichage complet de la fractale */ void display() { int x,y; int i,color; double cx,cy; double px,py; double radius; /* on parcourt l'écran */ for(x=0;x<320;x++) { for(y=0;y<200;y++) { convert_i2d(x,y,&cx,&cy); px=0.; py=0.; /* on compte le nombre d'itération pour avoir la couleur */ for(i=0;i<63;i++) { radius = iteration(cx,cy,&px,&py); if(radius > 2.) break; } /* on inverse pour avoir le noir a l'intérieur */ color = (int)(63-i); set_pix(x,y,color); } } } /* devinez */ void cmain (unsigned long magic, unsigned long addr) { video_initialize(0x0013); display(); /* attente passive */ while(1) { asm("hlt"); } } GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. /* * header.S * * Copyright (C) 1991, 1992 Linus Torvalds * * Based on bootsect.S and setup.S * modified by more people than can be counted * * Rewritten as a common file by H. Peter Anvin (Apr 2007) * * BIG FAT NOTE: We're in real mode using 64k segments. Therefore segment * addresses must be multiplied by 16 to obtain their respective linear * addresses. To avoid confusion, linear addresses are written using leading * hex while segment addresses are written as segment:offset. * */ /* #include #include #include #include #include #include #include "boot.h" #include "offsets.h" */ #define DEF_SYSSEG 0x1000 #define DEF_SYSSIZE 0x200 #define ASK_VGA 0xfffd /* ask for it at bootup */ #define STACK_SIZE 512 /* Minimum number of bytes for stack */ #define CONFIG_PHYSICAL_ALIGN 0x200000 #define COMMAND_LINE_SIZE 2048 SETUPSECTS = 4 /* default nr of setup-sectors */ BOOTSEG = 0x07C0 /* original address of boot-sector */ SYSSEG = DEF_SYSSEG /* system loaded at 0x10000 (65536) */ SYSSIZE = DEF_SYSSIZE /* system size: # of 16-byte clicks */ /* to be loaded */ ROOT_DEV = 0 /* ROOT_DEV is now written by "build" */ SWAP_DEV = 0 /* SWAP_DEV is now written by "build" */ #ifndef SVGA_MODE #define SVGA_MODE ASK_VGA #endif #ifndef RAMDISK #define RAMDISK 0 #endif #ifndef ROOT_RDONLY #define ROOT_RDONLY 1 #endif .code16 .section ".bstext", "ax" .global bootsect_start bootsect_start: # Normalize the start address ljmp $BOOTSEG, $start2 start2: movw %cs, %ax movw %ax, %ds movw %ax, %es movw %ax, %ss xorw %sp, %sp sti cld movw $bugger_off_msg, %si msg_loop: lodsb andb %al, %al jz bs_die movb $0xe, %ah movw $7, %bx int $0x10 jmp msg_loop bs_die: # Allow the user to press a key, then reboot xorw %ax, %ax int $0x16 int $0x19 # int 0x19 should never return. In case it does anyway, # invoke the BIOS reset code... ljmp $0xf000,$0xfff0 .section ".bsdata", "a" bugger_off_msg: .ascii "Direct booting from floppy is no longer supported.\r\n" .ascii "Please use a boot loader program instead.\r\n" .ascii "\n" .ascii "Remove disk and press any key to reboot . . .\r\n" .byte 0 # Kernel attributes; used by setup. This is part 1 of the # header, from the old boot sector. .section ".header", "a" .globl hdr hdr: setup_sects: .byte SETUPSECTS root_flags: .word ROOT_RDONLY syssize: .long SYSSIZE ram_size: .word RAMDISK vid_mode: .word SVGA_MODE root_dev: .word ROOT_DEV boot_flag: .word 0xAA55 # offset 512, entry point .globl _start _start: # Explicitly enter this as bytes, or the assembler # tries to generate a 3-byte jump here, which causes # everything else to push off to the wrong offset. .byte 0xeb # short (2-byte) jump .byte start_of_setup-1f 1: # Part 2 of the header, from the old setup.S .ascii "HdrS" # header signature .word 0x0207 # header version number (>= 0x0105) # or else old loadlin-1.5 will fail) .globl realmode_swtch realmode_swtch: .word 0, 0 # default_switch, SETUPSEG start_sys_seg: .word SYSSEG .word kernel_version-512 # pointing to kernel version string # above section of header is compatible # with loadlin-1.5 (header v1.5). Don't # change it. type_of_loader: .byte 0 # = 0, old one (LILO, Loadlin, # Bootlin, SYSLX, bootsect...) # See Documentation/i386/boot.txt for # assigned ids # flags, unused bits must be zero (RFU) bit within loadflags loadflags: LOADED_HIGH = 1 # If set, the kernel is loaded high CAN_USE_HEAP = 0x80 # If set, the loader also has set # heap_end_ptr to tell how much # space behind setup.S can be used for # heap purposes. # Only the loader knows what is free #ifndef __BIG_KERNEL__ .byte 0 #else .byte LOADED_HIGH #endif setup_move_size: .word 0x8000 # size to move, when setup is not # loaded at 0x90000. We will move setup # to 0x90000 then just before jumping # into the kernel. However, only the # loader knows how much data behind # us also needs to be loaded. code32_start: # here loaders can put a different # start address for 32-bit code. #ifndef __BIG_KERNEL__ .long 0x1000 # 0x1000 = default for zImage #else .long 0x100000 # 0x100000 = default for big kernel #endif ramdisk_image: .long 0 # address of loaded ramdisk image # Here the loader puts the 32-bit # address where it loaded the image. # This only will be read by the kernel. ramdisk_size: .long 0 # its size in bytes bootsect_kludge: .long 0 # obsolete heap_end_ptr: .word _end+STACK_SIZE-512 # (Header version 0x0201 or later) # space from here (exclusive) down to # end of setup code can be used by setup # for local heap purposes. pad1: .word 0 cmd_line_ptr: .long 0 # (Header version 0x0202 or later) # If nonzero, a 32-bit pointer # to the kernel command line. # The command line should be # located between the start of # setup and the end of low # memory (0xa0000), or it may # get overwritten before it # gets read. If this field is # used, there is no longer # anything magical about the # 0x90000 segment; the setup # can be located anywhere in # low memory 0x10000 or higher. ramdisk_max: .long 0x7fffffff # (Header version 0x0203 or later) # The highest safe address for # the contents of an initrd # The current kernel allows up to 4 GB, # but leave it at 2 GB to avoid # possible bootloader bugs. kernel_alignment: .long CONFIG_PHYSICAL_ALIGN #physical addr alignment #required for protected mode #kernel #ifdef CONFIG_RELOCATABLE relocatable_kernel: .byte 1 #else relocatable_kernel: .byte 0 #endif pad2: .byte 0 pad3: .word 0 cmdline_size: .long COMMAND_LINE_SIZE-1 #length of the command line, #added with boot protocol #version 2.06 hardware_subarch: .long 0 # subarchitecture, added with 2.07 # default to 0 for normal x86 PC hardware_subarch_data: .quad 0 payload_offset: .long 0 payload_length: .long 0 setup_data: .quad 0 # 64-bit physical pointer to # single linked list of # struct setup_data # End of setup header ##################################################### .section ".inittext", "ax" start_of_setup: #ifdef SAFE_RESET_DISK_CONTROLLER # Reset the disk controller. movw $0x0000, %ax # Reset disk controller movb $0x80, %dl # All disks int $0x13 #endif # Force %es = %ds movw %ds, %ax movw %ax, %es cld # Apparently some ancient versions of LILO invoked the kernel with %ss != %ds, # which happened to work by accident for the old code. Recalculate the stack # pointer if %ss is invalid. Otherwise leave it alone, LOADLIN sets up the # stack behind its own code, so we can't blindly put it directly past the heap. movw %ss, %dx cmpw %ax, %dx # %ds == %ss? movw %sp, %dx je 2f # -> assume %sp is reasonably set # Invalid %ss, make up a new stack movw $_end, %dx testb $CAN_USE_HEAP, loadflags jz 1f movw heap_end_ptr, %dx 1: addw $STACK_SIZE, %dx jnc 2f xorw %dx, %dx # Prevent wraparound 2: # Now %dx should point to the end of our stack space andw $~3, %dx # dword align (might as well...) jnz 3f movw $0xfffc, %dx # Make sure we're not zero 3: movw %ax, %ss movzwl %dx, %esp # Clear upper half of %esp sti # Now we should have a working stack # We will have entered with %cs = %ds+0x20, normalize %cs so # it is on par with the other segments. pushw %ds pushw $6f lretw 6: # Check signature at end of setup cmpl $0x5a5aaa55, setup_sig jne setup_bad # Zero the bss movw $__bss_start, %di movw $_end+3, %cx xorl %eax, %eax subw %di, %cx shrw $2, %cx rep; stosl # Jump to C code (should not return) calll cmain # Setup corrupt somehow... setup_bad: movl $setup_corrupt, %eax # calll puts # Fall through... .globl die .type die, @function die: hlt jmp die .size die, .-die .section ".initdata", "a" setup_corrupt: .byte 7 .string "No setup signature found...\n"  . ..header.hstart.S compile.shasm.Skernel.cboot.S GPL xdebug.c/* The magic number for the Multiboot header. */ #define MULTIBOOT_HEADER_MAGIC 0x1BADB002 /* The flags for the Multiboot header. */ #define MULTIBOOT_HEADER_FLAGS 0x00010003 /* adresse de départ (boot+256) */ #define KERNEL_ORIG 0x100100 /* adresse destination (sour le 1er Mo) */ #define KERNEL_DEST 0x1000 /* taille noyau (max extimé) */ #define KERNEL_SIZE 0x1000 /* adresse mode reel de la structure modeinfo */ #define MODEINFO_SEG 0x8000 #define MODEINFO_OFF 0x0000 /* valeurs par défaut de la hauteur et largeur */ #define WIDTH 1024 #define HEIGHT 768 /* position initiale des piles en mode réel et en mode protégé */ #define STACKOFF (0xF000 - 0x10) #define PROTSTACKINIT (0x68000 - 0x10) .text .code32 .globl _start _start: call cmain loop: hlt jmp loop #!/bin/bash CFLAGS="-fno-builtin -nostdinc -O2 -I. -Wall -m32" LDFLAGS1="-nostdlib -Wl,-N -Wl,-Ttext -Wl,100000 -m32" LDFLAGS2="-nostdlib -Wl,-N -Wl,-Ttext -Wl,1000 -m32" gcc $CFLAGS -c debug.c gcc $CFLAGS -c kernel.c gcc $CFLAGS -c asm.S gcc $CFLAGS -c start.S gcc $LDFLAGS2 -o kernel.exec start.o asm.o kernel.o debug.o objcopy -O binary kernel.exec kernel gcc $CFLAGS -c boot.S gcc $LDFLAGS1 -o boot.exec boot.o objcopy -O binary boot.exec boot dd if=/dev/zero of=mandel2 bs=256 count=32 2>/dev/null dd if=boot bs=256 count=1 of=mandel2 conv=notrunc 2>/dev/null dd if=kernel bs=256 seek=1 of=mandel2 conv=notrunc 2>/dev/null #define ENTRY(x) .globl x ; x: #define CR0_PE_ON 0x1 #define CR0_PE_OFF 0xfffffffe #define PROT_MODE_CSEG 0x8 #define PROT_MODE_DSEG 0x10 #define PSEUDO_RM_CSEG 0x18 #define PSEUDO_RM_DSEG 0x20 #include "header.h" ENTRY(set_mode) movl 4(%esp),%ebx pusha call prot_to_real .code16 push %bp push %ds mov $0x4F02, %ax int $0x10 pop %ds pop %bp DATA32 call real_to_prot .code32 popa ret ENTRY(get_modeinfo) movl 4(%esp),%ecx pusha call prot_to_real .code16 push %bp push %ds push %es push %di mov $MODEINFO_SEG,%ax mov %ax,%es mov $MODEINFO_OFF, %di mov $0x4F01, %ax int $0x10 pop %di pop %es pop %ds pop %bp DATA32 call real_to_prot .code32 popa ret ENTRY(real_to_prot) .code16 cli /* load the GDT register */ DATA32 ADDR32 lgdt gdtdesc /* turn on protected mode */ movl %cr0, %eax orl $CR0_PE_ON, %eax movl %eax, %cr0 /* jump to relocation, flush prefetch queue, and reload %cs */ DATA32 ljmp $PROT_MODE_CSEG, $protcseg /* * The ".code32" directive only works in GAS, the GNU assembler! * This gets out of "16-bit" mode. */ .code32 protcseg: /* reload other segment registers */ movw $PROT_MODE_DSEG, %ax movw %ax, %ds movw %ax, %es movw %ax, %fs movw %ax, %gs movw %ax, %ss /* put the return address in a known safe location */ movl (%esp), %eax movl %eax, STACKOFF /* get protected mode stack */ movl protstack, %eax movl %eax, %esp movl %eax, %ebp /* get return address onto the right stack */ movl STACKOFF, %eax movl %eax, (%esp) /* zero %eax */ xorl %eax, %eax /* return on the old (or initialized) stack! */ ret ENTRY(prot_to_real) /* just in case, set GDT */ lgdt gdtdesc /* save the protected mode stack */ movl %esp, %eax movl %eax, protstack /* get the return address */ movl (%esp), %eax movl %eax, STACKOFF /* set up new stack */ movl $STACKOFF, %eax movl %eax, %esp movl %eax, %ebp /* set up segment limits */ movw $PSEUDO_RM_DSEG, %ax movw %ax, %ds movw %ax, %es movw %ax, %fs movw %ax, %gs movw %ax, %ss /* this might be an extra step */ ljmp $PSEUDO_RM_CSEG, $tmpcseg /* jump to a 16 bit segment */ tmpcseg: .code16 /* clear the PE bit of CR0 */ movl %cr0, %eax andl $CR0_PE_OFF, %eax movl %eax, %cr0 /* flush prefetch queue, reload %cs */ DATA32 ljmp $0, $realcseg realcseg: /* we are in real mode now * set up the real mode segment registers : DS, SS, ES */ /* zero %eax */ xorl %eax, %eax movw %ax, %ds movw %ax, %es movw %ax, %fs movw %ax, %gs movw %ax, %ss /* restore interrupts */ sti /* return on new stack! */ DATA32 ret .code32 protstack: .long PROTSTACKINIT /* * This is the Global Descriptor Table * * An entry, a "Segment Descriptor", looks like this: * * 31 24 19 16 7 0 * ------------------------------------------------------------ * | | |B| |A| | | |1|0|E|W|A| | * | BASE 31..24 |G|/|0|V| LIMIT |P|DPL| TYPE | BASE 23:16 | * | | |D| |L| 19..16| | |1|1|C|R|A| | * ------------------------------------------------------------ * | | | * | BASE 15..0 | LIMIT 15..0 | * | | | * ------------------------------------------------------------ * * Note the ordering of the data items is reversed from the above * description. */ .p2align 2 /* force 4-byte alignment */ gdt: .word 0, 0 .byte 0, 0, 0, 0 /* code segment */ .word 0xFFFF, 0 .byte 0, 0x9A, 0xCF, 0 /* data segment */ .word 0xFFFF, 0 .byte 0, 0x92, 0xCF, 0 /* 16 bit real mode CS */ .word 0xFFFF, 0 .byte 0, 0x9E, 0, 0 /* 16 bit real mode DS */ .word 0xFFFF, 0 .byte 0, 0x92, 0, 0 /* this is the GDT descriptor */ gdtdesc: .word 0x27 /* limit */ .long gdt /* addr */ #include "header.h" void set_mode(int mode); void get_modeinfo(int mode); int width=WIDTH; int height=HEIGHT; int bpp=3; unsigned char *video; /* c'est là qu'on va écrire */ /* ecriture d'un pixel bien placé */ void set_pix(int x, int y, int r, int g, int b) { /* on calcule la position sur l'écran et on met des limites */ int pos = bpp*(x + y*width); if(x<0 || x>=width) return; if(y<0 || y>=height) return; /* et on ecrit directement en mémoire vidéo */ video[pos] = r; video[pos+1] = g; video[pos+2] = b; } /* definitioture d'un pixel avec une palette */ void set_pix_palette(int x, int y, int pos) { int r,g,b; /* on garde l'intérieur en noir */ if(pos == 0) return; /* on essaie de faire joli ... coloré quoi */ if(pos < 64) { r = g = b = pos*2; } else if(pos < 128) { b = 128 + 2*(pos-64); g = 128 - 2*(pos-64); r = 128 - 2*(pos-64); } else { b = 256 - 2*(pos - 128); g = 0; r = (pos - 128); } set_pix(x,y,r,g,b); } /* conversion en coordonnées flotantes */ void convert_i2d(int x, int y, double*ppx, double *ppy) { /* on centre a droite pour optimiser la place */ *ppx = (double)(x-height) / (height/2); *ppy = (double)(y-height/2) / (height/2); } /* une itération du calcul fractal pour un pixel */ double iteration(double cx, double cy, double *ppx, double *ppy) { double tx,ty; /* p = p^2 + C */ tx = (*ppx)*(*ppx) - (*ppy)*(*ppy) + cx; ty = 2*(*ppx)*(*ppy) + cy; *ppx = tx; *ppy = ty; /* |p| */ return (tx*tx+ty*ty); } /* affichage complet de la fractale */ void display() { int x,y; int i; double cx,cy; double px,py; double radius; /* on parcourt l'écran */ for(x=0;x<1024;x++) { for(y=0;y<768;y++) { convert_i2d(x,y,&cx,&cy); px=cx; py=cy; /* on compte le nombre d'itération pour la couleur, plus joli */ for(i=0;i<255;i++) { radius = iteration(cx,cy,&px,&py); if(radius > 8.) break; } set_pix_palette(x,y,255-i); } } } /* notre noyal */ void cmain () { unsigned int data; /* on récupère les infos sur le mode qui nous intéresse */ get_modeinfo(0x118); data = (MODEINFO_SEG << 4)+MODEINFO_OFF; /* on joue sur les converstions pour la lecture du bon nombre d'octets en ram */ video = (unsigned char*) *(unsigned int*)(data + 0x28); width = (int) *(unsigned short*)(data + 0x12); height = (int) *(unsigned short*)(data + 0x14); bpp = (int) *(unsigned char*)(data + 0x19); bpp /= 8; /* etc'est parti */ set_mode(0x118); display(); } /* boot.S - bootstrap the kernel */ /* Copyright (C) 1999 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #define ASM 1 #include .text .code32 .globl start, _start /* This entry is not used actually. */ start: _start: jmp multiboot_entry /* Align 32 bits boundary. */ .align 4 /* Multiboot header. */ multiboot_header: /* magic */ .long MULTIBOOT_HEADER_MAGIC /* flags */ .long MULTIBOOT_HEADER_FLAGS /* checksum */ .long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) /* header_addr */ .long multiboot_header /* load_addr */ .long _start /* load_end_addr */ .long 0 /* bss_end_addr */ .long 0 /* entry_addr */ .long multiboot_entry multiboot_entry: /* on se copie ailleurs */ mov $KERNEL_SIZE,%ecx mov $KERNEL_ORIG,%esi mov $KERNEL_DEST,%edi rep movsw /* et on y va */ ljmp $0x8,$KERNEL_DEST GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. /* Macros. */ /* Some screen stuff. */ /* The number of columns. */ #define COLUMNS 80 /* The number of lines. */ #define LINES 24 /* The attribute of an character. */ #define ATTRIBUTE 7 /* The video memory address. */ #define VIDEO 0xB8000 /* Variables. */ /* Save the X position. */ static int xpos; /* Save the Y position. */ static int ypos; /* Point to the video memory. */ static volatile unsigned char *video; /* Forward declarations. */ void cls (void); static void itoa (char *buf, int base, int d); static void putchar (int c); void printf (const char *format, ...); /* Clear the screen and initialize VIDEO, XPOS and YPOS. */ void cls (void) { int i; video = (unsigned char *) VIDEO; for (i = 0; i < COLUMNS * LINES * 2; i++) *(video + i) = 0; xpos = 0; ypos = 0; } /* Convert the integer D to a string and save the string in BUF. If BASE is equal to 'd', interpret that D is decimal, and if BASE is equal to 'x', interpret that D is hexadecimal. */ static void itoa (char *buf, int base, int d) { char *p = buf; char *p1, *p2; unsigned long ud = d; int divisor = 10; /* If %d is specified and D is minus, put `-' in the head. */ if (base == 'd' && d < 0) { *p++ = '-'; buf++; ud = -d; } else if (base == 'x') divisor = 16; /* Divide UD by DIVISOR until UD == 0. */ do { int remainder = ud % divisor; *p++ = (remainder < 10) ? remainder + '0' : remainder + 'a' - 10; } while (ud /= divisor); /* Terminate BUF. */ *p = 0; /* Reverse BUF. */ p1 = buf; p2 = p - 1; while (p1 < p2) { char tmp = *p1; *p1 = *p2; *p2 = tmp; p1++; p2--; } } /* Put the character C on the screen. */ static void putchar (int c) { if (c == '\n' || c == '\r') { newline: xpos = 0; ypos++; if (ypos >= LINES) ypos = 0; return; } *(video + (xpos + ypos * COLUMNS) * 2) = c & 0xFF; *(video + (xpos + ypos * COLUMNS) * 2 + 1) = ATTRIBUTE; xpos++; if (xpos >= COLUMNS) goto newline; } /* Format a string and print it on the screen, just like the libc function printf. */ void printf (const char *format, ...) { char **arg = (char **) &format; int c; char buf[20]; arg++; while ((c = *format++) != 0) { if (c != '%') putchar (c); else { char *p; c = *format++; switch (c) { case 'd': case 'u': case 'x': itoa (buf, c, *((int *) arg++)); p = buf; goto string; break; case 's': p = *arg++; if (! p) p = "(null)"; string: while (*p) putchar (*p++); break; default: putchar (*((int *) arg++)); break; } } } }