129,9 → 129,7 |
|
found_kernel_file: |
mov bp, [si+01ah] ; first cluster of kernel file |
; <diamond> |
mov [cluster1st+boot_program], bp ; starting cluster of kernel file |
; <\diamond> |
|
; reading first FAT table |
mov ax, word [BPB_RsvdSecCnt+boot_program] ; begin first FAT abs sector number |
184,12 → 182,10 |
jmp loop_obtains_kernel_data |
|
execute_kernel: |
; <diamond> |
mov ax, 'KL' |
push 0 |
pop ds |
mov si, loader_block+boot_program |
; </diamond> |
push word seg_read_kernel |
push word 0 |
retf ; jmp far 1000:0000 |
233,13 → 229,20 |
mov bp, 20 ; try 20 times |
newread: |
dec bp |
jnz .next |
cmp ah, 02h ; if read sectors |
jz file_error_message |
mov byte[write_err+boot_program], 1 ; if write sectors |
jmp .ret |
.next: |
push ax bx cx dx |
int 13h |
pop dx cx bx ax |
jc newread |
.ret: |
pop bp |
retn |
|
;------------------------------------------ |
; convert abs. sector number (AX) to BIOS T:H:S |
; sector number = (abs.sector%BPB_SecPerTrk)+1 |
279,7 → 282,6 |
RootDirSecs dw ? |
data_start dw ? |
|
; <diamond> |
write1st: |
push cs |
pop ds |
293,11 → 295,11 |
retf |
cluster1st dw ? |
loader_block: |
db 1 |
dw 0 |
dw write1st+boot_program |
dw 0 |
; <\diamond> |
db 1 ; +0 |
dw 0 ; +1 |
dw write1st+boot_program ; +3 |
dw 0 ; +5 |
write_err: db 0 ; +7 |
|
times 0x1fe-$ db 00h |
|