btxv86.h revision 339406
1331766Sken/*
2331766Sken * Copyright (c) 1998 Robert Nordier
3331766Sken * All rights reserved.
4331766Sken *
5331766Sken * Redistribution and use in source and binary forms are freely
6331766Sken * permitted provided that the above copyright notice and this
7331766Sken * paragraph and the following disclaimer are duplicated in all
8331766Sken * such forms.
9331766Sken *
10331766Sken * This software is provided "AS IS" and without any express or
11331766Sken * implied warranties, including, without limitation, the implied
12331766Sken * warranties of merchantability and fitness for a particular
13331766Sken * purpose.
14331766Sken */
15331766Sken
16331766Sken/*
17331766Sken * $FreeBSD: stable/11/stand/pc98/btx/lib/btxv86.h 339406 2018-10-17 04:10:23Z imp $
18331766Sken */
19331766Sken
20331766Sken#ifndef _BTXV86_H_
21331766Sken#define _BTXV86_H_
22331766Sken
23331766Sken#include <sys/types.h>
24331766Sken#include <machine/psl.h>
25331766Sken
26331766Sken/*
27331766Sken * Memory buffer space for real mode IO.
28331766Sken * Just one page is not much, but the space is rather limited.
29331766Sken * See ../btx/btx.S for details.
30331766Sken * XXX TEST THIS XXX
31331766Sken */
32331766Sken#define	V86_IO_BUFFER		0x8000
33331766Sken#define	V86_IO_BUFFER_SIZE	0x1000
34331766Sken
35331766Sken#define V86_ADDR   0x10000	/* Segment:offset address */
36331766Sken#define V86_CALLF  0x20000	/* Emulate far call */
37331766Sken#define V86_FLAGS  0x40000	/* Return flags */
38331766Sken
39331766Skenstruct __v86 {
40331766Sken    uint32_t ctl;		/* Control flags */
41331766Sken    uint32_t addr;		/* Interrupt number or address */
42331766Sken    uint32_t es;		/* V86 ES register */
43331766Sken    uint32_t ds;		/* V86 DS register */
44331766Sken    uint32_t fs;		/* V86 FS register */
45331766Sken    uint32_t gs;		/* V86 GS register */
46331766Sken    uint32_t eax;		/* V86 EAX register */
47331766Sken    uint32_t ecx;		/* V86 ECX register */
48331766Sken    uint32_t edx;		/* V86 EDX register */
49331766Sken    uint32_t ebx;		/* V86 EBX register */
50331766Sken    uint32_t efl;		/* V86 eflags register */
51331766Sken    uint32_t ebp;		/* V86 EBP register */
52331766Sken    uint32_t esi;		/* V86 ESI register */
53331766Sken    uint32_t edi;		/* V86 EDI register */
54331766Sken};
55331766Sken
56331766Skenextern struct __v86 __v86;	/* V86 interface structure */
57331766Skenvoid __v86int(void);
58331766Sken
59331766Sken#define v86	__v86
60331766Sken#define v86int	__v86int
61331766Sken
62331766Skenextern u_int32_t	__base;
63331766Skenextern u_int32_t	__args;
64331766Sken
65331766Sken#define	PTOV(pa)	((caddr_t)(pa) - __base)
66331766Sken#define	VTOP(va)	((vm_offset_t)(va) + __base)
67331766Sken#define	VTOPSEG(va)	(u_int16_t)(VTOP((caddr_t)va) >> 4)
68331766Sken#define	VTOPOFF(va)	(u_int16_t)(VTOP((caddr_t)va) & 0xf)
69331766Sken
70331766Sken#define	V86_CY(x)	((x) & PSL_C)
71331766Sken#define	V86_ZR(x)	((x) & PSL_Z)
72331766Sken
73331766Skenvoid __exit(int) __attribute__((__noreturn__));
74331766Skenvoid __exec(caddr_t, ...);
75331766Sken
76331766Sken#endif /* !_BTXV86_H_ */
77331766Sken