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