Added infrastructure and definitions for general-purpose event and IRQ
handling for the Wine dos box. Removed the obsolete MZ_Tick. Added
event message loop, message handling, CLI/STI handling, and minimal
PIC support.
diff --git a/include/dosexe.h b/include/dosexe.h
index 2b317a0..7d126c7 100644
--- a/include/dosexe.h
+++ b/include/dosexe.h
@@ -9,8 +9,17 @@
#include <sys/types.h> /* pid_t */
#include "winbase.h" /* for LPSTARTUPINFO32A */
+#include "winnt.h" /* for PCONTEXT */
#include "sig_context.h"
+typedef struct _DOSSYSTEM {
+ int id;
+ void *data;
+ struct _DOSSYSTEM *next;
+} DOSSYSTEM;
+
+struct _DOSEVENT;
+
typedef struct _DOSTASK {
LPVOID img;
unsigned img_ofs;
@@ -18,14 +27,30 @@
WORD init_cs,init_ip,init_ss,init_sp;
WORD xms_seg;
WORD dpmi_seg,dpmi_sel,dpmi_flag;
- WORD system_timer;
HMODULE16 hModule;
char mm_name[128];
int mm_fd;
+ HANDLE hReadPipe,hXPipe;
int read_pipe,write_pipe;
pid_t task;
+ int sig_sent;
+ struct _DOSEVENT *pending,*current;
+ DOSSYSTEM *sys;
} DOSTASK, *LPDOSTASK;
+typedef struct _DOSEVENT {
+ int irq,priority;
+ void (*relay)(LPDOSTASK,PCONTEXT,void*);
+ void *data;
+ struct _DOSEVENT *next;
+} DOSEVENT, *LPDOSEVENT;
+
+#define DOS_PRIORITY_REALTIME 0 /* IRQ0 */
+#define DOS_PRIORITY_KEYBOARD 1 /* IRQ1 */
+#define DOS_PRIORITY_VGA 2 /* IRQ9 */
+#define DOS_PRIORITY_MOUSE 5 /* IRQ12 */
+#define DOS_PRIORITY_SERIAL 10 /* IRQ4 */
+
#if defined(linux) && defined(__i386__)
#define MZ_SUPPORTED
@@ -33,19 +58,21 @@
extern BOOL MZ_InitTask( LPDOSTASK lpDosTask );
extern void MZ_KillModule( LPDOSTASK lpDosTask );
extern LPDOSTASK MZ_AllocDPMITask( HMODULE16 hModule );
+extern void DOSVM_QueueEvent( int irq, int priority, void (*relay)(LPDOSTASK,PCONTEXT,void*), void *data );
#endif /* linux-i386 */
#define V86_FLAG 0x00020000
-extern void MZ_Tick( WORD handle );
-
extern BOOL MZ_CreateProcess( HFILE hFile, OFSTRUCT *ofs, LPCSTR cmdline, LPCSTR env,
LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES tsa,
BOOL inherit, LPSTARTUPINFOA startup,
LPPROCESS_INFORMATION info );
extern int DOSVM_Enter( PCONTEXT context );
+extern void DOSVM_PIC_ioport_out( WORD port, BYTE val );
extern void DOSVM_SetTimer( unsigned ticks );
extern unsigned DOSVM_GetTimer( void );
+extern void DOSVM_SetSystemData( int id, void *data );
+extern void* DOSVM_GetSystemData( int id );
#endif /* __WINE_DOSEXE_H */