And the rest of that commit (nw)

This commit is contained in:
R. Belmont 2013-01-02 02:15:20 +00:00
parent 1eb265397a
commit aefb971048
4 changed files with 53 additions and 17 deletions

View File

@ -132,8 +132,8 @@ void cuda_device::send_port(address_space &space, UINT8 offset, UINT8 data)
adb_in = (data & 0x80) ? true : false;
mac_state *mac = machine().driver_data<mac_state>();
mac->adb_linechange(((data & 0x80) >> 7) ^ 1, (int)(machine().time().as_ticks(1000000) - last_adb_time));
m_adb_dtime = (int)(machine().time().as_ticks(1000000) - last_adb_time);
m_out_adb_func(((data & 0x80) >> 7) ^ 1);
last_adb = data & 0x80;
last_adb_time = machine().time().as_ticks(1000000);
@ -405,6 +405,7 @@ void cuda_device::static_set_type(device_t &device, int type)
void cuda_device::device_start()
{
m_out_reset_func.resolve(m_out_reset_cb, *this);
m_out_adb_func.resolve(m_out_adb_cb, *this);
m_timer = timer_alloc(0, NULL);
m_prog_timer = timer_alloc(1, NULL);
@ -426,6 +427,7 @@ void cuda_device::device_start()
save_item(NAME(via_clock));
save_item(NAME(adb_in));
save_item(NAME(reset_line));
save_item(NAME(m_adb_dtime));
save_item(NAME(pram_loaded));
save_item(NAME(pram));
save_item(NAME(disk_pram));

View File

@ -5,8 +5,6 @@
#include "emu.h"
//**************************************************************************
// MACROS / CONSTANTS
//**************************************************************************
@ -37,6 +35,9 @@
#define MCFG_CUDA_TYPE(_type) \
cuda_device::static_set_type(*device, _type);
#define MCFG_CUDA_REMOVE() \
MCFG_DEVICE_REMOVE(CUDA_TAG)
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@ -44,6 +45,7 @@
struct cuda_interface
{
devcb_write_line m_out_reset_cb;
devcb_write_line m_out_adb_cb;
};
// ======================> cuda_device
@ -85,6 +87,7 @@ public:
void set_via_data(UINT8 dat) { via_data = dat; }
UINT8 get_via_clock() { return via_clock; }
void set_adb_line(int linestate) { adb_in = (linestate == ASSERT_LINE) ? true : false; }
int get_adb_dtime() { return m_adb_dtime; }
int rom_offset;
@ -112,6 +115,7 @@ private:
bool cuda_controls_power;
bool adb_in;
int reset_line;
int m_adb_dtime;
emu_timer *m_timer, *m_prog_timer;
UINT8 pram[0x100], disk_pram[0x100];
bool pram_loaded;
@ -119,6 +123,7 @@ private:
void send_port(address_space &space, UINT8 offset, UINT8 data);
devcb_resolved_write_line m_out_reset_func;
devcb_resolved_write_line m_out_adb_func;
};
// device type definition

View File

@ -130,8 +130,8 @@ void egret_device::send_port(address_space &space, UINT8 offset, UINT8 data)
// allow the linechange handler to override us
adb_in = (data & 0x80) ? true : false;
mac_state *mac = machine().driver_data<mac_state>();
mac->adb_linechange(((data & 0x80) >> 7) ^ 1, (int)(machine().time().as_ticks(1000000) - last_adb_time));
m_adb_dtime = (int)(machine().time().as_ticks(1000000) - last_adb_time);
m_out_adb_func(((data & 0x80) >> 7) ^ 1);
last_adb = data & 0x80;
last_adb_time = machine().time().as_ticks(1000000);
@ -177,12 +177,6 @@ void egret_device::send_port(address_space &space, UINT8 offset, UINT8 data)
// falling edge, should reset the machine too
if ((ports[2] & 8) && !(data&8))
{
mac_state *mac = machine().driver_data<mac_state>();
// force the memory overlay
mac->set_memory_overlay(0);
mac->set_memory_overlay(1);
// if PRAM's waiting to be loaded, transfer it now
if (!pram_loaded)
{
@ -191,7 +185,7 @@ void egret_device::send_port(address_space &space, UINT8 offset, UINT8 data)
}
}
machine().device("maincpu")->execute().set_input_line(INPUT_LINE_RESET, (reset_line & 8) ? ASSERT_LINE : CLEAR_LINE);
m_out_reset_func((reset_line & 8) ? ASSERT_LINE : CLEAR_LINE);
}
break;
}
@ -356,12 +350,33 @@ void egret_device::static_set_type(device_t &device, int type)
egret.rom_offset = type;
}
void egret_device::device_config_complete()
{
m_shortname = "egret";
// inherit a copy of the static data
const egret_interface *intf = reinterpret_cast<const egret_interface *>(static_config());
if (intf != NULL)
{
*static_cast<egret_interface *>(this) = *intf;
}
// or initialize to defaults if none provided
else
{
memset(&m_out_reset_cb, 0, sizeof(m_out_reset_cb));
memset(&m_out_adb_cb, 0, sizeof(m_out_adb_cb));
}
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void egret_device::device_start()
{
m_out_reset_func.resolve(m_out_reset_cb, *this);
m_out_adb_func.resolve(m_out_adb_cb, *this);
m_timer = timer_alloc(0, NULL);
save_item(NAME(ddrs[0]));
save_item(NAME(ddrs[1]));
@ -380,6 +395,7 @@ void egret_device::device_start()
save_item(NAME(via_clock));
save_item(NAME(adb_in));
save_item(NAME(reset_line));
save_item(NAME(m_adb_dtime));
save_item(NAME(pram_loaded));
save_item(NAME(pram));
save_item(NAME(disk_pram));

View File

@ -21,12 +21,14 @@
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_EGRET_ADD(_type) \
#define MCFG_EGRET_ADD(_type, _config) \
MCFG_DEVICE_ADD(EGRET_TAG, EGRET, 0) \
MCFG_DEVICE_CONFIG(_config) \
MCFG_EGRET_TYPE(_type)
#define MCFG_EGRET_REPLACE(_type) \
#define MCFG_EGRET_REPLACE(_type, _config) \
MCFG_DEVICE_REPLACE(EGRET_TAG, EGRET, 0) \
MCFG_DEVICE_CONFIG(_config) \
MCFG_EGRET_TYPE(_type)
#define MCFG_EGRET_TYPE(_type) \
@ -39,9 +41,15 @@
// TYPE DEFINITIONS
//**************************************************************************
struct egret_interface
{
devcb_write_line m_out_reset_cb;
devcb_write_line m_out_adb_cb;
};
// ======================> egret_device
class egret_device : public device_t, public device_nvram_interface
class egret_device : public device_t, public device_nvram_interface, public egret_interface
{
public:
// construction/destruction
@ -78,6 +86,7 @@ public:
void set_via_data(UINT8 dat) { via_data = dat; }
UINT8 get_via_clock() { return via_clock; }
void set_adb_line(int linestate) { adb_in = (linestate == ASSERT_LINE) ? true : false; }
int get_adb_dtime() { return m_adb_dtime; }
int rom_offset;
@ -85,7 +94,7 @@ protected:
// device-level overrides
virtual void device_start();
virtual void device_reset();
virtual void device_config_complete() { m_shortname = "egret"; }
virtual void device_config_complete();
virtual machine_config_constructor device_mconfig_additions() const;
virtual const rom_entry *device_rom_region() const;
@ -105,11 +114,15 @@ private:
bool egret_controls_power;
bool adb_in;
int reset_line;
int m_adb_dtime;
emu_timer *m_timer;
UINT8 pram[0x100], disk_pram[0x100];
bool pram_loaded;
void send_port(address_space &space, UINT8 offset, UINT8 data);
devcb_resolved_write_line m_out_reset_func;
devcb_resolved_write_line m_out_adb_func;
};
// device type definition