diff options
Diffstat (limited to 'src/devices/cpu/nios2/nios2.cpp')
-rw-r--r-- | src/devices/cpu/nios2/nios2.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/devices/cpu/nios2/nios2.cpp b/src/devices/cpu/nios2/nios2.cpp new file mode 100644 index 00000000000..39dd0fc6209 --- /dev/null +++ b/src/devices/cpu/nios2/nios2.cpp @@ -0,0 +1,62 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/*************************************************************************** + + Altera Nios II soft processor + + Currently this device is just a stub with no actual execution core. + +***************************************************************************/ + +#include "emu.h" +#include "nios2.h" +#include "nios2dasm.h" + +// device type definition +DEFINE_DEVICE_TYPE(NIOS2, nios2_device, "nios2", "Altera Nios II Processor") + +nios2_device::nios2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : cpu_device(mconfig, NIOS2, tag, owner, clock) + , m_program_config("program", ENDIANNESS_LITTLE, 32, 32, 0) +{ + std::fill(std::begin(m_gpr), std::end(m_gpr), 0); +} + +std::unique_ptr<util::disasm_interface> nios2_device::create_disassembler() +{ + return std::make_unique<nios2_disassembler>(); +} + +device_memory_interface::space_config_vector nios2_device::memory_space_config() const +{ + return space_config_vector { + std::make_pair(AS_PROGRAM, &m_program_config) + }; +} + +void nios2_device::device_start() +{ + space(AS_PROGRAM).cache(m_cache); + + set_icountptr(m_icount); + + state_add(NIOS2_PC, "PC", m_pc); + state_add(STATE_GENPC, "GENPC", m_pc).noshow(); + state_add(STATE_GENPCBASE, "CURPC", m_pc).noshow(); + for (int i = 1; i < 32; i++) + state_add(NIOS2_R1 + i - 1, util::string_format("r%d", i).c_str(), m_gpr[i]); + + save_item(NAME(m_gpr)); + save_item(NAME(m_pc)); +} + +void nios2_device::device_reset() +{ + m_pc = 0; +} + +void nios2_device::execute_run() +{ + debugger_instruction_hook(m_pc); + m_icount = 0; +} |