#ifndef	_PC_H
#define	_PC_H
#define _HARDWARE_H

#ifndef	_GLOBAL_H
#include "global.h"
#endif

#ifndef _SESSION_H
#include "session.h"
#endif

#ifdef TNOS_68K
#include <curses.h>
#undef echo
#undef raw
#undef refresh
#undef proto
#endif

#define	NSW	10	/* Number of stopwatch "memories" */

struct stopwatch {
	long calls;
	int16 maxval;
	int16 minval;
};
struct screen {
#ifndef TNOS_68K
	char *save;		/* Screen save buffer */
	int row;		/* Saved cursor location */
	int col;
#else
	WINDOW *win;		/* active WINDOW */
	WINDOW *textwin;	/* text area WINDOW */
	WINDOW *splitwin;	/* split screen input WINDOW */
	WINDOW *statwin;	/* status area WINDOW */
#endif
	unsigned char attr;
	unsigned char statline;
};
#define	NULLSCREEN	(struct screen *)0

extern struct stopwatch Sw[];
extern int16 Intstk[];	/* Interrupt stack defined in pcgen.asm */
extern void (*Shutdown[])();	/* List of functions to call at shutdown */
extern char Mtasker;	/* Type of multitasker, if any */

/* In 8250.c: */
void asytimer __ARGS((void));

/* In scc.c: */
void scctimer __ARGS((void));
void sccstop __ARGS((void));

/* In pc.c: */
void clrbit __ARGS((unsigned port,char bits));
void ctick __ARGS((void));
INTERRUPT  (*getirq __ARGS((unsigned int)) ) __ARGS((void));
void freescreen __ARGS((struct session *sp));
int getmask __ARGS((unsigned irq));
void ioinit __ARGS((void));
void iostop __ARGS((void));
void kbint __ARGS((void));
int kbread __ARGS((void));
int maskoff __ARGS((unsigned irq));
int maskon __ARGS((unsigned irq));
void newscreen __ARGS((struct session *sp));
void pctick __ARGS((void));
void setbit __ARGS((unsigned port,char bits));
int setirq __ARGS((unsigned irq,INTERRUPT (*handler) __ARGS((void))));
void sysreset __ARGS((void));
void systick __ARGS((void));
void writebit __ARGS((unsigned port,char mask,int val));
long bioscnt __ARGS((void));

/* In pcgen.asm: */
INTERRUPT btick __ARGS((void));
void chktasker __ARGS((void));
void chtimer __ARGS((INTERRUPT (*)()));
unsigned long divrem __ARGS((int32 dividend,int16 divisor));
int16 getss __ARGS((void));
void giveup __ARGS((void));
int kbraw __ARGS((void));
int16 longdiv __ARGS((int16 divisor,int n,int16 *dividend));
int16 longmul __ARGS((int16 multiplier,int n,int16 *multiplicand));
INTERRUPT nullvec __ARGS((void));
void uchtimer __ARGS((void));
int16 clockbits __ARGS((void));

/* In stopwatch.asm: */
void swstart __ARGS((void));
int16 stopval __ARGS((void));

/* In sw.c: */
void swstop __ARGS((int n));

/* In command.asm: */
int start_back __ARGS((void));
int stop_back __ARGS((void));

#endif	/* _PC_H */
