--- np2/io/dmac.h 2003/10/16 17:57:50 1.1.1.1 +++ np2/io/dmac.h 2007/11/03 00:00:20 1.10 @@ -5,16 +5,18 @@ enum { - DMA_CH00 = 0, - DMA_CH01 = 1, - DMA_2HD = 2, - DMA_2DD = 3, - DMAEXT_START = 0, DMAEXT_END = 1, DMAEXT_BREAK = 2, - DMA_INITSIGNALONLY = 1 + DMA_INITSIGNALONLY = 1, + + DMADEV_NONE = 0, + DMADEV_2HD = 1, + DMADEV_2DD = 2, + DMADEV_SASI = 3, + DMADEV_SCSI = 4, + DMADEV_CS4231 = 5 }; #if defined(BYTESEX_LITTLE) @@ -34,40 +36,52 @@ enum { #endif typedef struct { + void (DMACCALL * outproc)(REG8 data); + REG8 (DMACCALL * inproc)(void); + REG8 (DMACCALL * extproc)(REG8 action); +} DMAPROC; + +typedef struct { union { - BYTE b[4]; + UINT8 b[4]; UINT16 w[2]; UINT32 d; } adrs; union { - BYTE b[2]; + UINT8 b[2]; UINT16 w; } leng; union { - BYTE b[2]; + UINT8 b[2]; UINT16 w; } adrsorg; union { - BYTE b[2]; + UINT8 b[2]; UINT16 w; } lengorg; - UINT16 action; - void (DMACCALL * outproc)(BYTE data); - BYTE (DMACCALL * inproc)(void); - BYTE (DMACCALL * extproc)(BYTE action); - BYTE mode; - BYTE sreq; - BYTE ready; - BYTE mask; + UINT8 bound; + UINT8 action; + DMAPROC proc; + UINT8 mode; + UINT8 sreq; + UINT8 ready; + UINT8 mask; } _DMACH, *DMACH; typedef struct { + UINT8 device; + UINT8 channel; +} DMADEV; + +typedef struct { _DMACH dmach[4]; int lh; - UINT work; - UINT working; - BYTE mask; - BYTE stat; + UINT8 work; + UINT8 working; + UINT8 mask; + UINT8 stat; + UINT devices; + DMADEV device[8]; } _DMAC, *DMAC; @@ -75,14 +89,20 @@ typedef struct { extern "C" { #endif -void DMACCALL dma_dummyout(BYTE data); -BYTE DMACCALL dma_dummyin(void); -BYTE DMACCALL dma_dummyproc(BYTE func); +void DMACCALL dma_dummyout(REG8 data); +REG8 DMACCALL dma_dummyin(void); +REG8 DMACCALL dma_dummyproc(REG8 func); -void dmac_reset(void); +void dmac_reset(const NP2CFG *pConfig); void dmac_bind(void); +void dmac_extbind(void); void dmac_check(void); +UINT dmac_getdatas(DMACH dmach, UINT8 *buf, UINT size); + +void dmac_procset(void); +void dmac_attach(REG8 device, REG8 channel); +void dmac_detach(REG8 device); #ifdef __cplusplus }