summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2015-05-05 15:54:07 +0200
committer hap <happppp@users.noreply.github.com>2015-05-05 15:54:07 +0200
commitfc68370aa5c04ac0d0f0e9982e0b79a2d734980d (patch)
tree01708a2993e0d09e05090ecc0d9d3bb8db6b29a8
parent96b6c8ec08e0c42f8c4de430c198e8b21d991c44 (diff)
added E0C6200 cpu skeleton.
also commented out some cpu cores from mame.lua, not needed anymore for unidasm compile due to this check: if (CPUS["MYCPU"]~=null or _OPTIONS["with-tools"]) then
-rw-r--r--scripts/src/cpu.lua16
-rw-r--r--scripts/target/mame/mame.lua9
-rw-r--r--scripts/target/mess/mess.lua1
-rw-r--r--src/emu/cpu/amis2000/amis2000.h2
-rw-r--r--src/emu/cpu/e0c6200/e0c6200.c104
-rw-r--r--src/emu/cpu/e0c6200/e0c6200.h73
-rw-r--r--src/emu/cpu/e0c6200/e0c6200d.c18
-rw-r--r--src/emu/cpu/e0c6200/e0c6200op.inc1
-rw-r--r--src/emu/cpu/hmcs40/hmcs40.h2
-rw-r--r--src/emu/cpu/tms0980/tms0980.h2
-rw-r--r--src/emu/cpu/ucom4/ucom4.h2
-rw-r--r--src/mess/drivers/hh_hmcs40.c4
12 files changed, 224 insertions, 10 deletions
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
@@ -360,6 +360,22 @@ if (CPUS["ESRIP"]~=null or _OPTIONS["with-tools"]) then
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<e0c6s46_device>;
+
+
+// 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