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: |