forked from KolibriOS/kolibrios
fixed bug in V86-mode handling of IRQ>=8
git-svn-id: svn://kolibrios.org@724 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
9ad47e87ac
commit
6e65ab7c45
@ -21,7 +21,7 @@ novesa db "Display: EGA/CGA",13,10,0
|
|||||||
s_vesa db "Version of VESA: "
|
s_vesa db "Version of VESA: "
|
||||||
.ver db "?.?",13,10,0
|
.ver db "?.?",13,10,0
|
||||||
|
|
||||||
gr_mode db "Select a vedeomode: ",13,10,0
|
gr_mode db "Select a videomode: ",13,10,0
|
||||||
;s_bpp db 13,10,186," ƒ«ã¡¨ 梥â : "
|
;s_bpp db 13,10,186," ƒ«ã¡¨ 梥â : "
|
||||||
; .bpp dw "??"
|
; .bpp dw "??"
|
||||||
; db 13,10,0
|
; db 13,10,0
|
||||||
|
@ -47,7 +47,7 @@ v86_create:
|
|||||||
; first half (0x800 bytes) is page table for addresses 0 - 0x100000,
|
; first half (0x800 bytes) is page table for addresses 0 - 0x100000,
|
||||||
; second half is for V86-to-linear translation.
|
; second half is for V86-to-linear translation.
|
||||||
; Third and fourth are for I/O permission map.
|
; Third and fourth are for I/O permission map.
|
||||||
push 8000h ;page block less 8Kb are discontinuous
|
push 8000h ; blocks less than 8 pages are discontinuous
|
||||||
call kernel_alloc
|
call kernel_alloc
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz .fail2
|
jz .fail2
|
||||||
@ -170,7 +170,7 @@ v86_set_page:
|
|||||||
; esi=handle
|
; esi=handle
|
||||||
; out: eax=V86 address, para-aligned (0x10 multiple)
|
; out: eax=V86 address, para-aligned (0x10 multiple)
|
||||||
; destroys: nothing
|
; destroys: nothing
|
||||||
; ᠭ!!!
|
; ¥¤®¯¨á !!!
|
||||||
;v86_alloc:
|
;v86_alloc:
|
||||||
; push ebx ecx edx edi
|
; push ebx ecx edx edi
|
||||||
; lea ebx, [esi+V86_machine.mutex]
|
; lea ebx, [esi+V86_machine.mutex]
|
||||||
@ -190,7 +190,7 @@ v86_set_page:
|
|||||||
; add edx, ecx
|
; add edx, ecx
|
||||||
; cmp dword [edx], 0 ; free block?
|
; cmp dword [edx], 0 ; free block?
|
||||||
; jnz .n
|
; jnz .n
|
||||||
; cmp dword [edx+4],
|
; cmp dword [edx+4],
|
||||||
; and [esi+V86_machine.mutex], 0
|
; and [esi+V86_machine.mutex], 0
|
||||||
; pop edi edx ecx ebx
|
; pop edi edx ecx ebx
|
||||||
; ret
|
; ret
|
||||||
@ -390,8 +390,8 @@ v86_exc_c:
|
|||||||
jnz .nogp
|
jnz .nogp
|
||||||
; Otherwise we can safely access byte at CS:IP
|
; Otherwise we can safely access byte at CS:IP
|
||||||
; (because it is #GP, not #PF handler)
|
; (because it is #GP, not #PF handler)
|
||||||
; 嫮 ᪫祭 ⮫쪮 - ⥭ ⮢ ,
|
; …᫨ ¡ë ¬ë ¬®£«¨ áå«®¯®â âì ¨áª«î票¥ ⮫쪮 ¨§-§ çâ¥¨ï ¡ ©â®¢ ª®¤ ,
|
||||||
; 㦥 嫮⠫ 뫮 #GP
|
; ¬ë ¡ë ¥£® 㦥 áå«®¯®â «¨ ¨ íâ® ¡ë«® ¡ë ¥ #GP
|
||||||
movzx esi, word [esp+v86_regs.cs]
|
movzx esi, word [esp+v86_regs.cs]
|
||||||
shl esi, 4
|
shl esi, 4
|
||||||
add esi, [esp+v86_regs.eip]
|
add esi, [esp+v86_regs.eip]
|
||||||
@ -798,7 +798,7 @@ v86_irq2:
|
|||||||
lea eax, [edi+8]
|
lea eax, [edi+8]
|
||||||
cmp al, 10h
|
cmp al, 10h
|
||||||
jb @f
|
jb @f
|
||||||
add al, 70h-8
|
add al, 60h
|
||||||
@@:
|
@@:
|
||||||
jmp v86_exc_c.simulate_int
|
jmp v86_exc_c.simulate_int
|
||||||
.notcurrent:
|
.notcurrent:
|
||||||
@ -854,7 +854,7 @@ v86_irq2:
|
|||||||
lea eax, [edi+8]
|
lea eax, [edi+8]
|
||||||
cmp al, 10h
|
cmp al, 10h
|
||||||
jb @f
|
jb @f
|
||||||
add al, 70h-8
|
add al, 60h
|
||||||
@@:
|
@@:
|
||||||
mov cx, [eax*4]
|
mov cx, [eax*4]
|
||||||
mov word [esi-v86_regs.size+v86_regs.eip], cx
|
mov word [esi-v86_regs.size+v86_regs.eip], cx
|
||||||
|
Loading…
Reference in New Issue
Block a user