summaryrefslogtreecommitdiffstats
path: root/usr.bin/doscmd/doscmd.h
blob: e545c29c39d203568258df7fd407edc15c62e1f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
/*
 * Copyright (c) 1992, 1993, 1996
 *	Berkeley Software Design, Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *	This product includes software developed by Berkeley Software
 *	Design, Inc.
 *
 * THIS SOFTWARE IS PROVIDED BY Berkeley Software Design, Inc. ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL Berkeley Software Design, Inc. BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 *	BSDI doscmd.h,v 2.3 1996/04/08 19:32:32 bostic Exp
 *
 * $FreeBSD$
 */


#ifdef __NetBSD__
#define USE_VM86
#endif

#include <sys/param.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/stat.h>

#include <dirent.h>
#include <fcntl.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ucontext.h>
#include <errno.h>

#include <sys/signalvar.h>
#include <machine/sigframe.h>

#include <machine/frame.h>
#include <machine/psl.h>
#include <machine/npx.h>
#ifdef USE_VM86
#include <machine/vm86.h>
#endif

#include "register.h"
#include "dos.h"
#include "callback.h"

#define drlton(a)	((islower((a)) ? toupper((a)) : (a)) - 'A')
#define drntol(a)	((a) + 'A')

/* 
** assorted hardware/scope constants 
*/

#define	MAX_AVAIL_SEG	0xa000

#define MAXPORT		0x400

#define N_PARALS_MAX	3
#define N_COMS_MAX	4	/* DOS restriction (sigh) */

struct vconnect_area {
        int     int_state;
        int     magic;                  /* 0x4242 -> PRB format */
        u_long  passthru[256>>5];       /* bitmap of INTs to handle */
        u_long  magiciret[2];           /* Bounds of "magic" IRET */
};
extern struct vconnect_area vconnect_area;
#define IntState vconnect_area.int_state

/* ParseBuffer.c */
int	ParseBuffer(char *, char **, int);

/* bios.c */
#define	BIOSDATA	((u_char *)0x400)
extern unsigned long	rom_config;
extern int nfloppies;
extern int ndisks;
extern int nserial;
extern int nparallel;

extern volatile int	poll_cnt;
void	bios_init(void);
void	wakeup_poll(void);
void	reset_poll(void);
void	sleep_poll(void);

/* cmos.c */
extern time_t	delta_clock;

void	cmos_init(void);

/* config.c */
int	read_config(FILE *fp);

/* cpu.c */
void	cpu_init(void);
int	emu_instr(regcontext_t *);
void	int00(regcontext_t *);
void	int01(regcontext_t *);
void	int03(regcontext_t *);
void	int0d(regcontext_t *);

/* debug.c */
extern int	vflag;
extern int	tmode;
extern FILE	*debugf;
extern int	debug_flags;

/* Lower 8 bits are int number */
#define D_ALWAYS 	0x0000100	/* always emit this message */
#define D_TRAPS 	0x0000200	/* trap-related activity */
#define D_FILE_OPS	0x0000400	/* file-related activity */
#define D_MEMORY	0x0000800	/* memory-related activity */
#define D_HALF		0x0001000 	/* "half-implemented" system calls */
#define	D_FLOAT		0x0002000	/* ??? */
#define	D_DISK		0x0004000	/* disk (not file) operations */
#define	D_TRAPS2	0x0008000
#define	D_PORT		0x0010000	/* port accesses */
#define	D_EXEC		0x0020000
#define	D_ITRAPS	0x0040000
#define	D_REDIR		0x0080000	/* redirector functions */
#define	D_PRINTER	0x0100000
#define	D_TRAPS3	0x0200000
#define	D_DEBUGIN	0x0400000
#define D_DOSCALL	0x0800000	/* MS-DOS function results */
#define D_XMS		0x1000000	/* XMS calls */
#define D_EMS		0x2000000	/* EMS calls */
#define D_VIDEO		0x4000000	/* video-related activity */

#define	TTYF_ECHO	0x00000001
#define	TTYF_ECHONL	0x00000003
#define	TTYF_CTRL	0x00000004
#define	TTYF_BLOCK	0x00000008
#define	TTYF_POLL	0x00000010
#define	TTYF_REDIRECT	0x00010000	/* Cannot have 0xffff bits set */

#define	TTYF_ALL	(TTYF_ECHO | TTYF_CTRL | TTYF_REDIRECT)
#define	TTYF_BLOCKALL	(TTYF_ECHO | TTYF_CTRL | TTYF_REDIRECT | TTYF_BLOCK)

