Subversion Repositories Kolibri OS

Rev

Rev 2540 | Go to most recent revision | Blame | 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 $
  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. iglobal
  93. align 4
  94. read_image_fsinfo:
  95.         dd      0               ; function: read
  96.         dq      0               ; offset: zero
  97.         dd      1474560/512     ; size
  98.         dd      RAMDISK         ; buffer
  99.         db      0
  100.         dd      hdsysimage+OS_BASE+0x10000
  101. endg
  102.  
  103. read_image:
  104.         mov     ebx, read_image_fsinfo
  105.         pushad
  106.         call    file_system_lfn
  107.         popad
  108.         ret
  109.  
  110. image_retrieved  db 0
  111. counter_of_partitions db 0
  112. no_sys_on_hd:
  113.         ; test_to_format_ram_disk (need if not using ram disk)
  114.         cmp   [boot_dev+OS_BASE+0x10000],3
  115.         jne not_format_ram_disk
  116.         ; format_ram_disk
  117.         mov edi, RAMDISK
  118.         mov ecx, 0x1080
  119.         xor eax,eax
  120. @@:            
  121.                 stosd
  122.         loop @b
  123.  
  124.         mov ecx, 0x58F7F
  125.         mov eax,0xF6F6F6F6
  126. @@:            
  127.                 stosd
  128.         loop @b
  129.        
  130.         mov [RAMDISK+0x200],dword 0xFFFFF0              ; fat table
  131.         mov [RAMDISK+0x4200],dword 0xFFFFF0
  132.        
  133. not_format_ram_disk:
  134. yes_sys_on_hd:
  135.