Subversion Repositories Kolibri OS

Rev

Rev 3744 | Rev 5363 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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