void	unknown_int2(int, int, regcontext_t *);
void	unknown_int3(int, int, int, regcontext_t *);
void	unknown_int4(int, int, int, int, regcontext_t *);
void	fatal(const char *, ...) __printflike(1, 2);
void	debug(int, const char *, ...) __printflike(2, 3);
void	dump_regs(regcontext_t *);
void	debug_set(int);
void	debug_unset(int);
u_long	debug_isset(int);

/* disktab.c */
int	map_type(int, int *, int *, int *);

/* doscmd.c */
extern int		capture_fd;
extern int		dead;
extern int		xmode;
extern int		booting;
extern int		raw_kbd;
extern int		timer_disable;
extern char		cmdname[];
extern struct timeval	boot_time;
extern unsigned long	*ivec;

int	_prog(char *);
void	call_on_quit(void (*)(void *), void *);
void	done(regcontext_t *, int);
void	iomap_port(int, int);
int 	open_prog(char *);
void	put_dosenv(const char *);
void 	quit(int);
int	squirrel_fd(int);

/* ems.c */
int	ems_init(void);
void	ems_entry(regcontext_t *);

/* emuint.c */
extern void	emuint(regcontext_t *REGS);

/* i386-pinsn.c */
extern int	i386dis(unsigned short, unsigned short,
    unsigned char *, char *, int);

/* int.c */
void	init_ints(void);
int	isinhardint(int);
void	softint(int);
void	hardint(int);
void	resume_interrupt(void);
void	unpend(int);
void	send_eoi(void);
void	set_eoir(int, void (*)(void *), void *);

/* int10.c */
extern void	int10(regcontext_t *);

/* int13.c */
extern int	init_hdisk(int drive, int cyl, int head, int tracksize,
			   char *file, char *boot_sector);
extern int	init_floppy(int drive, int type, char *file);
extern int	disk_fd(int drive);
extern void	make_readonly(int drive);
extern int	search_floppy(int i);
extern void	disk_bios_init(void);

/* int16.c */
void	int16(regcontext_t *);

/* int17.c */
void	int17(regcontext_t *);
void	lpt_poll(void);
void	printer_direct(int printer);
void	printer_spool(int printer, char *print_queue);
void	printer_timeout(int printer, char *time_out);

/* int1a.c */
void	int1a(regcontext_t *);

/* int2f.c */
extern void	int2f(regcontext_t *);

/* intff.c */
extern int	int2f_11(regcontext_t *REGS);
extern void	intff(regcontext_t *REGS);

/* mem.c */
extern char	*dosmem;

extern void	mem_init(void);
extern int	mem_alloc(int size, int owner, int *biggestp);
extern int	mem_adjust(int addr, int size, int *availp);
extern void	mem_free_owner(int owner);
extern void	mem_change_owner(int addr, int owner);

/* mouse.c */
void	int33(regcontext_t *);
void	mouse_init(void);

/* net.c */
void	net_init(void);

/* port.c */
void	define_input_port_handler(int, unsigned char (*)(int));
void	define_output_port_handler(int, void (*)(int, unsigned char));
void	inb(regcontext_t *, int);
unsigned char	inb_port(int);
unsigned char	inb_speaker(int);
unsigned char	inb_traceport(int);
void	init_io_port_handlers(void);
void	insb(regcontext_t *, int);
void	insx(regcontext_t *, int);
void	inx(regcontext_t *, int);
void	outb(regcontext_t *, int);
void	outb_port(int, unsigned char);
void	outb_speaker(int, unsigned char);
void	outb_traceport(int, unsigned char);
void	outsb(regcontext_t *, int);
void	outsx(regcontext_t *, int);
void	outx(regcontext_t *, int);
void	speaker_init(void);

/* setver.c */
extern void	setver(char *, short);
extern short	getver(char *);

/* signal.c */
extern struct sigframe	*saved_sigframe;
extern regcontext_t	*saved_regcontext;
extern int		saved_valid;
extern void		setsignal(int s, void (*h)(struct sigframe *));

/* timer.c */
extern void	timer_init(void);

/* trace.c */
extern int	resettrace(regcontext_t *);
extern void	tracetrap(regcontext_t *);

/* xms.c */
extern void	get_raw_extmemory_info(regcontext_t *REGS);
extern int	int2f_43(regcontext_t *REGS);
extern void	initHMA(void);
extern void	xms_init(void);
extern u_long	xms_maxsize;

/****************************** dirty below here *****************************/extern int nmice;
OpenPOWER on IntegriCloud