summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--hash/a2600.xml57
-rw-r--r--scripts/src/bus.lua4
-rw-r--r--src/devices/bus/vcs/harmony_melody.c (renamed from src/devices/bus/vcs/dpcplus.c)69
-rw-r--r--src/devices/bus/vcs/harmony_melody.h (renamed from src/devices/bus/vcs/dpcplus.h)12
-rwxr-xr-xsrc/devices/bus/vcs/vcs_slot.c2
-rwxr-xr-xsrc/devices/bus/vcs/vcs_slot.h2
-rw-r--r--src/mame/drivers/a2600.c6
7 files changed, 109 insertions, 43 deletions
diff --git a/hash/a2600.xml b/hash/a2600.xml
index 3a39fa00d05..dbe5d63d933 100644
--- a/hash/a2600.xml
+++ b/hash/a2600.xml
@@ -17955,14 +17955,14 @@ Info from Atariage and Atarimania
</part>
</software>
- <!-- This was released by the author, also available via Atariage, are both versions the same? needs DPC+ emulation -->
+ <!-- This was released by the author, also available via Atariage, are both versions the same? needs HARMONY/MELODY emulation -->
<software name="stayfr2" supported="no">
<description>Stay Frosty 2 (NTSC)</description>
<year>2013</year>
<publisher>Spiceware</publisher>
<sharedfeat name="compatibility" value="NTSC" />
<part name="cart" interface="a2600_cart">
- <feature name="slot" value="a26_dpcplus" />
+ <feature name="slot" value="a26_harmony" />
<dataarea name="rom" size="0x8000">
<rom name="SF2_20131217_RC8_NTSC.bin" size="0x8000" crc="4eb739ab" sha1="5eceaf8e90bd9a002f4935f082df7b25716dceb0" offset="0" />
</dataarea>
@@ -17975,7 +17975,7 @@ Info from Atariage and Atarimania
<publisher>Spiceware</publisher>
<sharedfeat name="compatibility" value="NTSC" />
<part name="cart" interface="a2600_cart">
- <feature name="slot" value="a26_dpcplus" />
+ <feature name="slot" value="a26_harmony" />
<dataarea name="rom" size="0x8000">
<rom name="SF2_demo_NTSC.bin" size="0x8000" crc="fd850bd6" sha1="bd8166da7777c66e6bb3ab0c77563193d8289f5f" offset="0" />
</dataarea>
@@ -17989,7 +17989,7 @@ Info from Atariage and Atarimania
<publisher>Spiceware</publisher>
<sharedfeat name="compatibility" value="PAL" />
<part name="cart" interface="a2600_cart">
- <feature name="slot" value="a26_dpcplus" />
+ <feature name="slot" value="a26_harmony" />
<dataarea name="rom" size="0x8000">
<rom name="SF2_20131217_RC8_PAL.bin" size="0x8000" crc="7b495dc3" sha1="1625ef74b0a48c2968fad832ab8e2edc8187a53f" offset="0" />
</dataarea>
@@ -18002,7 +18002,7 @@ Info from Atariage and Atarimania
<publisher>Spiceware</publisher>
<sharedfeat name="compatibility" value="PAL" />
<part name="cart" interface="a2600_cart">
- <feature name="slot" value="a26_dpcplus" />
+ <feature name="slot" value="a26_harmony" />
<dataarea name="rom" size="0x8000">
<rom name="SF2_demo_PAL.bin" size="0x8000" crc="b47582f3" sha1="73625429e73f1b354e0cbe6a360d79590032de2b" offset="0" />
</dataarea>
@@ -18015,7 +18015,7 @@ Info from Atariage and Atarimania
<publisher>Spiceware</publisher>
<sharedfeat name="compatibility" value="NTSC" />
<part name="cart" interface="a2600_cart">
- <feature name="slot" value="a26_dpcplus" />
+ <feature name="slot" value="a26_harmony" />
<dataarea name="rom" size="0x8000">
<rom name="spacerocks20121129_NTSC.bin" size="0x8000" crc="c5d8eb83" sha1="bf3af5c76bb4dded5cb9c9b232c369250ad20ac4" offset="0" />
</dataarea>
@@ -18028,12 +18028,53 @@ Info from Atariage and Atarimania
<publisher>Spiceware</publisher>
<sharedfeat name="compatibility" value="PAL" />
<part name="cart" interface="a2600_cart">
- <feature name="slot" value="a26_dpcplus" />
+ <feature name="slot" value="a26_harmony" />
<dataarea name="rom" size="0x8000">
<rom name="spacerocks20121129_PAL.bin" size="0x8000" crc="133cb923" sha1="0511a35ee435227fbb5665e8488590eb993256f7" offset="0" />
</dataarea>
</part>
- </software>
+ </software>
+
+ <software name="frantic" supported="no">
+ <description>Frantic (20140305, NTSC)</description>
+ <year>2014</year>
+ <publisher>Spiceware</publisher>
+ <sharedfeat name="compatibility" value="NTSC" />
+ <part name="cart" interface="a2600_cart">
+ <feature name="slot" value="a26_harmony" />
+ <dataarea name="rom" size="0x8000">
+ <rom name="frantic20140305.bin" size="0x8000" crc="04d0f558" sha1="ee2a004a50861c5fdfbdabfa5ed4bf825333ec43" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="harmbios" supported="no"> <!-- I think these are the bios roms if you're using it as a multi-game cart? -->
+ <description>Harmony Bios Updater</description>
+ <year>2014</year>
+ <publisher>Harmony</publisher>
+ <sharedfeat name="compatibility" value="NTSC" />
+ <part name="cart" interface="a2600_cart">
+ <feature name="slot" value="a26_harmony" />
+ <dataarea name="rom" size="0x8000">
+ <rom name="bios_updater_NTSC.cu" size="0x8000" crc="03153eb2" sha1="cd9ee1d820737b3887ebe5fc6fe96a2a043ab009" offset="0" />
+ </dataarea>
+ <dataarea name="bios" size="0x21400">
+ <rom name="hbios_106_NTSC_official_beta.bin" size="0x21400" crc="1e1d237b" sha1="8fd74e0119bce43a89bcc4998b750bc6884971da" offset="0" />
+ <rom name="hbios_106_NTSC_beta_2.bin" size="0x21400" crc="807b86bd" sha1="633960295c30e7430b3ce58f6244495f4b708e9d" offset="0" />
+ <rom name="hbios_106_NTSC.bin" size="0x21400" crc="48664301" sha1="aaa5e839f307734306c2a9ccbe38482579c70391" offset="0" />
+
+ <rom name="hbios_105_NTSC.bin" size="0x19400" crc="c0b8aae9" sha1="68b10153695da505756eb7dc7cc4a7e93fe68860" offset="0" />
+ <rom name="hbios_105_PAL50.bin" size="0x19400" crc="fb942c80" sha1="81bba9d9c245d23cc4b9503180ebe2d67bf1e117" offset="0" />
+ <rom name="hbios_105_PAL60.bin" size="0x19400" crc="b59ebe6d" sha1="873830286c66935fd23e3ea7c192e6573e056cbd" offset="0" />
+
+ <rom name="eeloader_104e_NTSC.bin" size="0x36f8" crc="ad04a8d9" sha1="c83d724299875cd5ea8d6be05db12d688ce8eff1" offset="0" />
+ <rom name="eeloader_104e_PAL50.bin" size="0x36f8" crc="4868ba51" sha1="e6a65523824ecf4f2a5145e2c5118cfb4bee059d" offset="0" />
+ <rom name="eeloader_104e_PAL60.bin" size="0x36f8" crc="58845532" sha1="255b5c9f4f2f7322c20d2619126cd150a1b8f71c" offset="0" />
+
+ </dataarea>
+
+ </part>
+ </software>
</softwarelist>
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index e321a9f4b11..ce5f166c71e 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -1161,8 +1161,8 @@ if (BUSES["VCS"]~=null) then
MAME_DIR .. "src/devices/bus/vcs/compumat.h",
MAME_DIR .. "src/devices/bus/vcs/dpc.c",
MAME_DIR .. "src/devices/bus/vcs/dpc.h",
- MAME_DIR .. "src/devices/bus/vcs/dpcplus.c",
- MAME_DIR .. "src/devices/bus/vcs/dpcplus.h",
+ MAME_DIR .. "src/devices/bus/vcs/harmony_melody.c",
+ MAME_DIR .. "src/devices/bus/vcs/harmony_melody.h",
MAME_DIR .. "src/devices/bus/vcs/scharger.c",
MAME_DIR .. "src/devices/bus/vcs/scharger.h",
}
diff --git a/src/devices/bus/vcs/dpcplus.c b/src/devices/bus/vcs/harmony_melody.c
index 9baebe816f2..4b6b223ba27 100644
--- a/src/devices/bus/vcs/dpcplus.c
+++ b/src/devices/bus/vcs/harmony_melody.c
@@ -2,11 +2,34 @@
// copyright-holders:David Haywood
/***************************************************************************
-Atari 2600 cart with DPC+
+Harmony / Melody cart for the A2600
-the DPC+ adds an ARM CPU, including video improvements plus an extra synthesizer.
+The Harmony cart is a 'modern' A2600 cartridge, used for homebrew etc. It has
+an SD slot and can be connected to a PC, roms can be transfered to it with
+software on the PC side. It uses an ARM7TDMI-S LPC2103 @ 70 Mhz to emulate
+the mapper behavior of other cartridges. It has an SD card slot for storing
+game data.
-Some info on the DPC+ hardware can be found on Darrell Spice Jr's guides:
+The Melody version of the cartridge has been used for several recent A2600
+commercial releases as well as some reproductions due to it's ability to be
+programmed as any other cartridge type. This lacks the SD slot?
+
+The 'DPC+' games by SpiceWare run on a Harmony / Melody cart, DPC+ seems to
+be a virtual 'software mapper' programmed on the ARM rather than a real mapper.
+
+
+There is also a 'Harmony Encore' cartridge which adds support for some of the
+games the original couldn't handle due to them having larger ROMs and more
+complex banking schemes (Stella's Stocking etc.)
+
+some Harmony cart details can be found at
+http://atariage.com/forums/topic/156500-latest-harmony-cart-software/
+
+
+DPC+ notes
+----------
+
+Some info on the Harmony / Melody when configured as DPC+ hardware can be found on Darrell Spice Jr's guides:
http://atariage.com/forums/blog/148/entry-11811-dpcarm-part-6-dpc-cartridge-layout/
http://atariage.com/forums/blog/148/entry-11883-dpcarm-part-7-6507arm-exchange-of-information/
http://atariage.com/forums/blog/148/entry-11903-dpcarm-part-8-multiple-functions/
@@ -18,7 +41,7 @@ map:
Bankswitching uses addresses $FFF6-$FFFB
* ARM RAM mapped at $40000000 in this area
- $0000-$0BFF: DPC+ driver (not accessible by 2600 itself) (copied to $40000000 - $40000bff on startup by ARM)
+ $0000-$0BFF: HARMONY/MELODY driver (not accessible by 2600 itself) (copied to $40000000 - $40000bff on startup by ARM)
$0C00-$1BFF: Bank 0 (each bank can map to 0x1000 - 0x1fff in 6507 space, like other carts)
$1C00-$2BFF: Bank 1
$2C00-$3BFF: Bank 2
@@ -32,7 +55,7 @@ map:
#include "emu.h"
-#include "dpcplus.h"
+#include "harmony_melody.h"
@@ -40,11 +63,11 @@ map:
// cart device
-const device_type A26_ROM_DPCPLUS = &device_creator<a26_rom_dpcplus_device>;
+const device_type A26_ROM_HARMONY = &device_creator<a26_rom_harmony_device>;
-a26_rom_dpcplus_device::a26_rom_dpcplus_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : a26_rom_f8_device(mconfig, A26_ROM_DPCPLUS, "Atari 2600 ROM Cart DPC+", tag, owner, clock, "a2600_dpcplus", __FILE__)
+a26_rom_harmony_device::a26_rom_harmony_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : a26_rom_f8_device(mconfig, A26_ROM_HARMONY, "Atari 2600 ROM Cart HARMONY/MELODY", tag, owner, clock, "a2600_harmony", __FILE__)
{
}
@@ -52,24 +75,24 @@ a26_rom_dpcplus_device::a26_rom_dpcplus_device(const machine_config &mconfig, co
// mapper specific start/reset
//-------------------------------------------------
-void a26_rom_dpcplus_device::device_start()
+void a26_rom_harmony_device::device_start()
{
save_item(NAME(m_base_bank));
}
-void a26_rom_dpcplus_device::device_reset()
+void a26_rom_harmony_device::device_reset()
{
m_base_bank = 5;
}
-READ8_MEMBER(a26_rom_dpcplus_device::read8_r)
+READ8_MEMBER(a26_rom_harmony_device::read8_r)
{
return m_rom[offset + (m_base_bank * 0x1000)];
}
-READ32_MEMBER(a26_rom_dpcplus_device::armrom_r)
+READ32_MEMBER(a26_rom_harmony_device::armrom_r)
{
UINT32 ret = (m_rom[offset * 4 + 3] << 24) |
(m_rom[offset * 4 + 2] << 16) |
@@ -78,17 +101,17 @@ READ32_MEMBER(a26_rom_dpcplus_device::armrom_r)
return ret;
}
-WRITE32_MEMBER(a26_rom_dpcplus_device::armrom_w)
+WRITE32_MEMBER(a26_rom_harmony_device::armrom_w)
{
}
-READ32_MEMBER(a26_rom_dpcplus_device::arm_E01FC088_r)
+READ32_MEMBER(a26_rom_harmony_device::arm_E01FC088_r)
{
return 0xffffffff;
}
-static ADDRESS_MAP_START( dpcplus_arm7_map, AS_PROGRAM, 32, a26_rom_dpcplus_device )
+static ADDRESS_MAP_START( harmony_arm7_map, AS_PROGRAM, 32, a26_rom_harmony_device )
// todo: implement all this correctly
AM_RANGE(0x00000000, 0x00007fff) AM_READWRITE(armrom_r,armrom_w) // flash, 32k
AM_RANGE(0x40000000, 0x40001fff) AM_RAM // sram, 8k
@@ -96,17 +119,19 @@ static ADDRESS_MAP_START( dpcplus_arm7_map, AS_PROGRAM, 32, a26_rom_dpcplus_devi
AM_RANGE(0xE01FC088, 0xE01FC08b) AM_READ(arm_E01FC088_r)
ADDRESS_MAP_END
-static MACHINE_CONFIG_FRAGMENT( a26_dpcplus )
+static MACHINE_CONFIG_FRAGMENT( a26_harmony )
MCFG_CPU_ADD("arm", ARM7, 70000000)
- MCFG_CPU_PROGRAM_MAP(dpcplus_arm7_map)
+ MCFG_CPU_PROGRAM_MAP(harmony_arm7_map)
MACHINE_CONFIG_END
-machine_config_constructor a26_rom_dpcplus_device::device_mconfig_additions() const
+machine_config_constructor a26_rom_harmony_device::device_mconfig_additions() const
{
- return MACHINE_CONFIG_NAME( a26_dpcplus );
+ return MACHINE_CONFIG_NAME( a26_harmony );
}
-void a26_rom_dpcplus_device::check_bankswitch(offs_t offset)
+// actually if the ARM code is doing this and providing every opcode to the main CPU based
+// on bus activity then we shouldn't be doing this here.
+void a26_rom_harmony_device::check_bankswitch(offs_t offset)
{
switch (offset)
{
@@ -120,7 +145,7 @@ void a26_rom_dpcplus_device::check_bankswitch(offs_t offset)
}
}
-READ8_MEMBER(a26_rom_dpcplus_device::read_rom)
+READ8_MEMBER(a26_rom_harmony_device::read_rom)
{
UINT8 retvalue = read8_r(space, offset + 0xc00); // banks start at 0xc00
@@ -129,7 +154,7 @@ READ8_MEMBER(a26_rom_dpcplus_device::read_rom)
return retvalue;
}
-WRITE8_MEMBER(a26_rom_dpcplus_device::write_bank)
+WRITE8_MEMBER(a26_rom_harmony_device::write_bank)
{
check_bankswitch(offset);
// a26_rom_f8_device::write_bank(space, offset, data);
diff --git a/src/devices/bus/vcs/dpcplus.h b/src/devices/bus/vcs/harmony_melody.h
index ac37098c977..a232cf57222 100644
--- a/src/devices/bus/vcs/dpcplus.h
+++ b/src/devices/bus/vcs/harmony_melody.h
@@ -1,19 +1,19 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood
-#ifndef __VCS_DPCPLUS_H
-#define __VCS_DPCPLUS_H
+#ifndef __VCS_HARMONY_H
+#define __VCS_HARMONY_H
#include "rom.h"
#include "cpu/arm7/arm7.h"
-// ======================> a26_rom_dpcplus_device
+// ======================> a26_rom_harmony_device
-class a26_rom_dpcplus_device : public a26_rom_f8_device
+class a26_rom_harmony_device : public a26_rom_f8_device
{
public:
// construction/destruction
- a26_rom_dpcplus_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ a26_rom_harmony_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
@@ -38,6 +38,6 @@ protected:
// device type definition
-extern const device_type A26_ROM_DPCPLUS;
+extern const device_type A26_ROM_HARMONY;
#endif
diff --git a/src/devices/bus/vcs/vcs_slot.c b/src/devices/bus/vcs/vcs_slot.c
index d5d71dd505f..e4824d91d60 100755
--- a/src/devices/bus/vcs/vcs_slot.c
+++ b/src/devices/bus/vcs/vcs_slot.c
@@ -157,7 +157,7 @@ static const vcs_slot slot_list[] =
{ A26_8IN1, "a26_8in1" },
{ A26_32IN1, "a26_32in1" },
{ A26_X07, "a26_x07" },
- { A26_DPCPLUS, "a26_dpcplus" },
+ { A26_HARMONY, "a26_harmony" },
};
static int vcs_get_pcb_id(const char *slot)
diff --git a/src/devices/bus/vcs/vcs_slot.h b/src/devices/bus/vcs/vcs_slot.h
index 39dbdd1ab42..154c08fdd5b 100755
--- a/src/devices/bus/vcs/vcs_slot.h
+++ b/src/devices/bus/vcs/vcs_slot.h
@@ -36,7 +36,7 @@ enum
A26_SS,
A26_CM,
A26_X07,
- A26_DPCPLUS,
+ A26_HARMONY,
};
diff --git a/src/mame/drivers/a2600.c b/src/mame/drivers/a2600.c
index 8ebd4d4a862..29d950ed7fd 100644
--- a/src/mame/drivers/a2600.c
+++ b/src/mame/drivers/a2600.c
@@ -18,7 +18,7 @@ TODO:
#include "bus/vcs/vcs_slot.h"
#include "bus/vcs/rom.h"
#include "bus/vcs/dpc.h"
-#include "bus/vcs/dpcplus.h"
+#include "bus/vcs/harmony_melody.h"
#include "bus/vcs/scharger.h"
#include "bus/vcs/compumat.h"
#include "bus/vcs_ctrl/ctrl.h"
@@ -391,7 +391,7 @@ MACHINE_START_MEMBER(a2600_state,a2600)
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart), write8_delegate(FUNC(vcs_cart_slot_device::write_bank),(vcs_cart_slot_device*)m_cart));
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x0000, 0x0fff, read8_delegate(FUNC(a2600_state::cart_over_all_r), this), write8_delegate(FUNC(a2600_state::cart_over_all_w), this));
break;
- case A26_DPCPLUS:
+ case A26_HARMONY:
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart), write8_delegate(FUNC(vcs_cart_slot_device::write_bank),(vcs_cart_slot_device*)m_cart));
break;
}
@@ -528,7 +528,7 @@ static SLOT_INTERFACE_START(a2600_cart)
SLOT_INTERFACE_INTERNAL("a26_8in1", A26_ROM_8IN1)
SLOT_INTERFACE_INTERNAL("a26_32in1", A26_ROM_32IN1)
SLOT_INTERFACE_INTERNAL("a26_x07", A26_ROM_X07)
- SLOT_INTERFACE_INTERNAL("a26_dpcplus", A26_ROM_DPCPLUS)
+ SLOT_INTERFACE_INTERNAL("a26_harmony", A26_ROM_HARMONY)
SLOT_INTERFACE_END
static MACHINE_CONFIG_FRAGMENT(a2600_cartslot)