// X680x0のDMA用関数
// Copyright (C) 2000 by AIG-Soft（一部を除く）

#ifndef	__AIG_DMA__
#define	__AIG_DMA__	1	/* ヘッダー読み込みシンボル */

//------------------------------------

typedef struct {	// DMAレジスター構造体
	unchar	csr;
	unchar	cer;
	unshort	spare1;
	unchar	dcr;
	unchar	ocr;
	unchar	scr;
	unchar	ccr;
	unshort	spare2;
	unshort	mtc;
	unchar	*mar;
	unlong	spare3;
	unchar	*dar;
	unshort	spare4;
	unshort	btc;
	unchar	*bar;
	unlong	spare5;
	unchar	spare6;
	unchar	niv;
	unchar	spare7;
	unchar	eiv;
	unchar	spare8;
	unchar	mfc;
	unshort	spare9;
	unchar	spare10;
	unchar	cpr;
	unshort	spare11;
	unchar	spare12;
	unchar	dfc;
	unlong	spare13;
	unshort	spare14;
	unchar	spare15;
	unchar	bfc;
	unlong	spare16;
	unchar	spare17;
	unchar	gcr;
} DMAREG;

// 入出力定数
#define	DMA_OUT	0	// メモリ(ma)→デバイス(da)
#define	DMA_IN	BIT7	// メモリ(ma)←デバイス(da)

// CSRの転送終了待ちビット
#define	DMA_COMPLETE	(BIT7|BIT4)	// 転送終了かエラー発生まで

//------------------------------------

#ifdef	__cplusplus
extern	"C" {
#endif
// 危険な関数でもあるのでプロトタイプ宣言のみ
	DMAREG	*DMAadrs(int);
#ifdef	__cplusplus
}
#endif

//------------------------------------
// マクロ関数

#define	DMAadrs(ch)	((DMAREG *)(0xe84000+0x40*ch))

//------------------------------------

#endif
