diff options
-rw-r--r-- | hash/a2600.xml | 57 | ||||
-rw-r--r-- | scripts/src/bus.lua | 4 | ||||
-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-x | src/devices/bus/vcs/vcs_slot.c | 2 | ||||
-rwxr-xr-x | src/devices/bus/vcs/vcs_slot.h | 2 | ||||
-rw-r--r-- | src/mame/drivers/a2600.c | 6 |
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) |