Cross Reference: btxv86.s
xref
: /
illumos-gate
/
usr
/
src
/
boot
/
sys
/
boot
/
i386
/
btx
/
lib
/
btxv86.s
Home
History
Annotate
Line#
Navigate
Download
Search
only in
./
#
#
Copyright
(c)
1998
Robert
Nordier
#
All
rights
reserved
.
#
#
Redistribution
and
use
in
source
and
binary
forms
are
freely
#
permitted
provided
that
the
above
copyright
notice
and
this
#
paragraph
and
the
following
disclaimer
are
duplicated
in
all
#
such
forms
.
#
#
This
software
is
provided
"AS IS"
and
without
any
express
or
#
implied
warranties
,
including
,
without
limitation
,
the
implied
#
warranties
of
merchantability
and
fitness
for
a
particular
#
purpose
.
#
# $
FreeBSD
$
#
#
BTX
V86
interface
.
#
#
#
Globals
.
#
.
global
__v86int
#
#
Fields
in
V86
interface
structure
.
#
.
set
V86_CTL
,
0x0
#
Control
flags
.
set
V86_ADDR
,
0x4
#
Int
number
/
address
.
set
V86_ES
,
0x8
#
V86
ES
.
set
V86_DS
,
0xc
#
V86
DS
.
set
V86_FS
,
0x10
#
V86
FS
.
set
V86_GS
,
0x14
#
V86
GS
.
set
V86_EAX
,
0x18
#
V86
EAX
.
set
V86_ECX
,
0x1c
#
V86
ECX
.
set
V86_EDX
,
0x20
#
V86
EDX
.
set
V86_EBX
,
0x24
#
V86
EBX
.
set
V86_EFL
,
0x28
#
V86
eflags
.
set
V86_EBP
,
0x2c
#
V86
EBP
.
set
V86_ESI
,
0x30
#
V86
ESI
.
set
V86_EDI
,
0x34
#
V86
EDI
#
#
Other
constants
.
#
.
set
INT_V86
,
0x31
#
Interrupt
number
.
set
SIZ_V86
,
0x38
#
Size
of
V86
structure
#
#
V86
interface
function
.
#
__v86int
:
popl
__v86ret
#
Save
return
address
pushl
$
__v86
#
Push
pointer
call
__v86_swap
#
Load
V86
registers
int
$
INT_V86
#
To
BTX
call
__v86_swap
#
Load
user
registers
addl
$
0x4
,%
esp
#
Discard
pointer
pushl
__v86ret
#
Restore
return
address
ret
#
To
user
#
#
Swap
V86
and
user
registers
.
#
__v86_swap
:
xchgl
%
ebp
,
0x4
(%
esp
,
1
) #
Swap
pointer
,
EBP
xchgl
%
eax
,
V86_EAX
(%
ebp
) #
Swap
EAX
xchgl
%
ecx
,
V86_ECX
(%
ebp
) #
Swap
ECX
xchgl
%
edx
,
V86_EDX
(%
ebp
) #
Swap
EDX
xchgl
%
ebx
,
V86_EBX
(%
ebp
) #
Swap
EBX
pushl
%
eax
#
Save
pushf
#
Put
eflags
popl
%
eax
#
in
EAX
xchgl
%
eax
,
V86_EFL
(%
ebp
) #
Swap
pushl
%
eax
#
Put
EAX
popf
#
in
eflags
movl
0x8
(%
esp
,
1
),%
eax
#
Load
EBP
xchgl
%
eax
,
V86_EBP
(%
ebp
) #
Swap
movl
%
eax
,
0x8
(%
esp
,
1
) #
Save
EBP
popl
%
eax
#
Restore
xchgl
%
esi
,
V86_ESI
(%
ebp
) #
Swap
ESI
xchgl
%
edi
,
V86_EDI
(%
ebp
) #
Swap
EDI
xchgl
%
ebp
,
0x4
(%
esp
,
1
) #
Swap
pointer
,
EBP
ret
#
To
caller
#
#
V86
interface
structure
.
#
.
comm
__v86
,
SIZ_V86
.
comm
__v86ret
,
4