Remove first_screen from smpc, nw

This commit is contained in:
mooglyguy 2018-03-10 18:24:47 +01:00
parent 1c2cb61ad3
commit 4973da5f73
6 changed files with 147 additions and 9 deletions

View 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);
}

View 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 */

View File

@ -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);

View File

@ -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);

View File

@ -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))

View File

@ -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))