1 /* NetHack 3.6	portio.h	$NHDT-Date: 1432512791 2015/05/25 00:13:11 $  $NHDT-Branch: master $:$NHDT-Revision: 1.8 $ */
2 /*   Copyright (c) NetHack PC Development Team 1995                 */
3 /*   NetHack may be freely redistributed.  See license for details. */
4 /*                                                                  */
5 /*
6  * portio.h - PC port I/O Hardware support definitions and other
7  *            low-level definitions.
8  *
9  */
10 
11 #ifndef PORTIO_H
12 #define PORTIO_H
13 
14 #if defined(__GO32__) || defined(__DJGPP__)
15 #define __far
16 #include <go32.h>
17 #include <dpmi.h>
18 #include <sys/farptr.h>
19 #endif
20 
21 #if defined(_MSC_VER)
22 #define outportb _outp
23 #define outportw _outpw
24 #define inportb _inp
25 #endif
26 #if defined(__BORLANDC__)
27 #define outportw outport
28 /* #define inportb inport */
29 #endif
30 
31 #ifndef MK_PTR
32 /*
33  * Depending on environment, this is a macro to construct either:
34  *
35  *     -  a djgpp long 32 bit pointer from segment & offset values
36  *     -  a far pointer from segment and offset values
37  *
38  */
39 #if defined(_MSC_VER) || defined(__BORLANDC__)
40 #define MK_PTR(seg, offset)                    \
41     (void __far *)(((unsigned long) seg << 16) \
42                    + (unsigned long) (unsigned) offset)
43 #define READ_ABSOLUTE(x) *(x)
44 #define READ_ABSOLUTE_WORD(x) *(x)
45 #define WRITE_ABSOLUTE(x, y) *(x) = (y)
46 #define WRITE_ABSOLUTE_WORD(x, y) *(x) = (y)
47 #define WRITE_ABSOLUTE_DWORD(x, y) *(x) = (y)
48 #endif
49 
50 #if defined(__GO32__) || defined(__DJGPP__)
51 #define MK_PTR(seg, offset) \
52     (void *)(((unsigned) seg << 4) + (unsigned) offset)
53 #define READ_ABSOLUTE(x) \
54     (_farpeekb(_go32_conventional_mem_selector(), (unsigned) x))
55 #define READ_ABSOLUTE_WORD(x) \
56     (_farpeekw(_go32_conventional_mem_selector(), (unsigned) x))
57 #define WRITE_ABSOLUTE(x, y) \
58     _farpokeb(_go32_conventional_mem_selector(), (unsigned) x, (y))
59 #define WRITE_ABSOLUTE_WORD(x, y) \
60     _farpokew(_go32_conventional_mem_selector(), (unsigned) x, (y))
61 #define WRITE_ABSOLUTE_DWORD(x, y) \
62     _farpokel(_go32_conventional_mem_selector(), (unsigned) x, (y))
63 #endif
64 
65 #ifdef OBSOLETE /* old djgpp V1.x way of mapping 1st MB */
66 #define MK_PTR(seg, offset) \
67     (void *)(0xE0000000 + ((((unsigned) seg << 4) + (unsigned) offset)))
68 #define READ_ABSOLUTE(x) *(x)
69 #define READ_ABSOLUTE_WORD(x) *(x)
70 #define WRITE_ABSOLUTE(x, y) *(x) = (y)
71 #define WRITE_ABSOLUTE_WORD(x, y) *(x) = (y)
72 #define WRITE_ABSOLUTE_DWORD(x, y) *(x) = (y)
73 #endif
74 #endif /* MK_PTR */
75 
76 #endif /* PORTIO_H  */
77 /* portio.h */
78