Rev 7215 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7215 | Rev 9942 | ||
---|---|---|---|
Line 127... | Line 127... | ||
127 | 127 | ||
Line 128... | Line 128... | ||
128 | ; === KERNEL FOUND. LOADING... === |
128 | ; === KERNEL FOUND. LOADING... === |
129 | 129 | ||
130 | found_kernel_file: |
- | |
131 | mov bp, [si+01ah] ; first cluster of kernel file |
130 | found_kernel_file: |
132 | ; |
- | |
Line 133... | Line 131... | ||
133 | mov [cluster1st+boot_program], bp ; starting cluster of kernel file |
131 | mov bp, [si+01ah] ; first cluster of kernel file |
134 | ; <\diamond> |
132 | mov [cluster1st+boot_program], bp ; starting cluster of kernel file |
135 | 133 | ||
136 | ; reading first FAT table |
134 | ; reading first FAT table |
Line 182... | Line 180... | ||
182 | jae execute_kernel |
180 | jae execute_kernel |
183 | mov bp, ax |
181 | mov bp, ax |
184 | jmp loop_obtains_kernel_data |
182 | jmp loop_obtains_kernel_data |
Line 185... | Line 183... | ||
185 | 183 | ||
186 | execute_kernel: |
- | |
187 | ; |
184 | execute_kernel: |
188 | mov ax, 'KL' |
185 | mov ax, 'KL' |
189 | push 0 |
186 | push 0 |
190 | pop ds |
187 | pop ds |
191 | mov si, loader_block+boot_program |
- | |
192 | ; |
188 | mov si, loader_block+boot_program |
193 | push word seg_read_kernel |
189 | push word seg_read_kernel |
194 | push word 0 |
190 | push word 0 |
Line 231... | Line 227... | ||
231 | read_sector: |
227 | read_sector: |
232 | push bp |
228 | push bp |
233 | mov bp, 20 ; try 20 times |
229 | mov bp, 20 ; try 20 times |
234 | newread: |
230 | newread: |
235 | dec bp |
231 | dec bp |
- | 232 | jnz .next |
|
- | 233 | cmp ah, 02h ; if read sectors |
|
236 | jz file_error_message |
234 | jz file_error_message |
- | 235 | mov byte[write_err+boot_program], 1 ; if write sectors |
|
- | 236 | jmp .ret |
|
- | 237 | .next: |
|
237 | push ax bx cx dx |
238 | push ax bx cx dx |
238 | int 13h |
239 | int 13h |
239 | pop dx cx bx ax |
240 | pop dx cx bx ax |
240 | jc newread |
241 | jc newread |
- | 242 | .ret: |
|
241 | pop bp |
243 | pop bp |
242 | retn |
244 | retn |
- | 245 | ||
243 | ;------------------------------------------ |
246 | ;------------------------------------------ |
244 | ; convert abs. sector number (AX) to BIOS T:H:S |
247 | ; convert abs. sector number (AX) to BIOS T:H:S |
245 | ; sector number = (abs.sector%BPB_SecPerTrk)+1 |
248 | ; sector number = (abs.sector%BPB_SecPerTrk)+1 |
246 | ; pre.track number = (abs.sector/BPB_SecPerTrk) |
249 | ; pre.track number = (abs.sector/BPB_SecPerTrk) |
247 | ; head number = pre.track number%BPB_NumHeads |
250 | ; head number = pre.track number%BPB_NumHeads |
Line 277... | Line 280... | ||
277 | kernel_name db 'KERNEL MNT ?',cr,lf,00h |
280 | kernel_name db 'KERNEL MNT ?',cr,lf,00h |
278 | FirstRootDirSecNum dw ? |
281 | FirstRootDirSecNum dw ? |
279 | RootDirSecs dw ? |
282 | RootDirSecs dw ? |
280 | data_start dw ? |
283 | data_start dw ? |
Line 281... | Line -... | ||
281 | - | ||
282 | ; |
284 | |
283 | write1st: |
285 | write1st: |
284 | push cs |
286 | push cs |
285 | pop ds |
287 | pop ds |
286 | mov byte [patchhere+1+boot_program], 3 ; change ah=2 to ah=3 |
288 | mov byte [patchhere+1+boot_program], 3 ; change ah=2 to ah=3 |
Line 291... | Line 293... | ||
291 | call writesec |
293 | call writesec |
292 | mov byte [patchhere+1+boot_program], 2 ; change back ah=3 to ah=2 |
294 | mov byte [patchhere+1+boot_program], 2 ; change back ah=3 to ah=2 |
293 | retf |
295 | retf |
294 | cluster1st dw ? |
296 | cluster1st dw ? |
295 | loader_block: |
297 | loader_block: |
296 | db 1 |
298 | db 1 ; +0 |
297 | dw 0 |
299 | dw 0 ; +1 |
298 | dw write1st+boot_program |
300 | dw write1st+boot_program ; +3 |
299 | dw 0 |
301 | dw 0 ; +5 |
300 | ; <\diamond> |
302 | write_err: db 0 ; +7 |
Line 301... | Line 303... | ||
301 | 303 | ||
Line 302... | Line 304... | ||
302 | times 0x1fe-$ db 00h |
304 | times 0x1fe-$ db 00h |