blob: 3c8d61a6f4511cbad0eba6645b7262b2499ee7bf [file] [log] [blame]
wdenk7a8e9bed2003-05-31 18:35:21 +00001/*
2 * (C) Copyright 2002
Graeme Russdbf71152011-04-13 19:43:26 +10003 * Daniel Engström, Omicron Ceti AB, <daniel@omicron.se>
wdenk8bde7f72003-06-27 21:31:46 +00004 *
wdenk7a8e9bed2003-05-31 18:35:21 +00005 * See file CREDITS for list of people who contributed to this
6 * project.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of
11 * the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21 * MA 02111-1307 USA
22 */
23
24#ifndef _BIOS_H_
25#define _BIOS_H_
26
27#define OFFS_ES 0 /* 16bit */
28#define OFFS_GS 2 /* 16bit */
29#define OFFS_DS 4 /* 16bit */
30#define OFFS_EDI 6 /* 32bit */
wdenk8bde7f72003-06-27 21:31:46 +000031#define OFFS_DI 6 /* low 16 bits of EDI */
wdenk7a8e9bed2003-05-31 18:35:21 +000032#define OFFS_ESI 10 /* 32bit */
wdenk8bde7f72003-06-27 21:31:46 +000033#define OFFS_SI 10 /* low 16 bits of ESI */
wdenk7a8e9bed2003-05-31 18:35:21 +000034#define OFFS_EBP 14 /* 32bit */
35#define OFFS_BP 14 /* low 16 bits of EBP */
36#define OFFS_ESP 18 /* 32bit */
37#define OFFS_SP 18 /* low 16 bits of ESP */
38#define OFFS_EBX 22 /* 32bit */
39#define OFFS_BX 22 /* low 16 bits of EBX */
40#define OFFS_BL 22 /* low 8 bits of BX */
41#define OFFS_BH 23 /* high 8 bits of BX */
42#define OFFS_EDX 26 /* 32bit */
43#define OFFS_DX 26 /* low 16 bits of EBX */
44#define OFFS_DL 26 /* low 8 bits of BX */
45#define OFFS_DH 27 /* high 8 bits of BX */
46#define OFFS_ECX 30 /* 32bit */
47#define OFFS_CX 30 /* low 16 bits of EBX */
48#define OFFS_CL 30 /* low 8 bits of BX */
49#define OFFS_CH 31 /* high 8 bits of BX */
50#define OFFS_EAX 34 /* 32bit */
51#define OFFS_AX 34 /* low 16 bits of EBX */
52#define OFFS_AL 34 /* low 8 bits of BX */
53#define OFFS_AH 35 /* high 8 bits of BX */
54#define OFFS_VECTOR 38 /* 16bit */
55#define OFFS_IP 40 /* 16bit */
56#define OFFS_CS 42 /* 16bit */
wdenk8bde7f72003-06-27 21:31:46 +000057#define OFFS_FLAGS 44 /* 16bit */
wdenk7a8e9bed2003-05-31 18:35:21 +000058
59#define SEGMENT 0x40
Graeme Russdbf71152011-04-13 19:43:26 +100060#define STACK 0x800 /* stack at 0x40:0x800 -> 0x800 */
wdenk7a8e9bed2003-05-31 18:35:21 +000061
62/* save general registers */
63/* save some segments */
64/* save callers stack segment .. */
65/* ... in gs */
wdenk8bde7f72003-06-27 21:31:46 +000066 /* setup my segments */
67 /* setup BIOS stackpointer */
68
wdenk7a8e9bed2003-05-31 18:35:21 +000069#define MAKE_BIOS_STACK \
Graeme Russdbf71152011-04-13 19:43:26 +100070 pushal; \
71 pushw %ds; \
72 pushw %gs; \
73 pushw %es; \
74 pushw %ss; \
75 popw %gs; \
76 movw $SEGMENT, %ax; \
77 movw %ax, %ds; \
78 movw %ax, %es; \
79 movw %ax, %ss; \
80 movw %sp, %bp; \
81 movw $STACK, %sp
wdenk7a8e9bed2003-05-31 18:35:21 +000082
83#define RESTORE_CALLERS_STACK \
Graeme Russdbf71152011-04-13 19:43:26 +100084 pushw %gs; /* restore callers stack segment */ \
85 popw %ss; \
86 movw %bp, %sp; /* restore stackpointer */ \
87 popw %es; /* restore segment selectors */ \
88 popw %gs; \
89 popw %ds; \
90 popal /* restore GP registers */
wdenk7a8e9bed2003-05-31 18:35:21 +000091
92#endif