diff --git a/src/mame/atari/antic.cpp b/src/mame/atari/antic.cpp index 7d70457c757..93b482ff19d 100644 --- a/src/mame/atari/antic.cpp +++ b/src/mame/atari/antic.cpp @@ -303,7 +303,6 @@ antic_device::antic_device(const machine_config &mconfig, const char *tag, devic device_video_interface(mconfig, *this), m_gtia(*this, finder_base::DUMMY_TAG), m_maincpu(*this, ":maincpu"), - m_djoy_b(*this, ":djoy_b"), m_artifacts(*this, ":artifacts"), m_tv_artifacts(0), m_render1(0), @@ -2303,7 +2302,7 @@ void antic_device::generic_interrupt(int button_count) if( m_scanline == VBL_START ) { /* specify buttons relevant to this Atari variant */ - m_gtia->button_interrupt(button_count, m_djoy_b.read_safe(0)); + m_gtia->button_interrupt(button_count); /* do nothing new for the rest of the frame */ m_modelines = screen().height() - VBL_START; diff --git a/src/mame/atari/antic.h b/src/mame/atari/antic.h index d1c7f102c79..8aaf838abe8 100644 --- a/src/mame/atari/antic.h +++ b/src/mame/atari/antic.h @@ -109,7 +109,6 @@ private: required_device m_gtia; required_device m_maincpu; - optional_ioport m_djoy_b; optional_ioport m_artifacts; uint32_t m_tv_artifacts; diff --git a/src/mame/atari/atari400.cpp b/src/mame/atari/atari400.cpp index 18aef69ee1d..4a3f1304049 100644 --- a/src/mame/atari/atari400.cpp +++ b/src/mame/atari/atari400.cpp @@ -2239,6 +2239,7 @@ void a400_state::atari_common(machine_config &config) ATARI_GTIA(config, m_gtia, 0); m_gtia->read_callback().set_ioport("console"); m_gtia->write_callback().set(FUNC(a400_state::gtia_cb)); + m_gtia->trigger_callback().set_ioport("djoy_b"); ATARI_ANTIC(config, m_antic, 0); m_antic->set_gtia_tag(m_gtia); @@ -2453,6 +2454,7 @@ void a400_state::a5200(machine_config &config) ATARI_GTIA(config, m_gtia, 0); // m_gtia->set_region(GTIA_NTSC); + m_gtia->trigger_callback().set_ioport("djoy_b"); ATARI_ANTIC(config, m_antic, 0); m_antic->set_gtia_tag(m_gtia); diff --git a/src/mame/atari/bartop52.cpp b/src/mame/atari/bartop52.cpp index e57adadbbac..a704b680492 100644 --- a/src/mame/atari/bartop52.cpp +++ b/src/mame/atari/bartop52.cpp @@ -137,6 +137,7 @@ void bartop52_state::a5200(machine_config &config) ATARI_GTIA(config, m_gtia, 0); m_gtia->set_region(GTIA_NTSC); + m_gtia->trigger_callback().set_ioport("djoy_b"); ATARI_ANTIC(config, m_antic, 0); m_antic->set_gtia_tag(m_gtia); diff --git a/src/mame/atari/gtia.cpp b/src/mame/atari/gtia.cpp index ce43c566dcf..df75020e8e5 100644 --- a/src/mame/atari/gtia.cpp +++ b/src/mame/atari/gtia.cpp @@ -125,6 +125,7 @@ gtia_device::gtia_device(const machine_config &mconfig, const char *tag, device_ , m_region(GTIA_NTSC) , m_read_cb(*this) , m_write_cb(*this) + , m_trigger_cb(*this) { } @@ -137,6 +138,7 @@ void gtia_device::device_start() { m_read_cb.resolve(); m_write_cb.resolve(); + m_trigger_cb.resolve_safe(0xf); save_item(NAME(m_r.m0pf)); save_item(NAME(m_r.m1pf)); @@ -302,8 +304,10 @@ int gtia_device::is_ntsc() return m_region == GTIA_NTSC; } -void gtia_device::button_interrupt(int button_count, uint8_t button_port) +void gtia_device::button_interrupt(int button_count) { + uint8_t button_port = m_trigger_cb(); + /* specify buttons relevant to this Atari variant */ for (int i = 0; i < button_count; i++) { diff --git a/src/mame/atari/gtia.h b/src/mame/atari/gtia.h index 364ddf643c7..a9e6cc9e9e2 100644 --- a/src/mame/atari/gtia.h +++ b/src/mame/atari/gtia.h @@ -33,6 +33,7 @@ public: void set_region(gtia_region region) { m_region = region; } auto read_callback() { return m_read_cb.bind(); } auto write_callback() { return m_write_cb.bind(); } + auto trigger_callback() { return m_trigger_cb.bind(); } uint8_t read(offs_t offset); void write(offs_t offset, uint8_t data); @@ -45,7 +46,7 @@ public: uint8_t get_w_colpf2() { return m_w.colpf2; } uint8_t get_w_prior() { return m_w.prior; } void count_hitclr_frames() { m_h.hitclr_frames++; } - void button_interrupt(int button_count, uint8_t button_port); + void button_interrupt(int button_count); void render(uint8_t *src, uint8_t *dst, uint8_t *pmbits, uint8_t *prio); @@ -182,6 +183,7 @@ private: devcb_read8 m_read_cb; devcb_write8 m_write_cb; + devcb_read8 m_trigger_cb; }; diff --git a/src/mame/atari/maxaflex.cpp b/src/mame/atari/maxaflex.cpp index 0aab950b063..e7c16503671 100644 --- a/src/mame/atari/maxaflex.cpp +++ b/src/mame/atari/maxaflex.cpp @@ -343,6 +343,7 @@ void maxaflex_state::maxaflex(machine_config &config) ATARI_GTIA(config, m_gtia, 0); m_gtia->set_region(GTIA_NTSC); m_gtia->read_callback().set_ioport("console"); + m_gtia->trigger_callback().set_ioport("djoy_b"); ATARI_ANTIC(config, m_antic, 0); m_antic->set_gtia_tag(m_gtia);