2014-11-02 19:07:10 +00:00
|
|
|
|
E87_PROG segment para public 'CODE' use16
|
|
|
|
|
assume cs:E87_PROG
|
|
|
|
|
assume es:nothing, ss:nothing, ds:_STACK, fs:nothing, gs:nothing
|
2014-11-21 10:24:47 +00:00
|
|
|
|
option noemulator
|
2014-11-02 19:07:10 +00:00
|
|
|
|
|
|
|
|
|
e87trap_10070:
|
|
|
|
|
pop di
|
|
|
|
|
pop es
|
|
|
|
|
pop dx
|
|
|
|
|
pop cx
|
|
|
|
|
pop bx
|
|
|
|
|
pop si
|
|
|
|
|
pop ds
|
|
|
|
|
clc
|
|
|
|
|
retf
|
|
|
|
|
|
|
|
|
|
e87trap_10079:
|
|
|
|
|
mov al, ds:__emu+2
|
|
|
|
|
mov ah, ds:__emu
|
|
|
|
|
db 0CDh, 037h, 0E2h ; Hack (we need an emulated FNCLEX here)
|
|
|
|
|
test ah, 80h
|
|
|
|
|
jz short e87trap_10070
|
|
|
|
|
not al
|
|
|
|
|
and al, ah
|
|
|
|
|
jmp e87trap_101C5
|
|
|
|
|
|
|
|
|
|
e87trap_1008F:
|
|
|
|
|
les di, [si+6]
|
|
|
|
|
test bl, 8
|
|
|
|
|
jnz short e87trap_1009F
|
|
|
|
|
mov bx, es
|
|
|
|
|
and bx, 0F000h
|
|
|
|
|
mov es, bx
|
|
|
|
|
assume es:nothing
|
|
|
|
|
|
|
|
|
|
e87trap_1009F:
|
|
|
|
|
test byte ptr es:[di], 80h
|
|
|
|
|
jnz short e87trap_100A6
|
|
|
|
|
inc di
|
|
|
|
|
|
|
|
|
|
e87trap_100A6:
|
|
|
|
|
mov bx, es:[di]
|
|
|
|
|
xchg bh, bl
|
|
|
|
|
jmp short e87trap_100F6
|
|
|
|
|
; END OF FUNCTION CHUNK FOR e087_Trap
|
|
|
|
|
jmp short e87trap_10111
|
|
|
|
|
nop
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public e087_Trap
|
|
|
|
|
e087_Trap proc far
|
|
|
|
|
|
|
|
|
|
; FUNCTION CHUNK AT 0000 SIZE 0000003D BYTES
|
|
|
|
|
|
|
|
|
|
push ds
|
|
|
|
|
push si
|
|
|
|
|
push bx
|
|
|
|
|
push cx
|
|
|
|
|
push dx
|
|
|
|
|
push es
|
|
|
|
|
push di
|
|
|
|
|
mov ds, ax
|
|
|
|
|
mov al, ds:__emu+6
|
|
|
|
|
or al, al
|
|
|
|
|
mov bx, ax
|
|
|
|
|
jz short e87trap_10079
|
|
|
|
|
mov si, (offset __emu+13h)
|
|
|
|
|
fnstenv byte ptr [si]
|
|
|
|
|
wait
|
|
|
|
|
mov ax, [si+2]
|
|
|
|
|
test al, 80h
|
|
|
|
|
jz short e87trap_10070
|
|
|
|
|
fclex
|
|
|
|
|
mov dx, ax
|
|
|
|
|
mov al, [si]
|
|
|
|
|
mov dh, dl
|
|
|
|
|
or al, 40h
|
|
|
|
|
and dl, al
|
|
|
|
|
and dl, 7Fh
|
|
|
|
|
mov [si+2], dl
|
|
|
|
|
wait
|
|
|
|
|
fldenv byte ptr [si]
|
|
|
|
|
not al
|
|
|
|
|
and al, dh
|
|
|
|
|
or bx, word ptr ds:__emu+7
|
|
|
|
|
cmp bl, 3
|
|
|
|
|
jge short e87trap_1008F
|
|
|
|
|
mov bx, [si+8]
|
|
|
|
|
|
|
|
|
|
e87trap_100F6:
|
|
|
|
|
and bh, 7
|
|
|
|
|
mov dh, bl
|
|
|
|
|
and dh, 0C0h
|
|
|
|
|
cmp dh, 0C0h ; '<27>'
|
|
|
|
|
jz short e87trap_10106
|
|
|
|
|
and bl, 38h
|
|
|
|
|
|
|
|
|
|
e87trap_10106:
|
|
|
|
|
wait
|
|
|
|
|
sti
|
|
|
|
|
test al, 1
|
|
|
|
|
jz short e87trap_10111
|
|
|
|
|
mov al, 40h ; '@'
|
|
|
|
|
jmp e87trap_101C5
|
|
|
|
|
|
|
|
|
|
e87trap_10111:
|
|
|
|
|
test al, 2
|
|
|
|
|
jz short e87trap_1016A
|
|
|
|
|
mov cx, 8
|
|
|
|
|
|
|
|
|
|
e87trap_10118:
|
|
|
|
|
call e87trap_101D8
|
|
|
|
|
wait
|
|
|
|
|
fincstp
|
|
|
|
|
loop e87trap_10118
|
|
|
|
|
mov ax, bx
|
|
|
|
|
shr ax, 1
|
|
|
|
|
and al, 9Ch
|
|
|
|
|
cmp al, 80h ; '<27>'
|
|
|
|
|
jz short e87trap_10132
|
|
|
|
|
cmp al, 94h ; '<27>'
|
|
|
|
|
jz short e87trap_10132
|
|
|
|
|
and al, 98h
|
|
|
|
|
cmp al, 8
|
|
|
|
|
|
|
|
|
|
e87trap_10132:
|
|
|
|
|
jz short e87trap_10168
|
|
|
|
|
fnstcw word ptr ds:__emu+31h
|
|
|
|
|
wait
|
|
|
|
|
or ds:__emu+31h, 2
|
|
|
|
|
wait
|
|
|
|
|
fldcw word ptr ds:__emu+31h
|
|
|
|
|
les di, [si+0Ah]
|
|
|
|
|
assume es:nothing
|
|
|
|
|
cmp bx, 30h ; '0'
|
|
|
|
|
jnz short e87trap_10151
|
|
|
|
|
wait
|
|
|
|
|
fld dword ptr es:[di]
|
|
|
|
|
jmp short e87trap_1015B
|
|
|
|
|
|
|
|
|
|
e87trap_10151:
|
|
|
|
|
cmp bx, 430h
|
|
|
|
|
jnz short e87trap_10161
|
|
|
|
|
wait
|
|
|
|
|
fld qword ptr es:[di]
|
|
|
|
|
|
|
|
|
|
e87trap_1015B:
|
|
|
|
|
call e87trap_101D8
|
|
|
|
|
mov bx, 0DEF9h
|
|
|
|
|
|
|
|
|
|
e87trap_10161:
|
|
|
|
|
wait
|
|
|
|
|
mov di, word ptr ds:__emu+0Dh
|
|
|
|
|
jmp short e87trap_1019B
|
|
|
|
|
|
|
|
|
|
e87trap_10168:
|
|
|
|
|
jmp short e87trap_101B3
|
|
|
|
|
|
|
|
|
|
e87trap_1016A:
|
|
|
|
|
mov ah, ds:__emu+2
|
|
|
|
|
not ah
|
|
|
|
|
and ah, al
|
|
|
|
|
and ah, 7Fh
|
|
|
|
|
jnz short e87trap_101C5
|
|
|
|
|
test al, 5
|
|
|
|
|
jnz short e87trap_10189
|
|
|
|
|
test al, 18h
|
|
|
|
|
jz short e87trap_101B7
|
|
|
|
|
mov ax, bx
|
|
|
|
|
shr ax, 1
|
|
|
|
|
and al, 0E8h
|
|
|
|
|
cmp al, 88h ; '<27>'
|
|
|
|
|
jnz short e87trap_101B7
|
|
|
|
|
|
|
|
|
|
e87trap_10189:
|
|
|
|
|
fnstcw word ptr ds:__emu+31h
|
|
|
|
|
wait
|
|
|
|
|
mov ax, word ptr ds:__emu+31h
|
|
|
|
|
or ds:__emu+31h, 3Fh
|
|
|
|
|
wait
|
|
|
|
|
fldcw word ptr ds:__emu+31h
|
|
|
|
|
|
|
|
|
|
e87trap_1019B:
|
|
|
|
|
push cs
|
|
|
|
|
call near ptr e87trap_10225
|
|
|
|
|
add sp, 0Ah
|
|
|
|
|
fstsw word ptr ds:__emu+31h
|
|
|
|
|
fclex
|
|
|
|
|
mov ax, word ptr ds:__emu+31h
|
|
|
|
|
and al, 3Fh
|
|
|
|
|
or ds:__emu+25h, al
|
|
|
|
|
|
|
|
|
|
e87trap_101B3:
|
|
|
|
|
wait
|
|
|
|
|
fldcw word ptr [si]
|
|
|
|
|
clc
|
|
|
|
|
|
|
|
|
|
e87trap_101B7:
|
|
|
|
|
pop di
|
|
|
|
|
pop es
|
|
|
|
|
pop dx
|
|
|
|
|
pop cx
|
|
|
|
|
pop bx
|
|
|
|
|
pop si
|
|
|
|
|
pop ds
|
|
|
|
|
jb short e87trap_101C4
|
|
|
|
|
pop ax
|
|
|
|
|
pop ax
|
|
|
|
|
pop ax
|
|
|
|
|
iret
|
|
|
|
|
|
|
|
|
|
e87trap_101C4:
|
|
|
|
|
retf
|
|
|
|
|
|
|
|
|
|
e87trap_101C5:
|
|
|
|
|
xor dx, dx
|
|
|
|
|
mov bx, ax
|
|
|
|
|
|
|
|
|
|
e87trap_101C9:
|
|
|
|
|
inc dx
|
|
|
|
|
shr bx, 1
|
|
|
|
|
jnb short e87trap_101C9
|
|
|
|
|
mov word ptr ds:__emu+9, dx
|
|
|
|
|
mov ax, (offset __emu+9)
|
|
|
|
|
stc
|
|
|
|
|
jmp short e87trap_101B7
|
|
|
|
|
e087_Trap endp ; sp-analysis failed
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
e87trap_101D8 proc near
|
|
|
|
|
wait
|
|
|
|
|
fxam
|
|
|
|
|
fstsw word ptr ds:__emu+31h
|
|
|
|
|
wait
|
|
|
|
|
mov ah, ds:__emu+32h
|
|
|
|
|
sahf
|
|
|
|
|
jnb short e87trap_101EB
|
|
|
|
|
jnz short e87trap_101ED
|
|
|
|
|
retn
|
|
|
|
|
|
|
|
|
|
e87trap_101EB:
|
|
|
|
|
jz short e87trap_101F2
|
|
|
|
|
|
|
|
|
|
e87trap_101ED:
|
|
|
|
|
jb short e87trap_101F1
|
|
|
|
|
jnp short e87trap_101F9
|
|
|
|
|
|
|
|
|
|
e87trap_101F1:
|
|
|
|
|
retn
|
|
|
|
|
|
|
|
|
|
e87trap_101F2:
|
|
|
|
|
wait
|
|
|
|
|
fstp st
|
|
|
|
|
wait
|
|
|
|
|
fldz
|
|
|
|
|
retn
|
|
|
|
|
|
|
|
|
|
e87trap_101F9:
|
|
|
|
|
wait
|
|
|
|
|
fstp tbyte ptr ds:__emu+27h
|
|
|
|
|
wait
|
|
|
|
|
fild qword ptr ds:__emu+27h
|
|
|
|
|
mov ax, word ptr ds:__emu+2Fh
|
|
|
|
|
mov dx, ax
|
|
|
|
|
and dh, 80h
|
|
|
|
|
wait
|
|
|
|
|
fstp tbyte ptr ds:__emu+27h
|
|
|
|
|
xor ah, dh
|
|
|
|
|
wait
|
|
|
|
|
add ax, word ptr ds:__emu+2Fh
|
|
|
|
|
sub ax, 403Eh
|
|
|
|
|
xor ah, dh
|
|
|
|
|
mov word ptr ds:__emu+2Fh, ax
|
|
|
|
|
wait
|
|
|
|
|
fld tbyte ptr ds:__emu+27h
|
|
|
|
|
retn
|
|
|
|
|
e87trap_101D8 endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
e87trap_10225 proc far
|
|
|
|
|
mov word ptr ds:__emu+0Dh, di
|
|
|
|
|
mov dx, 0EA90h
|
|
|
|
|
push dx
|
|
|
|
|
mov dx, bx
|
|
|
|
|
and bl, 0C0h
|
|
|
|
|
cmp bl, 0C0h ; '<27>'
|
|
|
|
|
jz short e87trap_1023A
|
|
|
|
|
or dl, 7
|
|
|
|
|
|
|
|
|
|
e87trap_1023A:
|
|
|
|
|
or dh, 0D8h
|
|
|
|
|
xchg dh, dl
|
|
|
|
|
push dx
|
|
|
|
|
mov dx, 269Bh
|
|
|
|
|
push dx
|
|
|
|
|
mov dx, ss
|
|
|
|
|
xor dx, word ptr ds:__emu+7
|
|
|
|
|
push dx
|
|
|
|
|
mov dx, sp
|
|
|
|
|
add dx, 2
|
|
|
|
|
push dx
|
|
|
|
|
les bx, [si+0Ah]
|
|
|
|
|
retf
|
|
|
|
|
e87trap_10225 endp ; sp-analysis failed
|
|
|
|
|
|
|
|
|
|
db 11 dup(0)
|
|
|
|
|
|
|
|
|
|
E87_PROG ends
|