forked from KolibriOS/kolibrios
V86 improvements
git-svn-id: svn://kolibrios.org@770 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
07985443ea
commit
b9e5a9d227
@ -910,7 +910,8 @@ int13_call:
|
|||||||
popad
|
popad
|
||||||
@@:
|
@@:
|
||||||
mov word [ebx+v86_regs.esi], 510h
|
mov word [ebx+v86_regs.esi], 510h
|
||||||
mov word [ebx+v86_regs.esp], 900h
|
mov word [ebx+v86_regs.ss], 9000h
|
||||||
|
mov word [ebx+v86_regs.esp], 0C000h
|
||||||
mov word [ebx+v86_regs.eip], 500h
|
mov word [ebx+v86_regs.eip], 500h
|
||||||
mov [ebx+v86_regs.eflags], 20200h
|
mov [ebx+v86_regs.eflags], 20200h
|
||||||
mov esi, [sys_v86_machine]
|
mov esi, [sys_v86_machine]
|
||||||
|
@ -216,6 +216,8 @@ init_sys_v86:
|
|||||||
mov byte [BOOT_VAR + 0x505], 0xF4
|
mov byte [BOOT_VAR + 0x505], 0xF4
|
||||||
mov esi, eax
|
mov esi, eax
|
||||||
mov ebx, [eax+V86_machine.pagedir]
|
mov ebx, [eax+V86_machine.pagedir]
|
||||||
|
mov dword [ebx+0x9B*4+0x1000], 0x9B000 or 111b
|
||||||
|
mov dword [ebx+0x9B*4+0x1800], OS_BASE + 0x9B000
|
||||||
mov dword [ebx+0x9C*4+0x1000], 0x9C000 or 111b
|
mov dword [ebx+0x9C*4+0x1000], 0x9C000 or 111b
|
||||||
mov dword [ebx+0x9C*4+0x1800], OS_BASE + 0x9C000
|
mov dword [ebx+0x9C*4+0x1800], OS_BASE + 0x9C000
|
||||||
mov dword [ebx+0x9D*4+0x1000], 0x9D000 or 111b
|
mov dword [ebx+0x9D*4+0x1000], 0x9D000 or 111b
|
||||||
@ -549,6 +551,38 @@ v86_exc_c:
|
|||||||
inc word [esp+v86_regs.eip]
|
inc word [esp+v86_regs.eip]
|
||||||
popad
|
popad
|
||||||
iretd
|
iretd
|
||||||
|
.handle_pushfd:
|
||||||
|
cmp word [esp+v86_regs.esp], 4
|
||||||
|
jae @f
|
||||||
|
mov bl, 12 ; #SS exception
|
||||||
|
jmp .nogp
|
||||||
|
@@:
|
||||||
|
movzx edx, word [esp+v86_regs.ss]
|
||||||
|
shl edx, 4
|
||||||
|
movzx eax, word [esp+v86_regs.esp]
|
||||||
|
sub eax, 4
|
||||||
|
add edx, eax
|
||||||
|
mov eax, edx
|
||||||
|
mov esi, [esp+v86_regs.size+10h+4]
|
||||||
|
call v86_get_lin_addr
|
||||||
|
cmp eax, 0x1000
|
||||||
|
jae @f
|
||||||
|
mov bl, 14 ; #PF exception
|
||||||
|
jmp .nogp
|
||||||
|
@@:
|
||||||
|
lea eax, [edx+3]
|
||||||
|
call v86_get_lin_addr
|
||||||
|
cmp eax, 0x1000
|
||||||
|
jae @f
|
||||||
|
mov bl, 14 ; #PF exception
|
||||||
|
jmp .nogp
|
||||||
|
@@:
|
||||||
|
sub word [esp+v86_regs.esp], 4
|
||||||
|
movzx eax, word [esp+v86_regs.eflags]
|
||||||
|
mov [edx], eax
|
||||||
|
add word [esp+v86_regs.eip], 2
|
||||||
|
popad
|
||||||
|
iretd
|
||||||
.handle_popf:
|
.handle_popf:
|
||||||
cmp word [esp+v86_regs.esp], 0xFFFF
|
cmp word [esp+v86_regs.esp], 0xFFFF
|
||||||
jnz @f
|
jnz @f
|
||||||
@ -580,6 +614,37 @@ v86_exc_c:
|
|||||||
inc word [esp+v86_regs.eip]
|
inc word [esp+v86_regs.eip]
|
||||||
popad
|
popad
|
||||||
iretd
|
iretd
|
||||||
|
.handle_popfd:
|
||||||
|
cmp word [esp+v86_regs.esp], 0x10000 - 4
|
||||||
|
jbe @f
|
||||||
|
mov bl, 12
|
||||||
|
jmp .nogp
|
||||||
|
@@:
|
||||||
|
movzx edx, word [esp+v86_regs.ss]
|
||||||
|
shl edx, 4
|
||||||
|
movzx eax, word [esp+v86_regs.esp]
|
||||||
|
add edx, eax
|
||||||
|
mov eax, edx
|
||||||
|
mov esi, [esp+v86_regs.size+10h+4]
|
||||||
|
call v86_get_lin_addr
|
||||||
|
cmp eax, 0x1000
|
||||||
|
jae @f
|
||||||
|
mov bl, 14
|
||||||
|
jmp .nogp
|
||||||
|
@@:
|
||||||
|
lea eax, [edx+3]
|
||||||
|
call v86_get_lin_addr
|
||||||
|
cmp eax, 0x1000
|
||||||
|
jae @f
|
||||||
|
mov bl, 14
|
||||||
|
jmp .nogp
|
||||||
|
@@:
|
||||||
|
mov eax, [edx]
|
||||||
|
mov word [esp+v86_regs.eflags], ax
|
||||||
|
add word [esp+v86_regs.esp], 4
|
||||||
|
add word [esp+v86_regs.eip], 2
|
||||||
|
popad
|
||||||
|
iretd
|
||||||
.handle_cli:
|
.handle_cli:
|
||||||
and byte [esp+v86_regs.eflags+1], not 2
|
and byte [esp+v86_regs.eflags+1], not 2
|
||||||
inc word [esp+v86_regs.eip]
|
inc word [esp+v86_regs.eip]
|
||||||
@ -616,6 +681,10 @@ v86_exc_c:
|
|||||||
cmp word [esp+v86_regs.eip], 0xFFFF
|
cmp word [esp+v86_regs.eip], 0xFFFF
|
||||||
jae .nogp
|
jae .nogp
|
||||||
lodsb
|
lodsb
|
||||||
|
cmp al, 0x9C
|
||||||
|
jz .handle_pushfd
|
||||||
|
cmp al, 0x9D
|
||||||
|
jz .handle_popfd
|
||||||
cmp al, 0xEF
|
cmp al, 0xEF
|
||||||
jz .handle_out_dword
|
jz .handle_out_dword
|
||||||
cmp al, 0xED
|
cmp al, 0xED
|
||||||
|
Loading…
Reference in New Issue
Block a user