;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                                                              ;;
;; Copyright (C) KolibriOS team 2004-2007. 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: