mirror of
https://github.com/holub/mame
synced 2025-07-07 19:03:29 +03:00
amiga: refactor device names so that they references chipset names instead
This commit is contained in:
parent
7ced6a09d0
commit
748622d4f2
@ -25,7 +25,7 @@
|
||||
**************************************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "amiga_copper.h"
|
||||
#include "agnus_copper.h"
|
||||
|
||||
#define LOG_WARN (1U << 1) // Show warnings
|
||||
#define LOG_COPINS (1U << 2) // Show instruction fetches thru COPINS
|
||||
@ -54,7 +54,7 @@
|
||||
|
||||
|
||||
// device type definition
|
||||
DEFINE_DEVICE_TYPE(AMIGA_COPPER, amiga_copper_device, "amiga_copper", "Amiga Copper")
|
||||
DEFINE_DEVICE_TYPE(AGNUS_COPPER, agnus_copper_device, "agnus_copper", "Amiga Agnus Copper")
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
@ -63,12 +63,12 @@ DEFINE_DEVICE_TYPE(AMIGA_COPPER, amiga_copper_device, "amiga_copper", "Amiga Cop
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// amiga_copper_device - constructor
|
||||
// agnus_copper_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
|
||||
amiga_copper_device::amiga_copper_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, AMIGA_COPPER, tag, owner, clock)
|
||||
agnus_copper_device::agnus_copper_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, AGNUS_COPPER, tag, owner, clock)
|
||||
, m_host_cpu(*this, finder_base::DUMMY_TAG)
|
||||
, m_chipmem_r(*this, 0)
|
||||
{
|
||||
@ -80,7 +80,7 @@ amiga_copper_device::amiga_copper_device(const machine_config &mconfig, const ch
|
||||
//-------------------------------------------------
|
||||
|
||||
|
||||
void amiga_copper_device::device_start()
|
||||
void agnus_copper_device::device_start()
|
||||
{
|
||||
m_host_space = &m_host_cpu->space(AS_PROGRAM);
|
||||
|
||||
@ -94,7 +94,6 @@ void amiga_copper_device::device_start()
|
||||
save_item(NAME(m_state_waitblit));
|
||||
save_item(NAME(m_waitval));
|
||||
save_item(NAME(m_waitmask));
|
||||
// save_item(NAME(m_wait_offset));
|
||||
save_item(NAME(m_pending_data));
|
||||
save_item(NAME(m_pending_offset));
|
||||
}
|
||||
@ -105,7 +104,7 @@ void amiga_copper_device::device_start()
|
||||
//-------------------------------------------------
|
||||
|
||||
|
||||
void amiga_copper_device::device_reset()
|
||||
void agnus_copper_device::device_reset()
|
||||
{
|
||||
m_cdang_setting = 0x40;
|
||||
m_dma_master_enable = false;
|
||||
@ -119,19 +118,19 @@ void amiga_copper_device::device_reset()
|
||||
//**************************************************************************
|
||||
|
||||
// $dff080-8d memory map
|
||||
void amiga_copper_device::regs_map(address_map &map)
|
||||
void agnus_copper_device::regs_map(address_map &map)
|
||||
{
|
||||
// TODO: location addresses belongs to Agnus
|
||||
map(0x00, 0x01).w(FUNC(amiga_copper_device::copxlch_w<0>));
|
||||
map(0x02, 0x03).w(FUNC(amiga_copper_device::copxlcl_w<0>));
|
||||
map(0x04, 0x05).w(FUNC(amiga_copper_device::copxlch_w<1>));
|
||||
map(0x06, 0x07).w(FUNC(amiga_copper_device::copxlcl_w<1>));
|
||||
map(0x08, 0x09).rw(FUNC(amiga_copper_device::copjmpx_r<0>), FUNC(amiga_copper_device::copjmpx_w<0>));
|
||||
map(0x0a, 0x0b).rw(FUNC(amiga_copper_device::copjmpx_r<1>), FUNC(amiga_copper_device::copjmpx_w<1>));
|
||||
// map(0x0c, 0x0d).w(FUNC(amiga_copper_device::copins_w));
|
||||
map(0x00, 0x01).w(FUNC(agnus_copper_device::copxlch_w<0>));
|
||||
map(0x02, 0x03).w(FUNC(agnus_copper_device::copxlcl_w<0>));
|
||||
map(0x04, 0x05).w(FUNC(agnus_copper_device::copxlch_w<1>));
|
||||
map(0x06, 0x07).w(FUNC(agnus_copper_device::copxlcl_w<1>));
|
||||
map(0x08, 0x09).rw(FUNC(agnus_copper_device::copjmpx_r<0>), FUNC(agnus_copper_device::copjmpx_w<0>));
|
||||
map(0x0a, 0x0b).rw(FUNC(agnus_copper_device::copjmpx_r<1>), FUNC(agnus_copper_device::copjmpx_w<1>));
|
||||
// map(0x0c, 0x0d).w(FUNC(agnus_copper_device::copins_w));
|
||||
}
|
||||
|
||||
void amiga_copper_device::dmacon_set(u16 data)
|
||||
void agnus_copper_device::dmacon_set(u16 data)
|
||||
{
|
||||
m_dma_master_enable = bool(BIT(data, 9));
|
||||
m_dma_copen = bool(BIT(data, 7));
|
||||
@ -155,7 +154,7 @@ void amiga_copper_device::dmacon_set(u16 data)
|
||||
* sense to write via Copper).
|
||||
*
|
||||
*/
|
||||
void amiga_copper_device::copcon_w(u16 data)
|
||||
void agnus_copper_device::copcon_w(u16 data)
|
||||
{
|
||||
bool cdang = bool(BIT(data, 1));
|
||||
|
||||
@ -167,13 +166,13 @@ void amiga_copper_device::copcon_w(u16 data)
|
||||
LOGWARN("%s: COPCON undocumented setting write %04x\n", machine().describe_context(), data);
|
||||
}
|
||||
|
||||
template <u8 ch> void amiga_copper_device::copxlch_w(u16 data)
|
||||
template <u8 ch> void agnus_copper_device::copxlch_w(u16 data)
|
||||
{
|
||||
// TODO: chipmem mask
|
||||
m_lc[ch] = (m_lc[ch] & 0x0000ffff) | ((data & 0x001f) << 16);
|
||||
}
|
||||
|
||||
template <u8 ch> void amiga_copper_device::copxlcl_w(u16 data)
|
||||
template <u8 ch> void agnus_copper_device::copxlcl_w(u16 data)
|
||||
{
|
||||
m_lc[ch] = (m_lc[ch] & 0xffff0000) | ((data & 0xfffe) << 0);
|
||||
}
|
||||
@ -187,19 +186,19 @@ template <u8 ch> void amiga_copper_device::copxlcl_w(u16 data)
|
||||
* do conditional branching by clever use of the skip opcode.
|
||||
*
|
||||
*/
|
||||
template <u8 ch> void amiga_copper_device::copjmpx_w(u16 data)
|
||||
template <u8 ch> void agnus_copper_device::copjmpx_w(u16 data)
|
||||
{
|
||||
set_pc(ch, false);
|
||||
}
|
||||
|
||||
template <u8 ch> u16 amiga_copper_device::copjmpx_r()
|
||||
template <u8 ch> u16 agnus_copper_device::copjmpx_r()
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
set_pc(ch, false);
|
||||
return m_host_space->unmap();
|
||||
}
|
||||
|
||||
inline void amiga_copper_device::set_pc(u8 ch, bool is_sync)
|
||||
inline void agnus_copper_device::set_pc(u8 ch, bool is_sync)
|
||||
{
|
||||
m_pc = m_lc[ch];
|
||||
m_state_waiting = false;
|
||||
@ -221,7 +220,7 @@ inline void amiga_copper_device::set_pc(u8 ch, bool is_sync)
|
||||
* (such as our debugger ;=).
|
||||
*
|
||||
*/
|
||||
void amiga_copper_device::copins_w(u16 data)
|
||||
void agnus_copper_device::copins_w(u16 data)
|
||||
{
|
||||
LOGCOPINS("%s: COPINS %04x\n", machine().describe_context(), data);
|
||||
}
|
||||
@ -231,13 +230,13 @@ void amiga_copper_device::copins_w(u16 data)
|
||||
//**************************************************************************
|
||||
|
||||
// executed on scanline == 0
|
||||
void amiga_copper_device::vblank_sync()
|
||||
void agnus_copper_device::vblank_sync()
|
||||
{
|
||||
set_pc(0, true);
|
||||
}
|
||||
|
||||
// TODO: h/vblank checks against xpos/vpos
|
||||
int amiga_copper_device::execute_next(int xpos, int ypos, bool is_blitter_busy, int num_planes)
|
||||
int agnus_copper_device::execute_next(int xpos, int ypos, bool is_blitter_busy, int num_planes)
|
||||
{
|
||||
int word0, word1;
|
||||
|
@ -6,8 +6,8 @@
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef MAME_AMIGA_AMIGA_COPPER_H
|
||||
#define MAME_AMIGA_AMIGA_COPPER_H
|
||||
#ifndef MAME_AMIGA_AGNUS_COPPER_H
|
||||
#define MAME_AMIGA_AGNUS_COPPER_H
|
||||
|
||||
#pragma once
|
||||
|
||||
@ -15,11 +15,11 @@
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
class amiga_copper_device : public device_t
|
||||
class agnus_copper_device : public device_t
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
amiga_copper_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
agnus_copper_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// config
|
||||
template<class T> void set_host_cpu_tag(T &&tag) { m_host_cpu.set_tag(std::forward<T>(tag)); }
|
||||
@ -96,6 +96,6 @@ private:
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(AMIGA_COPPER, amiga_copper_device)
|
||||
DECLARE_DEVICE_TYPE(AGNUS_COPPER, agnus_copper_device)
|
||||
|
||||
#endif // MAME_AMIGA_AMIGA_COPPER_H
|
||||
#endif // MAME_AMIGA_AGNUS_COPPER_H
|
@ -340,7 +340,7 @@ void alg_state::alg_r1(machine_config &config)
|
||||
// Video hardware
|
||||
ntsc_video(config);
|
||||
|
||||
AMIGA_COPPER(config, m_copper, amiga_state::CLK_7M_NTSC);
|
||||
AGNUS_COPPER(config, m_copper, amiga_state::CLK_7M_NTSC);
|
||||
m_copper->set_host_cpu_tag(m_maincpu);
|
||||
m_copper->mem_read_cb().set(FUNC(amiga_state::chip_ram_r));
|
||||
m_copper->set_ecs_mode(false);
|
||||
@ -379,7 +379,7 @@ void alg_state::alg_r1(machine_config &config)
|
||||
MOS8520(config, m_cia_1, amiga_state::CLK_E_NTSC);
|
||||
m_cia_1->irq_wr_callback().set(FUNC(amiga_state::cia_1_irq));
|
||||
|
||||
AMIGA_FDC(config, m_fdc, amiga_state::CLK_7M_NTSC);
|
||||
PAULA_FDC(config, m_fdc, amiga_state::CLK_7M_NTSC);
|
||||
m_fdc->index_callback().set("cia_1", FUNC(mos8520_device::flag_w));
|
||||
m_fdc->read_dma_callback().set(FUNC(amiga_state::chip_ram_r));
|
||||
m_fdc->write_dma_callback().set(FUNC(amiga_state::chip_ram_w));
|
||||
|
@ -1646,7 +1646,7 @@ void amiga_state::amiga_base(machine_config &config)
|
||||
m_cia_1->irq_wr_callback().set(FUNC(amiga_state::cia_1_irq));
|
||||
m_cia_1->pa_rd_callback().set(FUNC(amiga_state::cia_1_port_a_read));
|
||||
m_cia_1->pa_wr_callback().set(FUNC(amiga_state::cia_1_port_a_write));
|
||||
m_cia_1->pb_wr_callback().set(m_fdc, FUNC(amiga_fdc_device::ciaaprb_w));
|
||||
m_cia_1->pb_wr_callback().set(m_fdc, FUNC(paula_fdc_device::ciaaprb_w));
|
||||
|
||||
// audio
|
||||
SPEAKER(config, "lspeaker").front_left();
|
||||
@ -1660,20 +1660,20 @@ void amiga_state::amiga_base(machine_config &config)
|
||||
m_paula->int_cb().set(FUNC(amiga_state::paula_int_w));
|
||||
|
||||
// floppy drives
|
||||
AMIGA_FDC(config, m_fdc, amiga_state::CLK_7M_PAL);
|
||||
PAULA_FDC(config, m_fdc, amiga_state::CLK_7M_PAL);
|
||||
m_fdc->index_callback().set(m_cia_1, FUNC(mos8520_device::flag_w));
|
||||
m_fdc->read_dma_callback().set(FUNC(amiga_state::chip_ram_r));
|
||||
m_fdc->write_dma_callback().set(FUNC(amiga_state::chip_ram_w));
|
||||
m_fdc->dskblk_callback().set(FUNC(amiga_state::fdc_dskblk_w));
|
||||
m_fdc->dsksyn_callback().set(FUNC(amiga_state::fdc_dsksyn_w));
|
||||
FLOPPY_CONNECTOR(config, "fdc:0", amiga_floppies, "35dd", amiga_fdc_device::floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, "fdc:1", amiga_floppies, nullptr, amiga_fdc_device::floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, "fdc:2", amiga_floppies, nullptr, amiga_fdc_device::floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, "fdc:3", amiga_floppies, nullptr, amiga_fdc_device::floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, "fdc:0", amiga_floppies, "35dd", paula_fdc_device::floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, "fdc:1", amiga_floppies, nullptr, paula_fdc_device::floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, "fdc:2", amiga_floppies, nullptr, paula_fdc_device::floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, "fdc:3", amiga_floppies, nullptr, paula_fdc_device::floppy_formats).enable_sound(true);
|
||||
|
||||
// TODO: shouldn't have a clock
|
||||
// (finite state machine, controlled by Agnus beams)
|
||||
AMIGA_COPPER(config, m_copper, amiga_state::CLK_7M_PAL);
|
||||
AGNUS_COPPER(config, m_copper, amiga_state::CLK_7M_PAL);
|
||||
m_copper->set_host_cpu_tag(m_maincpu);
|
||||
m_copper->mem_read_cb().set(FUNC(amiga_state::chip_ram_r));
|
||||
m_copper->set_ecs_mode(false);
|
||||
|
@ -25,11 +25,11 @@ Ernesto Corvi & Mariusz Wojcieszek
|
||||
#include "machine/msm6242.h"
|
||||
#include "machine/i2cmem.h"
|
||||
|
||||
#include "8364_paula.h"
|
||||
#include "agnus_copper.h"
|
||||
#include "akiko.h"
|
||||
#include "amigaaga.h"
|
||||
#include "amigafdc.h"
|
||||
#include "amiga_copper.h"
|
||||
#include "paula.h"
|
||||
#include "paulafdc.h"
|
||||
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
@ -307,8 +307,6 @@ Ernesto Corvi & Mariusz Wojcieszek
|
||||
#define INTENA_INTEN 0x4000
|
||||
#define INTENA_SETCLR 0x8000
|
||||
|
||||
#define MAX_PLANES 6 /* 0 to 6, inclusive ( but we count from 0 to 5 ) */
|
||||
|
||||
|
||||
class amiga_state : public driver_device
|
||||
{
|
||||
@ -409,7 +407,6 @@ public:
|
||||
uint16_t m_copper_waitmask = 0;
|
||||
uint16_t m_copper_pending_offset = 0;
|
||||
uint16_t m_copper_pending_data = 0;
|
||||
int m_wait_offset = 0;
|
||||
|
||||
/* playfield states */
|
||||
int m_last_scanline = 0;
|
||||
@ -588,9 +585,9 @@ protected:
|
||||
required_device<mos8520_device> m_cia_1;
|
||||
optional_device<rs232_port_device> m_rs232;
|
||||
optional_device<centronics_device> m_centronics;
|
||||
required_device<amiga_copper_device> m_copper;
|
||||
required_device<paula_8364_device> m_paula;
|
||||
optional_device<amiga_fdc_device> m_fdc;
|
||||
required_device<agnus_copper_device> m_copper;
|
||||
required_device<paula_device> m_paula;
|
||||
optional_device<paula_fdc_device> m_fdc;
|
||||
required_device<screen_device> m_screen;
|
||||
optional_device<palette_device> m_palette;
|
||||
required_device<address_map_bank_device> m_overlay;
|
||||
|
@ -1126,26 +1126,26 @@ void amiga_state::ocs_map(address_map &map)
|
||||
// map(0x00a, 0x00b).r(FUNC(amiga_state::joydat_r<0>));
|
||||
// map(0x00c, 0x00d).r(FUNC(amiga_state::joydat_r<1>));
|
||||
// map(0x00e, 0x00f).r(FUNC(amiga_state::clxdat_r));
|
||||
map(0x010, 0x011).r(m_fdc, FUNC(amiga_fdc_device::adkcon_r));
|
||||
map(0x010, 0x011).r(m_fdc, FUNC(paula_fdc_device::adkcon_r));
|
||||
// map(0x012, 0x013).r(FUNC(amiga_state::potdat_r<0>)); // POT0DAT
|
||||
// map(0x014, 0x015).r(FUNC(amiga_state::potdat_r<1>));
|
||||
// map(0x016, 0x017).r(FUNC(amiga_state::potgor_r)); // a.k.a. POTINP
|
||||
// map(0x018, 0x019).r(FUNC(amiga_state::serdat_r));
|
||||
map(0x01a, 0x01b).r(m_fdc, FUNC(amiga_fdc_device::dskbytr_r));
|
||||
// map(0x01c, 0x01d).r(m_paula, FUNC(paula_8364_device::intenar_r));
|
||||
// map(0x01e, 0x01f).r(m_paula, FUNC(paula_8364_device::intreqr_r));
|
||||
map(0x01a, 0x01b).r(m_fdc, FUNC(paula_fdc_device::dskbytr_r));
|
||||
// map(0x01c, 0x01d).r(m_paula, FUNC(paula_device::intenar_r));
|
||||
// map(0x01e, 0x01f).r(m_paula, FUNC(paula_device::intreqr_r));
|
||||
|
||||
// FDC writes
|
||||
// FIXME: these two belongs to Agnus, also shouldn't be readable
|
||||
map(0x020, 0x021).rw(m_fdc, FUNC(amiga_fdc_device::dskpth_r), FUNC(amiga_fdc_device::dskpth_w));
|
||||
map(0x022, 0x023).rw(m_fdc, FUNC(amiga_fdc_device::dskptl_r), FUNC(amiga_fdc_device::dskptl_w));
|
||||
map(0x024, 0x025).w(m_fdc, FUNC(amiga_fdc_device::dsklen_w));
|
||||
// map(0x026, 0x027).w(m_fdc, FUNC(amiga_fdc_device::dskdat_w));
|
||||
map(0x020, 0x021).rw(m_fdc, FUNC(paula_fdc_device::dskpth_r), FUNC(paula_fdc_device::dskpth_w));
|
||||
map(0x022, 0x023).rw(m_fdc, FUNC(paula_fdc_device::dskptl_r), FUNC(paula_fdc_device::dskptl_w));
|
||||
map(0x024, 0x025).w(m_fdc, FUNC(paula_fdc_device::dsklen_w));
|
||||
// map(0x026, 0x027).w(m_fdc, FUNC(paula_fdc_device::dskdat_w));
|
||||
|
||||
// map(0x028, 0x029).w(FUNC(amiga_state::refptr_w));
|
||||
map(0x02a, 0x02b).w(FUNC(amiga_state::vposw_w));
|
||||
// map(0x02c, 0x02d).w(FUNC(amiga_state::vhposw_w));
|
||||
map(0x02e, 0x02f).w(m_copper, FUNC(amiga_copper_device::copcon_w));
|
||||
map(0x02e, 0x02f).w(m_copper, FUNC(agnus_copper_device::copcon_w));
|
||||
|
||||
// input strobes
|
||||
// map(0x030, 0x031).w(FUNC(amiga_state::serdat_w));
|
||||
@ -1160,11 +1160,11 @@ void amiga_state::ocs_map(address_map &map)
|
||||
|
||||
// map(0x040, 0x075).m(m_blitter, FUNC(amiga_blitter_device::regs_map));
|
||||
// map(0x07c, 0x07d).r <open bus for OCS>
|
||||
map(0x07e, 0x07f).w(m_fdc, FUNC(amiga_fdc_device::dsksync_w));
|
||||
map(0x07e, 0x07f).w(m_fdc, FUNC(paula_fdc_device::dsksync_w));
|
||||
|
||||
// Copper
|
||||
map(0x080, 0x08b).m(m_copper, FUNC(amiga_copper_device::regs_map));
|
||||
map(0x08c, 0x08d).w(m_copper, FUNC(amiga_copper_device::copins_w));
|
||||
map(0x080, 0x08b).m(m_copper, FUNC(agnus_copper_device::regs_map));
|
||||
map(0x08c, 0x08d).w(m_copper, FUNC(agnus_copper_device::copins_w));
|
||||
// Display window
|
||||
// map(0x08e, 0x08f).w(FUNC(amiga_state::diwstrt_w));
|
||||
// map(0x090, 0x091).w(FUNC(amiga_state::diwstop_w));
|
||||
@ -1174,14 +1174,14 @@ void amiga_state::ocs_map(address_map &map)
|
||||
|
||||
// map(0x096, 0x097).w(FUNC(amiga_state::dmacon_w));
|
||||
// map(0x098, 0x099).w(FUNC(amiga_state::clxcon_w));
|
||||
// map(0x09a, 0x09b).w(m_paula, FUNC(paula_8364_device::intena_w));
|
||||
// map(0x09c, 0x09d).w(m_paula, FUNC(paula_8364_device::intreq_w));
|
||||
// map(0x09e, 0x09f).w(m_paula, FUNC(paula_8364_device::adkcon_w));
|
||||
// map(0x09a, 0x09b).w(m_paula, FUNC(paula_device::intena_w));
|
||||
// map(0x09c, 0x09d).w(m_paula, FUNC(paula_device::intreq_w));
|
||||
// map(0x09e, 0x09f).w(m_paula, FUNC(paula_device::adkcon_w));
|
||||
// Audio section
|
||||
map(0x0a0, 0x0ab).m(m_paula, FUNC(paula_8364_device::audio_channel_map<0>));
|
||||
map(0x0b0, 0x0bb).m(m_paula, FUNC(paula_8364_device::audio_channel_map<1>));
|
||||
map(0x0c0, 0x0cb).m(m_paula, FUNC(paula_8364_device::audio_channel_map<2>));
|
||||
map(0x0d0, 0x0db).m(m_paula, FUNC(paula_8364_device::audio_channel_map<3>));
|
||||
map(0x0a0, 0x0ab).m(m_paula, FUNC(paula_device::audio_channel_map<0>));
|
||||
map(0x0b0, 0x0bb).m(m_paula, FUNC(paula_device::audio_channel_map<1>));
|
||||
map(0x0c0, 0x0cb).m(m_paula, FUNC(paula_device::audio_channel_map<2>));
|
||||
map(0x0d0, 0x0db).m(m_paula, FUNC(paula_device::audio_channel_map<3>));
|
||||
|
||||
// Bitplane pointer section
|
||||
// map(0x0e0, 0x0ff).m(amiga_state::bplxptr_map));
|
||||
|
@ -327,7 +327,7 @@ void arcadia_amiga_state::arcadia(machine_config &config)
|
||||
ADDRESS_MAP_BANK(config, m_overlay).set_map(&arcadia_amiga_state::overlay_512kb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000);
|
||||
ADDRESS_MAP_BANK(config, m_chipset).set_map(&arcadia_amiga_state::ocs_map).set_options(ENDIANNESS_BIG, 16, 9, 0x200);
|
||||
|
||||
AMIGA_COPPER(config, m_copper, amiga_state::CLK_7M_NTSC);
|
||||
AGNUS_COPPER(config, m_copper, amiga_state::CLK_7M_NTSC);
|
||||
m_copper->set_host_cpu_tag(m_maincpu);
|
||||
m_copper->mem_read_cb().set(FUNC(amiga_state::chip_ram_r));
|
||||
m_copper->set_ecs_mode(false);
|
||||
@ -365,7 +365,7 @@ void arcadia_amiga_state::arcadia(machine_config &config)
|
||||
m_cia_1->irq_wr_callback().set(FUNC(amiga_state::cia_1_irq));
|
||||
|
||||
/* fdc */
|
||||
AMIGA_FDC(config, m_fdc, amiga_state::CLK_7M_NTSC);
|
||||
PAULA_FDC(config, m_fdc, amiga_state::CLK_7M_NTSC);
|
||||
m_fdc->index_callback().set("cia_1", FUNC(mos8520_device::flag_w));
|
||||
m_fdc->read_dma_callback().set(FUNC(amiga_state::chip_ram_r));
|
||||
m_fdc->write_dma_callback().set(FUNC(amiga_state::chip_ram_w));
|
||||
|
@ -1075,7 +1075,7 @@ void cubo_state::cubo(machine_config &config)
|
||||
ADDRESS_MAP_BANK(config, m_overlay).set_map(&cubo_state::overlay_2mb_map32).set_options(ENDIANNESS_BIG, 32, 22, 0x200000);
|
||||
ADDRESS_MAP_BANK(config, m_chipset).set_map(&cubo_state::aga_map).set_options(ENDIANNESS_BIG, 32, 9, 0x200);
|
||||
|
||||
AMIGA_COPPER(config, m_copper, amiga_state::CLK_28M_PAL / 2);
|
||||
AGNUS_COPPER(config, m_copper, amiga_state::CLK_28M_PAL / 2);
|
||||
m_copper->set_host_cpu_tag(m_maincpu);
|
||||
m_copper->mem_read_cb().set(FUNC(amiga_state::chip_ram_r));
|
||||
m_copper->set_ecs_mode(true);
|
||||
@ -1122,7 +1122,7 @@ void cubo_state::cubo(machine_config &config)
|
||||
MICROTOUCH(config, m_microtouch, 9600).stx().set(FUNC(cubo_state::rs232_rx_w));
|
||||
|
||||
/* fdc */
|
||||
AMIGA_FDC(config, m_fdc, amiga_state::CLK_7M_PAL);
|
||||
PAULA_FDC(config, m_fdc, amiga_state::CLK_7M_PAL);
|
||||
m_fdc->index_callback().set("cia_1", FUNC(mos8520_device::flag_w));
|
||||
m_fdc->read_dma_callback().set(FUNC(amiga_state::chip_ram_r));
|
||||
m_fdc->write_dma_callback().set(FUNC(amiga_state::chip_ram_w));
|
||||
|
@ -324,7 +324,7 @@ void mquake_state::mquake(machine_config &config)
|
||||
ADDRESS_MAP_BANK(config, m_overlay).set_map(&mquake_state::overlay_512kb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000);
|
||||
ADDRESS_MAP_BANK(config, m_chipset).set_map(&mquake_state::ocs_map).set_options(ENDIANNESS_BIG, 16, 9, 0x200);
|
||||
|
||||
AMIGA_COPPER(config, m_copper, amiga_state::CLK_7M_NTSC);
|
||||
AGNUS_COPPER(config, m_copper, amiga_state::CLK_7M_NTSC);
|
||||
m_copper->set_host_cpu_tag(m_maincpu);
|
||||
m_copper->mem_read_cb().set(FUNC(amiga_state::chip_ram_r));
|
||||
m_copper->set_ecs_mode(false);
|
||||
@ -365,7 +365,7 @@ void mquake_state::mquake(machine_config &config)
|
||||
m_cia_1->irq_wr_callback().set(FUNC(amiga_state::cia_1_irq));
|
||||
|
||||
/* fdc */
|
||||
AMIGA_FDC(config, m_fdc, amiga_state::CLK_7M_NTSC);
|
||||
PAULA_FDC(config, m_fdc, amiga_state::CLK_7M_NTSC);
|
||||
m_fdc->index_callback().set("cia_1", FUNC(mos8520_device::flag_w));
|
||||
m_fdc->read_dma_callback().set(FUNC(amiga_state::chip_ram_r));
|
||||
m_fdc->write_dma_callback().set(FUNC(amiga_state::chip_ram_w));
|
||||
|
@ -2,11 +2,16 @@
|
||||
// copyright-holders: Aaron Giles, Dirk Best
|
||||
/******************************************************************************
|
||||
|
||||
MOS Technology 8364 "Paula"
|
||||
MOS Technology/Commodore 8364 "Paula"
|
||||
|
||||
Multi-purpose chip that is part of the Amiga chipset. The name "Paula"
|
||||
is derived from "Ports, Audio, UART and Logic". It features 4-channel
|
||||
DMA driven audio, the floppy controller, a serial receiver/transmitter,
|
||||
analog inputs and contains the interrupt controller.
|
||||
|
||||
TODO:
|
||||
- Inherit FDC, serial and irq controller to here;
|
||||
- Move Agnus "location" logic from here;
|
||||
- Move Agnus "location" logic out of here;
|
||||
- low-pass filter;
|
||||
- convert volume values to non-linear dB scale (cfr. )
|
||||
- Verify ADKCON modulation;
|
||||
@ -20,7 +25,7 @@
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "8364_paula.h"
|
||||
#include "paula.h"
|
||||
|
||||
#define LIVE_AUDIO_VIEW 0
|
||||
|
||||
@ -33,7 +38,7 @@
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(PAULA_8364, paula_8364_device, "paula_8364", "MOS 8364 \"Paula\"")
|
||||
DEFINE_DEVICE_TYPE(PAULA_8364, paula_device, "paula_8364", "MOS 8364 \"Paula\"")
|
||||
|
||||
|
||||
//*************************************************************************
|
||||
@ -41,10 +46,10 @@ DEFINE_DEVICE_TYPE(PAULA_8364, paula_8364_device, "paula_8364", "MOS 8364 \"Paul
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// paula_8364_device - constructor
|
||||
// paula_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
paula_8364_device::paula_8364_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
paula_device::paula_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, PAULA_8364, tag, owner, clock)
|
||||
, device_sound_interface(mconfig, *this)
|
||||
, m_chipmem_r(*this, 0)
|
||||
@ -57,20 +62,20 @@ paula_8364_device::paula_8364_device(const machine_config &mconfig, const char *
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void paula_8364_device::device_start()
|
||||
void paula_device::device_start()
|
||||
{
|
||||
// initialize channels
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
m_channel[i].index = i;
|
||||
m_channel[i].irq_timer = timer_alloc(FUNC(paula_8364_device::signal_irq), this);
|
||||
m_channel[i].irq_timer = timer_alloc(FUNC(paula_device::signal_irq), this);
|
||||
}
|
||||
|
||||
// create the stream
|
||||
m_stream = stream_alloc(0, 4, clock() / CLOCK_DIVIDER);
|
||||
}
|
||||
|
||||
void paula_8364_device::device_reset()
|
||||
void paula_device::device_reset()
|
||||
{
|
||||
m_dma_master_enable = false;
|
||||
for (auto &chan : m_channel)
|
||||
@ -93,7 +98,7 @@ void paula_8364_device::device_reset()
|
||||
// update - stream updater
|
||||
//-------------------------------------------------
|
||||
|
||||
void paula_8364_device::update()
|
||||
void paula_device::update()
|
||||
{
|
||||
m_stream->update();
|
||||
}
|
||||
@ -103,62 +108,62 @@ void paula_8364_device::update()
|
||||
// IMPLEMENTATION
|
||||
//**************************************************************************
|
||||
|
||||
template <u8 ch> void paula_8364_device::audio_channel_map(address_map &map)
|
||||
template <u8 ch> void paula_device::audio_channel_map(address_map &map)
|
||||
{
|
||||
// TODO: location addresses belongs to Agnus
|
||||
map(0x00, 0x01).w(FUNC(paula_8364_device::audxlch_w<ch>));
|
||||
map(0x02, 0x03).w(FUNC(paula_8364_device::audxlcl_w<ch>));
|
||||
map(0x04, 0x05).w(FUNC(paula_8364_device::audxlen_w<ch>));
|
||||
map(0x06, 0x07).w(FUNC(paula_8364_device::audxper_w<ch>));
|
||||
map(0x08, 0x09).w(FUNC(paula_8364_device::audxvol_w<ch>));
|
||||
map(0x0a, 0x0b).w(FUNC(paula_8364_device::audxdat_w<ch>));
|
||||
map(0x00, 0x01).w(FUNC(paula_device::audxlch_w<ch>));
|
||||
map(0x02, 0x03).w(FUNC(paula_device::audxlcl_w<ch>));
|
||||
map(0x04, 0x05).w(FUNC(paula_device::audxlen_w<ch>));
|
||||
map(0x06, 0x07).w(FUNC(paula_device::audxper_w<ch>));
|
||||
map(0x08, 0x09).w(FUNC(paula_device::audxvol_w<ch>));
|
||||
map(0x0a, 0x0b).w(FUNC(paula_device::audxdat_w<ch>));
|
||||
}
|
||||
|
||||
// Instantiate channel maps
|
||||
template void paula_8364_device::audio_channel_map<0>(address_map &map);
|
||||
template void paula_8364_device::audio_channel_map<1>(address_map &map);
|
||||
template void paula_8364_device::audio_channel_map<2>(address_map &map);
|
||||
template void paula_8364_device::audio_channel_map<3>(address_map &map);
|
||||
template void paula_device::audio_channel_map<0>(address_map &map);
|
||||
template void paula_device::audio_channel_map<1>(address_map &map);
|
||||
template void paula_device::audio_channel_map<2>(address_map &map);
|
||||
template void paula_device::audio_channel_map<3>(address_map &map);
|
||||
|
||||
template <u8 ch> void paula_8364_device::audxlch_w(u16 data)
|
||||
template <u8 ch> void paula_device::audxlch_w(u16 data)
|
||||
{
|
||||
m_stream->update();
|
||||
// TODO: chipmem mask
|
||||
m_channel[ch].loc = (m_channel[ch].loc & 0x0000ffff) | ((data & 0x001f) << 16);
|
||||
}
|
||||
|
||||
template <u8 ch> void paula_8364_device::audxlcl_w(u16 data)
|
||||
template <u8 ch> void paula_device::audxlcl_w(u16 data)
|
||||
{
|
||||
m_stream->update();
|
||||
m_channel[ch].loc = (m_channel[ch].loc & 0xffff0000) | ((data & 0xfffe) << 0);
|
||||
}
|
||||
|
||||
template <u8 ch> void paula_8364_device::audxlen_w(u16 data)
|
||||
template <u8 ch> void paula_device::audxlen_w(u16 data)
|
||||
{
|
||||
m_stream->update();
|
||||
m_channel[ch].len = data;
|
||||
}
|
||||
|
||||
template <u8 ch> void paula_8364_device::audxper_w(u16 data)
|
||||
template <u8 ch> void paula_device::audxper_w(u16 data)
|
||||
{
|
||||
m_stream->update();
|
||||
m_channel[ch].per = data;
|
||||
}
|
||||
|
||||
template <u8 ch> void paula_8364_device::audxvol_w(u16 data)
|
||||
template <u8 ch> void paula_device::audxvol_w(u16 data)
|
||||
{
|
||||
m_stream->update();
|
||||
m_channel[ch].vol = data & 0x7f;
|
||||
}
|
||||
|
||||
template <u8 ch> void paula_8364_device::audxdat_w(u16 data)
|
||||
template <u8 ch> void paula_device::audxdat_w(u16 data)
|
||||
{
|
||||
m_stream->update();
|
||||
m_channel[ch].dat = data;
|
||||
m_channel[ch].manualmode = true;
|
||||
}
|
||||
|
||||
void paula_8364_device::dmacon_set(u16 data)
|
||||
void paula_device::dmacon_set(u16 data)
|
||||
{
|
||||
m_stream->update();
|
||||
|
||||
@ -178,7 +183,7 @@ void paula_8364_device::dmacon_set(u16 data)
|
||||
}
|
||||
}
|
||||
|
||||
void paula_8364_device::adkcon_set(u16 data)
|
||||
void paula_device::adkcon_set(u16 data)
|
||||
{
|
||||
m_stream->update();
|
||||
|
||||
@ -195,7 +200,7 @@ void paula_8364_device::adkcon_set(u16 data)
|
||||
// signal_irq - irq signaling
|
||||
//-------------------------------------------------
|
||||
|
||||
TIMER_CALLBACK_MEMBER( paula_8364_device::signal_irq )
|
||||
TIMER_CALLBACK_MEMBER( paula_device::signal_irq )
|
||||
{
|
||||
m_int_w(param, 1);
|
||||
}
|
||||
@ -204,7 +209,7 @@ TIMER_CALLBACK_MEMBER( paula_8364_device::signal_irq )
|
||||
// dma_reload
|
||||
//-------------------------------------------------
|
||||
|
||||
void paula_8364_device::dma_reload(audio_channel *chan, bool startup)
|
||||
void paula_device::dma_reload(audio_channel *chan, bool startup)
|
||||
{
|
||||
chan->curlocation = chan->loc;
|
||||
// TODO: Unconfirmed, assume max size if length is 0.
|
||||
@ -219,7 +224,7 @@ void paula_8364_device::dma_reload(audio_channel *chan, bool startup)
|
||||
LOG("dma_reload(%d): offs=%06X len=%04X\n", chan->index, chan->curlocation, chan->curlength);
|
||||
}
|
||||
|
||||
std::string paula_8364_device::print_audio_state()
|
||||
std::string paula_device::print_audio_state()
|
||||
{
|
||||
std::ostringstream outbuffer;
|
||||
|
||||
@ -249,7 +254,7 @@ std::string paula_8364_device::print_audio_state()
|
||||
// sound_stream_update - handle a stream update
|
||||
//-------------------------------------------------
|
||||
|
||||
void paula_8364_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
void paula_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
int channum, sampoffs = 0;
|
||||
|
@ -2,12 +2,7 @@
|
||||
// copyright-holders: Aaron Giles, Dirk Best
|
||||
/***************************************************************************
|
||||
|
||||
Commodore 8364 "Paula"
|
||||
|
||||
Multi-purpose chip that is part of the Amiga chipset. The name "Paula"
|
||||
is derived from "Ports, Audio, UART and Logic". It features 4-channel
|
||||
DMA driven audio, the floppy controller, a serial receiver/transmitter,
|
||||
analog inputs and contains the interrupt controller.
|
||||
MOS Technology/Commodore 8364 "Paula"
|
||||
|
||||
____ ____
|
||||
D8 1 |* u | 48 D9
|
||||
@ -37,8 +32,8 @@
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef MAME_AMIGA_8364_PAULA_H
|
||||
#define MAME_AMIGA_8364_PAULA_H
|
||||
#ifndef MAME_AMIGA_PAULA_H
|
||||
#define MAME_AMIGA_PAULA_H
|
||||
|
||||
#pragma once
|
||||
|
||||
@ -47,12 +42,12 @@
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> paula_8364_device
|
||||
// ======================> paula_device
|
||||
|
||||
class paula_8364_device : public device_t, public device_sound_interface
|
||||
class paula_device : public device_t, public device_sound_interface
|
||||
{
|
||||
public:
|
||||
paula_8364_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
paula_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// configuration
|
||||
auto mem_read_cb() { return m_chipmem_r.bind(); }
|
||||
@ -120,6 +115,6 @@ private:
|
||||
};
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(PAULA_8364, paula_8364_device)
|
||||
DECLARE_DEVICE_TYPE(PAULA_8364, paula_device)
|
||||
|
||||
#endif // MAME_DEVICES_MACHINE_8364_PAULA_H
|
||||
#endif // MAME_AMIGA_PAULA_H
|
@ -27,9 +27,10 @@
|
||||
|
||||
|
||||
#include "emu.h"
|
||||
#include "paulafdc.h"
|
||||
|
||||
#include "formats/ami_dsk.h"
|
||||
#include "formats/ipf_dsk.h"
|
||||
#include "amigafdc.h"
|
||||
|
||||
#define LOG_WARN (1U << 1) // Show warnings
|
||||
#define LOG_DMA (1U << 2) // Show DMA setups
|
||||
@ -43,17 +44,17 @@
|
||||
#define LOGDMA(...) LOGMASKED(LOG_DMA, __VA_ARGS__)
|
||||
#define LOGSYNC(...) LOGMASKED(LOG_SYNC, __VA_ARGS__)
|
||||
|
||||
DEFINE_DEVICE_TYPE(AMIGA_FDC, amiga_fdc_device, "amiga_fdc", "Amiga \"Trackdisk\" FDC")
|
||||
DEFINE_DEVICE_TYPE(PAULA_FDC, paula_fdc_device, "paula_fdc", "Amiga Paula \"Trackdisk\" FDC")
|
||||
|
||||
void amiga_fdc_device::floppy_formats(format_registration &fr)
|
||||
void paula_fdc_device::floppy_formats(format_registration &fr)
|
||||
{
|
||||
fr.add_mfm_containers();
|
||||
fr.add(FLOPPY_ADF_FORMAT);
|
||||
fr.add(FLOPPY_IPF_FORMAT);
|
||||
}
|
||||
|
||||
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)
|
||||
paula_fdc_device::paula_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, PAULA_FDC, tag, owner, clock)
|
||||
, m_write_index(*this)
|
||||
, m_read_dma(*this, 0)
|
||||
, m_write_dma(*this)
|
||||
@ -65,7 +66,7 @@ amiga_fdc_device::amiga_fdc_device(const machine_config &mconfig, const char *ta
|
||||
{
|
||||
}
|
||||
|
||||
void amiga_fdc_device::device_start()
|
||||
void paula_fdc_device::device_start()
|
||||
{
|
||||
m_leds.resolve();
|
||||
m_fdc_led.resolve();
|
||||
@ -81,10 +82,10 @@ void amiga_fdc_device::device_start()
|
||||
|
||||
floppy = nullptr;
|
||||
|
||||
t_gen = timer_alloc(FUNC(amiga_fdc_device::update_tick), this);
|
||||
t_gen = timer_alloc(FUNC(paula_fdc_device::update_tick), this);
|
||||
}
|
||||
|
||||
void amiga_fdc_device::device_reset()
|
||||
void paula_fdc_device::device_reset()
|
||||
{
|
||||
floppy = nullptr;
|
||||
dsklen = 0x4000;
|
||||
@ -100,7 +101,7 @@ void amiga_fdc_device::device_reset()
|
||||
live_abort();
|
||||
}
|
||||
|
||||
void amiga_fdc_device::dma_done()
|
||||
void paula_fdc_device::dma_done()
|
||||
{
|
||||
if(dskbyt & 0x2000) {
|
||||
dskbyt &= ~0x2000;
|
||||
@ -111,7 +112,7 @@ void amiga_fdc_device::dma_done()
|
||||
m_write_dskblk(1);
|
||||
}
|
||||
|
||||
void amiga_fdc_device::dma_write(uint16_t value)
|
||||
void paula_fdc_device::dma_write(uint16_t value)
|
||||
{
|
||||
m_write_dma(dskpt, value, 0xffff);
|
||||
|
||||
@ -124,7 +125,7 @@ void amiga_fdc_device::dma_write(uint16_t value)
|
||||
dma_done();
|
||||
}
|
||||
|
||||
uint16_t amiga_fdc_device::dma_read()
|
||||
uint16_t paula_fdc_device::dma_read()
|
||||
{
|
||||
uint16_t res = m_read_dma(dskpt, 0xffff);
|
||||
|
||||
@ -140,7 +141,7 @@ uint16_t amiga_fdc_device::dma_read()
|
||||
return res;
|
||||
}
|
||||
|
||||
void amiga_fdc_device::live_start()
|
||||
void paula_fdc_device::live_start()
|
||||
{
|
||||
cur_live.tm = machine().time();
|
||||
cur_live.state = RUNNING;
|
||||
@ -154,25 +155,25 @@ void amiga_fdc_device::live_start()
|
||||
live_run();
|
||||
}
|
||||
|
||||
void amiga_fdc_device::checkpoint()
|
||||
void paula_fdc_device::checkpoint()
|
||||
{
|
||||
cur_live.pll.commit(floppy, cur_live.tm);
|
||||
checkpoint_live = cur_live;
|
||||
}
|
||||
|
||||
void amiga_fdc_device::rollback()
|
||||
void paula_fdc_device::rollback()
|
||||
{
|
||||
cur_live = checkpoint_live;
|
||||
}
|
||||
|
||||
void amiga_fdc_device::live_delay(int state)
|
||||
void paula_fdc_device::live_delay(int state)
|
||||
{
|
||||
cur_live.next_state = state;
|
||||
if(cur_live.tm != machine().time())
|
||||
t_gen->adjust(cur_live.tm - machine().time());
|
||||
}
|
||||
|
||||
void amiga_fdc_device::live_sync()
|
||||
void paula_fdc_device::live_sync()
|
||||
{
|
||||
if(!cur_live.tm.is_never()) {
|
||||
if(cur_live.tm > machine().time()) {
|
||||
@ -197,7 +198,7 @@ void amiga_fdc_device::live_sync()
|
||||
}
|
||||
}
|
||||
|
||||
void amiga_fdc_device::live_abort()
|
||||
void paula_fdc_device::live_abort()
|
||||
{
|
||||
if(!cur_live.tm.is_never() && cur_live.tm > machine().time()) {
|
||||
rollback();
|
||||
@ -210,7 +211,7 @@ void amiga_fdc_device::live_abort()
|
||||
cur_live.next_state = -1;
|
||||
}
|
||||
|
||||
void amiga_fdc_device::live_run(const attotime &limit)
|
||||
void paula_fdc_device::live_run(const attotime &limit)
|
||||
{
|
||||
if(cur_live.state == IDLE || cur_live.next_state != -1)
|
||||
return;
|
||||
@ -318,7 +319,7 @@ void amiga_fdc_device::live_run(const attotime &limit)
|
||||
}
|
||||
} else {
|
||||
if(cur_live.bit_counter != 8)
|
||||
fatalerror("amiga_fdc_device::live_run - cur_live.bit_counter != 8\n");
|
||||
fatalerror("paula_fdc_device::live_run - cur_live.bit_counter != 8\n");
|
||||
cur_live.bit_counter = 0;
|
||||
|
||||
switch(dma_state) {
|
||||
@ -345,12 +346,12 @@ void amiga_fdc_device::live_run(const attotime &limit)
|
||||
}
|
||||
}
|
||||
|
||||
bool amiga_fdc_device::dma_enabled()
|
||||
bool paula_fdc_device::dma_enabled()
|
||||
{
|
||||
return (dsklen & 0x8000) && ((dmacon & 0x0210) == 0x0210);
|
||||
}
|
||||
|
||||
void amiga_fdc_device::dma_check()
|
||||
void paula_fdc_device::dma_check()
|
||||
{
|
||||
bool was_writing = dskbyt & 0x2000;
|
||||
dskbyt &= 0x9fff;
|
||||
@ -384,19 +385,19 @@ void amiga_fdc_device::dma_check()
|
||||
cur_live.pll.start_writing(cur_live.tm);
|
||||
}
|
||||
|
||||
void amiga_fdc_device::adkcon_set(uint16_t data)
|
||||
void paula_fdc_device::adkcon_set(uint16_t data)
|
||||
{
|
||||
live_sync();
|
||||
adkcon = data;
|
||||
live_run();
|
||||
}
|
||||
|
||||
uint16_t amiga_fdc_device::adkcon_r(void)
|
||||
uint16_t paula_fdc_device::adkcon_r(void)
|
||||
{
|
||||
return adkcon;
|
||||
}
|
||||
|
||||
void amiga_fdc_device::dsklen_w(uint16_t data)
|
||||
void paula_fdc_device::dsklen_w(uint16_t data)
|
||||
{
|
||||
live_sync();
|
||||
if(!(data & 0x8000) || (data == pre_dsklen)) {
|
||||
@ -408,31 +409,31 @@ void amiga_fdc_device::dsklen_w(uint16_t data)
|
||||
live_run();
|
||||
}
|
||||
|
||||
void amiga_fdc_device::dskpth_w(uint16_t data)
|
||||
void paula_fdc_device::dskpth_w(uint16_t data)
|
||||
{
|
||||
live_sync();
|
||||
dskpt = (dskpt & 0xffff) | (data << 16);
|
||||
live_run();
|
||||
}
|
||||
|
||||
void amiga_fdc_device::dskptl_w(uint16_t data)
|
||||
void paula_fdc_device::dskptl_w(uint16_t data)
|
||||
{
|
||||
live_sync();
|
||||
dskpt = (dskpt & 0xffff0000) | data;
|
||||
live_run();
|
||||
}
|
||||
|
||||
uint16_t amiga_fdc_device::dskpth_r()
|
||||
uint16_t paula_fdc_device::dskpth_r()
|
||||
{
|
||||
return dskpt >> 16;
|
||||
}
|
||||
|
||||
uint16_t amiga_fdc_device::dskptl_r()
|
||||
uint16_t paula_fdc_device::dskptl_r()
|
||||
{
|
||||
return dskpt;
|
||||
}
|
||||
|
||||
void amiga_fdc_device::dsksync_w(uint16_t data)
|
||||
void paula_fdc_device::dsksync_w(uint16_t data)
|
||||
{
|
||||
live_sync();
|
||||
LOGSYNC("%s: DSKSYNC %04x\n", machine().describe_context(), data);
|
||||
@ -440,7 +441,7 @@ void amiga_fdc_device::dsksync_w(uint16_t data)
|
||||
live_run();
|
||||
}
|
||||
|
||||
void amiga_fdc_device::dmacon_set(uint16_t data)
|
||||
void paula_fdc_device::dmacon_set(uint16_t data)
|
||||
{
|
||||
live_sync();
|
||||
// log changes only
|
||||
@ -452,7 +453,7 @@ void amiga_fdc_device::dmacon_set(uint16_t data)
|
||||
live_run();
|
||||
}
|
||||
|
||||
uint16_t amiga_fdc_device::dskbytr_r()
|
||||
uint16_t paula_fdc_device::dskbytr_r()
|
||||
{
|
||||
uint16_t res = (dskbyt & ~0x4000);
|
||||
// check if DMA is on
|
||||
@ -466,13 +467,13 @@ uint16_t amiga_fdc_device::dskbytr_r()
|
||||
return res;
|
||||
}
|
||||
|
||||
TIMER_CALLBACK_MEMBER(amiga_fdc_device::update_tick)
|
||||
TIMER_CALLBACK_MEMBER(paula_fdc_device::update_tick)
|
||||
{
|
||||
live_sync();
|
||||
live_run();
|
||||
}
|
||||
|
||||
void amiga_fdc_device::setup_leds()
|
||||
void paula_fdc_device::setup_leds()
|
||||
{
|
||||
if(floppy) {
|
||||
int drive =
|
||||
@ -486,7 +487,7 @@ void amiga_fdc_device::setup_leds()
|
||||
}
|
||||
}
|
||||
|
||||
void amiga_fdc_device::ciaaprb_w(uint8_t data)
|
||||
void paula_fdc_device::ciaaprb_w(uint8_t data)
|
||||
{
|
||||
floppy_image_device *old_floppy = floppy;
|
||||
|
||||
@ -508,7 +509,7 @@ void amiga_fdc_device::ciaaprb_w(uint8_t data)
|
||||
if(old_floppy)
|
||||
old_floppy->setup_index_pulse_cb(floppy_image_device::index_pulse_cb());
|
||||
if(floppy)
|
||||
floppy->setup_index_pulse_cb(floppy_image_device::index_pulse_cb(&amiga_fdc_device::index_callback, this));
|
||||
floppy->setup_index_pulse_cb(floppy_image_device::index_pulse_cb(&paula_fdc_device::index_callback, this));
|
||||
}
|
||||
|
||||
// btanb: trackdisk has no HW interlock for motor running with disk not inserted.
|
||||
@ -530,7 +531,7 @@ void amiga_fdc_device::ciaaprb_w(uint8_t data)
|
||||
live_run();
|
||||
}
|
||||
|
||||
uint8_t amiga_fdc_device::ciaapra_r()
|
||||
uint8_t paula_fdc_device::ciaapra_r()
|
||||
{
|
||||
uint8_t ret = 0x3c;
|
||||
if(floppy) {
|
||||
@ -548,19 +549,19 @@ uint8_t amiga_fdc_device::ciaapra_r()
|
||||
return ret;
|
||||
}
|
||||
|
||||
void amiga_fdc_device::index_callback(floppy_image_device *floppy, int state)
|
||||
void paula_fdc_device::index_callback(floppy_image_device *floppy, int state)
|
||||
{
|
||||
/* Issue a index pulse when a disk revolution completes */
|
||||
m_write_index(!state);
|
||||
}
|
||||
|
||||
void amiga_fdc_device::pll_t::set_clock(const attotime &period)
|
||||
void paula_fdc_device::pll_t::set_clock(const attotime &period)
|
||||
{
|
||||
for(int i=0; i<38; i++)
|
||||
delays[i] = period*(i+1);
|
||||
}
|
||||
|
||||
void amiga_fdc_device::pll_t::reset(const attotime &when)
|
||||
void paula_fdc_device::pll_t::reset(const attotime &when)
|
||||
{
|
||||
counter = 0;
|
||||
increment = 146;
|
||||
@ -574,7 +575,7 @@ void amiga_fdc_device::pll_t::reset(const attotime &when)
|
||||
freq_sub = 0x00;
|
||||
}
|
||||
|
||||
int amiga_fdc_device::pll_t::get_next_bit(attotime &tm, floppy_image_device *floppy, const attotime &limit)
|
||||
int paula_fdc_device::pll_t::get_next_bit(attotime &tm, floppy_image_device *floppy, const attotime &limit)
|
||||
{
|
||||
attotime when = floppy ? floppy->get_next_transition(ctime) : attotime::never;
|
||||
|
||||
@ -648,19 +649,19 @@ int amiga_fdc_device::pll_t::get_next_bit(attotime &tm, floppy_image_device *flo
|
||||
return bit;
|
||||
}
|
||||
|
||||
void amiga_fdc_device::pll_t::start_writing(const attotime & tm)
|
||||
void paula_fdc_device::pll_t::start_writing(const attotime & tm)
|
||||
{
|
||||
write_start_time = tm;
|
||||
write_position = 0;
|
||||
}
|
||||
|
||||
void amiga_fdc_device::pll_t::stop_writing(floppy_image_device *floppy, const attotime &tm)
|
||||
void paula_fdc_device::pll_t::stop_writing(floppy_image_device *floppy, const attotime &tm)
|
||||
{
|
||||
commit(floppy, tm);
|
||||
write_start_time = attotime::never;
|
||||
}
|
||||
|
||||
bool amiga_fdc_device::pll_t::write_next_bit(bool bit, attotime &tm, floppy_image_device *floppy, const attotime &limit)
|
||||
bool paula_fdc_device::pll_t::write_next_bit(bool bit, attotime &tm, floppy_image_device *floppy, const attotime &limit)
|
||||
{
|
||||
if(write_start_time.is_never()) {
|
||||
write_start_time = ctime;
|
||||
@ -691,7 +692,7 @@ bool amiga_fdc_device::pll_t::write_next_bit(bool bit, attotime &tm, floppy_imag
|
||||
}
|
||||
|
||||
|
||||
void amiga_fdc_device::pll_t::commit(floppy_image_device *floppy, const attotime &tm)
|
||||
void paula_fdc_device::pll_t::commit(floppy_image_device *floppy, const attotime &tm)
|
||||
{
|
||||
if(write_start_time.is_never() || tm == write_start_time)
|
||||
return;
|
@ -1,15 +1,15 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Olivier Galibert
|
||||
#ifndef MAME_AMIGA_AMIGAFDC_H
|
||||
#define MAME_AMIGA_AMIGAFDC_H
|
||||
#ifndef MAME_AMIGA_PAULAFDC_H
|
||||
#define MAME_AMIGA_PAULAFDC_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "imagedev/floppy.h"
|
||||
|
||||
class amiga_fdc_device : public device_t {
|
||||
class paula_fdc_device : public device_t {
|
||||
public:
|
||||
amiga_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
paula_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
auto index_callback() { return m_write_index.bind(); }
|
||||
auto read_dma_callback() { return m_read_dma.bind(); }
|
||||
@ -125,6 +125,6 @@ private:
|
||||
void live_run(const attotime &limit = attotime::never);
|
||||
};
|
||||
|
||||
DECLARE_DEVICE_TYPE(AMIGA_FDC, amiga_fdc_device)
|
||||
DECLARE_DEVICE_TYPE(PAULA_FDC, paula_fdc_device)
|
||||
|
||||
#endif // MAME_AMIGA_AMIGAFDC_H
|
||||
#endif // MAME_AMIGA_PAULAFDC_H
|
@ -273,7 +273,7 @@ void upscope_state::upscope(machine_config &config)
|
||||
ADDRESS_MAP_BANK(config, m_overlay).set_map(&upscope_state::overlay_512kb_map).set_options(ENDIANNESS_BIG, 16, 22, 0x200000);
|
||||
ADDRESS_MAP_BANK(config, m_chipset).set_map(&upscope_state::ocs_map).set_options(ENDIANNESS_BIG, 16, 9, 0x200);
|
||||
|
||||
AMIGA_COPPER(config, m_copper, amiga_state::CLK_7M_NTSC);
|
||||
AGNUS_COPPER(config, m_copper, amiga_state::CLK_7M_NTSC);
|
||||
m_copper->set_host_cpu_tag(m_maincpu);
|
||||
m_copper->mem_read_cb().set(FUNC(amiga_state::chip_ram_r));
|
||||
m_copper->set_ecs_mode(false);
|
||||
@ -312,7 +312,7 @@ void upscope_state::upscope(machine_config &config)
|
||||
m_cia_1->pa_wr_callback().set(FUNC(upscope_state::upscope_cia_1_porta_w));
|
||||
|
||||
/* fdc */
|
||||
AMIGA_FDC(config, m_fdc, amiga_state::CLK_7M_NTSC);
|
||||
PAULA_FDC(config, m_fdc, amiga_state::CLK_7M_NTSC);
|
||||
m_fdc->index_callback().set("cia_1", FUNC(mos8520_device::flag_w));
|
||||
m_fdc->read_dma_callback().set(FUNC(amiga_state::chip_ram_r));
|
||||
m_fdc->write_dma_callback().set(FUNC(amiga_state::chip_ram_w));
|
||||
|
Loading…
Reference in New Issue
Block a user