Subversion Repositories Kolibri OS

Rev

Rev 9715 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 9715 Rev 9899
Line 3... Line 3...
3
;; Copyright (C) KolibriOS team 2004-2022. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2004-2022. 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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 7... Line 7...
7
 
7
 
Line 8... Line 8...
8
$Revision: 9715 $
8
$Revision: 9899 $
9
 
9
 
10
align 4
10
align 4
11
proc mem_test
11
proc mem_test
Line 53... Line 53...
53
; round all to pages
53
; round all to pages
54
        mov     eax, [edi + e820entry.addr.lo]
54
        mov     eax, [edi + e820entry.addr.lo]
55
        cmp     byte [edi + e820entry.type], 1
55
        cmp     byte [edi + e820entry.type], 1
56
        jne     .unusable
56
        jne     .unusable
Line 57... Line 57...
57
 
57
 
58
        test    eax, 0xFFF
58
        test    eax, PAGE_SIZE-1
59
        jz      @f
59
        jz      @f
60
        neg     eax
60
        neg     eax
61
        and     eax, 0xFFF
61
        and     eax, PAGE_SIZE-1
62
        add     [edi + e820entry.addr.lo], eax
62
        add     [edi + e820entry.addr.lo], eax
63
        adc     [edi + e820entry.addr.hi], 0
63
        adc     [edi + e820entry.addr.hi], 0
64
        sub     [edi + e820entry.size.lo], eax
64
        sub     [edi + e820entry.size.lo], eax
65
        sbb     [edi + e820entry.size.hi], 0
65
        sbb     [edi + e820entry.size.hi], 0
66
        jc      .unusable
66
        jc      .unusable
67
@@:
67
@@:
68
        and     [edi + e820entry.size.lo], not 0xFFF
68
        and     [edi + e820entry.size.lo], -PAGE_SIZE
69
        jz      .unusable
69
        jz      .unusable
70
; ignore memory after 4 GiB
70
; ignore memory after 4 GiB
71
        cmp     [edi + e820entry.addr.hi], 0
71
        cmp     [edi + e820entry.addr.hi], 0
72
        jnz     .unusable
72
        jnz     .unusable
73
        mov     eax, [edi + e820entry.addr.lo]
73
        mov     eax, [edi + e820entry.addr.lo]
74
        cmp     [edi + e820entry.size.hi], 0
74
        cmp     [edi + e820entry.size.hi], 0
75
        jnz     .overflow
75
        jnz     .overflow
76
        add     eax, [edi + e820entry.size.lo]
76
        add     eax, [edi + e820entry.size.lo]
77
        jnc     @f
77
        jnc     @f
78
.overflow:
78
.overflow:
79
        mov     eax, 0xFFFFF000
79
        mov     eax, -PAGE_SIZE
80
@@:
80
@@:
81
        cmp     edx, eax
81
        cmp     edx, eax
82
        jae     @f
82
        jae     @f
83
        mov     edx, eax
83
        mov     edx, eax
Line 101... Line 101...
101
        add     edx, 31
101
        add     edx, 31
102
        and     edx, not 31
102
        and     edx, not 31
103
        shr     edx, 3
103
        shr     edx, 3
104
        mov     [pg_data.pagemap_size - OS_BASE], edx
104
        mov     [pg_data.pagemap_size - OS_BASE], edx
Line 105... Line 105...
105
 
105
 
106
        add     edx, (sys_pgmap - OS_BASE)+4095
106
        add     edx, (sys_pgmap - OS_BASE)+PAGE_SIZE-1
107
        and     edx, not 4095
107
        and     edx, -PAGE_SIZE
Line 108... Line 108...
108
        mov     [tmp_page_tabs], edx
108
        mov     [tmp_page_tabs], edx
109
 
109
 
110
        mov     edx, esi
110
        mov     edx, esi
111
        and     edx, -1024
111
        and     edx, -1024
112
        cmp     edx, (OS_BASE/4096)
112
        cmp     edx, (OS_BASE/PAGE_SIZE)
113
        jbe     @F
113
        jbe     @F
114
        mov     edx, (OS_BASE/4096)
114
        mov     edx, (OS_BASE/PAGE_SIZE)
115
        jmp     .set
115
        jmp     .set
116
@@:
116
@@:
117
        cmp     edx, (HEAP_BASE - OS_BASE + HEAP_MIN_SIZE)/4096
117
        cmp     edx, (HEAP_BASE - OS_BASE + HEAP_MIN_SIZE)/PAGE_SIZE
118
        jae     .set
118
        jae     .set
119
        mov     edx, (HEAP_BASE - OS_BASE + HEAP_MIN_SIZE)/4096
119
        mov     edx, (HEAP_BASE - OS_BASE + HEAP_MIN_SIZE)/PAGE_SIZE
120
.set:
120
.set:
121
        mov     [pg_data.kernel_pages - OS_BASE], edx
121
        mov     [pg_data.kernel_pages - OS_BASE], edx
Line 122... Line 122...
122
        shr     edx, 10
122
        shr     edx, 10
123
        mov     [pg_data.kernel_tables - OS_BASE], edx
123
        mov     [pg_data.kernel_tables - OS_BASE], edx
124
 
124
 
125
        xor     eax, eax
125
        xor     eax, eax
126
        mov     edi, sys_proc - OS_BASE
126
        mov     edi, sys_proc - OS_BASE
Line 127... Line 127...
127
        mov     ecx, 8192/4
127
        mov     ecx, 2*PAGE_SIZE/4
128
        cld
128
        cld
129
        rep stosd
129
        rep stosd
Line 130... Line 130...
130
 
130
 
131
        mov     edx, (sys_proc - OS_BASE + PROC.pdt_0) + 0x800; (OS_BASE shr 20)
131
        mov     edx, (sys_proc - OS_BASE + PROC.pdt_0) + (OS_BASE shr 20)
Line 149... Line 149...
149
        shr     ecx, 12
149
        shr     ecx, 12
150
.map_low:
150
.map_low:
151
        mov     edi, [tmp_page_tabs]
151
        mov     edi, [tmp_page_tabs]
152
@@:                                   ;
152
@@:                                   ;
153
        stosd
153
        stosd
154
        add     eax, 0x1000
154
        add     eax, PAGE_SIZE
155
        dec     ecx
155
        dec     ecx
156
        jnz     @B
156
        jnz     @B
Line 157... Line 157...
157
 
157
 
158
.map_kernel_heap:
158
.map_kernel_heap:
Line 166... Line 166...
166
        or      eax, PG_SWR
166
        or      eax, PG_SWR
167
        mov     edi, edx
167
        mov     edi, edx
Line 168... Line 168...
168
 
168
 
169
.map_kernel_tabs:
169
.map_kernel_tabs:
170
        stosd
170
        stosd
171
        add     eax, 0x1000
171
        add     eax, PAGE_SIZE
172
        dec     ecx
172
        dec     ecx
Line 173... Line 173...
173
        jnz     .map_kernel_tabs
173
        jnz     .map_kernel_tabs