summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Sandro Ronco <sandro.ronco@gmx.com>2016-12-23 19:41:27 +0100
committer Sandro Ronco <sandro.ronco@gmx.com>2016-12-23 19:41:27 +0100
commit8f4e1dc37e125b1b480077a845e5e746a5c6be57 (patch)
tree7facba9c33371402f52485a0ffe9bf2d5f092a89
parenta03651589364971888c5120c51d5c04fb58dfc78 (diff)
Archimedes: make floppies work.
-rw-r--r--src/lib/formats/acorn_dsk.cpp4
-rw-r--r--src/mame/drivers/aa310.cpp3
-rw-r--r--src/mame/machine/archimds.cpp8
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);