Subversion Repositories Kolibri OS

Rev

Rev 3742 | Rev 4772 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2288 clevermous 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
3742 clevermous 3
;; Copyright (C) KolibriOS team 2004-2013. All rights reserved. ;;
2288 clevermous 4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
8
$Revision: 3744 $
9
 
10
 
3742 clevermous 11
read_ramdisk:
2288 clevermous 12
; READ RAMDISK IMAGE FROM HD
13
 
14
        cmp     [boot_dev+OS_BASE+0x10000], 1
15
        jne     no_sys_on_hd
16
 
3742 clevermous 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
2288 clevermous 46
        call    read_image
47
        test    eax, eax
3742 clevermous 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
2288 clevermous 56
        call    read_image
57
        test    eax, eax
3742 clevermous 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
        pop     edi esi eax
73
        jmp     yes_sys_on_hd
2288 clevermous 74
 
2643 clevermous 75
iglobal
76
align 4
77
read_image_fsinfo:
78
        dd      0               ; function: read
79
        dq      0               ; offset: zero
3744 clevermous 80
        dd      1474560         ; size
2643 clevermous 81
        dd      RAMDISK         ; buffer
3742 clevermous 82
        db      '/hd'
83
.name_digit db  '0'
84
        db      '/'
85
.partition:
86
        rb      64      ; should be enough for '255/KOLIBRI/KOLIBRI.IMG'
87
 
88
bootpath1       db      'KOLIBRI.IMG',0
89
.len = $ - bootpath1
90
bootpath2       db      'KOLIBRI/KOLIBRI.IMG',0
91
.len = $ - bootpath2
2643 clevermous 92
endg
93
 
2288 clevermous 94
read_image:
2643 clevermous 95
        mov     ebx, read_image_fsinfo
96
        pushad
3296 clevermous 97
        call    file_system_lfn_protected
2643 clevermous 98
        popad
2288 clevermous 99
        ret
100
 
101
no_sys_on_hd:
102
        ; test_to_format_ram_disk (need if not using ram disk)
103
        cmp     [boot_dev+OS_BASE+0x10000], 3
104
        jne     not_format_ram_disk
105
        ; format_ram_disk
106
        mov     edi, RAMDISK
107
        mov     ecx, 0x1080
108
        xor     eax, eax
109
@@:
110
        stosd
111
        loop    @b
112
 
113
        mov     ecx, 0x58F7F
114
        mov     eax, 0xF6F6F6F6
115
@@:
116
        stosd
117
        loop    @b
118
 
119
        mov     [RAMDISK+0x200], dword 0xFFFFF0         ; fat table
120
        mov     [RAMDISK+0x4200], dword 0xFFFFF0
121
 
122
not_format_ram_disk:
123
yes_sys_on_hd: