mirror of https://github.com/nmlgc/ReC98.git
110 lines
3.2 KiB
NASM
110 lines
3.2 KiB
NASM
|
; *Not* the original file, but an edit to turn it into an includable slice.
|
||
|
; Changes include:
|
||
|
; * removal of RULES.ASI to eliminate redundancy
|
||
|
; * removal of the 'CODE' segment declaration (for obvious reasons)
|
||
|
|
||
|
;[]-----------------------------------------------------------------[]
|
||
|
;| H_PADA.ASM -- long pointer routines |
|
||
|
;[]-----------------------------------------------------------------[]
|
||
|
|
||
|
;
|
||
|
; C/C++ Run Time Library - Version 5.0
|
||
|
;
|
||
|
; Copyright (c) 1987, 1992 by Borland International
|
||
|
; All Rights Reserved.
|
||
|
;
|
||
|
; calls to these routines are generated by the compiler to perform
|
||
|
; arithmetic operations on long pointers.
|
||
|
|
||
|
public PADA@
|
||
|
public F_PADA@
|
||
|
public N_PADA@
|
||
|
|
||
|
N_PADA@:
|
||
|
pop es ;fix up far return
|
||
|
push cs
|
||
|
push es
|
||
|
PADA@:
|
||
|
F_PADA@:
|
||
|
mov es,dx
|
||
|
xchg ax,bx
|
||
|
;
|
||
|
; Pointer to memory cell to increment is in es:bx
|
||
|
; Increment amount is ax:cx
|
||
|
;
|
||
|
mov dx, es:2[bx] ; DX <- Selector
|
||
|
push bx
|
||
|
mov bx, es:[bx] ; BX <- Offset
|
||
|
or cx,cx ; Is increment negative?
|
||
|
jge ada1 ; No, ...
|
||
|
not ax ; Yes, ...
|
||
|
not cx
|
||
|
add ax,1
|
||
|
adc cx,0
|
||
|
jmp sba1
|
||
|
ada1:
|
||
|
add bx,ax ; Add offsets
|
||
|
jnc adaok
|
||
|
add dx,1000h
|
||
|
adaok:
|
||
|
mov ah,cl
|
||
|
mov cl,4
|
||
|
shl ah,cl
|
||
|
xor al,al
|
||
|
add dx,ax
|
||
|
mov ch,bl
|
||
|
shr bx,cl
|
||
|
add dx,bx
|
||
|
mov al,ch
|
||
|
and ax,0fh
|
||
|
pop bx
|
||
|
mov es:[bx], ax
|
||
|
mov es:2[bx], dx
|
||
|
retf
|
||
|
|
||
|
public PSBA@
|
||
|
public F_PSBA@
|
||
|
public N_PSBA@
|
||
|
|
||
|
N_PSBA@:
|
||
|
pop es ;fix up far return
|
||
|
push cs
|
||
|
push es
|
||
|
PSBA@:
|
||
|
F_PSBA@:
|
||
|
mov es,dx
|
||
|
xchg ax,bx
|
||
|
;
|
||
|
; Pointer to memory cell to increment is in es:bx
|
||
|
; Increment amount is ax:cx
|
||
|
;
|
||
|
mov dx,es:2[bx]
|
||
|
push bx
|
||
|
mov bx,es:[bx]
|
||
|
or cx,cx
|
||
|
jge sba1
|
||
|
not ax
|
||
|
not cx
|
||
|
add ax,1
|
||
|
adc cx,0
|
||
|
jmp ada1
|
||
|
sba1:
|
||
|
sub bx,ax
|
||
|
jnc sbaok
|
||
|
sub dx,1000h
|
||
|
sbaok:
|
||
|
mov ah,cl
|
||
|
mov cl,4
|
||
|
shl ah,cl
|
||
|
xor al,al
|
||
|
sub dx,ax
|
||
|
mov ch,bl
|
||
|
shr bx,cl
|
||
|
add dx,bx
|
||
|
mov al,ch
|
||
|
and ax,0fh
|
||
|
pop bx
|
||
|
mov es:[bx],ax
|
||
|
mov es:2[bx],dx
|
||
|
retf
|