1 /* SCCS Id: @(#)portio.h 3.4 1995/08/05 */
2 /* Copyright (c) NetHack PC Development Team 1995 */
3 /* NetHack may be freely redistributed. See license for details. */
6 * portio.h - PC port I/O Hardware support definitions and other
7 * low-level definitions.
14 # if defined(__GO32__) || defined(__DJGPP__)
18 #include <sys/farptr.h>
21 # if defined(_MSC_VER)
22 #define outportb _outp
23 #define outportw _outpw
26 # if defined(__BORLANDC__)
27 #define outportw outport
28 /* #define inportb inport */
33 * Depending on environment, this is a macro to construct either:
35 * - a djgpp long 32 bit pointer from segment & offset values
36 * - a far pointer from segment and offset values
39 # if defined(_MSC_VER) || defined(__BORLANDC__)
40 #define MK_PTR(seg, offset) (void __far *)(((unsigned long)seg << 16) \
41 + (unsigned long)(unsigned)offset)
42 #define READ_ABSOLUTE(x) *(x)
43 #define READ_ABSOLUTE_WORD(x) *(x)
44 #define WRITE_ABSOLUTE(x,y) *(x) = (y)
45 #define WRITE_ABSOLUTE_WORD(x,y) *(x) = (y)
48 # if defined(__GO32__) || defined(__DJGPP__)
49 #define MK_PTR(seg, offset) (void *)(((unsigned)seg << 4) + (unsigned)offset)
50 #define READ_ABSOLUTE(x) \
51 (_farpeekb(_go32_conventional_mem_selector(), (unsigned)x))
52 #define READ_ABSOLUTE_WORD(x) \
53 (_farpeekw(_go32_conventional_mem_selector(), (unsigned)x))
54 #define WRITE_ABSOLUTE(x,y) \
55 _farpokeb(_go32_conventional_mem_selector(), (unsigned)x, (y))
56 #define WRITE_ABSOLUTE_WORD(x,y) \
57 _farpokew(_go32_conventional_mem_selector(), (unsigned)x, (y))
60 # ifdef OBSOLETE /* old djgpp V1.x way of mapping 1st MB */
61 #define MK_PTR(seg, offset) (void *)(0xE0000000+((((unsigned)seg << 4) \
63 #define READ_ABSOLUTE(x) *(x)
64 #define READ_ABSOLUTE_WORD(x) *(x)
65 #define WRITE_ABSOLUTE(x,y) *(x) = (y)
66 #define WRITE_ABSOLUTE_WORD(x,y) *(x) = (y)