From 56b43d370ef19fe9c3046027e112bea9cd4282bb Mon Sep 17 00:00:00 2001 From: yz70s Date: Sat, 24 Jan 2015 18:53:01 +0100 Subject: [PATCH 1/4] i386: add disassembly of opcodes MOVHLPS and movLHPS (nw) They differentiate from movlps and movhps by bits 7-6 of the modrm byte --- src/emu/cpu/i386/i386dasm.c | 63 ++++++++++++++++++++++++++++++------- 1 file changed, 52 insertions(+), 11 deletions(-) diff --git a/src/emu/cpu/i386/i386dasm.c b/src/emu/cpu/i386/i386dasm.c index 57737434e1e..2a74503d81e 100644 --- a/src/emu/cpu/i386/i386dasm.c +++ b/src/emu/cpu/i386/i386dasm.c @@ -98,6 +98,7 @@ enum #define ALWAYS64 0x400 #define SPECIAL64 0x800 #define SPECIAL64_ENT(x) (SPECIAL64 | ((x) << 24)) +#define GROUP_MOD 0x1000 struct I386_OPCODE { const char *mnemonic; @@ -425,10 +426,7 @@ static const I386_OPCODE i386_opcode_table2[256] = "movupd\0" "movsd\0" "movss", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, - {"movlps\0" - "movlpd\0" - "movddup\0" - "movsldup", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, + {"group0F12", GROUP|GROUP_MOD, 0, 0, 0 }, {"movlps\0" "movlpd\0" "???\0" @@ -441,14 +439,11 @@ static const I386_OPCODE i386_opcode_table2[256] = "unpckhpd\0" "???\0" "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, + { "group0F16", GROUP|GROUP_MOD, 0, 0, 0 }, {"movhps\0" "movhpd\0" "???\0" - "movshdup", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, - {"movhps\0" - "movhpd\0" - "???\0" - "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, + "???", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, {"group0F18", GROUP, 0, 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 } }; +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] = { {"prefetchnta", 0, PARAM_RM8, 0, 0 }, @@ -1916,7 +1951,9 @@ static const GROUP_OP group_op_table[] = { "group0F00", group0F00_table }, { "group0F01", group0F01_table }, { "group0F0D", group0F0D_table }, - { "group0F18", group0F18_table }, + { "group0F12", group0F12_table }, + { "group0F16", group0F16_table }, + { "group0F18", group0F18_table }, { "group0F71", group0F71_table }, { "group0F72", group0F72_table }, { "group0F73", group0F73_table }, @@ -1954,6 +1991,7 @@ static UINT8 curmode; #define MODRM_REG1 ((modrm >> 3) & 0x7) #define MODRM_REG2 (modrm & 0x7) +#define MODRM_MOD ((modrm >> 6) & 0x3) INLINE UINT8 FETCH(void) { @@ -2959,7 +2997,10 @@ static void decode_opcode(char *s, const I386_OPCODE *op, UINT8 op1) handle_modrm( modrm_string ); for( i=0; i < ARRAY_LENGTH(group_op_table); i++ ) { if( strcmp(op->mnemonic, group_op_table[i].mnemonic) == 0 ) { - decode_opcode( s, &group_op_table[i].opcode[MODRM_REG1], op1 ); + 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 ); return; } } From 50a9cf0de42c939a8a161882254e06210875ce22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20St=C3=B6neberg?= Date: Sat, 24 Jan 2015 20:13:43 +0100 Subject: [PATCH 2/4] fixed unterminated strings in powerpc debugger (nw) --- src/emu/cpu/powerpc/ppccom.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/emu/cpu/powerpc/ppccom.c b/src/emu/cpu/powerpc/ppccom.c index b0b12409e7f..22f9209d3a5 100644 --- a/src/emu/cpu/powerpc/ppccom.c +++ b/src/emu/cpu/powerpc/ppccom.c @@ -693,6 +693,8 @@ void ppc_device::device_start() m_hotspot_select = 0; memset(m_hotspot, 0, sizeof(m_hotspot)); + m_debugger_temp = 0; + m_cache_line_size = 32; m_cpu_clock = clock(); m_program = &space(AS_PROGRAM); From 3d28212fbb5c3b27a49d02d8e222d87ca3a9a6a2 Mon Sep 17 00:00:00 2001 From: arbee Date: Sat, 24 Jan 2015 21:17:59 -0500 Subject: [PATCH 3/4] nbajamex: Implemented ROM banking, game coins up and is playable. [R. Belmont, Peter Ferrie] --- src/mame/drivers/zn.c | 46 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/src/mame/drivers/zn.c b/src/mame/drivers/zn.c index af0ac51738c..3c0a1103d1a 100644 --- a/src/mame/drivers/zn.c +++ b/src/mame/drivers/zn.c @@ -83,6 +83,7 @@ public: DECLARE_READ16_MEMBER(bam2_unk_r); DECLARE_WRITE16_MEMBER(acpsx_00_w); DECLARE_WRITE16_MEMBER(acpsx_10_w); + DECLARE_WRITE16_MEMBER(nbajamex_bank_w); DECLARE_WRITE16_MEMBER(nbajamex_80_w); DECLARE_READ16_MEMBER(nbajamex_08_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 ); } +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) { 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) { verboselog(0, "nbajamex_80_w( %08x, %08x, %08x )\n", offset, data, mem_mask ); psxirq_device *psxirq = (psxirq_device *) machine().device("maincpu:irq"); psxirq->intin10(1); - membank( "bankedroms" )->set_base( memregion( "bankedroms" )->base() + (data ? 0xe00000 : 0)); } READ16_MEMBER(zn_state::nbajamex_08_r) @@ -2054,6 +2093,7 @@ READ16_MEMBER(zn_state::nbajamex_08_r) return data; } +// possibly a readback from the external soundboard? READ16_MEMBER(zn_state::nbajamex_80_r) { UINT32 data = 0xffffffff; @@ -2070,7 +2110,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START(nbajamex_map, AS_PROGRAM, 32, zn_state) 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(0x1fbfff80, 0x1fbfff83) AM_READWRITE16(nbajamex_80_r, nbajamex_80_w, 0xffff) @@ -2080,6 +2121,7 @@ ADDRESS_MAP_END MACHINE_RESET_MEMBER(zn_state,nbajamex) { 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) From e847183556eec108798af2774a87977d83164d7b Mon Sep 17 00:00:00 2001 From: arbee Date: Sat, 24 Jan 2015 21:21:05 -0500 Subject: [PATCH 4/4] Games promoted from GAME_NOT_WORKING ------------------------------------ NBA Jam Extreme [R. Belmont, Peter Ferrie] --- src/mame/drivers/zn.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mame/drivers/zn.c b/src/mame/drivers/zn.c index 3c0a1103d1a..5dbcb907960 100644 --- a/src/mame/drivers/zn.c +++ b/src/mame/drivers/zn.c @@ -4867,7 +4867,7 @@ GAME( 1996, primrag2, atpsx, coh1000w, primrag2, driver_device, 0, ROT0, "Ata /* it in every zip file */ 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, jdreddb, jdredd, jdredd, jdredd, driver_device, 0, ROT0, "Acclaim", "Judge Dredd (Rev B Nov. 26 1997)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )