#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>