diff --git a/sys/msdos/portio.h b/sys/msdos/portio.h new file mode 100644 index 000000000..543565617 --- /dev/null +++ b/sys/msdos/portio.h @@ -0,0 +1,71 @@ +/* SCCS Id: @(#)portio.h 3.3 95/08/05 */ +/* Copyright (c) NetHack PC Development Team 1995 */ +/* NetHack may be freely redistributed. See license for details. */ +/* */ +/* + * portio.h - PC port I/O Hardware support definitions and other + * low-level definitions. + * + */ + +#ifndef PORTIO_H +#define PORTIO_H + +# if defined(__GO32__) || defined(__DJGPP__) +#define __far +#include +#include +#include +#endif + +# if defined(_MSC_VER) +#define outportb _outp +#define outportw _outpw +#define inportb _inp +# endif +# if defined(__BORLANDC__) +#define outportw outport +/* #define inportb inport */ +# endif + +# ifndef MK_PTR +/* + * Depending on environment, this is a macro to construct either: + * + * - a djgpp long 32 bit pointer from segment & offset values + * - a far pointer from segment and offset values + * + */ +# if defined(_MSC_VER) || defined(__BORLANDC__) +#define MK_PTR(seg, offset) (void __far *)(((unsigned long)seg << 16) \ + + (unsigned long)(unsigned)offset) +#define READ_ABSOLUTE(x) *(x) +#define READ_ABSOLUTE_WORD(x) *(x) +#define WRITE_ABSOLUTE(x,y) *(x) = (y) +#define WRITE_ABSOLUTE_WORD(x,y) *(x) = (y) +# endif + +# if defined(__GO32__) || defined(__DJGPP__) +#define MK_PTR(seg, offset) (void *)(((unsigned)seg << 4) + (unsigned)offset) +#define READ_ABSOLUTE(x) \ + (_farpeekb(_go32_conventional_mem_selector(), (unsigned)x)) +#define READ_ABSOLUTE_WORD(x) \ + (_farpeekw(_go32_conventional_mem_selector(), (unsigned)x)) +#define WRITE_ABSOLUTE(x,y) \ + _farpokeb(_go32_conventional_mem_selector(), (unsigned)x, (y)) +#define WRITE_ABSOLUTE_WORD(x,y) \ + _farpokew(_go32_conventional_mem_selector(), (unsigned)x, (y)) +# endif + +# ifdef OBSOLETE /* old djgpp V1.x way of mapping 1st MB */ +#define MK_PTR(seg, offset) (void *)(0xE0000000+((((unsigned)seg << 4) \ + + (unsigned)offset))) +#define READ_ABSOLUTE(x) *(x) +#define READ_ABSOLUTE_WORD(x) *(x) +#define WRITE_ABSOLUTE(x,y) *(x) = (y) +#define WRITE_ABSOLUTE_WORD(x,y) *(x) = (y) +# endif +# endif /* MK_PTR */ + +#endif /* PORTIO_H */ +/* portio.h */