summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/it8671f.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/it8671f.h')
-rw-r--r--src/devices/machine/it8671f.h72
1 files changed, 49 insertions, 23 deletions
diff --git a/src/devices/machine/it8671f.h b/src/devices/machine/it8671f.h
index 078e9efa053..06cd4f498ae 100644
--- a/src/devices/machine/it8671f.h
+++ b/src/devices/machine/it8671f.h
@@ -15,19 +15,16 @@
#include "machine/pc_lpt.h"
#include "machine/upd765.h"
-class it8671f_device : public device_t,
+class it8661f_device : public device_t,
public device_isa16_card_interface,
public device_memory_interface
{
public:
- it8671f_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual ~it8671f_device();
+ it8661f_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ virtual ~it8661f_device();
void remap(int space_id, offs_t start, offs_t end) override;
- auto krst_gpio2() { return m_krst_callback.bind(); }
- auto ga20_gpio6() { return m_ga20_callback.bind(); }
-
auto irq1() { return m_irq1_callback.bind(); }
auto irq8() { return m_irq8_callback.bind(); }
auto irq9() { return m_irq9_callback.bind(); }
@@ -52,6 +49,8 @@ public:
static void floppy_formats(format_registration &fr);
protected:
+ it8661f_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
virtual void device_start() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;
@@ -63,20 +62,28 @@ protected:
virtual void eop_w(int state) override;
void update_dreq_mapping(int dreq, int logical);
-private:
- const address_space_config m_space_config;
+ bool m_activate[8]{};
+ memory_view m_logical_view;
+
+ // configuration options
+ u8 m_chip_id_2; // Index $21 r/o
+ u8 m_max_ldn; // inclusive (so 7 if max LDN is 7)
+ u8 m_unlock_byte_seq[2]; // First part of unlock sequence at $279 (second part is port select)
+
+ virtual void config_map(address_map &map) ATTR_COLD;
+
+ template <unsigned N> u8 activate_r(offs_t offset);
+ template <unsigned N> void activate_w(offs_t offset, u8 data);
+
+ void request_irq(int irq, int state);
+ void request_dma(int dreq, int state);
+ address_space_config m_space_config;
+private:
required_device<n82077aa_device> m_fdc;
required_device_array<ns16550_device, 2> m_com;
required_device<pc_lpt_device> m_lpt;
- required_device<ps2_keyboard_controller_device> m_keybc;
- required_device<pc_kbdc_device> m_ps2_con;
- required_device<pc_kbdc_device> m_aux_con;
-
- memory_view m_logical_view;
- devcb_write_line m_krst_callback; // GPIO2
- devcb_write_line m_ga20_callback; // GPIO6
devcb_write_line m_irq1_callback;
devcb_write_line m_irq8_callback;
devcb_write_line m_irq9_callback;
@@ -89,7 +96,6 @@ private:
u8 m_index = 0;
u8 m_logical_index = 0;
- bool m_activate[8]{};
int m_dreq_mapping[4];
int m_last_dma_line;
@@ -112,14 +118,7 @@ private:
void port_select_w(offs_t offset, u8 data);
void port_map(address_map &map);
- void config_map(address_map &map) ATTR_COLD;
-
void logical_device_select_w(offs_t offset, u8 data);
- template <unsigned N> u8 activate_r(offs_t offset);
- template <unsigned N> void activate_w(offs_t offset, u8 data);
-
- void request_irq(int irq, int state);
- void request_dma(int dreq, int state);
u8 m_fdc_irq_line = 6;
u8 m_fdc_drq_line = 2;
@@ -156,6 +155,32 @@ private:
template <unsigned N> void uart_irq_w(offs_t offset, u8 data);
template <unsigned N> u8 uart_config_r(offs_t offset);
template <unsigned N> void uart_config_w(offs_t offset, u8 data);
+};
+
+class it8671f_device : public it8661f_device
+{
+public:
+ it8671f_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ void remap(int space_id, offs_t start, offs_t end) override;
+
+ auto krst_gpio2() { return m_krst_callback.bind(); }
+ auto ga20_gpio6() { return m_ga20_callback.bind(); }
+
+protected:
+ virtual void device_start() override ATTR_COLD;
+ virtual void device_reset() override ATTR_COLD;
+
+ virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
+ virtual void config_map(address_map &map) override ATTR_COLD;
+
+private:
+ required_device<ps2_keyboard_controller_device> m_keybc;
+ required_device<pc_kbdc_device> m_ps2_con;
+ required_device<pc_kbdc_device> m_aux_con;
+
+ devcb_write_line m_krst_callback; // GPIO2
+ devcb_write_line m_ga20_callback; // GPIO6
void cpu_reset_w(int state);
void cpu_a20_w(int state);
@@ -166,6 +191,7 @@ private:
u8 m_aux_irq_line;
};
+DECLARE_DEVICE_TYPE(IT8661F, it8661f_device);
DECLARE_DEVICE_TYPE(IT8671F, it8671f_device);
#endif // MAME_MACHINE_IT8671F_H