Subversion Repositories Kolibri OS

Rev

Rev 2434 | Rev 2987 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                              ;;
  3. ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
  4. ;; Distributed under terms of the GNU General Public License    ;;
  5. ;;                                                              ;;
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7.  
  8. $Revision: 2465 $
  9.  
  10.  
  11. ; READ RAMDISK IMAGE FROM HD
  12.  
  13.         cmp     [boot_dev+OS_BASE+0x10000], 1
  14.         jne     no_sys_on_hd
  15.  
  16.         test    [DRIVE_DATA+1], byte 0x40
  17.         jz      position_2
  18.         mov     [hdbase], 0x1f0
  19.         mov     [hdid], 0x0
  20.         mov     [hdpos], 1
  21.         mov     [fat32part], 0
  22.   position_1_1:
  23.         inc     [fat32part]
  24.         call    search_and_read_image
  25.         cmp     [image_retrieved], 1
  26.         je      yes_sys_on_hd
  27.         movzx   eax, byte [DRIVE_DATA+2]
  28.         cmp     [fat32part], eax
  29.         jle     position_1_1
  30.   position_2:
  31.         test    [DRIVE_DATA+1], byte 0x10
  32.         jz      position_3
  33.         mov     [hdbase], 0x1f0
  34.         mov     [hdid], 0x10
  35.         mov     [hdpos], 2
  36.         mov     [fat32part], 0
  37.   position_2_1:
  38.         inc     [fat32part]
  39.         call    search_and_read_image
  40.         cmp     [image_retrieved], 1
  41.         je      yes_sys_on_hd
  42.         movzx   eax, byte [DRIVE_DATA+3]
  43.         cmp     eax, [fat32part]
  44.         jle     position_2_1
  45.   position_3:
  46.         test    [DRIVE_DATA+1], byte 0x4
  47.         jz      position_4
  48.         mov     [hdbase], 0x170
  49.         mov     [hdid], 0x0
  50.         mov     [hdpos], 3
  51.         mov     [fat32part], 0
  52.   position_3_1:
  53.         inc     [fat32part]
  54.         call    search_and_read_image
  55.         cmp     [image_retrieved], 1
  56.         je      yes_sys_on_hd
  57.         movzx   eax, byte [DRIVE_DATA+4]
  58.         cmp     eax, [fat32part]
  59.         jle     position_3_1
  60.   position_4:
  61.         test    [DRIVE_DATA+1], byte 0x1
  62.         jz      no_sys_on_hd
  63.         mov     [hdbase], 0x170
  64.         mov     [hdid], 0x10
  65.         mov     [hdpos], 4
  66.         mov     [fat32part], 0
  67.   position_4_1:
  68.         inc     [fat32part]
  69.         call    search_and_read_image
  70.         cmp     [image_retrieved], 1
  71.         je      yes_sys_on_hd
  72.         movzx   eax, byte [DRIVE_DATA+5]
  73.         cmp     eax, [fat32part]
  74.         jle     position_4_1
  75.         jmp     yes_sys_on_hd
  76.  
  77.   search_and_read_image:
  78.         call    set_FAT32_variables
  79.         mov     edx, bootpath
  80.         call    read_image
  81.         test    eax, eax
  82.         jz      image_present
  83.         mov     edx, bootpath2
  84.         call    read_image
  85.         test    eax, eax
  86.         jz      image_present
  87.         ret
  88.     image_present:
  89.         mov     [image_retrieved], 1
  90.         ret
  91.  
  92. read_image:
  93.         mov     eax, hdsysimage+OS_BASE+0x10000
  94.         mov     ebx, 1474560/512
  95.         mov     ecx, RAMDISK
  96.         mov     esi, 0
  97.         mov     edi, 12
  98.         call    file_read
  99.         ret
  100.  
  101. image_retrieved  db 0
  102. counter_of_partitions db 0
  103. no_sys_on_hd:
  104.         ; test_to_format_ram_disk (need if not using ram disk)
  105.         cmp     [boot_dev+OS_BASE+0x10000], 3
  106.         jne     not_format_ram_disk
  107.         ; format_ram_disk
  108.         mov     edi, RAMDISK
  109.         mov     ecx, 0x1080
  110.         xor     eax, eax
  111. @@:            
  112.         stosd
  113.         loop    @b
  114.  
  115.         mov     ecx, 0x58F7F
  116.         mov     eax, 0xF6F6F6F6
  117. @@:            
  118.         stosd
  119.         loop    @b
  120.        
  121.         mov     [RAMDISK+0x200], dword 0xFFFFF0         ; fat table
  122.         mov     [RAMDISK+0x4200], dword 0xFFFFF0
  123.        
  124. not_format_ram_disk:
  125. yes_sys_on_hd:
  126.