mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.5 KiB
70 lines
1.5 KiB
.286p
|
|
include cmacros.inc
|
|
|
|
?WIN=1 ; Use Windows prolog/epilog
|
|
?PLM=1 ; Use PASCAL calling convention
|
|
|
|
externW __ahincr
|
|
|
|
sBegin CODE ;INIT_TEXT
|
|
assumes cs,CODE ;INIT_TEXT
|
|
assumes ds,DATA
|
|
|
|
cProc HugeOffset,<NEAR, PUBLIC>
|
|
parmD pSrc
|
|
parmD cb
|
|
cBegin
|
|
mov ax, SEG_cb
|
|
mov dx, ax
|
|
mov ax, OFF_pSrc
|
|
add ax, OFF_cb ;add src offset and bytecount
|
|
adc dx, 0 ;dx = # segments to increment
|
|
mov cx, ax ;save new offset
|
|
mov ax, dx ;#segs into ax
|
|
lea bx, __ahincr
|
|
mul bx ;__ahincr ;mul by windows magic #
|
|
mov dx, ax ;restore to dx for output
|
|
mov ax, cx ;restore for output
|
|
add dx, SEG_pSrc
|
|
cEnd
|
|
|
|
|
|
ifdef DEBUG
|
|
cProc StkTrace,<NEAR, PUBLIC>
|
|
parmW cFrames
|
|
parmD lpBuf
|
|
cBegin
|
|
push es
|
|
mov cx, cFrames
|
|
mov bx, bp
|
|
les di, lpBuf
|
|
cld
|
|
x:
|
|
mov bx, ss:[bx]
|
|
and bx, 0FFFEh
|
|
mov ax, ss:[bx+2]
|
|
stosw
|
|
loopnz x
|
|
pop es
|
|
cEnd
|
|
endif
|
|
|
|
?WIN=0 ; turn off windows prolog/epilog stuff
|
|
|
|
;
|
|
; SwitchDS
|
|
;
|
|
; Routine to switch the DS to word argument
|
|
; Called from C but without C DS glue.
|
|
;
|
|
cProc SwitchDS,<NEAR, PUBLIC>
|
|
parmW newDS
|
|
cBegin
|
|
mov ax,ds ; old DS is return value
|
|
mov ds,newDS
|
|
cEnd
|
|
|
|
|
|
sEnd CODE ;INIT_TEXT
|
|
end
|
|
|