mirror of
https://github.com/upx/upx
synced 2025-09-28 19:06:07 +08:00
Added first version of a clean-room wcc support library implementation.
This commit is contained in:
parent
6456de7188
commit
50c8860a50
File diff suppressed because it is too large
Load Diff
|
@ -127,6 +127,76 @@
|
||||||
#define jnes jnzs
|
#define jnes jnzs
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
; =============
|
||||||
|
; ============= WATCOM C/C++ HUGE POINTER SUPPORT
|
||||||
|
; =============
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* DOS real mode */
|
||||||
|
#define _AHSHIFT 12
|
||||||
|
#define _AHINCR (1 << _AHSHIFT) /* 4096 */
|
||||||
|
|
||||||
|
|
||||||
|
// huge pointer add: dx:ax = dx:ax + cx:bx
|
||||||
|
.macro M_WCC_PIA_086
|
||||||
|
add ax, bx
|
||||||
|
adc cx, 0
|
||||||
|
xchg cx, bx
|
||||||
|
mov cl, _AHSHIFT
|
||||||
|
shl bx, cl
|
||||||
|
add dx, bx
|
||||||
|
.endm
|
||||||
|
.macro M_WCC_PIA_286
|
||||||
|
add ax, bx
|
||||||
|
adc cx, 0
|
||||||
|
shl cx, _AHSHIFT
|
||||||
|
add dx, cx
|
||||||
|
.endm
|
||||||
|
|
||||||
|
|
||||||
|
// huge pointer sub: dx:ax = dx:ax - cx:bx
|
||||||
|
.macro M_WCC_PIS_086
|
||||||
|
sub ax, bx
|
||||||
|
adc cx, 0
|
||||||
|
xchg cx, bx
|
||||||
|
mov cl, _AHSHIFT
|
||||||
|
shl bx, cl
|
||||||
|
sub dx, bx
|
||||||
|
.endm
|
||||||
|
.macro M_WCC_PIS_286
|
||||||
|
sub ax, bx
|
||||||
|
adc cx, 0
|
||||||
|
shl cx, _AHSHIFT
|
||||||
|
sub dx, cx
|
||||||
|
.endm
|
||||||
|
|
||||||
|
|
||||||
|
// huge pointer diff: dx:ax = dx:ax - cx:bx
|
||||||
|
.macro M_WCC_PTS
|
||||||
|
// FIXME
|
||||||
|
.endm
|
||||||
|
|
||||||
|
|
||||||
|
// huge pointer compare: set zero and carry flags: dx:ax cmp cx:bx
|
||||||
|
.macro M_WCC_PTC
|
||||||
|
local L1
|
||||||
|
cmp dx, cx
|
||||||
|
jnes L1
|
||||||
|
cmp ax, bx
|
||||||
|
L1:
|
||||||
|
.endm
|
||||||
|
|
||||||
|
|
||||||
|
// umul32: dx:ax = dx:ax * cx:bx
|
||||||
|
.macro M_WCC_U4M
|
||||||
|
push si
|
||||||
|
// compute high-word
|
||||||
|
// add low-word
|
||||||
|
pop si
|
||||||
|
.endm
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
; =============
|
; =============
|
||||||
; ============= 16-BIT CALLTRICK & JUMPTRICK
|
; ============= 16-BIT CALLTRICK & JUMPTRICK
|
||||||
|
|
|
@ -117,6 +117,7 @@ section EXECUTPO
|
||||||
#include "arch/i086/nrv2b_d8.S"
|
#include "arch/i086/nrv2b_d8.S"
|
||||||
#include "arch/i086/nrv2d_d8.S"
|
#include "arch/i086/nrv2d_d8.S"
|
||||||
#include "arch/i086/nrv2e_d8.S"
|
#include "arch/i086/nrv2e_d8.S"
|
||||||
|
//#include "arch/i086/lzma_d.S"
|
||||||
|
|
||||||
section EXEMAIN5
|
section EXEMAIN5
|
||||||
pop bp
|
pop bp
|
||||||
|
@ -217,6 +218,34 @@ section EXERETIP
|
||||||
push ax
|
push ax
|
||||||
lret
|
lret
|
||||||
|
|
||||||
|
|
||||||
|
section wcc_pia_086
|
||||||
|
M_WCC_PIA_086
|
||||||
|
ret
|
||||||
|
section wcc_pia_286
|
||||||
|
CPU 286
|
||||||
|
M_WCC_PIA_286
|
||||||
|
CPU 8086
|
||||||
|
ret
|
||||||
|
section wcc_pis_086
|
||||||
|
M_WCC_PIS_086
|
||||||
|
ret
|
||||||
|
section wcc_pis_286
|
||||||
|
CPU 286
|
||||||
|
M_WCC_PIS_286
|
||||||
|
CPU 8086
|
||||||
|
ret
|
||||||
|
section wcc_pts
|
||||||
|
M_WCC_PTS
|
||||||
|
ret
|
||||||
|
section wcc_ptc
|
||||||
|
M_WCC_PTC
|
||||||
|
ret
|
||||||
|
section wcc_u4m
|
||||||
|
M_WCC_U4M
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
vi:ts=8:et:nowrap
|
vi:ts=8:et:nowrap
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -59,6 +59,13 @@ Idx Name Size VMA LMA File off Algn Flags
|
||||||
54 EXEJUMPF 00000005 00000000 00000000 00000300 2**0 CONTENTS, RELOC, READONLY
|
54 EXEJUMPF 00000005 00000000 00000000 00000300 2**0 CONTENTS, RELOC, READONLY
|
||||||
55 EXERCSPO 00000004 00000000 00000000 00000305 2**0 CONTENTS, RELOC, READONLY
|
55 EXERCSPO 00000004 00000000 00000000 00000305 2**0 CONTENTS, RELOC, READONLY
|
||||||
56 EXERETIP 00000006 00000000 00000000 00000309 2**0 CONTENTS, RELOC, READONLY
|
56 EXERETIP 00000006 00000000 00000000 00000309 2**0 CONTENTS, RELOC, READONLY
|
||||||
|
57 wcc_pia_086 0000000e 00000000 00000000 0000030f 2**0 CONTENTS, READONLY
|
||||||
|
58 wcc_pia_286 0000000b 00000000 00000000 0000031d 2**0 CONTENTS, READONLY
|
||||||
|
59 wcc_pis_086 0000000e 00000000 00000000 00000328 2**0 CONTENTS, READONLY
|
||||||
|
60 wcc_pis_286 0000000b 00000000 00000000 00000336 2**0 CONTENTS, READONLY
|
||||||
|
61 wcc_pts 00000001 00000000 00000000 00000341 2**0 CONTENTS, READONLY
|
||||||
|
62 wcc_ptc 00000007 00000000 00000000 00000342 2**0 CONTENTS, READONLY
|
||||||
|
63 wcc_u4m 00000003 00000000 00000000 00000349 2**0 CONTENTS, READONLY
|
||||||
SYMBOL TABLE:
|
SYMBOL TABLE:
|
||||||
00000000 l d DEVICEENTRY 00000000 DEVICEENTRY
|
00000000 l d DEVICEENTRY 00000000 DEVICEENTRY
|
||||||
00000000 l d EXEENTRY 00000000 EXEENTRY
|
00000000 l d EXEENTRY 00000000 EXEENTRY
|
||||||
|
@ -117,6 +124,13 @@ SYMBOL TABLE:
|
||||||
00000000 l d EXEJUMPF 00000000 EXEJUMPF
|
00000000 l d EXEJUMPF 00000000 EXEJUMPF
|
||||||
00000000 l d EXERCSPO 00000000 EXERCSPO
|
00000000 l d EXERCSPO 00000000 EXERCSPO
|
||||||
00000000 l d EXERETIP 00000000 EXERETIP
|
00000000 l d EXERETIP 00000000 EXERETIP
|
||||||
|
00000000 l d wcc_pia_086 00000000 wcc_pia_086
|
||||||
|
00000000 l d wcc_pia_286 00000000 wcc_pia_286
|
||||||
|
00000000 l d wcc_pis_086 00000000 wcc_pis_086
|
||||||
|
00000000 l d wcc_pis_286 00000000 wcc_pis_286
|
||||||
|
00000000 l d wcc_pts 00000000 wcc_pts
|
||||||
|
00000000 l d wcc_ptc 00000000 wcc_ptc
|
||||||
|
00000000 l d wcc_u4m 00000000 wcc_u4m
|
||||||
00000000 *UND* 00000000 attribute
|
00000000 *UND* 00000000 attribute
|
||||||
00000000 *UND* 00000000 interrupt
|
00000000 *UND* 00000000 interrupt
|
||||||
00000000 *UND* 00000000 orig_strategy
|
00000000 *UND* 00000000 orig_strategy
|
||||||
|
|
Loading…
Reference in New Issue
Block a user