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