summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2021-03-24 14:03:20 +0100
committer Olivier Galibert <galibert@pobox.com>2021-03-24 14:03:34 +0100
commite097edd6ab8a5de2c83bdb92abb53b55c4bbd61f (patch)
tree61cbf78e49cbe5e54f704e708d1c9ce5a8036191
parent5c124e2e879c15b1319ce7ea9dbc774611360576 (diff)
macpdm: Add vblank irq
-rw-r--r--src/devices/machine/mv_sonora.cpp5
-rw-r--r--src/devices/machine/mv_sonora.h4
-rw-r--r--src/mame/drivers/macpdm.cpp13
3 files changed, 13 insertions, 9 deletions
diff --git a/src/devices/machine/mv_sonora.cpp b/src/devices/machine/mv_sonora.cpp
index 97d8585dbed..2e6e571b238 100644
--- a/src/devices/machine/mv_sonora.cpp
+++ b/src/devices/machine/mv_sonora.cpp
@@ -24,12 +24,14 @@ mac_video_sonora_device::mac_video_sonora_device(const machine_config &mconfig,
device_t(mconfig, MAC_VIDEO_SONORA, tag, owner, clock),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
- m_monitor_config(*this, "monitor")
+ m_monitor_config(*this, "monitor"),
+ m_screen_vblank(*this)
{
}
void mac_video_sonora_device::device_start()
{
+ m_screen_vblank.resolve_safe();
m_vram = nullptr;
save_item(NAME(m_vram_offset));
@@ -56,6 +58,7 @@ void mac_video_sonora_device::device_add_mconfig(machine_config &config)
// dot clock, htotal, hstart, hend, vtotal, vstart, vend
m_screen->set_raw(31334400, 896, 0, 640, 525, 0, 480);
m_screen->set_screen_update(FUNC(mac_video_sonora_device::screen_update));
+ m_screen->screen_vblank().set([this](int state) { m_screen_vblank(state && (m_modeline_id != -1)); });
PALETTE(config, m_palette).set_entries(256);
}
diff --git a/src/devices/machine/mv_sonora.h b/src/devices/machine/mv_sonora.h
index 8037a461c08..1128fb24bc3 100644
--- a/src/devices/machine/mv_sonora.h
+++ b/src/devices/machine/mv_sonora.h
@@ -27,8 +27,7 @@ public:
DECLARE_READ_LINE_MEMBER(vblank) const { return m_screen->vblank(); }
DECLARE_READ_LINE_MEMBER(hblank) const { return m_screen->hblank(); }
- auto screen_vblank() { return m_screen->screen_vblank(); }
- auto scanline() { return m_screen->scanline(); }
+ auto screen_vblank() { return m_screen_vblank.bind(); }
void set_vram_base(const uint64_t *vram) { m_vram = vram; }
void set_vram_offset(uint32_t offset) { m_vram_offset = offset; }
@@ -54,6 +53,7 @@ private:
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_ioport m_monitor_config;
+ devcb_write_line m_screen_vblank;
const uint64_t *m_vram;
uint32_t m_vram_offset;
diff --git a/src/mame/drivers/macpdm.cpp b/src/mame/drivers/macpdm.cpp
index 7ae58ec1593..b5ed5191876 100644
--- a/src/mame/drivers/macpdm.cpp
+++ b/src/mame/drivers/macpdm.cpp
@@ -291,7 +291,7 @@ void macpdm_state::driver_reset()
m_via2_ier = 0x00;
m_via2_ifr = 0x00;
m_via2_sier = 0x00;
- m_via2_sifr = 0x07;
+ m_via2_sifr = 0x7f;
m_irq_control = 0;
@@ -374,11 +374,11 @@ void macpdm_state::via2_irq_main_set(uint8_t mask, int state)
void macpdm_state::via2_irq_slot_set(uint8_t mask, int state)
{
- if(((m_via2_sifr & mask) != 0) == state)
+ if(((m_via2_sifr & mask) == 0) == state)
return;
m_via2_sifr ^= mask;
- via2_irq_main_set(0x02, (m_via2_sifr & m_via2_sier) != 0);
+ via2_irq_main_set(0x02, ((~m_via2_sifr) & m_via2_sier) != 0);
}
@@ -460,7 +460,7 @@ void macpdm_state::via2_ier_w(uint8_t data)
logerror("via2 ier %s %s %s %s\n",
m_via2_ier & 0x20 ? "fdc" : "-",
- m_via2_ier & 0x20 ? "sound" : "-",
+ m_via2_ier & 0x10 ? "sound" : "-",
m_via2_ier & 0x08 ? "scsi" : "-",
m_via2_ier & 0x02 ? "slot" : "-",
m_via2_ier & 0x01 ? "scsidrq" : "-");
@@ -491,7 +491,7 @@ void macpdm_state::via2_sier_w(uint8_t data)
m_via2_sier & 0x10 ? "slot1" : "-",
m_via2_sier & 0x08 ? "slot0" : "-");
- via2_irq_main_set(0x02, (m_via2_sifr & m_via2_sier) != 0);
+ via2_irq_main_set(0x02, ((~m_via2_sifr) & m_via2_sier) != 0);
}
uint8_t macpdm_state::via2_sifr_r()
@@ -999,6 +999,7 @@ void macpdm_state::macpdm(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &macpdm_state::pdm_map);
MAC_VIDEO_SONORA(config, m_video);
+ m_video->screen_vblank().set(FUNC(macpdm_state::vblank_irq));
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
@@ -1075,4 +1076,4 @@ ROM_START( pmac6100 )
ROM_END
-COMP( 1994, pmac6100, 0, 0, macpdm, macpdm, macpdm_state, driver_init, "Apple Computer", "Power Macintosh 6100/60", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+COMP( 1994, pmac6100, 0, 0, macpdm, macpdm, macpdm_state, driver_init, "Apple Computer", "Power Macintosh 6100/60", MACHINE_NOT_WORKING )