mirror of https://github.com/nmlgc/ReC98.git
331 lines
5.8 KiB
NASM
331 lines
5.8 KiB
NASM
; terminate(void)
|
||
public @terminate$qv
|
||
@terminate$qv proc far
|
||
push si
|
||
push di
|
||
nopcall _abort
|
||
pop di
|
||
pop si
|
||
retf
|
||
@terminate$qv endp
|
||
|
||
|
||
; set_terminate(void (*)(void))
|
||
public @set_terminate$qnqv$v
|
||
@set_terminate$qnqv$v proc far
|
||
|
||
@@var_4 = word ptr -4
|
||
@@var_2 = word ptr -2
|
||
@@arg_0 = word ptr 6
|
||
@@arg_2 = word ptr 8
|
||
|
||
push bp
|
||
mov bp, sp
|
||
sub sp, 4
|
||
push si
|
||
push di
|
||
les bx, ss:16h
|
||
mov dx, es:[bx+0Ch]
|
||
mov ax, es:[bx+0Ah]
|
||
mov [bp+@@var_2], dx
|
||
mov [bp+@@var_4], ax
|
||
mov ax, [bp+@@arg_0]
|
||
or ax, [bp+@@arg_2]
|
||
jz short xxv_10060
|
||
les bx, ss:16h
|
||
mov dx, [bp+@@arg_2]
|
||
mov ax, [bp+@@arg_0]
|
||
mov es:[bx+0Ch], dx
|
||
mov es:[bx+0Ah], ax
|
||
|
||
xxv_10060:
|
||
mov dx, [bp+@@var_2]
|
||
mov ax, [bp+@@var_4]
|
||
pop di
|
||
pop si
|
||
mov sp, bp
|
||
pop bp
|
||
retf
|
||
@set_terminate$qnqv$v endp
|
||
|
||
xxv_1006C dd 0
|
||
dd xxv_100FA
|
||
db 10h dup(0)
|
||
xxv_10084 dd 0
|
||
dw 0FFE2h
|
||
dw 0
|
||
dw 3
|
||
dd xxv_1006C
|
||
dw 0
|
||
db 4, 0
|
||
|
||
public ___call_terminate
|
||
___call_terminate proc far
|
||
|
||
@@var_26 = dword ptr -26h
|
||
@@var_22 = word ptr -22h
|
||
@@var_20 = word ptr -20h
|
||
@@var_1E = word ptr -1Eh
|
||
@@var_12 = word ptr -12h
|
||
|
||
push bp
|
||
mov bp, sp
|
||
sub sp, 26h
|
||
push si
|
||
push di
|
||
mov ax, seg xxv_10084
|
||
mov bx, offset xxv_10084
|
||
nopcall ___InitExceptBlocks
|
||
mov [bp+@@var_22], ds
|
||
nopcall _flushall
|
||
les bx, ss:16h
|
||
mov dx, es:[bx+0Ch]
|
||
mov ax, es:[bx+0Ah]
|
||
mov word ptr [bp+@@var_26+2], dx
|
||
mov word ptr [bp+@@var_26], ax
|
||
mov [bp+@@var_12], 6
|
||
les bx, ss:16h
|
||
cmp word ptr es:[bx+12h], 0
|
||
jnz short xxv_100DE
|
||
les bx, ss:16h
|
||
mov word ptr es:[bx+12h], ds
|
||
|
||
xxv_100DE:
|
||
les bx, ss:16h
|
||
mov ax, es:[bx+12h]
|
||
mov [bp+@@var_20], ax
|
||
mov ds, [bp+@@var_20]
|
||
call [bp+@@var_26]
|
||
mov ds, [bp+@@var_22]
|
||
mov [bp+@@var_12], 0
|
||
jmp short xxv_10102
|
||
|
||
xxv_100FA:
|
||
mov ds, [bp+@@var_22]
|
||
nopcall @_CatchCleanup$qv ; _CatchCleanup(void)
|
||
|
||
xxv_10102:
|
||
nopcall _abort
|
||
push [bp+@@var_1E]
|
||
nopcall ___ExitExceptBlocks
|
||
pop di
|
||
pop si
|
||
mov sp, bp
|
||
pop bp
|
||
retf
|
||
___call_terminate endp
|
||
|
||
|
||
; unexpected(void)
|
||
public @unexpected$qv
|
||
@unexpected$qv proc far
|
||
push si
|
||
push di
|
||
call ___call_terminate
|
||
pop di
|
||
pop si
|
||
retf
|
||
@unexpected$qv endp
|
||
|
||
|
||
; set_unexpected(void (*)(void))
|
||
public @set_unexpected$qnqv$v
|
||
@set_unexpected$qnqv$v proc far
|
||
|
||
@@var_4 = word ptr -4
|
||
@@var_2 = word ptr -2
|
||
@@arg_0 = word ptr 6
|
||
@@arg_2 = word ptr 8
|
||
|
||
push bp
|
||
mov bp, sp
|
||
sub sp, 4
|
||
push si
|
||
push di
|
||
les bx, ss:16h
|
||
mov dx, es:[bx+10h]
|
||
mov ax, es:[bx+0Eh]
|
||
mov [bp+@@var_2], dx
|
||
mov [bp+@@var_4], ax
|
||
mov ax, [bp+@@arg_0]
|
||
or ax, [bp+@@arg_2]
|
||
jz short xxv_10154
|
||
les bx, ss:16h
|
||
mov dx, [bp+@@arg_2]
|
||
mov ax, [bp+@@arg_0]
|
||
mov es:[bx+10h], dx
|
||
mov es:[bx+0Eh], ax
|
||
|
||
xxv_10154:
|
||
mov dx, [bp+@@var_2]
|
||
mov ax, [bp+@@var_4]
|
||
pop di
|
||
pop si
|
||
mov sp, bp
|
||
pop bp
|
||
retf
|
||
@set_unexpected$qnqv$v endp
|
||
|
||
|
||
public ___call_unexpected
|
||
___call_unexpected proc far
|
||
|
||
@@var_6 = dword ptr -6
|
||
@@var_2 = word ptr -2
|
||
|
||
push bp
|
||
mov bp, sp
|
||
sub sp, 6
|
||
push si
|
||
push di
|
||
les bx, ss:16h
|
||
mov dx, es:[bx+10h]
|
||
mov ax, es:[bx+0Eh]
|
||
mov word ptr [bp+@@var_6+2], dx
|
||
mov word ptr [bp+@@var_6], ax
|
||
les bx, ss:16h
|
||
cmp word ptr es:[bx+14h], 0
|
||
jnz short xxv_10190
|
||
les bx, ss:16h
|
||
mov word ptr es:[bx+14h], ds
|
||
|
||
xxv_10190:
|
||
les bx, ss:16h
|
||
mov ax, es:[bx+14h]
|
||
mov [bp+@@var_2], ax
|
||
push ds
|
||
mov ds, [bp+@@var_2]
|
||
call [bp+@@var_6]
|
||
pop ds
|
||
nopcall _abort
|
||
pop di
|
||
pop si
|
||
mov sp, bp
|
||
pop bp
|
||
retf
|
||
___call_unexpected endp
|
||
|
||
|
||
; __GetPolymorphicDTC(void *, unsigned int)
|
||
public @__GetPolymorphicDTC$qnvui
|
||
@__GetPolymorphicDTC$qnvui proc far
|
||
|
||
@@var_8 = dword ptr -8
|
||
@@var_4 = dword ptr -4
|
||
@@arg_0 = dword ptr 6
|
||
@@arg_4 = word ptr 0Ah
|
||
|
||
push bp
|
||
mov bp, sp
|
||
sub sp, 8
|
||
push si
|
||
push di
|
||
mov ax, word ptr [bp+@@arg_0]
|
||
or ax, word ptr [bp+@@arg_0+2]
|
||
jnz short xxv_101C3
|
||
xor ax, ax
|
||
jmp short xxv_101FD
|
||
|
||
xxv_101C3:
|
||
les bx, [bp+@@arg_0]
|
||
add bx, [bp+@@arg_4]
|
||
mov ax, es:[bx]
|
||
mov word ptr [bp+@@var_4+2], ds
|
||
mov word ptr [bp+@@var_4], ax
|
||
les bx, [bp+@@var_4]
|
||
mov dx, word ptr [bp+@@var_4+2]
|
||
mov ax, word ptr [bp+@@var_4]
|
||
sub ax, es:[bx-2]
|
||
mov word ptr [bp+@@var_4+2], dx
|
||
mov word ptr [bp+@@var_4], ax
|
||
les bx, [bp+@@var_4]
|
||
mov dx, es:[bx-6]
|
||
mov ax, es:[bx-8]
|
||
mov word ptr [bp+@@var_8+2], dx
|
||
mov word ptr [bp+@@var_8], ax
|
||
les bx, [bp+@@var_8]
|
||
mov ax, es:[bx+1Ah]
|
||
|
||
xxv_101FD:
|
||
pop di
|
||
pop si
|
||
mov sp, bp
|
||
pop bp
|
||
retf
|
||
@__GetPolymorphicDTC$qnvui endp
|
||
|
||
|
||
; __GetPolymorphicDTCfar(void *, unsigned int)
|
||
public @__GetPolymorphicDTCfar$qnvui
|
||
@__GetPolymorphicDTCfar$qnvui proc far
|
||
|
||
@@var_8 = dword ptr -8
|
||
@@var_4 = dword ptr -4
|
||
@@arg_0 = dword ptr 6
|
||
@@arg_4 = word ptr 0Ah
|
||
|
||
push bp
|
||
mov bp, sp
|
||
sub sp, 8
|
||
push si
|
||
push di
|
||
mov ax, word ptr [bp+@@arg_0]
|
||
or ax, word ptr [bp+@@arg_0+2]
|
||
jnz short xxv_10217
|
||
xor ax, ax
|
||
jmp short xxv_10255
|
||
|
||
xxv_10217:
|
||
les bx, [bp+@@arg_0]
|
||
add bx, [bp+@@arg_4]
|
||
mov dx, es:[bx+2]
|
||
mov ax, es:[bx]
|
||
mov word ptr [bp+@@var_4+2], dx
|
||
mov word ptr [bp+@@var_4], ax
|
||
les bx, [bp+@@var_4]
|
||
mov dx, word ptr [bp+@@var_4+2]
|
||
mov ax, word ptr [bp+@@var_4]
|
||
sub ax, es:[bx-2]
|
||
mov word ptr [bp+@@var_4+2], dx
|
||
mov word ptr [bp+@@var_4], ax
|
||
les bx, [bp+@@var_4]
|
||
mov dx, es:[bx-6]
|
||
mov ax, es:[bx-8]
|
||
mov word ptr [bp+@@var_8+2], dx
|
||
mov word ptr [bp+@@var_8], ax
|
||
les bx, [bp+@@var_8]
|
||
mov ax, es:[bx+1Ah]
|
||
|
||
xxv_10255:
|
||
pop di
|
||
pop si
|
||
mov sp, bp
|
||
pop bp
|
||
retf
|
||
@__GetPolymorphicDTCfar$qnvui endp
|
||
|
||
|
||
public __ExceptInit
|
||
__ExceptInit proc far
|
||
push si
|
||
push di
|
||
mov word ptr ss:12h, 0
|
||
mov word ptr ss:10h, 0
|
||
mov word ptr ss:18h, ds
|
||
mov word ptr ss:16h, offset ___CPPexceptionList
|
||
mov word ptr ss:1Ah, 0FEEDh
|
||
mov ax, ds
|
||
mov ds:___unexpectd_DS, ax
|
||
mov ds:___terminate_DS, ax
|
||
mov dx, ss:18h
|
||
mov ax, ss:16h
|
||
add ax, 0A8h ; '<27>'
|
||
les bx, ss:16h
|
||
mov es:[bx+22h], dx
|
||
mov es:[bx+20h], ax
|
||
mov word ptr ss:14h, 0FFFFh
|
||
pop di
|
||
pop si
|
||
retf
|
||
__ExceptInit endp
|