/*
 * GNU-C Bindings for Falcon XBIOS functions
 * -- hyc 11-9-1992 (uunet!hanauma.Jpl.Nasa.Gov!hyc)
 */

#ifndef _FALCON_H
#define _FALCON_H

#ifndef _OSBIND_H
#include <osbind.h>
#endif

#ifdef __LATTICE__

#define __F_TRAP {register d2,a2; "4e4e";}

void _vfv(int);
char _bfv(int);
short _sfv(int);
long _lfv(int);

void _vfs(int, int);
short _sfs(int, int);
long _lfs(int, int);

void _vfss(int, int, int);
long _lfss(int, int, int);
void _vfll(int, long, long);
void _vflp(int, long, void *);

void _vfssr(int, int, int, long *);
void _vfssR(int, int, int, const long *);
void _vfpls(int, void *, long, int);
short _sflsp(int, long, int, void *);
short _sfpls(int, void *, long, int);
long _lfspp(int, int, void *, void *);

void _vfppss(int, void *, void *, int, int);
void _vfllpp(int, long, long, void *, void *);
void _vfplll(int, void *, long, long, long);
void _vfplpl(int, void *, long, void *, long);

long _lfsssss(int, int, int, int, int, int);

void _vfppllll(int, void *, void *, long, long, long, long);


#pragma inline _vfv((short))	__F_TRAP
#pragma inline d0=_bfv((short))	__F_TRAP
#pragma inline d0=_sfv((short))	__F_TRAP
#pragma inline d0=_lfv((short))	__F_TRAP

#pragma inline _vfs((short),(short))	__F_TRAP
#pragma inline d0=_sfs((short),(short))	__F_TRAP
#pragma inline d0=_lfs((short),(short))	__F_TRAP

#pragma inline _vfss((short),(short),(short))	__F_TRAP
#pragma inline d0=_lfss((short),(short),(short))	__F_TRAP
#pragma inline _vfll((short),,)	__F_TRAP
#pragma inline _vflp((short),,)	__F_TRAP

#pragma inline _vfssr((short),(short),(short),)	__F_TRAP
#pragma inline _vfssR((short),(short),(short),)	__F_TRAP
#pragma inline _vfpls((short),,,(short))	__F_TRAP
#pragma inline d0=_sfpls((short),,,(short))	__F_TRAP
#pragma inline d0=_sflsp((short),,(short),)	__F_TRAP
#pragma inline d0=_lfspp((short),(short),,)	__F_TRAP

#pragma inline _vfppss((short),,,(short),(short))	__F_TRAP
#pragma inline _vfllpp((short),,,,)	__F_TRAP
#pragma inline _vfplll((short),,,,)	__F_TRAP
#pragma inline _vfplpl((short),,,,)	__F_TRAP

#pragma inline d0=_lfsssss((short),(short),(short),(short),(short),(short))	__F_TRAP

#pragma inline _vfppllll((short),,,,,)	__F_TRAP

#else /* !__LATTICE__ */

