/***************************************************************************

	machine/nec765.h

	Functions to emulate a NEC765/Intel 8272 compatible floppy disk controller

***************************************************************************/

#ifndef NEC765_H
#define NEC765_H

#include "devices/flopdrv.h"


/* supported versions */
typedef enum
{
	NEC765A = 0,
	NEC765B = 1,
	SMC37C78 = 2,
	NEC72065 = 3
} NEC765_VERSION;

#define NEC765_DAM_DELETED_DATA 0x0f8
#define NEC765_DAM_DATA 0x0fb

typedef struct nec765_interface
{
	/* interrupt issued */
	void	(*interrupt)(int state);

	/* dma data request */
	void	(*dma_drq)(int state,int read_write);

	/* image lookup */
	mess_image *(*get_image)(int floppy_index);
} nec765_interface;

/* init nec765 interface */
void nec765_init(const nec765_interface *iface, NEC765_VERSION version);
/* set nec765 terminal count input state */
void nec765_set_tc_state(int);
/* set nec765 ready input*/
void nec765_set_ready_state(int);

void nec765_set_ready_int(void);

void nec765_idle(void);

/* read of data register */
READ8_HANDLER(nec765_data_r);
/* write to data register */
WRITE8_HANDLER(nec765_data_w);
/* read of main status register */
READ8_HANDLER(nec765_status_r);

/* dma acknowledge with write */
WRITE8_HANDLER(nec765_dack_w);
/* dma acknowledge with read */
READ8_HANDLER(nec765_dack_r);

/* reset nec765 */
void nec765_reset(int);

/* reset pin of nec765 */
void nec765_set_reset_state(int);

/*********************/
/* STATUS REGISTER 1 */

/* this is set if a TC signal was not received after the sector data was read */
#define NEC765_ST1_END_OF_CYLINDER (1<<7)
/* this is set if the sector ID being searched for is not found */
#define NEC765_ST1_NO_DATA (1<<2)
/* set if disc is write protected and a write/format operation was performed */
#define NEC765_ST1_NOT_WRITEABLE (1<<1)

/*********************/
/* STATUS REGISTER 2 */

/* C parameter specified did not match C value read from disc */
#define NEC765_ST2_WRONG_CYLINDER (1<<4)
/* C parameter specified did not match C value read from disc, and C read from disc was 0x0ff */
#define NEC765_ST2_BAD_CYLINDER (1<<1)
/* this is set if the FDC encounters a Deleted Data Mark when executing a read data
command, or FDC encounters a Data Mark when executing a read deleted data command */
#define NEC765_ST2_CONTROL_MARK (1<<6)

#endif /* NEC765_H */

