⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bootsect.s

📁 linux0.11 version(301k)
💻 S
📖 第 1 页 / 共 2 页
字号:
<a name=L121 href="source/boot/bootsect.s#L121">121</a>         seg cs<a name=L122 href="source/boot/bootsect.s#L122">122</a>         mov     bx,sectors<a name=L123 href="source/boot/bootsect.s#L123">123</a>         mov     ax,#0x0208              ! /dev/ps0 - 1.2Mb<a name=L124 href="source/boot/bootsect.s#L124">124</a>         cmp     bx,#15<a name=L125 href="source/boot/bootsect.s#L125">125</a>         je      root_defined<a name=L126 href="source/boot/bootsect.s#L126">126</a>         mov     ax,#0x021c              ! /dev/PS0 - 1.44Mb<a name=L127 href="source/boot/bootsect.s#L127">127</a>         cmp     bx,#18<a name=L128 href="source/boot/bootsect.s#L128">128</a>         je      root_defined<a name=L129 href="source/boot/bootsect.s#L129">129</a> undef_root:<a name=L130 href="source/boot/bootsect.s#L130">130</a>         jmp undef_root<a name=L131 href="source/boot/bootsect.s#L131">131</a> root_defined:<a name=L132 href="source/boot/bootsect.s#L132">132</a>         seg cs<a name=L133 href="source/boot/bootsect.s#L133">133</a>         mov     root_dev,ax<a name=L134 href="source/boot/bootsect.s#L134">134</a> <a name=L135 href="source/boot/bootsect.s#L135">135</a> ! after that (everyting loaded), we jump to<a name=L136 href="source/boot/bootsect.s#L136">136</a> ! the setup-routine loaded directly after<a name=L137 href="source/boot/bootsect.s#L137">137</a> ! the bootblock:<a name=L138 href="source/boot/bootsect.s#L138">138</a> <a name=L139 href="source/boot/bootsect.s#L139">139</a>         jmpi    0,SETUPSEG<a name=L140 href="source/boot/bootsect.s#L140">140</a> <a name=L141 href="source/boot/bootsect.s#L141">141</a> ! This routine loads the system at address 0x10000, making sure<a name=L142 href="source/boot/bootsect.s#L142">142</a> ! no 64kB boundaries are crossed. We try to load it as fast as<a name=L143 href="source/boot/bootsect.s#L143">143</a> ! possible, loading whole tracks whenever we can.<a name=L144 href="source/boot/bootsect.s#L144">144</a> !<a name=L145 href="source/boot/bootsect.s#L145">145</a> ! in:   es - starting address segment (normally 0x1000)<a name=L146 href="source/boot/bootsect.s#L146">146</a> !<a name=L147 href="source/boot/bootsect.s#L147">147</a> sread:  .word 1+SETUPLEN        ! sectors read of current track<a name=L148 href="source/boot/bootsect.s#L148">148</a> head:   .word 0                 ! current head<a name=L149 href="source/boot/bootsect.s#L149">149</a> track:  .word 0                 ! current track<a name=L150 href="source/boot/bootsect.s#L150">150</a> <a name=L151 href="source/boot/bootsect.s#L151">151</a> read_it:<a name=L152 href="source/boot/bootsect.s#L152">152</a>         mov ax,es<a name=L153 href="source/boot/bootsect.s#L153">153</a>         test ax,#0x0fff<a name=L154 href="source/boot/bootsect.s#L154">154</a> die:    jne die                 ! es must be at 64kB boundary<a name=L155 href="source/boot/bootsect.s#L155">155</a>         xor bx,bx               ! bx is starting address within segment<a name=L156 href="source/boot/bootsect.s#L156">156</a> rp_read:<a name=L157 href="source/boot/bootsect.s#L157">157</a>         mov ax,es<a name=L158 href="source/boot/bootsect.s#L158">158</a>         cmp ax,#ENDSEG          ! have we loaded all yet?<a name=L159 href="source/boot/bootsect.s#L159">159</a>         jb ok1_read<a name=L160 href="source/boot/bootsect.s#L160">160</a>         ret<a name=L161 href="source/boot/bootsect.s#L161">161</a> ok1_read:<a name=L162 href="source/boot/bootsect.s#L162">162</a>         seg cs<a name=L163 href="source/boot/bootsect.s#L163">163</a>         mov ax,sectors<a name=L164 href="source/boot/bootsect.s#L164">164</a>         sub ax,sread<a name=L165 href="source/boot/bootsect.s#L165">165</a>         mov cx,ax<a name=L166 href="source/boot/bootsect.s#L166">166</a>         shl cx,#9<a name=L167 href="source/boot/bootsect.s#L167">167</a>         add cx,bx<a name=L168 href="source/boot/bootsect.s#L168">168</a>         jnc ok2_read<a name=L169 href="source/boot/bootsect.s#L169">169</a>         je ok2_read<a name=L170 href="source/boot/bootsect.s#L170">170</a>         xor ax,ax<a name=L171 href="source/boot/bootsect.s#L171">171</a>         sub ax,bx<a name=L172 href="source/boot/bootsect.s#L172">172</a>         shr ax,#9<a name=L173 href="source/boot/bootsect.s#L173">173</a> ok2_read:<a name=L174 href="source/boot/bootsect.s#L174">174</a>         call read_track<a name=L175 href="source/boot/bootsect.s#L175">175</a>         mov cx,ax<a name=L176 href="source/boot/bootsect.s#L176">176</a>         add ax,sread<a name=L177 href="source/boot/bootsect.s#L177">177</a>         seg cs<a name=L178 href="source/boot/bootsect.s#L178">178</a>         cmp ax,sectors<a name=L179 href="source/boot/bootsect.s#L179">179</a>         jne ok3_read<a name=L180 href="source/boot/bootsect.s#L180">180</a>         mov ax,#1<a name=L181 href="source/boot/bootsect.s#L181">181</a>         sub ax,head<a name=L182 href="source/boot/bootsect.s#L182">182</a>         jne ok4_read<a name=L183 href="source/boot/bootsect.s#L183">183</a>         inc track<a name=L184 href="source/boot/bootsect.s#L184">184</a> ok4_read:<a name=L185 href="source/boot/bootsect.s#L185">185</a>         mov head,ax<a name=L186 href="source/boot/bootsect.s#L186">186</a>         xor ax,ax<a name=L187 href="source/boot/bootsect.s#L187">187</a> ok3_read:<a name=L188 href="source/boot/bootsect.s#L188">188</a>         mov sread,ax<a name=L189 href="source/boot/bootsect.s#L189">189</a>         shl cx,#9<a name=L190 href="source/boot/bootsect.s#L190">190</a>         add bx,cx<a name=L191 href="source/boot/bootsect.s#L191">191</a>         jnc rp_read<a name=L192 href="source/boot/bootsect.s#L192">192</a>         mov ax,es<a name=L193 href="source/boot/bootsect.s#L193">193</a>         add ax,#0x1000<a name=L194 href="source/boot/bootsect.s#L194">194</a>         mov es,ax<a name=L195 href="source/boot/bootsect.s#L195">195</a>         xor bx,bx<a name=L196 href="source/boot/bootsect.s#L196">196</a>         jmp rp_read<a name=L197 href="source/boot/bootsect.s#L197">197</a> <a name=L198 href="source/boot/bootsect.s#L198">198</a> read_track:<a name=L199 href="source/boot/bootsect.s#L199">199</a>         push ax<a name=L200 href="source/boot/bootsect.s#L200">200</a>         push bx<a name=L201 href="source/boot/bootsect.s#L201">201</a>         push cx<a name=L202 href="source/boot/bootsect.s#L202">202</a>         push dx<a name=L203 href="source/boot/bootsect.s#L203">203</a>         mov dx,track<a name=L204 href="source/boot/bootsect.s#L204">204</a>         mov cx,sread<a name=L205 href="source/boot/bootsect.s#L205">205</a>         inc cx<a name=L206 href="source/boot/bootsect.s#L206">206</a>         mov ch,dl<a name=L207 href="source/boot/bootsect.s#L207">207</a>         mov dx,head<a name=L208 href="source/boot/bootsect.s#L208">208</a>         mov dh,dl<a name=L209 href="source/boot/bootsect.s#L209">209</a>         mov dl,#0<a name=L210 href="source/boot/bootsect.s#L210">210</a>         and dx,#0x0100<a name=L211 href="source/boot/bootsect.s#L211">211</a>         mov ah,#2<a name=L212 href="source/boot/bootsect.s#L212">212</a>         int 0x13<a name=L213 href="source/boot/bootsect.s#L213">213</a>         jc bad_rt<a name=L214 href="source/boot/bootsect.s#L214">214</a>         pop dx<a name=L215 href="source/boot/bootsect.s#L215">215</a>         pop cx<a name=L216 href="source/boot/bootsect.s#L216">216</a>         pop bx<a name=L217 href="source/boot/bootsect.s#L217">217</a>         pop ax<a name=L218 href="source/boot/bootsect.s#L218">218</a>         ret<a name=L219 href="source/boot/bootsect.s#L219">219</a> bad_rt: mov ax,#0<a name=L220 href="source/boot/bootsect.s#L220">220</a>         mov dx,#0<a name=L221 href="source/boot/bootsect.s#L221">221</a>         int 0x13<a name=L222 href="source/boot/bootsect.s#L222">222</a>         pop dx<a name=L223 href="source/boot/bootsect.s#L223">223</a>         pop cx<a name=L224 href="source/boot/bootsect.s#L224">224</a>         pop bx<a name=L225 href="source/boot/bootsect.s#L225">225</a>         pop ax<a name=L226 href="source/boot/bootsect.s#L226">226</a>         jmp read_track<a name=L227 href="source/boot/bootsect.s#L227">227</a> <a name=L228 href="source/boot/bootsect.s#L228">228</a> /*<a name=L229 href="source/boot/bootsect.s#L229">229</a>  * This procedure turns off the floppy drive motor, so<a name=L230 href="source/boot/bootsect.s#L230">230</a>  * that we enter the kernel in a known state, and<a name=L231 href="source/boot/bootsect.s#L231">231</a>  * don't have to worry about it later.<a name=L232 href="source/boot/bootsect.s#L232">232</a>  */<a name=L233 href="source/boot/bootsect.s#L233">233</a> kill_motor:<a name=L234 href="source/boot/bootsect.s#L234">234</a>         push dx<a name=L235 href="source/boot/bootsect.s#L235">235</a>         mov dx,#0x3f2<a name=L236 href="source/boot/bootsect.s#L236">236</a>         mov al,#0<a name=L237 href="source/boot/bootsect.s#L237">237</a>         outb<a name=L238 href="source/boot/bootsect.s#L238">238</a>         pop dx<a name=L239 href="source/boot/bootsect.s#L239">239</a>         ret<a name=L240 href="source/boot/bootsect.s#L240">240</a> <a name=L241 href="source/boot/bootsect.s#L241">241</a> sectors:<a name=L242 href="source/boot/bootsect.s#L242">242</a>         .word 0<a name=L243 href="source/boot/bootsect.s#L243">243</a> <a name=L244 href="source/boot/bootsect.s#L244">244</a> msg1:<a name=L245 href="source/boot/bootsect.s#L245">245</a>         .byte 13,10<a name=L246 href="source/boot/bootsect.s#L246">246</a>         .ascii "Loading system ..."<a name=L247 href="source/boot/bootsect.s#L247">247</a>         .byte 13,10,13,10<a name=L248 href="source/boot/bootsect.s#L248">248</a> <a name=L249 href="source/boot/bootsect.s#L249">249</a> .org 508<a name=L250 href="source/boot/bootsect.s#L250">250</a> root_dev:<a name=L251 href="source/boot/bootsect.s#L251">251</a>         .word ROOT_DEV<a name=L252 href="source/boot/bootsect.s#L252">252</a> boot_flag:<a name=L253 href="source/boot/bootsect.s#L253">253</a>         .word 0xAA55<a name=L254 href="source/boot/bootsect.s#L254">254</a> <a name=L255 href="source/boot/bootsect.s#L255">255</a> .text<a name=L256 href="source/boot/bootsect.s#L256">256</a> endtext:<a name=L257 href="source/boot/bootsect.s#L257">257</a> .data<a name=L258 href="source/boot/bootsect.s#L258">258</a> enddata:<a name=L259 href="source/boot/bootsect.s#L259">259</a> .bss<a name=L260 href="source/boot/bootsect.s#L260">260</a> endbss:</pre><hr><div align=center>   [<b><i>源代码浏览</i></b>] [<a href="diff/boot/bootsect.s">区别标定</a>] [<a href="ident">标识符搜索</a>] [<a href="search">文本搜索</a>] [<a href="find">文件搜索</a>] </div><hr>本网页由 <a href="http:blurb.html">LXR引擎</a> 自动生成.<br></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -