/*
 * ncr5380.h
 *
 */

#ifndef _NCR5380_H_
#define _NCR5380_H_

#include "machine/scsidev.h"

struct NCR5380interface
{
	SCSIConfigTable *scsidevs;		/* SCSI devices */
	void (*irq_callback)(int state);	/* irq callback */
};

/* 5380 registers */
enum
{
	R5380_CURDATA = 0,	/* current SCSI data (read only) */
	R5380_OUTDATA = 0,	/* output data (write only) */
	R5380_INICOMMAND,	/* initiator command */
	R5380_MODE,		/* mode */
	R5380_TARGETCMD,	/* target command */
	R5380_SELENABLE,	/* select enable (write only) */
	R5380_BUSSTATUS = R5380_SELENABLE,	/* bus status (read only) */
	R5380_STARTDMA,		/* start DMA send (write only) */
	R5380_BUSANDSTAT = R5380_STARTDMA,	/* bus and status (read only) */
	R5380_DMATARGET,	/* DMA target (write only) */
	R5380_INPUTDATA = R5380_DMATARGET,	/* input data (read only) */
	R5380_DMAINIRECV,	/* DMA initiator receive (write only) */
	R5380_RESETPARITY = R5380_DMAINIRECV	/* reset parity/interrupt (read only) */
};

/* special Mac Plus registers - they implemented it weird */
#define R5380_OUTDATA_DTACK	(R5380_OUTDATA | 0x10)
#define R5380_CURDATA_DTACK	(R5380_CURDATA | 0x10)

extern void ncr5380_init( struct NCR5380interface *interface );
extern void ncr5380_read_data(int bytes, UINT8 *pData);
extern void ncr5380_write_data(int bytes, UINT8 *pData);
extern void *ncr5380_get_device(int id);
extern void ncr5380_set_device(int id, void *);
extern READ8_HANDLER(ncr5380_r);
extern WRITE8_HANDLER(ncr5380_w);

#endif
