This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/WATCOM/h/i86.h

275 lines
7.1 KiB
C
Raw Permalink Normal View History

/*
* i86.h Defines the structs and unions used to handle the input and
* output registers for the Intel x86 and 386 interrupt interface
* routines.
*
* =========================================================================
*
* Open Watcom Project
*
* Copyright (c) 2002-2010 Open Watcom Contributors. All Rights Reserved.
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
*
* This file is automatically generated. Do not edit directly.
*
* =========================================================================
*/
#ifndef _I86_H_INCLUDED
#define _I86_H_INCLUDED
#ifndef _ENABLE_AUTODEPEND
#pragma read_only_file;
#endif
#if !defined(_M_IX86)
#error i86.h is for use with Intel platforms
#endif
#ifndef _COMDEF_H_INCLUDED
#include <_comdef.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _M_IX86
#pragma pack( __push, 1 )
#else
#pragma pack( __push, 8 )
#endif
#undef __FILLER
#if defined(_M_I86) || defined(__WINDOWS_386__)
#define __FILLER(a)
#else
#define __FILLER(a) unsigned short a;
#endif
#if !defined(_M_I86) && !defined(__WINDOWS_386__)
/* dword registers */
struct DWORDREGS {
unsigned int eax;
unsigned int ebx;
unsigned int ecx;
unsigned int edx;
unsigned int esi;
unsigned int edi;
unsigned int cflag;
};
#endif
/* word registers */
struct WORDREGS {
unsigned short ax; __FILLER(_1)
unsigned short bx; __FILLER(_2)
unsigned short cx; __FILLER(_3)
unsigned short dx; __FILLER(_4)
unsigned short si; __FILLER(_5)
unsigned short di; __FILLER(_6)
#if defined(__WINDOWS_386__)
unsigned short cflag;
#else
unsigned int cflag;
#endif
};
/* byte registers */
struct BYTEREGS {
unsigned char al, ah; __FILLER(_1)
unsigned char bl, bh; __FILLER(_2)
unsigned char cl, ch; __FILLER(_3)
unsigned char dl, dh; __FILLER(_4)
};
/* general purpose registers union - overlays the corresponding dword,
* word, and byte registers.
*/
union REGS {
#if defined(_M_I86) || defined(__WINDOWS_386__)
struct WORDREGS x;
#else
struct DWORDREGS x;
#endif
struct WORDREGS w;
struct BYTEREGS h;
};
#define _REGS REGS
/* segment registers */
struct SREGS {
unsigned short es, cs, ss, ds;
#if !defined(_M_I86)
unsigned short fs, gs;
#endif
};
#define _SREGS SREGS
/* intr structs */
struct REGPACKB {
unsigned char al, ah; __FILLER(_1)
unsigned char bl, bh; __FILLER(_2)
unsigned char cl, ch; __FILLER(_3)
unsigned char dl, dh; __FILLER(_4)
};
struct REGPACKW {
unsigned short ax; __FILLER(_1)
unsigned short bx; __FILLER(_2)
unsigned short cx; __FILLER(_3)
unsigned short dx; __FILLER(_4)
unsigned short bp; __FILLER(_5)
unsigned short si; __FILLER(_6)
unsigned short di; __FILLER(_7)
unsigned short ds;
unsigned short es;
#if !defined(_M_I86) && !defined(__WINDOWS_386__)
unsigned short fs;
unsigned short gs;
#endif
#if defined(__WINDOWS_386__)
unsigned short flags;
#else
unsigned int flags;
#endif
};
struct REGPACKX {
unsigned int eax, ebx, ecx, edx, ebp, esi, edi;
unsigned short ds, es, fs, gs;
unsigned int flags;
};
union REGPACK {
struct REGPACKB h;
struct REGPACKW w;
#if defined(_M_I86) || defined(__WINDOWS_386__)
struct REGPACKW x;
#else
struct REGPACKX x;
#endif
};
/* input parm to an 'interrupt' function is union INTPACK */
/* e.g. interrupt int10( union INTPACK r ) {} */
struct INTPACKX {
unsigned gs,fs,es,ds,edi,esi,ebp,esp,ebx,edx,ecx,eax,eip,cs,flags;
};
/*
NOTE: The gs and fs fields will not be correct unless the compiler
is invoked with at least the /3 switch.
*/
struct INTPACKW {
unsigned short gs; __FILLER(_1)
unsigned short fs; __FILLER(_2)
unsigned short es; __FILLER(_3)
unsigned short ds; __FILLER(_4)
unsigned short di; __FILLER(_5)
unsigned short si; __FILLER(_6)
unsigned short bp; __FILLER(_7)
unsigned short sp; __FILLER(_8)
unsigned short bx; __FILLER(_9)
unsigned short dx; __FILLER(_a)
unsigned short cx; __FILLER(_b)
unsigned short ax; __FILLER(_c)
unsigned short ip; __FILLER(_d)
unsigned short cs; __FILLER(_e)
unsigned flags;
};
struct INTPACKB {
#if defined(_M_I86)
unsigned /*gs*/:16,/*fs*/:16,
/*es*/:16,/*ds*/:16,
/*di*/:16,/*si*/:16,
/*bp*/:16,/*sp*/:16;
#else
unsigned /*gs*/ :32,/*fs*/ :32,
/*es*/ :32,/*ds*/ :32,
/*edi*/:32,/*esi*/:32,
/*ebp*/:32,/*esp*/:32;
#endif
unsigned char bl, bh; __FILLER(_1)
unsigned char dl, dh; __FILLER(_2)
unsigned char cl, ch; __FILLER(_3)
unsigned char al, ah; __FILLER(_4)
};
union INTPACK {
struct INTPACKB h;
struct INTPACKW w;
#if defined(_M_I86)
struct INTPACKW x;
#else
struct INTPACKX x;
#endif
};
/* bits defined for flags field defined in REGPACKW and INTPACKW */
enum {
INTR_CF = 0x0001, /* carry */
INTR_PF = 0x0004, /* parity */
INTR_AF = 0x0010, /* auxiliary carry */
INTR_ZF = 0x0040, /* zero */
INTR_SF = 0x0080, /* sign */
INTR_TF = 0x0100, /* trace */
INTR_IF = 0x0200, /* interrupt */
INTR_DF = 0x0400, /* direction */
INTR_OF = 0x0800 /* overflow */
};
_WCIRTLINK extern void _disable( void );
_WCIRTLINK extern void _enable( void );
#ifdef __INLINE_FUNCTIONS__
#pragma intrinsic(_disable,_enable)
#endif
_WCRTLINK extern void delay(unsigned int __milliseconds);
#if defined(_M_I86) || defined(__WINDOWS_386__)
_WCRTLINK extern int int86( int, union REGS *, union REGS * );
_WCRTLINK extern int int86x( int, union REGS *, union REGS *,
struct SREGS * );
#else
_WCRTLINK extern int int386( int, union REGS *, union REGS * );
_WCRTLINK extern int int386x( int, union REGS *, union REGS *,
struct SREGS * );
#endif
_WCRTLINK extern void intr( int, union REGPACK * );
_WCRTLINK extern void nosound( void );
_WCRTLINK extern void segread( struct SREGS * );
_WCRTLINK extern void sound( unsigned __frequency );
/* macros to break 'far' pointers into segment and offset components */
#define FP_OFF(__p) ((unsigned)(__p))
#define _FP_OFF(__p) ((unsigned)(__p))
#if defined(_M_I86)
#define FP_SEG(__p) ((unsigned)((unsigned long)(void __far*)(__p) >> 16))
#else
unsigned short FP_SEG( const volatile void __far * );
#pragma aux FP_SEG = __parm __caller [eax dx] __value [dx];
#endif
#define _FP_SEG FP_SEG
/* make a far pointer from segment and offset */
#define MK_FP(__s,__o) (((unsigned short)(__s)):>((void __near *)(__o)))
#pragma pack( __pop )
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif