File:  [RetroPC.NET] / xmil / io / dmac.h
Revision 1.7: download - view: text, annotated - select for diffs
Tue Jun 3 05:07:31 2008 JST (17 years, 4 months ago) by yui
Branches: MAIN
CVS tags: HEAD
change to c style comment


#define	DMAS_STOIC

#if defined(BYTESEX_LITTLE)
typedef union {
	struct {
		UINT8	flag;
		UINT8	padding;
		UINT8	addrl;
		UINT8	addrh;
	}	b;
	struct {
		UINT8	flag;
		UINT8	padding;
		UINT16	addr;
	}	w;
} DMACNT;

typedef union {
	struct {
		UINT8	ll;
		UINT8	lh;
		UINT8	nl;
		UINT8	nh;
	}	b;
	struct {
		UINT16	l;
		UINT16	n;
	}	w;
} DMALENG;

typedef union {
	struct {
		UINT8	al;
		UINT8	ah;
		UINT8	bl;
		UINT8	bh;
	}	b;
	struct {
		UINT16	a;
		UINT16	b;
	}	w;
} DMAADDR;
#else
typedef union {
	struct {
		UINT8	flag;
		UINT8	padding;
		UINT8	addrh;
		UINT8	addrl;
	}	b;
	struct {
		UINT8	flag;
		UINT8	padding;
		UINT16	addr;
	}	w;
} DMACNT;

typedef union {
	struct {
		UINT8	lh;
		UINT8	ll;
		UINT8	nh;
		UINT8	nl;
	}	b;
	struct {
		UINT16	l;
		UINT16	n;
	}	w;
} DMALENG;
typedef union {
	struct {
		UINT8	ah;
		UINT8	al;
		UINT8	bh;
		UINT8	bl;
	}	b;
	struct {
		UINT16	a;
		UINT16	b;
	}	w;
} DMAADDR;
#endif


#if defined(DMAS_STOIC)

enum {
	DMAF_WORKING		= 0x01,
	DMAF_INCREMENT		= 0x08,
	DMAF_MACH			= 0x10,
	DMAF_ENDB			= 0x20
};

typedef struct {
	UINT8	flag;
	UINT8	WR0;
	UINT8	mode;				/* DMA_MODE */
	UINT8	INT_ENBL;

	UINT8	WR4;
	UINT8	WR5;
	UINT8	MASK_BYT;
	UINT8	MACH_BYT;

	DMACNT	cnt_a;
	DMACNT	cnt_b;

	DMALENG	leng;
	DMAADDR	addr;

	UINT8	enable;				/* DMA_ENBL */
	UINT8	ready;				/* DMA_REDY */
	UINT8	RR_MSK;
	UINT8	RR;

	UINT8	INT_FLG;
	UINT8	INT_PLS;
	UINT8	INT_VCT;
	UINT8	dummydat;

	UINT	wcnt;
	UINT	wptr;
	UINT	rcnt;
	UINT	rptr;
	UINT8	wtbl[8];
	UINT8	rtbl[8];
} DMAC;

#else

typedef struct {
	UINT8	working;
	UINT8	increment;

	UINT8	mode;				/* DMA_MODE */
	UINT8	__cmd;				/* DMA_CMND */

	UINT8	enable;				/* DMA_ENBL */
	UINT8	ready;				/* DMA_REDY */

	UINT8	INT_ENBL;
	UINT8	INT_FLG;
	UINT8	INT_PLS;
	UINT8	INT_VCT;

	UINT8	MASK_BYT;
	UINT8	MACH_BYT;
	UINT8	MACH_FLG;
	UINT8	ENDB_FLG;

	UINT8	RR_MSK;
	UINT8	RR;

	UINT8	WR0;
#if 0
	UINT8	WR1;
	UINT8	WR2;
	UINT8	WR3;
#endif	/* 0 */
	UINT8	WR4;
	UINT8	WR5;
	UINT8	dummydat;
#if 0
	UINT8	padding;
#endif	/* 0 */

	DMACNT	cnt_a;
	DMACNT	cnt_b;

	DMALENG	leng;
	DMAADDR	addr;

	UINT	wcnt;
	UINT	wptr;
	UINT	rcnt;
	UINT	rptr;
	UINT8	wtbl[8];
	UINT8	rtbl[8];
} DMAC;

#endif


#ifdef __cplusplus
extern "C" {
#endif

void dmac_sendready(BRESULT ready);
BRESULT ieitem_dmac(UINT id);

void IOOUTCALL dmac_o(UINT port, REG8 dat);
REG8 IOINPCALL dmac_i(UINT port);

void dmac_reset(void);

#ifdef __cplusplus
}
#endif


RetroPC.NET-CVS <cvs@retropc.net>