mirror of
https://github.com/holub/mame
synced 2025-06-30 16:00:01 +03:00
(MESS) a2600.c: Added support for 8in1. (Wilbert Pol)
This commit is contained in:
parent
68c1ebe094
commit
0f9ab8ce82
@ -247,12 +247,14 @@ Info from Atariage and Atarimania
|
|||||||
</part>
|
</part>
|
||||||
</software>
|
</software>
|
||||||
|
|
||||||
<software name="8in1" supported="no">
|
<!-- Known 'feature': Centipede doesn't work -->
|
||||||
|
<software name="8in1">
|
||||||
<description>8 in 1 - Asteroids + Centipede + BattleZone + SwordQuest - EarthWorld + SwordQuest - FireWorld + RealSports Soccer + RealSports Tennis + Yars' Revenge (Prototype 19920116)</description>
|
<description>8 in 1 - Asteroids + Centipede + BattleZone + SwordQuest - EarthWorld + SwordQuest - FireWorld + RealSports Soccer + RealSports Tennis + Yars' Revenge (Prototype 19920116)</description>
|
||||||
<year>1988</year>
|
<year>1988</year>
|
||||||
<publisher>Atari</publisher>
|
<publisher>Atari</publisher>
|
||||||
<info name="serial" value="CX26193" />
|
<info name="serial" value="CX26193" />
|
||||||
<part name="cart" interface="a2600_cart">
|
<part name="cart" interface="a2600_cart">
|
||||||
|
<feature name="mapper" value="8in1" />
|
||||||
<dataarea name="rom" size="65536">
|
<dataarea name="rom" size="65536">
|
||||||
<rom name="8 in 1 (prototype).bin" size="65536" crc="5ddf79f5" sha1="c066942446c3fc7075ee8430a381d5da4adaec41" offset="0" />
|
<rom name="8 in 1 (prototype).bin" size="65536" crc="5ddf79f5" sha1="c066942446c3fc7075ee8430a381d5da4adaec41" offset="0" />
|
||||||
</dataarea>
|
</dataarea>
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
Atari VCS 2600 driver
|
Atari VCS 2600 driver
|
||||||
|
|
||||||
|
TODO:
|
||||||
|
- Move the 2 32-in-1 rom dumps into their own driver
|
||||||
|
- Add 128-in-1 driver
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
@ -193,7 +197,8 @@ enum
|
|||||||
modeFV,
|
modeFV,
|
||||||
modeDPC,
|
modeDPC,
|
||||||
mode32in1,
|
mode32in1,
|
||||||
modeJVP
|
modeJVP,
|
||||||
|
mode8in1
|
||||||
};
|
};
|
||||||
|
|
||||||
static const UINT16 supported_screen_heights[4] = { 262, 312, 328, 342 };
|
static const UINT16 supported_screen_heights[4] = { 262, 312, 328, 342 };
|
||||||
@ -591,10 +596,32 @@ static DEVICE_IMAGE_LOAD( a2600_cart )
|
|||||||
state->m_current_bank = 0;
|
state->m_current_bank = 0;
|
||||||
|
|
||||||
if (image.software_entry() == NULL)
|
if (image.software_entry() == NULL)
|
||||||
|
{
|
||||||
image.fread(cart, state->m_cart_size);
|
image.fread(cart, state->m_cart_size);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
memcpy(cart, image.get_software_region("rom"), state->m_cart_size);
|
memcpy(cart, image.get_software_region("rom"), state->m_cart_size);
|
||||||
|
|
||||||
|
const char *mapper = software_part_get_feature((software_part*)image.part_entry(), "mapper");
|
||||||
|
|
||||||
|
if ( mapper != NULL )
|
||||||
|
{
|
||||||
|
static const struct { const char *mapper_name; int mapper_type; } mapper_types[] =
|
||||||
|
{
|
||||||
|
{ "8in1", mode8in1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
for (int i = 0; i < ARRAY_LENGTH(mapper_types) && state->m_banking_mode == 0xff; i++)
|
||||||
|
{
|
||||||
|
if (!mame_stricmp(mapper, mapper_types[i].mapper_name))
|
||||||
|
{
|
||||||
|
state->m_banking_mode = mapper_types[i].mapper_type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!(state->m_cart_size == 0x4000 && detect_modef6(image.device().machine())))
|
if (!(state->m_cart_size == 0x4000 && detect_modef6(image.device().machine())))
|
||||||
{
|
{
|
||||||
while (state->m_cart_size > 0x00800)
|
while (state->m_cart_size > 0x00800)
|
||||||
@ -616,7 +643,7 @@ int a2600_state::next_bank()
|
|||||||
|
|
||||||
void a2600_state::modeF8_switch(UINT16 offset, UINT8 data)
|
void a2600_state::modeF8_switch(UINT16 offset, UINT8 data)
|
||||||
{
|
{
|
||||||
m_bank_base[1] = m_cart + 0x1000 * offset;
|
m_bank_base[1] = m_cart + 0x2000 * m_current_reset_bank_counter + 0x1000 * offset;
|
||||||
membank("bank1")->set_base(m_bank_base[1]);
|
membank("bank1")->set_base(m_bank_base[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1879,7 +1906,21 @@ void a2600_state::machine_reset()
|
|||||||
install_banks(1, 0x0000);
|
install_banks(1, 0x0000);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case mode8in1:
|
||||||
|
m_current_reset_bank_counter = m_current_reset_bank_counter & 0x07;
|
||||||
|
if ( m_current_reset_bank_counter == 7 )
|
||||||
|
{
|
||||||
|
/* Special case for Yar's Revenge */
|
||||||
|
install_banks(1, 0x2000 * m_current_reset_bank_counter + 0x0000);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
install_banks(1, 0x2000 * m_current_reset_bank_counter + 0x1000);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case modeF8:
|
case modeF8:
|
||||||
|
m_current_reset_bank_counter = 0;
|
||||||
if (!memcmp(&CART_MEMBER[0x1ffc],snowwhite,sizeof(snowwhite)))
|
if (!memcmp(&CART_MEMBER[0x1ffc],snowwhite,sizeof(snowwhite)))
|
||||||
{
|
{
|
||||||
install_banks(1, 0x0000);
|
install_banks(1, 0x0000);
|
||||||
@ -1976,6 +2017,7 @@ void a2600_state::machine_reset()
|
|||||||
switch (m_banking_mode)
|
switch (m_banking_mode)
|
||||||
{
|
{
|
||||||
case modeF8:
|
case modeF8:
|
||||||
|
case mode8in1:
|
||||||
space.install_write_handler(0x1ff8, 0x1ff9, write8_delegate(FUNC(a2600_state::modeF8_switch_w),this));
|
space.install_write_handler(0x1ff8, 0x1ff9, write8_delegate(FUNC(a2600_state::modeF8_switch_w),this));
|
||||||
space.install_read_handler(0x1ff8, 0x1ff9, read8_delegate(FUNC(a2600_state::modeF8_switch_r),this));
|
space.install_read_handler(0x1ff8, 0x1ff9, read8_delegate(FUNC(a2600_state::modeF8_switch_r),this));
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user