#ifndef trap_14_wwwwww
#if __GNUC__ > 1
#define trap_14_wwwwww(n,a,b,c,d,e)					\
__extension__								\
({									\
	register long retvalue __asm__("d0");				\
	short _a = (short)(a);						\
	short _b = (short)(b);						\
	short _c = (short)(c);						\
	short _d = (short)(d);						\
	short _e = (short)(e);						\
									\
	__asm__ volatile						\
	("\
		movw	%6,sp@-; \
		movw	%5,sp@-; \
		movw	%4,sp@-; \
		movw	%3,sp@-; \
		movw	%2,sp@-; \
		movw	%1,sp@-; \
		trap	#14; \
		lea	sp@(12),sp"					\
	: "=r"(retvalue)						\
	: "g"(n), "r"(_a), "r"(_b), "r"(_c), "r"(_d), "r"(_e)		\
	: "d0", "d1", "d2", "a0", "a1", "a2", "memory");		\
	retvalue;							\
})
#else
#define trap_14_wwwwww(n,a,b,c,d,e)					\
({									\
	register long retvalue __asm__("d0");				\
	short _a = (short)(a);						\
	short _b = (short)(b);						\
	short _c = (short)(c);						\
	short _d = (short)(d);						\
	short _e = (short)(e);						\
									\
	__asm__ volatile						\
	("\
		movw	%4,sp@-; \
		movw	%3,sp@-; \
		movw	%2,sp@-; \
		movw	%1,sp@-; \
		movw	%0,sp@- "					\
	:: "r"(_a), "r"(_b), "r"(_c), "r"(_d), "r"(_e));		\
									\
	__asm__ volatile						\
	("\
		movw	%1,sp@-; \
		trap	#14; \
		lea	sp@(12),sp"					\
	: "=r"(retvalue)						\
	: "g"(n)							\
	: "d0", "d1", "d2", "a0", "a1", "a2");				\
	retvalue;							\
})
#endif
#endif

#ifndef trap_14_wllll
#define trap_14_wllll(n,a,b,c,d)					\
__extension__								\
({									\
	register long retvalue __asm__("d0");				\
	long _a = (long)(a);						\
	long _b = (long)(b);						\
	long _c = (long)(c);						\
	long _d = (long)(d);						\
									\
	__asm__ volatile						\
	("\
		movl	%5,sp@-; \
		movl	%4,sp@-; \
		movl	%3,sp@-; \
		movl	%2,sp@-; \
		movw	%1,sp@-; \
		trap	#14; \
		lea	sp@(18),sp"					\
	: "=r"(retvalue)						\
	: "g"(n), "r"(_a), "r"(_b), "r"(_c), "r"(_d)			\
	: "d0", "d1", "d2", "a0", "a1", "a2", "memory");		\
	retvalue;							\
})
#endif

#ifndef trap_14_wllllll
#define trap_14_wllllll(n,a,b,c,d,e,f)					\
__extension__								\
({									\
	register long retvalue __asm__("d0");				\
	long _a = (long)(a);						\
	long _b = (long)(b);						\
	long _c = (long)(c);						\
	long _d = (long)(d);						\
	long _e = (long)(e);						\
	long _f = (long)(f);						\
									\
	__asm__ volatile						\
	("\
		movl	%7,sp@-; \
		movl	%6,sp@-; \
		movl	%5,sp@-; \
		movl	%4,sp@-; \
		movl	%3,sp@-; \
		movl	%2,sp@-; \
		movw	%1,sp@-; \
		trap	#14; \
		lea	sp@(26),sp"					\
	: "=r"(retvalue)						\
	: "g"(n), "r"(_a), "r"(_b), "r"(_c), "r"(_d), "r"(_e), "r"(_f)	\
	: "d0", "d1", "d2", "a0", "a1", "a2", "memory");		\
	retvalue;							\
})
#endif

#ifndef trap_14_wll
#define trap_14_wll(n,a,b)						\
__extension__								\
({									\
	register long retvalue __asm__("d0");				\
	long _a = (long)(a);						\
	long _b = (long)(b);						\
									\
	__asm__ volatile						\
	("\
		movl	%3,sp@-; \
		movl	%2,sp@-; \
		movw	%1,sp@-; \
		trap	#14; \
		lea	sp@(10),sp"					\
	: "=r"(retvalue)						\
	: "g"(n), "r"(_a), "r"(_b)					\
	: "d0", "d1", "d2", "a0", "a1", "a2", "memory");		\
	retvalue;							\
})
#endif

#ifndef trap_14_wlwl
#define trap_14_wlwl(n,a,b,c)						\
__extension__								\
({									\
	register long retvalue __asm__("d0");				\
	long _a = (long)(a);						\
	short _b = (short)(b);						\
	long _c = (long)(c);						\
									\
	__asm__ volatile						\
	("\
		movl	%4,sp@-; \
		movw	%3,sp@-; \
		movl	%2,sp@-; \
		movw	%1,sp@-; \
		trap	#14; \
		lea	sp@(12),sp"					\
	: "=r"(retvalue)						\
	: "g"(n), "r"(_a), "r"(_b), "r"(_c)				\
	: "d0", "d1", "d2", "a0", "a1", "a2", "memory");		\
	retvalue;							\
})
#endif

#endif /* __LATTICE__ */

/*
 * Video
 */

/* Video mode codes */

#define	VERTFLAG	0x100	/* double-line on VGA, interlace on ST/TV */
#define	STMODES		0x080	/* ST compatible */
#define	OVERSCAN	0x040	/* Multiply X&Y rez by 1.2, ignored on VGA */
#define	PAL		0x020	/* PAL if set, else NTSC */
#define	VGA		0x010	/* VGA if set, else TV mode */
#define	COL80		0x008	/* 80 column if set, else 40 column */
#define	NUMCOLS		7	/* Mask for number of bits per pixel */
#define	BPS16		4
#define	BPS8		3
#define	BPS4		2
#define	BPS2		1
#define	BPS1		0

/* VgetMonitor() return values */
enum montypes {STmono=0, STcolor, VGAcolor, TVcolor};

/* VsetSync flags - 0=internal, 1=external */

#define	VID_CLOCK	1
#define	VID_VSYNC	2
#define	VID_HSYNC	4

#ifdef __LATTICE__

#define VsetScreen(a, b, c, d) _vfppss(5, a, b, c, d)
#define VsetMode(a) _sfs(88, a)
#define VgetMonitor() _sfv(89)
#define VsetSync(a) _vfs(90, a)
#define VgetSize(a) _lfs(91, a)
#define VsetRGB(a, b, c) _vfssR(93, a, b, c)
#define VgetRGB(a, b, c) _vfssr(94, a, b, c)
#define ValidMode(a) _sfs(95, a)
#define VsetMask(a, b) _vfss(150, a, b)

#else /* !__LATTICE__ */

#define VsetScreen(lscrn,pscrn,rez,mode)					\
	(void)trap_14_wllww((short)5,(long)(lscrn),(long)(pscrn),	\
		(short)(rez),(short)(mode))
#define VsetMode(mode)							\
	(short)trap_14_ww((short)88,(short)(mode))
#define VgetMonitor()							\
	(short)trap_14_w((short)89)
#define	VgetSize(mode)							\
	(long)trap_14_ww((short)91,(short)(mode))
#define	VsetSync(ext)							\
	(void)trap_14_ww((short)90,(short)(ext))
#define VsetRGB(index,count,array)					\
	(void)trap_14_wwwl((short)93,(short)(index),(short)(count),	\
		(long *)(array))
#define VgetRGB(index,count,array)					\
	(void)trap_14_wwwl((short)94,(short)(index),(short)(count),	\
		(long *)(array))
#define Validmode(mode)							\
	(short)trap_14_ww((short)95,(short)(mode))
#define VsetMask(andmask,ormask)					\
	(short)trap_14_www((short)150,(short)(andmask),(short)(ormask))

#endif /* __LATTICE__ */

/*
 * Sound
 */

/* _SND cookie values */

#define SND_PSG		0x01	/* Yamaha PSG */
#define	SND_8BIT	0x02	/* 8 bit DMA stereo */
#define	SND_16BIT	0x04	/* 16 bit CODEC */
#define	SND_DSP		0x08	/* DSP */
#define	SND_MATRIX	0x10	/* Connection Matrix */

/* XXX Docs say Falcon shows 0x3f. What does bit 0x20 mean ??? */

/*
 * Sound data memory layout - samples are all signed values
 *
 * 				(each char = 1 byte, 2 chars = 1 word)
 * 1 16 bit stereo track:	LLRRLLRRLLRRLLRR
 * 1 8 bit stereo track:	LRLRLRLR  
 * 2 16 bit stereo tracks:	L0R0L1R1L0R0L1R1
 *  etc...
 */

