mirror of
https://github.com/holub/mame
synced 2025-06-29 07:34:45 +03:00
Merge branch 'master' of https://github.com/mamedev/mame.git
This commit is contained in:
commit
0328251082
@ -98,6 +98,7 @@ enum
|
|||||||
#define ALWAYS64 0x400
|
#define ALWAYS64 0x400
|
||||||
#define SPECIAL64 0x800
|
#define SPECIAL64 0x800
|
||||||
#define SPECIAL64_ENT(x) (SPECIAL64 | ((x) << 24))
|
#define SPECIAL64_ENT(x) (SPECIAL64 | ((x) << 24))
|
||||||
|
#define GROUP_MOD 0x1000
|
||||||
|
|
||||||
struct I386_OPCODE {
|
struct I386_OPCODE {
|
||||||
const char *mnemonic;
|
const char *mnemonic;
|
||||||
@ -425,10 +426,7 @@ static const I386_OPCODE i386_opcode_table2[256] =
|
|||||||
"movupd\0"
|
"movupd\0"
|
||||||
"movsd\0"
|
"movsd\0"
|
||||||
"movss", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 },
|
"movss", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 },
|
||||||
{"movlps\0"
|
{"group0F12", GROUP|GROUP_MOD, 0, 0, 0 },
|
||||||
"movlpd\0"
|
|
||||||
"movddup\0"
|
|
||||||
"movsldup", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 },
|
|
||||||
{"movlps\0"
|
{"movlps\0"
|
||||||
"movlpd\0"
|
"movlpd\0"
|
||||||
"???\0"
|
"???\0"
|
||||||
@ -441,14 +439,11 @@ static const I386_OPCODE i386_opcode_table2[256] =
|
|||||||
"unpckhpd\0"
|
"unpckhpd\0"
|
||||||
"???\0"
|
"???\0"
|
||||||
"???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 },
|
"???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 },
|
||||||
|
{ "group0F16", GROUP|GROUP_MOD, 0, 0, 0 },
|
||||||
{"movhps\0"
|
{"movhps\0"
|
||||||
"movhpd\0"
|
"movhpd\0"
|
||||||
"???\0"
|
"???\0"
|
||||||
"movshdup", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 },
|
"???", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 },
|
||||||
{"movhps\0"
|
|
||||||
"movhpd\0"
|
|
||||||
"???\0"
|
|
||||||
"???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 },
|
|
||||||
{"group0F18", GROUP, 0, 0, 0 },
|
{"group0F18", GROUP, 0, 0, 0 },
|
||||||
{"nop_hint", 0, PARAM_RMPTR8, 0, 0 },
|
{"nop_hint", 0, PARAM_RMPTR8, 0, 0 },
|
||||||
{"nop_hint", 0, PARAM_RMPTR8, 0, 0 },
|
{"nop_hint", 0, PARAM_RMPTR8, 0, 0 },
|
||||||
@ -1810,6 +1805,46 @@ static const I386_OPCODE group0F0D_table[8] =
|
|||||||
{"???", 0, 0, 0, 0 }
|
{"???", 0, 0, 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const I386_OPCODE group0F12_table[4] =
|
||||||
|
{
|
||||||
|
{ "movlps\0"
|
||||||
|
"movlpd\0"
|
||||||
|
"movddup\0"
|
||||||
|
"movsldup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 },
|
||||||
|
{ "movlps\0"
|
||||||
|
"movlpd\0"
|
||||||
|
"movddup\0"
|
||||||
|
"movsldup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 },
|
||||||
|
{ "movlps\0"
|
||||||
|
"movlpd\0"
|
||||||
|
"movddup\0"
|
||||||
|
"movsldup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 },
|
||||||
|
{ "movhlps\0"
|
||||||
|
"???\0"
|
||||||
|
"movddup\0"
|
||||||
|
"movsldup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
static const I386_OPCODE group0F16_table[4] =
|
||||||
|
{
|
||||||
|
{ "movhps\0"
|
||||||
|
"movhpd\0"
|
||||||
|
"???\0"
|
||||||
|
"movshdup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 },
|
||||||
|
{ "movhps\0"
|
||||||
|
"movhpd\0"
|
||||||
|
"???\0"
|
||||||
|
"movshdup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 },
|
||||||
|
{ "movhps\0"
|
||||||
|
"movhpd\0"
|
||||||
|
"???\0"
|
||||||
|
"movshdup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 },
|
||||||
|
{ "movlhps\0"
|
||||||
|
"movhpd\0"
|
||||||
|
"???\0"
|
||||||
|
"movshdup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
static const I386_OPCODE group0F18_table[8] =
|
static const I386_OPCODE group0F18_table[8] =
|
||||||
{
|
{
|
||||||
{"prefetchnta", 0, PARAM_RM8, 0, 0 },
|
{"prefetchnta", 0, PARAM_RM8, 0, 0 },
|
||||||
@ -1916,6 +1951,8 @@ static const GROUP_OP group_op_table[] =
|
|||||||
{ "group0F00", group0F00_table },
|
{ "group0F00", group0F00_table },
|
||||||
{ "group0F01", group0F01_table },
|
{ "group0F01", group0F01_table },
|
||||||
{ "group0F0D", group0F0D_table },
|
{ "group0F0D", group0F0D_table },
|
||||||
|
{ "group0F12", group0F12_table },
|
||||||
|
{ "group0F16", group0F16_table },
|
||||||
{ "group0F18", group0F18_table },
|
{ "group0F18", group0F18_table },
|
||||||
{ "group0F71", group0F71_table },
|
{ "group0F71", group0F71_table },
|
||||||
{ "group0F72", group0F72_table },
|
{ "group0F72", group0F72_table },
|
||||||
@ -1954,6 +1991,7 @@ static UINT8 curmode;
|
|||||||
|
|
||||||
#define MODRM_REG1 ((modrm >> 3) & 0x7)
|
#define MODRM_REG1 ((modrm >> 3) & 0x7)
|
||||||
#define MODRM_REG2 (modrm & 0x7)
|
#define MODRM_REG2 (modrm & 0x7)
|
||||||
|
#define MODRM_MOD ((modrm >> 6) & 0x3)
|
||||||
|
|
||||||
INLINE UINT8 FETCH(void)
|
INLINE UINT8 FETCH(void)
|
||||||
{
|
{
|
||||||
@ -2959,6 +2997,9 @@ static void decode_opcode(char *s, const I386_OPCODE *op, UINT8 op1)
|
|||||||
handle_modrm( modrm_string );
|
handle_modrm( modrm_string );
|
||||||
for( i=0; i < ARRAY_LENGTH(group_op_table); i++ ) {
|
for( i=0; i < ARRAY_LENGTH(group_op_table); i++ ) {
|
||||||
if( strcmp(op->mnemonic, group_op_table[i].mnemonic) == 0 ) {
|
if( strcmp(op->mnemonic, group_op_table[i].mnemonic) == 0 ) {
|
||||||
|
if (op->flags & GROUP_MOD)
|
||||||
|
decode_opcode( s, &group_op_table[i].opcode[MODRM_MOD], op1 );
|
||||||
|
else
|
||||||
decode_opcode( s, &group_op_table[i].opcode[MODRM_REG1], op1 );
|
decode_opcode( s, &group_op_table[i].opcode[MODRM_REG1], op1 );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -693,6 +693,8 @@ void ppc_device::device_start()
|
|||||||
m_hotspot_select = 0;
|
m_hotspot_select = 0;
|
||||||
memset(m_hotspot, 0, sizeof(m_hotspot));
|
memset(m_hotspot, 0, sizeof(m_hotspot));
|
||||||
|
|
||||||
|
m_debugger_temp = 0;
|
||||||
|
|
||||||
m_cache_line_size = 32;
|
m_cache_line_size = 32;
|
||||||
m_cpu_clock = clock();
|
m_cpu_clock = clock();
|
||||||
m_program = &space(AS_PROGRAM);
|
m_program = &space(AS_PROGRAM);
|
||||||
|
@ -83,6 +83,7 @@ public:
|
|||||||
DECLARE_READ16_MEMBER(bam2_unk_r);
|
DECLARE_READ16_MEMBER(bam2_unk_r);
|
||||||
DECLARE_WRITE16_MEMBER(acpsx_00_w);
|
DECLARE_WRITE16_MEMBER(acpsx_00_w);
|
||||||
DECLARE_WRITE16_MEMBER(acpsx_10_w);
|
DECLARE_WRITE16_MEMBER(acpsx_10_w);
|
||||||
|
DECLARE_WRITE16_MEMBER(nbajamex_bank_w);
|
||||||
DECLARE_WRITE16_MEMBER(nbajamex_80_w);
|
DECLARE_WRITE16_MEMBER(nbajamex_80_w);
|
||||||
DECLARE_READ16_MEMBER(nbajamex_08_r);
|
DECLARE_READ16_MEMBER(nbajamex_08_r);
|
||||||
DECLARE_READ16_MEMBER(nbajamex_80_r);
|
DECLARE_READ16_MEMBER(nbajamex_80_r);
|
||||||
@ -2034,17 +2035,55 @@ WRITE16_MEMBER(zn_state::acpsx_00_w)
|
|||||||
verboselog(0, "acpsx_00_w( %08x, %08x, %08x )\n", offset, data, mem_mask );
|
verboselog(0, "acpsx_00_w( %08x, %08x, %08x )\n", offset, data, mem_mask );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WRITE16_MEMBER(zn_state::nbajamex_bank_w)
|
||||||
|
{
|
||||||
|
UINT32 newbank = 0;
|
||||||
|
|
||||||
|
verboselog(0, "nbajamex_bank_w( %08x, %08x, %08x )\n", offset, data, mem_mask );
|
||||||
|
|
||||||
|
if (offset > 1)
|
||||||
|
{
|
||||||
|
logerror("Unknown banking offset %x!\n", offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (offset == 1)
|
||||||
|
{
|
||||||
|
data -= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data <= 1)
|
||||||
|
{
|
||||||
|
newbank = (data * 0x400000);
|
||||||
|
}
|
||||||
|
else if (data >= 0x10)
|
||||||
|
{
|
||||||
|
data -= 0x10;
|
||||||
|
newbank = (data * 0x400000);
|
||||||
|
newbank += 0x200000;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (offset == 0)
|
||||||
|
{
|
||||||
|
membank( "bankedroms" )->set_base( memregion( "bankedroms" )->base() + newbank);
|
||||||
|
}
|
||||||
|
else if (offset == 1)
|
||||||
|
{
|
||||||
|
newbank += 0x200000;
|
||||||
|
membank( "bankedroms2" )->set_base( memregion( "bankedroms" )->base() + newbank);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
WRITE16_MEMBER(zn_state::acpsx_10_w)
|
WRITE16_MEMBER(zn_state::acpsx_10_w)
|
||||||
{
|
{
|
||||||
verboselog(0, "acpsx_10_w( %08x, %08x, %08x )\n", offset, data, mem_mask );
|
verboselog(0, "acpsx_10_w( %08x, %08x, %08x )\n", offset, data, mem_mask );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// all 16 bits goes to the external soundboard's latch (see sound test menu)
|
||||||
WRITE16_MEMBER(zn_state::nbajamex_80_w)
|
WRITE16_MEMBER(zn_state::nbajamex_80_w)
|
||||||
{
|
{
|
||||||
verboselog(0, "nbajamex_80_w( %08x, %08x, %08x )\n", offset, data, mem_mask );
|
verboselog(0, "nbajamex_80_w( %08x, %08x, %08x )\n", offset, data, mem_mask );
|
||||||
psxirq_device *psxirq = (psxirq_device *) machine().device("maincpu:irq");
|
psxirq_device *psxirq = (psxirq_device *) machine().device("maincpu:irq");
|
||||||
psxirq->intin10(1);
|
psxirq->intin10(1);
|
||||||
membank( "bankedroms" )->set_base( memregion( "bankedroms" )->base() + (data ? 0xe00000 : 0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
READ16_MEMBER(zn_state::nbajamex_08_r)
|
READ16_MEMBER(zn_state::nbajamex_08_r)
|
||||||
@ -2054,6 +2093,7 @@ READ16_MEMBER(zn_state::nbajamex_08_r)
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// possibly a readback from the external soundboard?
|
||||||
READ16_MEMBER(zn_state::nbajamex_80_r)
|
READ16_MEMBER(zn_state::nbajamex_80_r)
|
||||||
{
|
{
|
||||||
UINT32 data = 0xffffffff;
|
UINT32 data = 0xffffffff;
|
||||||
@ -2070,7 +2110,8 @@ ADDRESS_MAP_END
|
|||||||
|
|
||||||
static ADDRESS_MAP_START(nbajamex_map, AS_PROGRAM, 32, zn_state)
|
static ADDRESS_MAP_START(nbajamex_map, AS_PROGRAM, 32, zn_state)
|
||||||
AM_RANGE(0x1f000000, 0x1f1fffff) AM_ROMBANK("bankedroms")
|
AM_RANGE(0x1f000000, 0x1f1fffff) AM_ROMBANK("bankedroms")
|
||||||
AM_RANGE(0x1f200000, 0x1f207fff) AM_RAM AM_SHARE("eeprom")
|
AM_RANGE(0x1f200000, 0x1f7fffff) AM_ROMBANK("bankedroms2")
|
||||||
|
AM_RANGE(0x1fbfff00, 0x1fbfff07) AM_WRITE16(nbajamex_bank_w, 0xffffffff)
|
||||||
AM_RANGE(0x1fbfff08, 0x1fbfff0b) AM_READ16(nbajamex_08_r, 0xffff)
|
AM_RANGE(0x1fbfff08, 0x1fbfff0b) AM_READ16(nbajamex_08_r, 0xffff)
|
||||||
AM_RANGE(0x1fbfff80, 0x1fbfff83) AM_READWRITE16(nbajamex_80_r, nbajamex_80_w, 0xffff)
|
AM_RANGE(0x1fbfff80, 0x1fbfff83) AM_READWRITE16(nbajamex_80_r, nbajamex_80_w, 0xffff)
|
||||||
|
|
||||||
@ -2080,6 +2121,7 @@ ADDRESS_MAP_END
|
|||||||
MACHINE_RESET_MEMBER(zn_state,nbajamex)
|
MACHINE_RESET_MEMBER(zn_state,nbajamex)
|
||||||
{
|
{
|
||||||
membank( "bankedroms" )->set_base( memregion( "bankedroms" )->base() );
|
membank( "bankedroms" )->set_base( memregion( "bankedroms" )->base() );
|
||||||
|
membank( "bankedroms2" )->set_base( memregion( "bankedroms" )->base() + 0x200000 );
|
||||||
}
|
}
|
||||||
|
|
||||||
static ADDRESS_MAP_START(jdredd_map, AS_PROGRAM, 32, zn_state)
|
static ADDRESS_MAP_START(jdredd_map, AS_PROGRAM, 32, zn_state)
|
||||||
@ -4825,7 +4867,7 @@ GAME( 1996, primrag2, atpsx, coh1000w, primrag2, driver_device, 0, ROT0, "Ata
|
|||||||
/* it in every zip file */
|
/* it in every zip file */
|
||||||
GAME( 1995, acpsx, 0, coh1000a, zn, driver_device, 0, ROT0, "Acclaim", "Acclaim PSX", GAME_IS_BIOS_ROOT )
|
GAME( 1995, acpsx, 0, coh1000a, zn, driver_device, 0, ROT0, "Acclaim", "Acclaim PSX", GAME_IS_BIOS_ROOT )
|
||||||
|
|
||||||
GAME( 1996, nbajamex, acpsx, nbajamex, zn, driver_device, 0, ROT0, "Acclaim", "NBA Jam Extreme", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )
|
GAME( 1996, nbajamex, acpsx, nbajamex, zn, driver_device, 0, ROT0, "Acclaim", "NBA Jam Extreme", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
|
||||||
GAME( 1996, jdredd, acpsx, jdredd, jdredd, driver_device, 0, ROT0, "Acclaim", "Judge Dredd (Rev C Dec. 17 1997)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
|
GAME( 1996, jdredd, acpsx, jdredd, jdredd, driver_device, 0, ROT0, "Acclaim", "Judge Dredd (Rev C Dec. 17 1997)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
|
||||||
GAME( 1996, jdreddb, jdredd, jdredd, jdredd, driver_device, 0, ROT0, "Acclaim", "Judge Dredd (Rev B Nov. 26 1997)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
|
GAME( 1996, jdreddb, jdredd, jdredd, jdredd, driver_device, 0, ROT0, "Acclaim", "Judge Dredd (Rev B Nov. 26 1997)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user