166,7 → 166,9 |
or edx, [flags] |
@@: |
mov [page_tabs+eax*4], edx |
invlpg [ebx] |
; push eax |
; invlpg [ebx] |
; pop eax |
inc eax |
add ebx, edi |
add edx, edi |
184,7 → 186,7 |
|
; param |
; eax= page base + page flags |
; ebx= liear address |
; ebx= linear address |
; ecx= count |
|
align 4 |
202,7 → 204,9 |
shr ebx, 12 |
@@: |
mov [page_tabs+ebx*4], eax |
invlpg [edi] |
; push eax |
; invlpg [edi] |
; pop eax |
add edi, edx |
add eax, edx |
inc ebx |
263,7 → 267,33 |
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] |
1086,6 → 1116,27 |
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 |
1159,8 → 1210,6 |
ret |
endp |
|
|
|
align 4 |
proc stall stdcall, delay:dword |
push ecx |
1228,8 → 1277,6 |
@@: |
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 |
1248,14 → 1295,4 |
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 |
|
|