;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                                                              ;;
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License    ;;
;;                                                              ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

$Revision$


; READ RAMDISK IMAGE FROM HD

        cmp     [boot_dev+OS_BASE+0x10000], 1
        jne     no_sys_on_hd

        test    [DRIVE_DATA+1], byte 0x40
        jz      position_2
        mov     [hdbase], 0x1f0
        mov     [hdid], 0x0
        mov     [hdpos], 1
        mov     [fat32part], 0
  position_1_1:
        inc     [fat32part]
        call    search_and_read_image
        cmp     [image_retrieved], 1
        je      yes_sys_on_hd
        movzx   eax, byte [DRIVE_DATA+2]
        cmp     [fat32part], eax
        jle     position_1_1
  position_2:
        test    [DRIVE_DATA+1], byte 0x10
        jz      position_3
        mov     [hdbase], 0x1f0
        mov     [hdid], 0x10
        mov     [hdpos], 2
        mov     [fat32part], 0
  position_2_1:
        inc     [fat32part]
        call    search_and_read_image
        cmp     [image_retrieved], 1
        je      yes_sys_on_hd
        movzx   eax, byte [DRIVE_DATA+3]
        cmp     eax, [fat32part]
        jle     position_2_1
  position_3:
        test    [DRIVE_DATA+1], byte 0x4
        jz      position_4
        mov     [hdbase], 0x170
        mov     [hdid], 0x0
        mov     [hdpos], 3
        mov     [fat32part], 0
  position_3_1:
        inc     [fat32part]
        call    search_and_read_image
        cmp     [image_retrieved], 1
        je      yes_sys_on_hd
        movzx   eax, byte [DRIVE_DATA+4]
        cmp     eax, [fat32part]
        jle     position_3_1
  position_4:
        test    [DRIVE_DATA+1], byte 0x1
        jz      no_sys_on_hd
        mov     [hdbase], 0x170
        mov     [hdid], 0x10
        mov     [hdpos], 4
        mov     [fat32part], 0
  position_4_1:
        inc     [fat32part]
        call    search_and_read_image
        cmp     [image_retrieved], 1
        je      yes_sys_on_hd
        movzx   eax, byte [DRIVE_DATA+5]
        cmp     eax, [fat32part]
        jle     position_4_1
        jmp     yes_sys_on_hd

  search_and_read_image:
        call    set_FAT32_variables
        mov     edx, bootpath
        call    read_image
        test    eax, eax
        jz      image_present
        mov     edx, bootpath2
        call    read_image
        test    eax, eax
        jz      image_present
        ret
    image_present:
        mov     [image_retrieved], 1
        ret

read_image:
        mov     eax, hdsysimage+OS_BASE+0x10000
        mov     ebx, 1474560/512
        mov     ecx, RAMDISK
        mov     esi, 0
        mov     edi, 12
        call    file_read
        ret

image_retrieved  db 0
counter_of_partitions db 0
no_sys_on_hd:
        ; test_to_format_ram_disk (need if not using ram disk)
        cmp     [boot_dev+OS_BASE+0x10000], 3
        jne     not_format_ram_disk
        ; format_ram_disk
        mov     edi, RAMDISK
        mov     ecx, 0x1080
        xor     eax, eax
@@:             
        stosd
        loop    @b

        mov     ecx, 0x58F7F
        mov     eax, 0xF6F6F6F6
@@:             
        stosd
        loop    @b
        
        mov     [RAMDISK+0x200], dword 0xFFFFF0         ; fat table
        mov     [RAMDISK+0x4200], dword 0xFFFFF0
        
not_format_ram_disk:
yes_sys_on_hd: