summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/altos8600.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/altos8600.cpp')
-rw-r--r--src/mame/drivers/altos8600.cpp32
1 files changed, 26 insertions, 6 deletions
diff --git a/src/mame/drivers/altos8600.cpp b/src/mame/drivers/altos8600.cpp
index c9145a75d78..aafb96fdab6 100644
--- a/src/mame/drivers/altos8600.cpp
+++ b/src/mame/drivers/altos8600.cpp
@@ -63,6 +63,7 @@ public:
DECLARE_WRITE16_MEMBER(mode_w);
DECLARE_WRITE_LINE_MEMBER(cpuif_w);
DECLARE_WRITE_LINE_MEMBER(fddrq_w);
+ DECLARE_WRITE_LINE_MEMBER(sintr1_w);
DECLARE_WRITE8_MEMBER(ics_attn_w);
IRQ_CALLBACK_MEMBER(inta);
protected:
@@ -123,7 +124,6 @@ void altos8600_state::machine_reset()
bool altos8600_state::find_sector()
{
u8 head = m_head >> 4;
- logerror("head %d cyl %d curcyl %d sect %d", head, m_cyl, m_curcyl, m_sect);
if(!m_geom)
return false;
@@ -166,6 +166,7 @@ u8 altos8600_state::read_sector()
if(secoff >= 511)
{
m_dmac->drq1_w(CLEAR_LINE);
+ m_pic2->ir0_w(ASSERT_LINE);
m_stat &= ~1;
m_stat |= 2;
}
@@ -179,13 +180,13 @@ bool altos8600_state::write_sector(u8 data)
if(m_secoff >= 512)
return true;
m_sector[m_secoff++] = data;
- logerror("secoff %d", m_secoff);
if(m_secoff == 512)
{
m_stat &= ~1;
m_stat |= 2;
hard_disk_write(m_hdd->get_hard_disk_file(), m_lba, m_sector);
m_dmac->drq1_w(CLEAR_LINE);
+ m_pic2->ir0_w(ASSERT_LINE);
return true;
}
return false;
@@ -200,7 +201,7 @@ READ8_MEMBER(altos8600_state::hd_r)
return read_sector();
break;
case 3:
- m_pic1->ir3_w(CLEAR_LINE);
+ m_pic2->ir0_w(CLEAR_LINE);
return m_stat;
}
return 0;
@@ -238,7 +239,10 @@ WRITE8_MEMBER(altos8600_state::hd_w)
break;
}
if(m_sechi)
+ {
+ m_sechi = false;
m_sect |= (data & 7) << 8;
+ }
else
{
m_sechi = true;
@@ -247,7 +251,10 @@ WRITE8_MEMBER(altos8600_state::hd_w)
break;
case 2:
if(m_cylhi)
+ {
+ m_cylhi = false;
m_cyl |= (data & 7) << 8;
+ }
else
{
m_cylhi = true;
@@ -255,7 +262,6 @@ WRITE8_MEMBER(altos8600_state::hd_w)
}
break;
case 3:
- logerror("cmd %02x stat %04x\n", data, m_stat);
m_cmd = data;
m_cylhi = false;
m_sechi = false;
@@ -269,7 +275,7 @@ WRITE8_MEMBER(altos8600_state::hd_w)
m_curcyl = m_cyl;
m_stat |= 2;
break;
- case 0x11:
+ case 0x20:
m_curcyl = 0;
m_stat |= 2;
break;
@@ -310,6 +316,20 @@ WRITE_LINE_MEMBER(altos8600_state::fddrq_w)
m_dmac->drq2_w(state);
}
+WRITE_LINE_MEMBER(altos8600_state::sintr1_w)
+{
+ if(state)
+ {
+ m_dmac->drq1_w(CLEAR_LINE);
+ m_pic2->ir0_w(ASSERT_LINE);
+ m_pic2->ir3_w(ASSERT_LINE);
+ m_stat &= ~1;
+ m_stat |= 2;
+ }
+ else
+ m_pic2->ir3_w(CLEAR_LINE);
+}
+
READ16_MEMBER(altos8600_state::fault_r)
{
return m_mmuerr;
@@ -672,7 +692,7 @@ static MACHINE_CONFIG_START(altos8600)
MCFG_CPU_PROGRAM_MAP(dmac_mem)
MCFG_CPU_IO_MAP(dmac_io)
MCFG_I8089_DATABUS_WIDTH(16)
- MCFG_I8089_SINTR1(DEVWRITELINE("pic8259_2", pic8259_device, ir3_w))
+ MCFG_I8089_SINTR1(WRITELINE(altos8600_state, sintr1_w))
MCFG_I8089_SINTR2(DEVWRITELINE("pic8259_2", pic8259_device, ir4_w))
MCFG_DEVICE_ADD("pic8259_1", PIC8259, 0)