Annotation of quake1/mplib.c, revision 1.1.1.1

1.1       root        1: #include <dpmi.h>
                      2: 
                      3: //#include "types.h"
                      4: typedef unsigned char BYTE;
                      5: typedef unsigned short WORD;
                      6: typedef unsigned long DWORD;
                      7: 
                      8: //#include "mgenord.h"
                      9: #define MGENVXD_REGISTER_ORD       1
                     10: #define MGENVXD_GETMEM_ORD         2
                     11: #define MGENVXD_DEREGISTER_ORD     3
                     12: #define MGENVXD_WAKEUP_ORD         4
                     13: #define MGENVXD_MAKEDQS_ORD        5
                     14: 
                     15: 
                     16: // Virtual 8086 API Ordinals
                     17: #define V86API_GETSELECTOR16_ORD (1)
                     18: #define V86API_GETSELECTOR32_ORD (2)
                     19: #define V86API_GETFLAT32_ORD (3)
                     20: #define V86API_MOVERP_ORD (6)
                     21: #define V86API_MOVEPR_ORD (7)
                     22: #define V86API_POST_ORD   (8)
                     23: #define V86API_INIT_ORD    (9)
                     24: #define V86API_UNINIT_ORD  (10)
                     25: #define V86API_INSERTKEY_ORD (11)
                     26: #define V86API_REMOVEHOTKEY_ORD  (12)
                     27: #define V86API_INSTALLHOTKEY_ORD (13)
                     28: #define V86API_HOOKINT48_ORD  (14)
                     29: #define V86API_WAKEUPDLL_ORD (15)
                     30: 
                     31: #define DPMIAPI_GETFLAT32_ORD (1)
                     32: #define DPMIAPI_POST_WINDOWS_ORD (2)
                     33: // these are DPMI functions.  Make sure they don't clash with the
                     34: // other MGENVXD_XXXX functions above, or the DPMI functions!
                     35: #define MGENVXD_GETQUEUECTR_ORD    6
                     36: #define MGENVXD_MOVENODE_ORD       7
                     37: #define MGENVXD_GETNODE_ORD        8
                     38: #define MGENVXD_FLUSHNODE_ORD      9
                     39: #define MGENVXD_MCOUNT_ORD         10
                     40: #define MGENVXD_MASTERNODE_ORD     11
                     41: #define MGENVXD_SANITYCHECK_ORD    12
                     42: #define MGENVXD_WAKEUPDLL_ORD       13
                     43: #define MGENVXD_WAIT_ORD           14
                     44: 
                     45: //
                     46: #define HWND_OFFSET (0)
                     47: #define UMSG_OFFSET (1)
                     48: #define SIZEREQUEST_OFFSET (2)
                     49: #define HVXD_OFFSET (3)
                     50: #define DATUM_OFFSET (4)
                     51: #define SLOT_OFFSET (5)
                     52: #define SIZEGIVEN_OFFSET (6)
                     53: #define SELECTOR32_OFFSET (7)
                     54: #define SELECTOR16_OFFSET (8)
                     55: 
                     56: //#include "magic.h"
                     57: #define MGENVXD_DEVICE_ID 0x18AA
                     58: 
                     59: //#include "rtq.h"
                     60: #define RTQ_NODE struct rtq_node
                     61: 
                     62: RTQ_NODE
                     63:    {
                     64:       RTQ_NODE *self; // Ring zero address of this node
                     65:       RTQ_NODE *left; // Ring zero address of preceding node
                     66:       RTQ_NODE *right; // Ring zero address of succeding node
                     67:       BYTE *      rtqDatum;  // Ring 3 Datum of Buffer (start of preface)
                     68:       BYTE *      rtqInsert; // Ring 3 insertion position
                     69:       WORD     rtqLen; // Length of buffer, excluding preface
                     70:       WORD     rtqUpCtr;  // Up Counter of bytes used so far
                     71:       WORD     rtqQCtr;   // number of nodes attached
                     72:       WORD     padding;   // DWORD alignment
                     73:    };
                     74: 
                     75: #define RTQ_PARAM_MOVENODE struct rtq_param_movenode
                     76: RTQ_PARAM_MOVENODE
                     77:    {
                     78:       WORD     rtqFromDQ;
                     79:       WORD     rtqToDQ;
                     80:    };
                     81: 
                     82: RTQ_NODE* rtq_fetch(RTQ_NODE*, RTQ_NODE*); // To, From
                     83: 
                     84: int _int86(int vector, __dpmi_regs *iregs, __dpmi_regs *oregs);
                     85: 
                     86: #define CHUNNEL_INT 0x48
                     87: 
                     88: #define int386         _int86
                     89: #define REGISTERS      __dpmi_regs
                     90: 
                     91: void
                     92: Yield(void)
                     93: {
                     94:        __dpmi_yield();
                     95: }
                     96: 
                     97: void
                     98: PostWindowsMessage(void)
                     99: {
                    100:    REGISTERS regs;
                    101: 
                    102:    regs.d.eax = DPMIAPI_POST_WINDOWS_ORD << 16 | MGENVXD_DEVICE_ID;
                    103:    regs.d.ebx = 0;
                    104:    regs.d.ecx = 0;
                    105:    int386(CHUNNEL_INT, &regs, &regs);
                    106: }
                    107: 
                    108: int
                    109: MGenWait(void)
                    110: {
                    111:    REGISTERS regs;
                    112: 
                    113:    regs.d.eax = MGENVXD_WAIT_ORD << 16 | MGENVXD_DEVICE_ID;
                    114:    int386(CHUNNEL_INT, &regs, &regs);
                    115:    return regs.d.eax;
                    116: }
                    117: 
                    118: int MGenGetQueueCtr(int qNo)
                    119: {
                    120:    REGISTERS   regs;
                    121: 
                    122:    regs.d.eax = MGENVXD_GETQUEUECTR_ORD << 16 | MGENVXD_DEVICE_ID;
                    123:    regs.d.ebx = qNo;
                    124:    int386(CHUNNEL_INT, &regs, &regs);
                    125: 
                    126:    return regs.d.eax;
                    127: }
                    128: 
                    129: RTQ_NODE *MGenMoveTo(int qFrom, int qTo)
                    130: {
                    131:    REGISTERS   regs;
                    132: 
                    133:    regs.d.eax = MGENVXD_MOVENODE_ORD << 16 | MGENVXD_DEVICE_ID;
                    134:    regs.d.ebx = qFrom;
                    135:    regs.d.ecx = qTo;
                    136:    int386(CHUNNEL_INT, &regs, &regs);
                    137: 
                    138:    return (RTQ_NODE *) regs.d.eax;
                    139: }
                    140: 
                    141: RTQ_NODE *MGenGetNode(int q)
                    142: {
                    143:    REGISTERS   regs;
                    144: 
                    145:    regs.d.eax = MGENVXD_GETNODE_ORD << 16 | MGENVXD_DEVICE_ID;
                    146:    regs.d.ebx = q;
                    147:    int386(CHUNNEL_INT, &regs, &regs);
                    148: 
                    149:    return (RTQ_NODE *) regs.d.eax;
                    150: }
                    151: 
                    152: RTQ_NODE *MGenGetMasterNode(unsigned *size)
                    153: {
                    154:    REGISTERS   regs;
                    155: 
                    156:    regs.d.eax = MGENVXD_MASTERNODE_ORD << 16 | MGENVXD_DEVICE_ID;
                    157:    int386(CHUNNEL_INT, &regs, &regs);
                    158:    *size = regs.d.ecx;
                    159: 
                    160:    return (RTQ_NODE *) regs.d.eax;
                    161: }
                    162: 
                    163: RTQ_NODE *MGenFlushNodes(int qFrom, int qTo)
                    164: {
                    165:    REGISTERS   regs;
                    166: 
                    167:    regs.d.eax = MGENVXD_FLUSHNODE_ORD << 16 | MGENVXD_DEVICE_ID;
                    168:    regs.d.ebx = qFrom;
                    169:    regs.d.ecx = qTo;
                    170:    int386(CHUNNEL_INT, &regs, &regs);
                    171: 
                    172:    return (RTQ_NODE *) regs.d.eax;
                    173: }
                    174: 
                    175: int MGenMCount(unsigned lowerOrderBits, unsigned upperOrderBits)
                    176: {
                    177:    REGISTERS   regs;
                    178: 
                    179:    regs.d.eax = MGENVXD_MCOUNT_ORD << 16 | MGENVXD_DEVICE_ID;
                    180:    regs.d.ebx = lowerOrderBits;
                    181:    regs.d.ecx = upperOrderBits;
                    182:    int386(CHUNNEL_INT, &regs, &regs);
                    183: 
                    184:    return regs.d.eax;
                    185: }
                    186: 
                    187: int MGenSanityCheck(void)
                    188: {
                    189:    REGISTERS   regs;
                    190: 
                    191:    regs.d.eax = MGENVXD_SANITYCHECK_ORD << 16 | MGENVXD_DEVICE_ID;
                    192:    int386(CHUNNEL_INT, &regs, &regs);
                    193: 
                    194:    return regs.d.eax;
                    195: }
                    196: 
                    197: void MGenWakeupDll(void)
                    198: {
                    199:    REGISTERS   regs;
                    200: 
                    201:    regs.d.eax = MGENVXD_WAKEUPDLL_ORD << 16 | MGENVXD_DEVICE_ID;
                    202:    int386(CHUNNEL_INT, &regs, &regs);
                    203: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.