Subversion Repositories Kolibri OS

Rev

Rev 5201 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
431 serge 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
5565 serge 3
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
431 serge 4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
593 mikedld 8
$Revision: 5565 $
9
 
10
 
3908 Serge 11
read_ramdisk:
5201 serge 12
; READ RAMDISK IMAGE FROM HD (only for IDE0, IDE1, IDE2, IDE3)
1 ha 13
 
2434 Serge 14
        cmp     [boot_dev+OS_BASE+0x10000], 1
5201 serge 15
        jne     no_sys_on_hd.1
1 ha 16
 
3908 Serge 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
2434 Serge 46
        call    read_image
47
        test    eax, eax
3908 Serge 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
2434 Serge 56
        call    read_image
57
        test    eax, eax
3908 Serge 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:
5201 serge 72
        DEBUGF 1, "K : RD found: %s\n", read_image_fsinfo.name
3908 Serge 73
        pop     edi esi eax
5201 serge 74
 
75
        call    register_ramdisk
3908 Serge 76
        jmp     yes_sys_on_hd
5201 serge 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
;-----------------------------------------------------------------------------
2987 Serge 85
iglobal
86
align 4
87
read_image_fsinfo:
88
        dd      0               ; function: read
89
        dq      0               ; offset: zero
3908 Serge 90
        dd      1474560         ; size
2987 Serge 91
        dd      RAMDISK         ; buffer
5201 serge 92
.name   db      '/hd'
3908 Serge 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
2987 Serge 102
endg
103
 
1 ha 104
read_image:
2987 Serge 105
        mov     ebx, read_image_fsinfo
106
        pushad
3500 Serge 107
        call    file_system_lfn_protected
2987 Serge 108
        popad
381 serge 109
        ret
1 ha 110
 
111
no_sys_on_hd:
5201 serge 112
        DEBUGF 1, "K : RD not found\n"
113
.1:
545 spraid 114
        ; test_to_format_ram_disk (need if not using ram disk)
2434 Serge 115
        cmp     [boot_dev+OS_BASE+0x10000], 3
116
        jne     not_format_ram_disk
545 spraid 117
        ; format_ram_disk
2434 Serge 118
        mov     edi, RAMDISK
119
        mov     ecx, 0x1080
120
        xor     eax, eax
121
@@:
122
        stosd
123
        loop    @b
545 spraid 124
 
2434 Serge 125
        mov     ecx, 0x58F7F
126
        mov     eax, 0xF6F6F6F6
127
@@:
128
        stosd
129
        loop    @b
545 spraid 130
 
2434 Serge 131
        mov     [RAMDISK+0x200], dword 0xFFFFF0         ; fat table
132
        mov     [RAMDISK+0x4200], dword 0xFFFFF0
545 spraid 133
 
134
not_format_ram_disk:
1 ha 135
yes_sys_on_hd: