1 // license:GPL-2.0+
2 // copyright-holders:Raphael Nabet
3 /*
4     990_dk.h: include file for 990_dk.c
5 */
6 
7 #ifndef MAME_BUS_TI99X_990_DK_H
8 #define MAME_BUS_TI99X_990_DK_H
9 
10 #pragma once
11 
DECLARE_DEVICE_TYPE(TI99X_FD800,fd800_legacy_device)12 DECLARE_DEVICE_TYPE(TI99X_FD800, fd800_legacy_device)
13 
14 class fd800_legacy_device : public device_t
15 {
16 public:
17 	fd800_legacy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
18 
19 	uint8_t cru_r(offs_t offset);
20 	void cru_w(offs_t offset, uint8_t data);
21 	auto int_cb() { return m_int_line.bind(); }
22 
23 private:
24 	enum buf_mode_t
25 	{
26 		bm_off, bm_read, bm_write
27 	};
28 
29 	static constexpr unsigned MAX_FLOPPIES = 4;
30 
31 	void device_start() override;
32 	void device_reset() override;
33 	void set_interrupt_line();
34 
35 	int     read_id(int unit, int head, int *cylinder_id, int *sector_id);
36 	int     find_sector(int unit, int head, int sector, int *data_id);
37 	int     do_seek(int unit, int cylinder, int head);
38 	int     do_restore(int unit);
39 	void    do_read();
40 	void    do_write();
41 	void    do_cmd();
42 
43 	uint16_t m_recv_buf;
44 	uint16_t m_stat_reg;
45 	uint16_t m_xmit_buf;
46 	uint16_t m_cmd_reg;
47 
48 	int m_interrupt_f_f;
49 	devcb_write_line m_int_line;
50 
51 	uint8_t m_buf[128];
52 	int m_buf_pos;
53 	buf_mode_t m_buf_mode;
54 	int m_unit;
55 //  int m_head;
56 	int m_sector;
57 	/*int m_non_seq_mode;*/
58 //  int m_ddam;
59 
60 	struct
61 	{
62 	//  legacy_floppy_image_device *img;
63 		int phys_cylinder;
64 		int log_cylinder[2];
65 		int seclen;
66 	} m_drv[MAX_FLOPPIES];
67 };
68 
69 // LEGACY_FLOPPY_OPTIONS_EXTERN(fd800);
70 
71 #endif // MAME_BUS_TI99X_990_DK_H
72