/* Setbuffer regions */

#define	SR_PLAY		0	/* Set playback registers */
#define	SR_RECORD	1	/* Set record registers */

/* Soundcmd Modes */

#define LTATTEN		0	/* Left-channel output attenuation */
#define	RTATTEN		1	/* Right channel atten */
#define	LTGAIN		2	/* Left input gain */
#define	RTGAIN		3	/* Right channel gain */
	/* gain and attenuation in 1.5 dB units, 0x00V0, V:0-15 */
#define	ADDERIN		4	/* Select inputs to adder 0=off, 1=on */
#define	ADCIN		1	/* Input from ADC */
#define	MATIN		2	/* Input from connection matrix */
#define	ADCINPUT	5	/* Select input to ADC, 0=mic, 1=PSG */
#define	ADCRT		1	/* Right channel input */
#define	ADCLT		2	/* Left input */
#define	SETPRESCALE	6	/* Set TT compatibility prescaler */
#define	PREMUTE		0	/* was /1280, now is invalid, mutes */
#define	PRE1280		PREMUTE
#define	PRE640		1	/* divide by 640 */
#define	PRE320		2	/* / 320 */
#define	PRE160		3	/* / 160 */

/* Record/Playback modes */

#define	STEREO8		0	/* 8 bit stereo */
#define	STEREO16	1	/* 16 bit stereo */
#define	MONO8		2	/* 8 bit mono */

/* Record/Playback tracks range from 0 to 3 */

/* XXX Doc for Settracks could be clearer. Can we individually set, e.g.,
   tracks 0 & 2 for playback, or must track selections be contiguous? */

/* Sound buffer interrupts */
	/* sources */
#define	SI_TIMERA	0	/* Timer A interrupt */
#define	SI_MFPI7	1	/* MFP interrupt 7 */
	/* causes */
#define	SI_NONE		0	/* No interrupts */
#define	SI_PLAY		1	/* Intr at end of play buffer */
#define	SI_RECORD	2	/* Intr at end of record buffer */
#define	SI_BOTH		3	/* Interrupt for either play or record */

/* Buffoper flags */

#define	SB_PLA_ENA	1	/* Play enable */
#define	SB_PLA_RPT	2	/* Play repeat (continuous loop mode) */
#define	SB_REC_ENA	4	/* Record enable */
#define SB_REC_RPT	8	/* Record repeat */

/* Dsptristate - 0=tristate, 1=enable */

/* Gpio modes */

#define	GPIO_SET	0	/* Set I/O direction, 0=in, 1=out */
#define	GPIO_READ	1	/* Read bits - only 3 bits on gpio */
#define	GPIO_WRITE	2	/* Write gpio data bits */

/* Devconnect (connection matrix) source devices */

#define	DMAPLAY		0	/* DMA playback */
#define	DSPXMIT		1	/* DSP transmit */
#define	EXTINP		2	/* External input */
#define	ADC		3	/* Microphone/PSG, see Soundcmd(ADCINPUT) */

/* Devconnect destination devices, bitmapped */

#define	DMAREC		1	/* DMA record */
#define	DSPRECV		2	/* DSP receive */
#define	EXTOUT		4	/* External output */
#define	DAC		8	/* Headphone, internal speaker, monitor */

/* Devconnect clock sources */

#define	CLK25M		0	/* Internal 25.175 MHz clock */
#define	CLKEXT		1	/* External clock */
#define	CLK32M		2	/* Internal 32 MHz. Invalid for CODEC */

/* Devconnect clock prescaler values */

/* XXX Doc lists incorrect hz numbers for many of these... */

#define CLKOLD		0	/* TT compatible, see Soundcmd(SETPRESCALE) */
#define	CLK50K		1	/* 49170 hz */
#define	CLK33K		2	/* 32780 hz */
#define	CLK25K		3	/* 24585 hz */
#define	CLK20K		4	/* 19668 hz */
#define	CLK16K		5	/* 16390 hz */
		/*	6	(14049 hz) invalid for CODEC */
