--- np2/io/dmac.h 2003/10/16 17:57:50 1.1 +++ np2/io/dmac.h 2004/03/06 18:25:36 1.7 @@ -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,6 +36,12 @@ 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]; UINT16 w[2]; @@ -51,23 +59,29 @@ typedef struct { BYTE 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,15 +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_bind(void); +void dmac_extbind(void); void dmac_check(void); +void dmac_procset(void); +void dmac_attach(REG8 device, REG8 channel); +void dmac_detach(REG8 device); + #ifdef __cplusplus } #endif