Subversion Repositories Kolibri OS

Rev

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

Rev 8089 Rev 8091
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2004-2015. 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: 8089 $
8
$Revision: 8091 $
9
 
9
 
10
 
10
 
11
read_ramdisk:
11
read_ramdisk:
12
; READ RAMDISK IMAGE FROM HD (only for IDE0, IDE1, IDE2, IDE3)
12
; READ RAMDISK IMAGE FROM HD (only for IDE0, IDE1, IDE2, IDE3)
13
 
13
 
14
        cmp     byte [BOOT.rd_load_from], RD_LOAD_FROM_HD
14
        cmp     byte [BOOT.rd_load_from], RD_LOAD_FROM_HD
15
        jne     no_sys_on_hd.1
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
        DEBUGF 1, "K : RD found: %s\n", read_image_fsinfo.name
73
        pop     edi esi eax
73
        pop     edi esi eax
74
 
74
 
75
        call    register_ramdisk
75
        call    register_ramdisk
76
        jmp     yes_sys_on_hd
76
        jmp     yes_sys_on_hd
77
;-----------------------------------------------------------------------------
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
78
iglobal
86
align 4
79
align 4
87
read_image_fsinfo:
80
read_image_fsinfo:
88
        dd      0               ; function: read
81
        dd      0               ; function: read
89
        dq      0               ; offset: zero
82
        dq      0               ; offset: zero
90
        dd      1474560         ; size
83
        dd      1474560         ; size
91
        dd      RAMDISK         ; buffer
84
        dd      RAMDISK         ; buffer
92
.name   db      '/hd'
85
.name   db      '/hd'
93
.name_digit db  '0'
86
.name_digit db  '0'
94
        db      '/'
87
        db      '/'
95
.partition:
88
.partition:
96
        rb      64      ; should be enough for '255/KOLIBRI/KOLIBRI.IMG'
89
        rb      64      ; should be enough for '255/KOLIBRI/KOLIBRI.IMG'
97
 
90
 
98
bootpath1       db      'KOLIBRI.IMG',0
91
bootpath1       db      'KOLIBRI.IMG',0
99
.len = $ - bootpath1
92
.len = $ - bootpath1
100
bootpath2       db      'KOLIBRI/KOLIBRI.IMG',0
93
bootpath2       db      'KOLIBRI/KOLIBRI.IMG',0
101
.len = $ - bootpath2
94
.len = $ - bootpath2
102
endg
95
endg
103
 
96
 
104
read_image:
97
read_image:
105
        mov     ebx, read_image_fsinfo
98
        mov     ebx, read_image_fsinfo
106
        pushad
99
        pushad
107
        call    file_system_lfn_protected
100
        call    file_system_lfn_protected
108
        popad
101
        popad
109
        ret
102
        ret
110
 
103
 
111
no_sys_on_hd:
104
no_sys_on_hd:
112
        DEBUGF 1, "K : RD not found\n"
105
        DEBUGF 1, "K : RD not found\n"
113
.1:
106
.1:
114
        ; test_to_format_ram_disk (need if not using ram disk)
107
        ; test_to_format_ram_disk (need if not using ram disk)
115
        cmp     byte [BOOT.rd_load_from], RD_LOAD_FROM_FORMAT
108
        cmp     byte [BOOT.rd_load_from], RD_LOAD_FROM_FORMAT
116
        jne     not_format_ram_disk
109
        jne     not_format_ram_disk
117
        ; format_ram_disk
110
        ; format_ram_disk
118
        mov     edi, RAMDISK
111
        mov     edi, RAMDISK
119
        mov     ecx, 0x1080
112
        mov     ecx, 0x1080
120
        xor     eax, eax
113
        xor     eax, eax
121
@@:             
114
@@:             
122
        stosd
115
        stosd
123
        loop    @b
116
        loop    @b
124
 
117
 
125
        mov     ecx, 0x58F7F
118
        mov     ecx, 0x58F7F
126
        mov     eax, 0xF6F6F6F6
119
        mov     eax, 0xF6F6F6F6
127
@@:             
120
@@:             
128
        stosd
121
        stosd
129
        loop    @b
122
        loop    @b
130
        
123
        
131
        mov     [RAMDISK+0x200], dword 0xFFFFF0         ; fat table
124
        mov     [RAMDISK+0x200], dword 0xFFFFF0         ; fat table
132
        mov     [RAMDISK+0x4200], dword 0xFFFFF0
125
        mov     [RAMDISK+0x4200], dword 0xFFFFF0
133
        
126
        
134
not_format_ram_disk:
127
not_format_ram_disk:
135
yes_sys_on_hd:
128
yes_sys_on_hd: