diff options
Diffstat (limited to 'src/devices/machine/genpc.h')
-rw-r--r-- | src/devices/machine/genpc.h | 164 |
1 files changed, 89 insertions, 75 deletions
diff --git a/src/devices/machine/genpc.h b/src/devices/machine/genpc.h index 876005d0a26..577d7faa4b8 100644 --- a/src/devices/machine/genpc.h +++ b/src/devices/machine/genpc.h @@ -20,7 +20,6 @@ #include "bus/isa/isa.h" #include "bus/isa/isa_cards.h" -#include "bus/pc_kbd/pc_kbdc.h" // ======================> ibm5160_mb_device @@ -28,39 +27,48 @@ class ibm5160_mb_device : public device_t { public: // construction/destruction - ibm5160_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + ibm5160_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); // inline configuration template <typename T> void set_cputag(T &&tag) { m_maincpu.set_tag(std::forward<T>(tag)); - subdevice<isa8_device>("isa")->set_memspace(std::forward<T>(tag), AS_PROGRAM); - subdevice<isa8_device>("isa")->set_iospace(std::forward<T>(tag), AS_IO); + m_isabus.lookup()->set_memspace(m_maincpu, AS_PROGRAM); + m_isabus.lookup()->set_iospace(m_maincpu, AS_IO); + m_isabus.lookup()->iochrdy_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); } - void map(address_map &map); + 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; - DECLARE_WRITE8_MEMBER(pc_page_w); - DECLARE_WRITE8_MEMBER(nmi_enable_w); + void pc_page_w(offs_t offset, uint8_t data); + void nmi_enable_w(uint8_t data); + + void pc_speaker_set_spkrdata(int state); - DECLARE_WRITE_LINE_MEMBER( pc_speaker_set_spkrdata ); + void pc_pit8253_out1_changed(int state); + virtual void pc_pit8253_out2_changed(int state); - DECLARE_WRITE_LINE_MEMBER( pc_pit8253_out1_changed ); - virtual DECLARE_WRITE_LINE_MEMBER( pc_pit8253_out2_changed ); + void pic_int_w(int state); - DECLARE_WRITE_LINE_MEMBER( pic_int_w ); + // 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); - // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; - // optional information overrides - virtual void device_add_mconfig(machine_config &config) override; - virtual ioport_constructor device_input_ports() const override; + // device_t implementation + 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: required_device<cpu_device> m_maincpu; @@ -72,9 +80,13 @@ protected: optional_device<i8255_device> m_ppi8255; required_device<speaker_sound_device> m_speaker; required_device<isa8_device> m_isabus; - optional_device<pc_kbdc_device> m_pc_kbdc; required_device<ram_device> m_ram; + devcb_write_line m_int_callback; + devcb_write_line m_nmi_callback; + 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; @@ -89,37 +101,33 @@ protected: 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; - - // interface to the keyboard - DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w ); - DECLARE_WRITE_LINE_MEMBER( keyboard_data_w ); - - DECLARE_READ8_MEMBER ( pc_ppi_porta_r ); - DECLARE_READ8_MEMBER ( pc_ppi_portc_r ); - DECLARE_WRITE8_MEMBER( pc_ppi_portb_w ); - - DECLARE_WRITE_LINE_MEMBER( pc_dma_hrq_changed ); - DECLARE_WRITE_LINE_MEMBER( pc_dma8237_out_eop ); - DECLARE_READ8_MEMBER( pc_dma_read_byte ); - DECLARE_WRITE8_MEMBER( pc_dma_write_byte ); - DECLARE_READ8_MEMBER( pc_dma8237_1_dack_r ); - DECLARE_READ8_MEMBER( pc_dma8237_2_dack_r ); - DECLARE_READ8_MEMBER( pc_dma8237_3_dack_r ); - DECLARE_WRITE8_MEMBER( pc_dma8237_1_dack_w ); - DECLARE_WRITE8_MEMBER( pc_dma8237_2_dack_w ); - DECLARE_WRITE8_MEMBER( pc_dma8237_3_dack_w ); - DECLARE_WRITE8_MEMBER( pc_dma8237_0_dack_w ); - DECLARE_WRITE_LINE_MEMBER( pc_dack0_w ); - DECLARE_WRITE_LINE_MEMBER( pc_dack1_w ); - DECLARE_WRITE_LINE_MEMBER( pc_dack2_w ); - DECLARE_WRITE_LINE_MEMBER( pc_dack3_w ); - DECLARE_WRITE_LINE_MEMBER( iochck_w ); + 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 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); + uint8_t pc_dma_read_byte(offs_t offset); + void pc_dma_write_byte(offs_t offset, uint8_t data); + uint8_t pc_dma8237_1_dack_r(); + uint8_t pc_dma8237_2_dack_r(); + uint8_t pc_dma8237_3_dack_r(); + 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); void pc_select_dma_channel(int channel, bool state); }; @@ -134,24 +142,25 @@ class ibm5150_mb_device : public ibm5160_mb_device { public: // construction/destruction - ibm5150_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + ibm5150_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); - DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w ); + void keyboard_clock_w(int state); - virtual DECLARE_WRITE_LINE_MEMBER( pc_pit8253_out2_changed ) override; + virtual void pc_pit8253_out2_changed(int state) override; protected: ibm5150_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; + // 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; - DECLARE_READ8_MEMBER ( pc_ppi_porta_r ); - DECLARE_READ8_MEMBER ( pc_ppi_portc_r ); - DECLARE_WRITE8_MEMBER( pc_ppi_portb_w ); + uint8_t pc_ppi_porta_r(); + uint8_t pc_ppi_portc_r(); + void pc_ppi_portb_w(uint8_t data); }; @@ -163,21 +172,21 @@ class ec1841_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); + ec1841_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + + void keyboard_clock_w(int state); 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; - virtual ioport_constructor device_input_ports() const override; - virtual void device_start() override; + 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: - DECLARE_READ8_MEMBER ( pc_ppi_portc_r ); - DECLARE_WRITE8_MEMBER( pc_ppi_portb_w ); - - DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w ); + uint8_t pc_ppi_portc_r(); + void pc_ppi_portb_w(uint8_t data); }; DECLARE_DEVICE_TYPE(EC1841_MOTHERBOARD, ec1841_mb_device) @@ -187,17 +196,17 @@ class ec1840_mb_device : public ec1841_mb_device { public: // construction/destruction - ec1840_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + ec1840_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); protected: // optional information overrides - virtual void device_add_mconfig(machine_config &config) override; - virtual ioport_constructor device_input_ports() const override; - virtual void device_start() override; + 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: - DECLARE_READ8_MEMBER ( pc_ppi_portc_r ); - DECLARE_WRITE8_MEMBER( pc_ppi_portb_w ); + uint8_t pc_ppi_portc_r(); + void pc_ppi_portb_w(uint8_t data); }; DECLARE_DEVICE_TYPE(EC1840_MOTHERBOARD, ec1840_mb_device) @@ -207,17 +216,22 @@ class pc_noppi_mb_device : public ibm5160_mb_device { public: // construction/destruction - pc_noppi_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + 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); + void map(address_map &map) ATTR_COLD; + + uint8_t pc_ppi_portb_r(); protected: pc_noppi_mb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - virtual void device_add_mconfig(machine_config &config) override; - virtual ioport_constructor device_input_ports() const override; + 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(); }; DECLARE_DEVICE_TYPE(PCNOPPI_MOTHERBOARD, pc_noppi_mb_device) |