# HG changeset patch # User Pascal Bellard # Date 1490972330 -7200 # Node ID 96b6a30a3f9a1769539dd1f12ad23213004e56d5 # Parent 8fab00f1f6beba98502f196556d2bd6fd9ac4162 linld: fix hook_int15_88 diff -r 8fab00f1f6be -r 96b6a30a3f9a linld/stuff/src/MEMTOP.ASM --- a/linld/stuff/src/MEMTOP.ASM Fri Mar 31 12:51:11 2017 +0200 +++ b/linld/stuff/src/MEMTOP.ASM Fri Mar 31 16:58:50 2017 +0200 @@ -173,38 +173,44 @@ ifndef xmm_hook mov ax,4300h - ifdef NO386 cwd - endif + mov es,dx int 2fh cmp al,80h ; 80h = XMS driver installed je @@skip endif ifndef NO386 + ifdef xmm_hook push 0 pop es - mov bx,15*4 - mov eax,[bx] + endif + push cs + push offset int15_88 + pop eax + xchg eax,[es:15*4] mov [saved15],eax else - mov es,dx - mov bx,15*4 - mov ax,[bx] + ifdef xmm_hook + xor ax,ax + mov es,ax + endif + mov ax,offset int15_88 + xchg ax,[es:15*4] mov [word saved15],ax - mov ax,[bx+2] + mov ax,cs + xchg ax,[es:15*4+2] mov [word saved15+2],ax endif - mov [word bx],offset int15_88 - mov [bx+2],cs @@skip: ret int15_88: cmp ah,88h je @@do88 +@@jmp_saved15: jmp [saved15] @@do88: pushf - call [saved15] + call @@jmp_saved15 test ax,ax jnz @@iret diff -r 8fab00f1f6be -r 96b6a30a3f9a linld/stuff/src/XMM.ASM --- a/linld/stuff/src/XMM.ASM Fri Mar 31 12:51:11 2017 +0200 +++ b/linld/stuff/src/XMM.ASM Fri Mar 31 16:58:50 2017 +0200 @@ -43,11 +43,13 @@ global xmm_driver:near proc xmm_driver near + push si + mov si,offset xmm_handler ifndef NO386 - cmp [xmm_handler],0 + cmp [si],0 else - mov ax,[word xmm_handler] - or ax,[word xmm_handler+2] + mov ax,[word si] + or ax,[word si+2] endif jne @@gotit @@ -65,9 +67,10 @@ xchg ax,cx ; restore cmd push es push bx - pop [xmm_handler] + pop [dword si] @@gotit: - call [xmm_handler] + call [dword si] + pop si ret xmm_fail: xor ax,ax