mirror of
https://github.com/holub/mame
synced 2025-04-21 07:52:35 +03:00
Merge branch 'master' of https://github.com/mamedev/mame
This commit is contained in:
commit
7e992e512e
@ -8,7 +8,6 @@
|
||||
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/amiga.h"
|
||||
#include "formats/ami_dsk.h"
|
||||
#include "amigafdc.h"
|
||||
|
||||
@ -21,6 +20,10 @@ FLOPPY_FORMATS_END
|
||||
amiga_fdc_device::amiga_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||
device_t(mconfig, AMIGA_FDC, tag, owner, clock),
|
||||
m_write_index(*this),
|
||||
m_read_dma(*this),
|
||||
m_write_dma(*this),
|
||||
m_write_dskblk(*this),
|
||||
m_write_dsksyn(*this),
|
||||
floppy(nullptr), t_gen(nullptr), dsklen(0), pre_dsklen(0), dsksync(0), dskbyt(0), adkcon(0), dmacon(0), dskpt(0), dma_value(0), dma_state(0)
|
||||
{
|
||||
}
|
||||
@ -28,6 +31,10 @@ amiga_fdc_device::amiga_fdc_device(const machine_config &mconfig, const char *ta
|
||||
void amiga_fdc_device::device_start()
|
||||
{
|
||||
m_write_index.resolve_safe();
|
||||
m_read_dma.resolve_safe(0);
|
||||
m_write_dma.resolve_safe();
|
||||
m_write_dskblk.resolve_safe();
|
||||
m_write_dsksyn.resolve_safe();
|
||||
|
||||
static const char *names[] = { "0", "1", "2", "3" };
|
||||
for(int i=0; i != 4; i++) {
|
||||
@ -62,20 +69,18 @@ void amiga_fdc_device::device_reset()
|
||||
|
||||
void amiga_fdc_device::dma_done()
|
||||
{
|
||||
amiga_state *state = machine().driver_data<amiga_state>();
|
||||
if(dskbyt & 0x2000) {
|
||||
dskbyt &= ~0x2000;
|
||||
cur_live.pll.stop_writing(floppy, cur_live.tm);
|
||||
}
|
||||
|
||||
dma_state = DMA_IDLE;
|
||||
state->custom_chip_w(REG_INTREQ, INTENA_SETCLR | INTENA_DSKBLK);
|
||||
m_write_dskblk(1);
|
||||
}
|
||||
|
||||
void amiga_fdc_device::dma_write(uint16_t value)
|
||||
{
|
||||
amiga_state *state = machine().driver_data<amiga_state>();
|
||||
state->chip_ram_w(dskpt, value);
|
||||
m_write_dma(dskpt, value, 0xffff);
|
||||
|
||||
dskpt += 2;
|
||||
dsklen--;
|
||||
@ -88,8 +93,7 @@ void amiga_fdc_device::dma_write(uint16_t value)
|
||||
|
||||
uint16_t amiga_fdc_device::dma_read()
|
||||
{
|
||||
amiga_state *state = machine().driver_data<amiga_state>();
|
||||
uint16_t res = state->chip_ram_r(dskpt);
|
||||
uint16_t res = m_read_dma(dskpt, 0xffff);
|
||||
|
||||
dskpt += 2;
|
||||
dsklen--;
|
||||
@ -175,8 +179,6 @@ void amiga_fdc_device::live_abort()
|
||||
|
||||
void amiga_fdc_device::live_run(const attotime &limit)
|
||||
{
|
||||
amiga_state *state = machine().driver_data<amiga_state>();
|
||||
|
||||
if(cur_live.state == IDLE || cur_live.next_state != -1)
|
||||
return;
|
||||
|
||||
@ -258,7 +260,7 @@ void amiga_fdc_device::live_run(const attotime &limit)
|
||||
cur_live.bit_counter = 0;
|
||||
}
|
||||
dskbyt |= 0x1000;
|
||||
state->custom_chip_w(REG_INTREQ, INTENA_SETCLR | INTENA_DSKSYN);
|
||||
m_write_dsksyn(1);
|
||||
} else
|
||||
dskbyt &= ~0x1000;
|
||||
|
||||
|
@ -10,11 +10,27 @@
|
||||
#define MCFG_AMIGA_FDC_INDEX_CALLBACK(_write) \
|
||||
devcb = &amiga_fdc_device::set_index_wr_callback(*device, DEVCB_##_write);
|
||||
|
||||
#define MCFG_AMIGA_FDC_READ_DMA_CALLBACK(_read) \
|
||||
devcb = &amiga_fdc_device::set_dma_rd_callback(*device, DEVCB_##_read);
|
||||
|
||||
#define MCFG_AMIGA_FDC_WRITE_DMA_CALLBACK(_write) \
|
||||
devcb = &amiga_fdc_device::set_dma_wr_callback(*device, DEVCB_##_write);
|
||||
|
||||
#define MCFG_AMIGA_FDC_DSKBLK_CALLBACK(_write) \
|
||||
devcb = &amiga_fdc_device::set_dskblk_wr_callback(*device, DEVCB_##_write);
|
||||
|
||||
#define MCFG_AMIGA_FDC_DSKSYN_CALLBACK(_write) \
|
||||
devcb = &amiga_fdc_device::set_dsksyn_wr_callback(*device, DEVCB_##_write);
|
||||
|
||||
class amiga_fdc_device : public device_t {
|
||||
public:
|
||||
amiga_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
template <class Object> static devcb_base &set_index_wr_callback(device_t &device, Object &&cb) { return downcast<amiga_fdc_device &>(device).m_write_index.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_dma_rd_callback(device_t &device, Object &&cb) { return downcast<amiga_fdc_device &>(device).m_read_dma.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_dma_wr_callback(device_t &device, Object &&cb) { return downcast<amiga_fdc_device &>(device).m_write_dma.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_dskblk_wr_callback(device_t &device, Object &&cb) { return downcast<amiga_fdc_device &>(device).m_write_dskblk.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_dsksyn_wr_callback(device_t &device, Object &&cb) { return downcast<amiga_fdc_device &>(device).m_write_dsksyn.set_callback(std::forward<Object>(cb)); }
|
||||
|
||||
DECLARE_WRITE8_MEMBER(ciaaprb_w);
|
||||
|
||||
@ -87,6 +103,10 @@ private:
|
||||
};
|
||||
|
||||
devcb_write_line m_write_index;
|
||||
devcb_read16 m_read_dma;
|
||||
devcb_write16 m_write_dma;
|
||||
devcb_write_line m_write_dskblk;
|
||||
devcb_write_line m_write_dsksyn;
|
||||
|
||||
floppy_image_device *floppy;
|
||||
floppy_image_device *floppy_devices[4];
|
||||
|
@ -344,6 +344,10 @@ static MACHINE_CONFIG_START( alg_r1 )
|
||||
/* fdc */
|
||||
MCFG_DEVICE_ADD("fdc", AMIGA_FDC, amiga_state::CLK_7M_NTSC)
|
||||
MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", mos8520_device, flag_w))
|
||||
MCFG_AMIGA_FDC_READ_DMA_CALLBACK(READ16(amiga_state, chip_ram_r))
|
||||
MCFG_AMIGA_FDC_WRITE_DMA_CALLBACK(WRITE16(amiga_state, chip_ram_w))
|
||||
MCFG_AMIGA_FDC_DSKBLK_CALLBACK(WRITELINE(amiga_state, fdc_dskblk_w))
|
||||
MCFG_AMIGA_FDC_DSKSYN_CALLBACK(WRITELINE(amiga_state, fdc_dsksyn_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -827,7 +827,17 @@ WRITE32_MEMBER( a4000_state::motherboard_w )
|
||||
logerror("motherboard_w(%06x): %08x & %08x\n", offset, data, mem_mask);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( cd32_state::akiko_int_w )
|
||||
WRITE_LINE_MEMBER(amiga_state::fdc_dskblk_w)
|
||||
{
|
||||
set_interrupt(INTENA_SETCLR | INTENA_DSKBLK);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(amiga_state::fdc_dsksyn_w)
|
||||
{
|
||||
set_interrupt(INTENA_SETCLR | INTENA_DSKSYN);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cd32_state::akiko_int_w)
|
||||
{
|
||||
set_interrupt(INTENA_SETCLR | INTENA_PORTS);
|
||||
}
|
||||
@ -1346,6 +1356,10 @@ static MACHINE_CONFIG_START( amiga_base )
|
||||
|
||||
// floppy drives
|
||||
MCFG_DEVICE_ADD("fdc", AMIGA_FDC, amiga_state::CLK_7M_PAL)
|
||||
MCFG_AMIGA_FDC_READ_DMA_CALLBACK(READ16(amiga_state, chip_ram_r))
|
||||
MCFG_AMIGA_FDC_WRITE_DMA_CALLBACK(WRITE16(amiga_state, chip_ram_w))
|
||||
MCFG_AMIGA_FDC_DSKBLK_CALLBACK(WRITELINE(amiga_state, fdc_dskblk_w))
|
||||
MCFG_AMIGA_FDC_DSKSYN_CALLBACK(WRITELINE(amiga_state, fdc_dsksyn_w))
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:0", amiga_floppies, "35dd", amiga_fdc_device::floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_SOUND(true)
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:1", amiga_floppies, nullptr, amiga_fdc_device::floppy_formats)
|
||||
|
@ -335,6 +335,10 @@ static MACHINE_CONFIG_START( arcadia )
|
||||
/* fdc */
|
||||
MCFG_DEVICE_ADD("fdc", AMIGA_FDC, amiga_state::CLK_7M_NTSC)
|
||||
MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", mos8520_device, flag_w))
|
||||
MCFG_AMIGA_FDC_READ_DMA_CALLBACK(READ16(amiga_state, chip_ram_r))
|
||||
MCFG_AMIGA_FDC_WRITE_DMA_CALLBACK(WRITE16(amiga_state, chip_ram_w))
|
||||
MCFG_AMIGA_FDC_DSKBLK_CALLBACK(WRITELINE(amiga_state, fdc_dskblk_w))
|
||||
MCFG_AMIGA_FDC_DSKSYN_CALLBACK(WRITELINE(amiga_state, fdc_dsksyn_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( argh, arcadia )
|
||||
|
@ -1089,6 +1089,10 @@ static MACHINE_CONFIG_START( cubo )
|
||||
/* fdc */
|
||||
MCFG_DEVICE_ADD("fdc", AMIGA_FDC, amiga_state::CLK_7M_PAL)
|
||||
MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", mos8520_device, flag_w))
|
||||
MCFG_AMIGA_FDC_READ_DMA_CALLBACK(READ16(amiga_state, chip_ram_r))
|
||||
MCFG_AMIGA_FDC_WRITE_DMA_CALLBACK(WRITE16(amiga_state, chip_ram_w))
|
||||
MCFG_AMIGA_FDC_DSKBLK_CALLBACK(WRITELINE(amiga_state, fdc_dskblk_w))
|
||||
MCFG_AMIGA_FDC_DSKSYN_CALLBACK(WRITELINE(amiga_state, fdc_dsksyn_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -353,6 +353,10 @@ static MACHINE_CONFIG_START( mquake )
|
||||
/* fdc */
|
||||
MCFG_DEVICE_ADD("fdc", AMIGA_FDC, amiga_state::CLK_7M_NTSC)
|
||||
MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", mos8520_device, flag_w))
|
||||
MCFG_AMIGA_FDC_READ_DMA_CALLBACK(READ16(amiga_state, chip_ram_r))
|
||||
MCFG_AMIGA_FDC_WRITE_DMA_CALLBACK(WRITE16(amiga_state, chip_ram_w))
|
||||
MCFG_AMIGA_FDC_DSKBLK_CALLBACK(WRITELINE(amiga_state, fdc_dskblk_w))
|
||||
MCFG_AMIGA_FDC_DSKSYN_CALLBACK(WRITELINE(amiga_state, fdc_dsksyn_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -304,6 +304,10 @@ static MACHINE_CONFIG_START( upscope )
|
||||
/* fdc */
|
||||
MCFG_DEVICE_ADD("fdc", AMIGA_FDC, amiga_state::CLK_7M_NTSC)
|
||||
MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", mos8520_device, flag_w))
|
||||
MCFG_AMIGA_FDC_READ_DMA_CALLBACK(READ16(amiga_state, chip_ram_r))
|
||||
MCFG_AMIGA_FDC_WRITE_DMA_CALLBACK(WRITE16(amiga_state, chip_ram_w))
|
||||
MCFG_AMIGA_FDC_DSKBLK_CALLBACK(WRITELINE(amiga_state, fdc_dskblk_w))
|
||||
MCFG_AMIGA_FDC_DSKSYN_CALLBACK(WRITELINE(amiga_state, fdc_dsksyn_w))
|
||||
|
||||
// i/o extension
|
||||
MCFG_DEVICE_ADD("ppi", I8255, 0)
|
||||
|
@ -459,6 +459,9 @@ public:
|
||||
DECLARE_READ16_MEMBER( rom_mirror_r );
|
||||
DECLARE_READ32_MEMBER( rom_mirror32_r );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(fdc_dskblk_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(fdc_dsksyn_w);
|
||||
|
||||
// standard clocks
|
||||
static const int CLK_28M_PAL = XTAL_28_37516MHz;
|
||||
static const int CLK_7M_PAL = CLK_28M_PAL / 4;
|
||||
|
Loading…
Reference in New Issue
Block a user