166,9 → 166,7 |
or edx, [flags] |
@@: |
mov [page_tabs+eax*4], edx |
; push eax |
; invlpg [ebx] |
; pop eax |
invlpg [ebx] |
inc eax |
add ebx, edi |
add edx, edi |
186,7 → 184,7 |
|
; param |
; eax= page base + page flags |
; ebx= linear address |
; ebx= liear address |
; ecx= count |
|
align 4 |
204,9 → 202,7 |
shr ebx, 12 |
@@: |
mov [page_tabs+ebx*4], eax |
; push eax |
; invlpg [edi] |
; pop eax |
invlpg [edi] |
add edi, edx |
add eax, edx |
inc ebx |
267,33 → 263,7 |
popad |
ret |
|
; param |
; eax= base |
; ecx= count |
|
align 4 |
unmap_pages: |
|
push edi |
|
mov edi, eax |
mov edx, eax |
|
shr edi, 10 |
add edi, page_tabs |
|
xor eax, eax |
@@: |
stosd |
invlpg [edx] |
add edx, 0x1000 |
loop @b |
|
pop edi |
ret |
|
|
align 4 |
proc map_page_table stdcall, lin_addr:dword, phis_addr:dword |
push ebx |
mov ebx, [lin_addr] |
1116,27 → 1086,6 |
ret |
|
align 4 |
proc load_pe_driver stdcall, file:dword |
|
stdcall load_PE, [file] |
test eax, eax |
jz .fail |
|
mov esi, eax |
stdcall eax, DRV_ENTRY |
test eax, eax |
jz .fail |
|
mov [eax+SRV.entry], esi |
ret |
|
.fail: |
xor eax, eax |
ret |
endp |
|
|
align 4 |
proc init_mtrr |
|
cmp [BOOT_VAR+0x901c],byte 2 |
1210,6 → 1159,8 |
ret |
endp |
|
|
|
align 4 |
proc stall stdcall, delay:dword |
push ecx |
1277,6 → 1228,8 |
@@: |
mov [page_tabs+edi], eax |
mov [page_tabs+edi+edx], eax |
invlpg [ebx] |
invlpg [ebx+esi] |
add eax, 0x1000 |
add ebx, 0x1000 |
add edi, 4 |
1295,4 → 1248,14 |
ret |
endp |
|
if 0 |
push eax |
push edx |
mov edx, 0x400 ;bochs |
mov al,0xff ;bochs |
out dx, al ;bochs |
pop edx |
pop eax |
end if |
|
|