From d7ec6074bbed22b5b82c447dd6a042a579ed810b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Banaan=20Ananas?= Date: Tue, 4 Feb 2014 21:34:45 +0000 Subject: [PATCH] some mn10200 opcode fixes --- src/emu/cpu/mn10200/mn10200.c | 21 +++++++++------------ src/mame/audio/taito_zm.c | 12 ++++++------ src/mame/audio/taito_zm.h | 2 ++ src/mame/drivers/taitogn.c | 10 +++++++++- 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/emu/cpu/mn10200/mn10200.c b/src/emu/cpu/mn10200/mn10200.c index 9d21fddd074..65fd363baf3 100644 --- a/src/emu/cpu/mn10200/mn10200.c +++ b/src/emu/cpu/mn10200/mn10200.c @@ -637,7 +637,7 @@ void mn10200_device::execute_run() case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f: m_cycles -= 1; - mn102_write_byte(m_a[(opcode>>2)&3], (UINT8)m_d[opcode & 3]); + mn102_write_byte(m_a[(opcode>>2)&3], (UINT8)m_d[opcode & 3]); // note: typo in manual m_pc += 1; break; @@ -750,7 +750,7 @@ void mn10200_device::execute_run() // mov dn, (imm16) case 0xc0: case 0xc1: case 0xc2: case 0xc3: - m_cycles -= 2; + m_cycles -= 1; mn102_write_word(mn102_read_word(m_pc+1), (UINT16)m_d[opcode & 3]); m_pc += 3; break; @@ -771,7 +771,7 @@ void mn10200_device::execute_run() // movbu (abs16), dn case 0xcc: case 0xcd: case 0xce: case 0xcf: - m_cycles -= 2; + m_cycles -= 1; m_d[opcode & 3] = mn102_read_byte(mn102_read_word(m_pc+1)); m_pc += 3; break; @@ -1065,7 +1065,7 @@ void mn10200_device::execute_run() // mov (di, an), dm case 1: m_cycles -= 2; - m_d[opcode & 3] = mn102_read_word((m_a[(opcode>>2) & 3] + m_d[(opcode>>4) & 3]) & 0xffffff); + m_d[opcode & 3] = (INT16)mn102_read_word((m_a[(opcode>>2) & 3] + m_d[(opcode>>4) & 3]) & 0xffffff); m_pc += 2; break; @@ -1375,8 +1375,8 @@ void mn10200_device::execute_run() // mov psw, dn case 0xf0: case 0xf1: case 0xf2: case 0xf3: - m_cycles -= 3; - m_d[(opcode>>2) & 3] = m_psw; + m_cycles -= 2; + m_d[opcode & 3] = m_psw; m_pc += 2; break; @@ -1570,7 +1570,6 @@ void mn10200_device::execute_run() do_jsr(m_pc+5+r24u(m_pc+2), m_pc+5); break; - // mov (abs24, an), am case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: case 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: @@ -1612,7 +1611,7 @@ void mn10200_device::execute_run() // addnf imm8, an case 0x0c: case 0x0d: case 0x0e: case 0x0f: m_cycles -= 2; - m_a[opcode & 3] = m_a[opcode & 3] +(INT8)mn102_read_byte(m_pc+2); + m_a[opcode & 3] = m_a[opcode & 3] + (INT8)mn102_read_byte(m_pc+2); m_pc += 3; break; @@ -1766,7 +1765,6 @@ void mn10200_device::execute_run() } break; - // bnc label8 case 0xfe: if(!(m_psw & 0x02)) { @@ -1845,7 +1843,7 @@ void mn10200_device::execute_run() // or imm16, dn case 0x40: case 0x41: case 0x42: case 0x43: - m_cycles -= 3; + m_cycles -= 2; test_nz16(m_d[opcode & 3] |= mn102_read_word(m_pc+2)); m_pc += 4; break; @@ -1876,11 +1874,10 @@ void mn10200_device::execute_run() case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: m_cycles -= 2; - m_d[opcode & 3] = (INT16)mn102_read_word((m_a[(opcode>>2) & 3] + (INT16)mn102_read_byte(m_pc+2)) & 0xffffff) & 0xffffff; + m_d[opcode & 3] = (INT16)mn102_read_word((m_a[(opcode>>2) & 3] + (INT16)mn102_read_word(m_pc+2)) & 0xffffff); m_pc += 4; break; - default: unemul(); break; diff --git a/src/mame/audio/taito_zm.c b/src/mame/audio/taito_zm.c index 4be3f177b9e..dea2a76efd4 100644 --- a/src/mame/audio/taito_zm.c +++ b/src/mame/audio/taito_zm.c @@ -103,15 +103,15 @@ WRITE8_MEMBER(taito_zoom_device::tms_ctrl_w) } -static ADDRESS_MAP_START(taitozoom_map, AS_PROGRAM, 16, driver_device ) +ADDRESS_MAP_START( taitozoom_mn_map, AS_PROGRAM, 16, driver_device ) AM_RANGE(0x080000, 0x0fffff) AM_ROM AM_REGION("mn10200", 0) AM_RANGE(0x400000, 0x40ffff) AM_RAM - AM_RANGE(0x800000, 0x800fff) AM_DEVREADWRITE("zsg2", zsg2_device, read, write) - AM_RANGE(0xe00000, 0xe000ff) AM_DEVREADWRITE8("taito_zoom", taito_zoom_device, shared_ram_r, shared_ram_w, 0xffff) // M66220FP for comms with maincpu + AM_RANGE(0x800000, 0x8007ff) AM_DEVREADWRITE("zsg2", zsg2_device, read, write) AM_RANGE(0xc00000, 0xc00001) AM_RAM // TMS57002 comms + AM_RANGE(0xe00000, 0xe000ff) AM_DEVREADWRITE8("taito_zoom", taito_zoom_device, shared_ram_r, shared_ram_w, 0xffff) // M66220FP for comms with maincpu ADDRESS_MAP_END -static ADDRESS_MAP_START(taitozoom_io_map, AS_IO, 8, driver_device ) +static ADDRESS_MAP_START( taitozoom_mn_io_map, AS_IO, 8, driver_device ) AM_RANGE(MN10200_PORT1, MN10200_PORT1) AM_DEVREADWRITE("taito_zoom", taito_zoom_device, tms_ctrl_r, tms_ctrl_w) ADDRESS_MAP_END @@ -156,8 +156,8 @@ MACHINE_CONFIG_FRAGMENT( taito_zoom_sound ) /* basic machine hardware */ MCFG_TAITO_ZOOM_ADD("taito_zoom") MCFG_CPU_ADD("mn10200", MN10200, XTAL_25MHz/2) - MCFG_CPU_PROGRAM_MAP(taitozoom_map) - MCFG_CPU_IO_MAP(taitozoom_io_map) + MCFG_CPU_PROGRAM_MAP(taitozoom_mn_map) + MCFG_CPU_IO_MAP(taitozoom_mn_io_map) MCFG_QUANTUM_TIME(attotime::from_hz(60000)) diff --git a/src/mame/audio/taito_zm.h b/src/mame/audio/taito_zm.h index 89a2803ee1e..36d2f0ef308 100644 --- a/src/mame/audio/taito_zm.h +++ b/src/mame/audio/taito_zm.h @@ -2,6 +2,8 @@ #include "cpu/tms57002/tms57002.h" #include "sound/zsg2.h" +ADDRESS_MAP_EXTERN(taitozoom_mn_map, 16); + class taito_zoom_device : public device_t { diff --git a/src/mame/drivers/taitogn.c b/src/mame/drivers/taitogn.c index b2929597210..62d09004c09 100644 --- a/src/mame/drivers/taitogn.c +++ b/src/mame/drivers/taitogn.c @@ -626,6 +626,11 @@ static ADDRESS_MAP_START( taitogn_mp_map, AS_PROGRAM, 32, taitogn_state ) AM_IMPORT_FROM(taitogn_map) ADDRESS_MAP_END +static ADDRESS_MAP_START( taitogn_mn_map, AS_PROGRAM, 16, taitogn_state ) + AM_RANGE(0x080000, 0x0fffff) AM_DEVREAD("pgmflash", intelfsh16_device, read) + AM_IMPORT_FROM( taitozoom_mn_map ) +ADDRESS_MAP_END + SLOT_INTERFACE_START(slot_ataflash) SLOT_INTERFACE("ataflash", ATA_FLASH_PCCARD) SLOT_INTERFACE_END @@ -679,6 +684,9 @@ static MACHINE_CONFIG_START( coh3002t, taitogn_state ) MCFG_ADDRESS_MAP_BANK_STRIDE(0x2000000) MCFG_FRAGMENT_ADD( taito_zoom_sound ) + MCFG_CPU_MODIFY("mn10200") + MCFG_CPU_PROGRAM_MAP(taitogn_mn_map) + MCFG_SOUND_REPLACE("zsg2", ZSG2, XTAL_25MHz/2) MCFG_ZSG2_EXT_READ_HANDLER(READ32(taitogn_state, zsg2_ext_r)) @@ -814,7 +822,7 @@ INPUT_PORTS_END ROM_LOAD16_WORD_BIOS(0, "flash.u30", 0x000000, 0x200000, CRC(c48c8236) SHA1(c6dad60266ce2ff635696bc0d91903c543273559) ) \ ROM_SYSTEM_BIOS( 1, "v2", "G-NET Bios v2" ) \ ROM_LOAD16_WORD_BIOS(1, "flashv2.u30", 0x000000, 0x200000, CRC(CAE462D3) SHA1(f1b10846a8423d9fe021191c5876190857c3d2a4) ) \ - ROM_REGION32_LE( 0x80000, "mn10200", 0) \ + ROM_REGION( 0x80000, "mn10200", 0) \ ROM_FILL( 0, 0x80000, 0xff) \ ROM_REGION32_LE( 0x600000, "zsg2", 0) \ ROM_FILL( 0, 0x600000, 0xff)