#define	CLK12K		7	/* 12292 hz */
		/*	8	(10927 hz) invalid for CODEC */
#define	CLK10K		9	/* 9834 hz */
		/*	10	(8940 hz) invalid for CODEC */
#define	CLK8K		11	/* 8195 hz */
		/*	12	(7565 hz) invalid */
		/*	13	(7024 hz) invalid */
		/*	14	(6556 hz) invalid */
		/*	15	(6146 hz) invalid */

/* Sndstatus command */

#define	SND_CHECK	0	/* Check current status */
#define	SND_RESET	1	/* Reset sound system */
	/*
	 * Reset effects: DSP tristated, gain=atten=0, matrix reset,
	 * ADDERIN=0, Mode=STEREO8, Play=Record=Monitor tracks=0,
	 * interrupts disabled, buffer operation disabled.
	 */

/* Sndstatus status return */

#define	SS_OK		0	/* No errors */
#define	SS_CTRL		1	/* Invalid control field (Data assumed OK) */
#define	SS_SYNC		2	/* Invalid sync format (mutes) */
#define	SS_SCLK		3	/* Serial clock out of valid range (mutes) */

#define	SS_RTCLIP	0x10	/* Right channel is clipping */
#define	SS_LTCLIP	0x20	/* Left channel is clipping */

/* Structure used by Buffptr */

typedef struct SndBufPtr {
	char *play;
	char *record;
	long reserve1;
	long reserve2;
} SndBufPtr;

#ifdef __LATTICE__

long _lfS(int, SndBufPtr *);
#pragma inline d0=_lfS((short),)	__F_TRAP

#define Locksnd() _lfv(128)
#define Unlocksnd() _lfv(129)
#define Soundcmd(a, b) _lfss(130, a, b)
#define Setbuffer(a, b, c) _lfspp(131, a, b, c)
#define Setmode(a) _lfs(132, a)
#define Settracks(a, b) _lfss(133, a, b)
#define Setmontracks(a) _lfs(134, a)
#define Setinterrupt(a, b) _lfss(135, a, b)
#define Buffoper(a) _lfs(136, a)
#define Dsptristate(a, b) _lfss(137, a, b)
#define Gpio(a, b) _lfss(138, a, b)
#define Devconnect(a, b, c, d, e) _lfsssss(139, a, b, c, d, e)
#define Sndstatus(a) _lfs(140, a)
#define Buffptr(a) _lfS(141, a)

#else /* !__LATTICE__ */

#define Locksnd()							\
	(long)trap_14_w((short)128)
#define Unlocksnd()							\
	(long)trap_14_w((short)129)
#define Setbuffer(region,beg,end)					\
	(long)trap_14_wwll((short)131,(short)(region),(long)(beg),(long)(end))
#define Soundcmd(mode,data)						\
	(long)trap_14_www((short)130,(short)(mode),(short)(data))
#define Setmode(stereo_mode)						\
	(long)trap_14_ww((short)132,(short)(stereo_mode))
#define Settracks(play,rec)						\
	(long)trap_14_www((short)133,(short)(play),(short)(rec))
#define Setmontracks(montrack)						\
	(long)trap_14_ww((short)134,(short)(montrack))
#define Setinterrupt(src_inter,cause)					\
	(long)trap_14_www((short)135,(short)(src_inter),		\
		(short)(cause))
#define Buffoper(mode)							\
	(long)trap_14_ww((short)136,(short)(mode))
#define Dsptristate(dspxmit,dsprec)					\
	(long)trap_14_www((short)137,(short)(dspxmit),			\
		(short)(dsprec))
#define Gpio(mode,data)							\
	(long)trap_14_www((short)138,(short)(mode),(short)(data))
