/* * (C) Copyright 1992, ..., 2005 the "DOSEMU-Development-Team". * * for details see file COPYING in the DOSEMU distribution */ /* dos emulator, Matthias Lautner * Extensions by Robert Sanders, 1992-93 * */ #ifndef EMU_H #define EMU_H #include "config.h" #include #include #include #include #include "types.h" #include "extern.h" #include "machcompat.h" #include "cpu.h" #include "vm86plus.h" #include "priv.h" #include "mouse.h" #include "extern.h" #if 1 /* Set to 1 to use Silly Interrupt generator */ #define SIG 1 typedef struct { int fd; int irq; } SillyG_t; extern SillyG_t *SillyG; #endif #define inline __inline__ #define BIT(x) (1< IRQ3 .. IRQ15) */ struct keytable_entry *keytable; struct keytable_entry *altkeytable; unsigned short detach; char *debugout; char *pre_stroke; /* pointer to keyboard pre strokes */ /* Lock File business */ boolean full_file_locks; char *tty_lockdir; /* The Lock directory */ char *tty_lockfile; /* Lock file pretext ie LCK.. */ boolean tty_lockbinary; /* Binary lock files ? */ /* LFN support */ boolean lfn; /* type of mapping driver */ char *mappingdriver; /* List of temporary hacks * (at minimum 16, will be increased when needed) * * If a 'features' becomes obsolete (problem solved) it will * remain dummy for a while before re-used. * * NOTE: 'features' are not subject to permanent documentation! * * Currently assigned: * * (none) */ int features[16]; /* Time mode is TM_BIOS / TM_PIT / TM_LINUX, see iodev.h */ int timemode; /* Sound emulation */ int sound; uint16_t sb_base; uint8_t sb_dma; uint8_t sb_hdma; uint8_t sb_irq; char *sb_dsp; char *sb_mixer; uint16_t mpu401_base; char *sound_driver; /* OSS-specific options */ int oss_min_frags; int oss_max_frags; int oss_stalled_frags; int oss_do_post; int oss_min_extra_frags; int oss_dac_freq; /* joystick */ char *joy_device[2]; /* range for joystick axis values */ int joy_dos_min; /* must be > 0 */ int joy_dos_max; /* avoid setting this to > 250 */ int joy_granularity; /* the higher, the less sensitive - for wobbly joysticks */ int joy_latency; /* delay between nonblocking linux joystick reads */ int cli_timeout; /* cli timeout hack */ int pic_watchdog; /* pic watchdog reschedule hack */ } config_t; #define SPKR_OFF 0 #define SPKR_NATIVE 1 #define SPKR_EMULATED 2 /* * Right now, dosemu only supports two serial ports. */ #define SIG_SER SIGTTIN #define IO_READ 1 #define IO_WRITE 2 #define IO_RDWR (IO_READ | IO_WRITE) EXTERN int port_readable(unsigned short); EXTERN int port_writeable(unsigned short); EXTERN unsigned char read_port(unsigned short); EXTERN int write_port(unsigned int, unsigned short); EXTERN __inline__ void parent_nextscan(void); EXTERN __inline__ void disk_close(void); EXTERN void cpu_setup(void); EXTERN void cpu_reset(void); EXTERN void real_run_int(int); #define run_int do_int EXTERN int mfs_redirector(void); EXTERN int mfs_lfn(void); EXTERN int int10(void); EXTERN int int13(void); EXTERN int int16(void); EXTERN int int17(void); EXTERN void io_select(fd_set); EXTERN void io_select_init(void); EXTERN int pd_receive_packet(void); EXTERN int printer_tick(u_long); EXTERN void floppy_tick(void); EXTERN void open_kmem(void); EXTERN void close_kmem(void); EXTERN int parse_config(char *, char *); EXTERN void prepare_dexe_load(char *name); EXTERN void disk_init(void); EXTERN void disk_reset(void); EXTERN void serial_init(void); EXTERN void serial_reset(void); EXTERN void close_all_printers(void); EXTERN void serial_close(void); EXTERN void disk_close_all(void); EXTERN void init_all_printers(void); EXTERN int mfs_inte6(void); EXTERN int mfs_helper(state_t *regs); EXTERN void pkt_helper(void); EXTERN short pop_word(struct vm86_regs *); EXTERN void leavedos(int) NORETURN; EXTERN void add_to_io_select(int, u_char, void(*)(void)); EXTERN void remove_from_io_select(int, u_char); EXTERN void sigquit(int); #ifdef __linux__ EXTERN void sigalrm(int, struct sigcontext_struct); EXTERN void e_sigalrm(struct sigcontext_struct *context); EXTERN void sigio(int, struct sigcontext_struct); EXTERN void SIG_init(void); EXTERN void SIG_close(void); #endif EXTERN unsigned long int stack_init_top INIT(0xffffffff); EXTERN unsigned long int stack_init_bot INIT(0xffffffff); /* signals for Linux's process control of consoles */ #define SIG_RELEASE SIGUSR1 #define SIG_ACQUIRE SIGUSR2 EXTERN inline void SIGNAL_save( void (*signal_call)(void) ); extern void handle_signals(void); extern void handle_signals_force_reentry(void); extern void addset_signals_that_queue(sigset_t *x); extern void newsetqsig(int sig, void *handler); extern void setsig(int sig, void *handler); extern void newsetsig(int sig, void *handler); /* * DANG_BEGIN_REMARK * DOSEMU keeps system wide configuration status in a structure * called config. * DANG_END_REMARK */ EXTERN struct config_info config; /* * DANG_BEGIN_REMARK * The var `fatalerr` can be given a true value at any time to have DOSEMU * exit on the next return from vm86 mode. * DANG_END_REMARK */ EXTERN int fatalerr INIT(0); EXTERN int in_leavedos; /* * DANG_BEGIN_REMARK * The var 'running_DosC' is set by the DosC kernel and is used to handle * some things differently, e.g. the redirector. * It interfaces via INTe6,0xDC (DOS_HELPER_DOSC), but only if running_DosC * is !=0. At the very startup DosC issues a INTe6,0xdcDC to set running_DosC * with the contents of BX (which is the internal DosC version). * DANG_END_REMARK */ EXTERN int running_DosC INIT(0); EXTERN int dosc_interface(void); EXTERN void dump_config_status(void *); EXTERN void signal_init(void); EXTERN void device_init(void); EXTERN void memory_init(void); EXTERN void map_video_bios(void); EXTERN void stdio_init(void); EXTERN void time_setting_init(void); EXTERN void timer_interrupt_init(void); EXTERN void low_mem_init(void); EXTERN void print_version(void); EXTERN void keyboard_flags_init(void); EXTERN void video_config_init(void); EXTERN void video_post_init(void); EXTERN void video_mem_setup(void); EXTERN void printer_init(void); EXTERN void printer_mem_setup(void); EXTERN void video_close(void); EXTERN void hma_exit(void); EXTERN void ems_helper(void); EXTERN boolean_t ems_fn(struct vm86_regs *); EXTERN void mouse_helper(struct vm86_regs *); EXTERN void cdrom_helper(unsigned char *, unsigned char *); EXTERN int mscdex(void); EXTERN void boot(void); EXTERN void do_liability_disclaimer_prompt(int stage); EXTERN void install_dos(int post_boot); EXTERN int pkt_int(void); EXTERN int ipx_int7a(void); EXTERN void read_next_scancode_from_queue (void); EXTERN unsigned short detach (void); EXTERN void disallocate_vt (void); EXTERN void restore_vt (unsigned short vt); EXTERN void HMA_init(void); EXTERN void HMA_MAP(int HMA); EXTERN void hardware_run(void); extern char *Path_cdrom[]; #endif /* EMU_H */