Initial revision
This commit is contained in:
parent
b45706ce7a
commit
c951295521
5
mach/i386/libem/.distr
Normal file
5
mach/i386/libem/.distr
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
LIST
|
||||||
|
Makefile
|
||||||
|
compmodule
|
||||||
|
end.s
|
||||||
|
libem_s.a
|
47
mach/i386/libem/LIST
Normal file
47
mach/i386/libem/LIST
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
libem_s.a
|
||||||
|
adi.s
|
||||||
|
and.s
|
||||||
|
blm.s
|
||||||
|
cii.s
|
||||||
|
cms.s
|
||||||
|
com.s
|
||||||
|
csa4.s
|
||||||
|
csb4.s
|
||||||
|
cuu.s
|
||||||
|
dup.s
|
||||||
|
dvi.s
|
||||||
|
dvu.s
|
||||||
|
error.s
|
||||||
|
exg.s
|
||||||
|
fakfp.s
|
||||||
|
fat.s
|
||||||
|
gto.s
|
||||||
|
iaar.s
|
||||||
|
ilar.s
|
||||||
|
inn.s
|
||||||
|
ior.s
|
||||||
|
isar.s
|
||||||
|
lar4.s
|
||||||
|
loi.s
|
||||||
|
mli.s
|
||||||
|
mon.s
|
||||||
|
ngi.s
|
||||||
|
nop.s
|
||||||
|
print.s
|
||||||
|
rck.s
|
||||||
|
return.s
|
||||||
|
rmi.s
|
||||||
|
rmu.s
|
||||||
|
rol.s
|
||||||
|
ror.s
|
||||||
|
sar4.s
|
||||||
|
sbi.s
|
||||||
|
set.s
|
||||||
|
sli.s
|
||||||
|
sri.s
|
||||||
|
sti.s
|
||||||
|
stop.s
|
||||||
|
strhp.s
|
||||||
|
trp.s
|
||||||
|
unknown.s
|
||||||
|
xor.s
|
30
mach/i386/libem/Makefile
Normal file
30
mach/i386/libem/Makefile
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# $Header$
|
||||||
|
MACH=i386
|
||||||
|
|
||||||
|
all: libem_o.a end.o
|
||||||
|
|
||||||
|
install: all
|
||||||
|
../../install libem_o.a tail_em
|
||||||
|
../../install end.o end_em
|
||||||
|
|
||||||
|
cmp: all
|
||||||
|
-../../compare libem_o.a tail_em
|
||||||
|
-../../compare end.o end_em
|
||||||
|
|
||||||
|
|
||||||
|
end.o: end.s
|
||||||
|
$(MACH) -I../../../h -O -c end.s
|
||||||
|
|
||||||
|
libem_o.a: libem_s.a
|
||||||
|
ASAR=aal ; export ASAR ;\
|
||||||
|
march . libem_o.a
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o libem_o.a
|
||||||
|
|
||||||
|
opr :
|
||||||
|
make pr | opr
|
||||||
|
|
||||||
|
pr:
|
||||||
|
@arch pv libem_s.a | pr -h `pwd`/libem_s.a
|
||||||
|
@pr `pwd`/end.s
|
18
mach/i386/libem/adi.s
Normal file
18
mach/i386/libem/adi.s
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.define .adi
|
||||||
|
|
||||||
|
! #bytes in ecx , top of stack in eax
|
||||||
|
.sect .text
|
||||||
|
.adi:
|
||||||
|
pop ebx ! return address
|
||||||
|
cmp ecx,4
|
||||||
|
jne 9f
|
||||||
|
pop ecx
|
||||||
|
add eax,ecx
|
||||||
|
jmp ebx
|
||||||
|
9:
|
||||||
|
.extern EODDZ
|
||||||
|
.extern .trp
|
||||||
|
mov eax,EODDZ
|
||||||
|
push ebx
|
||||||
|
jmp .trp
|
20
mach/i386/libem/and.s
Normal file
20
mach/i386/libem/and.s
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.define .and
|
||||||
|
|
||||||
|
! #bytes in ecx
|
||||||
|
! save edi; it might be a register variable
|
||||||
|
|
||||||
|
.sect .text
|
||||||
|
.and:
|
||||||
|
pop ebx ! return address
|
||||||
|
mov edx,edi
|
||||||
|
mov edi,esp
|
||||||
|
add edi,ecx
|
||||||
|
sar ecx,2
|
||||||
|
1:
|
||||||
|
pop eax
|
||||||
|
and eax,(edi)
|
||||||
|
stos
|
||||||
|
loop 1b
|
||||||
|
mov edi,edx
|
||||||
|
jmp ebx
|
15
mach/i386/libem/blm.s
Normal file
15
mach/i386/libem/blm.s
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
.sect .text
|
||||||
|
.define .blm
|
||||||
|
|
||||||
|
! ecx: count in words
|
||||||
|
.blm:
|
||||||
|
mov ebx,esp
|
||||||
|
mov eax,esi
|
||||||
|
mov edx,edi
|
||||||
|
mov edi,4(ebx)
|
||||||
|
mov esi,8(ebx)
|
||||||
|
rep movs
|
||||||
|
mov esi,eax
|
||||||
|
mov edi,edx
|
||||||
|
ret 8
|
||||||
|
|
33
mach/i386/libem/cii.s
Normal file
33
mach/i386/libem/cii.s
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.define .cii
|
||||||
|
|
||||||
|
.sect .text
|
||||||
|
.cii:
|
||||||
|
pop ebx ! return address
|
||||||
|
! pop ecx, dest. size
|
||||||
|
! pop edx, src. size
|
||||||
|
! eax is source
|
||||||
|
cmp edx,1
|
||||||
|
jne 2f
|
||||||
|
o16 cbw ! needs operand size toggle to convert
|
||||||
|
! from one to two bytes.
|
||||||
|
cwde
|
||||||
|
mov edx,4
|
||||||
|
jmp 1f
|
||||||
|
2:
|
||||||
|
cmp edx,2
|
||||||
|
jne 1f
|
||||||
|
cwde ! convert from 2 to 4 bytes
|
||||||
|
mov edx,4
|
||||||
|
1:
|
||||||
|
cmp edx,ecx
|
||||||
|
jne 9f
|
||||||
|
cmp edx,4
|
||||||
|
jne 9f
|
||||||
|
jmp ebx
|
||||||
|
9:
|
||||||
|
.extern EILLINS
|
||||||
|
.extern .fat
|
||||||
|
mov eax,EILLINS
|
||||||
|
push eax
|
||||||
|
jmp .fat
|
23
mach/i386/libem/cms.s
Normal file
23
mach/i386/libem/cms.s
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.define .cms
|
||||||
|
|
||||||
|
! #bytes in ecx
|
||||||
|
.sect .text
|
||||||
|
.cms:
|
||||||
|
pop ebx ! return address
|
||||||
|
mov edx,esp
|
||||||
|
push esi
|
||||||
|
push edi
|
||||||
|
mov esi,edx
|
||||||
|
add edx,ecx
|
||||||
|
mov edi,edx
|
||||||
|
add edx,ecx
|
||||||
|
sar ecx,2
|
||||||
|
repe cmps
|
||||||
|
je 1f
|
||||||
|
inc ecx
|
||||||
|
1:
|
||||||
|
pop edi
|
||||||
|
pop esi
|
||||||
|
mov esp,edx
|
||||||
|
jmp ebx
|
14
mach/i386/libem/com.s
Normal file
14
mach/i386/libem/com.s
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.define .com
|
||||||
|
|
||||||
|
! #bytes in ecx
|
||||||
|
.sect .text
|
||||||
|
.com:
|
||||||
|
mov ebx,esp
|
||||||
|
add ebx,4
|
||||||
|
sar ecx,2
|
||||||
|
1:
|
||||||
|
not (ebx)
|
||||||
|
add ebx,4
|
||||||
|
loop 1b
|
||||||
|
ret
|
4
mach/i386/libem/compmodule
Executable file
4
mach/i386/libem/compmodule
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
if i386 -c $1 1>&2
|
||||||
|
then echo `basename $1 $2`.o
|
||||||
|
else exit 1
|
||||||
|
fi
|
27
mach/i386/libem/csa4.s
Normal file
27
mach/i386/libem/csa4.s
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.define .csa4
|
||||||
|
|
||||||
|
.sect .text
|
||||||
|
.csa4:
|
||||||
|
! ebx, descriptor address
|
||||||
|
! eax, index
|
||||||
|
mov edx,(ebx) ! default
|
||||||
|
sub eax,4(ebx)
|
||||||
|
cmp eax,8(ebx)
|
||||||
|
ja 1f
|
||||||
|
sal eax,2
|
||||||
|
add ebx,eax
|
||||||
|
mov ebx,12(ebx)
|
||||||
|
test ebx,ebx
|
||||||
|
jnz 2f
|
||||||
|
1:
|
||||||
|
mov ebx,edx
|
||||||
|
test ebx,ebx
|
||||||
|
jnz 2f
|
||||||
|
.extern ECASE
|
||||||
|
.extern .fat
|
||||||
|
mov eax,ECASE
|
||||||
|
push eax
|
||||||
|
jmp .fat
|
||||||
|
2:
|
||||||
|
jmp ebx
|
29
mach/i386/libem/csb4.s
Normal file
29
mach/i386/libem/csb4.s
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.define .csb4
|
||||||
|
|
||||||
|
.sect .text
|
||||||
|
.csb4:
|
||||||
|
!ebx, descriptor address
|
||||||
|
!eax, index
|
||||||
|
mov edx,(ebx)
|
||||||
|
mov ecx,4(ebx)
|
||||||
|
1:
|
||||||
|
add ebx,8
|
||||||
|
dec ecx
|
||||||
|
jl 4f
|
||||||
|
cmp eax,(ebx)
|
||||||
|
jne 1b
|
||||||
|
mov ebx,4(ebx)
|
||||||
|
2:
|
||||||
|
test ebx,ebx
|
||||||
|
jnz 3f
|
||||||
|
.extern ECASE
|
||||||
|
.extern .fat
|
||||||
|
mov eax,ECASE
|
||||||
|
push eax
|
||||||
|
jmp .fat
|
||||||
|
3:
|
||||||
|
jmp ebx
|
||||||
|
4:
|
||||||
|
mov ebx,edx
|
||||||
|
jmp 2b
|
22
mach/i386/libem/cuu.s
Normal file
22
mach/i386/libem/cuu.s
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.define .ciu
|
||||||
|
.define .cui
|
||||||
|
.define .cuu
|
||||||
|
|
||||||
|
.sect .text
|
||||||
|
.ciu:
|
||||||
|
.cui:
|
||||||
|
.cuu:
|
||||||
|
pop ebx ! return address
|
||||||
|
! pop ecx, dest. size
|
||||||
|
! pop edx, source size
|
||||||
|
! eax is source
|
||||||
|
cmp edx,ecx
|
||||||
|
jne 8f
|
||||||
|
jmp ebx
|
||||||
|
8:
|
||||||
|
.extern EILLINS
|
||||||
|
.extern .fat
|
||||||
|
mov eax,EILLINS
|
||||||
|
push eax
|
||||||
|
jmp .fat
|
17
mach/i386/libem/dup.s
Normal file
17
mach/i386/libem/dup.s
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.define .dup
|
||||||
|
|
||||||
|
! #bytes in ecx
|
||||||
|
.sect .text
|
||||||
|
.dup:
|
||||||
|
pop ebx ! return address
|
||||||
|
mov eax,esi
|
||||||
|
mov edx,edi
|
||||||
|
mov esi,esp
|
||||||
|
sub esp,ecx
|
||||||
|
mov edi,esp
|
||||||
|
sar ecx,2
|
||||||
|
rep movs
|
||||||
|
mov esi,eax
|
||||||
|
mov edi,edx
|
||||||
|
jmp ebx
|
21
mach/i386/libem/dvi.s
Normal file
21
mach/i386/libem/dvi.s
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.define .dvi
|
||||||
|
|
||||||
|
! #bytes in eax
|
||||||
|
.sect .text
|
||||||
|
.dvi:
|
||||||
|
pop ebx ! return address
|
||||||
|
cmp eax,4
|
||||||
|
jne 1f
|
||||||
|
pop eax
|
||||||
|
cwd
|
||||||
|
pop ecx
|
||||||
|
idiv ecx
|
||||||
|
push eax
|
||||||
|
jmp ebx
|
||||||
|
1:
|
||||||
|
.extern EODDZ
|
||||||
|
.extern .trp
|
||||||
|
mov eax,EODDZ
|
||||||
|
push ebx
|
||||||
|
jmp .trp
|
21
mach/i386/libem/dvu.s
Normal file
21
mach/i386/libem/dvu.s
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.define .dvu
|
||||||
|
|
||||||
|
! #bytes in eax
|
||||||
|
.sect .text
|
||||||
|
.dvu:
|
||||||
|
pop ebx ! return address
|
||||||
|
cmp eax,4
|
||||||
|
jne 1f
|
||||||
|
pop eax
|
||||||
|
xor edx,edx
|
||||||
|
pop ecx
|
||||||
|
div ecx
|
||||||
|
push eax
|
||||||
|
jmp ebx
|
||||||
|
1:
|
||||||
|
.extern EODDZ
|
||||||
|
.extern .trp
|
||||||
|
mov eax,EODDZ
|
||||||
|
push ebx
|
||||||
|
jmp .trp
|
17
mach/i386/libem/end.s
Normal file
17
mach/i386/libem/end.s
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.define endtext,enddata,endbss
|
||||||
|
.define _end,_etext,_edata
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
.sect .text
|
||||||
|
endtext:
|
||||||
|
_etext:
|
||||||
|
.align 4
|
||||||
|
.sect .data
|
||||||
|
enddata:
|
||||||
|
_edata:
|
||||||
|
.align 4
|
||||||
|
.sect .endsect
|
||||||
|
_end:
|
||||||
|
endbss:
|
||||||
|
.align 4
|
42
mach/i386/libem/error.s
Normal file
42
mach/i386/libem/error.s
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.define .error
|
||||||
|
.define .Xtrp
|
||||||
|
|
||||||
|
! eax is trap number
|
||||||
|
! all registers must be saved
|
||||||
|
! because return is possible
|
||||||
|
! May only be called with error no's <16
|
||||||
|
.sect .text
|
||||||
|
.error:
|
||||||
|
push ebp
|
||||||
|
push esi
|
||||||
|
push edi
|
||||||
|
push edx
|
||||||
|
push ecx
|
||||||
|
push ebx
|
||||||
|
push eax
|
||||||
|
mov ecx,eax
|
||||||
|
mov ebx,1
|
||||||
|
sal ebx,cl
|
||||||
|
.extern .ignmask
|
||||||
|
.extern .trp
|
||||||
|
test ebx,(.ignmask)
|
||||||
|
jne 2f
|
||||||
|
call .trp
|
||||||
|
2:
|
||||||
|
pop eax
|
||||||
|
pop ebx
|
||||||
|
pop ecx
|
||||||
|
pop edx
|
||||||
|
pop edi
|
||||||
|
pop esi
|
||||||
|
pop ebp
|
||||||
|
ret
|
||||||
|
|
||||||
|
.Xtrp:
|
||||||
|
cmp eax,16
|
||||||
|
jge 1f
|
||||||
|
call .error
|
||||||
|
ret
|
||||||
|
1:
|
||||||
|
jmp .trp
|
20
mach/i386/libem/exg.s
Normal file
20
mach/i386/libem/exg.s
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.define .exg
|
||||||
|
|
||||||
|
! #bytes in ecx
|
||||||
|
.sect .text
|
||||||
|
.exg:
|
||||||
|
push edi
|
||||||
|
mov esp,edi
|
||||||
|
add edi,8
|
||||||
|
mov ebx,edi
|
||||||
|
add ebx,ecx
|
||||||
|
sar ecx,2
|
||||||
|
1:
|
||||||
|
mov eax,(ebx)
|
||||||
|
xchg eax,(edi)
|
||||||
|
mov (ebx),eax
|
||||||
|
loop 1b
|
||||||
|
2:
|
||||||
|
pop edi
|
||||||
|
ret
|
38
mach/i386/libem/fakfp.s
Normal file
38
mach/i386/libem/fakfp.s
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
.define .adf4, .adf8, .sbf4, .sbf8, .mlf4, .mlf8, .dvf4, .dvf8
|
||||||
|
.define .ngf4, .ngf8, .fif4, .fif8, .fef4, .fef8
|
||||||
|
.define .cif4, .cif8, .cuf4, .cuf8, .cfi, .cfu, .cff4, .cff8
|
||||||
|
.define .cmf4, .cmf8
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
|
||||||
|
! $Header$
|
||||||
|
|
||||||
|
.sect .text
|
||||||
|
.adf4:
|
||||||
|
.adf8:
|
||||||
|
.sbf4:
|
||||||
|
.sbf8:
|
||||||
|
.mlf4:
|
||||||
|
.mlf8:
|
||||||
|
.dvf4:
|
||||||
|
.dvf8:
|
||||||
|
.ngf4:
|
||||||
|
.ngf8:
|
||||||
|
.fif4:
|
||||||
|
.fif8:
|
||||||
|
.fef4:
|
||||||
|
.fef8:
|
||||||
|
.cif4:
|
||||||
|
.cif8:
|
||||||
|
.cuf4:
|
||||||
|
.cuf8:
|
||||||
|
.cfi:
|
||||||
|
.cfu:
|
||||||
|
.cff4:
|
||||||
|
.cff8:
|
||||||
|
.cmf4:
|
||||||
|
.cmf8:
|
||||||
|
mov eax,18 ! illegal instruction EILLINS
|
||||||
|
jmp .trp
|
10
mach/i386/libem/fat.s
Normal file
10
mach/i386/libem/fat.s
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .fat
|
||||||
|
|
||||||
|
.fat:
|
||||||
|
.extern .trp
|
||||||
|
.extern .stop
|
||||||
|
call .trp
|
||||||
|
call .stop
|
||||||
|
! no return
|
8
mach/i386/libem/gto.s
Normal file
8
mach/i386/libem/gto.s
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .gto
|
||||||
|
|
||||||
|
.gto:
|
||||||
|
mov ebp,8(ebx)
|
||||||
|
mov esp,4(ebx)
|
||||||
|
jmp (ebx)
|
19
mach/i386/libem/iaar.s
Normal file
19
mach/i386/libem/iaar.s
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .iaar
|
||||||
|
|
||||||
|
.iaar:
|
||||||
|
pop ecx
|
||||||
|
pop edx
|
||||||
|
cmp edx,4
|
||||||
|
.extern .unknown
|
||||||
|
jne .unknown
|
||||||
|
pop ebx ! descriptor address
|
||||||
|
pop eax ! index
|
||||||
|
pop edx ! array base
|
||||||
|
sub eax,(ebx)
|
||||||
|
mul 8(ebx)
|
||||||
|
mov ebx,edx
|
||||||
|
add ebx,eax
|
||||||
|
push ecx
|
||||||
|
ret
|
15
mach/i386/libem/ilar.s
Normal file
15
mach/i386/libem/ilar.s
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .ilar
|
||||||
|
|
||||||
|
.ilar:
|
||||||
|
pop ecx
|
||||||
|
pop edx
|
||||||
|
.extern .unknown
|
||||||
|
cmp edx,4
|
||||||
|
jne .unknown
|
||||||
|
pop ebx ! descriptor address
|
||||||
|
pop eax ! index
|
||||||
|
push ecx
|
||||||
|
.extern .lar4
|
||||||
|
jmp .lar4
|
32
mach/i386/libem/inn.s
Normal file
32
mach/i386/libem/inn.s
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .inn
|
||||||
|
|
||||||
|
! #bytes in ecx
|
||||||
|
! bit # in eax
|
||||||
|
.inn:
|
||||||
|
xor edx,edx
|
||||||
|
mov ebx,8
|
||||||
|
div ebx
|
||||||
|
mov ebx,esp
|
||||||
|
add ebx,4
|
||||||
|
add ebx,eax
|
||||||
|
cmp eax,ecx
|
||||||
|
jae 1f
|
||||||
|
movb al,(ebx)
|
||||||
|
mov ebx,edx
|
||||||
|
testb al,bits(ebx)
|
||||||
|
jz 1f
|
||||||
|
mov eax,1
|
||||||
|
jmp 2f
|
||||||
|
1:
|
||||||
|
xor eax,eax
|
||||||
|
2:
|
||||||
|
pop ebx
|
||||||
|
add esp,ecx
|
||||||
|
! eax is result
|
||||||
|
jmp ebx
|
||||||
|
|
||||||
|
.sect .rom
|
||||||
|
bits:
|
||||||
|
.data1 1,2,4,8,16,32,64,128
|
18
mach/i386/libem/ior.s
Normal file
18
mach/i386/libem/ior.s
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .ior
|
||||||
|
|
||||||
|
! #bytes in ecx
|
||||||
|
.ior:
|
||||||
|
pop ebx ! return address
|
||||||
|
mov edx,edi
|
||||||
|
mov edi,esp
|
||||||
|
add edi,ecx
|
||||||
|
sar ecx,1
|
||||||
|
1:
|
||||||
|
pop eax
|
||||||
|
or eax,(edi)
|
||||||
|
stos
|
||||||
|
loop 1b
|
||||||
|
mov edi,edx
|
||||||
|
jmp ebx
|
15
mach/i386/libem/isar.s
Normal file
15
mach/i386/libem/isar.s
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .isar
|
||||||
|
|
||||||
|
.isar:
|
||||||
|
pop ecx
|
||||||
|
pop eax
|
||||||
|
cmp eax,4
|
||||||
|
.extern .unknown
|
||||||
|
jne .unknown
|
||||||
|
pop ebx ! descriptor address
|
||||||
|
pop eax ! index
|
||||||
|
push ecx
|
||||||
|
.extern .sar4
|
||||||
|
jmp .sar4
|
40
mach/i386/libem/lar4.s
Normal file
40
mach/i386/libem/lar4.s
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .lar4
|
||||||
|
|
||||||
|
.lar4:
|
||||||
|
! ebx, descriptor address
|
||||||
|
! eax, index
|
||||||
|
pop ecx
|
||||||
|
pop edx ! base address
|
||||||
|
push ecx
|
||||||
|
sub eax,(ebx)
|
||||||
|
mov ecx,8(ebx)
|
||||||
|
imul ecx
|
||||||
|
add edx,eax
|
||||||
|
sar ecx,1
|
||||||
|
jnb 1f
|
||||||
|
xor eax,eax
|
||||||
|
movb al,(edx)
|
||||||
|
pop ebx
|
||||||
|
push eax
|
||||||
|
jmp ebx
|
||||||
|
1:
|
||||||
|
sar ecx,1
|
||||||
|
jnb 1f
|
||||||
|
xor eax,eax
|
||||||
|
o16 mov ax,(edx)
|
||||||
|
pop ebx
|
||||||
|
push eax
|
||||||
|
jmp ebx
|
||||||
|
1:
|
||||||
|
mov edx,esi ! saved esi
|
||||||
|
mov eax,8(ebx)
|
||||||
|
pop ebx ! return address
|
||||||
|
sub esp,eax
|
||||||
|
mov eax,edi ! save edi
|
||||||
|
mov edi,esp
|
||||||
|
rep movs
|
||||||
|
mov edi,eax
|
||||||
|
mov esi,edx
|
||||||
|
jmp ebx
|
44
mach/i386/libem/loi.s
Normal file
44
mach/i386/libem/loi.s
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .loi
|
||||||
|
.define .los
|
||||||
|
|
||||||
|
! #bytes in ecx
|
||||||
|
! address in ebx
|
||||||
|
! save esi/edi. they might be register variables
|
||||||
|
.los:
|
||||||
|
pop edx
|
||||||
|
mov eax,ecx
|
||||||
|
sar ecx,1
|
||||||
|
jnb 1f
|
||||||
|
xor eax,eax
|
||||||
|
movb al,(edx)
|
||||||
|
push eax
|
||||||
|
jmp edx
|
||||||
|
1:
|
||||||
|
sar ecx,1
|
||||||
|
jnb 1f
|
||||||
|
xor eax,eax
|
||||||
|
o16 mov ax,(edx)
|
||||||
|
push eax
|
||||||
|
jmp edx
|
||||||
|
1:
|
||||||
|
mov ebx,edx
|
||||||
|
mov edx,esi
|
||||||
|
sub esp,eax
|
||||||
|
jmp 1f
|
||||||
|
|
||||||
|
.loi:
|
||||||
|
! only called with size >= 4
|
||||||
|
mov edx,esi
|
||||||
|
mov esi,ebx
|
||||||
|
pop ebx
|
||||||
|
sub esp,ecx
|
||||||
|
sar ecx,2
|
||||||
|
1:
|
||||||
|
mov eax,edi
|
||||||
|
mov edi,esp
|
||||||
|
rep movs
|
||||||
|
mov esi,edx
|
||||||
|
mov edi,eax
|
||||||
|
jmp ebx
|
20
mach/i386/libem/mli.s
Normal file
20
mach/i386/libem/mli.s
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .mli
|
||||||
|
|
||||||
|
! #bytes in eax
|
||||||
|
.mli:
|
||||||
|
pop ebx ! return address
|
||||||
|
cmp eax,4
|
||||||
|
jne 1f
|
||||||
|
pop eax
|
||||||
|
pop ecx
|
||||||
|
mul ecx
|
||||||
|
push eax
|
||||||
|
jmp ebx
|
||||||
|
1:
|
||||||
|
.extern EODDZ
|
||||||
|
.extern .trp
|
||||||
|
mov eax,EODDZ
|
||||||
|
push ebx
|
||||||
|
jmp .trp
|
7
mach/i386/libem/mon.s
Normal file
7
mach/i386/libem/mon.s
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .mon
|
||||||
|
|
||||||
|
.mon:
|
||||||
|
.extern .stop
|
||||||
|
call .stop
|
19
mach/i386/libem/ngi.s
Normal file
19
mach/i386/libem/ngi.s
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .ngi
|
||||||
|
|
||||||
|
! #bytes in eax
|
||||||
|
.ngi:
|
||||||
|
pop ebx ! return address
|
||||||
|
cmp eax,4
|
||||||
|
jne 1f
|
||||||
|
pop ecx
|
||||||
|
neg ecx
|
||||||
|
push ecx
|
||||||
|
jmp ebx
|
||||||
|
1:
|
||||||
|
.extern EODDZ
|
||||||
|
.extern .trp
|
||||||
|
mov eax,EODDZ
|
||||||
|
push ebx
|
||||||
|
jmp .trp
|
24
mach/i386/libem/nop.s
Normal file
24
mach/i386/libem/nop.s
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .nop
|
||||||
|
.extern printd, printc, hol0
|
||||||
|
|
||||||
|
SIO_S = 0xDA
|
||||||
|
SIO_D = 0xD8
|
||||||
|
RXRDY = 0x02
|
||||||
|
|
||||||
|
.nop:
|
||||||
|
mov eax,(hol0)
|
||||||
|
call printd
|
||||||
|
! movb al,' '
|
||||||
|
! call printc
|
||||||
|
! mov eax,esp
|
||||||
|
! call printd
|
||||||
|
!1:
|
||||||
|
! inb SIO_S
|
||||||
|
! andb al,RXRDY
|
||||||
|
! jz 1b
|
||||||
|
! inb SIO_D
|
||||||
|
! call printc
|
||||||
|
movb al,'\n'
|
||||||
|
jmp printc
|
47
mach/i386/libem/print.s
Normal file
47
mach/i386/libem/print.s
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define printc,printd,prints
|
||||||
|
|
||||||
|
! argument in eax
|
||||||
|
! uses ebx
|
||||||
|
prints:
|
||||||
|
xchg eax,ebx
|
||||||
|
1:
|
||||||
|
movb al,(ebx)
|
||||||
|
inc ebx
|
||||||
|
testb al,al
|
||||||
|
jz 2f
|
||||||
|
call printc
|
||||||
|
jmp 1b
|
||||||
|
2:
|
||||||
|
ret
|
||||||
|
|
||||||
|
! argument in eax
|
||||||
|
! uses ecx and edx
|
||||||
|
printd:
|
||||||
|
xor edx,edx
|
||||||
|
mov ecx,10
|
||||||
|
div ecx
|
||||||
|
test eax,eax
|
||||||
|
jz 1f
|
||||||
|
push edx
|
||||||
|
call printd
|
||||||
|
pop edx
|
||||||
|
1:
|
||||||
|
xchg eax,edx
|
||||||
|
addb al,'0'
|
||||||
|
|
||||||
|
! argument in eax
|
||||||
|
printc:
|
||||||
|
push eax
|
||||||
|
mov ebx,esp
|
||||||
|
mov eax,1
|
||||||
|
push eax
|
||||||
|
push ebx
|
||||||
|
push eax
|
||||||
|
call _write
|
||||||
|
pop ebx
|
||||||
|
pop ebx
|
||||||
|
pop ebx
|
||||||
|
pop ebx
|
||||||
|
ret
|
20
mach/i386/libem/rck.s
Normal file
20
mach/i386/libem/rck.s
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .rck
|
||||||
|
|
||||||
|
! descriptor address in ebx
|
||||||
|
! value in eax, must be left there
|
||||||
|
.rck:
|
||||||
|
cmp eax,(ebx)
|
||||||
|
jl 2f
|
||||||
|
cmp eax,4(ebx)
|
||||||
|
jg 2f
|
||||||
|
ret
|
||||||
|
2:
|
||||||
|
push eax
|
||||||
|
.extern ERANGE
|
||||||
|
.extern .error
|
||||||
|
mov eax,ERANGE
|
||||||
|
call .error
|
||||||
|
pop eax
|
||||||
|
ret
|
17
mach/i386/libem/return.s
Normal file
17
mach/i386/libem/return.s
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
.define .sdret, .dsret, .sret, .dret, .cret
|
||||||
|
.sect .text
|
||||||
|
|
||||||
|
.dsret:
|
||||||
|
pop edi
|
||||||
|
.sret:
|
||||||
|
pop esi
|
||||||
|
.cret:
|
||||||
|
mov esp,ebp
|
||||||
|
pop ebp
|
||||||
|
ret
|
||||||
|
|
||||||
|
.sdret:
|
||||||
|
pop esi
|
||||||
|
.dret:
|
||||||
|
pop edi
|
||||||
|
jmp .cret
|
21
mach/i386/libem/rmi.s
Normal file
21
mach/i386/libem/rmi.s
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .rmi
|
||||||
|
|
||||||
|
! #bytes in eax
|
||||||
|
.rmi:
|
||||||
|
pop ebx ! return address
|
||||||
|
cmp eax,4
|
||||||
|
jne 1f
|
||||||
|
pop eax
|
||||||
|
cwd
|
||||||
|
pop ecx
|
||||||
|
idiv ecx
|
||||||
|
push edx
|
||||||
|
jmp ebx
|
||||||
|
1:
|
||||||
|
.extern EODDZ
|
||||||
|
.extern .trp
|
||||||
|
mov eax,EODDZ
|
||||||
|
push ebx
|
||||||
|
jmp .trp
|
21
mach/i386/libem/rmu.s
Normal file
21
mach/i386/libem/rmu.s
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .rmu
|
||||||
|
|
||||||
|
! #bytes in eax
|
||||||
|
.rmu:
|
||||||
|
pop ebx ! return address
|
||||||
|
cmp eax,4
|
||||||
|
jne 1f
|
||||||
|
pop eax
|
||||||
|
xor edx,edx
|
||||||
|
pop ecx
|
||||||
|
idiv ecx
|
||||||
|
push edx
|
||||||
|
jmp ebx
|
||||||
|
1:
|
||||||
|
.extern EODDZ
|
||||||
|
.extern .trp
|
||||||
|
mov eax,EODDZ
|
||||||
|
push ebx
|
||||||
|
jmp .trp
|
20
mach/i386/libem/rol.s
Normal file
20
mach/i386/libem/rol.s
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .rol
|
||||||
|
|
||||||
|
! #bytes in eax
|
||||||
|
.rol:
|
||||||
|
pop edx ! return address
|
||||||
|
cmp eax,4
|
||||||
|
jne 1f
|
||||||
|
pop eax
|
||||||
|
pop ecx
|
||||||
|
rol eax,cl
|
||||||
|
push eax
|
||||||
|
jmp edx
|
||||||
|
1:
|
||||||
|
.extern EODDZ
|
||||||
|
.extern .trp
|
||||||
|
mov eax,EODDZ
|
||||||
|
push edx
|
||||||
|
jmp .trp
|
20
mach/i386/libem/ror.s
Normal file
20
mach/i386/libem/ror.s
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .ror
|
||||||
|
|
||||||
|
! #bytes in eax
|
||||||
|
.ror:
|
||||||
|
pop edx ! return address
|
||||||
|
cmp eax,4
|
||||||
|
jne 1f
|
||||||
|
pop eax
|
||||||
|
pop ecx
|
||||||
|
ror eax,cl
|
||||||
|
push eax
|
||||||
|
jmp edx
|
||||||
|
1:
|
||||||
|
.extern EODDZ
|
||||||
|
.extern .trp
|
||||||
|
mov eax,EODDZ
|
||||||
|
push edx
|
||||||
|
jmp .trp
|
39
mach/i386/libem/sar4.s
Normal file
39
mach/i386/libem/sar4.s
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .sar4
|
||||||
|
|
||||||
|
.sar4:
|
||||||
|
! ebx, descriptor address
|
||||||
|
! eax, index
|
||||||
|
pop ecx
|
||||||
|
pop edx ! base address
|
||||||
|
push ecx
|
||||||
|
sub eax,(ebx)
|
||||||
|
mov ecx,8(ebx)
|
||||||
|
push edx
|
||||||
|
imul ecx
|
||||||
|
pop edx
|
||||||
|
add edx,eax
|
||||||
|
sar ecx,1
|
||||||
|
jnb 1f
|
||||||
|
pop ebx
|
||||||
|
pop eax
|
||||||
|
movb (edx),al
|
||||||
|
jmp ebx
|
||||||
|
1:
|
||||||
|
sar ecx,1
|
||||||
|
jnb 1f
|
||||||
|
pop ebx
|
||||||
|
pop eax
|
||||||
|
o16 mov (edx),ax
|
||||||
|
jmp ebx
|
||||||
|
1:
|
||||||
|
pop ebx
|
||||||
|
xchg edi,edx ! edi = base address, edx is saved edi
|
||||||
|
mov eax,esi
|
||||||
|
mov esi,esp
|
||||||
|
rep movs
|
||||||
|
mov esp,esi
|
||||||
|
mov esi,eax
|
||||||
|
mov edi,edx
|
||||||
|
jmp ebx
|
19
mach/i386/libem/sbi.s
Normal file
19
mach/i386/libem/sbi.s
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .sbi
|
||||||
|
|
||||||
|
! #bytes in ecx , top of stack in eax
|
||||||
|
.sbi:
|
||||||
|
pop ebx ! return subress
|
||||||
|
cmp ecx,4
|
||||||
|
jne 1f
|
||||||
|
pop ecx
|
||||||
|
sub eax,ecx
|
||||||
|
neg eax
|
||||||
|
jmp ebx
|
||||||
|
1:
|
||||||
|
.extern EODDZ
|
||||||
|
.extern .trp
|
||||||
|
mov eax,EODDZ
|
||||||
|
push ebx
|
||||||
|
jmp .trp
|
42
mach/i386/libem/set.s
Normal file
42
mach/i386/libem/set.s
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .set
|
||||||
|
|
||||||
|
! #bytes in ecx
|
||||||
|
! bit # in eax
|
||||||
|
.set:
|
||||||
|
pop ebx ! return address
|
||||||
|
xor edx,edx
|
||||||
|
!ifdef create set
|
||||||
|
sub esp,ecx
|
||||||
|
push ebx
|
||||||
|
push edi
|
||||||
|
mov ebx,esp
|
||||||
|
xor edi,edi
|
||||||
|
sar ecx,1
|
||||||
|
1:
|
||||||
|
mov 4(ebx)(edi),edx
|
||||||
|
add edi,4
|
||||||
|
loop 1b
|
||||||
|
!endif
|
||||||
|
mov ebx,8
|
||||||
|
div ebx
|
||||||
|
cmp eax,edi
|
||||||
|
jae 2f
|
||||||
|
mov edi,edx
|
||||||
|
movb dl,bits(edi)
|
||||||
|
mov edi,esp
|
||||||
|
add edi,eax
|
||||||
|
orb 8(edi),dl
|
||||||
|
pop edi
|
||||||
|
ret
|
||||||
|
2:
|
||||||
|
.extern ESET
|
||||||
|
.extern .trp
|
||||||
|
pop edi
|
||||||
|
mov eax,ESET
|
||||||
|
jmp .trp
|
||||||
|
|
||||||
|
.sect .rom
|
||||||
|
bits:
|
||||||
|
.data1 1,2,4,8,16,32,64,128
|
20
mach/i386/libem/sli.s
Normal file
20
mach/i386/libem/sli.s
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .sli
|
||||||
|
|
||||||
|
! #bytes in eax
|
||||||
|
.sli:
|
||||||
|
pop edx ! return address
|
||||||
|
cmp eax,4
|
||||||
|
jne 1f
|
||||||
|
pop eax
|
||||||
|
pop ecx
|
||||||
|
sal eax,cl
|
||||||
|
push eax
|
||||||
|
jmp edx
|
||||||
|
1:
|
||||||
|
.extern EODDZ
|
||||||
|
.extern .trp
|
||||||
|
mov eax,EODDZ
|
||||||
|
push edx
|
||||||
|
jmp .trp
|
20
mach/i386/libem/sri.s
Normal file
20
mach/i386/libem/sri.s
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .sri
|
||||||
|
|
||||||
|
! #bytes in eax
|
||||||
|
.sri:
|
||||||
|
pop edx ! return address
|
||||||
|
cmp eax,4
|
||||||
|
jne 1f
|
||||||
|
pop eax
|
||||||
|
pop ecx
|
||||||
|
sar eax,cl
|
||||||
|
push eax
|
||||||
|
jmp edx
|
||||||
|
1:
|
||||||
|
.extern EODDZ
|
||||||
|
.extern .trp
|
||||||
|
mov eax,EODDZ
|
||||||
|
push edx
|
||||||
|
jmp .trp
|
39
mach/i386/libem/sti.s
Normal file
39
mach/i386/libem/sti.s
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .sti
|
||||||
|
.define .sts
|
||||||
|
|
||||||
|
! #bytes in ecx
|
||||||
|
! address in ebx
|
||||||
|
! save edi/esi. they might be register variables
|
||||||
|
.sts:
|
||||||
|
pop edx
|
||||||
|
sar ecx,1
|
||||||
|
jnb 1f
|
||||||
|
pop eax
|
||||||
|
movb (ebx),al
|
||||||
|
jmp edx
|
||||||
|
1:
|
||||||
|
sar ecx,1
|
||||||
|
jnb 1f
|
||||||
|
pop eax
|
||||||
|
o16 mov (ebx),ax
|
||||||
|
jmp edx
|
||||||
|
1:
|
||||||
|
mov ebx,edx
|
||||||
|
mov edx,edi
|
||||||
|
jmp 1f
|
||||||
|
.sti:
|
||||||
|
! only called with count >> 4
|
||||||
|
mov edx,edi
|
||||||
|
mov edi,ebx
|
||||||
|
pop ebx
|
||||||
|
sar ecx,2
|
||||||
|
1:
|
||||||
|
mov eax,esi
|
||||||
|
mov esi,esp
|
||||||
|
rep movs
|
||||||
|
mov esp,esi
|
||||||
|
mov edi,edx
|
||||||
|
mov esi,eax
|
||||||
|
jmp ebx
|
5
mach/i386/libem/stop.s
Normal file
5
mach/i386/libem/stop.s
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .stop
|
||||||
|
.stop:
|
||||||
|
int 3
|
27
mach/i386/libem/strhp.s
Normal file
27
mach/i386/libem/strhp.s
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .strhp
|
||||||
|
.extern .reghp, .limhp, EHEAP, .trp
|
||||||
|
|
||||||
|
.strhp:
|
||||||
|
pop ebx
|
||||||
|
pop eax
|
||||||
|
mov (.reghp),eax
|
||||||
|
cmp eax,(.limhp)
|
||||||
|
jb 1f
|
||||||
|
add eax,02000
|
||||||
|
and eax,~0777
|
||||||
|
mov (.limhp),eax
|
||||||
|
push ebx
|
||||||
|
push eax
|
||||||
|
call _brk
|
||||||
|
pop ecx
|
||||||
|
pop ebx
|
||||||
|
cmp eax,-1
|
||||||
|
je 2f
|
||||||
|
1:
|
||||||
|
jmp ebx
|
||||||
|
2:
|
||||||
|
mov eax,EHEAP
|
||||||
|
push ebx
|
||||||
|
jmp .trp
|
17
mach/i386/libem/trp.s
Normal file
17
mach/i386/libem/trp.s
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .trp
|
||||||
|
.extern .trppc, .stop
|
||||||
|
|
||||||
|
! eax is trap number
|
||||||
|
.trp:
|
||||||
|
xor ebx,ebx
|
||||||
|
xchg ebx,(.trppc)
|
||||||
|
test ebx,ebx
|
||||||
|
jz 2f
|
||||||
|
push eax
|
||||||
|
call ebx
|
||||||
|
pop eax
|
||||||
|
ret
|
||||||
|
2:
|
||||||
|
call .stop
|
9
mach/i386/libem/unknown.s
Normal file
9
mach/i386/libem/unknown.s
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .unknown
|
||||||
|
.extern EILLINS, .fat
|
||||||
|
|
||||||
|
.unknown:
|
||||||
|
mov eax,EILLINS
|
||||||
|
push eax
|
||||||
|
jmp .fat
|
18
mach/i386/libem/xor.s
Normal file
18
mach/i386/libem/xor.s
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||||
|
.sect .text
|
||||||
|
.define .xor
|
||||||
|
|
||||||
|
! #bytes in ecx
|
||||||
|
.xor:
|
||||||
|
pop ebx ! return address
|
||||||
|
mov edx,edi
|
||||||
|
mov edi,esp
|
||||||
|
add edi,ecx
|
||||||
|
sar ecx,2
|
||||||
|
1:
|
||||||
|
pop eax
|
||||||
|
xor eax,(edi)
|
||||||
|
stos
|
||||||
|
loop 1b
|
||||||
|
mov edi,edx
|
||||||
|
jmp ebx
|
Loading…
Reference in a new issue