Subversion Repositories Kolibri OS

Rev

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

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                              ;;
  3. ;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
  4. ;; Distributed under terms of the GNU General Public License    ;;
  5. ;;                                                              ;;
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7.  
  8. $Revision: 7129 $
  9.  
  10.  
  11. read_ramdisk:
  12. ; READ RAMDISK IMAGE FROM HD (only for IDE0, IDE1, IDE2, IDE3)
  13.  
  14.         cmp     byte [BOOT_DEV+OS_BASE+0x10000], 1
  15.         jne     no_sys_on_hd.1
  16.  
  17.         xor     ebp, ebp
  18. .hd_loop:
  19.         lea     eax, [ebp+'0']
  20.         mov     [read_image_fsinfo.name_digit], al
  21.         movzx   eax, byte [DRIVE_DATA+2+ebp]
  22.         test    eax, eax
  23.         jz      .next_hd
  24.         push    eax
  25.         mov     esi, 1
  26. .partition_loop:
  27.         mov     eax, esi
  28.         push    -'0'
  29. @@:
  30.         xor     edx, edx
  31.         div     [_10]
  32.         push    edx
  33.         test    eax, eax
  34.         jnz     @b
  35.         mov     edi, read_image_fsinfo.partition
  36. @@:
  37.         pop     eax
  38.         add     al, '0'
  39.         stosb
  40.         jnz     @b
  41.         mov     byte [edi-1], '/'
  42.         push    esi edi
  43.         mov     esi, bootpath1
  44.         mov     ecx, bootpath1.len
  45.         rep movsb
  46.         call    read_image
  47.         test    eax, eax
  48.         jz      .yes
  49.         cmp     eax, 6
  50.         jz      .yes
  51.         pop     edi
  52.         push    edi
  53.         mov     esi, bootpath2
  54.         mov     ecx, bootpath2.len
  55.         rep movsb
  56.         call    read_image
  57.         test    eax, eax
  58.         jz      .yes
  59.         cmp     eax, 6
  60.         jz      .yes
  61.         pop     edi esi
  62.         inc     esi
  63.         cmp     esi, [esp]
  64.         jbe     .partition_loop
  65.         pop     eax
  66. .next_hd:
  67.         inc     ebp
  68.         cmp     ebp, 4
  69.         jb      .hd_loop
  70.         jmp     no_sys_on_hd
  71. .yes:
  72.         DEBUGF 1, "K : RD found: %s\n", read_image_fsinfo.name
  73.         pop     edi esi eax
  74.  
  75.         call    register_ramdisk
  76.         jmp     yes_sys_on_hd
  77. ;-----------------------------------------------------------------------------
  78. ; Register ramdisk file system
  79. register_ramdisk:
  80.         mov     esi, boot_initramdisk
  81.         call    boot_log
  82.         call    ramdisk_init
  83.         ret
  84. ;-----------------------------------------------------------------------------
  85. iglobal
  86. align 4
  87. read_image_fsinfo:
  88.         dd      0               ; function: read
  89.         dq      0               ; offset: zero
  90.         dd      1474560         ; size
  91.         dd      RAMDISK         ; buffer
  92. .name   db      '/hd'
  93. .name_digit db  '0'
  94.         db      '/'
  95. .partition:
  96.         rb      64      ; should be enough for '255/KOLIBRI/KOLIBRI.IMG'
  97.  
  98. bootpath1       db      'KOLIBRI.IMG',0
  99. .len = $ - bootpath1
  100. bootpath2       db      'KOLIBRI/KOLIBRI.IMG',0
  101. .len = $ - bootpath2
  102. endg
  103.  
  104. read_image:
  105.         mov     ebx, read_image_fsinfo
  106.         pushad
  107.         call    file_system_lfn_protected
  108.         popad
  109.         ret
  110.  
  111. no_sys_on_hd:
  112.         DEBUGF 1, "K : RD not found\n"
  113. .1:
  114.         ; test_to_format_ram_disk (need if not using ram disk)
  115.         cmp     byte [BOOT_DEV+OS_BASE+0x10000], 3
  116.         jne     not_format_ram_disk
  117.         ; format_ram_disk
  118.         mov     edi, RAMDISK
  119.         mov     ecx, 0x1080
  120.         xor     eax, eax
  121. @@:            
  122.         stosd
  123.         loop    @b
  124.  
  125.         mov     ecx, 0x58F7F
  126.         mov     eax, 0xF6F6F6F6
  127. @@:            
  128.         stosd
  129.         loop    @b
  130.        
  131.         mov     [RAMDISK+0x200], dword 0xFFFFF0         ; fat table
  132.         mov     [RAMDISK+0x4200], dword 0xFFFFF0
  133.        
  134. not_format_ram_disk:
  135. yes_sys_on_hd:
  136.