diff --git a/scripts/src/cpu.lua b/scripts/src/cpu.lua index 515c55a222c..cb80c5403f4 100644 --- a/scripts/src/cpu.lua +++ b/scripts/src/cpu.lua @@ -359,6 +359,22 @@ if (CPUS["ESRIP"]~=null or _OPTIONS["with-tools"]) then table.insert(disasm_files , MAME_DIR .. "src/emu/cpu/esrip/esripdsm.c") end +-------------------------------------------------- +-- Seiko Epson E0C6200 series +---@src/emu/cpu/e0c6200/e0c6200.h,CPUS += E0C6200 +-------------------------------------------------- + +if (CPUS["E0C6200"]~=null) then + files { + MAME_DIR .. "src/emu/cpu/e0c6200/e0c6200.c", + MAME_DIR .. "src/emu/cpu/e0c6200/e0c6200.h", + } +end + +if (CPUS["E0C6200"]~=null or _OPTIONS["with-tools"]) then + table.insert(disasm_files , MAME_DIR .. "src/emu/cpu/e0c6200/e0c6200d.c") +end + -------------------------------------------------- -- RCA COSMAC ---@src/emu/cpu/cosmac/cosmac.h,CPUS += COSMAC diff --git a/scripts/target/mame/mame.lua b/scripts/target/mame/mame.lua index 44120517e4b..510218c9598 100644 --- a/scripts/target/mame/mame.lua +++ b/scripts/target/mame/mame.lua @@ -100,7 +100,7 @@ CPUS["SM8500"] = true CPUS["MINX"] = true CPUS["SSEM"] = true CPUS["AVR8"] = true -CPUS["TMS0980"] = true +--CPUS["TMS0980"] = true CPUS["I4004"] = true CPUS["SUPERFX"] = true CPUS["Z8"] = true @@ -123,9 +123,10 @@ CPUS["ALTO2"] = true --CPUS["W65816"] = true CPUS["ARC"] = true CPUS["ARCOMPACT"] = true -CPUS["AMIS2000"] = true -CPUS["UCOM4"] = true -CPUS["HMCS40"] = true +--CPUS["AMIS2000"] = true +--CPUS["UCOM4"] = true +--CPUS["HMCS40"] = true +--CPUS["E0C6200"] = true -------------------------------------------------- -- specify available sound cores diff --git a/scripts/target/mess/mess.lua b/scripts/target/mess/mess.lua index c60b8f16d09..d8f49be5b93 100644 --- a/scripts/target/mess/mess.lua +++ b/scripts/target/mess/mess.lua @@ -123,6 +123,7 @@ CPUS["ARCOMPACT"] = true CPUS["AMIS2000"] = true CPUS["UCOM4"] = true CPUS["HMCS40"] = true +CPUS["E0C6200"] = true -------------------------------------------------- -- specify available sound cores; some of these are diff --git a/src/emu/cpu/amis2000/amis2000.h b/src/emu/cpu/amis2000/amis2000.h index ba565205b21..d04127eec16 100644 --- a/src/emu/cpu/amis2000/amis2000.h +++ b/src/emu/cpu/amis2000/amis2000.h @@ -83,7 +83,7 @@ protected: virtual void execute_run(); // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return(spacenum == AS_PROGRAM) ? &m_program_config :((spacenum == AS_DATA) ? &m_data_config : NULL); } + virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return(spacenum == AS_PROGRAM) ? &m_program_config : ((spacenum == AS_DATA) ? &m_data_config : NULL); } // device_disasm_interface overrides virtual UINT32 disasm_min_opcode_bytes() const { return 1; } diff --git a/src/emu/cpu/e0c6200/e0c6200.c b/src/emu/cpu/e0c6200/e0c6200.c new file mode 100644 index 00000000000..4674aa3d01e --- /dev/null +++ b/src/emu/cpu/e0c6200/e0c6200.c @@ -0,0 +1,104 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/* + + Seiko Epson E0C6200 CPU core and E0C62 MCU family + + References: + - 1998 MF297-06a E0C6200/E0C6200A Core CPU Manual + - 1998 MF1049-01a E0C6S46 Technical Manual + + TODO: + - niks + +*/ + +#include "e0c6200.h" +#include "debugger.h" + +#include "e0c6200op.inc" + + +const device_type EPSON_E0C6S46 = &device_creator; + + +// internal memory maps +static ADDRESS_MAP_START(program_1k, AS_PROGRAM, 16, e0c6200_cpu_device) + AM_RANGE(0x0000, 0x03ff) AM_ROM +ADDRESS_MAP_END + + +static ADDRESS_MAP_START(data_64x4, AS_DATA, 8, e0c6200_cpu_device) + AM_RANGE(0x00, 0x3f) AM_RAM +ADDRESS_MAP_END + + +// device definitions +e0c6s46_device::e0c6s46_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : e0c6200_cpu_device(mconfig, EPSON_E0C6S46, "E0C6S46", tag, owner, clock, 10, ADDRESS_MAP_NAME(program_1k), 6, ADDRESS_MAP_NAME(data_64x4), "e0c6s46", __FILE__) +{ } + + +// disasm +void e0c6200_cpu_device::state_string_export(const device_state_entry &entry, std::string &str) +{ + switch (entry.index()) + { + case STATE_GENFLAGS: + break; + + default: break; + } +} + +offs_t e0c6200_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) +{ + extern CPU_DISASSEMBLE(e0c6200); + return CPU_DISASSEMBLE_NAME(e0c6200)(this, buffer, pc, oprom, opram, options); +} + + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void e0c6200_cpu_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; + + // zerofill + + // register for savestates + + // register state for debugger + + m_icountptr = &m_icount; +} + + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void e0c6200_cpu_device::device_reset() +{ +} + + + +//------------------------------------------------- +// execute +//------------------------------------------------- + +void e0c6200_cpu_device::execute_run() +{ + while (m_icount > 0) + { + m_icount--; + } +} diff --git a/src/emu/cpu/e0c6200/e0c6200.h b/src/emu/cpu/e0c6200/e0c6200.h new file mode 100644 index 00000000000..c4bd04b2254 --- /dev/null +++ b/src/emu/cpu/e0c6200/e0c6200.h @@ -0,0 +1,73 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/* + + Seiko Epson E0C6200 CPU core and E0C62 MCU family + +*/ + +#ifndef _E06200_H_ +#define _E06200_H_ + +#include "emu.h" + + +class e0c6200_cpu_device : public cpu_device +{ +public: + // construction/destruction + e0c6200_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data, const char *shortname, const char *source) + : cpu_device(mconfig, type, name, tag, owner, clock, shortname, source) + , m_program_config("program", ENDIANNESS_LITTLE, 16, prgwidth, 0, program) + , m_data_config("data", ENDIANNESS_LITTLE, 8, datawidth, 0, data) + , m_prgwidth(prgwidth) + , m_datawidth(datawidth) + { } + +protected: + // device-level overrides + virtual void device_start(); + virtual void device_reset(); + + // device_execute_interface overrides + virtual UINT32 execute_min_cycles() const { return 5; } + virtual UINT32 execute_max_cycles() const { return 12; } + virtual UINT32 execute_input_lines() const { return 1; } + virtual void execute_run(); + + // device_memory_interface overrides + virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return(spacenum == AS_PROGRAM) ? &m_program_config : ((spacenum == AS_DATA) ? &m_data_config : NULL); } + + // device_disasm_interface overrides + virtual UINT32 disasm_min_opcode_bytes() const { return 2; } + virtual UINT32 disasm_max_opcode_bytes() const { return 2; } + virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options); + + void state_string_export(const device_state_entry &entry, std::string &str); + + address_space_config m_program_config; + address_space_config m_data_config; + address_space *m_program; + address_space *m_data; + + int m_prgwidth; + int m_datawidth; + int m_prgmask; + int m_datamask; + + int m_icount; +}; + + +class e0c6s46_device : public e0c6200_cpu_device +{ +public: + e0c6s46_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); +}; + + + +extern const device_type EPSON_E0C6S46; + + +#endif /* _E06200_H_ */ diff --git a/src/emu/cpu/e0c6200/e0c6200d.c b/src/emu/cpu/e0c6200/e0c6200d.c new file mode 100644 index 00000000000..def8eb9bee7 --- /dev/null +++ b/src/emu/cpu/e0c6200/e0c6200d.c @@ -0,0 +1,18 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/* + + Seiko Epson E0C6200 disassembler + +*/ + +#include "emu.h" +#include "debugger.h" +#include "e0c6200.h" + + + +CPU_DISASSEMBLE(e0c6200) +{ + return 2; +} diff --git a/src/emu/cpu/e0c6200/e0c6200op.inc b/src/emu/cpu/e0c6200/e0c6200op.inc new file mode 100644 index 00000000000..946fdf6a4d5 --- /dev/null +++ b/src/emu/cpu/e0c6200/e0c6200op.inc @@ -0,0 +1 @@ +// E0C6200 opcode handlers diff --git a/src/emu/cpu/hmcs40/hmcs40.h b/src/emu/cpu/hmcs40/hmcs40.h index b5967a4d640..9e722f595a6 100644 --- a/src/emu/cpu/hmcs40/hmcs40.h +++ b/src/emu/cpu/hmcs40/hmcs40.h @@ -153,7 +153,7 @@ protected: virtual void execute_run(); // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return(spacenum == AS_PROGRAM) ? &m_program_config :((spacenum == AS_DATA) ? &m_data_config : NULL); } + virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return(spacenum == AS_PROGRAM) ? &m_program_config : ((spacenum == AS_DATA) ? &m_data_config : NULL); } // device_disasm_interface overrides virtual UINT32 disasm_min_opcode_bytes() const { return 2; } diff --git a/src/emu/cpu/tms0980/tms0980.h b/src/emu/cpu/tms0980/tms0980.h index a291c95de92..15caeedeedb 100644 --- a/src/emu/cpu/tms0980/tms0980.h +++ b/src/emu/cpu/tms0980/tms0980.h @@ -90,7 +90,7 @@ protected: virtual void execute_run(); // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return(spacenum == AS_PROGRAM) ? &m_program_config :((spacenum == AS_DATA) ? &m_data_config : NULL); } + virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return(spacenum == AS_PROGRAM) ? &m_program_config : ((spacenum == AS_DATA) ? &m_data_config : NULL); } // device_disasm_interface overrides virtual UINT32 disasm_min_opcode_bytes() const { return 1; } diff --git a/src/emu/cpu/ucom4/ucom4.h b/src/emu/cpu/ucom4/ucom4.h index 5c4cd18eac4..5e2bff9a62c 100644 --- a/src/emu/cpu/ucom4/ucom4.h +++ b/src/emu/cpu/ucom4/ucom4.h @@ -144,7 +144,7 @@ protected: virtual void execute_run(); // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return(spacenum == AS_PROGRAM) ? &m_program_config :((spacenum == AS_DATA) ? &m_data_config : NULL); } + virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return(spacenum == AS_PROGRAM) ? &m_program_config : ((spacenum == AS_DATA) ? &m_data_config : NULL); } // device_disasm_interface overrides virtual UINT32 disasm_min_opcode_bytes() const { return 1; } diff --git a/src/mess/drivers/hh_hmcs40.c b/src/mess/drivers/hh_hmcs40.c index bec7accfd93..ff43e57257f 100644 --- a/src/mess/drivers/hh_hmcs40.c +++ b/src/mess/drivers/hh_hmcs40.c @@ -1968,7 +1968,7 @@ MACHINE_CONFIG_END NOTE!: MESS external artwork is recommended ***************************************************************************/ - +#if 0 class epacman2_state : public egalaxn2_state { public: @@ -1976,7 +1976,7 @@ public: : egalaxn2_state(mconfig, type, tag) { } }; - +#endif // handlers are identical to Galaxian 2, so we can use those // config