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