summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/amiga/amiga.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/amiga/amiga.cpp')
-rw-r--r--src/mame/amiga/amiga.cpp227
1 files changed, 148 insertions, 79 deletions
diff --git a/src/mame/amiga/amiga.cpp b/src/mame/amiga/amiga.cpp
index 47c885fe523..30d6dcb9610 100644
--- a/src/mame/amiga/amiga.cpp
+++ b/src/mame/amiga/amiga.cpp
@@ -20,11 +20,12 @@
#include "bus/ata/ataintf.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m6502/m6502.h"
-#include "machine/bankdev.h"
#include "machine/6525tpi.h"
#include "machine/mos6526.h"
#include "machine/gayle.h"
#include "machine/dmac.h"
+#include "machine/pccard.h"
+#include "machine/pccard_sram.h"
#include "machine/nvram.h"
#include "machine/i2cmem.h"
#include "machine/amigafdc.h"
@@ -114,7 +115,7 @@ public:
return *this;
}
- DECLARE_WRITE_LINE_MEMBER(kbclk_w)
+ void kbclk_w(int state)
{
if (bool(state) != bool(m_kbclk))
{
@@ -142,11 +143,6 @@ public:
}
protected:
- virtual void device_resolve_objects() override
- {
- m_kbrst_cb.resolve_safe();
- }
-
virtual void device_start() override
{
// allocate resources
@@ -249,6 +245,7 @@ public:
void a1000_bootrom_map(address_map &map);
void a1000_mem(address_map &map);
void a1000_overlay_map(address_map &map);
+
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
@@ -273,8 +270,8 @@ public:
void init_pal();
void init_ntsc();
- DECLARE_WRITE_LINE_MEMBER( zorro2_int2_w );
- DECLARE_WRITE_LINE_MEMBER( zorro2_int6_w );
+ void zorro2_int2_w(int state);
+ void zorro2_int6_w(int state);
u16 clock_r(offs_t offset);
void clock_w(offs_t offset, u16 data);
@@ -282,6 +279,7 @@ public:
void a2000(machine_config &config);
void a2000n(machine_config &config);
void a2000_mem(address_map &map);
+
protected:
virtual void machine_reset() override;
@@ -312,12 +310,13 @@ public:
void init_pal();
void init_ntsc();
- DECLARE_WRITE_LINE_MEMBER( side_int2_w );
- DECLARE_WRITE_LINE_MEMBER( side_int6_w );
+ void side_int2_w(int state);
+ void side_int6_w(int state);
void a500n(machine_config &config);
void a500(machine_config &config);
void a500_mem(address_map &map);
+
protected:
virtual void machine_reset() override;
@@ -355,15 +354,16 @@ public:
uint8_t dmac_scsi_data_read(offs_t offset);
void dmac_scsi_data_write(offs_t offset, uint8_t data);
- DECLARE_WRITE_LINE_MEMBER( dmac_int_w );
+ void dmac_int_w(int state);
void tpi_port_b_write(uint8_t data);
- DECLARE_WRITE_LINE_MEMBER( tpi_int_w );
+ void tpi_int_w(int state);
void cdtv(machine_config &config);
void cdtvn(machine_config &config);
void cdtv_mem(address_map &map);
void cdtv_rc_mem(address_map &map);
+
protected:
// driver_device overrides
virtual void machine_start() override;
@@ -402,6 +402,7 @@ public:
void a3000(machine_config &config);
void a3000n(machine_config &config);
void a3000_mem(address_map &map);
+
protected:
private:
@@ -427,6 +428,7 @@ public:
void a500pn(machine_config &config);
void a500p(machine_config &config);
void a500p_mem(address_map &map);
+
protected:
virtual void machine_reset() override;
@@ -449,10 +451,13 @@ class a600_state : public amiga_state
public:
a600_state(const machine_config &mconfig, device_type type, const char *tag)
: amiga_state(mconfig, type, tag)
+ , m_gayle(*this, "gayle")
+ , m_pcmcia(*this, "pcmcia")
, m_gayle_int2(0)
{ }
- DECLARE_WRITE_LINE_MEMBER( gayle_int2_w );
+ void gayle_int2_w(int state);
+ void gayle_int6_w(int state);
void init_pal();
void init_ntsc();
@@ -462,11 +467,18 @@ public:
void a600n(machine_config &config);
void a600(machine_config &config);
void a600_mem(address_map &map);
+
protected:
+ // amiga_state overrides
virtual bool int2_pending() override;
+ virtual bool int6_pending() override;
private:
+ required_device<gayle_device> m_gayle;
+ required_device<pccard_slot_device> m_pcmcia;
+
int m_gayle_int2;
+ int m_gayle_int6;
};
class a1200_state : public amiga_state
@@ -474,10 +486,13 @@ class a1200_state : public amiga_state
public:
a1200_state(const machine_config &mconfig, device_type type, const char *tag)
: amiga_state(mconfig, type, tag)
+ , m_gayle(*this, "gayle")
+ , m_pcmcia(*this, "pcmcia")
, m_gayle_int2(0)
{ }
- DECLARE_WRITE_LINE_MEMBER( gayle_int2_w );
+ void gayle_int2_w(int state);
+ void gayle_int6_w(int state);
void init_pal();
void init_ntsc();
@@ -487,11 +502,18 @@ public:
void a1200(machine_config &config);
void a1200n(machine_config &config);
void a1200_mem(address_map &map);
+
protected:
+ // amiga_state overrides
virtual bool int2_pending() override;
+ virtual bool int6_pending() override;
private:
+ required_device<gayle_device> m_gayle;
+ required_device<pccard_slot_device> m_pcmcia;
+
int m_gayle_int2;
+ int m_gayle_int6;
};
class a4000_state : public amiga_state
@@ -511,7 +533,7 @@ public:
void scsi_w(offs_t offset, u32 data, u32 mem_mask = ~0);
u16 ide_r(offs_t offset, u16 mem_mask = ~0);
void ide_w(offs_t offset, u16 data, u16 mem_mask);
- DECLARE_WRITE_LINE_MEMBER( ide_interrupt_w );
+ void ide_interrupt_w(int state);
u32 motherboard_r(offs_t offset, u32 mem_mask = ~0);
void motherboard_w(offs_t offset, u32 data, u32 mem_mask = ~0);
@@ -527,6 +549,7 @@ public:
void a400030_mem(address_map &map);
void a4000_mem(address_map &map);
void a4000t_mem(address_map &map);
+
protected:
private:
@@ -545,17 +568,17 @@ public:
cd32_state(const machine_config &mconfig, device_type type, const char *tag)
: amiga_state(mconfig, type, tag)
, m_player_ports(*this, {"p1_cd32_buttons", "p2_cd32_buttons"})
- , m_cdda(*this, "cdda")
+ , m_cdda(*this, "akiko:cdda")
{ }
- DECLARE_WRITE_LINE_MEMBER( akiko_int_w );
+ void akiko_int_w(int state);
void akiko_cia_0_port_a_write(uint8_t data);
void handle_joystick_cia(u8 pra, u8 dra);
u16 handle_joystick_potgor(u16 potgor);
DECLARE_CUSTOM_INPUT_MEMBER( cd32_input );
- template <int P> DECLARE_READ_LINE_MEMBER( cd32_sel_mirror_input );
+ template <int P> int cd32_sel_mirror_input();
void init_pal();
void init_ntsc();
@@ -569,6 +592,7 @@ public:
void cd32n(machine_config &config);
void cd32(machine_config &config);
void cd32_mem(address_map &map);
+
protected:
// amiga_state overrides
virtual void potgo_w(u16 data) override;
@@ -631,7 +655,7 @@ void cdtv_state::dmac_scsi_data_write(offs_t offset, uint8_t data)
m_tpi->write(offset, data);
}
-WRITE_LINE_MEMBER( cdtv_state::dmac_int_w )
+void cdtv_state::dmac_int_w(int state)
{
m_dmac_irq = state;
update_int2();
@@ -643,7 +667,7 @@ void cdtv_state::tpi_port_b_write(uint8_t data)
m_cdrom->enable_w(BIT(data, 1));
}
-WRITE_LINE_MEMBER( cdtv_state::tpi_int_w )
+void cdtv_state::tpi_int_w(int state)
{
m_tpi_irq = state;
update_int2();
@@ -818,13 +842,13 @@ void a2000_state::machine_reset()
m_zorro->reset();
}
-WRITE_LINE_MEMBER( a2000_state::zorro2_int2_w )
+void a2000_state::zorro2_int2_w(int state)
{
m_zorro2_int2 = state;
update_int2();
}
-WRITE_LINE_MEMBER( a2000_state::zorro2_int6_w )
+void a2000_state::zorro2_int6_w(int state)
{
m_zorro2_int6 = state;
update_int6();
@@ -849,13 +873,13 @@ void a500_state::machine_reset()
m_side->reset();
}
-WRITE_LINE_MEMBER( a500_state::side_int2_w )
+void a500_state::side_int2_w(int state)
{
m_side_int2 = state;
update_int2();
}
-WRITE_LINE_MEMBER( a500_state::side_int6_w )
+void a500_state::side_int6_w(int state)
{
m_side_int6 = state;
update_int6();
@@ -939,23 +963,45 @@ bool a600_state::int2_pending()
return m_cia_0_irq || m_gayle_int2;
}
-WRITE_LINE_MEMBER( a600_state::gayle_int2_w )
+bool a600_state::int6_pending()
+{
+ return m_cia_1_irq || m_gayle_int6;
+}
+
+void a600_state::gayle_int2_w(int state)
{
m_gayle_int2 = state;
update_int2();
}
+void a600_state::gayle_int6_w(int state)
+{
+ m_gayle_int6 = state;
+ update_int6();
+}
+
bool a1200_state::int2_pending()
{
return m_cia_0_irq || m_gayle_int2;
}
-WRITE_LINE_MEMBER( a1200_state::gayle_int2_w )
+bool a1200_state::int6_pending()
+{
+ return m_cia_1_irq || m_gayle_int6;
+}
+
+void a1200_state::gayle_int2_w(int state)
{
m_gayle_int2 = state;
update_int2();
}
+void a1200_state::gayle_int6_w(int state)
+{
+ m_gayle_int6 = state;
+ update_int6();
+}
+
u32 a4000_state::scsi_r(offs_t offset, u32 mem_mask)
{
u16 data = 0xffff;
@@ -970,25 +1016,15 @@ void a4000_state::scsi_w(offs_t offset, u32 data, u32 mem_mask)
u16 a4000_state::ide_r(offs_t offset, u16 mem_mask)
{
- u16 data = 0xffff;
-
// ide interrupt register
if (offset == 0x1010)
return m_ide_interrupt << 15;
- // swap
- mem_mask = (mem_mask << 8) | (mem_mask >> 8);
-
// this very likely doesn't respond to all the addresses, figure out which ones
if (BIT(offset, 12))
- data = m_ata->cs1_r((offset >> 1) & 0x07, mem_mask);
+ return m_ata->cs1_swap_r((offset >> 1) & 0x07, mem_mask);
else
- data = m_ata->cs0_r((offset >> 1) & 0x07, mem_mask);
-
- // swap
- data = (data << 8) | (data >> 8);
-
- return data;
+ return m_ata->cs0_swap_r((offset >> 1) & 0x07, mem_mask);
}
void a4000_state::ide_w(offs_t offset, u16 data, u16 mem_mask)
@@ -997,18 +1033,14 @@ void a4000_state::ide_w(offs_t offset, u16 data, u16 mem_mask)
if (offset == 0x1010)
return;
- // swap
- mem_mask = (mem_mask << 8) | (mem_mask >> 8);
- data = (data << 8) | (data >> 8);
-
// this very likely doesn't respond to all the addresses, figure out which ones
if (BIT(offset, 12))
- m_ata->cs1_w((offset >> 1) & 0x07, data, mem_mask);
+ m_ata->cs1_swap_w((offset >> 1) & 0x07, data, mem_mask);
else
- m_ata->cs0_w((offset >> 1) & 0x07, data, mem_mask);
+ m_ata->cs0_swap_w((offset >> 1) & 0x07, data, mem_mask);
}
-WRITE_LINE_MEMBER( a4000_state::ide_interrupt_w )
+void a4000_state::ide_interrupt_w(int state)
{
m_ide_interrupt = state;
}
@@ -1053,7 +1085,7 @@ void a4000_state::motherboard_w(offs_t offset, u32 data, u32 mem_mask)
logerror("motherboard_w(%06x): %08x & %08x\n", offset, data, mem_mask);
}
-WRITE_LINE_MEMBER(cd32_state::akiko_int_w)
+void cd32_state::akiko_int_w(int state)
{
set_interrupt(INTENA_SETCLR | INTENA_PORTS);
}
@@ -1140,7 +1172,7 @@ CUSTOM_INPUT_MEMBER( cd32_state::cd32_input )
}
template <int P>
-READ_LINE_MEMBER( cd32_state::cd32_sel_mirror_input )
+int cd32_state::cd32_sel_mirror_input()
{
u8 bits = m_player_ports[P]->read();
return (bits & 0x20)>>5;
@@ -1345,7 +1377,12 @@ void a600_state::a600_mem(address_map &map)
{
map.unmap_value_high();
map(0x000000, 0x1fffff).m(m_overlay, FUNC(address_map_bank_device::amap16));
- map(0x200000, 0xa7ffff).noprw();
+ map(0x200000, 0x5fffff).noprw();
+ map(0x600000, 0x9fffff).rw(m_pcmcia, FUNC(pccard_slot_device::read_memory_swap), FUNC(pccard_slot_device::write_memory_swap));
+ map(0xa00000, 0xa1ffff).rw(m_pcmcia, FUNC(pccard_slot_device::read_reg_swap), FUNC(pccard_slot_device::write_reg_swap));
+ //map(0xa20000, 0xa3ffff) credit card i/o
+ //map(0xa40000, 0xa5ffff) credit card bits
+ //map(0xa60000, 0xa7ffff) credit card pc i/o
map(0xa80000, 0xafffff).nopw().r(FUNC(a600_state::rom_mirror_r));
map(0xb00000, 0xb7ffff).nopw().r(FUNC(a600_state::rom_mirror_r));
map(0xb80000, 0xbeffff).noprw(); // reserved (cdtv)
@@ -1353,7 +1390,7 @@ void a600_state::a600_mem(address_map &map)
map(0xc00000, 0xd7ffff).noprw(); // slow mem
map(0xd80000, 0xd8ffff).noprw(); // spare chip select
map(0xd90000, 0xd9ffff).noprw(); // arcnet chip select
- map(0xda0000, 0xdaffff).rw("gayle", FUNC(gayle_device::gayle_r), FUNC(gayle_device::gayle_w));
+ map(0xda0000, 0xdaffff).m("gayle", FUNC(gayle_device::register_map));
map(0xdb0000, 0xdbffff).noprw(); // reserved (external ide)
map(0xdc0000, 0xdcffff).noprw(); // rtc
map(0xdd0000, 0xddffff).noprw(); // reserved (dma controller)
@@ -1370,7 +1407,12 @@ void a1200_state::a1200_mem(address_map &map)
{
map.unmap_value_high();
map(0x000000, 0x1fffff).m(m_overlay, FUNC(address_map_bank_device::amap32));
- map(0x200000, 0xa7ffff).noprw();
+ map(0x200000, 0x5fffff).noprw();
+ map(0x600000, 0x9fffff).rw(m_pcmcia, FUNC(pccard_slot_device::read_memory_swap), FUNC(pccard_slot_device::write_memory_swap));
+ map(0xa00000, 0xa1ffff).rw(m_pcmcia, FUNC(pccard_slot_device::read_reg_swap), FUNC(pccard_slot_device::write_reg_swap));
+ //map(0xa20000, 0xa3ffff) credit card i/o
+ //map(0xa40000, 0xa5ffff) credit card bits
+ //map(0xa60000, 0xa7ffff) credit card pc i/o
map(0xa80000, 0xafffff).nopw().r(FUNC(a1200_state::rom_mirror32_r));
map(0xb00000, 0xb7ffff).nopw().r(FUNC(a1200_state::rom_mirror32_r));
map(0xb80000, 0xbeffff).noprw(); // reserved (cdtv)
@@ -1378,7 +1420,7 @@ void a1200_state::a1200_mem(address_map &map)
map(0xc00000, 0xd7ffff).noprw(); // slow mem
map(0xd80000, 0xd8ffff).noprw(); // spare chip select
map(0xd90000, 0xd9ffff).noprw(); // arcnet chip select
- map(0xda0000, 0xdaffff).rw("gayle", FUNC(gayle_device::gayle_r), FUNC(gayle_device::gayle_w));
+ map(0xda0000, 0xdaffff).m("gayle", FUNC(gayle_device::register_map));
map(0xdb0000, 0xdbffff).noprw(); // reserved (external ide)
map(0xdc0000, 0xdcffff).noprw(); // rtc
map(0xdd0000, 0xddffff).noprw(); // reserved (dma controller)
@@ -1575,6 +1617,14 @@ static void amiga_floppies(device_slot_interface &device)
device.option_add("35dd", FLOPPY_35_DD);
}
+static void pcmcia_devices(device_slot_interface &device)
+{
+ device.option_add("melcard_1m", PCCARD_SRAM_MITSUBISHI_1M);
+ device.option_add("sram_1m", PCCARD_SRAM_CENTENNIAL_1M);
+ device.option_add("sram_2m", PCCARD_SRAM_CENTENNIAL_2M);
+ device.option_add("sram_4m", PCCARD_SRAM_CENTENNIAL_4M);
+}
+
// basic elements common to all amigas
void amiga_state::amiga_base(machine_config &config)
{
@@ -1663,6 +1713,7 @@ void a1000_state::a1000(machine_config &config)
M68000(config, m_maincpu, amiga_state::CLK_7M_PAL);
m_maincpu->set_addrmap(AS_PROGRAM, &a1000_state::a1000_mem);
m_maincpu->set_cpu_space(AS_PROGRAM);
+ m_maincpu->reset_cb().set(FUNC(amiga_state::m68k_reset));
amiga_base(config);
@@ -1701,6 +1752,7 @@ void a2000_state::a2000(machine_config &config)
M68000(config, m_maincpu, amiga_state::CLK_7M_PAL);
m_maincpu->set_addrmap(AS_PROGRAM, &a2000_state::a2000_mem);
m_maincpu->set_cpu_space(AS_PROGRAM);
+ m_maincpu->reset_cb().set(FUNC(amiga_state::m68k_reset));
amiga_base(config);
@@ -1755,6 +1807,7 @@ void a500_state::a500(machine_config &config)
M68000(config, m_maincpu, amiga_state::CLK_7M_PAL);
m_maincpu->set_addrmap(AS_PROGRAM, &a500_state::a500_mem);
m_maincpu->set_cpu_space(AS_PROGRAM);
+ m_maincpu->reset_cb().set(FUNC(amiga_state::m68k_reset));
amiga_base(config);
@@ -1792,6 +1845,7 @@ void cdtv_state::cdtv(machine_config &config)
M68000(config, m_maincpu, amiga_state::CLK_7M_PAL);
m_maincpu->set_addrmap(AS_PROGRAM, &cdtv_state::cdtv_mem);
m_maincpu->set_cpu_space(AS_PROGRAM);
+ m_maincpu->reset_cb().set(FUNC(amiga_state::m68k_reset));
amiga_base(config);
@@ -1873,6 +1927,7 @@ void a3000_state::a3000(machine_config &config)
M68030(config, m_maincpu, XTAL(32'000'000) / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &a3000_state::a3000_mem);
m_maincpu->set_cpu_space(AS_PROGRAM);
+ m_maincpu->reset_cb().set(FUNC(amiga_state::m68k_reset));
amiga_base(config);
@@ -1911,6 +1966,7 @@ void a500p_state::a500p(machine_config &config)
M68000(config, m_maincpu, amiga_state::CLK_7M_PAL);
m_maincpu->set_addrmap(AS_PROGRAM, &a500p_state::a500p_mem);
m_maincpu->set_cpu_space(AS_PROGRAM);
+ m_maincpu->reset_cb().set(FUNC(amiga_state::m68k_reset));
amiga_base(config);
@@ -1953,6 +2009,7 @@ void a600_state::a600(machine_config &config)
M68000(config, m_maincpu, amiga_state::CLK_7M_PAL);
m_maincpu->set_addrmap(AS_PROGRAM, &a600_state::a600_mem);
m_maincpu->set_cpu_space(AS_PROGRAM);
+ m_maincpu->reset_cb().set(FUNC(amiga_state::m68k_reset));
amiga_base(config);
@@ -1969,15 +2026,21 @@ void a600_state::a600(machine_config &config)
gayle_device &gayle(GAYLE(config, "gayle", amiga_state::CLK_28M_PAL / 2));
gayle.set_id(a600_state::GAYLE_ID);
gayle.int2_handler().set(FUNC(a600_state::gayle_int2_w));
- gayle.cs0_read_handler().set("ata", FUNC(ata_interface_device::cs0_r));
- gayle.cs0_write_handler().set("ata", FUNC(ata_interface_device::cs0_w));
- gayle.cs1_read_handler().set("ata", FUNC(ata_interface_device::cs1_r));
- gayle.cs1_write_handler().set("ata", FUNC(ata_interface_device::cs1_w));
+ gayle.int6_handler().set(FUNC(a600_state::gayle_int6_w));
+ gayle.rst_handler().set(FUNC(a600_state::kbreset_w)); // not really kbreset, but use it for now
+ gayle.ide_cs_r_cb<0>().set("ata", FUNC(ata_interface_device::cs0_swap_r));
+ gayle.ide_cs_r_cb<1>().set("ata", FUNC(ata_interface_device::cs1_swap_r));
+ gayle.ide_cs_w_cb<0>().set("ata", FUNC(ata_interface_device::cs0_swap_w));
+ gayle.ide_cs_w_cb<1>().set("ata", FUNC(ata_interface_device::cs1_swap_w));
ata_interface_device &ata(ATA_INTERFACE(config, "ata").options(ata_devices, "hdd", nullptr, false));
ata.irq_handler().set("gayle", FUNC(gayle_device::ide_interrupt_w));
- // TODO: pcmcia
+ PCCARD_SLOT(config, m_pcmcia, pcmcia_devices, nullptr);
+ m_pcmcia->card_detect_cb().set("gayle", FUNC(gayle_device::cc_cd_w));
+ m_pcmcia->battery_voltage_1_cb().set("gayle", FUNC(gayle_device::cc_bvd1_w));
+ m_pcmcia->battery_voltage_2_cb().set("gayle", FUNC(gayle_device::cc_bvd2_w));
+ m_pcmcia->write_protect_cb().set("gayle", FUNC(gayle_device::cc_wp_w));
// software
SOFTWARE_LIST(config, "ecs_list").set_original("amigaecs_flop");
@@ -2003,6 +2066,7 @@ void a1200_state::a1200(machine_config &config)
M68EC020(config, m_maincpu, amiga_state::CLK_28M_PAL / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &a1200_state::a1200_mem);
m_maincpu->set_cpu_space(AS_PROGRAM);
+ m_maincpu->reset_cb().set(FUNC(amiga_state::m68k_reset));
amiga_base(config);
@@ -2017,17 +2081,19 @@ void a1200_state::a1200(machine_config &config)
kbd.kdat_handler().set("cia_0", FUNC(mos8520_device::sp_w));
kbd.krst_handler().set(FUNC(a1200_state::kbreset_w));
- m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga));
+ m_screen->set_screen_update(FUNC(amiga_state::screen_update));
MCFG_VIDEO_START_OVERRIDE(amiga_state, amiga_aga)
gayle_device &gayle(GAYLE(config, "gayle", amiga_state::CLK_28M_PAL / 2));
gayle.set_id(a1200_state::GAYLE_ID);
gayle.int2_handler().set(FUNC(a1200_state::gayle_int2_w));
- gayle.cs0_read_handler().set("ata", FUNC(ata_interface_device::cs0_r));
- gayle.cs0_write_handler().set("ata", FUNC(ata_interface_device::cs0_w));
- gayle.cs1_read_handler().set("ata", FUNC(ata_interface_device::cs1_r));
- gayle.cs1_write_handler().set("ata", FUNC(ata_interface_device::cs1_w));
+ gayle.int6_handler().set(FUNC(a1200_state::gayle_int6_w));
+ gayle.rst_handler().set(FUNC(a1200_state::kbreset_w)); // not really kbreset, but use it for now
+ gayle.ide_cs_r_cb<0>().set("ata", FUNC(ata_interface_device::cs0_swap_r));
+ gayle.ide_cs_r_cb<1>().set("ata", FUNC(ata_interface_device::cs1_swap_r));
+ gayle.ide_cs_w_cb<0>().set("ata", FUNC(ata_interface_device::cs0_swap_w));
+ gayle.ide_cs_w_cb<1>().set("ata", FUNC(ata_interface_device::cs1_swap_w));
ata_interface_device &ata(ATA_INTERFACE(config, "ata").options(ata_devices, "hdd", nullptr, false));
ata.irq_handler().set("gayle", FUNC(gayle_device::ide_interrupt_w));
@@ -2037,7 +2103,11 @@ void a1200_state::a1200(machine_config &config)
subdevice<amiga_keyboard_bus_device>("kbd").set_default_option("a1200_us");
#endif
- // TODO: pcmcia
+ PCCARD_SLOT(config, m_pcmcia, pcmcia_devices, nullptr);
+ m_pcmcia->card_detect_cb().set("gayle", FUNC(gayle_device::cc_cd_w));
+ m_pcmcia->battery_voltage_1_cb().set("gayle", FUNC(gayle_device::cc_bvd1_w));
+ m_pcmcia->battery_voltage_2_cb().set("gayle", FUNC(gayle_device::cc_bvd2_w));
+ m_pcmcia->write_protect_cb().set("gayle", FUNC(gayle_device::cc_wp_w));
// software
SOFTWARE_LIST(config, "aga_list").set_original("amigaaga_flop");
@@ -2052,7 +2122,7 @@ void a1200_state::a1200n(machine_config &config)
subdevice<gayle_device>("gayle")->set_clock(amiga_state::CLK_28M_NTSC / 2);
config.device_remove("screen");
ntsc_video(config);
- m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga));
+ m_screen->set_screen_update(FUNC(amiga_state::screen_update));
m_paula->set_clock(amiga_state::CLK_C1_NTSC);
m_cia_0->set_clock(amiga_state::CLK_E_NTSC);
m_cia_1->set_clock(amiga_state::CLK_E_NTSC);
@@ -2065,6 +2135,7 @@ void a4000_state::a4000(machine_config &config)
M68040(config, m_maincpu, XTAL(50'000'000) / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &a4000_state::a4000_mem);
m_maincpu->set_cpu_space(AS_PROGRAM);
+ m_maincpu->reset_cb().set(FUNC(amiga_state::m68k_reset));
amiga_base(config);
@@ -2077,7 +2148,7 @@ void a4000_state::a4000(machine_config &config)
kbd.kclk_handler().set("cia_0", FUNC(mos8520_device::cnt_w));
kbd.kdat_handler().set("cia_0", FUNC(mos8520_device::sp_w));
- m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga));
+ m_screen->set_screen_update(FUNC(amiga_state::screen_update));
MCFG_VIDEO_START_OVERRIDE(amiga_state, amiga_aga)
@@ -2102,7 +2173,7 @@ void a4000_state::a4000n(machine_config &config)
config.device_remove("screen");
ntsc_video(config);
- m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga));
+ m_screen->set_screen_update(FUNC(amiga_state::screen_update));
m_paula->set_clock(amiga_state::CLK_C1_NTSC);
m_cia_0->set_clock(amiga_state::CLK_E_NTSC);
m_cia_1->set_clock(amiga_state::CLK_E_NTSC);
@@ -2125,7 +2196,7 @@ void a4000_state::a400030n(machine_config &config)
a400030(config);
config.device_remove("screen");
ntsc_video(config);
- m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga));
+ m_screen->set_screen_update(FUNC(amiga_state::screen_update));
m_paula->set_clock(amiga_state::CLK_C1_NTSC);
m_cia_0->set_clock(amiga_state::CLK_E_NTSC);
m_cia_1->set_clock(amiga_state::CLK_E_NTSC);
@@ -2138,6 +2209,7 @@ void cd32_state::cd32(machine_config &config)
M68EC020(config, m_maincpu, amiga_state::CLK_28M_PAL / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &cd32_state::cd32_mem);
m_maincpu->set_cpu_space(AS_PROGRAM);
+ m_maincpu->reset_cb().set(FUNC(amiga_state::m68k_reset));
amiga_base(config);
@@ -2158,18 +2230,13 @@ void cd32_state::cd32(machine_config &config)
akiko.sda_r_callback().set("i2cmem", FUNC(i2cmem_device::read_sda));
akiko.sda_w_callback().set("i2cmem", FUNC(i2cmem_device::write_sda));
- m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga));
+ m_screen->set_screen_update(FUNC(amiga_state::screen_update));
MCFG_VIDEO_START_OVERRIDE(amiga_state, amiga_aga)
- CDDA(config, m_cdda);
- m_cdda->add_route(0, "lspeaker", 0.50);
- m_cdda->add_route(1, "rspeaker", 0.50);
-
m_cia_0->pa_wr_callback().set(FUNC(cd32_state::akiko_cia_0_port_a_write));
m_cia_0->sp_wr_callback().set_nop();
- CDROM(config, "cdrom").set_interface("cdrom");
SOFTWARE_LIST(config, "cd32_list").set_original("cd32");
SOFTWARE_LIST(config, "cd_list").set_original("cdtv");
}
@@ -2181,7 +2248,7 @@ void cd32_state::cd32n(machine_config &config)
m_maincpu->set_clock(amiga_state::CLK_28M_NTSC / 2);
config.device_remove("screen");
ntsc_video(config);
- m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga));
+ m_screen->set_screen_update(FUNC(amiga_state::screen_update));
m_paula->set_clock(amiga_state::CLK_C1_NTSC);
m_cia_0->set_clock(amiga_state::CLK_E_NTSC);
m_cia_1->set_clock(amiga_state::CLK_E_NTSC);
@@ -2205,7 +2272,7 @@ void a4000_state::a4000tn(machine_config &config)
config.device_remove("screen");
ntsc_video(config);
- m_screen->set_screen_update(FUNC(amiga_state::screen_update_amiga_aga));
+ m_screen->set_screen_update(FUNC(amiga_state::screen_update));
m_paula->set_clock(amiga_state::CLK_C1_NTSC);
m_cia_0->set_clock(amiga_state::CLK_E_NTSC);
m_cia_1->set_clock(amiga_state::CLK_E_NTSC);
@@ -2306,12 +2373,14 @@ ROM_START( cdtv )
ROM_COPY("kickstart", 0x00000, 0x40000, 0x40000)
// remote control input converter, mos 6500/1 mcu
- ROM_REGION(0x800, "rcmcu", 0)
- ROM_LOAD("252609-02.u75", 0x000, 0x800, NO_DUMP)
+ ROM_REGION(0x1000, "rcmcu", 0)
+ ROM_LOAD("252609-02.u75", 0x000, 0x800, NO_DUMP) // internal ROM of the final version hasn't been dumped yet
+ ROM_LOAD("v1.3-1990-10-01", 0x0000, 0x1000, CRC(3c7cb7bb) SHA1(958e799897ac044fcc0f0c74c3cb5d83f3edd0c7)) // this was dumped from a pre-production CD-1000 player which had the program in external EPROM
// lcd controller, sanyo lc6554h
- ROM_REGION(0x1000, "lcd", 0)
- ROM_LOAD("252608-01.u62", 0x0000, 0x1000, NO_DUMP)
+ ROM_REGION(0x2000, "lcd", 0)
+ ROM_LOAD("252608-01.u62", 0x0000, 0x2000, NO_DUMP) // internal ROM of the final version hasn't been dumped yet
+ ROM_LOAD("v1.20-1990-09-26", 0x0000, 0x2000, CRC(9d69c439) SHA1(74354818ffc4d897801be705ae223717f522f8d4)) // this was dumped from a pre-production CD-1000 player which had the program in external EPROM
ROM_END
#define rom_cdtvn rom_cdtv