summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Curt Coder <curtcoder@mail.com>2023-03-24 13:37:26 +0200
committer Curt Coder <curtcoder@mail.com>2023-03-24 13:53:13 +0200
commit26274de0a4cd6a90d3c230e76091ac5cd3ba42eb (patch)
tree17f9c681a91cac31c9513c247b7bbbbf6c6b2c38
parentbec7d71af7d827be5402bbfa7355470f2e6296c3 (diff)
c64: Fix CIA1 FLAG handling. [Curt Coder]
-rw-r--r--src/mame/commodore/c64.cpp23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/mame/commodore/c64.cpp b/src/mame/commodore/c64.cpp
index b9f2c96ac2b..da7101b898b 100644
--- a/src/mame/commodore/c64.cpp
+++ b/src/mame/commodore/c64.cpp
@@ -74,7 +74,9 @@ public:
m_hiram(1),
m_charen(1),
m_va14(1),
- m_va15(1)
+ m_va15(1),
+ m_cass_rd(1),
+ m_iec_srq(1)
{ }
// ROM
@@ -147,6 +149,10 @@ public:
DECLARE_WRITE_LINE_MEMBER( write_user_pb6 ) { if (state) m_user_pb |= 64; else m_user_pb &= ~64; }
DECLARE_WRITE_LINE_MEMBER( write_user_pb7 ) { if (state) m_user_pb |= 128; else m_user_pb &= ~128; }
+ void update_cia1_flag() { m_cia1->flag_w(m_cass_rd & m_iec_srq); }
+ DECLARE_WRITE_LINE_MEMBER( cass_rd_w ) { m_cass_rd = state; update_cia1_flag(); }
+ DECLARE_WRITE_LINE_MEMBER( iec_srq_w ) { m_iec_srq = state; update_cia1_flag(); }
+
// memory state
int m_loram;
int m_hiram;
@@ -158,9 +164,12 @@ public:
// interrupt state
int m_exp_dma;
+ int m_cass_rd;
+ int m_iec_srq;
int m_user_pa2;
int m_user_pb;
+
void pal(machine_config &config);
void ntsc(machine_config &config);
void pet64(machine_config &config);
@@ -1428,8 +1437,10 @@ void c64_state::machine_start()
save_item(NAME(m_va14));
save_item(NAME(m_va15));
save_item(NAME(m_exp_dma));
- save_item(NAME(m_user_pb));
+ save_item(NAME(m_cass_rd));
+ save_item(NAME(m_iec_srq));
save_item(NAME(m_user_pa2));
+ save_item(NAME(m_user_pb));
}
@@ -1521,10 +1532,10 @@ void c64_state::ntsc(machine_config &config)
m_cia2->pc_wr_callback().set(m_user, FUNC(pet_user_port_device::write_8));
PET_DATASSETTE_PORT(config, m_cassette, cbm_datassette_devices, "c1530");
- m_cassette->read_handler().set(m_cia1, FUNC(mos6526_device::flag_w));
+ m_cassette->read_handler().set(FUNC(c64_state::cass_rd_w));
cbm_iec_slot_device::add(config, m_iec, "c1541");
- m_iec->srq_callback().set(m_cia1, FUNC(mos6526_device::flag_w));
+ m_iec->srq_callback().set(FUNC(c64_state::iec_srq_w));
m_iec->data_callback().set(m_user, FUNC(pet_user_port_device::write_9));
VCS_CONTROL_PORT(config, m_joy1, vcs_control_port_devices, nullptr);
@@ -1694,10 +1705,10 @@ void c64_state::pal(machine_config &config)
m_cia2->pc_wr_callback().set(m_user, FUNC(pet_user_port_device::write_8));
PET_DATASSETTE_PORT(config, m_cassette, cbm_datassette_devices, "c1530");
- m_cassette->read_handler().set(m_cia1, FUNC(mos6526_device::flag_w));
+ m_cassette->read_handler().set(FUNC(c64_state::cass_rd_w));
cbm_iec_slot_device::add(config, m_iec, "c1541");
- m_iec->srq_callback().set(m_cia1, FUNC(mos6526_device::flag_w));
+ m_iec->srq_callback().set(FUNC(c64_state::iec_srq_w));
m_iec->data_callback().set(m_user, FUNC(pet_user_port_device::write_9));
VCS_CONTROL_PORT(config, m_joy1, vcs_control_port_devices, nullptr);