trunk/src/emu/cpu/i386/i386dasm.c
| r243107 | r243108 | |
| 98 | 98 | #define ALWAYS64 0x400 |
| 99 | 99 | #define SPECIAL64 0x800 |
| 100 | 100 | #define SPECIAL64_ENT(x) (SPECIAL64 | ((x) << 24)) |
| 101 | #define GROUP_MOD 0x1000 |
| 101 | 102 | |
| 102 | 103 | struct I386_OPCODE { |
| 103 | 104 | const char *mnemonic; |
| r243107 | r243108 | |
| 425 | 426 | "movupd\0" |
| 426 | 427 | "movsd\0" |
| 427 | 428 | "movss", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, |
| 429 | {"group0F12", GROUP|GROUP_MOD, 0, 0, 0 }, |
| 428 | 430 | {"movlps\0" |
| 429 | 431 | "movlpd\0" |
| 430 | | "movddup\0" |
| 431 | | "movsldup", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, |
| 432 | | {"movlps\0" |
| 433 | | "movlpd\0" |
| 434 | 432 | "???\0" |
| 435 | 433 | "???", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, |
| 436 | 434 | {"unpcklps\0" |
| r243107 | r243108 | |
| 441 | 439 | "unpckhpd\0" |
| 442 | 440 | "???\0" |
| 443 | 441 | "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, |
| 442 | { "group0F16", GROUP|GROUP_MOD, 0, 0, 0 }, |
| 444 | 443 | {"movhps\0" |
| 445 | 444 | "movhpd\0" |
| 446 | 445 | "???\0" |
| 447 | | "movshdup", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, |
| 448 | | {"movhps\0" |
| 449 | | "movhpd\0" |
| 450 | | "???\0" |
| 451 | | "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, |
| 446 | "???", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, |
| 452 | 447 | {"group0F18", GROUP, 0, 0, 0 }, |
| 453 | 448 | {"nop_hint", 0, PARAM_RMPTR8, 0, 0 }, |
| 454 | 449 | {"nop_hint", 0, PARAM_RMPTR8, 0, 0 }, |
| r243107 | r243108 | |
| 1810 | 1805 | {"???", 0, 0, 0, 0 } |
| 1811 | 1806 | }; |
| 1812 | 1807 | |
| 1808 | static const I386_OPCODE group0F12_table[4] = |
| 1809 | { |
| 1810 | { "movlps\0" |
| 1811 | "movlpd\0" |
| 1812 | "movddup\0" |
| 1813 | "movsldup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, |
| 1814 | { "movlps\0" |
| 1815 | "movlpd\0" |
| 1816 | "movddup\0" |
| 1817 | "movsldup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, |
| 1818 | { "movlps\0" |
| 1819 | "movlpd\0" |
| 1820 | "movddup\0" |
| 1821 | "movsldup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, |
| 1822 | { "movhlps\0" |
| 1823 | "???\0" |
| 1824 | "movddup\0" |
| 1825 | "movsldup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 } |
| 1826 | }; |
| 1827 | |
| 1828 | static const I386_OPCODE group0F16_table[4] = |
| 1829 | { |
| 1830 | { "movhps\0" |
| 1831 | "movhpd\0" |
| 1832 | "???\0" |
| 1833 | "movshdup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, |
| 1834 | { "movhps\0" |
| 1835 | "movhpd\0" |
| 1836 | "???\0" |
| 1837 | "movshdup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, |
| 1838 | { "movhps\0" |
| 1839 | "movhpd\0" |
| 1840 | "???\0" |
| 1841 | "movshdup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, |
| 1842 | { "movlhps\0" |
| 1843 | "movhpd\0" |
| 1844 | "???\0" |
| 1845 | "movshdup", VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 } |
| 1846 | }; |
| 1847 | |
| 1813 | 1848 | static const I386_OPCODE group0F18_table[8] = |
| 1814 | 1849 | { |
| 1815 | 1850 | {"prefetchnta", 0, PARAM_RM8, 0, 0 }, |
| r243107 | r243108 | |
| 1916 | 1951 | { "group0F00", group0F00_table }, |
| 1917 | 1952 | { "group0F01", group0F01_table }, |
| 1918 | 1953 | { "group0F0D", group0F0D_table }, |
| 1919 | | { "group0F18", group0F18_table }, |
| 1954 | { "group0F12", group0F12_table }, |
| 1955 | { "group0F16", group0F16_table }, |
| 1956 | { "group0F18", group0F18_table }, |
| 1920 | 1957 | { "group0F71", group0F71_table }, |
| 1921 | 1958 | { "group0F72", group0F72_table }, |
| 1922 | 1959 | { "group0F73", group0F73_table }, |
| r243107 | r243108 | |
| 1954 | 1991 | |
| 1955 | 1992 | #define MODRM_REG1 ((modrm >> 3) & 0x7) |
| 1956 | 1993 | #define MODRM_REG2 (modrm & 0x7) |
| 1994 | #define MODRM_MOD ((modrm >> 6) & 0x3) |
| 1957 | 1995 | |
| 1958 | 1996 | INLINE UINT8 FETCH(void) |
| 1959 | 1997 | { |
| r243107 | r243108 | |
| 2959 | 2997 | handle_modrm( modrm_string ); |
| 2960 | 2998 | for( i=0; i < ARRAY_LENGTH(group_op_table); i++ ) { |
| 2961 | 2999 | if( strcmp(op->mnemonic, group_op_table[i].mnemonic) == 0 ) { |
| 2962 | | decode_opcode( s, &group_op_table[i].opcode[MODRM_REG1], op1 ); |
| 3000 | if (op->flags & GROUP_MOD) |
| 3001 | decode_opcode( s, &group_op_table[i].opcode[MODRM_MOD], op1 ); |
| 3002 | else |
| 3003 | decode_opcode( s, &group_op_table[i].opcode[MODRM_REG1], op1 ); |
| 2963 | 3004 | return; |
| 2964 | 3005 | } |
| 2965 | 3006 | } |
trunk/src/mame/drivers/zn.c
| r243107 | r243108 | |
| 83 | 83 | DECLARE_READ16_MEMBER(bam2_unk_r); |
| 84 | 84 | DECLARE_WRITE16_MEMBER(acpsx_00_w); |
| 85 | 85 | DECLARE_WRITE16_MEMBER(acpsx_10_w); |
| 86 | DECLARE_WRITE16_MEMBER(nbajamex_bank_w); |
| 86 | 87 | DECLARE_WRITE16_MEMBER(nbajamex_80_w); |
| 87 | 88 | DECLARE_READ16_MEMBER(nbajamex_08_r); |
| 88 | 89 | DECLARE_READ16_MEMBER(nbajamex_80_r); |
| r243107 | r243108 | |
| 2034 | 2035 | verboselog(0, "acpsx_00_w( %08x, %08x, %08x )\n", offset, data, mem_mask ); |
| 2035 | 2036 | } |
| 2036 | 2037 | |
| 2038 | WRITE16_MEMBER(zn_state::nbajamex_bank_w) |
| 2039 | { |
| 2040 | UINT32 newbank = 0; |
| 2041 | |
| 2042 | verboselog(0, "nbajamex_bank_w( %08x, %08x, %08x )\n", offset, data, mem_mask ); |
| 2043 | |
| 2044 | if (offset > 1) |
| 2045 | { |
| 2046 | logerror("Unknown banking offset %x!\n", offset); |
| 2047 | } |
| 2048 | |
| 2049 | if (offset == 1) |
| 2050 | { |
| 2051 | data -= 1; |
| 2052 | } |
| 2053 | |
| 2054 | if (data <= 1) |
| 2055 | { |
| 2056 | newbank = (data * 0x400000); |
| 2057 | } |
| 2058 | else if (data >= 0x10) |
| 2059 | { |
| 2060 | data -= 0x10; |
| 2061 | newbank = (data * 0x400000); |
| 2062 | newbank += 0x200000; |
| 2063 | } |
| 2064 | |
| 2065 | if (offset == 0) |
| 2066 | { |
| 2067 | membank( "bankedroms" )->set_base( memregion( "bankedroms" )->base() + newbank); |
| 2068 | } |
| 2069 | else if (offset == 1) |
| 2070 | { |
| 2071 | newbank += 0x200000; |
| 2072 | membank( "bankedroms2" )->set_base( memregion( "bankedroms" )->base() + newbank); |
| 2073 | } |
| 2074 | } |
| 2075 | |
| 2037 | 2076 | WRITE16_MEMBER(zn_state::acpsx_10_w) |
| 2038 | 2077 | { |
| 2039 | 2078 | verboselog(0, "acpsx_10_w( %08x, %08x, %08x )\n", offset, data, mem_mask ); |
| 2040 | 2079 | } |
| 2041 | 2080 | |
| 2081 | // all 16 bits goes to the external soundboard's latch (see sound test menu) |
| 2042 | 2082 | WRITE16_MEMBER(zn_state::nbajamex_80_w) |
| 2043 | 2083 | { |
| 2044 | 2084 | verboselog(0, "nbajamex_80_w( %08x, %08x, %08x )\n", offset, data, mem_mask ); |
| 2045 | 2085 | psxirq_device *psxirq = (psxirq_device *) machine().device("maincpu:irq"); |
| 2046 | 2086 | psxirq->intin10(1); |
| 2047 | | membank( "bankedroms" )->set_base( memregion( "bankedroms" )->base() + (data ? 0xe00000 : 0)); |
| 2048 | 2087 | } |
| 2049 | 2088 | |
| 2050 | 2089 | READ16_MEMBER(zn_state::nbajamex_08_r) |
| r243107 | r243108 | |
| 2054 | 2093 | return data; |
| 2055 | 2094 | } |
| 2056 | 2095 | |
| 2096 | // possibly a readback from the external soundboard? |
| 2057 | 2097 | READ16_MEMBER(zn_state::nbajamex_80_r) |
| 2058 | 2098 | { |
| 2059 | 2099 | UINT32 data = 0xffffffff; |
| r243107 | r243108 | |
| 2070 | 2110 | |
| 2071 | 2111 | static ADDRESS_MAP_START(nbajamex_map, AS_PROGRAM, 32, zn_state) |
| 2072 | 2112 | AM_RANGE(0x1f000000, 0x1f1fffff) AM_ROMBANK("bankedroms") |
| 2073 | | AM_RANGE(0x1f200000, 0x1f207fff) AM_RAM AM_SHARE("eeprom") |
| 2113 | AM_RANGE(0x1f200000, 0x1f7fffff) AM_ROMBANK("bankedroms2") |
| 2114 | AM_RANGE(0x1fbfff00, 0x1fbfff07) AM_WRITE16(nbajamex_bank_w, 0xffffffff) |
| 2074 | 2115 | AM_RANGE(0x1fbfff08, 0x1fbfff0b) AM_READ16(nbajamex_08_r, 0xffff) |
| 2075 | 2116 | AM_RANGE(0x1fbfff80, 0x1fbfff83) AM_READWRITE16(nbajamex_80_r, nbajamex_80_w, 0xffff) |
| 2076 | 2117 | |
| r243107 | r243108 | |
| 2080 | 2121 | MACHINE_RESET_MEMBER(zn_state,nbajamex) |
| 2081 | 2122 | { |
| 2082 | 2123 | membank( "bankedroms" )->set_base( memregion( "bankedroms" )->base() ); |
| 2124 | membank( "bankedroms2" )->set_base( memregion( "bankedroms" )->base() + 0x200000 ); |
| 2083 | 2125 | } |
| 2084 | 2126 | |
| 2085 | 2127 | static ADDRESS_MAP_START(jdredd_map, AS_PROGRAM, 32, zn_state) |
| r243107 | r243108 | |
| 4825 | 4867 | /* it in every zip file */ |
| 4826 | 4868 | GAME( 1995, acpsx, 0, coh1000a, zn, driver_device, 0, ROT0, "Acclaim", "Acclaim PSX", GAME_IS_BIOS_ROOT ) |
| 4827 | 4869 | |
| 4828 | | GAME( 1996, nbajamex, acpsx, nbajamex, zn, driver_device, 0, ROT0, "Acclaim", "NBA Jam Extreme", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_NOT_WORKING ) |
| 4870 | GAME( 1996, nbajamex, acpsx, nbajamex, zn, driver_device, 0, ROT0, "Acclaim", "NBA Jam Extreme", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 4829 | 4871 | GAME( 1996, jdredd, acpsx, jdredd, jdredd, driver_device, 0, ROT0, "Acclaim", "Judge Dredd (Rev C Dec. 17 1997)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 4830 | 4872 | GAME( 1996, jdreddb, jdredd, jdredd, jdredd, driver_device, 0, ROT0, "Acclaim", "Judge Dredd (Rev B Nov. 26 1997)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 4831 | 4873 | |