summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/nes/disksys.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/nes/disksys.cpp')
-rw-r--r--src/devices/bus/nes/disksys.cpp41
1 files changed, 27 insertions, 14 deletions
diff --git a/src/devices/bus/nes/disksys.cpp b/src/devices/bus/nes/disksys.cpp
index 9512ef036e8..7fa5a4bce86 100644
--- a/src/devices/bus/nes/disksys.cpp
+++ b/src/devices/bus/nes/disksys.cpp
@@ -346,9 +346,12 @@ uint8_t nes_disksys_device::read_ex(offs_t offset)
// bit6 - End of Head (1 when disk head is on the most inner track)
// bit7 - Disk Data Read/Write Enable (1 when disk is readable/writable)
ret = m_fds_status0 | 0x80;
- // clear the disk IRQ detect and byte transfer flags
- m_fds_status0 &= ~0x03;
- set_irq_line(CLEAR_LINE);
+ if (!machine().side_effects_disabled())
+ {
+ // clear the disk IRQ detect and byte transfer flags
+ m_fds_status0 &= ~0x03;
+ set_irq_line(CLEAR_LINE);
+ }
break;
case 0x11:
// $4031 - data latch
@@ -357,19 +360,26 @@ uint8_t nes_disksys_device::read_ex(offs_t offset)
ret = 0;
else if (m_fds_current_side && m_read_mode)
{
- ret = m_fds_data[(m_fds_current_side - 1) * 65500 + m_fds_head_position++];
- if (m_fds_head_position == 65500)
+ ret = m_fds_data[(m_fds_current_side - 1) * 65500 + m_fds_head_position];
+ if (!machine().side_effects_disabled())
{
- printf("end of disk reached!\n");
- m_fds_status0 |= 0x40;
- m_fds_head_position -= 2;
+ m_fds_head_position++;
+ if (m_fds_head_position == 65500)
+ {
+ logerror("%s: end of disk reached!\n", machine().describe_context());
+ m_fds_status0 |= 0x40;
+ m_fds_head_position -= 2;
+ }
}
}
else
ret = 0;
// clear the byte transfer flag
- m_fds_status0 &= ~0x02;
- set_irq_line(CLEAR_LINE);
+ if (!machine().side_effects_disabled())
+ {
+ m_fds_status0 &= ~0x02;
+ set_irq_line(CLEAR_LINE);
+ }
break;
case 0x12:
// $4032 - disk status 1:
@@ -382,11 +392,14 @@ uint8_t nes_disksys_device::read_ex(offs_t offset)
{
// If we've switched disks, report "no disk" for a few reads
ret = 1;
- m_fds_count++;
- if (m_fds_count == 50)
+ if (!machine().side_effects_disabled())
{
- m_fds_last_side = m_fds_current_side;
- m_fds_count = 0;
+ m_fds_count++;
+ if (m_fds_count == 50)
+ {
+ m_fds_last_side = m_fds_current_side;
+ m_fds_count = 0;
+ }
}
}
else