Subversion Repositories Kolibri OS

Rev

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

Rev 4772 Rev 5363
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2013. 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: 4772 $
8
$Revision: 5363 $
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     [boot_dev+OS_BASE+0x10000], 1
14
        cmp     [boot_dev+OS_BASE+0x10000], 1
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
78
; Register ramdisk file system
79
register_ramdisk:
79
register_ramdisk:
80
        mov     esi, boot_initramdisk
80
        mov     esi, boot_initramdisk
81
        call    boot_log
81
        call    boot_log
82
        call    ramdisk_init
82
        call    ramdisk_init
83
        ret
83
        ret
84
;-----------------------------------------------------------------------------
84
;-----------------------------------------------------------------------------
85
iglobal
85
iglobal
86
align 4
86
align 4
87
read_image_fsinfo:
87
read_image_fsinfo:
88
        dd      0               ; function: read
88
        dd      0               ; function: read
89
        dq      0               ; offset: zero
89
        dq      0               ; offset: zero
90
        dd      1474560         ; size
90
        dd      1474560         ; size
91
        dd      RAMDISK         ; buffer
91
        dd      RAMDISK         ; buffer
92
.name   db      '/hd'
92
.name   db      '/hd'
93
.name_digit db  '0'
93
.name_digit db  '0'
94
        db      '/'
94
        db      '/'
95
.partition:
95
.partition:
96
        rb      64      ; should be enough for '255/KOLIBRI/KOLIBRI.IMG'
96
        rb      64      ; should be enough for '255/KOLIBRI/KOLIBRI.IMG'
97
 
97
 
98
bootpath1       db      'KOLIBRI.IMG',0
98
bootpath1       db      'KOLIBRI.IMG',0
99
.len = $ - bootpath1
99
.len = $ - bootpath1
100
bootpath2       db      'KOLIBRI/KOLIBRI.IMG',0
100
bootpath2       db      'KOLIBRI/KOLIBRI.IMG',0
101
.len = $ - bootpath2
101
.len = $ - bootpath2
102
endg
102
endg
103
 
103
 
104
read_image:
104
read_image:
105
        mov     ebx, read_image_fsinfo
105
        mov     ebx, read_image_fsinfo
106
        pushad
106
        pushad
107
        call    file_system_lfn_protected
107
        call    file_system_lfn_protected
108
        popad
108
        popad
109
        ret
109
        ret
110
 
110
 
111
no_sys_on_hd:
111
no_sys_on_hd:
112
        DEBUGF 1, "K : RD not found\n"
112
        DEBUGF 1, "K : RD not found\n"
113
.1:
113
.1:
114
        ; test_to_format_ram_disk (need if not using ram disk)
114
        ; test_to_format_ram_disk (need if not using ram disk)
115
        cmp     [boot_dev+OS_BASE+0x10000], 3
115
        cmp     [boot_dev+OS_BASE+0x10000], 3
116
        jne     not_format_ram_disk
116
        jne     not_format_ram_disk
117
        ; format_ram_disk
117
        ; format_ram_disk
118
        mov     edi, RAMDISK
118
        mov     edi, RAMDISK
119
        mov     ecx, 0x1080
119
        mov     ecx, 0x1080
120
        xor     eax, eax
120
        xor     eax, eax
121
@@:             
121
@@:             
122
        stosd
122
        stosd
123
        loop    @b
123
        loop    @b
124
 
124
 
125
        mov     ecx, 0x58F7F
125
        mov     ecx, 0x58F7F
126
        mov     eax, 0xF6F6F6F6
126
        mov     eax, 0xF6F6F6F6
127
@@:             
127
@@:             
128
        stosd
128
        stosd
129
        loop    @b
129
        loop    @b
130
        
130
        
131
        mov     [RAMDISK+0x200], dword 0xFFFFF0         ; fat table
131
        mov     [RAMDISK+0x200], dword 0xFFFFF0         ; fat table
132
        mov     [RAMDISK+0x4200], dword 0xFFFFF0
132
        mov     [RAMDISK+0x4200], dword 0xFFFFF0
133
        
133
        
134
not_format_ram_disk:
134
not_format_ram_disk:
135
yes_sys_on_hd:
135
yes_sys_on_hd: