diff options
Diffstat (limited to 'src/mame/apple/v8.h')
-rw-r--r-- | src/mame/apple/v8.h | 82 |
1 files changed, 54 insertions, 28 deletions
diff --git a/src/mame/apple/v8.h b/src/mame/apple/v8.h index 411250f29e2..3b768cd5e4e 100644 --- a/src/mame/apple/v8.h +++ b/src/mame/apple/v8.h @@ -8,15 +8,15 @@ #include "machine/6522via.h" #include "machine/applefdintf.h" +#include "machine/pseudovia.h" #include "machine/swim2.h" #include "sound/asc.h" #include "emupal.h" -#include "speaker.h" #include "screen.h" // ======================> v8_device -class v8_device : public device_t +class v8_device : public device_t, public device_sound_interface { public: // construction/destruction @@ -30,7 +30,7 @@ public: auto hmmu_enable_callback() { return write_hmmu_enable.bind(); } auto pb3_callback() { return read_pb3.bind(); } - virtual void map(address_map &map); + virtual void map(address_map &map) ATTR_COLD; template <typename... T> void set_maincpu_tag(T &&... args) { m_maincpu.set_tag(std::forward<T>(args)...); } template <typename... T> void set_rom_tag(T &&... args) { m_rom.set_tag(std::forward<T>(args)...); } @@ -41,29 +41,33 @@ public: void cb2_w(int state); template <u8 mask> void slot_irq_w(int state); void scc_irq_w(int state); + void slot2_irq_w(int state); protected: required_device<cpu_device> m_maincpu; required_device<screen_device> m_screen; required_device<palette_device> m_palette; required_device<asc_device> m_asc; + required_device<pseudovia_device> m_pseudovia; std::unique_ptr<u32 []> m_vram; - u8 m_pseudovia_regs[256]; u32 *m_ram_ptr; + u32 m_ram_size; + bool m_overlay; + u8 m_video_config; v8_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_add_mconfig(machine_config &config) override; - virtual ioport_constructor device_input_ports() const override; + 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; - virtual u8 pseudovia_r(offs_t offset); + virtual void sound_stream_update(sound_stream &stream) override; - void asc_irq(int state); + virtual void ram_size(u8 config); private: devcb_write_line write_pb4, write_pb5, write_cb2, write_hdsel, write_hmmu_enable; @@ -73,20 +77,20 @@ private: required_device<via6522_device> m_via1; required_region_ptr<u32> m_rom; + sound_stream *m_stream; emu_timer *m_6015_timer; int m_via_interrupt, m_via2_interrupt, m_scc_interrupt, m_last_taken_interrupt; - u8 m_pseudovia_ier, m_pseudovia_ifr; - u8 m_pal_address, m_pal_idx, m_pal_control, m_pal_colkey; - bool m_overlay; - u32 m_ram_size; + u8 m_pal_address, m_pal_idx, m_pal_control, m_pal_colkey, m_config; bool m_baseIs4M; u32 rom_switch_r(offs_t offset); - void ram_size(u8 config); - void pseudovia_w(offs_t offset, u8 data); - void pseudovia_recalc_irqs(); + void via2_pb_w(u8 data); + u8 via2_config_r(); + void via2_config_w(u8 data); + u8 via2_video_config_r(); + void via2_video_config_w(u8 data); u16 mac_via_r(offs_t offset); void mac_via_w(offs_t offset, u16 data, u16 mem_mask); @@ -118,12 +122,12 @@ public: eagle_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: - 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: u8 via_in_a() override; - u8 pseudovia_r(offs_t offset) override; + u8 via2_video_config_r(); virtual u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) override; }; @@ -134,36 +138,58 @@ class spice_device : public v8_device public: spice_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - virtual void map(address_map &map) override; + virtual void map(address_map &map) override ATTR_COLD; required_device<applefdintf_device> m_fdc; required_device_array<floppy_connector, 2> m_floppy; protected: - virtual void device_start() override; - virtual void device_add_mconfig(machine_config &config) override; - virtual ioport_constructor device_input_ports() const override; + spice_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_add_mconfig(machine_config &config) override ATTR_COLD; + virtual ioport_constructor device_input_ports() const override ATTR_COLD; + + void phases_w(u8 phases); + void devsel_w(u8 devsel); private: floppy_image_device *m_cur_floppy = nullptr; int m_hdsel; - u8 via_in_a() override; + virtual u8 via_in_a() override; virtual void via_out_a(u8 data) override; - u8 pseudovia_r(offs_t offset) override; + u8 via2_video_config_r(); virtual u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) override; - void phases_w(u8 phases); - void devsel_w(u8 devsel); u16 swim_r(offs_t offset, u16 mem_mask); void swim_w(offs_t offset, u16 data, u16 mem_mask); void bright_contrast_w(offs_t offset, u8 data); }; +// ======================> tinkerbell_device + +class tinkerbell_device : public spice_device +{ +public: + tinkerbell_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + +protected: + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + + virtual void ram_size(u8 config) override; + +private: + virtual u8 via_in_a() override; + u8 via2_video_config_r(); + virtual u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) override; +}; + // device type definition DECLARE_DEVICE_TYPE(V8, v8_device) DECLARE_DEVICE_TYPE(EAGLE, eagle_device) DECLARE_DEVICE_TYPE(SPICE, spice_device) +DECLARE_DEVICE_TYPE(TINKERBELL, tinkerbell_device) #endif // MAME_APPLE_V8_H |