1 | /* $Id: miscemu.h,v 1.1 1999-05-24 20:19:14 ktk Exp $ */
|
---|
2 |
|
---|
3 | /*
|
---|
4 | * Misc. emulation definitions
|
---|
5 | *
|
---|
6 | * Copyright 1995 Alexandre Julliard
|
---|
7 | */
|
---|
8 |
|
---|
9 | #ifndef __WINE_MISCEMU_H
|
---|
10 | #define __WINE_MISCEMU_H
|
---|
11 |
|
---|
12 | #include "winnt.h"
|
---|
13 | #include "ldt.h"
|
---|
14 |
|
---|
15 | /* msdos/dosconf.c */
|
---|
16 | extern int DOSCONF_ReadConfig(void);
|
---|
17 |
|
---|
18 | /* msdos/dosmem.c */
|
---|
19 | #include "pshpack1.h"
|
---|
20 |
|
---|
21 | typedef struct
|
---|
22 | {
|
---|
23 | WORD Com1Addr; /* 00: COM1 I/O address */
|
---|
24 | WORD Com2Addr; /* 02: COM2 I/O address */
|
---|
25 | WORD Com3Addr; /* 04: COM3 I/O address */
|
---|
26 | WORD Com4Addr; /* 06: COM4 I/O address */
|
---|
27 | WORD Lpt1Addr; /* 08: LPT1 I/O address */
|
---|
28 | WORD Lpt2Addr; /* 0a: LPT2 I/O address */
|
---|
29 | WORD Lpt3Addr; /* 0c: LPT3 I/O address */
|
---|
30 | WORD Lpt4Addr; /* 0e: LPT4 I/O address */
|
---|
31 | WORD InstalledHardware; /* 10: Installed hardware flags */
|
---|
32 | BYTE POSTstatus; /* 12: Power-On Self Test status */
|
---|
33 | WORD MemSize WINE_PACKED; /* 13: Base memory size in Kb */
|
---|
34 | WORD unused1 WINE_PACKED; /* 15: Manufacturing test scratch pad */
|
---|
35 | BYTE KbdFlags1; /* 17: Keyboard flags 1 */
|
---|
36 | BYTE KbdFlags2; /* 18: Keyboard flags 2 */
|
---|
37 | BYTE unused2; /* 19: Keyboard driver workspace */
|
---|
38 | WORD NextKbdCharPtr; /* 1a: Next character in kbd buffer */
|
---|
39 | WORD FirstKbdCharPtr; /* 1c: First character in kbd buffer */
|
---|
40 | WORD KbdBuffer[16]; /* 1e: Keyboard buffer */
|
---|
41 | BYTE DisketteStatus1; /* 3e: Diskette recalibrate status */
|
---|
42 | BYTE DisketteStatus2; /* 3f: Diskette motor status */
|
---|
43 | BYTE DisketteStatus3; /* 40: Diskette motor timeout */
|
---|
44 | BYTE DisketteStatus4; /* 41: Diskette last operation status */
|
---|
45 | BYTE DiskStatus[7]; /* 42: Disk status/command bytes */
|
---|
46 | BYTE VideoMode; /* 49: Video mode */
|
---|
47 | WORD VideoColumns; /* 4a: Number of columns */
|
---|
48 | WORD VideoPageSize; /* 4c: Video page size in bytes */
|
---|
49 | WORD VideoPageStartAddr; /* 4e: Video page start address */
|
---|
50 | BYTE VideoCursorPos[16]; /* 50: Cursor position for 8 pages */
|
---|
51 | WORD VideoCursorType; /* 60: Video cursor type */
|
---|
52 | BYTE VideoCurPage; /* 62: Video current page */
|
---|
53 | WORD VideoCtrlAddr WINE_PACKED; /* 63: Video controller address */
|
---|
54 | BYTE VideoReg1; /* 65: Video mode select register */
|
---|
55 | BYTE VideoReg2; /* 66: Video CGA palette register */
|
---|
56 | DWORD ResetEntry WINE_PACKED; /* 67: Warm reset entry point */
|
---|
57 | BYTE LastIRQ; /* 6b: Last unexpected interrupt */
|
---|
58 | DWORD Ticks; /* 6c: Ticks since midnight */
|
---|
59 | BYTE TicksOverflow; /* 70: Timer overflow if past midnight */
|
---|
60 | BYTE CtrlBreakFlag; /* 71: Ctrl-Break flag */
|
---|
61 | WORD ResetFlag; /* 72: POST Reset flag */
|
---|
62 | BYTE DiskOpStatus; /* 74: Last hard-disk operation status */
|
---|
63 | BYTE NbHardDisks; /* 75: Number of hard disks */
|
---|
64 | BYTE DiskCtrlByte; /* 76: Disk control byte */
|
---|
65 | BYTE DiskIOPort; /* 77: Disk I/O port offset */
|
---|
66 | BYTE LptTimeout[4]; /* 78: Timeouts for parallel ports */
|
---|
67 | BYTE ComTimeout[4]; /* 7c: Timeouts for serial ports */
|
---|
68 | WORD KbdBufferStart; /* 80: Keyboard buffer start */
|
---|
69 | WORD KbdBufferEnd; /* 82: Keyboard buffer end */
|
---|
70 | BYTE RowsOnScreenMinus1; /* 84: EGA only */
|
---|
71 | WORD BytesPerChar WINE_PACKED; /* 85: EGA only */
|
---|
72 | BYTE ModeOptions; /* 87: EGA only */
|
---|
73 | BYTE FeatureBitsSwitches; /* 88: EGA only */
|
---|
74 | BYTE VGASettings; /* 89: VGA misc settings */
|
---|
75 | BYTE DisplayCombination; /* 8A: VGA display combinations */
|
---|
76 | BYTE DiskDataRate; /* 8B: Last disk data rate selected */
|
---|
77 | } BIOSDATA;
|
---|
78 |
|
---|
79 | #include "poppack.h"
|
---|
80 |
|
---|
81 | extern HANDLE16 DOSMEM_BiosDataSeg;
|
---|
82 | extern HANDLE16 DOSMEM_BiosSysSeg;
|
---|
83 | extern BIOSDATA * DOSMEM_BiosData();
|
---|
84 | extern BYTE * DOSMEM_BiosSys();
|
---|
85 |
|
---|
86 | extern DWORD DOSMEM_CollateTable;
|
---|
87 |
|
---|
88 | extern DWORD DOSMEM_ErrorCall;
|
---|
89 | extern DWORD DOSMEM_ErrorBuffer;
|
---|
90 |
|
---|
91 | extern BOOL DOSMEM_Init(HMODULE16 hModule);
|
---|
92 | extern void DOSMEM_Tick(WORD timer);
|
---|
93 | extern WORD DOSMEM_AllocSelector(WORD);
|
---|
94 | extern char * DOSMEM_MemoryBase(HMODULE16 hModule);
|
---|
95 | extern LPVOID DOSMEM_GetBlock(HMODULE16 hModule, UINT size, UINT16* p);
|
---|
96 | extern BOOL DOSMEM_FreeBlock(HMODULE16 hModule, void* ptr);
|
---|
97 | extern LPVOID DOSMEM_ResizeBlock(HMODULE16 hModule, void* ptr, UINT size, UINT16* p);
|
---|
98 | extern UINT DOSMEM_Available(HMODULE16 hModule);
|
---|
99 | extern LPVOID DOSMEM_MapRealToLinear(DWORD); /* real-mode to linear */
|
---|
100 | extern LPVOID DOSMEM_MapDosToLinear(UINT); /* linear DOS to Wine */
|
---|
101 | extern UINT DOSMEM_MapLinearToDos(LPVOID); /* linear Wine to DOS */
|
---|
102 |
|
---|
103 | /* msdos/interrupts.c */
|
---|
104 | extern FARPROC16 INT_GetPMHandler( BYTE intnum );
|
---|
105 | extern void INT_SetPMHandler( BYTE intnum, FARPROC16 handler );
|
---|
106 | extern FARPROC16 INT_GetRMHandler( BYTE intnum );
|
---|
107 | extern void INT_SetRMHandler( BYTE intnum, FARPROC16 handler );
|
---|
108 | extern FARPROC16 INT_CtxGetHandler( CONTEXT *context, BYTE intnum );
|
---|
109 | extern void INT_CtxSetHandler( CONTEXT *context, BYTE intnum, FARPROC16 handler );
|
---|
110 | extern int INT_RealModeInterrupt( BYTE intnum, PCONTEXT context );
|
---|
111 |
|
---|
112 | /* msdos/ioports.c */
|
---|
113 | extern void IO_port_init (void);
|
---|
114 | extern DWORD IO_inport( int port, int count );
|
---|
115 | extern void IO_outport( int port, int count, DWORD value );
|
---|
116 |
|
---|
117 | /* msdos/int09.c */
|
---|
118 | extern void WINAPI INT_Int09Handler(CONTEXT*);
|
---|
119 | extern void WINAPI INT_Int09SendScan(BYTE);
|
---|
120 | extern BYTE WINAPI INT_Int09ReadScan(void);
|
---|
121 |
|
---|
122 | /* msdos/int10.c */
|
---|
123 | extern void WINAPI INT_Int10Handler(CONTEXT*);
|
---|
124 |
|
---|
125 | /* msdos/int11.c */
|
---|
126 | extern void WINAPI INT_Int11Handler(CONTEXT*);
|
---|
127 |
|
---|
128 | /* msdos/int12.c */
|
---|
129 | extern void WINAPI INT_Int12Handler(CONTEXT*);
|
---|
130 |
|
---|
131 | /* msdos/int13.c */
|
---|
132 | extern void WINAPI INT_Int13Handler(CONTEXT*);
|
---|
133 |
|
---|
134 | /* msdos/int15.c */
|
---|
135 | extern void WINAPI INT_Int15Handler(CONTEXT*);
|
---|
136 |
|
---|
137 | /* msdos/int16.c */
|
---|
138 | extern void WINAPI INT_Int16Handler(CONTEXT*);
|
---|
139 |
|
---|
140 | /* msdos/int17.c */
|
---|
141 | extern void WINAPI INT_Int17Handler(CONTEXT*);
|
---|
142 |
|
---|
143 | /* msdos/int19.c */
|
---|
144 | extern void WINAPI INT_Int19Handler(CONTEXT*);
|
---|
145 |
|
---|
146 | /* msdos/int1a.c */
|
---|
147 | extern DWORD INT1A_GetTicksSinceMidnight(void);
|
---|
148 | extern void WINAPI INT_Int1aHandler(CONTEXT*);
|
---|
149 |
|
---|
150 | /* msdos/int20.c */
|
---|
151 | extern void WINAPI INT_Int20Handler(CONTEXT*);
|
---|
152 |
|
---|
153 | /* msdos/int25.c */
|
---|
154 | extern void WINAPI INT_Int25Handler(CONTEXT*);
|
---|
155 |
|
---|
156 | /* msdos/int26.c */
|
---|
157 | extern void WINAPI INT_Int26Handler(CONTEXT*);
|
---|
158 |
|
---|
159 | /* msdos/int29.c */
|
---|
160 | extern void WINAPI INT_Int29Handler(CONTEXT*);
|
---|
161 |
|
---|
162 | /* msdos/int2f.c */
|
---|
163 | extern void WINAPI INT_Int2fHandler(CONTEXT*);
|
---|
164 |
|
---|
165 | /* msdos/int33.c */
|
---|
166 | extern void WINAPI INT_Int33Handler(CONTEXT*);
|
---|
167 | extern void WINAPI INT_Int33Message(UINT,WPARAM,LPARAM);
|
---|
168 |
|
---|
169 | /* msdos/dpmi.c */
|
---|
170 | typedef void WINAPI (*RMCBPROC)(CONTEXT*);
|
---|
171 | extern void WINAPI INT_Int31Handler(CONTEXT*);
|
---|
172 | extern FARPROC16 WINAPI DPMI_AllocInternalRMCB(RMCBPROC);
|
---|
173 | extern void WINAPI DPMI_FreeInternalRMCB(FARPROC16);
|
---|
174 | extern int DPMI_CallRMProc(CONTEXT*,LPWORD,int,int);
|
---|
175 |
|
---|
176 | /* msdos/xms.c */
|
---|
177 | extern void WINAPI XMS_Handler(CONTEXT*);
|
---|
178 |
|
---|
179 | /* loader/signal.c */
|
---|
180 | extern BOOL SIGNAL_Init(void);
|
---|
181 | extern void SIGNAL_SetHandler( int sig, void (*func)(), int flags );
|
---|
182 | extern void SIGNAL_MaskAsyncEvents( BOOL flag );
|
---|
183 | extern void SIGNAL_InitHandlers(void);
|
---|
184 |
|
---|
185 | /* misc/aspi.c */
|
---|
186 | extern void ASPI_DOS_HandleInt(CONTEXT *context);
|
---|
187 |
|
---|
188 | /* NOTE: Interrupts might get called from three modes: real mode, 16-bit, and
|
---|
189 | * (via DeviceIoControl) 32-bit. For automatic conversion of pointer
|
---|
190 | * parameters, interrupt handlers should use CTX_SEG_OFF_TO_LIN with
|
---|
191 | * the contents of a segement register as second and the contents of
|
---|
192 | * a *32-bit* general register as third parameter, e.g.
|
---|
193 | * CTX_SEG_OFF_TO_LIN( context, DS_reg(context), EDX_reg(context) )
|
---|
194 | * This will generate a linear pointer in all three cases:
|
---|
195 | * Real-Mode: Seg*16 + LOWORD(Offset) + V86BASE
|
---|
196 | * 16-bit: convert (Seg, LOWORD(Offset)) to linear
|
---|
197 | * 32-bit: use Offset as linear address (DeviceIoControl!)
|
---|
198 | *
|
---|
199 | * Real-mode is recognized by checking the V86 bit in the flags register,
|
---|
200 | * 32-bit mode is recognized by checking whether 'seg' is a system selector
|
---|
201 | * (0 counts also as 32-bit segment).
|
---|
202 | */
|
---|
203 | #define CTX_SEG_OFF_TO_LIN(context,seg,off) \
|
---|
204 | (ISV86(context) ? (void*)(V86BASE(context)+((seg)<<4)+(off&0xffff)) : \
|
---|
205 | (!seg || IS_SELECTOR_SYSTEM(seg))? (void *)off : PTR_SEG_OFF_TO_LIN(seg,off&0xffff))
|
---|
206 |
|
---|
207 | #define INT_BARF(context,num) \
|
---|
208 | fprintf( stderr, "int%x: unknown/not implemented parameters:\n" \
|
---|
209 | "int%x: AX %04x, BX %04x, CX %04x, DX %04x, " \
|
---|
210 | "SI %04x, DI %04x, DS %04x, ES %04x\n", \
|
---|
211 | (num), (num), AX_reg(context), BX_reg(context), CX_reg(context), \
|
---|
212 | DX_reg(context), SI_reg(context), DI_reg(context), \
|
---|
213 | (WORD)DS_reg(context), (WORD)ES_reg(context) )
|
---|
214 |
|
---|
215 | #endif /* __WINE_MISCEMU_H */
|
---|