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 |