mirror of
https://github.com/holub/mame
synced 2025-04-16 21:44:32 +03:00
add b5000 cpu core file placeholders
This commit is contained in:
parent
dd1e5b1d7a
commit
2dab71e7e0
@ -1571,7 +1571,7 @@ NEOP00220 NeoGeo Cup '98 Plus (Euro) [confirmed?]
|
|||||||
</software>
|
</software>
|
||||||
|
|
||||||
<!-- Developer: SNK -->
|
<!-- Developer: SNK -->
|
||||||
<software name="svccard2">
|
<software name="svccard2" supported="partial"> <!-- gets stuck -->
|
||||||
<!-- NGPC only -->
|
<!-- NGPC only -->
|
||||||
<description>SNK vs. Capcom - Card Fighters 2 - Expand Edition (Jpn)</description>
|
<description>SNK vs. Capcom - Card Fighters 2 - Expand Edition (Jpn)</description>
|
||||||
<year>2001</year>
|
<year>2001</year>
|
||||||
|
@ -2852,6 +2852,26 @@ if opt_tool(CPUS, "SUPERFX") then
|
|||||||
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/superfx/sfx_dasm.h")
|
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/superfx/sfx_dasm.h")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--------------------------------------------------
|
||||||
|
-- Rockwell B5000 family
|
||||||
|
--@src/devices/cpu/b5000/b5000.h,CPUS["B5000"] = true
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
if CPUS["B5000"] then
|
||||||
|
files {
|
||||||
|
MAME_DIR .. "src/devices/cpu/b5000/b5000base.cpp",
|
||||||
|
MAME_DIR .. "src/devices/cpu/b5000/b5000base.h",
|
||||||
|
MAME_DIR .. "src/devices/cpu/b5000/b5000.cpp",
|
||||||
|
MAME_DIR .. "src/devices/cpu/b5000/b5000.h",
|
||||||
|
MAME_DIR .. "src/devices/cpu/b5000/b5000op.cpp",
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
if opt_tool(CPUS, "B5000") then
|
||||||
|
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/b5000/b5000d.cpp")
|
||||||
|
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/b5000/b5000d.h")
|
||||||
|
end
|
||||||
|
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
-- Rockwell PPS-4
|
-- Rockwell PPS-4
|
||||||
--@src/devices/cpu/pps4/pps4.h,CPUS["PPS4"] = true
|
--@src/devices/cpu/pps4/pps4.h,CPUS["PPS4"] = true
|
||||||
|
@ -120,6 +120,7 @@ CPUS["UNSP"] = true
|
|||||||
CPUS["HCD62121"] = true
|
CPUS["HCD62121"] = true
|
||||||
CPUS["PPS4"] = true
|
CPUS["PPS4"] = true
|
||||||
--CPUS["PPS41"] = true
|
--CPUS["PPS41"] = true
|
||||||
|
--CPUS["B5000"] = true
|
||||||
CPUS["UPD7725"] = true
|
CPUS["UPD7725"] = true
|
||||||
CPUS["HD61700"] = true
|
CPUS["HD61700"] = true
|
||||||
CPUS["LC8670"] = true
|
CPUS["LC8670"] = true
|
||||||
|
@ -123,6 +123,7 @@ CPUS["UNSP"] = true
|
|||||||
CPUS["HCD62121"] = true
|
CPUS["HCD62121"] = true
|
||||||
CPUS["PPS4"] = true
|
CPUS["PPS4"] = true
|
||||||
CPUS["PPS41"] = true
|
CPUS["PPS41"] = true
|
||||||
|
CPUS["B5000"] = true
|
||||||
CPUS["UPD7725"] = true
|
CPUS["UPD7725"] = true
|
||||||
CPUS["HD61700"] = true
|
CPUS["HD61700"] = true
|
||||||
CPUS["LC8670"] = true
|
CPUS["LC8670"] = true
|
||||||
|
61
src/devices/cpu/b5000/b5000.cpp
Normal file
61
src/devices/cpu/b5000/b5000.cpp
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:hap
|
||||||
|
/*
|
||||||
|
|
||||||
|
Rockwell B5000 MCU core implementation
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "b5000.h"
|
||||||
|
|
||||||
|
#include "b5000d.h"
|
||||||
|
|
||||||
|
|
||||||
|
DEFINE_DEVICE_TYPE(B5000, b5000_cpu_device, "b5000", "Rockwell B5000")
|
||||||
|
|
||||||
|
|
||||||
|
// constructor
|
||||||
|
b5000_cpu_device::b5000_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
|
||||||
|
b5000_base_device(mconfig, B5000, tag, owner, clock, 9, address_map_constructor(FUNC(b5000_cpu_device::program_map), this), 6, address_map_constructor(FUNC(b5000_cpu_device::data_map), this))
|
||||||
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
// internal memory maps
|
||||||
|
void b5000_cpu_device::program_map(address_map &map)
|
||||||
|
{
|
||||||
|
map(0x000, 0x1ff).rom();
|
||||||
|
}
|
||||||
|
|
||||||
|
void b5000_cpu_device::data_map(address_map &map)
|
||||||
|
{
|
||||||
|
map(0x00, 0x3f).ram();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// disasm
|
||||||
|
std::unique_ptr<util::disasm_interface> b5000_cpu_device::create_disassembler()
|
||||||
|
{
|
||||||
|
return std::make_unique<b5000_disassembler>();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// initialize
|
||||||
|
void b5000_cpu_device::device_start()
|
||||||
|
{
|
||||||
|
b5000_base_device::device_start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void b5000_cpu_device::device_reset()
|
||||||
|
{
|
||||||
|
b5000_base_device::device_reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// execute
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void b5000_cpu_device::execute_one()
|
||||||
|
{
|
||||||
|
}
|
54
src/devices/cpu/b5000/b5000.h
Normal file
54
src/devices/cpu/b5000/b5000.h
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:hap
|
||||||
|
/*
|
||||||
|
|
||||||
|
Rockwell B5000 MCU core implementation
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MAME_CPU_B5000_B5000_H
|
||||||
|
#define MAME_CPU_B5000_B5000_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "b5000base.h"
|
||||||
|
|
||||||
|
// pinout reference
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
class b5000_cpu_device : public b5000_base_device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
b5000_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// device-level overrides
|
||||||
|
virtual void device_start() override;
|
||||||
|
virtual void device_reset() override;
|
||||||
|
|
||||||
|
// device_disasm_interface overrides
|
||||||
|
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
|
||||||
|
|
||||||
|
// device_execute_interface overrides
|
||||||
|
virtual void execute_one() override;
|
||||||
|
|
||||||
|
void data_map(address_map &map);
|
||||||
|
void program_map(address_map &map);
|
||||||
|
|
||||||
|
// opcode helpers
|
||||||
|
u8 ram_r();
|
||||||
|
void ram_w(u8 data);
|
||||||
|
void pop_pc();
|
||||||
|
void push_pc();
|
||||||
|
|
||||||
|
// opcode handlers
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
DECLARE_DEVICE_TYPE(B5000, b5000_cpu_device)
|
||||||
|
|
||||||
|
#endif // MAME_CPU_B5000_B5000_H
|
106
src/devices/cpu/b5000/b5000base.cpp
Normal file
106
src/devices/cpu/b5000/b5000base.cpp
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:hap
|
||||||
|
/*
|
||||||
|
|
||||||
|
Rockwell B5000 family MCU cores
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "b5000base.h"
|
||||||
|
|
||||||
|
#include "debugger.h"
|
||||||
|
|
||||||
|
|
||||||
|
b5000_base_device::b5000_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data) :
|
||||||
|
cpu_device(mconfig, type, tag, owner, clock),
|
||||||
|
m_program_config("program", ENDIANNESS_LITTLE, 8, prgwidth, 0, program),
|
||||||
|
m_data_config("data", ENDIANNESS_LITTLE, 8, datawidth, 0, data),
|
||||||
|
m_prgwidth(prgwidth),
|
||||||
|
m_datawidth(datawidth)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// device_start - device-specific startup
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
B5000_PC=1
|
||||||
|
};
|
||||||
|
|
||||||
|
void b5000_base_device::device_start()
|
||||||
|
{
|
||||||
|
m_program = &space(AS_PROGRAM);
|
||||||
|
m_data = &space(AS_DATA);
|
||||||
|
m_prgmask = (1 << m_prgwidth) - 1;
|
||||||
|
m_datamask = (1 << m_datawidth) - 1;
|
||||||
|
|
||||||
|
// resolve callbacks
|
||||||
|
//..
|
||||||
|
|
||||||
|
// zerofill
|
||||||
|
m_pc = 0;
|
||||||
|
m_prev_pc = 0;
|
||||||
|
m_op = 0;
|
||||||
|
m_skip = false;
|
||||||
|
|
||||||
|
// register for savestates
|
||||||
|
save_item(NAME(m_pc));
|
||||||
|
save_item(NAME(m_prev_pc));
|
||||||
|
save_item(NAME(m_op));
|
||||||
|
save_item(NAME(m_skip));
|
||||||
|
|
||||||
|
// register state for debugger
|
||||||
|
state_add(STATE_GENPC, "GENPC", m_pc).formatstr("%03X").noshow();
|
||||||
|
state_add(STATE_GENPCBASE, "CURPC", m_prev_pc).formatstr("%03X").noshow();
|
||||||
|
|
||||||
|
state_add(B5000_PC, "PC", m_pc).formatstr("%03X");
|
||||||
|
|
||||||
|
set_icountptr(m_icount);
|
||||||
|
}
|
||||||
|
|
||||||
|
device_memory_interface::space_config_vector b5000_base_device::memory_space_config() const
|
||||||
|
{
|
||||||
|
return space_config_vector {
|
||||||
|
std::make_pair(AS_PROGRAM, &m_program_config),
|
||||||
|
std::make_pair(AS_DATA, &m_data_config)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// device_reset - device-specific reset
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void b5000_base_device::device_reset()
|
||||||
|
{
|
||||||
|
m_pc = m_prev_pc = 0;
|
||||||
|
m_skip = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// execute
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void b5000_base_device::increment_pc()
|
||||||
|
{
|
||||||
|
// low part is LFSR
|
||||||
|
int feed = ((m_pc & 0x3e) == 0) ? 1 : 0;
|
||||||
|
feed ^= (m_pc >> 1 ^ m_pc) & 1;
|
||||||
|
m_pc = (m_pc & ~0x3f) | (m_pc >> 1 & 0x1f) | (feed << 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
void b5000_base_device::execute_run()
|
||||||
|
{
|
||||||
|
while (m_icount > 0)
|
||||||
|
{
|
||||||
|
debugger_instruction_hook(m_pc);
|
||||||
|
increment_pc();
|
||||||
|
m_icount--;
|
||||||
|
|
||||||
|
execute_one();
|
||||||
|
}
|
||||||
|
}
|
62
src/devices/cpu/b5000/b5000base.h
Normal file
62
src/devices/cpu/b5000/b5000base.h
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:hap
|
||||||
|
/*
|
||||||
|
|
||||||
|
Rockwell B5000 family MCU cores
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MAME_CPU_B5000_B5000BASE_H
|
||||||
|
#define MAME_CPU_B5000_B5000BASE_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
class b5000_base_device : public cpu_device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// ...
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// construction/destruction
|
||||||
|
b5000_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data);
|
||||||
|
|
||||||
|
// device-level overrides
|
||||||
|
virtual void device_start() override;
|
||||||
|
virtual void device_reset() override;
|
||||||
|
|
||||||
|
// device_execute_interface overrides
|
||||||
|
virtual u64 execute_clocks_to_cycles(u64 clocks) const noexcept override { return (clocks + 4 - 1) / 4; } // 4-phase clock
|
||||||
|
virtual u64 execute_cycles_to_clocks(u64 cycles) const noexcept override { return (cycles * 4); }
|
||||||
|
virtual u32 execute_min_cycles() const noexcept override { return 1; }
|
||||||
|
virtual u32 execute_max_cycles() const noexcept override { return 2; }
|
||||||
|
virtual void execute_run() override;
|
||||||
|
virtual void execute_one() = 0;
|
||||||
|
void increment_pc();
|
||||||
|
|
||||||
|
// device_memory_interface overrides
|
||||||
|
virtual space_config_vector memory_space_config() const override;
|
||||||
|
|
||||||
|
address_space_config m_program_config;
|
||||||
|
address_space_config m_data_config;
|
||||||
|
address_space *m_program;
|
||||||
|
address_space *m_data;
|
||||||
|
|
||||||
|
int m_icount;
|
||||||
|
|
||||||
|
int m_prgwidth; // ROM/RAM address size
|
||||||
|
int m_datawidth; // "
|
||||||
|
u16 m_prgmask; // "
|
||||||
|
u16 m_datamask; // "
|
||||||
|
|
||||||
|
u16 m_pc;
|
||||||
|
u16 m_prev_pc;
|
||||||
|
u8 m_op;
|
||||||
|
|
||||||
|
bool m_skip;
|
||||||
|
|
||||||
|
// i/o handlers
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // MAME_CPU_B5000_B5000BASE_H
|
104
src/devices/cpu/b5000/b5000d.cpp
Normal file
104
src/devices/cpu/b5000/b5000d.cpp
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:hap
|
||||||
|
/*
|
||||||
|
|
||||||
|
Rockwell B5000 family MCU disassembler
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "b5000d.h"
|
||||||
|
|
||||||
|
// constructor
|
||||||
|
|
||||||
|
b5000_common_disassembler::b5000_common_disassembler()
|
||||||
|
{
|
||||||
|
// init lfsr pc lut
|
||||||
|
for (u32 i = 0, pc = 0; i < 0x40; i++)
|
||||||
|
{
|
||||||
|
m_l2r[i] = pc;
|
||||||
|
m_r2l[pc] = i;
|
||||||
|
pc = increment_pc(pc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
offs_t b5000_common_disassembler::increment_pc(offs_t pc)
|
||||||
|
{
|
||||||
|
int feed = ((pc & 0x3e) == 0) ? 1 : 0;
|
||||||
|
feed ^= (pc >> 1 ^ pc) & 1;
|
||||||
|
return (pc & ~0x3f) | (pc >> 1 & 0x1f) | (feed << 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// common lookup tables
|
||||||
|
|
||||||
|
const char *const b5000_common_disassembler::s_name[] =
|
||||||
|
{
|
||||||
|
"?", "NOP"
|
||||||
|
};
|
||||||
|
|
||||||
|
// bitmask for opcode parameter
|
||||||
|
const u8 b5000_common_disassembler::s_bits[] =
|
||||||
|
{
|
||||||
|
0, 0
|
||||||
|
};
|
||||||
|
|
||||||
|
const u32 b5000_common_disassembler::s_flags[] =
|
||||||
|
{
|
||||||
|
0, 0
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// common disasm
|
||||||
|
|
||||||
|
offs_t b5000_common_disassembler::common_disasm(const u8 *lut_opmap, std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms)
|
||||||
|
{
|
||||||
|
// get raw opcode
|
||||||
|
u8 op = opcodes.r8(pc);
|
||||||
|
u8 instr = lut_opmap[op];
|
||||||
|
|
||||||
|
// get parameter
|
||||||
|
u8 mask = s_bits[instr];
|
||||||
|
|
||||||
|
// disassemble it
|
||||||
|
util::stream_format(stream, "%-8s ", s_name[instr]);
|
||||||
|
|
||||||
|
if (mask > 0)
|
||||||
|
{
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1 | s_flags[instr] | SUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// B5000 disasm
|
||||||
|
|
||||||
|
const u8 b5000_disassembler::b5000_opmap[0x100] =
|
||||||
|
{
|
||||||
|
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
|
||||||
|
em_NOP, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 2
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 3
|
||||||
|
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 4
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 5
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 6
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 7
|
||||||
|
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // A
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // B
|
||||||
|
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // C
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // D
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // E
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // F
|
||||||
|
};
|
||||||
|
|
||||||
|
offs_t b5000_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms)
|
||||||
|
{
|
||||||
|
return common_disasm(b5000_opmap, stream, pc, opcodes, params);
|
||||||
|
}
|
58
src/devices/cpu/b5000/b5000d.h
Normal file
58
src/devices/cpu/b5000/b5000d.h
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:hap
|
||||||
|
/*
|
||||||
|
|
||||||
|
Rockwell B5000 family MCU disassembler
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MAME_CPU_B5000_B5000D_H
|
||||||
|
#define MAME_CPU_B5000_B5000D_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
class b5000_common_disassembler : public util::disasm_interface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
b5000_common_disassembler();
|
||||||
|
virtual ~b5000_common_disassembler() = default;
|
||||||
|
|
||||||
|
virtual u32 opcode_alignment() const override { return 1; }
|
||||||
|
virtual u32 interface_flags() const override { return NONLINEAR_PC | PAGED; }
|
||||||
|
virtual u32 page_address_bits() const override { return 6; }
|
||||||
|
virtual offs_t pc_linear_to_real(offs_t pc) const override { return (pc & ~0x3f) | m_l2r[pc & 0x3f]; }
|
||||||
|
virtual offs_t pc_real_to_linear(offs_t pc) const override { return (pc & ~0x3f) | m_r2l[pc & 0x3f]; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// opcode mnemonics
|
||||||
|
enum e_mnemonics
|
||||||
|
{
|
||||||
|
em_ILL, em_NOP
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *const s_name[];
|
||||||
|
static const u8 s_bits[];
|
||||||
|
static const u32 s_flags[];
|
||||||
|
|
||||||
|
u8 m_l2r[0x40];
|
||||||
|
u8 m_r2l[0x40];
|
||||||
|
|
||||||
|
offs_t increment_pc(offs_t pc);
|
||||||
|
offs_t common_disasm(const u8 *lut_opmap, std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms);
|
||||||
|
};
|
||||||
|
|
||||||
|
class b5000_disassembler : public b5000_common_disassembler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
b5000_disassembler() = default;
|
||||||
|
virtual ~b5000_disassembler() = default;
|
||||||
|
|
||||||
|
virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
static const u8 b5000_opmap[0x100];
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MAME_CPU_B5000_B5000D_H
|
34
src/devices/cpu/b5000/b5000op.cpp
Normal file
34
src/devices/cpu/b5000/b5000op.cpp
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:hap
|
||||||
|
|
||||||
|
// B5000 opcode handlers
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "b5000.h"
|
||||||
|
|
||||||
|
|
||||||
|
// internal helpers
|
||||||
|
|
||||||
|
inline u8 b5000_cpu_device::ram_r()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
//return m_data->read_byte(m_b) & 0xf;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void b5000_cpu_device::ram_w(u8 data)
|
||||||
|
{
|
||||||
|
//m_data->write_byte(m_b, data & 0xf);
|
||||||
|
}
|
||||||
|
|
||||||
|
void b5000_cpu_device::pop_pc()
|
||||||
|
{
|
||||||
|
//m_pc = m_sa;
|
||||||
|
}
|
||||||
|
|
||||||
|
void b5000_cpu_device::push_pc()
|
||||||
|
{
|
||||||
|
//m_sa = m_pc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// opcodes
|
@ -147,7 +147,7 @@ The MCUs used were not imported from Sharp, but cloned by USSR, renamed to
|
|||||||
#include "gnw_dualh.lh"
|
#include "gnw_dualh.lh"
|
||||||
|
|
||||||
//#include "hh_sm510_test.lh" // common test-layout - use external artwork
|
//#include "hh_sm510_test.lh" // common test-layout - use external artwork
|
||||||
//#include "hh_sm500_test.lh" // "
|
#include "hh_sm500_test.lh" // "
|
||||||
|
|
||||||
|
|
||||||
// machine start/reset
|
// machine start/reset
|
||||||
@ -5372,11 +5372,13 @@ INPUT_PORTS_END
|
|||||||
void gamewatch_state::nsmb3(machine_config &config)
|
void gamewatch_state::nsmb3(machine_config &config)
|
||||||
{
|
{
|
||||||
sm530_common(config, 1000, 1000);
|
sm530_common(config, 1000, 1000);
|
||||||
|
config.set_default_layout(layout_hh_sm500_test);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gamewatch_state::nsmw(machine_config &config)
|
void gamewatch_state::nsmw(machine_config &config)
|
||||||
{
|
{
|
||||||
sm530_common(config, 1000, 1000);
|
sm530_common(config, 1000, 1000);
|
||||||
|
config.set_default_layout(layout_hh_sm500_test);
|
||||||
}
|
}
|
||||||
|
|
||||||
// roms
|
// roms
|
||||||
|
@ -18,13 +18,13 @@ license:CC0
|
|||||||
<!-- build screen -->
|
<!-- build screen -->
|
||||||
|
|
||||||
<view name="Test Layout">
|
<view name="Test Layout">
|
||||||
<bounds left="0" right="10" top="0" bottom="10" />
|
<bounds left="0" right="10" top="0" bottom="12" />
|
||||||
<element ref="static_black">
|
<element ref="static_black">
|
||||||
<bounds left="0" right="10" top="0" bottom="10" />
|
<bounds left="0" right="10" top="0" bottom="12" />
|
||||||
</element>
|
</element>
|
||||||
|
|
||||||
<!-- max 9*4*2 matrix -->
|
<!-- max 12*4*2 matrix -->
|
||||||
<repeat count="9">
|
<repeat count="12">
|
||||||
<param name="y" start="0" increment="1" />
|
<param name="y" start="0" increment="1" />
|
||||||
|
|
||||||
<!-- h1 -->
|
<!-- h1 -->
|
||||||
|
@ -28,6 +28,7 @@ using util::BIT;
|
|||||||
#include "cpu/arm7/arm7dasm.h"
|
#include "cpu/arm7/arm7dasm.h"
|
||||||
#include "cpu/asap/asapdasm.h"
|
#include "cpu/asap/asapdasm.h"
|
||||||
#include "cpu/avr8/avr8dasm.h"
|
#include "cpu/avr8/avr8dasm.h"
|
||||||
|
#include "cpu/b5000/b5000.h"
|
||||||
#include "cpu/bcp/bcpdasm.h"
|
#include "cpu/bcp/bcpdasm.h"
|
||||||
#include "cpu/capricorn/capricorn_dasm.h"
|
#include "cpu/capricorn/capricorn_dasm.h"
|
||||||
#include "cpu/ccpu/ccpudasm.h"
|
#include "cpu/ccpu/ccpudasm.h"
|
||||||
@ -390,6 +391,7 @@ static const dasm_table_entry dasm_table[] =
|
|||||||
{ "avr8", le, 0, []() -> util::disasm_interface * { return new avr8_disassembler; } },
|
{ "avr8", le, 0, []() -> util::disasm_interface * { return new avr8_disassembler; } },
|
||||||
{ "axc51core", le, 0, []() -> util::disasm_interface * { return new axc51core_disassembler; } },
|
{ "axc51core", le, 0, []() -> util::disasm_interface * { return new axc51core_disassembler; } },
|
||||||
{ "axc208", le, 0, []() -> util::disasm_interface * { return new ax208_disassembler; } },
|
{ "axc208", le, 0, []() -> util::disasm_interface * { return new ax208_disassembler; } },
|
||||||
|
{ "b5000", le, 0, []() -> util::disasm_interface * { return new b5000_disassembler; } },
|
||||||
{ "capricorn", le, 0, []() -> util::disasm_interface * { return new capricorn_disassembler; } },
|
{ "capricorn", le, 0, []() -> util::disasm_interface * { return new capricorn_disassembler; } },
|
||||||
{ "ccpu", le, 0, []() -> util::disasm_interface * { return new ccpu_disassembler; } },
|
{ "ccpu", le, 0, []() -> util::disasm_interface * { return new ccpu_disassembler; } },
|
||||||
{ "cdp1801", le, 0, []() -> util::disasm_interface * { return new cosmac_disassembler(cosmac_disassembler::TYPE_1801); } },
|
{ "cdp1801", le, 0, []() -> util::disasm_interface * { return new cosmac_disassembler(cosmac_disassembler::TYPE_1801); } },
|
||||||
|
Loading…
Reference in New Issue
Block a user