From 44cf0a31600e35dc73d4f5dd0130be32f1430e20 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Mon, 10 Feb 2020 19:15:32 +0100 Subject: More xavix2 (nw) --- src/devices/cpu/xavix2/xavix2.cpp | 13 ++++++++++--- src/devices/cpu/xavix2/xavix2d.cpp | 26 +++++++++++++++++++++----- src/devices/cpu/xavix2/xavix2d.h | 1 + src/mame/drivers/xavix2.cpp | 2 +- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/devices/cpu/xavix2/xavix2.cpp b/src/devices/cpu/xavix2/xavix2.cpp index 073e9de1efb..e2d9959e70f 100644 --- a/src/devices/cpu/xavix2/xavix2.cpp +++ b/src/devices/cpu/xavix2/xavix2.cpp @@ -12,7 +12,7 @@ const u8 xavix2_device::bpo[8] = { 4, 3, 3, 2, 2, 2, 2, 1 }; xavix2_device::xavix2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : cpu_device(mconfig, XAVIX2, tag, owner, clock) - , m_program_config("program", ENDIANNESS_LITTLE, 32, 30) + , m_program_config("program", ENDIANNESS_LITTLE, 32, 32) { } @@ -49,7 +49,7 @@ void xavix2_device::device_start() void xavix2_device::device_reset() { - m_pc = 1 << 24; + m_pc = 0x40000000; } uint32_t xavix2_device::execute_min_cycles() const noexcept @@ -114,7 +114,14 @@ void xavix2_device::execute_run() case 0x0c: case 0x0d: m_r[r1(opcode)] = do_or (m_r[r2(opcode)], val19u(opcode)); break; case 0x0e: case 0x0f: m_r[r1(opcode)] = do_xor(m_r[r2(opcode)], val19u(opcode)); break; - // 10-1f + case 0x10: case 0x11: m_r[r1(opcode)] = (s8)m_program->read_byte(m_r[r2(opcode)] + val19s(opcode)); break; + case 0x12: case 0x13: m_r[r1(opcode)] = m_program->read_byte(m_r[r2(opcode)] + val19s(opcode)); break; + case 0x14: case 0x15: m_r[r1(opcode)] = (s16)m_program->read_word(m_r[r2(opcode)] + val19s(opcode)); break; + case 0x16: case 0x17: m_r[r1(opcode)] = m_program->read_word(m_r[r2(opcode)] + val19s(opcode)); break; + case 0x18: case 0x19: m_r[r1(opcode)] = m_program->read_dword(m_r[r2(opcode)] + val19s(opcode)); break; + case 0x1a: case 0x1b: m_program->write_byte(m_r[r2(opcode)] + val19s(opcode), m_r[r1(opcode)]); break; + case 0x1c: case 0x1d: m_program->write_byte(m_r[r2(opcode)] + val19s(opcode), m_r[r1(opcode)]); break; + case 0x1e: case 0x1f: m_program->write_byte(m_r[r2(opcode)] + val19s(opcode), m_r[r1(opcode)]); break; case 0x20: case 0x21: m_r[r1(opcode)] = do_sub(m_r[r1(opcode)], val14s(opcode)); break; case 0x22: case 0x23: m_r[r1(opcode)] = val14h(opcode); break; diff --git a/src/devices/cpu/xavix2/xavix2d.cpp b/src/devices/cpu/xavix2/xavix2d.cpp index 8356a5a1085..93cbfee545c 100644 --- a/src/devices/cpu/xavix2/xavix2d.cpp +++ b/src/devices/cpu/xavix2/xavix2d.cpp @@ -91,6 +91,17 @@ std::string xavix2_disassembler::val3u() return util::string_format("%x", (m_opcode >> 16) & 0x7); } +std::string xavix2_disassembler::off19s() +{ + u16 r = m_opcode & 0x7ffff; + if(r & 0x40000) + return util::string_format(" - %05x", 0x80000 - r); + else if(r) + return util::string_format(" + %05x", r); + else + return ""; +} + std::string xavix2_disassembler::off11s() { u16 r = (m_opcode >> 8) & 0x7ff; @@ -164,10 +175,15 @@ offs_t xavix2_disassembler::disassemble(std::ostream &stream, offs_t pc, const d case 0x0c: case 0x0d: util::stream_format(stream, "%s = %s | %s", r1(), r2(), val19u()); break; case 0x0e: case 0x0f: util::stream_format(stream, "%s = %s ^ %s", r1(), r2(), val19u()); break; - // 10-1f + case 0x10: case 0x11: util::stream_format(stream, "%s = (%s%s).bs", r1(), r2(), off19s()); break; + case 0x12: case 0x13: util::stream_format(stream, "%s = (%s%s).bu", r1(), r2(), off19s()); break; + case 0x14: case 0x15: util::stream_format(stream, "%s = (%s%s).ws", r1(), r2(), off19s()); break; + case 0x16: case 0x17: util::stream_format(stream, "%s = (%s%s).wu", r1(), r2(), off19s()); break; + case 0x18: case 0x19: util::stream_format(stream, "%s = (%s%s).l", r1(), r2(), off19s()); break; + case 0x1a: case 0x1b: util::stream_format(stream, "(%s%s).b = %s", r2(), off19s(), r1()); break; + case 0x1c: case 0x1d: util::stream_format(stream, "(%s%s).w = %s", r2(), off19s(), r1()); break; + case 0x1e: case 0x1f: util::stream_format(stream, "(%s%s).l = %s", r2(), off19s(), r1()); break; - // case 0x20: util::stream_format(stream, "jmp %s", adr16()); break; - // case 0x21: util::stream_format(stream, "jsr %s", adr16()); flags = STEP_OVER; break; case 0x20: case 0x21: util::stream_format(stream, "%s += %s", r1(), val14s()); break; case 0x22: case 0x23: util::stream_format(stream, "%s = %s", r1(), val14h()); break; case 0x24: case 0x25: util::stream_format(stream, "%s -= %s", r1(), val14s()); break; @@ -265,8 +281,8 @@ offs_t xavix2_disassembler::disassemble(std::ostream &stream, offs_t pc, const d case 0xe0: util::stream_format(stream, "jmp lr"); flags = STEP_OUT; break; case 0xe1: util::stream_format(stream, "rti1"); flags = STEP_OUT; break; - // e2 - case 0xe3: util::stream_format(stream, "rti2"); flags = STEP_OUT; break; + case 0xe2: util::stream_format(stream, "rti2"); flags = STEP_OUT; break; + case 0xe3: util::stream_format(stream, "rti3"); flags = STEP_OUT; break; // e4-fb case 0xf8: util::stream_format(stream, "di"); break; case 0xf9: util::stream_format(stream, "ei"); break; diff --git a/src/devices/cpu/xavix2/xavix2d.h b/src/devices/cpu/xavix2/xavix2d.h index ed4a11a5ca7..c6964b97ec7 100644 --- a/src/devices/cpu/xavix2/xavix2d.h +++ b/src/devices/cpu/xavix2/xavix2d.h @@ -35,6 +35,7 @@ private: std::string val11u(); std::string val6s(); std::string val3u(); + std::string off19s(); std::string off11s(); std::string off6s(); std::string off3s(); diff --git a/src/mame/drivers/xavix2.cpp b/src/mame/drivers/xavix2.cpp index e47bccf231b..085969d7e02 100644 --- a/src/mame/drivers/xavix2.cpp +++ b/src/mame/drivers/xavix2.cpp @@ -49,7 +49,7 @@ void xavix2_state::mem(address_map &map) map(0x00200000, 0x00ffffff).rom().region("maincpu", 0x200000); - map(0x01000000, 0x01ffffff).rom().region("maincpu", 0); + map(0x40000000, 0x40ffffff).rom().region("maincpu", 0); } uint32_t xavix2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -- cgit v1.2.3