#ifdef	M68010
/* TODO CHANGE TO WORK WITH 020 */
#ifdef	CAPTURE
#define NSAVFRAMES	64
/*
 * capture the last NSAVFRAMES of asynchronous events for debugging.  Must
 * also enable in locore.s.
 */
struct xframe {
	int	f_regs[4];
	ushort	f_code;
	short	f_type;
	int	f_psl;
	int	f_pc;
	ushort	f_vector;
	ushort	f_ssw;
	int	f_faddr;
	int	f_spaddr;
};
struct xframe	sav_frames[NSAVFRAMES];
int		sav_framei = 0;
int		do_capture = CAPTURE;

capture(exsf)
struct exsf exsf;
{
	int s;

	if (do_capture == 0)
		return;
	s = spl7();
	sav_frames[sav_framei].f_code = frame.f_code;
	sav_frames[sav_framei].f_type = frame.f_type;
	sav_frames[sav_framei].f_psl = frame.f_psl;
	sav_frames[sav_framei].f_pc = frame.f_pc;
	sav_frames[sav_framei].f_vector = frame.f_vector;
	if (frame.f_vector & 0x8000) {
		sav_frames[sav_framei].f_ssw = frame.f_ssw;
		sav_frames[sav_framei].f_faddr = frame.f_faddr;
	} else {
		sav_frames[sav_framei].f_ssw = 0;
		sav_frames[sav_framei].f_faddr = 0;
	}
	sav_frames[sav_framei].f_spaddr = (int)(&frame.f_psl)+2;  /* soft */
	sav_framei = (++sav_framei) % NSAVFRAMES;
	splx(s);
}

pcapture()
{
	register struct xframe *f;
	register int i;
	int s = spl7();

	i = sav_framei;
	f = &sav_frames[i];
	printf(        "VEC	COD/TYP	PC	PSL	SP 	SSW	FADDR\n");
	do {
		printf("%x	%x %x	%x	%x	%x	%x	%x\n",
		    (f->f_vector >> 2) & 0x3FF, f->f_code, f->f_type, f->f_pc,
		    f->f_psl&0xFFFF, f->f_spaddr, f->f_ssw, f->f_faddr);
		i = (++i) % NSAVFRAMES;
		f = &sav_frames[i];
	} while ( i != sav_framei );
	splx(s);
}
#endif	CAPTURE
#endif	M68010
