trunk/src/emu/cpu/i386/i386dasm.c
| r243105 | r243106 | |
| 98 | 98 | #define ALWAYS64 0x400 |
| 99 | 99 | #define SPECIAL64 0x800 |
| 100 | 100 | #define SPECIAL64_ENT(x) (SPECIAL64 | ((x) << 24)) |
| 101 | | #define GROUP_MOD 0x1000 |
| 102 | 101 | |
| 103 | 102 | struct I386_OPCODE { |
| 104 | 103 | const char *mnemonic; |
| r243105 | r243106 | |
| 426 | 425 | "movupd\0" |
| 427 | 426 | "movsd\0" |
| 428 | 427 | "movss", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, |
| 429 | | {"group0F12", GROUP|GROUP_MOD, 0, 0, 0 }, |
| 430 | 428 | {"movlps\0" |
| 431 | 429 | "movlpd\0" |
| 430 | "movddup\0" |
| 431 | "movsldup", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, |
| 432 | {"movlps\0" |
| 433 | "movlpd\0" |
| 432 | 434 | "???\0" |
| 433 | 435 | "???", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 0 }, |
| 434 | 436 | {"unpcklps\0" |
| r243105 | r243106 | |
| 439 | 441 | "unpckhpd\0" |
| 440 | 442 | "???\0" |
| 441 | 443 | "???", MODRM|VAR_NAME4,PARAM_XMM, PARAM_XMMM, 0 }, |
| 442 | | { "group0F16", GROUP|GROUP_MOD, 0, 0, 0 }, |
| 443 | 444 | {"movhps\0" |
| 444 | 445 | "movhpd\0" |
| 445 | 446 | "???\0" |
| 446 | | "???", MODRM|VAR_NAME4,PARAM_XMMM, PARAM_XMM, 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 }, |
| 447 | 452 | {"group0F18", GROUP, 0, 0, 0 }, |
| 448 | 453 | {"nop_hint", 0, PARAM_RMPTR8, 0, 0 }, |
| 449 | 454 | {"nop_hint", 0, PARAM_RMPTR8, 0, 0 }, |
| r243105 | r243106 | |
| 1805 | 1810 | {"???", 0, 0, 0, 0 } |
| 1806 | 1811 | }; |
| 1807 | 1812 | |
| 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 | | |
| 1848 | 1813 | static const I386_OPCODE group0F18_table[8] = |
| 1849 | 1814 | { |
| 1850 | 1815 | {"prefetchnta", 0, PARAM_RM8, 0, 0 }, |
| r243105 | r243106 | |
| 1951 | 1916 | { "group0F00", group0F00_table }, |
| 1952 | 1917 | { "group0F01", group0F01_table }, |
| 1953 | 1918 | { "group0F0D", group0F0D_table }, |
| 1954 | | { "group0F12", group0F12_table }, |
| 1955 | | { "group0F16", group0F16_table }, |
| 1956 | | { "group0F18", group0F18_table }, |
| 1919 | { "group0F18", group0F18_table }, |
| 1957 | 1920 | { "group0F71", group0F71_table }, |
| 1958 | 1921 | { "group0F72", group0F72_table }, |
| 1959 | 1922 | { "group0F73", group0F73_table }, |
| r243105 | r243106 | |
| 1991 | 1954 | |
| 1992 | 1955 | #define MODRM_REG1 ((modrm >> 3) & 0x7) |
| 1993 | 1956 | #define MODRM_REG2 (modrm & 0x7) |
| 1994 | | #define MODRM_MOD ((modrm >> 6) & 0x3) |
| 1995 | 1957 | |
| 1996 | 1958 | INLINE UINT8 FETCH(void) |
| 1997 | 1959 | { |
| r243105 | r243106 | |
| 2997 | 2959 | handle_modrm( modrm_string ); |
| 2998 | 2960 | for( i=0; i < ARRAY_LENGTH(group_op_table); i++ ) { |
| 2999 | 2961 | if( strcmp(op->mnemonic, group_op_table[i].mnemonic) == 0 ) { |
| 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 ); |
| 2962 | decode_opcode( s, &group_op_table[i].opcode[MODRM_REG1], op1 ); |
| 3004 | 2963 | return; |
| 3005 | 2964 | } |
| 3006 | 2965 | } |
trunk/src/mame/drivers/zn.c
| r243105 | r243106 | |
| 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); |
| 87 | 86 | DECLARE_WRITE16_MEMBER(nbajamex_80_w); |
| 88 | 87 | DECLARE_READ16_MEMBER(nbajamex_08_r); |
| 89 | 88 | DECLARE_READ16_MEMBER(nbajamex_80_r); |
| r243105 | r243106 | |
| 2035 | 2034 | verboselog(0, "acpsx_00_w( %08x, %08x, %08x )\n", offset, data, mem_mask ); |
| 2036 | 2035 | } |
| 2037 | 2036 | |
| 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 | | |
| 2076 | 2037 | WRITE16_MEMBER(zn_state::acpsx_10_w) |
| 2077 | 2038 | { |
| 2078 | 2039 | verboselog(0, "acpsx_10_w( %08x, %08x, %08x )\n", offset, data, mem_mask ); |
| 2079 | 2040 | } |
| 2080 | 2041 | |
| 2081 | | // all 16 bits goes to the external soundboard's latch (see sound test menu) |
| 2082 | 2042 | WRITE16_MEMBER(zn_state::nbajamex_80_w) |
| 2083 | 2043 | { |
| 2084 | 2044 | verboselog(0, "nbajamex_80_w( %08x, %08x, %08x )\n", offset, data, mem_mask ); |
| 2085 | 2045 | psxirq_device *psxirq = (psxirq_device *) machine().device("maincpu:irq"); |
| 2086 | 2046 | psxirq->intin10(1); |
| 2047 | membank( "bankedroms" )->set_base( memregion( "bankedroms" )->base() + (data ? 0xe00000 : 0)); |
| 2087 | 2048 | } |
| 2088 | 2049 | |
| 2089 | 2050 | READ16_MEMBER(zn_state::nbajamex_08_r) |
| r243105 | r243106 | |
| 2093 | 2054 | return data; |
| 2094 | 2055 | } |
| 2095 | 2056 | |
| 2096 | | // possibly a readback from the external soundboard? |
| 2097 | 2057 | READ16_MEMBER(zn_state::nbajamex_80_r) |
| 2098 | 2058 | { |
| 2099 | 2059 | UINT32 data = 0xffffffff; |
| r243105 | r243106 | |
| 2110 | 2070 | |
| 2111 | 2071 | static ADDRESS_MAP_START(nbajamex_map, AS_PROGRAM, 32, zn_state) |
| 2112 | 2072 | AM_RANGE(0x1f000000, 0x1f1fffff) AM_ROMBANK("bankedroms") |
| 2113 | | AM_RANGE(0x1f200000, 0x1f7fffff) AM_ROMBANK("bankedroms2") |
| 2114 | | AM_RANGE(0x1fbfff00, 0x1fbfff07) AM_WRITE16(nbajamex_bank_w, 0xffffffff) |
| 2073 | AM_RANGE(0x1f200000, 0x1f207fff) AM_RAM AM_SHARE("eeprom") |
| 2115 | 2074 | AM_RANGE(0x1fbfff08, 0x1fbfff0b) AM_READ16(nbajamex_08_r, 0xffff) |
| 2116 | 2075 | AM_RANGE(0x1fbfff80, 0x1fbfff83) AM_READWRITE16(nbajamex_80_r, nbajamex_80_w, 0xffff) |
| 2117 | 2076 | |
| r243105 | r243106 | |
| 2121 | 2080 | MACHINE_RESET_MEMBER(zn_state,nbajamex) |
| 2122 | 2081 | { |
| 2123 | 2082 | membank( "bankedroms" )->set_base( memregion( "bankedroms" )->base() ); |
| 2124 | | membank( "bankedroms2" )->set_base( memregion( "bankedroms" )->base() + 0x200000 ); |
| 2125 | 2083 | } |
| 2126 | 2084 | |
| 2127 | 2085 | static ADDRESS_MAP_START(jdredd_map, AS_PROGRAM, 32, zn_state) |
| r243105 | r243106 | |
| 4867 | 4825 | /* it in every zip file */ |
| 4868 | 4826 | GAME( 1995, acpsx, 0, coh1000a, zn, driver_device, 0, ROT0, "Acclaim", "Acclaim PSX", GAME_IS_BIOS_ROOT ) |
| 4869 | 4827 | |
| 4870 | | GAME( 1996, nbajamex, acpsx, nbajamex, zn, driver_device, 0, ROT0, "Acclaim", "NBA Jam Extreme", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 4828 | GAME( 1996, nbajamex, acpsx, nbajamex, zn, driver_device, 0, ROT0, "Acclaim", "NBA Jam Extreme", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_NOT_WORKING ) |
| 4871 | 4829 | GAME( 1996, jdredd, acpsx, jdredd, jdredd, driver_device, 0, ROT0, "Acclaim", "Judge Dredd (Rev C Dec. 17 1997)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 4872 | 4830 | GAME( 1996, jdreddb, jdredd, jdredd, jdredd, driver_device, 0, ROT0, "Acclaim", "Judge Dredd (Rev B Nov. 26 1997)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 4873 | 4831 | |
trunk/src/osd/modules/lib/osdobj_common.h
| r243105 | r243106 | |
| 17 | 17 | #include "modules/osdmodule.h" |
| 18 | 18 | #include "modules/font/font_module.h" |
| 19 | 19 | #include "modules/sound/sound_module.h" |
| 20 | #include "modules/debugger/debug_module.h" |
| 20 | 21 | #include "cliopts.h" |
| 21 | 22 | |
| 22 | 23 | //============================================================ |
| r243105 | r243106 | |
| 104 | 105 | static const options_entry s_option_entries[]; |
| 105 | 106 | }; |
| 106 | 107 | |
| 107 | | class osd_debugger_interface; |
| 108 | | |
| 109 | 108 | // a osd_sound_type is simply a pointer to its alloc function |
| 110 | | typedef osd_debugger_interface *(*osd_debugger_type)(const osd_interface &osd); |
| 109 | typedef debug_module *(*osd_debugger_type)(); |
| 111 | 110 | |
| 112 | 111 | |
| 113 | 112 | // ======================> osd_interface |
| r243105 | r243106 | |
| 224 | 223 | |
| 225 | 224 | protected: |
| 226 | 225 | sound_module* m_sound; |
| 227 | | osd_debugger_interface* m_debugger; |
| 226 | debug_module* m_debugger; |
| 228 | 227 | private: |
| 229 | 228 | //tagmap_t<osd_video_type> m_video_options; |
| 230 | 229 | dynamic_array<const char *> m_video_names; |
| r243105 | r243106 | |
| 233 | 232 | }; |
| 234 | 233 | |
| 235 | 234 | |
| 236 | | class osd_debugger_interface |
| 237 | | { |
| 238 | | public: |
| 239 | | // construction/destruction |
| 240 | | osd_debugger_interface(const osd_interface &osd); |
| 241 | | virtual ~osd_debugger_interface(); |
| 242 | | |
| 243 | | virtual void init_debugger(running_machine &machine) = 0; |
| 244 | | virtual void wait_for_debugger(device_t &device, bool firststop) = 0; |
| 245 | | virtual void debugger_update() = 0; |
| 246 | | virtual void debugger_exit() = 0; |
| 247 | | |
| 248 | | protected: |
| 249 | | const osd_interface& m_osd; |
| 250 | | }; |
| 251 | | |
| 252 | 235 | // this template function creates a stub which constructs a debugger |
| 253 | 236 | template<class _DeviceClass> |
| 254 | | osd_debugger_interface *osd_debugger_creator(const osd_interface &osd) |
| 237 | debug_module *osd_debugger_creator() |
| 255 | 238 | { |
| 256 | | return global_alloc(_DeviceClass(osd)); |
| 239 | return global_alloc(_DeviceClass()); |
| 257 | 240 | } |
| 258 | 241 | |
| 259 | 242 | #endif /* __OSDOBJ_COMMON_H__ */ |