summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--scripts/src/cpu.lua11
-rw-r--r--src/devices/cpu/m6502/dxavix.lst20
-rw-r--r--src/devices/cpu/m6502/m6502d.cpp5
-rw-r--r--src/devices/cpu/m6502/m6502d.h3
-rw-r--r--src/devices/cpu/m6502/oxavix.lst30
-rw-r--r--src/devices/cpu/m6502/xavix.cpp125
-rw-r--r--src/devices/cpu/m6502/xavix.h70
-rw-r--r--src/devices/cpu/m6502/xavixd.cpp15
-rw-r--r--src/devices/cpu/m6502/xavixd.h26
-rw-r--r--src/mame/drivers/xavix.cpp8
-rw-r--r--src/tools/unidasm.cpp2
11 files changed, 308 insertions, 7 deletions
diff --git a/scripts/src/cpu.lua b/scripts/src/cpu.lua
index 1c3e33faa21..edb5df35a84 100644
--- a/scripts/src/cpu.lua
+++ b/scripts/src/cpu.lua
@@ -1331,6 +1331,7 @@ end
--@src/devices/cpu/m6502/m740.h,CPUS["M6502"] = true
--@src/devices/cpu/m6502/m3745x.h,CPUS["M6502"] = true
--@src/devices/cpu/m6502/m5074x.h,CPUS["M6502"] = true
+--@src/devices/cpu/m6502/xavix.h,CPUS["XAVIX"] = true
--------------------------------------------------
@@ -1372,6 +1373,8 @@ if (CPUS["M6502"]~=null) then
MAME_DIR .. "src/devices/cpu/m6502/m3745x.h",
MAME_DIR .. "src/devices/cpu/m6502/m5074x.cpp",
MAME_DIR .. "src/devices/cpu/m6502/m5074x.h",
+ MAME_DIR .. "src/devices/cpu/m6502/xavix.cpp",
+ MAME_DIR .. "src/devices/cpu/m6502/xavix.h",
}
custombuildtask {
@@ -1385,6 +1388,7 @@ if (CPUS["M6502"]~=null) then
{ MAME_DIR .. "src/devices/cpu/m6502/on2a03.lst", GEN_DIR .. "emu/cpu/m6502/n2a03.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dn2a03.lst" }, {"@echo Generating n2a03 disassembler source file...", PYTHON .. " $(1) s n2a03 $(<) $(2) $(@)" }},
{ MAME_DIR .. "src/devices/cpu/m6502/om740.lst" , GEN_DIR .. "emu/cpu/m6502/m740.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm740.lst" }, {"@echo Generating m740 disassembler source file...", PYTHON .. " $(1) s m740 $(<) $(2) $(@)" }},
{ MAME_DIR .. "src/devices/cpu/m6502/dr65c02.lst", GEN_DIR .. "emu/cpu/m6502/r65c02.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", }, {"@echo Generating r65c02 disassembler source file...", PYTHON .. " $(1) s r65c02 - $(<) $(@)" }},
+ { MAME_DIR .. "src/devices/cpu/m6502/oxavix.lst", GEN_DIR .. "emu/cpu/m6502/xavix.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dxavix.lst" }, {"@echo Generating xavix disassembler source file...", PYTHON .. " $(1) s xavix $(<) $(2) $(@)" }},
}
dependency {
@@ -1398,6 +1402,7 @@ if (CPUS["M6502"]~=null) then
{ MAME_DIR .. "src/devices/cpu/m6502/n2a03.cpp", GEN_DIR .. "emu/cpu/m6502/n2a03.hxx" },
{ MAME_DIR .. "src/devices/cpu/m6502/r65c02.cpp", GEN_DIR .. "emu/cpu/m6502/r65c02.hxx" },
{ MAME_DIR .. "src/devices/cpu/m6502/m740.cpp", GEN_DIR .. "emu/cpu/m6502/m740.hxx" },
+ { MAME_DIR .. "src/devices/cpu/m6502/xavix.cpp", GEN_DIR .. "emu/cpu/m6502/xavix.hxx" },
}
end
@@ -1412,7 +1417,8 @@ if (CPUS["M6502"]~=null or _OPTIONS["with-tools"]) then
table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/on2a03.lst", GEN_DIR .. "emu/cpu/m6502/n2a03d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dn2a03.lst" }, {"@echo Generating n2a03 disassembler source file...", PYTHON .. " $(1) d n2a03 $(<) $(2) $(@)" }})
table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/om740.lst" , GEN_DIR .. "emu/cpu/m6502/m740d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm740.lst" }, {"@echo Generating m740 disassembler source file...", PYTHON .. " $(1) d m740 $(<) $(2) $(@)" }})
table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/dr65c02.lst", GEN_DIR .. "emu/cpu/m6502/r65c02d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", }, {"@echo Generating r65c02 disassembler source file...", PYTHON .. " $(1) d r65c02 - $(<) $(@)" }})
-
+ table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/oxavix.lst", GEN_DIR .. "emu/cpu/m6502/xavixd.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dxavix.lst" }, {"@echo Generating xavix disassembler source file...", PYTHON .. " $(1) d xavix $(<) $(2) $(@)" }})
+
table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/deco16d.cpp", GEN_DIR .. "emu/cpu/m6502/deco16d.hxx" })
table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/m4510d.cpp", GEN_DIR .. "emu/cpu/m6502/m4510d.hxx" })
table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/m6502d.cpp", GEN_DIR .. "emu/cpu/m6502/m6502d.hxx" })
@@ -1423,6 +1429,7 @@ if (CPUS["M6502"]~=null or _OPTIONS["with-tools"]) then
table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/n2a03d.cpp", GEN_DIR .. "emu/cpu/m6502/n2a03d.hxx" })
table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/r65c02d.cpp", GEN_DIR .. "emu/cpu/m6502/r65c02d.hxx" })
table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/m740d.cpp", GEN_DIR .. "emu/cpu/m6502/m740d.hxx" })
+ table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/xavixd.cpp", GEN_DIR .. "emu/cpu/m6502/xavixd.hxx" })
table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/deco16d.cpp")
table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/deco16d.h")
@@ -1444,6 +1451,8 @@ if (CPUS["M6502"]~=null or _OPTIONS["with-tools"]) then
table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/n2a03d.h")
table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/r65c02d.cpp")
table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/r65c02d.h")
+ table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/xavixd.cpp")
+ table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/xavixd.h")
end
--------------------------------------------------
diff --git a/src/devices/cpu/m6502/dxavix.lst b/src/devices/cpu/m6502/dxavix.lst
new file mode 100644
index 00000000000..82f068df805
--- /dev/null
+++ b/src/devices/cpu/m6502/dxavix.lst
@@ -0,0 +1,20 @@
+# license:BSD-3-Clause
+# copyright-holders:David Haywood
+# xavix - m6502 with custom opcodes
+brk_imp ora_idx kil_non slo_idx nop_zpg ora_zpg asl_zpg slo_zpg php_imp ora_imm asl_acc anc_imm nop_aba ora_aba asl_aba slo_aba
+bpl_rel ora_idy kil_non slo_idy nop_zpx ora_zpx asl_zpx slo_zpx clc_imp ora_aby nop_imp slo_aby nop_abx ora_abx asl_abx slo_abx
+jsr_adr and_idx callf_xa3 rla_idx bit_zpg and_zpg rol_zpg rla_zpg plp_imp and_imm rol_acc anc_imm bit_aba and_aba rol_aba rla_aba
+bmi_rel and_idy kil_non rla_idy nop_zpx and_zpx rol_zpx rla_zpx sec_imp and_aby nop_imp rla_aby nop_abx and_abx rol_abx rla_abx
+rti_imp eor_idx kil_non sre_idx nop_zpg eor_zpg lsr_zpg sre_zpg pha_imp eor_imm lsr_acc asr_imm jmp_adr eor_aba lsr_aba sre_aba
+bvc_rel eor_idy kil_non sre_idy nop_zpx eor_zpx lsr_zpx sre_zpx cli_imp eor_aby nop_imp sre_aby nop_abx eor_abx lsr_abx sre_abx
+rts_imp adc_idx kil_non rra_idx nop_zpg adc_zpg ror_zpg rra_zpg pla_imp adc_imm ror_acc arr_imm jmp_ind adc_aba ror_aba rra_aba
+bvs_rel adc_idy kil_non rra_idy nop_zpx adc_zpx ror_zpx rra_zpx sei_imp adc_aby nop_imp rra_aby nop_abx adc_abx ror_abx rra_abx
+retf_imp sta_idx nop_imm sax_idx sty_zpg sta_zpg stx_zpg sax_zpg dey_imp nop_imm txa_imp ane_imm sty_aba sta_aba stx_aba sax_aba
+bcc_rel sta_idy kil_non sha_idy sty_zpx sta_zpx stx_zpy sax_zpy tya_imp sta_aby txs_imp shs_aby shy_abx sta_abx shx_aby sha_aby
+ldy_imm lda_idx ldx_imm lax_idx ldy_zpg lda_zpg ldx_zpg lax_zpg tay_imp lda_imm tax_imp lxa_imm ldy_aba lda_aba ldx_aba lax_aba
+bcs_rel lda_idy kil_non lax_idy ldy_zpx lda_zpx ldx_zpy lax_zpy clv_imp lda_aby tsx_imp las_aby ldy_abx lda_abx ldx_aby lax_aby
+cpy_imm cmp_idx nop_imm dcp_idx cpy_zpg cmp_zpg dec_zpg dcp_zpg iny_imp cmp_imm dex_imp sbx_imm cpy_aba cmp_aba dec_aba dcp_aba
+bne_rel cmp_idy kil_non dcp_idy nop_zpx cmp_zpx dec_zpx dcp_zpx cld_imp cmp_aby nop_imp dcp_aby nop_abx cmp_abx dec_abx dcp_abx
+cpx_imm sbc_idx nop_imm isb_idx cpx_zpg sbc_zpg inc_zpg isb_zpg inx_imp sbc_imm nop_imp sbc_imm cpx_aba sbc_aba inc_aba isb_aba
+beq_rel sbc_idy kil_non isb_idy nop_zpx sbc_zpx inc_zpx isb_zpx sed_imp sbc_aby nop_imp isb_aby nop_abx sbc_abx inc_abx isb_abx
+reset
diff --git a/src/devices/cpu/m6502/m6502d.cpp b/src/devices/cpu/m6502/m6502d.cpp
index 89763113cde..7970efb524b 100644
--- a/src/devices/cpu/m6502/m6502d.cpp
+++ b/src/devices/cpu/m6502/m6502d.cpp
@@ -181,6 +181,11 @@ offs_t m6502_base_disassembler::disassemble(std::ostream &stream, offs_t pc, con
flags |= 1;
break;
+ case DASM_xa3:
+ util::stream_format(stream, " #$%02x%02x%02x", params.r8(pc+1), params.r8(pc+3), params.r8(pc+2));
+ flags |= 4;
+ break;
+
default:
fprintf(stderr, "Unhandled dasm mode %d\n", e.mode);
abort();
diff --git a/src/devices/cpu/m6502/m6502d.h b/src/devices/cpu/m6502/m6502d.h
index 7b23417f753..2700ee2f239 100644
--- a/src/devices/cpu/m6502/m6502d.h
+++ b/src/devices/cpu/m6502/m6502d.h
@@ -59,7 +59,8 @@ protected:
DASM_biz, /* bit, zero page (M740) */
DASM_bzr, /* bit, zero page, relative offset (M740) */
DASM_bar, /* bit, accumulator, relative offset (M740) */
- DASM_bac /* bit, accumulator (M740) */
+ DASM_bac, /* bit, accumulator (M740) */
+ DASM_xa3 /* unknown XaviX opcode, 24-bit ROM pointer? */
};
virtual u32 get_instruction_bank() const;
diff --git a/src/devices/cpu/m6502/oxavix.lst b/src/devices/cpu/m6502/oxavix.lst
new file mode 100644
index 00000000000..1e787aab9f3
--- /dev/null
+++ b/src/devices/cpu/m6502/oxavix.lst
@@ -0,0 +1,30 @@
+# license:BSD-3-Clause
+# copyright-holders:David Haywood
+# xavix opcodes
+
+callf_xa3
+ TMP2 = read_pc();
+ TMP = read_pc();
+ TMP |= (read_pc()<<8);
+ read(SP);
+ write(SP, PC>>8);
+ dec_SP();
+ write(SP, PC);
+ dec_SP();
+ write(SP, m_farbank);
+ dec_SP();
+ m_farbank=TMP2;
+ PC = TMP;
+ prefetch();
+
+retf_imp
+ read_pc_noinc();
+ read(SP);
+ inc_SP();
+ TMP2 = read(SP);
+ inc_SP();
+ PC = read(SP);
+ inc_SP();
+ PC = set_h(PC, read(SP));
+ m_farbank = TMP2;
+ prefetch();
diff --git a/src/devices/cpu/m6502/xavix.cpp b/src/devices/cpu/m6502/xavix.cpp
new file mode 100644
index 00000000000..9492d0fa492
--- /dev/null
+++ b/src/devices/cpu/m6502/xavix.cpp
@@ -0,0 +1,125 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+/***************************************************************************
+
+ xavix.c
+
+ 6502 with custom opcodes
+ integrated gfx / sound / coprocessor?
+
+***************************************************************************/
+
+#include "emu.h"
+#include "xavix.h"
+#include "xavixd.h"
+
+DEFINE_DEVICE_TYPE(XAVIX, xavix_device, "xavix", "XaviX")
+
+xavix_device::xavix_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ m6502_device(mconfig, XAVIX, tag, owner, clock),
+ XPC(0)
+{
+ program_config.m_addr_width = 24;
+ program_config.m_logaddr_width = 24;
+ sprogram_config.m_addr_width = 24;
+ sprogram_config.m_logaddr_width = 24;
+}
+
+
+util::disasm_interface *xavix_device::create_disassembler()
+{
+ return new xavix_disassembler;
+}
+
+
+void xavix_device::device_start()
+{
+ if(direct_disabled)
+ mintf = std::make_unique<mi_xavix_nd>(this);
+ else
+ mintf = std::make_unique<mi_xavix_normal>(this);
+
+ init();
+
+ state_add(STATE_GENPC, "GENPC", XPC).callexport().noshow();
+ state_add(STATE_GENPCBASE, "CURPC", XPC).callexport().noshow();
+}
+
+void xavix_device::state_export(const device_state_entry &entry)
+{
+ switch(entry.index()) {
+ case STATE_GENPC:
+ case STATE_GENPCBASE:
+ XPC = adr_with_bank(NPC);
+ break;
+ }
+}
+
+
+void xavix_device::device_reset()
+{
+ m_farbank = 0;
+ XPC = 0;
+ m6502_device::device_reset();
+}
+
+xavix_device::mi_xavix_normal::mi_xavix_normal(xavix_device *_base)
+{
+ base = _base;
+}
+
+
+uint8_t xavix_device::mi_xavix_normal::read(uint16_t adr)
+{
+ if (adr < 0x8000)
+ return program->read_byte(adr);
+ else
+ return program->read_byte(base->adr_with_bank(adr));
+}
+
+uint8_t xavix_device::mi_xavix_normal::read_sync(uint16_t adr)
+{
+ if (adr < 0x8000)
+ return sdirect->read_byte(adr);
+ else
+ return sdirect->read_byte(base->adr_with_bank(adr));
+}
+
+uint8_t xavix_device::mi_xavix_normal::read_arg(uint16_t adr)
+{
+ if (adr < 0x8000)
+ return direct->read_byte(adr);
+ else
+ return direct->read_byte(base->adr_with_bank(adr));
+}
+
+void xavix_device::mi_xavix_normal::write(uint16_t adr, uint8_t val)
+{
+ if (adr < 0x8000)
+ program->write_byte(adr, val);
+ else
+ program->write_byte(base->adr_with_bank(adr), val);
+}
+
+xavix_device::mi_xavix_nd::mi_xavix_nd(xavix_device *_base) : mi_xavix_normal(_base)
+{
+}
+
+uint8_t xavix_device::mi_xavix_nd::read_sync(uint16_t adr)
+{
+ if (adr < 0x8000)
+ return sprogram->read_byte(adr);
+ else
+ return sprogram->read_byte(base->adr_with_bank(adr));
+}
+
+uint8_t xavix_device::mi_xavix_nd::read_arg(uint16_t adr)
+{
+ if (adr < 0x8000)
+ return program->read_byte(adr);
+ else
+ return program->read_byte(base->adr_with_bank(adr));
+}
+
+
+#include "cpu/m6502/xavix.hxx"
diff --git a/src/devices/cpu/m6502/xavix.h b/src/devices/cpu/m6502/xavix.h
new file mode 100644
index 00000000000..557c39ecea3
--- /dev/null
+++ b/src/devices/cpu/m6502/xavix.h
@@ -0,0 +1,70 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+/***************************************************************************
+
+ xavix.h
+
+***************************************************************************/
+#ifndef MAME_CPU_M6502_XAVIX_H
+#define MAME_CPU_M6502_XAVIX_H
+
+#pragma once
+
+#include "m6502.h"
+
+class xavix_device : public m6502_device {
+public:
+ xavix_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ virtual util::disasm_interface *create_disassembler() override;
+ virtual void do_exec_full() override;
+ virtual void do_exec_partial() override;
+
+#define O(o) void o ## _full(); void o ## _partial()
+
+ // xaviv opcodes
+ O(callf_xa3);
+ O(retf_imp);
+
+#undef O
+
+protected:
+ class mi_xavix_normal : public memory_interface {
+ public:
+ xavix_device *base;
+
+ mi_xavix_normal(xavix_device *base);
+ virtual ~mi_xavix_normal() {}
+
+ virtual uint8_t read(uint16_t adr) override;
+ virtual uint8_t read_sync(uint16_t adr) override;
+ virtual uint8_t read_arg(uint16_t adr) override;
+ virtual void write(uint16_t adr, uint8_t val) override;
+ };
+
+ class mi_xavix_nd : public mi_xavix_normal {
+ public:
+ mi_xavix_nd(xavix_device *base);
+ virtual ~mi_xavix_nd() {}
+
+ virtual uint8_t read_sync(uint16_t adr) override;
+ virtual uint8_t read_arg(uint16_t adr) override;
+ };
+
+ uint8_t m_farbank;
+ uint32_t XPC;
+
+ uint8_t farbank_r() { return m_farbank; }
+ void farbank_w(uint8_t data) { m_farbank = data; }
+
+ uint32_t adr_with_bank(uint16_t adr) { return adr | (m_farbank << 16); }
+
+ virtual void device_start() override;
+ virtual void device_reset() override;
+ virtual void state_export(const device_state_entry &entry) override;
+
+};
+
+DECLARE_DEVICE_TYPE(XAVIX, xavix_device)
+
+#endif // MAME_CPU_M6502_XAVIX_H
diff --git a/src/devices/cpu/m6502/xavixd.cpp b/src/devices/cpu/m6502/xavixd.cpp
new file mode 100644
index 00000000000..6874d0aac14
--- /dev/null
+++ b/src/devices/cpu/m6502/xavixd.cpp
@@ -0,0 +1,15 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+/***************************************************************************
+
+ xavixd.cpp
+
+***************************************************************************/
+
+#include "emu.h"
+#include "xavixd.h"
+#include "cpu/m6502/xavixd.hxx"
+
+xavix_disassembler::xavix_disassembler() : m6502_base_disassembler(disasm_entries)
+{
+}
diff --git a/src/devices/cpu/m6502/xavixd.h b/src/devices/cpu/m6502/xavixd.h
new file mode 100644
index 00000000000..50a4ebb92db
--- /dev/null
+++ b/src/devices/cpu/m6502/xavixd.h
@@ -0,0 +1,26 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+/***************************************************************************
+
+ xavixd.h
+
+***************************************************************************/
+
+#ifndef MAME_CPU_M6502_XAVIXD_H
+#define MAME_CPU_M6502_XAVIXD_H
+
+#pragma once
+
+#include "m6502d.h"
+
+class xavix_disassembler : public m6502_base_disassembler
+{
+public:
+ xavix_disassembler();
+ virtual ~xavix_disassembler() = default;
+
+private:
+ static const disasm_entry disasm_entries[0x100];
+};
+
+#endif
diff --git a/src/mame/drivers/xavix.cpp b/src/mame/drivers/xavix.cpp
index e6e7050ab8e..66e2d960634 100644
--- a/src/mame/drivers/xavix.cpp
+++ b/src/mame/drivers/xavix.cpp
@@ -45,8 +45,7 @@
#include "emu.h"
-#include "cpu/g65816/g65816.h"
-#include "cpu/m6502/m6502.h"
+#include "cpu/m6502/xavix.h"
//#include "sound/ay8910.h"
#include "screen.h"
#include "speaker.h"
@@ -88,8 +87,7 @@ uint32_t xavix_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap
static ADDRESS_MAP_START( xavix_map, AS_PROGRAM, 8, xavix_state )
AM_RANGE(0x000000, 0x0001ff) AM_RAM
- AM_RANGE(0x00f000, 0x00ffff) AM_ROM AM_REGION("bios", 0x00f000)
- AM_RANGE(0x800000, 0x9fffff) AM_ROM AM_REGION("bios", 0x000000) // wrong
+ AM_RANGE(0x008000, 0x1fffff) AM_ROM AM_REGION("bios", 0x008000)
ADDRESS_MAP_END
static INPUT_PORTS_START( xavix )
@@ -177,7 +175,7 @@ void xavix_state::machine_reset()
MACHINE_CONFIG_START(xavix_state::xavix)
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu",G65816,MAIN_CLOCK/4)
+ MCFG_CPU_ADD("maincpu",XAVIX,MAIN_CLOCK)
MCFG_CPU_PROGRAM_MAP(xavix_map)
/* video hardware */
diff --git a/src/tools/unidasm.cpp b/src/tools/unidasm.cpp
index 7378734b598..8d53bd9dbb3 100644
--- a/src/tools/unidasm.cpp
+++ b/src/tools/unidasm.cpp
@@ -75,6 +75,7 @@
#include "cpu/m6502/m65c02d.h"
#include "cpu/m6502/m65ce02d.h"
#include "cpu/m6502/m740d.h"
+#include "cpu/m6502/xavixd.h"
#include "cpu/m6800/6800dasm.h"
#include "cpu/m68000/m68kdasm.h"
#include "cpu/m6805/6805dasm.h"
@@ -466,6 +467,7 @@ static const dasm_table_entry dasm_table[] =
{ "x86_16", le, 0, []() -> util::disasm_interface * { i386_unidasm.mode = 16; return new i386_disassembler(&i386_unidasm); } },
{ "x86_32", le, 0, []() -> util::disasm_interface * { i386_unidasm.mode = 32; return new i386_disassembler(&i386_unidasm); } },
{ "x86_64", le, 0, []() -> util::disasm_interface * { i386_unidasm.mode = 64; return new i386_disassembler(&i386_unidasm); } },
+ { "xavix", le, 0, []() -> util::disasm_interface * { return new xavix_disassembler; } },
{ "z180", le, 0, []() -> util::disasm_interface * { return new z180_disassembler; } },
{ "z8", le, 0, []() -> util::disasm_interface * { return new z8_disassembler; } },
{ "z80", le, 0, []() -> util::disasm_interface * { return new z80_disassembler; } },