#define Devconnect(src,dst,sclk,pre,proto)				\
	(long)trap_14_wwwwww((short)139,(short)(src),(short)(dst),	\
		(short)(sclk),(short)(pre),(short)(proto))
#define Sndstatus(reset)						\
	(long)trap_14_ww((short)140,(short)(reset))
#define Buffptr(ptr)							\
	(long)trap_14_wl((short)141,(long)(ptr))

#endif /* __LATTICE__ */

/*
 * DSP functions
 *
 * Don't even *think* of trying to use these without the manual!
 */

#ifdef __LATTICE__

#define Dsp_DoBlock(a, b, c, d) _vfplpl(96, a, b, c, d)
#define Dsp_BlkHandShake(a, b, c, d) _vfplpl(97, a, b, c, d)
#define Dsp_BlkUnpacked(a, b, c, d) _vfplpl(98, a, b, c, d)
#define Dsp_InStream(a, b, c, d) _vfplll(99, a, b, c, d)
#define Dsp_OutStream(a, b, c, d) _vfplll(100, a, b, c, d)
#define Dsp_IOStream(a, b, c, d, e, f) _vfppllll(101, a, b, c, d, e, f)
#define Dsp_RemoveInterrupt(a) _vfs(102, a)
#define Dsp_GetWordSize() _sfv(103)
#define Dsp_Lock() _sfv(104)
#define Dsp_Unlock() _vfv(105)
#define Dsp_Available(a, b) _vfll(106, a, b)
#define Dsp_Reserve(a, b) _vfll(107, a, b)
#define Dsp_LoadProg(a, b, c) _sflsp(108, a, b, c)
#define Dsp_ExecProg(a, b, c) _vfpls(109, a, b, c)
#define Dsp_ExecBoot(a, b, c) _vfpls(110, a, b, c)
#define Dsp_LodToBinary(a, b) _vflp(111, a, b)
#define Dsp_TriggerHC(a) _vfs(112, a)
#define Dsp_RequestUniqueAbility() _sfv(113)
#define Dsp_GetProgAbility() _sfv(114)
#define Dsp_FlushSubroutines() _sfv(115)
#define Dsp_LoadSubroutine(a, b, c) _sfpls(116, a, b, c)
#define Dsp_InqSubrAbility(a) _sfs(117, a)
#define Dsp_RunSubroutine(a) _sfs(118, a)
#define Dsp_Hf0(a) _sfs(119, a)
#define Dsp_Hf1(a) _sfs(120, a)
#define Dsp_Hf2() _sfv(121)
#define Dsp_Hf3() _sfv(122)
#define Dsp_BlkWords(a, b, c, d) _vfplpl(123, a, b, c, d)
#define Dsp_BlkBytes(a, b, c, d) _vfplpl(124, a, b, c, d)
#define Dsp_Hstat() _bfv(125)
#define Dsp_SetVectors(a, b) _vfll(126, a, b)
#define Dsp_MultBlocks(a, b, c, d) _vfllpp(127, a, b, c, d)

#else /* !__LATTICE__ */

#define	Dsp_DoBlock(data_in,size_in,data_out,size_out)			\
	(void)trap_14_wllll((short)96,(long)(data_in),(long)(size_in),	\
		(long)(data_out),(long)(size_out))
#define	Dsp_BlkHandShake(data_in,size_in,data_out,size_out)		\
	(void)trap_14_wllll((short)97,(long)(data_in),(long)(size_in),	\
		(long)(data_out),(long)(size_out))
#define	Dsp_BlkUnpacked(data_in,size_in,data_out,size_out)		\
	(void)trap_14_wllll((short)98,(long)(data_in),(long)(size_in),	\
		(long)(data_out),(long)(size_out))
#define	Dsp_BlkWords(data_in,size_in,data_out,size_out)			\
	(void)trap_14_wllll((short)123,(long)(data_in),(long)(size_in),	\
		(long)(data_out),(long)(size_out))
