139165Srnordier/* 239165Srnordier * Copyright (c) 1998 Robert Nordier 339165Srnordier * All rights reserved. 439165Srnordier * 539165Srnordier * Redistribution and use in source and binary forms are freely 639165Srnordier * permitted provided that the above copyright notice and this 739165Srnordier * paragraph and the following disclaimer are duplicated in all 839165Srnordier * such forms. 939165Srnordier * 1039165Srnordier * This software is provided "AS IS" and without any express or 1139165Srnordier * implied warranties, including, without limitation, the implied 1239165Srnordier * warranties of merchantability and fitness for a particular 1339165Srnordier * purpose. 1439165Srnordier */ 1539165Srnordier 1639165Srnordier/* 1750477Speter * $FreeBSD: stable/11/stand/i386/btx/lib/btxv86.h 332154 2018-04-06 21:37:25Z kevans $ 1839165Srnordier */ 1939165Srnordier 2039165Srnordier#ifndef _BTXV86_H_ 2139165Srnordier#define _BTXV86_H_ 2239165Srnordier 2339165Srnordier#include <sys/types.h> 24226746Sjhb#include <machine/psl.h> 2539165Srnordier 26329099Skevans/* 27329099Skevans * Memory buffer space for real mode IO. 28329099Skevans * Just one page is not much, but the space is rather limited. 29329099Skevans * See ../btx/btx.S for details. 30329099Skevans */ 31329099Skevans#define V86_IO_BUFFER 0x8000 32329099Skevans#define V86_IO_BUFFER_SIZE 0x1000 33329099Skevans 3439165Srnordier#define V86_ADDR 0x10000 /* Segment:offset address */ 3539165Srnordier#define V86_CALLF 0x20000 /* Emulate far call */ 3639165Srnordier#define V86_FLAGS 0x40000 /* Return flags */ 3739165Srnordier 3839165Srnordierstruct __v86 { 3939165Srnordier uint32_t ctl; /* Control flags */ 4039165Srnordier uint32_t addr; /* Interrupt number or address */ 4139165Srnordier uint32_t es; /* V86 ES register */ 4239165Srnordier uint32_t ds; /* V86 DS register */ 4339165Srnordier uint32_t fs; /* V86 FS register */ 4439165Srnordier uint32_t gs; /* V86 GS register */ 4539165Srnordier uint32_t eax; /* V86 EAX register */ 4639165Srnordier uint32_t ecx; /* V86 ECX register */ 4739165Srnordier uint32_t edx; /* V86 EDX register */ 4839165Srnordier uint32_t ebx; /* V86 EBX register */ 4939165Srnordier uint32_t efl; /* V86 eflags register */ 5039165Srnordier uint32_t ebp; /* V86 EBP register */ 5139165Srnordier uint32_t esi; /* V86 ESI register */ 5239165Srnordier uint32_t edi; /* V86 EDI register */ 5339165Srnordier}; 5439165Srnordier 5539165Srnordierextern struct __v86 __v86; /* V86 interface structure */ 5639441Smsmithvoid __v86int(void); 5739165Srnordier 5839441Smsmith#define v86 __v86 5939441Smsmith#define v86int __v86int 6039441Smsmith 61332154Skevansextern uint32_t __base; 62332154Skevansextern uint32_t __args; 6339441Smsmith 6439901Smsmith#define PTOV(pa) ((caddr_t)(pa) - __base) 6539901Smsmith#define VTOP(va) ((vm_offset_t)(va) + __base) 66332154Skevans#define VTOPSEG(va) (uint16_t)(VTOP((caddr_t)va) >> 4) 67332154Skevans#define VTOPOFF(va) (uint16_t)(VTOP((caddr_t)va) & 0xf) 6839441Smsmith 69226746Sjhb#define V86_CY(x) ((x) & PSL_C) 70226746Sjhb#define V86_ZR(x) ((x) & PSL_Z) 71226746Sjhb 7239895Smsmithvoid __exit(int) __attribute__((__noreturn__)); 7339165Srnordiervoid __exec(caddr_t, ...); 7439165Srnordier 7539165Srnordier#endif /* !_BTXV86_H_ */ 76