From 8f4e1dc37e125b1b480077a845e5e746a5c6be57 Mon Sep 17 00:00:00 2001 From: Sandro Ronco Date: Fri, 23 Dec 2016 19:41:27 +0100 Subject: Archimedes: make floppies work. --- src/lib/formats/acorn_dsk.cpp | 4 ++-- src/mame/drivers/aa310.cpp | 3 +-- src/mame/machine/archimds.cpp | 8 ++++++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/lib/formats/acorn_dsk.cpp b/src/lib/formats/acorn_dsk.cpp index b880b28018f..0c62a907864 100644 --- a/src/lib/formats/acorn_dsk.cpp +++ b/src/lib/formats/acorn_dsk.cpp @@ -412,8 +412,8 @@ int acorn_adfs_new_format::find_size(io_generic *io, uint32_t form_factor) if (form_factor != floppy_image::FF_UNKNOWN && form_factor != f.form_factor) continue; - // valid images will have map identifier Nick - if ((size == (uint64_t)compute_track_size(f) * f.track_count * f.head_count) && (memcmp(dform, "Nick", 4) == 0 || memcmp(eform, "Nick", 4) == 0)) { + // valid images will have map identifier Nick, Arthur D format still use Hugo + if ((size <= (uint64_t)compute_track_size(f) * f.track_count * f.head_count) && (memcmp(dform, "Nick", 4) == 0 || memcmp(eform, "Nick", 4) == 0 || memcmp(dform, "Hugo", 4) == 0)) { return i; } } diff --git a/src/mame/drivers/aa310.cpp b/src/mame/drivers/aa310.cpp index 1a332d05c20..a31aa0cc2b6 100644 --- a/src/mame/drivers/aa310.cpp +++ b/src/mame/drivers/aa310.cpp @@ -124,7 +124,6 @@ protected: WRITE_LINE_MEMBER(aa310_state::aa310_wd177x_intrq_w) { - printf("%d IRQ\n",state); if (state) { archimedes_request_fiq(ARCHIMEDES_FIQ_FLOPPY); @@ -135,7 +134,6 @@ WRITE_LINE_MEMBER(aa310_state::aa310_wd177x_intrq_w) WRITE_LINE_MEMBER(aa310_state::aa310_wd177x_drq_w) { - printf("%d DRQ\n",state); if (state) { archimedes_request_fiq(ARCHIMEDES_FIQ_FLOPPY_DRQ); @@ -415,6 +413,7 @@ static MACHINE_CONFIG_START( aa310, aa310_state ) MCFG_RAM_DEFAULT_SIZE("1M") MCFG_WD1772_ADD("fdc", 8000000 / 1) // TODO: frequency + MCFG_WD_FDC_DISABLE_MOTOR_CONTROL MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(aa310_state, aa310_wd177x_intrq_w)) MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(aa310_state, aa310_wd177x_drq_w)) MCFG_FLOPPY_DRIVE_ADD("fdc:0", aa310_floppies, "35dd", aa310_state::floppy_formats) diff --git a/src/mame/machine/archimds.cpp b/src/mame/machine/archimds.cpp index 35c2f74999a..111e992d10b 100644 --- a/src/mame/machine/archimds.cpp +++ b/src/mame/machine/archimds.cpp @@ -260,6 +260,10 @@ void archimedes_state::ioc_timer(int param) // all timers always run a310_set_timer(param); + // keep FIQ line ASSERTED if there are active requests + if (m_ioc_regs[FIQ_STATUS] & m_ioc_regs[FIQ_MASK]) + archimedes_request_fiq(0); + // but only timers 0 and 1 generate IRQs switch (param) { @@ -494,7 +498,7 @@ bool archimedes_state::check_floppy_ready() } if(floppy) - return floppy->ready_r(); + return !floppy->ready_r(); return false; } @@ -842,7 +846,7 @@ WRITE32_MEMBER(archimedes_state::archimedes_ioc_w) ---- x--- floppy controller reset */ m_fdc->dden_w(BIT(data, 1)); - if(data & 8) + if (!(data & 8)) m_fdc->soft_reset(); if(data & ~0xa) printf("%02x Latch B\n",data); -- cgit v1.2.3