#define	Dsp_BlkBytes(data_in,size_in,data_out,size_out)			\
	(void)trap_14_wllll((short)124,(long)(data_in),(long)(size_in),	\
		(long)(data_out),(long)(size_out))
#define	Dsp_MultBlocks(numsend,numrecv,sendblks,recvblks)		\
	(void)trap_14_wllll((short)127,(long)(numsend),(long)(numrecv),	\
		(long)(sendblks),(long)(recvblks))
#define	Dsp_InStream(data_in,blksiz,numblks,blksdone)			\
	(void)trap_14_wllll((short)99,(long)(data_in),(long)(blksiz),	\
		(long)(numblks),(long)(blksdone))
#define	Dsp_OutStream(data_out,blksiz,numblks,blksdone)			\
	(void)trap_14_wllll((short)100,(long)(data_out),(long)(blksiz),	\
		(long)(numblks),(long)(blksdone))
#define	Dsp_IOStream(data_in,data_out,blkisiz,blkosiz,numblks,blksdone)	\
	(void)trap_14_wllllll((short)101,(long)(data_in),(long)(data_out),\
		(long)(blkisiz),(long)(blkosiz),(long)(numblks),	\
		(long)(blksdone))
#define	Dsp_SetVectors(rcvr,xmtr)					\
	(void)trap_14_wll((short)126,(long)(rcvr),(long)(xmtr))
#define	Dsp_RemoveInterrupts(mask)					\
	(void)trap_14_ww((short)102,(short)(mask))
#define	Dsp_GetWordSize()	(short)trap_14_w((short)103)
#define	Dsp_Lock()		(short)trap_14_w((short)104)
#define	Dsp_Unlock()		(void)trap_14_w((short)105)
#define	Dsp_Available(xmem,ymem)					\
	(void)trap_14_wll((short)106,(long)(xmem),(long)(ymem))
#define	Dsp_Reserve(xmem,ymem)						\
	(short)trap_14_wll((short)107,(long)(xmem),(long)(ymem))
#define	Dsp_LoadProg(file,ability,buffer)				\
	(short)trap_14_wlwl((short)108,(long)(file),(short)(ability),	\
		(long)(buffer))
#define	Dsp_ExecProg(codeptr,codesiz,ability)				\
	(void)trap_14_wllw((short)109,(long)(codeptr),(long)(codesiz),	\
		(short)(ability))
#define	Dsp_ExecBoot(codeptr,codesiz,ability)				\
	(void)trap_14_wllw((short)110,(long)(codeptr),(long)(codesiz),	\
		(short)(ability))
#define	Dsp_LodToBinary(file,codeptr)					\
	(long)trap_14_wll((short)111,(long)(file),(long)(codeptr))
#define	Dsp_TriggerHC(vector)						\
	(void)trap_14_ww((short)112,(short)(vector))
#define	Dsp_RequestUniqueAbility()	(short)trap_14_w((short)113)
#define	Dsp_GetProgAbility()		(short)trap_14_w((short)114)
#define	Dsp_FlushSubroutines()		(void)trap_14_w((short)115)
#define	Dsp_LoadSubroutine(ptr,siz,ability)				\
	(short)trap_14_wllw((short)116,(long)(ptr),(long)(siz),		\
		(short)(ability))
#define	Dsp_InqSubrAbility(ability)					\
	(short)trap_14_ww((short)117,(short)(ability))
#define	Dsp_RunSubroutine(handle)					\
	(short)trap_14_ww((short)118,(short)(handle))
#define	Dsp_Hf0(flag)							\
	(short)trap_14_ww((short)119,(short)(flag))
#define	Dsp_Hf1(flag)							\
	(short)trap_14_ww((short)120,(short)(flag))
#define	Dsp_Hf2()		(short)trap_14_w((short)121)
#define	Dsp_Hf3()		(short)trap_14_w((short)122)
#define	Dsp_HStat()		(char)trap_14_w((short)125)

#endif /* __LATTICE__ */

#endif /* _FALCON_H */
