diff options
Diffstat (limited to 'src/devices/machine/genpc.h')
| -rw-r--r-- | src/devices/machine/genpc.h | 155 |
1 files changed, 70 insertions, 85 deletions
diff --git a/src/devices/machine/genpc.h b/src/devices/machine/genpc.h index 6780bdd1b96..7d99ae2e3a1 100644 --- a/src/devices/machine/genpc.h +++ b/src/devices/machine/genpc.h @@ -24,14 +24,18 @@ #include "bus/isa/isa_cards.h" -// ======================> ibm5160_mb_device -class ibm5160_mb_device : public device_t +class pc_noppi_mb_device : public device_t { public: // construction/destruction - ibm5160_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + pc_noppi_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + + // configuration + auto int_callback() { return m_int_callback.bind(); } + auto nmi_callback() { return m_nmi_callback.bind(); } + auto kbdclk_callback() { return m_kbdclk_callback.bind(); } + auto kbddata_callback() { return m_kbddata_callback.bind(); } - // inline configuration template <typename T> void set_cputag(T &&tag) { m_maincpu.set_tag(std::forward<T>(tag)); @@ -40,46 +44,44 @@ public: m_isabus.lookup()->iochrdy_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); } - auto int_callback() { return m_int_callback.bind(); } - auto nmi_callback() { return m_nmi_callback.bind(); } - auto kbdclk_callback() { return m_kbdclk_callback.bind(); } - auto kbddata_callback() { return m_kbddata_callback.bind(); } - void map(address_map &map) ATTR_COLD; - uint8_t m_pit_out2; + uint8_t pit_out2() { return m_pit_out2; } // helper for near-clones with multifunction ics instead of 8255s - void pc_page_w(offs_t offset, uint8_t data); void nmi_enable_w(uint8_t data); void pc_speaker_set_spkrdata(int state); void pc_pit8253_out1_changed(int state); - virtual void pc_pit8253_out2_changed(int state); + void pc_pit8253_out2_changed(int state); - void pic_int_w(int state); + uint8_t pc_ppi_portb_r(); // interface to the keyboard void keyboard_clock_w(int state); void keyboard_data_w(int state); protected: - ibm5160_mb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + pc_noppi_mb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - // device_t implementation + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; 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 ioport_constructor device_input_ports() const override ATTR_COLD; -protected: + void pic_int_w(int state); + + void iochck_w(int state); + + void pc_page_w(offs_t offset, uint8_t data); + + void pc_ppi_portb_w(uint8_t data); + required_device<cpu_device> m_maincpu; public: required_device<pic8259_device> m_pic8259; required_device<pit8253_device> m_pit8253; required_device<am9517a_device> m_dma8237; protected: - optional_device<i8255_device> m_ppi8255; required_device<speaker_sound_device> m_speaker; required_device<isa8_device> m_isabus; required_device<ram_device> m_ram; @@ -89,30 +91,20 @@ protected: devcb_write_line m_kbdclk_callback; devcb_write_line m_kbddata_callback; - /* U73 is an LS74 - dual flip flop */ - /* Q2 is set by OUT1 from the 8253 and goes to DRQ1 on the 8237 */ - uint8_t m_u73_q2; - uint8_t m_out1; - int m_dma_channel; - uint8_t m_dma_offset[4]; - uint8_t m_pc_spkrdata; - bool m_cur_eop; - - uint8_t m_nmi_enabled; + uint8_t m_pit_out1; + uint8_t m_pit_out2; - int m_ppi_portc_switch_high; - int m_ppi_speaker; - int m_ppi_keyboard_clear; - uint8_t m_ppi_keyb_clock; - uint8_t m_ppi_portb; - uint8_t m_ppi_clock_signal; - uint8_t m_ppi_data_signal; - uint8_t m_ppi_shift_register; - uint8_t m_ppi_shift_enable; + uint8_t m_ppi_portc_switch_high; + uint8_t m_ppi_keyboard_clear; + uint8_t m_ppi_keyb_clock; + uint8_t m_ppi_clock_signal; + uint8_t m_ppi_data_signal; + uint8_t m_ppi_shift_register; + uint8_t m_ppi_shift_enable; + uint8_t m_ppi_portb; +private: uint8_t pc_ppi_porta_r(); - uint8_t pc_ppi_portc_r(); - void pc_ppi_portb_w(uint8_t data); void pc_dma_hrq_changed(int state); void pc_dma8237_out_eop(int state); @@ -121,86 +113,86 @@ protected: uint8_t pc_dma8237_1_dack_r(); uint8_t pc_dma8237_2_dack_r(); uint8_t pc_dma8237_3_dack_r(); + void pc_dma8237_0_dack_w(uint8_t data); void pc_dma8237_1_dack_w(uint8_t data); void pc_dma8237_2_dack_w(uint8_t data); void pc_dma8237_3_dack_w(uint8_t data); - void pc_dma8237_0_dack_w(uint8_t data); - void pc_dack0_w(int state); - void pc_dack1_w(int state); - void pc_dack2_w(int state); - void pc_dack3_w(int state); - void iochck_w(int state); + template <unsigned Channel> void pc_dack_w(int state); - void pc_select_dma_channel(int channel, bool state); -}; + uint8_t m_nmi_enabled; + uint8_t m_pc_spkrdata; + // U73 is an LS74 - dual flip flop + // Q2 is set by OUT1 from the 8253 and goes to DRQ1 on the 8237 + uint8_t m_u73_q2; + int8_t m_dma_channel; + uint8_t m_dma_offset[4]; + bool m_cur_eop; +}; -// device type definition -DECLARE_DEVICE_TYPE(IBM5160_MOTHERBOARD, ibm5160_mb_device) +DECLARE_DEVICE_TYPE(PCNOPPI_MOTHERBOARD, pc_noppi_mb_device) -// ======================> ibm5150_mb_device -class ibm5150_mb_device : public ibm5160_mb_device +class ibm5160_mb_device : public pc_noppi_mb_device { public: // construction/destruction - ibm5150_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); - - void keyboard_clock_w(int state); + ibm5160_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); - virtual void pc_pit8253_out2_changed(int state) override; + void map(address_map &map) ATTR_COLD; protected: - ibm5150_mb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + ibm5160_mb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device_t implementation virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; virtual ioport_constructor device_input_ports() const override ATTR_COLD; -private: - required_device<cassette_image_device> m_cassette; + required_device<i8255_device> m_ppi8255; +private: uint8_t pc_ppi_porta_r(); uint8_t pc_ppi_portc_r(); - void pc_ppi_portb_w(uint8_t data); }; - -// device type definition -DECLARE_DEVICE_TYPE(IBM5150_MOTHERBOARD, ibm5150_mb_device) +DECLARE_DEVICE_TYPE(IBM5160_MOTHERBOARD, ibm5160_mb_device) -class ec1841_mb_device : public ibm5160_mb_device +class ibm5150_mb_device : public ibm5160_mb_device { public: // construction/destruction - ec1841_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + ibm5150_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); - void keyboard_clock_w(int state); + virtual void pc_pit8253_out2_changed(int state); protected: - ec1841_mb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + ibm5150_mb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - // optional information overrides + // device_t implementation virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; virtual ioport_constructor device_input_ports() const override ATTR_COLD; - virtual void device_start() override ATTR_COLD; private: + uint8_t pc_ppi_porta_r(); uint8_t pc_ppi_portc_r(); void pc_ppi_portb_w(uint8_t data); + + required_device<cassette_image_device> m_cassette; }; -DECLARE_DEVICE_TYPE(EC1841_MOTHERBOARD, ec1841_mb_device) +DECLARE_DEVICE_TYPE(IBM5150_MOTHERBOARD, ibm5150_mb_device) -class ec1840_mb_device : public ec1841_mb_device +class ec1841_mb_device : public ibm5160_mb_device { public: // construction/destruction - ec1840_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + ec1841_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); protected: + ec1841_mb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + // optional information overrides virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; virtual ioport_constructor device_input_ports() const override ATTR_COLD; @@ -211,31 +203,24 @@ private: void pc_ppi_portb_w(uint8_t data); }; -DECLARE_DEVICE_TYPE(EC1840_MOTHERBOARD, ec1840_mb_device) +DECLARE_DEVICE_TYPE(EC1841_MOTHERBOARD, ec1841_mb_device) -class pc_noppi_mb_device : public ibm5160_mb_device +class ec1840_mb_device : public ec1841_mb_device { public: // construction/destruction - pc_noppi_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); - - uint8_t pit_out2() { return m_pit_out2; } // helper for near-clones with multifunction ics instead of 8255s - - void map(address_map &map) ATTR_COLD; - - uint8_t pc_ppi_portb_r(); + ec1840_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); protected: - pc_noppi_mb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - + // optional information overrides virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; virtual ioport_constructor device_input_ports() const override ATTR_COLD; private: - uint8_t pc_ppi_porta_r(); + uint8_t pc_ppi_portc_r(); }; -DECLARE_DEVICE_TYPE(PCNOPPI_MOTHERBOARD, pc_noppi_mb_device) +DECLARE_DEVICE_TYPE(EC1840_MOTHERBOARD, ec1840_mb_device) #endif // MAME_MACHINE_GENPC_H |
