*** empty log message ***
This commit is contained in:
parent
1b36afae36
commit
9c93cbdfaa
25
mach/i86/libem/adi.s
Normal file
25
mach/i86/libem/adi.s
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
.define .adi
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in cx , top of stack in ax
|
||||||
|
.adi:
|
||||||
|
pop bx ! return address
|
||||||
|
cmp cx,2
|
||||||
|
jne 1f
|
||||||
|
pop cx
|
||||||
|
add ax,cx
|
||||||
|
jmp bx
|
||||||
|
1:
|
||||||
|
cmp cx,4
|
||||||
|
jne 9f
|
||||||
|
pop dx
|
||||||
|
pop cx
|
||||||
|
add ax,cx
|
||||||
|
pop cx
|
||||||
|
adc dx,cx
|
||||||
|
push dx
|
||||||
|
jmp bx
|
||||||
|
9:
|
||||||
|
mov ax,EODDZ
|
||||||
|
push ax
|
||||||
|
jmp .trp
|
15
mach/i86/libem/and.s
Normal file
15
mach/i86/libem/and.s
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
.define .and
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in cx
|
||||||
|
.and:
|
||||||
|
pop bx ! return address
|
||||||
|
mov di,sp
|
||||||
|
add di,cx
|
||||||
|
sar cx,1
|
||||||
|
1:
|
||||||
|
pop ax
|
||||||
|
and ax,(di)
|
||||||
|
stos
|
||||||
|
loop 1b
|
||||||
|
jmp bx
|
37
mach/i86/libem/cii.s
Normal file
37
mach/i86/libem/cii.s
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
.define .cii
|
||||||
|
|
||||||
|
.cii:
|
||||||
|
! $Header$
|
||||||
|
pop di ! return address
|
||||||
|
! pop cx, dest. size
|
||||||
|
! pop bx, src. size
|
||||||
|
! ax is first word of source
|
||||||
|
cmp bx,cx
|
||||||
|
je 8f
|
||||||
|
cmp bx,2
|
||||||
|
je 1f
|
||||||
|
cmp bx,4
|
||||||
|
jne 7f
|
||||||
|
cmp cx,2
|
||||||
|
jne 9f
|
||||||
|
pop dx
|
||||||
|
8:
|
||||||
|
jmp di
|
||||||
|
7: cmp bx,1
|
||||||
|
jne 9f
|
||||||
|
cmp cx,2
|
||||||
|
jne 9f
|
||||||
|
cbw
|
||||||
|
jmp 8b
|
||||||
|
1:
|
||||||
|
cmp cx,4
|
||||||
|
jne 9f
|
||||||
|
cwd
|
||||||
|
push dx
|
||||||
|
jmp di
|
||||||
|
9:
|
||||||
|
push ax ! push low source
|
||||||
|
mov ax,EILLINS
|
||||||
|
push ax
|
||||||
|
jmp .fat
|
||||||
|
jmp bx
|
18
mach/i86/libem/cms.s
Normal file
18
mach/i86/libem/cms.s
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
.define .cms
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in cx
|
||||||
|
.cms:
|
||||||
|
pop bx ! return address
|
||||||
|
mov dx,sp
|
||||||
|
mov si,dx
|
||||||
|
add dx,cx
|
||||||
|
mov di,dx
|
||||||
|
add dx,cx
|
||||||
|
sar cx,1
|
||||||
|
repe cmps
|
||||||
|
je 1f
|
||||||
|
inc cx
|
||||||
|
1:
|
||||||
|
mov sp,dx
|
||||||
|
jmp bx
|
25
mach/i86/libem/cmu4.s
Normal file
25
mach/i86/libem/cmu4.s
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
.define .cmu4
|
||||||
|
|
||||||
|
.cmu4:
|
||||||
|
! $Header$
|
||||||
|
pop bx ! return address
|
||||||
|
xor ax,ax
|
||||||
|
pop cx
|
||||||
|
pop dx
|
||||||
|
pop si
|
||||||
|
pop di
|
||||||
|
cmp di,dx
|
||||||
|
ja 1f
|
||||||
|
jb 2f
|
||||||
|
cmp si,cx
|
||||||
|
ja 1f
|
||||||
|
je 3f
|
||||||
|
2:
|
||||||
|
dec ax
|
||||||
|
3:
|
||||||
|
jmp bx
|
||||||
|
1:
|
||||||
|
inc ax
|
||||||
|
jmp bx
|
||||||
|
|
||||||
|
ret
|
14
mach/i86/libem/com.s
Normal file
14
mach/i86/libem/com.s
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
.define .com
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in cx
|
||||||
|
.com:
|
||||||
|
pop bx ! return address
|
||||||
|
mov di,sp
|
||||||
|
sar cx,1
|
||||||
|
1:
|
||||||
|
not (di)
|
||||||
|
inc di
|
||||||
|
inc di
|
||||||
|
loop 1b
|
||||||
|
jmp bx
|
23
mach/i86/libem/csa2.s
Normal file
23
mach/i86/libem/csa2.s
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
.define .csa2
|
||||||
|
|
||||||
|
.csa2:
|
||||||
|
! $Header$
|
||||||
|
! si, descriptor address
|
||||||
|
! bx, index
|
||||||
|
mov dx,(si) ! default
|
||||||
|
sub bx,2(si)
|
||||||
|
cmp bx,4(si)
|
||||||
|
ja 1f
|
||||||
|
sal bx,1
|
||||||
|
mov bx,6(bx)(si)
|
||||||
|
test bx,bx
|
||||||
|
jnz 2f
|
||||||
|
1:
|
||||||
|
mov bx,dx
|
||||||
|
test bx,bx
|
||||||
|
jnz 2f
|
||||||
|
mov ax,ECASE
|
||||||
|
push ax
|
||||||
|
jmp .fat
|
||||||
|
2:
|
||||||
|
jmp bx
|
26
mach/i86/libem/csb2.s
Normal file
26
mach/i86/libem/csb2.s
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
.define .csb2
|
||||||
|
|
||||||
|
.csb2:
|
||||||
|
! $Header$
|
||||||
|
!si, descriptor address
|
||||||
|
!dx, index
|
||||||
|
lods
|
||||||
|
xchg ax,bx ! default
|
||||||
|
lods
|
||||||
|
xchg ax,cx ! number of cases
|
||||||
|
1:
|
||||||
|
dec cx
|
||||||
|
jl 2f
|
||||||
|
lods
|
||||||
|
cmp ax,dx
|
||||||
|
lods
|
||||||
|
jne 1b
|
||||||
|
xchg ax,bx
|
||||||
|
2:
|
||||||
|
test bx,bx
|
||||||
|
jnz 3f
|
||||||
|
mov ax,ECASE
|
||||||
|
push ax
|
||||||
|
jmp .fat
|
||||||
|
3:
|
||||||
|
jmp bx
|
35
mach/i86/libem/cuu.s
Normal file
35
mach/i86/libem/cuu.s
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
.define .ciu
|
||||||
|
.define .cui
|
||||||
|
.define .cuu
|
||||||
|
|
||||||
|
.ciu:
|
||||||
|
.cui:
|
||||||
|
.cuu:
|
||||||
|
! $Header$
|
||||||
|
pop di ! return address
|
||||||
|
! pop cx, dest. size
|
||||||
|
! pop bx, source size
|
||||||
|
! ax is low word of source
|
||||||
|
cmp bx,cx
|
||||||
|
je 8f
|
||||||
|
cmp bx,2
|
||||||
|
je 1f
|
||||||
|
cmp bx,4
|
||||||
|
jne 9f
|
||||||
|
cmp cx,2
|
||||||
|
jne 9f
|
||||||
|
pop dx
|
||||||
|
8:
|
||||||
|
jmp di
|
||||||
|
1:
|
||||||
|
cmp cx,4
|
||||||
|
jne 9f
|
||||||
|
xor dx,dx
|
||||||
|
push dx
|
||||||
|
jmp di
|
||||||
|
9:
|
||||||
|
push ax ! to help debugging ?
|
||||||
|
mov ax,EILLINS
|
||||||
|
push ax
|
||||||
|
jmp .fat
|
||||||
|
jmp bx
|
12
mach/i86/libem/dup.s
Normal file
12
mach/i86/libem/dup.s
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
.define .dup
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in cx
|
||||||
|
.dup:
|
||||||
|
pop bx ! return address
|
||||||
|
mov si,sp
|
||||||
|
sub sp,cx
|
||||||
|
mov di,sp
|
||||||
|
sar cx,1
|
||||||
|
rep movs
|
||||||
|
jmp bx
|
35
mach/i86/libem/dvi.s
Normal file
35
mach/i86/libem/dvi.s
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
.define .dvi
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in ax
|
||||||
|
.dvi:
|
||||||
|
pop bx ! return address
|
||||||
|
cmp ax,2
|
||||||
|
jne 1f
|
||||||
|
pop ax
|
||||||
|
cwd
|
||||||
|
pop cx
|
||||||
|
idiv cx
|
||||||
|
push ax
|
||||||
|
jmp bx
|
||||||
|
1:
|
||||||
|
cmp ax,4
|
||||||
|
jne 9f
|
||||||
|
pop ax
|
||||||
|
pop dx
|
||||||
|
pop si
|
||||||
|
pop di
|
||||||
|
push bx
|
||||||
|
push di
|
||||||
|
push si
|
||||||
|
push dx
|
||||||
|
push ax
|
||||||
|
call .dvi4
|
||||||
|
pop bx
|
||||||
|
push cx
|
||||||
|
push ax
|
||||||
|
jmp bx
|
||||||
|
9:
|
||||||
|
mov ax,EODDZ
|
||||||
|
push ax
|
||||||
|
jmp .trp
|
85
mach/i86/libem/dvi4.s
Normal file
85
mach/i86/libem/dvi4.s
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
.define .dvi4
|
||||||
|
|
||||||
|
yl=2
|
||||||
|
yh=4
|
||||||
|
xl=6
|
||||||
|
xh=8
|
||||||
|
|
||||||
|
.dvi4:
|
||||||
|
! $Header$
|
||||||
|
mov si,sp ! copy of sp
|
||||||
|
mov bx,yl(si)
|
||||||
|
mov ax,yh(si)
|
||||||
|
cwd
|
||||||
|
mov di,dx
|
||||||
|
cmp dx,ax
|
||||||
|
jne 7f
|
||||||
|
and dx,dx
|
||||||
|
jge 1f
|
||||||
|
neg bx
|
||||||
|
je 7f
|
||||||
|
1:
|
||||||
|
xor dx,dx
|
||||||
|
mov cx,xl(si)
|
||||||
|
mov ax,xh(si)
|
||||||
|
and ax,ax
|
||||||
|
jge 2f
|
||||||
|
neg ax
|
||||||
|
neg cx
|
||||||
|
sbb ax,dx
|
||||||
|
not di
|
||||||
|
2:
|
||||||
|
div bx
|
||||||
|
xchg ax,cx
|
||||||
|
div bx ! cx = high abs(result), ax=low abs(result)
|
||||||
|
9:
|
||||||
|
and di,di
|
||||||
|
jge 1f
|
||||||
|
neg cx
|
||||||
|
neg ax
|
||||||
|
sbb cx,0
|
||||||
|
1:
|
||||||
|
! cx is high order result
|
||||||
|
! ax is low order result
|
||||||
|
ret 8
|
||||||
|
|
||||||
|
7:
|
||||||
|
push dx ! sign of y
|
||||||
|
mov di,ax
|
||||||
|
xor bx,bx
|
||||||
|
and di,di
|
||||||
|
jge 1f
|
||||||
|
neg di
|
||||||
|
neg yl(si)
|
||||||
|
sbb di,bx
|
||||||
|
1:
|
||||||
|
mov ax,xl(si)
|
||||||
|
mov dx,xh(si)
|
||||||
|
and dx,dx
|
||||||
|
jge 1f
|
||||||
|
neg dx
|
||||||
|
neg ax
|
||||||
|
sbb dx,bx
|
||||||
|
not -2(si)
|
||||||
|
1:
|
||||||
|
mov cx,16
|
||||||
|
1:
|
||||||
|
shl ax,1
|
||||||
|
rcl dx,1
|
||||||
|
rcl bx,1
|
||||||
|
cmp di,bx
|
||||||
|
ja 3f
|
||||||
|
jb 2f
|
||||||
|
cmp yl(si),dx
|
||||||
|
jbe 2f
|
||||||
|
3:
|
||||||
|
loop 1b
|
||||||
|
jmp 1f
|
||||||
|
2:
|
||||||
|
sub dx,yl(si)
|
||||||
|
sbb bx,di
|
||||||
|
inc ax
|
||||||
|
loop 1b
|
||||||
|
1:
|
||||||
|
pop di ! di=sign of result,ax= result
|
||||||
|
jmp 9b
|
35
mach/i86/libem/dvu.s
Normal file
35
mach/i86/libem/dvu.s
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
.define .dvu
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in ax
|
||||||
|
.dvu:
|
||||||
|
pop bx ! return address
|
||||||
|
cmp ax,2
|
||||||
|
jne 1f
|
||||||
|
pop ax
|
||||||
|
xor dx,dx
|
||||||
|
pop cx
|
||||||
|
div cx
|
||||||
|
push ax
|
||||||
|
jmp bx
|
||||||
|
1:
|
||||||
|
cmp ax,4
|
||||||
|
jne 9f
|
||||||
|
pop ax
|
||||||
|
pop dx
|
||||||
|
pop si
|
||||||
|
pop di
|
||||||
|
push bx
|
||||||
|
push di
|
||||||
|
push si
|
||||||
|
push dx
|
||||||
|
push ax
|
||||||
|
call .dvu4
|
||||||
|
pop bx
|
||||||
|
push cx
|
||||||
|
push ax
|
||||||
|
jmp bx
|
||||||
|
9:
|
||||||
|
mov ax,EODDZ
|
||||||
|
push ax
|
||||||
|
jmp .trp
|
49
mach/i86/libem/dvu4.s
Normal file
49
mach/i86/libem/dvu4.s
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
.define .dvu4
|
||||||
|
|
||||||
|
yl=2
|
||||||
|
yh=4
|
||||||
|
xl=6
|
||||||
|
xh=8
|
||||||
|
|
||||||
|
.dvu4:
|
||||||
|
! $Header$
|
||||||
|
mov si,sp ! copy of sp
|
||||||
|
mov bx,yl(si)
|
||||||
|
mov ax,yh(si)
|
||||||
|
or ax,ax
|
||||||
|
jne 7f
|
||||||
|
xor dx,dx
|
||||||
|
mov cx,xl(si)
|
||||||
|
mov ax,xh(si)
|
||||||
|
div bx
|
||||||
|
xchg ax,cx
|
||||||
|
div bx
|
||||||
|
9:
|
||||||
|
! cx is high order result
|
||||||
|
! ax is low order result
|
||||||
|
ret 8
|
||||||
|
|
||||||
|
7:
|
||||||
|
mov di,ax
|
||||||
|
xor bx,bx
|
||||||
|
mov ax,xl(si)
|
||||||
|
mov dx,xh(si)
|
||||||
|
mov cx,16
|
||||||
|
1:
|
||||||
|
shl ax,1
|
||||||
|
rcl dx,1
|
||||||
|
rcl bx,1
|
||||||
|
cmp di,bx
|
||||||
|
ja 3f
|
||||||
|
jb 2f
|
||||||
|
cmp yl(si),dx
|
||||||
|
jbe 2f
|
||||||
|
3:
|
||||||
|
loop 1b
|
||||||
|
jmp 9b
|
||||||
|
2:
|
||||||
|
sub dx,yl(si)
|
||||||
|
sbb bx,di
|
||||||
|
inc ax
|
||||||
|
loop 1b
|
||||||
|
jmp 9b
|
30
mach/i86/libem/error.s
Normal file
30
mach/i86/libem/error.s
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
.define .error
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! ax is trap number
|
||||||
|
! all registers must be saved
|
||||||
|
! because return is possible
|
||||||
|
! May only be called with error no's <16
|
||||||
|
.error:
|
||||||
|
push bp
|
||||||
|
push si
|
||||||
|
push di
|
||||||
|
push dx
|
||||||
|
push cx
|
||||||
|
push bx
|
||||||
|
push ax
|
||||||
|
mov cx,ax
|
||||||
|
mov bx,1
|
||||||
|
sal bx,cl
|
||||||
|
test bx,(.ignmask)
|
||||||
|
jne 2f
|
||||||
|
call .trp
|
||||||
|
2:
|
||||||
|
pop ax
|
||||||
|
pop bx
|
||||||
|
pop cx
|
||||||
|
pop dx
|
||||||
|
pop di
|
||||||
|
pop si
|
||||||
|
pop bp
|
||||||
|
ret
|
20
mach/i86/libem/exg.s
Normal file
20
mach/i86/libem/exg.s
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
.define .exg
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in cx
|
||||||
|
.exg:
|
||||||
|
pop bx ! return address
|
||||||
|
mov dx,cx
|
||||||
|
mov si,sp
|
||||||
|
sub sp,cx
|
||||||
|
mov di,sp
|
||||||
|
rep movs
|
||||||
|
mov si,sp
|
||||||
|
mov di,sp
|
||||||
|
add di,dx
|
||||||
|
add di,dx
|
||||||
|
mov cx,dx
|
||||||
|
sar cx,1
|
||||||
|
rep movs
|
||||||
|
mov sp,si
|
||||||
|
jmp bx
|
42
mach/i86/libem/fakfp.s
Normal file
42
mach/i86/libem/fakfp.s
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
.define .mlf,.dvf,.ngf,.adf,.sbf,.cmf,.zrf,.fif,.fef
|
||||||
|
.define .mlf8,.dvf8,.ngf8,.adf8,.sbf8,.cmf8,.zrf8,.fif8,.fef8
|
||||||
|
.define .mlf4,.dvf4,.ngf4,.adf4,.sbf4,.cmf4,.zrf4,.fif4,.fef4
|
||||||
|
.define .cif,.cfi,.cuf,.cfu,.cff
|
||||||
|
|
||||||
|
.mlf:
|
||||||
|
.dvf:
|
||||||
|
.ngf:
|
||||||
|
.adf:
|
||||||
|
.sbf:
|
||||||
|
.cmf:
|
||||||
|
.zrf:
|
||||||
|
.fif:
|
||||||
|
.fef:
|
||||||
|
.mlf4:
|
||||||
|
.dvf4:
|
||||||
|
.ngf4:
|
||||||
|
.adf4:
|
||||||
|
.sbf4:
|
||||||
|
.cmf4:
|
||||||
|
.zrf4:
|
||||||
|
.fif4:
|
||||||
|
.fef4:
|
||||||
|
.mlf8:
|
||||||
|
.dvf8:
|
||||||
|
.ngf8:
|
||||||
|
.adf8:
|
||||||
|
.sbf8:
|
||||||
|
.cmf8:
|
||||||
|
.zrf8:
|
||||||
|
.fif8:
|
||||||
|
.fef8:
|
||||||
|
.cif:
|
||||||
|
.cfi:
|
||||||
|
.cuf:
|
||||||
|
.cfu:
|
||||||
|
.cff:
|
||||||
|
! $Header$
|
||||||
|
pop bx ! return address
|
||||||
|
mov ax,EILLINS
|
||||||
|
push ax
|
||||||
|
jmp .fat
|
7
mach/i86/libem/fat.s
Normal file
7
mach/i86/libem/fat.s
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
.define .fat
|
||||||
|
|
||||||
|
.fat:
|
||||||
|
! $Header$
|
||||||
|
call .trp
|
||||||
|
call .stop
|
||||||
|
! no return
|
7
mach/i86/libem/gto.s
Normal file
7
mach/i86/libem/gto.s
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
.define .gto
|
||||||
|
|
||||||
|
.gto:
|
||||||
|
! $Header$
|
||||||
|
mov bp,4(bx)
|
||||||
|
mov sp,2(bx)
|
||||||
|
jmp (bx)
|
15
mach/i86/libem/iaar.s
Normal file
15
mach/i86/libem/iaar.s
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
.define .iaar
|
||||||
|
|
||||||
|
.iaar:
|
||||||
|
! $Header$
|
||||||
|
pop bx
|
||||||
|
pop dx
|
||||||
|
cmp dx,2
|
||||||
|
jne .unknown
|
||||||
|
pop si ! descriptor address
|
||||||
|
pop ax ! index
|
||||||
|
pop di ! array base
|
||||||
|
sub ax,(si)
|
||||||
|
mul 4(si)
|
||||||
|
add di,ax
|
||||||
|
jmp bx
|
13
mach/i86/libem/ilar.s
Normal file
13
mach/i86/libem/ilar.s
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
.define .ilar
|
||||||
|
|
||||||
|
.ilar:
|
||||||
|
! $Header$
|
||||||
|
pop bx
|
||||||
|
pop dx
|
||||||
|
cmp dx,2
|
||||||
|
jne .unknown
|
||||||
|
pop di ! descriptor address
|
||||||
|
pop ax ! index
|
||||||
|
pop si ! array base
|
||||||
|
push bx
|
||||||
|
jmp .lar2
|
29
mach/i86/libem/inn.s
Normal file
29
mach/i86/libem/inn.s
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
.define .inn
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in cx
|
||||||
|
! bit # in ax
|
||||||
|
.inn:
|
||||||
|
pop bx ! return address
|
||||||
|
xor dx,dx
|
||||||
|
xor si,si
|
||||||
|
mov di,8
|
||||||
|
div di
|
||||||
|
mov di,sp
|
||||||
|
add di,ax
|
||||||
|
cmp ax,cx
|
||||||
|
xchg ax,dx
|
||||||
|
xchg ax,si ! ax:=si,si:=dx,does not change carry
|
||||||
|
jae 1f
|
||||||
|
movb dl,bits(si)
|
||||||
|
testb (di),dl
|
||||||
|
jz 1f
|
||||||
|
inc ax
|
||||||
|
1:
|
||||||
|
add sp,cx
|
||||||
|
! ax is result
|
||||||
|
jmp bx
|
||||||
|
|
||||||
|
.data
|
||||||
|
bits:
|
||||||
|
.byte 1,2,4,8,16,32,64,128
|
15
mach/i86/libem/ior.s
Normal file
15
mach/i86/libem/ior.s
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
.define .ior
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in cx
|
||||||
|
.ior:
|
||||||
|
pop bx ! return address
|
||||||
|
mov di,sp
|
||||||
|
add di,cx
|
||||||
|
sar cx,1
|
||||||
|
1:
|
||||||
|
pop ax
|
||||||
|
or ax,(di)
|
||||||
|
stos
|
||||||
|
loop 1b
|
||||||
|
jmp bx
|
13
mach/i86/libem/isar.s
Normal file
13
mach/i86/libem/isar.s
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
.define .isar
|
||||||
|
|
||||||
|
.isar:
|
||||||
|
! $Header$
|
||||||
|
pop bx
|
||||||
|
pop dx
|
||||||
|
cmp dx,2
|
||||||
|
jne .unknown
|
||||||
|
pop si ! descriptor address
|
||||||
|
pop ax ! index
|
||||||
|
pop di ! array base
|
||||||
|
push bx
|
||||||
|
jmp .sar2
|
23
mach/i86/libem/lar2.s
Normal file
23
mach/i86/libem/lar2.s
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
.define .lar2
|
||||||
|
|
||||||
|
.lar2:
|
||||||
|
! $Header$
|
||||||
|
pop bx ! return address
|
||||||
|
! di, descriptor address
|
||||||
|
! ax, index
|
||||||
|
! si, base address
|
||||||
|
sub ax,(di)
|
||||||
|
mov cx,4(di)
|
||||||
|
imul cx
|
||||||
|
add si,ax
|
||||||
|
sar cx,1
|
||||||
|
jnb 1f
|
||||||
|
xorb ah,ah
|
||||||
|
lodsb
|
||||||
|
push ax
|
||||||
|
jmp bx
|
||||||
|
1:
|
||||||
|
sub sp,4(di)
|
||||||
|
mov di,sp
|
||||||
|
rep movs
|
||||||
|
jmp bx
|
19
mach/i86/libem/loi.s
Normal file
19
mach/i86/libem/loi.s
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
.define .loi
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in cx
|
||||||
|
! source address in si
|
||||||
|
.loi:
|
||||||
|
pop bx
|
||||||
|
mov dx,cx
|
||||||
|
sar cx,1
|
||||||
|
jnb 1f
|
||||||
|
xorb ah,ah
|
||||||
|
lodsb
|
||||||
|
push ax
|
||||||
|
jmp bx
|
||||||
|
1:
|
||||||
|
sub sp,dx
|
||||||
|
mov di,sp
|
||||||
|
rep movs
|
||||||
|
jmp bx
|
27
mach/i86/libem/mli.s
Normal file
27
mach/i86/libem/mli.s
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
.define .mli
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in ax
|
||||||
|
.mli:
|
||||||
|
pop bx ! return address
|
||||||
|
cmp ax,2
|
||||||
|
jne 1f
|
||||||
|
pop ax
|
||||||
|
pop cx
|
||||||
|
mul cx
|
||||||
|
push ax
|
||||||
|
jmp bx
|
||||||
|
1:
|
||||||
|
mov dx,bx
|
||||||
|
cmp ax,4
|
||||||
|
jne 9f
|
||||||
|
pop si
|
||||||
|
pop di
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
push dx
|
||||||
|
jmp .mli4
|
||||||
|
9:
|
||||||
|
mov ax,EODDZ
|
||||||
|
push ax
|
||||||
|
jmp .trp
|
17
mach/i86/libem/mli4.s
Normal file
17
mach/i86/libem/mli4.s
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
.define .mli4
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! x * y with
|
||||||
|
! x.low = si x.high = di
|
||||||
|
! y.low = bx y.high = ax
|
||||||
|
|
||||||
|
.mli4:
|
||||||
|
mul si ! xl*yh
|
||||||
|
mov cx,ax
|
||||||
|
mov ax,di
|
||||||
|
mul bx ! xh*yl
|
||||||
|
add cx,ax ! xh*yl+xl*yh
|
||||||
|
mov ax,si
|
||||||
|
mul bx ! xl*yl
|
||||||
|
add dx,cx
|
||||||
|
ret
|
5
mach/i86/libem/mon.s
Normal file
5
mach/i86/libem/mon.s
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
.define .mon
|
||||||
|
|
||||||
|
.mon:
|
||||||
|
! $Header$
|
||||||
|
call .stop
|
27
mach/i86/libem/ngi.s
Normal file
27
mach/i86/libem/ngi.s
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
.define .ngi
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in ax
|
||||||
|
.ngi:
|
||||||
|
pop bx ! return address
|
||||||
|
cmp ax,2
|
||||||
|
jne 1f
|
||||||
|
pop cx
|
||||||
|
neg cx
|
||||||
|
push cx
|
||||||
|
jmp bx
|
||||||
|
1:
|
||||||
|
cmp ax,4
|
||||||
|
jne 9f
|
||||||
|
pop dx
|
||||||
|
pop ax
|
||||||
|
neg ax
|
||||||
|
neg dx
|
||||||
|
sbb ax,0
|
||||||
|
push dx
|
||||||
|
push ax
|
||||||
|
jmp bx
|
||||||
|
9:
|
||||||
|
mov ax,EODDZ
|
||||||
|
push ax
|
||||||
|
jmp .trp
|
22
mach/i86/libem/nop.s
Normal file
22
mach/i86/libem/nop.s
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
.define .nop
|
||||||
|
|
||||||
|
SIO_S = 0xDA
|
||||||
|
SIO_D = 0xD8
|
||||||
|
RXRDY = 0x02
|
||||||
|
|
||||||
|
.nop:
|
||||||
|
! $Header$
|
||||||
|
mov ax,(hol0)
|
||||||
|
call printd
|
||||||
|
! movb al,' '
|
||||||
|
! call printc
|
||||||
|
! mov ax,sp
|
||||||
|
! call printd
|
||||||
|
!1:
|
||||||
|
! inb SIO_S
|
||||||
|
! andb al,RXRDY
|
||||||
|
! jz 1b
|
||||||
|
! inb SIO_D
|
||||||
|
! call printc
|
||||||
|
movb al,'\n'
|
||||||
|
jmp printc
|
47
mach/i86/libem/print.s
Normal file
47
mach/i86/libem/print.s
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
.define printc,printd,prints
|
||||||
|
|
||||||
|
SIO_D = 0xD8
|
||||||
|
SIO_S = 0xDA
|
||||||
|
TXRDY = 0x01
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! argument in ax
|
||||||
|
! uses bx
|
||||||
|
prints:
|
||||||
|
xchg ax,bx
|
||||||
|
1:
|
||||||
|
movb al,(bx)
|
||||||
|
inc bx
|
||||||
|
testb al,al
|
||||||
|
jz 2f
|
||||||
|
call printc
|
||||||
|
jmp 1b
|
||||||
|
2:
|
||||||
|
ret
|
||||||
|
|
||||||
|
! argument in ax
|
||||||
|
! uses cx and dx
|
||||||
|
printd:
|
||||||
|
xor dx,dx
|
||||||
|
mov cx,10
|
||||||
|
div cx
|
||||||
|
test ax,ax
|
||||||
|
jz 1f
|
||||||
|
push dx
|
||||||
|
call printd
|
||||||
|
pop dx
|
||||||
|
1:
|
||||||
|
xchg ax,dx
|
||||||
|
addb al,'0'
|
||||||
|
.errnz printc - .
|
||||||
|
|
||||||
|
! argument in ax
|
||||||
|
printc:
|
||||||
|
push ax
|
||||||
|
1:
|
||||||
|
inb SIO_S
|
||||||
|
andb al,TXRDY
|
||||||
|
jz 1b
|
||||||
|
pop ax
|
||||||
|
outb SIO_D
|
||||||
|
ret
|
38
mach/i86/libem/printf.s
Normal file
38
mach/i86/libem/printf.s
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
.define printf
|
||||||
|
|
||||||
|
printf:
|
||||||
|
! $Header$
|
||||||
|
pop bx ! return address
|
||||||
|
xchg ax,di
|
||||||
|
mov si,sp
|
||||||
|
1:
|
||||||
|
movb al,(di)
|
||||||
|
inc di
|
||||||
|
testb al,al
|
||||||
|
jz 6f
|
||||||
|
cmpb al,'%'
|
||||||
|
je 3f
|
||||||
|
2:
|
||||||
|
call printc
|
||||||
|
jmp 1b
|
||||||
|
3:
|
||||||
|
movb al,(di)
|
||||||
|
inc di
|
||||||
|
cmpb al,'c'
|
||||||
|
jne 4f
|
||||||
|
lods
|
||||||
|
jmp 2b
|
||||||
|
4:
|
||||||
|
cmpb al,'d'
|
||||||
|
jne 5f
|
||||||
|
lods
|
||||||
|
call printd
|
||||||
|
jmp 1b
|
||||||
|
5:
|
||||||
|
cmpb al,'s'
|
||||||
|
jne 2b
|
||||||
|
lods
|
||||||
|
call prints
|
||||||
|
jmp 1b
|
||||||
|
6:
|
||||||
|
jmp bx
|
17
mach/i86/libem/rck.s
Normal file
17
mach/i86/libem/rck.s
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
.define .rck
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! descriptor address in si
|
||||||
|
! value in ax, must be left there
|
||||||
|
.rck:
|
||||||
|
cmp ax,(si)
|
||||||
|
jl 2f
|
||||||
|
cmp ax,2(si)
|
||||||
|
jg 2f
|
||||||
|
ret
|
||||||
|
2:
|
||||||
|
push ax
|
||||||
|
mov ax,ERANGE
|
||||||
|
call .error
|
||||||
|
pop ax
|
||||||
|
ret
|
35
mach/i86/libem/rmi.s
Normal file
35
mach/i86/libem/rmi.s
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
.define .rmi
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in ax
|
||||||
|
.rmi:
|
||||||
|
pop bx ! return address
|
||||||
|
cmp ax,2
|
||||||
|
jne 1f
|
||||||
|
pop ax
|
||||||
|
cwd
|
||||||
|
pop cx
|
||||||
|
idiv cx
|
||||||
|
push dx
|
||||||
|
jmp bx
|
||||||
|
1:
|
||||||
|
cmp ax,4
|
||||||
|
jne 9f
|
||||||
|
pop ax
|
||||||
|
pop dx
|
||||||
|
pop si
|
||||||
|
pop di
|
||||||
|
push bx
|
||||||
|
push di
|
||||||
|
push si
|
||||||
|
push dx
|
||||||
|
push ax
|
||||||
|
call .rmi4
|
||||||
|
pop ax
|
||||||
|
push bx
|
||||||
|
push dx
|
||||||
|
jmp ax
|
||||||
|
9:
|
||||||
|
mov ax,EODDZ
|
||||||
|
push ax
|
||||||
|
jmp .trp
|
83
mach/i86/libem/rmi4.s
Normal file
83
mach/i86/libem/rmi4.s
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
.define .rmi4
|
||||||
|
|
||||||
|
yl=2
|
||||||
|
yh=4
|
||||||
|
xl=6
|
||||||
|
xh=8
|
||||||
|
|
||||||
|
.rmi4:
|
||||||
|
! $Header$
|
||||||
|
mov si,sp ! copy of sp
|
||||||
|
mov bx,yl(si)
|
||||||
|
mov ax,yh(si)
|
||||||
|
cwd
|
||||||
|
cmp dx,ax
|
||||||
|
jne 7f
|
||||||
|
and dx,dx
|
||||||
|
jge 1f
|
||||||
|
neg bx
|
||||||
|
je 7f
|
||||||
|
1:
|
||||||
|
xor dx,dx
|
||||||
|
mov cx,xl(si)
|
||||||
|
mov ax,xh(si)
|
||||||
|
and ax,ax
|
||||||
|
jge 2f
|
||||||
|
neg ax
|
||||||
|
neg cx
|
||||||
|
sbb ax,dx
|
||||||
|
2:
|
||||||
|
div bx
|
||||||
|
xchg ax,cx
|
||||||
|
div bx ! dx= result(low), 0=result(high)
|
||||||
|
xor bx,bx
|
||||||
|
9:
|
||||||
|
cmp xh(si),0
|
||||||
|
jge 1f
|
||||||
|
neg bx
|
||||||
|
neg dx
|
||||||
|
sbb bx,0
|
||||||
|
1:
|
||||||
|
! bx is high order result
|
||||||
|
! dx is low order result
|
||||||
|
ret 8
|
||||||
|
|
||||||
|
7:
|
||||||
|
mov di,ax
|
||||||
|
xor bx,bx
|
||||||
|
and di,di
|
||||||
|
jge 1f
|
||||||
|
neg di
|
||||||
|
neg yl(si)
|
||||||
|
sbb di,bx
|
||||||
|
1:
|
||||||
|
mov ax,xl(si)
|
||||||
|
mov dx,xh(si)
|
||||||
|
and dx,dx
|
||||||
|
jge 1f
|
||||||
|
neg dx
|
||||||
|
neg ax
|
||||||
|
sbb dx,bx
|
||||||
|
1:
|
||||||
|
mov cx,16
|
||||||
|
1:
|
||||||
|
shl ax,1
|
||||||
|
rcl dx,1
|
||||||
|
rcl bx,1
|
||||||
|
cmp di,bx
|
||||||
|
ja 3f
|
||||||
|
jb 2f
|
||||||
|
cmp yl(si),dx
|
||||||
|
jbe 2f
|
||||||
|
3:
|
||||||
|
loop 1b
|
||||||
|
! dx=result(low), bx=result(high)
|
||||||
|
jmp 9b
|
||||||
|
2:
|
||||||
|
sub dx,yl(si)
|
||||||
|
sbb bx,di
|
||||||
|
inc ax
|
||||||
|
loop 1b
|
||||||
|
1:
|
||||||
|
! dx=result(low), bx=result(high)
|
||||||
|
jmp 9b
|
35
mach/i86/libem/rmu.s
Normal file
35
mach/i86/libem/rmu.s
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
.define .rmu
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in ax
|
||||||
|
.rmu:
|
||||||
|
pop bx ! return address
|
||||||
|
cmp ax,2
|
||||||
|
jne 1f
|
||||||
|
pop ax
|
||||||
|
xor dx,dx
|
||||||
|
pop cx
|
||||||
|
idiv cx
|
||||||
|
push dx
|
||||||
|
jmp bx
|
||||||
|
1:
|
||||||
|
cmp ax,4
|
||||||
|
jne 9f
|
||||||
|
pop ax
|
||||||
|
pop dx
|
||||||
|
pop si
|
||||||
|
pop di
|
||||||
|
push bx
|
||||||
|
push di
|
||||||
|
push si
|
||||||
|
push dx
|
||||||
|
push ax
|
||||||
|
call .rmu4
|
||||||
|
pop ax
|
||||||
|
push bx
|
||||||
|
push dx
|
||||||
|
jmp ax
|
||||||
|
9:
|
||||||
|
mov ax,EODDZ
|
||||||
|
push ax
|
||||||
|
jmp .trp
|
55
mach/i86/libem/rmu4.s
Normal file
55
mach/i86/libem/rmu4.s
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
.define .rmu4
|
||||||
|
|
||||||
|
yl=2
|
||||||
|
yh=4
|
||||||
|
xl=6
|
||||||
|
xh=8
|
||||||
|
|
||||||
|
.rmu4:
|
||||||
|
! $Header$
|
||||||
|
mov si,sp ! copy of sp
|
||||||
|
mov bx,yl(si)
|
||||||
|
mov ax,yh(si)
|
||||||
|
or ax,ax
|
||||||
|
jne 7f
|
||||||
|
1:
|
||||||
|
xor dx,dx
|
||||||
|
mov cx,xl(si)
|
||||||
|
mov ax,xh(si)
|
||||||
|
2:
|
||||||
|
div bx
|
||||||
|
xchg ax,cx
|
||||||
|
div bx
|
||||||
|
xor bx,bx
|
||||||
|
9:
|
||||||
|
! bx is high order result
|
||||||
|
! dx is low order result
|
||||||
|
ret 8
|
||||||
|
|
||||||
|
7:
|
||||||
|
mov di,ax
|
||||||
|
xor bx,bx
|
||||||
|
mov ax,xl(si)
|
||||||
|
mov dx,xh(si)
|
||||||
|
mov cx,16
|
||||||
|
1:
|
||||||
|
shl ax,1
|
||||||
|
rcl dx,1
|
||||||
|
rcl bx,1
|
||||||
|
cmp di,bx
|
||||||
|
ja 3f
|
||||||
|
jb 2f
|
||||||
|
cmp yl(si),dx
|
||||||
|
jbe 2f
|
||||||
|
3:
|
||||||
|
loop 1b
|
||||||
|
! dx=result(low), bx=result(high)
|
||||||
|
jmp 9b
|
||||||
|
2:
|
||||||
|
sub dx,yl(si)
|
||||||
|
sbb bx,di
|
||||||
|
inc ax
|
||||||
|
loop 1b
|
||||||
|
1:
|
||||||
|
! dx=result(low), bx=result(high)
|
||||||
|
jmp 9b
|
33
mach/i86/libem/rol.s
Normal file
33
mach/i86/libem/rol.s
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
.define .rol
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in ax
|
||||||
|
.rol:
|
||||||
|
pop dx ! return address
|
||||||
|
cmp ax,2
|
||||||
|
jne 1f
|
||||||
|
pop ax
|
||||||
|
pop cx
|
||||||
|
rol ax,cl
|
||||||
|
push ax
|
||||||
|
jmp dx
|
||||||
|
1:
|
||||||
|
cmp ax,4
|
||||||
|
jne 9f
|
||||||
|
pop cx
|
||||||
|
jcxz 2f
|
||||||
|
pop ax
|
||||||
|
pop bx
|
||||||
|
3:
|
||||||
|
sal ax,1
|
||||||
|
rcl bx,1
|
||||||
|
adc ax,0
|
||||||
|
loop 3b
|
||||||
|
push bx
|
||||||
|
push ax
|
||||||
|
2:
|
||||||
|
jmp dx
|
||||||
|
9:
|
||||||
|
mov ax,EODDZ
|
||||||
|
push ax
|
||||||
|
jmp .trp
|
34
mach/i86/libem/ror.s
Normal file
34
mach/i86/libem/ror.s
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
.define .ror
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in ax
|
||||||
|
.ror:
|
||||||
|
pop dx ! return address
|
||||||
|
cmp ax,2
|
||||||
|
jne 1f
|
||||||
|
pop ax
|
||||||
|
pop cx
|
||||||
|
ror ax,cl
|
||||||
|
push ax
|
||||||
|
jmp dx
|
||||||
|
1:
|
||||||
|
cmp ax,4
|
||||||
|
jne 9f
|
||||||
|
pop cx
|
||||||
|
jcxz 2f
|
||||||
|
neg cx
|
||||||
|
add cx,32
|
||||||
|
pop ax
|
||||||
|
pop bx
|
||||||
|
3:
|
||||||
|
sar bx,1
|
||||||
|
rcr ax,1
|
||||||
|
loop 3b
|
||||||
|
push bx
|
||||||
|
push ax
|
||||||
|
2:
|
||||||
|
jmp dx
|
||||||
|
9:
|
||||||
|
mov ax,EODDZ
|
||||||
|
push ax
|
||||||
|
jmp .trp
|
22
mach/i86/libem/sar2.s
Normal file
22
mach/i86/libem/sar2.s
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
.define .sar2
|
||||||
|
|
||||||
|
.sar2:
|
||||||
|
! $Header$
|
||||||
|
pop bx ! return address
|
||||||
|
! si, descriptor address
|
||||||
|
! ax, index
|
||||||
|
! di, base address
|
||||||
|
sub ax,(si)
|
||||||
|
mov cx,4(si)
|
||||||
|
imul cx
|
||||||
|
add di,ax
|
||||||
|
sar cx,1
|
||||||
|
jnb 1f
|
||||||
|
pop ax
|
||||||
|
stosb
|
||||||
|
jmp bx
|
||||||
|
1:
|
||||||
|
mov si,sp
|
||||||
|
rep movs
|
||||||
|
mov sp,si
|
||||||
|
jmp bx
|
27
mach/i86/libem/sbi.s
Normal file
27
mach/i86/libem/sbi.s
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
.define .sbi
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in cx , top of stack in ax
|
||||||
|
.sbi:
|
||||||
|
pop bx ! return subress
|
||||||
|
cmp cx,2
|
||||||
|
jne 1f
|
||||||
|
pop cx
|
||||||
|
sub ax,cx
|
||||||
|
neg ax
|
||||||
|
jmp bx
|
||||||
|
1:
|
||||||
|
cmp cx,4
|
||||||
|
jne 9f
|
||||||
|
pop dx
|
||||||
|
pop cx
|
||||||
|
sub cx,ax
|
||||||
|
mov ax,cx
|
||||||
|
pop cx
|
||||||
|
sbc cx,dx
|
||||||
|
push cx
|
||||||
|
jmp bx
|
||||||
|
9:
|
||||||
|
mov ax,EODDZ
|
||||||
|
push ax
|
||||||
|
jmp .trp
|
35
mach/i86/libem/set.s
Normal file
35
mach/i86/libem/set.s
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
.define .set
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in cx
|
||||||
|
! bit # in ax
|
||||||
|
.set:
|
||||||
|
pop bx ! return address
|
||||||
|
xor dx,dx
|
||||||
|
!ifdef create set
|
||||||
|
mov di,sp
|
||||||
|
sub di,cx
|
||||||
|
1:
|
||||||
|
push dx
|
||||||
|
cmp sp,di
|
||||||
|
ja 1b
|
||||||
|
!endif
|
||||||
|
mov di,8
|
||||||
|
div di
|
||||||
|
cmp ax,cx
|
||||||
|
jae 2f
|
||||||
|
mov di,sp
|
||||||
|
add di,ax
|
||||||
|
mov si,dx
|
||||||
|
movb dl,bits(si)
|
||||||
|
orb (di),dl
|
||||||
|
jmp bx
|
||||||
|
2:
|
||||||
|
push bx
|
||||||
|
mov ax,ESET
|
||||||
|
push ax
|
||||||
|
jmp .trp
|
||||||
|
|
||||||
|
.data
|
||||||
|
bits:
|
||||||
|
.byte 1,2,4,8,16,32,64,128
|
32
mach/i86/libem/sli.s
Normal file
32
mach/i86/libem/sli.s
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
.define .sli
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in ax
|
||||||
|
.sli:
|
||||||
|
pop dx ! return address
|
||||||
|
cmp ax,2
|
||||||
|
jne 1f
|
||||||
|
pop ax
|
||||||
|
pop cx
|
||||||
|
sal ax,cl
|
||||||
|
push ax
|
||||||
|
jmp dx
|
||||||
|
1:
|
||||||
|
cmp ax,4
|
||||||
|
jne 9f
|
||||||
|
pop cx
|
||||||
|
jcxz 2f
|
||||||
|
pop ax
|
||||||
|
pop bx
|
||||||
|
3:
|
||||||
|
sal ax,1
|
||||||
|
rcl bx,1
|
||||||
|
loop 3b
|
||||||
|
push bx
|
||||||
|
push ax
|
||||||
|
2:
|
||||||
|
jmp dx
|
||||||
|
9:
|
||||||
|
mov ax,EODDZ
|
||||||
|
push ax
|
||||||
|
jmp .trp
|
32
mach/i86/libem/sri.s
Normal file
32
mach/i86/libem/sri.s
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
.define .sri
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in ax
|
||||||
|
.sri:
|
||||||
|
pop dx ! return address
|
||||||
|
cmp ax,2
|
||||||
|
jne 1f
|
||||||
|
pop ax
|
||||||
|
pop cx
|
||||||
|
sar ax,cl
|
||||||
|
push ax
|
||||||
|
jmp dx
|
||||||
|
1:
|
||||||
|
cmp ax,4
|
||||||
|
jne 9f
|
||||||
|
pop cx
|
||||||
|
jcxz 2f
|
||||||
|
pop ax
|
||||||
|
pop bx
|
||||||
|
3:
|
||||||
|
sar bx,1
|
||||||
|
rcr ax,1
|
||||||
|
loop 3b
|
||||||
|
push bx
|
||||||
|
push ax
|
||||||
|
2:
|
||||||
|
jmp dx
|
||||||
|
9:
|
||||||
|
mov ax,EODDZ
|
||||||
|
push ax
|
||||||
|
jmp .trp
|
17
mach/i86/libem/sti.s
Normal file
17
mach/i86/libem/sti.s
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
.define .sti
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in cx
|
||||||
|
! destination address in di
|
||||||
|
.sti:
|
||||||
|
pop bx ! return address
|
||||||
|
sar cx,1
|
||||||
|
jnb 1f
|
||||||
|
pop ax
|
||||||
|
stosb
|
||||||
|
jmp bx
|
||||||
|
1:
|
||||||
|
mov si,sp
|
||||||
|
rep movs
|
||||||
|
mov sp,si
|
||||||
|
jmp bx
|
4
mach/i86/libem/stop.s
Normal file
4
mach/i86/libem/stop.s
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
.define .stop
|
||||||
|
.stop:
|
||||||
|
! $Header$
|
||||||
|
int 3
|
19
mach/i86/libem/strhp.s
Normal file
19
mach/i86/libem/strhp.s
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
.define .strhp
|
||||||
|
|
||||||
|
.strhp:
|
||||||
|
! $Header$
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
mov (.reghp),ax
|
||||||
|
cmp ax,(.limhp)
|
||||||
|
jb 1f
|
||||||
|
add ax,02000
|
||||||
|
and ax,~0777
|
||||||
|
mov (.limhp),ax
|
||||||
|
cmp ax,sp
|
||||||
|
jae 2f
|
||||||
|
1:
|
||||||
|
jmp bx
|
||||||
|
2:
|
||||||
|
mov ax,EHEAP
|
||||||
|
jmp .fat
|
16
mach/i86/libem/tail.s
Normal file
16
mach/i86/libem/tail.s
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
.define endtext,enddata,endbss
|
||||||
|
.define _end,_etext,_edata
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
.text
|
||||||
|
endtext:
|
||||||
|
_etext:
|
||||||
|
.align 2
|
||||||
|
.data
|
||||||
|
enddata:
|
||||||
|
_edata:
|
||||||
|
.align 2
|
||||||
|
.bss
|
||||||
|
_end:
|
||||||
|
endbss:
|
||||||
|
.align 2
|
15
mach/i86/libem/trp.s
Normal file
15
mach/i86/libem/trp.s
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
.define .trp
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! ax is trap number
|
||||||
|
.trp:
|
||||||
|
xor bx,bx
|
||||||
|
xchg bx,(.trppc)
|
||||||
|
test bx,bx
|
||||||
|
jz 2f
|
||||||
|
push ax
|
||||||
|
call bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
2:
|
||||||
|
call .stop
|
7
mach/i86/libem/unknown.s
Normal file
7
mach/i86/libem/unknown.s
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
.define .unknown
|
||||||
|
|
||||||
|
.unknown:
|
||||||
|
! $Header$
|
||||||
|
mov ax,EILLINS
|
||||||
|
push ax
|
||||||
|
jmp .fat
|
15
mach/i86/libem/xor.s
Normal file
15
mach/i86/libem/xor.s
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
.define .xor
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
! #bytes in cx
|
||||||
|
.xor:
|
||||||
|
pop bx ! return address
|
||||||
|
mov di,sp
|
||||||
|
add di,cx
|
||||||
|
sar cx,1
|
||||||
|
1:
|
||||||
|
pop ax
|
||||||
|
xor ax,(di)
|
||||||
|
stos
|
||||||
|
loop 1b
|
||||||
|
jmp bx
|
Loading…
Reference in a new issue