mirror of
https://github.com/holub/mame
synced 2025-04-18 22:49:58 +03:00
call it harmony/melody, that more accurately represents what we're emulating, dpc+ seems to be a software implementation on the ARM of the Harmony (nw)
This commit is contained in:
parent
87b633a97c
commit
7793b9af43
@ -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>
|
||||
|
||||
|
@ -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",
|
||||
}
|
||||
|
@ -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);
|
@ -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
|
@ -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)
|
||||
|
@ -36,7 +36,7 @@ enum
|
||||
A26_SS,
|
||||
A26_CM,
|
||||
A26_X07,
|
||||
A26_DPCPLUS,
|
||||
A26_HARMONY,
|
||||
};
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user