Subversion Repositories Kolibri OS

Rev

Rev 7215 | Show entire file | Ignore 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 228... Line 224...
228
 
224
 
229
;------------------------------------------
225
;------------------------------------------
230
        ; read sector from disk
226
        ; read sector from disk
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:
-
 
231
        dec     bp
-
 
232
        jnz     .next
235
        dec     bp
233
        cmp     ah, 02h                                 ; if read sectors
-
 
234
        jz      file_error_message
-
 
235
        mov     byte[write_err+boot_program], 1         ; if write sectors
-
 
236
        jmp     .ret
236
        jz      file_error_message
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
-
 
241
        jc      newread
240
        jc      newread
242
.ret:
241
        pop     bp
243
        pop     bp
-
 
244
        retn
242
        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)
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