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:
Evgeny Grechnikov (Diamond) 2008-02-09 21:30:06 +00:00
parent 9ad47e87ac
commit 6e65ab7c45
2 changed files with 8 additions and 8 deletions

View File

@ -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

View File

@ -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