summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Olivier Galibert <olivier.galibert@lne.fr>2020-02-10 14:59:51 +0100
committer Olivier Galibert <olivier.galibert@lne.fr>2020-02-10 14:59:51 +0100
commit209a097492e80cac2055fcc5eb68776cc27fe121 (patch)
tree9c767957f20349ed1e0c792b9455f20fd3cf9b05
parentafb7ac7399439505adf63652214fcb6e1dd91822 (diff)
xavix2: Work on branches [O. Galibert, N. Gilbert]
-rw-r--r--src/devices/cpu/xavix2/xavix2.cpp11
-rw-r--r--src/devices/cpu/xavix2/xavix2.h3
-rw-r--r--src/devices/cpu/xavix2/xavix2d.cpp22
-rw-r--r--src/mame/drivers/xavix2.cpp2
4 files changed, 22 insertions, 16 deletions
diff --git a/src/devices/cpu/xavix2/xavix2.cpp b/src/devices/cpu/xavix2/xavix2.cpp
index 2a48970fd12..6bc9786884b 100644
--- a/src/devices/cpu/xavix2/xavix2.cpp
+++ b/src/devices/cpu/xavix2/xavix2.cpp
@@ -193,14 +193,17 @@ void xavix2_device::execute_run()
// d0-d1
case 0xd2: if(m_f & F_Z) npc = m_pc + val8s(opcode); break;
case 0xd3: if((m_f & F_Z) || ((m_f & F_N) && !(m_f & F_V)) || ((m_f & F_V) && !(m_f & F_N))) npc = m_pc + val8s(opcode); break;
- // d4
+ case 0xd4: if(m_f & F_N) npc = m_pc + val8s(opcode); break;
case 0xd5: npc = m_pc + val8s(opcode); break;
- // d6
- case 0xd7: if((m_f & F_Z) || (m_f & F_N)) npc = m_pc + val8s(opcode); break;
+ case 0xd6: if(m_f & F_C) npc = m_pc + val8s(opcode); break;
+ case 0xd7: if((m_f & F_Z) || (m_f & F_C)) npc = m_pc + val8s(opcode); break;
// d8-d9
case 0xda: if(!(m_f & F_Z)) npc = m_pc + val8s(opcode); break;
case 0xdb: if((!(m_f & F_Z) && (m_f & F_N) && (m_f & F_V)) || (!(m_f & F_Z) && !(m_f & F_V) && !(m_f & F_N))) npc = m_pc + val8s(opcode); break;
- // dc-df
+ case 0xdc: if(!(m_f & F_N)) npc = m_pc + val8s(opcode); break;
+ // dd
+ case 0xde: if(!(m_f & F_C)) npc = m_pc + val8s(opcode); break;
+ case 0xdf: if(!(m_f & F_Z) && !(m_f & F_C)) npc = m_pc + val8s(opcode); break;
case 0xe0: npc = m_r[7]; break;
case 0xe1: /* rti1 */ break;
diff --git a/src/devices/cpu/xavix2/xavix2.h b/src/devices/cpu/xavix2/xavix2.h
index ee4b8cdeb4e..9e22e9587ee 100644
--- a/src/devices/cpu/xavix2/xavix2.h
+++ b/src/devices/cpu/xavix2/xavix2.h
@@ -53,8 +53,7 @@ protected:
static inline u32 val22s(u32 opcode) { return opcode & 0x200000 ? opcode | 0xffc00000 : opcode & 0x3fffff; }
static inline u32 val19s(u32 opcode) { return opcode & 0x40000 ? opcode | 0xfff80000 : opcode & 0x7ffff; }
static inline u32 val19u(u32 opcode) { return opcode & 0x0007ffff; }
- static inline u32 val16u(u32 opcode) { return static_cast<u16>(opcode); }
- static inline u32 val16s(u32 opcode) { return static_cast<s16>(opcode); }
+ static inline u32 val16s(u32 opcode) { return static_cast<s16>(opcode >> 8); }
static inline u32 val14h(u32 opcode) { return (opcode << 10) & 0xfffc0000; }
static inline u32 val14u(u32 opcode) { return (opcode >> 8) & 0x00003fff; }
static inline u32 val14s(u32 opcode) { return opcode & 0x200000 ? (opcode >> 8) | 0xffffc000 : (opcode >> 8) & 0x3fff; }
diff --git a/src/devices/cpu/xavix2/xavix2d.cpp b/src/devices/cpu/xavix2/xavix2d.cpp
index 7e36eb4e280..57de7933fa7 100644
--- a/src/devices/cpu/xavix2/xavix2d.cpp
+++ b/src/devices/cpu/xavix2/xavix2d.cpp
@@ -250,27 +250,31 @@ offs_t xavix2_disassembler::disassemble(std::ostream &stream, offs_t pc, const d
case 0xd1: util::stream_format(stream, "b?1 %s", rel8()); break;
case 0xd2: util::stream_format(stream, "beq %s", rel8()); break;
case 0xd3: util::stream_format(stream, "bles %s", rel8()); break;
- case 0xd4: util::stream_format(stream, "b?4 %s", rel8()); break;
- case 0xd5: util::stream_format(stream, "bra %s", rel8()); break;
- case 0xd6: util::stream_format(stream, "b?6 %s", rel8()); break;
+ case 0xd4: util::stream_format(stream, "bmi %s", rel8()); break;
+ case 0xd5: util::stream_format(stream, "bra %s", rel8()); break;
+ case 0xd6: util::stream_format(stream, "bltu %s", rel8()); break;
case 0xd7: util::stream_format(stream, "bleu %s", rel8()); break;
case 0xd8: util::stream_format(stream, "b?8 %s", rel8()); break;
case 0xd9: util::stream_format(stream, "b?9 %s", rel8()); break;
- case 0xda: util::stream_format(stream, "bne %s", rel8()); break;
+ case 0xda: util::stream_format(stream, "bne %s", rel8()); break;
case 0xdb: util::stream_format(stream, "bgts %s", rel8()); break;
- case 0xdc: util::stream_format(stream, "b?c %s", rel8()); break;
+ case 0xdc: util::stream_format(stream, "bpl %s", rel8()); break;
case 0xdd: util::stream_format(stream, "b?d %s", rel8()); break;
- case 0xde: util::stream_format(stream, "b?e %s", rel8()); break;
- case 0xdf: util::stream_format(stream, "b?f %s", rel8()); break;
+ case 0xde: util::stream_format(stream, "bgeu %s", rel8()); break;
+ case 0xdf: util::stream_format(stream, "bgtu %s", rel8()); break;
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;
// e4-fb
+ case 0xf8: util::stream_format(stream, "di"); break;
+ case 0xf9: util::stream_format(stream, "ei"); break;
+ // fa-fb
case 0xfc: util::stream_format(stream, "nop"); break;
- // fd-ff
-
+ // fd
+ case 0xfe: util::stream_format(stream, "wait"); break;
+ // ff
default: util::stream_format(stream, "?%02x", m_opcode >> 24);
}
diff --git a/src/mame/drivers/xavix2.cpp b/src/mame/drivers/xavix2.cpp
index 3b3d50b90bb..e47bccf231b 100644
--- a/src/mame/drivers/xavix2.cpp
+++ b/src/mame/drivers/xavix2.cpp
@@ -45,7 +45,7 @@ private:
void xavix2_state::mem(address_map &map)
{
- map(0x00000000, 0x000003ff).ram();
+ map(0x00000000, 0x00001fff).ram();
map(0x00200000, 0x00ffffff).rom().region("maincpu", 0x200000);