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