amiga: refactor device names so that they references chipset names instead

This commit is contained in:
angelosa 2025-01-01 13:30:36 +01:00
parent 7ced6a09d0
commit 748622d4f2
14 changed files with 170 additions and 173 deletions

View File

@ -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;

View File

@ -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

View File

@ -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));

View File

@ -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);

View File

@ -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;

View File

@ -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));

View File

@ -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));

View File

@ -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));

View File

@ -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));

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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));