mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
Remove first_screen from smpc, nw
This commit is contained in:
parent
1c2cb61ad3
commit
4973da5f73
62
src/devices/cpu/nuon/nuon.cpp
Normal file
62
src/devices/cpu/nuon/nuon.cpp
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Ryan Holtz
|
||||||
|
/*
|
||||||
|
VM Labs Aries 3 "NUON Multi-Media Architecture" simulator
|
||||||
|
|
||||||
|
- Changelist -
|
||||||
|
10 Mar. 2018
|
||||||
|
- Initial skeleton version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "nuon.h"
|
||||||
|
#include "nuondasm.h"
|
||||||
|
#include "debugger.h"
|
||||||
|
|
||||||
|
#define VERBOSE_LEVEL (0)
|
||||||
|
|
||||||
|
#define ENABLE_VERBOSE_LOG (0)
|
||||||
|
|
||||||
|
static inline void ATTR_PRINTF(3, 4) verboselogout(device_t &dev, uint32_t pc, const char *s_fmt, ...)
|
||||||
|
{
|
||||||
|
va_list v;
|
||||||
|
char buf[32768];
|
||||||
|
va_start(v, s_fmt);
|
||||||
|
vsprintf(buf, s_fmt, v);
|
||||||
|
va_end(v);
|
||||||
|
dev.logerror("%08x: %s", pc, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define verboselog(x,y,...) do { if (ENABLE_VERBOSE_LOG && (VERBOSE_LEVEL >= y)) verboselogout(*this, x, __VA_ARGS__); } while (false)
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// DEVICE INTERFACE
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
DEFINE_DEVICE_TYPE(NUON, nuon_device, "nuon", "Aries 3 \"Nuon\"")
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// nuon_device - constructor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
nuon_device::nuon_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||||
|
: cpu_device(mconfig, NUON, tag, owner, clock)
|
||||||
|
, m_program_configs{{"program_mpe0", ENDIANNESS_BIG, 32, 32},
|
||||||
|
{"program_mpe1", ENDIANNESS_BIG, 32, 32},
|
||||||
|
{"program_mpe2", ENDIANNESS_BIG, 32, 32},
|
||||||
|
{"program_mpe3", ENDIANNESS_BIG, 32, 32}}
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// unimplemented_opcode - bail on unspuported
|
||||||
|
// instruction
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void nuon_device::unimplemented_opcode(uint32_t op)
|
||||||
|
{
|
||||||
|
// machine().debug_break();
|
||||||
|
fatalerror("Nuon: unknown opcode (%08x) at %08x\n", op, m_pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
71
src/devices/cpu/nuon/nuon.h
Normal file
71
src/devices/cpu/nuon/nuon.h
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Ryan Holtz
|
||||||
|
/*
|
||||||
|
VM Labs Aries 3 "NUON Multi-Media Architecture" simulator
|
||||||
|
|
||||||
|
- Changelist -
|
||||||
|
10 Mar. 2018
|
||||||
|
- Initial skeleton version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MAME_CPU_NUON_NUON_H
|
||||||
|
#define MAME_CPU_NUON_NUON_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// TYPE DEFINITIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
class nuon_device : public cpu_device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
nuon_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// device-level overrides
|
||||||
|
virtual void device_start() override;
|
||||||
|
virtual void device_reset() override;
|
||||||
|
|
||||||
|
// device_execute_interface overrides
|
||||||
|
virtual uint32_t execute_min_cycles() const override;
|
||||||
|
virtual uint32_t execute_max_cycles() const override;
|
||||||
|
virtual uint32_t execute_input_lines() const override;
|
||||||
|
virtual void execute_run() override;
|
||||||
|
virtual void execute_set_input(int inputnum, int state) override;
|
||||||
|
|
||||||
|
// device_memory_interface overrides
|
||||||
|
virtual space_config_vector memory_space_config() const override;
|
||||||
|
|
||||||
|
// device_disasm_interface overrides
|
||||||
|
virtual util::disasm_interface *create_disassembler() override;
|
||||||
|
|
||||||
|
// device_state_interface overrides
|
||||||
|
virtual void state_string_export(const device_state_entry &entry, std::string &str) const override;
|
||||||
|
|
||||||
|
// utility functions
|
||||||
|
void unimplemented_opcode(uint32_t op);
|
||||||
|
|
||||||
|
struct mpe_t
|
||||||
|
{
|
||||||
|
// address spaces
|
||||||
|
const address_space_config m_program_config;
|
||||||
|
address_space *m_program;
|
||||||
|
|
||||||
|
// registers
|
||||||
|
uint32_t m_pc;
|
||||||
|
}
|
||||||
|
|
||||||
|
const address_space_config m_program_configs[4];
|
||||||
|
address_space *m_program[4];
|
||||||
|
|
||||||
|
// registers
|
||||||
|
uint32_t m_pc[4];
|
||||||
|
|
||||||
|
// other internal states
|
||||||
|
int m_icount;
|
||||||
|
};
|
||||||
|
|
||||||
|
DECLARE_DEVICE_TYPE(NUON, nuon_device)
|
||||||
|
|
||||||
|
#endif /* MAME_CPU_NUON_NUON_H */
|
@ -219,7 +219,8 @@ smpc_hle_device::smpc_hle_device(const machine_config &mconfig, const char *tag,
|
|||||||
m_pdr2_write(*this),
|
m_pdr2_write(*this),
|
||||||
m_irq_line(*this),
|
m_irq_line(*this),
|
||||||
m_ctrl1(nullptr),
|
m_ctrl1(nullptr),
|
||||||
m_ctrl2(nullptr)
|
m_ctrl2(nullptr),
|
||||||
|
m_screen(*this, finder_base::DUMMY_TAG)
|
||||||
{
|
{
|
||||||
m_ctrl1 = nullptr;
|
m_ctrl1 = nullptr;
|
||||||
m_ctrl2 = nullptr;
|
m_ctrl2 = nullptr;
|
||||||
@ -289,9 +290,6 @@ void smpc_hle_device::device_start()
|
|||||||
m_intback_timer = timer_alloc(INTBACK_ID);
|
m_intback_timer = timer_alloc(INTBACK_ID);
|
||||||
m_sndres_timer = timer_alloc(SNDRES_ID);
|
m_sndres_timer = timer_alloc(SNDRES_ID);
|
||||||
|
|
||||||
// TODO: tag-ify, needed when SCU will be a device
|
|
||||||
m_screen = machine().first_screen();
|
|
||||||
|
|
||||||
m_rtc_data[0] = DectoBCD(systime.local_time.year / 100);
|
m_rtc_data[0] = DectoBCD(systime.local_time.year / 100);
|
||||||
m_rtc_data[1] = DectoBCD(systime.local_time.year % 100);
|
m_rtc_data[1] = DectoBCD(systime.local_time.year % 100);
|
||||||
m_rtc_data[2] = (systime.local_time.weekday << 4) | (systime.local_time.month+1);
|
m_rtc_data[2] = (systime.local_time.weekday << 4) | (systime.local_time.month+1);
|
||||||
|
@ -23,6 +23,12 @@
|
|||||||
#define MCFG_SMPC_HLE_ADD(tag, clock) \
|
#define MCFG_SMPC_HLE_ADD(tag, clock) \
|
||||||
MCFG_DEVICE_ADD((tag), SMPC_HLE, (clock))
|
MCFG_DEVICE_ADD((tag), SMPC_HLE, (clock))
|
||||||
|
|
||||||
|
#define MCFG_SMPC_HLE_SCREEN(screen_tag) \
|
||||||
|
downcast<smpc_hle_device &>(*device).set_screen_tag(("^" screen_tag));
|
||||||
|
|
||||||
|
#define MCFG_SMPC_HLE_CONTROL_PORTS(ctrl1_tag, ctrl2_tag) \
|
||||||
|
downcast<smpc_hle_device &>(*device).set_control_port_tags(ctrl1_tag, ctrl2_tag);
|
||||||
|
|
||||||
#define MCFG_SMPC_HLE_PDR1_IN_CB(_devcb) \
|
#define MCFG_SMPC_HLE_PDR1_IN_CB(_devcb) \
|
||||||
devcb = &downcast<smpc_hle_device &>(*device).set_pdr1_in_handler(DEVCB_##_devcb);
|
devcb = &downcast<smpc_hle_device &>(*device).set_pdr1_in_handler(DEVCB_##_devcb);
|
||||||
|
|
||||||
@ -139,9 +145,8 @@ public:
|
|||||||
devcb_base &set_interrupt_handler(Object &&cb)
|
devcb_base &set_interrupt_handler(Object &&cb)
|
||||||
{ return m_irq_line.set_callback(std::forward<Object>(cb)); }
|
{ return m_irq_line.set_callback(std::forward<Object>(cb)); }
|
||||||
|
|
||||||
void set_region_code(uint8_t rgn)
|
void set_region_code(uint8_t rgn) { m_region_code = rgn; }
|
||||||
{ m_region_code = rgn; }
|
void set_screen_tag(const char *tag) { m_screen.set_tag(tag); }
|
||||||
|
|
||||||
void set_control_port_tags(const char *tag1, const char *tag2)
|
void set_control_port_tags(const char *tag1, const char *tag2)
|
||||||
{
|
{
|
||||||
m_ctrl1_tag = tag1;
|
m_ctrl1_tag = tag1;
|
||||||
@ -245,7 +250,7 @@ private:
|
|||||||
saturn_control_port_device *m_ctrl1;
|
saturn_control_port_device *m_ctrl1;
|
||||||
saturn_control_port_device *m_ctrl2;
|
saturn_control_port_device *m_ctrl2;
|
||||||
|
|
||||||
screen_device *m_screen;
|
required_device<screen_device> m_screen;
|
||||||
|
|
||||||
void smpc_regs(address_map &map);
|
void smpc_regs(address_map &map);
|
||||||
|
|
||||||
|
@ -804,7 +804,8 @@ MACHINE_CONFIG_START(sat_console_state::saturn)
|
|||||||
|
|
||||||
// SMPC MCU, running at 4 MHz (+ custom RTC device that runs at 32.768 KHz)
|
// SMPC MCU, running at 4 MHz (+ custom RTC device that runs at 32.768 KHz)
|
||||||
MCFG_SMPC_HLE_ADD("smpc", XTAL(4'000'000))
|
MCFG_SMPC_HLE_ADD("smpc", XTAL(4'000'000))
|
||||||
downcast<smpc_hle_device &>(*device).set_control_port_tags("ctrl1", "ctrl2");
|
MCFG_SMPC_HLE_SCREEN("screen")
|
||||||
|
MCFG_SMPC_HLE_CONTROL_PORTS("ctrl1", "ctrl2")
|
||||||
MCFG_SMPC_HLE_PDR1_IN_CB(READ8(sat_console_state, saturn_pdr1_direct_r))
|
MCFG_SMPC_HLE_PDR1_IN_CB(READ8(sat_console_state, saturn_pdr1_direct_r))
|
||||||
MCFG_SMPC_HLE_PDR2_IN_CB(READ8(sat_console_state, saturn_pdr2_direct_r))
|
MCFG_SMPC_HLE_PDR2_IN_CB(READ8(sat_console_state, saturn_pdr2_direct_r))
|
||||||
MCFG_SMPC_HLE_PDR1_OUT_CB(WRITE8(sat_console_state, saturn_pdr1_direct_w))
|
MCFG_SMPC_HLE_PDR1_OUT_CB(WRITE8(sat_console_state, saturn_pdr1_direct_w))
|
||||||
|
@ -1079,6 +1079,7 @@ MACHINE_CONFIG_START(stv_state::stv)
|
|||||||
downcast<sega_scu_device &>(*device).set_hostcpu("maincpu");
|
downcast<sega_scu_device &>(*device).set_hostcpu("maincpu");
|
||||||
|
|
||||||
MCFG_SMPC_HLE_ADD("smpc", XTAL(4'000'000))
|
MCFG_SMPC_HLE_ADD("smpc", XTAL(4'000'000))
|
||||||
|
MCFG_SMPC_HLE_SCREEN("screen")
|
||||||
downcast<smpc_hle_device &>(*device).set_region_code(0);
|
downcast<smpc_hle_device &>(*device).set_region_code(0);
|
||||||
MCFG_SMPC_HLE_PDR1_IN_CB(READ8(stv_state, pdr1_input_r))
|
MCFG_SMPC_HLE_PDR1_IN_CB(READ8(stv_state, pdr1_input_r))
|
||||||
MCFG_SMPC_HLE_PDR2_IN_CB(READ8(stv_state, pdr2_input_r))
|
MCFG_SMPC_HLE_PDR2_IN_CB(READ8(stv_state, pdr2_input_r))
|
||||||
|
Loading…
Reference in New Issue
Block a user