Subversion Repositories Kolibri OS

Rev

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