mirror of
https://github.com/holub/mame
synced 2025-04-29 03:20:50 +03:00
Fixed bug where required shared pointers were not actually required.
Added optional/required_shared_ptr_array classes so that you can populate an array of shared pointers. You provide a base tag name, and each item in the array is populated with tag.n, where n is the array index. Updated a couple of drivers using arrays to either not use arrays (where they weren't really providing any benefit) or to use the new array classes.
This commit is contained in:
parent
d2812cfea3
commit
9ecbecb503
@ -116,12 +116,12 @@ device_t::device_t(const machine_config &mconfig, device_type type, const char *
|
|||||||
m_machine_config(mconfig),
|
m_machine_config(mconfig),
|
||||||
m_static_config(NULL),
|
m_static_config(NULL),
|
||||||
m_input_defaults(NULL),
|
m_input_defaults(NULL),
|
||||||
m_auto_finder_list(NULL),
|
|
||||||
m_machine(NULL),
|
m_machine(NULL),
|
||||||
m_save(NULL),
|
m_save(NULL),
|
||||||
m_basetag(tag),
|
m_basetag(tag),
|
||||||
m_config_complete(false),
|
m_config_complete(false),
|
||||||
m_started(false)
|
m_started(false),
|
||||||
|
m_auto_finder_list(NULL)
|
||||||
{
|
{
|
||||||
if (owner != NULL)
|
if (owner != NULL)
|
||||||
m_tag.cpy((owner->owner() == NULL) ? "" : owner->tag()).cat(":").cat(tag);
|
m_tag.cpy((owner->owner() == NULL) ? "" : owner->tag()).cat(":").cat(tag);
|
||||||
@ -863,7 +863,11 @@ void *device_t::finder_base::find_memory(UINT8 width, size_t &bytes, bool requir
|
|||||||
{
|
{
|
||||||
memory_share *share = m_base.machine().memory().shared(m_base, m_tag);
|
memory_share *share = m_base.machine().memory().shared(m_base, m_tag);
|
||||||
if (share == NULL)
|
if (share == NULL)
|
||||||
|
{
|
||||||
|
if (required)
|
||||||
|
throw emu_fatalerror("Shared ptr '%s' not found", m_tag);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
if (share->width() != width)
|
if (share->width() != width)
|
||||||
{
|
{
|
||||||
if (required)
|
if (required)
|
||||||
|
123
src/emu/device.h
123
src/emu/device.h
@ -124,7 +124,6 @@ typedef int (*read_line_device_func)(device_t *device);
|
|||||||
typedef void (*write_line_device_func)(device_t *device, int state);
|
typedef void (*write_line_device_func)(device_t *device, int state);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ======================> device_t
|
// ======================> device_t
|
||||||
|
|
||||||
// device_t represents a device
|
// device_t represents a device
|
||||||
@ -228,6 +227,18 @@ public:
|
|||||||
device_debug *debug() const { return m_debug; }
|
device_debug *debug() const { return m_debug; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
// internal helper classes (defined below)
|
||||||
|
class finder_base;
|
||||||
|
template<class _DeviceClass, bool _Required> class device_finder;
|
||||||
|
template<class _DeviceClass> class optional_device;
|
||||||
|
template<class _DeviceClass> class required_device;
|
||||||
|
template<typename _PointerType, bool _Required> class shared_ptr_finder;
|
||||||
|
template<typename _PointerType> class optional_shared_ptr;
|
||||||
|
template<typename _PointerType> class required_shared_ptr;
|
||||||
|
template<typename _PointerType, int _Count, bool _Required> class shared_ptr_array_finder;
|
||||||
|
template<typename _PointerType, int _Count> class optional_shared_ptr_array;
|
||||||
|
template<typename _PointerType, int _Count> class required_shared_ptr_array;
|
||||||
|
|
||||||
// miscellaneous helpers
|
// miscellaneous helpers
|
||||||
void set_machine(running_machine &machine);
|
void set_machine(running_machine &machine);
|
||||||
void start();
|
void start();
|
||||||
@ -236,6 +247,7 @@ protected:
|
|||||||
void pre_save();
|
void pre_save();
|
||||||
void post_load();
|
void post_load();
|
||||||
void notify_clock_changed();
|
void notify_clock_changed();
|
||||||
|
finder_base *register_auto_finder(finder_base &autodev);
|
||||||
|
|
||||||
//------------------- begin derived class overrides
|
//------------------- begin derived class overrides
|
||||||
|
|
||||||
@ -288,8 +300,28 @@ protected:
|
|||||||
const void * m_static_config; // static device configuration
|
const void * m_static_config; // static device configuration
|
||||||
const input_device_default *m_input_defaults; // devices input ports default overrides
|
const input_device_default *m_input_defaults; // devices input ports default overrides
|
||||||
|
|
||||||
|
private:
|
||||||
|
// private helpers
|
||||||
|
device_t *add_subdevice(device_type type, const char *tag, UINT32 clock);
|
||||||
|
device_t *replace_subdevice(device_t &old, device_type type, const char *tag, UINT32 clock);
|
||||||
|
void remove_subdevice(device_t &device);
|
||||||
|
device_t *subdevice_slow(const char *tag) const;
|
||||||
|
|
||||||
|
// private state; accessor use required
|
||||||
|
running_machine * m_machine;
|
||||||
|
save_manager * m_save;
|
||||||
|
astring m_tag; // full tag for this instance
|
||||||
|
astring m_basetag; // base part of the tag
|
||||||
|
bool m_config_complete; // have we completed our configuration?
|
||||||
|
bool m_started; // true if the start function has succeeded
|
||||||
|
finder_base * m_auto_finder_list; // list of objects to auto-find
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ======================> finder_base
|
||||||
|
|
||||||
// helper class to request auto-object discovery in the constructor of a derived class
|
// helper class to request auto-object discovery in the constructor of a derived class
|
||||||
class finder_base
|
class device_t::finder_base
|
||||||
{
|
{
|
||||||
friend class device_t;
|
friend class device_t;
|
||||||
|
|
||||||
@ -302,7 +334,7 @@ protected:
|
|||||||
virtual void findit() = 0;
|
virtual void findit() = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// static helpers
|
// helpers
|
||||||
void *find_memory(UINT8 width, size_t &bytes, bool required);
|
void *find_memory(UINT8 width, size_t &bytes, bool required);
|
||||||
|
|
||||||
// internal state
|
// internal state
|
||||||
@ -311,9 +343,12 @@ protected:
|
|||||||
const char *m_tag;
|
const char *m_tag;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ======================> device_finder
|
||||||
|
|
||||||
// device finder template
|
// device finder template
|
||||||
template<typename _DeviceClass, bool _Required>
|
template<class _DeviceClass, bool _Required>
|
||||||
class device_finder : public finder_base
|
class device_t::device_finder : public device_t::finder_base
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
@ -324,7 +359,7 @@ protected:
|
|||||||
// operators to make use transparent
|
// operators to make use transparent
|
||||||
operator _DeviceClass *() { return m_target; }
|
operator _DeviceClass *() { return m_target; }
|
||||||
operator _DeviceClass *() const { return m_target; }
|
operator _DeviceClass *() const { return m_target; }
|
||||||
_DeviceClass *operator->() { return m_target; }
|
_DeviceClass *operator->() { assert(m_target != NULL); return m_target; }
|
||||||
|
|
||||||
// getter for explicit fetching
|
// getter for explicit fetching
|
||||||
_DeviceClass *target() const { return m_target; }
|
_DeviceClass *target() const { return m_target; }
|
||||||
@ -347,7 +382,7 @@ protected:
|
|||||||
|
|
||||||
// optional device finder
|
// optional device finder
|
||||||
template<class _DeviceClass>
|
template<class _DeviceClass>
|
||||||
class optional_device : public device_finder<_DeviceClass, false>
|
class device_t::optional_device : public device_t::device_finder<_DeviceClass, false>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
optional_device(device_t &base, const char *tag) : device_finder<_DeviceClass, false>(base, tag) { }
|
optional_device(device_t &base, const char *tag) : device_finder<_DeviceClass, false>(base, tag) { }
|
||||||
@ -355,15 +390,18 @@ protected:
|
|||||||
|
|
||||||
// required devices are similar but throw an error if they are not found
|
// required devices are similar but throw an error if they are not found
|
||||||
template<class _DeviceClass>
|
template<class _DeviceClass>
|
||||||
class required_device : public device_finder<_DeviceClass, true>
|
class device_t::required_device : public device_t::device_finder<_DeviceClass, true>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
required_device(device_t &base, const char *tag) : device_finder<_DeviceClass, true>(base, tag) { }
|
required_device(device_t &base, const char *tag) : device_finder<_DeviceClass, true>(base, tag) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ======================> shared_ptr_finder
|
||||||
|
|
||||||
// shared pointer finder template
|
// shared pointer finder template
|
||||||
template<typename _PointerType, bool _Required>
|
template<typename _PointerType, bool _Required>
|
||||||
class shared_ptr_finder : public finder_base
|
class device_t::shared_ptr_finder : public device_t::finder_base
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
@ -416,43 +454,70 @@ protected:
|
|||||||
UINT8 m_width;
|
UINT8 m_width;
|
||||||
};
|
};
|
||||||
|
|
||||||
// optional device finder
|
// optional shared pointer finder
|
||||||
template<class _PointerType>
|
template<class _PointerType>
|
||||||
class optional_shared_ptr : public shared_ptr_finder<_PointerType, false>
|
class device_t::optional_shared_ptr : public device_t::shared_ptr_finder<_PointerType, false>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
optional_shared_ptr(device_t &base, const char *tag, UINT8 width = 0) : shared_ptr_finder<_PointerType, false>(base, tag, width) { }
|
optional_shared_ptr(device_t &base, const char *tag, UINT8 width = 0) : shared_ptr_finder<_PointerType, false>(base, tag, width) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
// required devices are similar but throw an error if they are not found
|
// required shared pointer finder
|
||||||
template<class _PointerType>
|
template<class _PointerType>
|
||||||
class required_shared_ptr : public shared_ptr_finder<_PointerType, true>
|
class device_t::required_shared_ptr : public device_t::shared_ptr_finder<_PointerType, true>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
required_shared_ptr(device_t &base, const char *tag, UINT8 width = 0) : shared_ptr_finder<_PointerType, true>(base, tag, width) { }
|
required_shared_ptr(device_t &base, const char *tag, UINT8 width = 0) : shared_ptr_finder<_PointerType, true>(base, tag, width) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
// internal helpers
|
|
||||||
finder_base *register_auto_finder(finder_base &autodev);
|
|
||||||
|
|
||||||
finder_base * m_auto_finder_list;
|
// ======================> shared_ptr_array_finder
|
||||||
|
|
||||||
private:
|
// shared pointer array finder template
|
||||||
// private helpers
|
template<typename _PointerType, int _Count, bool _Required>
|
||||||
device_t *add_subdevice(device_type type, const char *tag, UINT32 clock);
|
class device_t::shared_ptr_array_finder
|
||||||
device_t *replace_subdevice(device_t &old, device_type type, const char *tag, UINT32 clock);
|
{
|
||||||
void remove_subdevice(device_t &device);
|
typedef shared_ptr_finder<_PointerType, _Required> shared_ptr_type;
|
||||||
device_t *subdevice_slow(const char *tag) const;
|
|
||||||
|
|
||||||
// private state; accessor use required
|
public:
|
||||||
running_machine * m_machine;
|
// construction/destruction
|
||||||
save_manager * m_save;
|
shared_ptr_array_finder(device_t &base, const char *basetag, UINT8 width = 0)
|
||||||
astring m_tag; // full tag for this instance
|
{
|
||||||
astring m_basetag; // base part of the tag
|
for (int index = 0; index < _Count; index++)
|
||||||
bool m_config_complete; // have we completed our configuration?
|
m_array[index] = global_alloc(shared_ptr_type(base, m_tag[index].format("%s.%d", basetag, index), width));
|
||||||
bool m_started; // true if the start function has succeeded
|
}
|
||||||
|
|
||||||
|
virtual ~shared_ptr_array_finder()
|
||||||
|
{
|
||||||
|
for (int index = 0; index < _Count; index++)
|
||||||
|
global_free(m_array[index]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// array accessors
|
||||||
|
const shared_ptr_type &operator[](int index) const { assert(index < _Count); return *m_array[index]; }
|
||||||
|
shared_ptr_type &operator[](int index) { assert(index < _Count); return *m_array[index]; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// internal state
|
||||||
|
shared_ptr_type *m_array[_Count];
|
||||||
|
astring m_tag[_Count];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// optional shared pointer array finder
|
||||||
|
template<class _PointerType, int _Count>
|
||||||
|
class device_t::optional_shared_ptr_array : public device_t::shared_ptr_array_finder<_PointerType, _Count, false>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
optional_shared_ptr_array(device_t &base, const char *tag, UINT8 width = 0) : shared_ptr_array_finder<_PointerType, _Count, false>(base, tag, width) { }
|
||||||
|
};
|
||||||
|
|
||||||
|
// required shared pointer array finder
|
||||||
|
template<class _PointerType, int _Count>
|
||||||
|
class device_t::required_shared_ptr_array : public device_t::shared_ptr_array_finder<_PointerType, _Count, true>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
required_shared_ptr_array(device_t &base, const char *tag, UINT8 width = 0) : shared_ptr_array_finder<_PointerType, _Count, true>(base, tag, width) { }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// ======================> device_interface
|
// ======================> device_interface
|
||||||
|
@ -43,7 +43,10 @@ class blitz68k_state : public driver_device
|
|||||||
public:
|
public:
|
||||||
blitz68k_state(const machine_config &mconfig, device_type type, const char *tag)
|
blitz68k_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: driver_device(mconfig, type, tag),
|
: driver_device(mconfig, type, tag),
|
||||||
m_nvram(*this, "nvram") { }
|
m_nvram(*this, "nvram"),
|
||||||
|
m_leds0(*this, "leds0"),
|
||||||
|
m_leds1(*this, "leds1"),
|
||||||
|
m_leds2(*this, "leds2") { }
|
||||||
|
|
||||||
optional_shared_ptr<UINT16> m_nvram;
|
optional_shared_ptr<UINT16> m_nvram;
|
||||||
UINT8 *m_blit_buffer;
|
UINT8 *m_blit_buffer;
|
||||||
@ -55,7 +58,9 @@ public:
|
|||||||
UINT16 *m_blit_dst_ram_hiword;
|
UINT16 *m_blit_dst_ram_hiword;
|
||||||
UINT16 *m_blit_vregs;
|
UINT16 *m_blit_vregs;
|
||||||
UINT16 *m_blit_transpen;
|
UINT16 *m_blit_transpen;
|
||||||
UINT16 *m_leds[3];
|
required_shared_ptr<UINT16> m_leds0;
|
||||||
|
required_shared_ptr<UINT16> m_leds1;
|
||||||
|
optional_shared_ptr<UINT16> m_leds2;
|
||||||
DECLARE_WRITE16_MEMBER(blit_copy_w);
|
DECLARE_WRITE16_MEMBER(blit_copy_w);
|
||||||
DECLARE_READ8_MEMBER(blit_status_r);
|
DECLARE_READ8_MEMBER(blit_status_r);
|
||||||
DECLARE_WRITE8_MEMBER(blit_x_w);
|
DECLARE_WRITE8_MEMBER(blit_x_w);
|
||||||
@ -505,13 +510,13 @@ WRITE8_MEMBER(blitz68k_state::blit_hwyxa_draw_w)
|
|||||||
void blitz68k_state::show_leds123()
|
void blitz68k_state::show_leds123()
|
||||||
{
|
{
|
||||||
#ifdef MAME_DEBUG
|
#ifdef MAME_DEBUG
|
||||||
popmessage("led %02x %02x %02x", m_leds[0][0]>>8, m_leds[1][0]>>8, m_leds[2][0]>>8);
|
popmessage("led %02x %02x %02x", m_leds0[0]>>8, m_leds1[0]>>8, m_leds2[0]>>8);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
void blitz68k_state::show_leds12()
|
void blitz68k_state::show_leds12()
|
||||||
{
|
{
|
||||||
#ifdef MAME_DEBUG
|
#ifdef MAME_DEBUG
|
||||||
popmessage("led %02x %02x", m_leds[0][0]>>8, m_leds[1][0]>>8);
|
popmessage("led %02x %02x", m_leds0[0]>>8, m_leds1[0]>>8);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -793,7 +798,7 @@ ADDRESS_MAP_END
|
|||||||
|
|
||||||
WRITE16_MEMBER(blitz68k_state::cjffruit_leds1_w)
|
WRITE16_MEMBER(blitz68k_state::cjffruit_leds1_w)
|
||||||
{
|
{
|
||||||
data = COMBINE_DATA(m_leds[0]);
|
data = COMBINE_DATA(m_leds0);
|
||||||
if (ACCESSING_BITS_8_15)
|
if (ACCESSING_BITS_8_15)
|
||||||
{
|
{
|
||||||
coin_counter_w(machine(), 0, data & 0x0100); // coin in
|
coin_counter_w(machine(), 0, data & 0x0100); // coin in
|
||||||
@ -810,7 +815,7 @@ WRITE16_MEMBER(blitz68k_state::cjffruit_leds1_w)
|
|||||||
|
|
||||||
WRITE16_MEMBER(blitz68k_state::cjffruit_leds2_w)
|
WRITE16_MEMBER(blitz68k_state::cjffruit_leds2_w)
|
||||||
{
|
{
|
||||||
data = COMBINE_DATA(m_leds[1]);
|
data = COMBINE_DATA(m_leds1);
|
||||||
if (ACCESSING_BITS_8_15)
|
if (ACCESSING_BITS_8_15)
|
||||||
{
|
{
|
||||||
set_led_status(machine(), 7, data & 0x0100); // start
|
set_led_status(machine(), 7, data & 0x0100); // start
|
||||||
@ -827,7 +832,7 @@ WRITE16_MEMBER(blitz68k_state::cjffruit_leds2_w)
|
|||||||
|
|
||||||
WRITE16_MEMBER(blitz68k_state::cjffruit_leds3_w)
|
WRITE16_MEMBER(blitz68k_state::cjffruit_leds3_w)
|
||||||
{
|
{
|
||||||
data = COMBINE_DATA(m_leds[2]);
|
data = COMBINE_DATA(m_leds2);
|
||||||
if (ACCESSING_BITS_8_15)
|
if (ACCESSING_BITS_8_15)
|
||||||
{
|
{
|
||||||
set_led_status(machine(), 15, data & 0x0100); // hopper coins?
|
set_led_status(machine(), 15, data & 0x0100); // hopper coins?
|
||||||
@ -902,9 +907,9 @@ static ADDRESS_MAP_START( cjffruit_map, AS_PROGRAM, 16, blitz68k_state )
|
|||||||
|
|
||||||
AM_RANGE(0x8e0000, 0x8e0001) AM_WRITE(cjffruit_mcu_w )
|
AM_RANGE(0x8e0000, 0x8e0001) AM_WRITE(cjffruit_mcu_w )
|
||||||
|
|
||||||
AM_RANGE(0x8f8000, 0x8f8001) AM_WRITE(cjffruit_leds1_w) AM_BASE(m_leds[0])
|
AM_RANGE(0x8f8000, 0x8f8001) AM_WRITE(cjffruit_leds1_w) AM_SHARE("leds0")
|
||||||
AM_RANGE(0x8fa000, 0x8fa001) AM_WRITE(cjffruit_leds2_w) AM_BASE(m_leds[1])
|
AM_RANGE(0x8fa000, 0x8fa001) AM_WRITE(cjffruit_leds2_w) AM_SHARE("leds1")
|
||||||
AM_RANGE(0x8fc000, 0x8fc001) AM_WRITE(cjffruit_leds3_w) AM_BASE(m_leds[2])
|
AM_RANGE(0x8fc000, 0x8fc001) AM_WRITE(cjffruit_leds3_w) AM_SHARE("leds2")
|
||||||
|
|
||||||
AM_RANGE(0x8fe000, 0x8fe003) AM_WRITE8(blit_flags_w, 0xffff) // flipx,y,solid,trans
|
AM_RANGE(0x8fe000, 0x8fe003) AM_WRITE8(blit_flags_w, 0xffff) // flipx,y,solid,trans
|
||||||
AM_RANGE(0x8fe004, 0x8fe005) AM_WRITEONLY
|
AM_RANGE(0x8fe004, 0x8fe005) AM_WRITEONLY
|
||||||
@ -932,7 +937,7 @@ WRITE16_MEMBER(blitz68k_state::deucesw2_mcu_w)
|
|||||||
|
|
||||||
WRITE16_MEMBER(blitz68k_state::deucesw2_leds1_w)
|
WRITE16_MEMBER(blitz68k_state::deucesw2_leds1_w)
|
||||||
{
|
{
|
||||||
data = COMBINE_DATA(m_leds[0]);
|
data = COMBINE_DATA(m_leds0);
|
||||||
if (ACCESSING_BITS_8_15)
|
if (ACCESSING_BITS_8_15)
|
||||||
{
|
{
|
||||||
coin_counter_w(machine(), 0, data & 0x0100); // coin in
|
coin_counter_w(machine(), 0, data & 0x0100); // coin in
|
||||||
@ -949,7 +954,7 @@ WRITE16_MEMBER(blitz68k_state::deucesw2_leds1_w)
|
|||||||
|
|
||||||
WRITE16_MEMBER(blitz68k_state::deucesw2_leds2_w)
|
WRITE16_MEMBER(blitz68k_state::deucesw2_leds2_w)
|
||||||
{
|
{
|
||||||
data = COMBINE_DATA(m_leds[1]);
|
data = COMBINE_DATA(m_leds1);
|
||||||
if (ACCESSING_BITS_8_15)
|
if (ACCESSING_BITS_8_15)
|
||||||
{
|
{
|
||||||
set_led_status(machine(), 7, data & 0x0100); // start
|
set_led_status(machine(), 7, data & 0x0100); // start
|
||||||
@ -966,7 +971,7 @@ WRITE16_MEMBER(blitz68k_state::deucesw2_leds2_w)
|
|||||||
|
|
||||||
WRITE16_MEMBER(blitz68k_state::deucesw2_leds3_w)
|
WRITE16_MEMBER(blitz68k_state::deucesw2_leds3_w)
|
||||||
{
|
{
|
||||||
data = COMBINE_DATA(m_leds[2]);
|
data = COMBINE_DATA(m_leds2);
|
||||||
if (ACCESSING_BITS_8_15)
|
if (ACCESSING_BITS_8_15)
|
||||||
{
|
{
|
||||||
set_led_status(machine(), 15, data & 0x0100); // hopper coins?
|
set_led_status(machine(), 15, data & 0x0100); // hopper coins?
|
||||||
@ -1001,9 +1006,9 @@ static ADDRESS_MAP_START( deucesw2_map, AS_PROGRAM, 16, blitz68k_state )
|
|||||||
|
|
||||||
AM_RANGE(0x896000, 0x896001) AM_WRITE(deucesw2_mcu_w )
|
AM_RANGE(0x896000, 0x896001) AM_WRITE(deucesw2_mcu_w )
|
||||||
|
|
||||||
AM_RANGE(0x898000, 0x898001) AM_WRITE(deucesw2_leds1_w) AM_BASE(m_leds[0])
|
AM_RANGE(0x898000, 0x898001) AM_WRITE(deucesw2_leds1_w) AM_SHARE("leds0")
|
||||||
AM_RANGE(0x89a000, 0x89a001) AM_WRITE(deucesw2_leds2_w) AM_BASE(m_leds[1])
|
AM_RANGE(0x89a000, 0x89a001) AM_WRITE(deucesw2_leds2_w) AM_SHARE("leds1")
|
||||||
AM_RANGE(0x89c000, 0x89c001) AM_WRITE(deucesw2_leds3_w) AM_BASE(m_leds[2])
|
AM_RANGE(0x89c000, 0x89c001) AM_WRITE(deucesw2_leds3_w) AM_SHARE("leds2")
|
||||||
|
|
||||||
AM_RANGE(0x89e000, 0x89e003) AM_WRITE8(blit_flags_w, 0xffff) // flipx,y,solid,trans
|
AM_RANGE(0x89e000, 0x89e003) AM_WRITE8(blit_flags_w, 0xffff) // flipx,y,solid,trans
|
||||||
AM_RANGE(0x89e004, 0x89e005) AM_WRITEONLY
|
AM_RANGE(0x89e004, 0x89e005) AM_WRITEONLY
|
||||||
@ -1122,7 +1127,7 @@ WRITE16_MEMBER(blitz68k_state::hermit_mcu_w)
|
|||||||
|
|
||||||
WRITE16_MEMBER(blitz68k_state::hermit_leds1_w)
|
WRITE16_MEMBER(blitz68k_state::hermit_leds1_w)
|
||||||
{
|
{
|
||||||
data = COMBINE_DATA(m_leds[0]);
|
data = COMBINE_DATA(m_leds0);
|
||||||
if (ACCESSING_BITS_8_15)
|
if (ACCESSING_BITS_8_15)
|
||||||
{
|
{
|
||||||
coin_counter_w(machine(), 0, data & 0x0100); // coin in
|
coin_counter_w(machine(), 0, data & 0x0100); // coin in
|
||||||
@ -1132,7 +1137,7 @@ WRITE16_MEMBER(blitz68k_state::hermit_leds1_w)
|
|||||||
|
|
||||||
WRITE16_MEMBER(blitz68k_state::hermit_leds2_w)
|
WRITE16_MEMBER(blitz68k_state::hermit_leds2_w)
|
||||||
{
|
{
|
||||||
data = COMBINE_DATA(m_leds[1]);
|
data = COMBINE_DATA(m_leds1);
|
||||||
if (ACCESSING_BITS_8_15)
|
if (ACCESSING_BITS_8_15)
|
||||||
{
|
{
|
||||||
set_led_status(machine(), 7, data & 0x0100); // button
|
set_led_status(machine(), 7, data & 0x0100); // button
|
||||||
@ -1176,8 +1181,8 @@ static ADDRESS_MAP_START( hermit_map, AS_PROGRAM, 16, blitz68k_state )
|
|||||||
AM_RANGE(0x9d0000, 0x9d0001) AM_READ_PORT("IN2")
|
AM_RANGE(0x9d0000, 0x9d0001) AM_READ_PORT("IN2")
|
||||||
AM_RANGE(0x9d8000, 0x9d8001) AM_READ_PORT("DSW")
|
AM_RANGE(0x9d8000, 0x9d8001) AM_READ_PORT("DSW")
|
||||||
|
|
||||||
AM_RANGE(0x9e0000, 0x9e0001) AM_WRITE(hermit_leds1_w) AM_BASE(m_leds[0])
|
AM_RANGE(0x9e0000, 0x9e0001) AM_WRITE(hermit_leds1_w) AM_SHARE("leds0")
|
||||||
AM_RANGE(0x9e8000, 0x9e8001) AM_WRITE(hermit_leds2_w) AM_BASE(m_leds[1])
|
AM_RANGE(0x9e8000, 0x9e8001) AM_WRITE(hermit_leds2_w) AM_SHARE("leds1")
|
||||||
|
|
||||||
AM_RANGE(0x9f0000, 0x9f0003) AM_WRITE8(blit_flags_w, 0xffff) // flipx,y,solid,trans
|
AM_RANGE(0x9f0000, 0x9f0003) AM_WRITE8(blit_flags_w, 0xffff) // flipx,y,solid,trans
|
||||||
AM_RANGE(0x9f0004, 0x9f0005) AM_WRITEONLY
|
AM_RANGE(0x9f0004, 0x9f0005) AM_WRITEONLY
|
||||||
|
@ -98,24 +98,37 @@ class bnstars_state : public driver_device
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bnstars_state(const machine_config &mconfig, device_type type, const char *tag)
|
bnstars_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: driver_device(mconfig, type, tag) { }
|
: driver_device(mconfig, type, tag),
|
||||||
|
m_ms32_tx0_ram(*this, "tx0_ram"),
|
||||||
|
m_ms32_tx1_ram(*this, "tx1_ram"),
|
||||||
|
m_ms32_bg0_ram(*this, "bg0_ram"),
|
||||||
|
m_ms32_bg1_ram(*this, "bg1_ram"),
|
||||||
|
m_ms32_roz0_ram(*this, "roz0_ram"),
|
||||||
|
m_ms32_roz1_ram(*this, "roz1_ram"),
|
||||||
|
m_ms32_pal_ram(*this, "pal_ram"),
|
||||||
|
m_ms32_roz_ctrl(*this, "roz_ctrl"),
|
||||||
|
m_ms32_spram(*this, "spram"),
|
||||||
|
m_ms32_tx0_scroll(*this, "tx0_scroll"),
|
||||||
|
m_ms32_bg0_scroll(*this, "bg0_scroll"),
|
||||||
|
m_ms32_tx1_scroll(*this, "tx1_scroll"),
|
||||||
|
m_ms32_bg1_scroll(*this, "bg1_scroll") { }
|
||||||
|
|
||||||
tilemap_t *m_ms32_tx_tilemap[2];
|
tilemap_t *m_ms32_tx_tilemap[2];
|
||||||
tilemap_t *m_ms32_bg_tilemap[2];
|
tilemap_t *m_ms32_bg_tilemap[2];
|
||||||
tilemap_t *m_ms32_roz_tilemap[2];
|
tilemap_t *m_ms32_roz_tilemap[2];
|
||||||
UINT32 *m_ms32_tx0_ram;
|
required_shared_ptr<UINT32> m_ms32_tx0_ram;
|
||||||
UINT32 *m_ms32_tx1_ram;
|
required_shared_ptr<UINT32> m_ms32_tx1_ram;
|
||||||
UINT32 *m_ms32_bg0_ram;
|
required_shared_ptr<UINT32> m_ms32_bg0_ram;
|
||||||
UINT32 *m_ms32_bg1_ram;
|
required_shared_ptr<UINT32> m_ms32_bg1_ram;
|
||||||
UINT32 *m_ms32_roz0_ram;
|
required_shared_ptr<UINT32> m_ms32_roz0_ram;
|
||||||
UINT32 *m_ms32_roz1_ram;
|
required_shared_ptr<UINT32> m_ms32_roz1_ram;
|
||||||
UINT32 *m_ms32_pal_ram[2];
|
required_shared_ptr_array<UINT32, 2> m_ms32_pal_ram;
|
||||||
UINT32 *m_ms32_roz_ctrl[2];
|
required_shared_ptr_array<UINT32, 2> m_ms32_roz_ctrl;
|
||||||
UINT32 *m_ms32_spram;
|
required_shared_ptr<UINT32> m_ms32_spram;
|
||||||
UINT32 *m_ms32_tx0_scroll;
|
required_shared_ptr<UINT32> m_ms32_tx0_scroll;
|
||||||
UINT32 *m_ms32_bg0_scroll;
|
required_shared_ptr<UINT32> m_ms32_bg0_scroll;
|
||||||
UINT32 *m_ms32_tx1_scroll;
|
required_shared_ptr<UINT32> m_ms32_tx1_scroll;
|
||||||
UINT32 *m_ms32_bg1_scroll;
|
required_shared_ptr<UINT32> m_ms32_bg1_scroll;
|
||||||
UINT32 m_bnstars1_mahjong_select;
|
UINT32 m_bnstars1_mahjong_select;
|
||||||
int m_ms32_reverse_sprite_order;
|
int m_ms32_reverse_sprite_order;
|
||||||
int m_flipscreen;
|
int m_flipscreen;
|
||||||
@ -1276,27 +1289,27 @@ static ADDRESS_MAP_START( bnstars_map, AS_PROGRAM, 32, bnstars_state )
|
|||||||
AM_RANGE(0xfce00058, 0xfce0005b) AM_WRITENOP
|
AM_RANGE(0xfce00058, 0xfce0005b) AM_WRITENOP
|
||||||
AM_RANGE(0xfce0005c, 0xfce0005f) AM_WRITENOP
|
AM_RANGE(0xfce0005c, 0xfce0005f) AM_WRITENOP
|
||||||
|
|
||||||
AM_RANGE(0xfce00400, 0xfce0045f) AM_WRITEONLY AM_BASE(m_ms32_roz_ctrl[0])
|
AM_RANGE(0xfce00400, 0xfce0045f) AM_WRITEONLY AM_SHARE("roz_ctrl.0")
|
||||||
AM_RANGE(0xfce00700, 0xfce0075f) AM_WRITEONLY AM_BASE(m_ms32_roz_ctrl[1]) // guess
|
AM_RANGE(0xfce00700, 0xfce0075f) AM_WRITEONLY AM_SHARE("roz_ctrl.1") // guess
|
||||||
AM_RANGE(0xfce00a00, 0xfce00a17) AM_WRITEONLY AM_BASE(m_ms32_tx0_scroll)
|
AM_RANGE(0xfce00a00, 0xfce00a17) AM_WRITEONLY AM_SHARE("tx0_scroll")
|
||||||
AM_RANGE(0xfce00a20, 0xfce00a37) AM_WRITEONLY AM_BASE(m_ms32_bg0_scroll)
|
AM_RANGE(0xfce00a20, 0xfce00a37) AM_WRITEONLY AM_SHARE("bg0_scroll")
|
||||||
AM_RANGE(0xfce00c00, 0xfce00c17) AM_WRITEONLY AM_BASE(m_ms32_tx1_scroll)
|
AM_RANGE(0xfce00c00, 0xfce00c17) AM_WRITEONLY AM_SHARE("tx1_scroll")
|
||||||
AM_RANGE(0xfce00c20, 0xfce00c37) AM_WRITEONLY AM_BASE(m_ms32_bg1_scroll)
|
AM_RANGE(0xfce00c20, 0xfce00c37) AM_WRITEONLY AM_SHARE("bg1_scroll")
|
||||||
|
|
||||||
AM_RANGE(0xfce00e00, 0xfce00e03) AM_WRITE(bnstars1_mahjong_select_w) // ?
|
AM_RANGE(0xfce00e00, 0xfce00e03) AM_WRITE(bnstars1_mahjong_select_w) // ?
|
||||||
|
|
||||||
/* wrote together */
|
/* wrote together */
|
||||||
AM_RANGE(0xfd040000, 0xfd047fff) AM_RAM // priority ram
|
AM_RANGE(0xfd040000, 0xfd047fff) AM_RAM // priority ram
|
||||||
AM_RANGE(0xfd080000, 0xfd087fff) AM_RAM
|
AM_RANGE(0xfd080000, 0xfd087fff) AM_RAM
|
||||||
AM_RANGE(0xfd200000, 0xfd237fff) AM_RAM_WRITE(ms32_pal1_ram_w) AM_BASE(m_ms32_pal_ram[1])
|
AM_RANGE(0xfd200000, 0xfd237fff) AM_RAM_WRITE(ms32_pal1_ram_w) AM_SHARE("pal_ram.1")
|
||||||
AM_RANGE(0xfd400000, 0xfd437fff) AM_RAM_WRITE(ms32_pal0_ram_w) AM_BASE(m_ms32_pal_ram[0])
|
AM_RANGE(0xfd400000, 0xfd437fff) AM_RAM_WRITE(ms32_pal0_ram_w) AM_SHARE("pal_ram.0")
|
||||||
AM_RANGE(0xfe000000, 0xfe01ffff) AM_RAM_WRITE(ms32_roz1_ram_w) AM_BASE(m_ms32_roz1_ram)
|
AM_RANGE(0xfe000000, 0xfe01ffff) AM_RAM_WRITE(ms32_roz1_ram_w) AM_SHARE("roz1_ram")
|
||||||
AM_RANGE(0xfe400000, 0xfe41ffff) AM_RAM_WRITE(ms32_roz0_ram_w) AM_BASE(m_ms32_roz0_ram)
|
AM_RANGE(0xfe400000, 0xfe41ffff) AM_RAM_WRITE(ms32_roz0_ram_w) AM_SHARE("roz0_ram")
|
||||||
AM_RANGE(0xfe800000, 0xfe83ffff) AM_RAM_WRITE(ms32_spramx_w) AM_BASE(m_ms32_spram)
|
AM_RANGE(0xfe800000, 0xfe83ffff) AM_RAM_WRITE(ms32_spramx_w) AM_SHARE("spram")
|
||||||
AM_RANGE(0xfea00000, 0xfea07fff) AM_RAM_WRITE(ms32_tx1_ram_w) AM_BASE(m_ms32_tx1_ram)
|
AM_RANGE(0xfea00000, 0xfea07fff) AM_RAM_WRITE(ms32_tx1_ram_w) AM_SHARE("tx1_ram")
|
||||||
AM_RANGE(0xfea08000, 0xfea0ffff) AM_RAM_WRITE(ms32_bg1_ram_w) AM_BASE(m_ms32_bg1_ram)
|
AM_RANGE(0xfea08000, 0xfea0ffff) AM_RAM_WRITE(ms32_bg1_ram_w) AM_SHARE("bg1_ram")
|
||||||
AM_RANGE(0xfec00000, 0xfec07fff) AM_RAM_WRITE(ms32_tx0_ram_w) AM_BASE(m_ms32_tx0_ram)
|
AM_RANGE(0xfec00000, 0xfec07fff) AM_RAM_WRITE(ms32_tx0_ram_w) AM_SHARE("tx0_ram")
|
||||||
AM_RANGE(0xfec08000, 0xfec0ffff) AM_RAM_WRITE(ms32_bg0_ram_w) AM_BASE(m_ms32_bg0_ram)
|
AM_RANGE(0xfec08000, 0xfec0ffff) AM_RAM_WRITE(ms32_bg0_ram_w) AM_SHARE("bg0_ram")
|
||||||
|
|
||||||
AM_RANGE(0xfee00000, 0xfee1ffff) AM_RAM
|
AM_RANGE(0xfee00000, 0xfee1ffff) AM_RAM
|
||||||
AM_RANGE(0xffe00000, 0xffffffff) AM_ROMBANK("bank1")
|
AM_RANGE(0xffe00000, 0xffffffff) AM_ROMBANK("bank1")
|
||||||
|
@ -327,12 +327,16 @@ class hornet_state : public driver_device
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
hornet_state(const machine_config &mconfig, device_type type, const char *tag)
|
hornet_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: driver_device(mconfig, type, tag) { }
|
: driver_device(mconfig, type, tag),
|
||||||
|
m_workram(*this, "workram"),
|
||||||
|
m_sharc_dataram0(*this, "share_dataram0"),
|
||||||
|
m_sharc_dataram1(*this, "share_dataram1") { }
|
||||||
|
|
||||||
UINT8 m_led_reg0;
|
UINT8 m_led_reg0;
|
||||||
UINT8 m_led_reg1;
|
UINT8 m_led_reg1;
|
||||||
UINT32 *m_workram;
|
required_shared_ptr<UINT32> m_workram;
|
||||||
UINT32 *m_sharc_dataram[2];
|
required_shared_ptr<UINT32> m_sharc_dataram0;
|
||||||
|
required_shared_ptr<UINT32> m_sharc_dataram1;
|
||||||
UINT8 *m_jvs_sdata;
|
UINT8 *m_jvs_sdata;
|
||||||
UINT32 m_jvs_sdata_ptr;
|
UINT32 m_jvs_sdata_ptr;
|
||||||
emu_timer *m_sound_irq_timer;
|
emu_timer *m_sound_irq_timer;
|
||||||
@ -622,7 +626,7 @@ WRITE32_MEMBER(hornet_state::gun_w)
|
|||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static ADDRESS_MAP_START( hornet_map, AS_PROGRAM, 32, hornet_state )
|
static ADDRESS_MAP_START( hornet_map, AS_PROGRAM, 32, hornet_state )
|
||||||
AM_RANGE(0x00000000, 0x003fffff) AM_RAM AM_BASE(m_workram) /* Work RAM */
|
AM_RANGE(0x00000000, 0x003fffff) AM_RAM AM_SHARE("workram") /* Work RAM */
|
||||||
AM_RANGE(0x74000000, 0x740000ff) AM_READWRITE(hornet_k037122_reg_r, hornet_k037122_reg_w)
|
AM_RANGE(0x74000000, 0x740000ff) AM_READWRITE(hornet_k037122_reg_r, hornet_k037122_reg_w)
|
||||||
AM_RANGE(0x74020000, 0x7403ffff) AM_READWRITE(hornet_k037122_sram_r, hornet_k037122_sram_w)
|
AM_RANGE(0x74020000, 0x7403ffff) AM_READWRITE(hornet_k037122_sram_r, hornet_k037122_sram_w)
|
||||||
AM_RANGE(0x74040000, 0x7407ffff) AM_READWRITE(hornet_k037122_char_r, hornet_k037122_char_w)
|
AM_RANGE(0x74040000, 0x7407ffff) AM_READWRITE(hornet_k037122_char_r, hornet_k037122_char_w)
|
||||||
@ -699,27 +703,27 @@ ADDRESS_MAP_END
|
|||||||
|
|
||||||
READ32_MEMBER(hornet_state::dsp_dataram0_r)
|
READ32_MEMBER(hornet_state::dsp_dataram0_r)
|
||||||
{
|
{
|
||||||
return m_sharc_dataram[0][offset] & 0xffff;
|
return m_sharc_dataram0[offset] & 0xffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE32_MEMBER(hornet_state::dsp_dataram0_w)
|
WRITE32_MEMBER(hornet_state::dsp_dataram0_w)
|
||||||
{
|
{
|
||||||
m_sharc_dataram[0][offset] = data;
|
m_sharc_dataram0[offset] = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
READ32_MEMBER(hornet_state::dsp_dataram1_r)
|
READ32_MEMBER(hornet_state::dsp_dataram1_r)
|
||||||
{
|
{
|
||||||
return m_sharc_dataram[1][offset] & 0xffff;
|
return m_sharc_dataram1[offset] & 0xffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE32_MEMBER(hornet_state::dsp_dataram1_w)
|
WRITE32_MEMBER(hornet_state::dsp_dataram1_w)
|
||||||
{
|
{
|
||||||
m_sharc_dataram[1][offset] = data;
|
m_sharc_dataram1[offset] = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ADDRESS_MAP_START( sharc0_map, AS_DATA, 32, hornet_state )
|
static ADDRESS_MAP_START( sharc0_map, AS_DATA, 32, hornet_state )
|
||||||
AM_RANGE(0x0400000, 0x041ffff) AM_READWRITE_LEGACY(cgboard_0_shared_sharc_r, cgboard_0_shared_sharc_w)
|
AM_RANGE(0x0400000, 0x041ffff) AM_READWRITE_LEGACY(cgboard_0_shared_sharc_r, cgboard_0_shared_sharc_w)
|
||||||
AM_RANGE(0x0500000, 0x05fffff) AM_READWRITE(dsp_dataram0_r, dsp_dataram0_w) AM_BASE(m_sharc_dataram[0])
|
AM_RANGE(0x0500000, 0x05fffff) AM_READWRITE(dsp_dataram0_r, dsp_dataram0_w) AM_SHARE("sharc_dataram0")
|
||||||
AM_RANGE(0x1400000, 0x14fffff) AM_RAM
|
AM_RANGE(0x1400000, 0x14fffff) AM_RAM
|
||||||
AM_RANGE(0x2400000, 0x27fffff) AM_DEVREADWRITE_LEGACY("voodoo0", voodoo_r, voodoo_w)
|
AM_RANGE(0x2400000, 0x27fffff) AM_DEVREADWRITE_LEGACY("voodoo0", voodoo_r, voodoo_w)
|
||||||
AM_RANGE(0x3400000, 0x34000ff) AM_READWRITE_LEGACY(cgboard_0_comm_sharc_r, cgboard_0_comm_sharc_w)
|
AM_RANGE(0x3400000, 0x34000ff) AM_READWRITE_LEGACY(cgboard_0_comm_sharc_r, cgboard_0_comm_sharc_w)
|
||||||
@ -729,7 +733,7 @@ ADDRESS_MAP_END
|
|||||||
|
|
||||||
static ADDRESS_MAP_START( sharc1_map, AS_DATA, 32, hornet_state )
|
static ADDRESS_MAP_START( sharc1_map, AS_DATA, 32, hornet_state )
|
||||||
AM_RANGE(0x0400000, 0x041ffff) AM_READWRITE_LEGACY(cgboard_1_shared_sharc_r, cgboard_1_shared_sharc_w)
|
AM_RANGE(0x0400000, 0x041ffff) AM_READWRITE_LEGACY(cgboard_1_shared_sharc_r, cgboard_1_shared_sharc_w)
|
||||||
AM_RANGE(0x0500000, 0x05fffff) AM_READWRITE(dsp_dataram1_r, dsp_dataram1_w) AM_BASE(m_sharc_dataram[1])
|
AM_RANGE(0x0500000, 0x05fffff) AM_READWRITE(dsp_dataram1_r, dsp_dataram1_w) AM_SHARE("sharc_dataram1")
|
||||||
AM_RANGE(0x1400000, 0x14fffff) AM_RAM
|
AM_RANGE(0x1400000, 0x14fffff) AM_RAM
|
||||||
AM_RANGE(0x2400000, 0x27fffff) AM_DEVREADWRITE_LEGACY("voodoo1", voodoo_r, voodoo_w)
|
AM_RANGE(0x2400000, 0x27fffff) AM_DEVREADWRITE_LEGACY("voodoo1", voodoo_r, voodoo_w)
|
||||||
AM_RANGE(0x3400000, 0x34000ff) AM_READWRITE_LEGACY(cgboard_1_comm_sharc_r, cgboard_1_comm_sharc_w)
|
AM_RANGE(0x3400000, 0x34000ff) AM_READWRITE_LEGACY(cgboard_1_comm_sharc_r, cgboard_1_comm_sharc_w)
|
||||||
|
@ -93,23 +93,32 @@ class rabbit_state : public driver_device
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
rabbit_state(const machine_config &mconfig, device_type type, const char *tag)
|
rabbit_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: driver_device(mconfig, type, tag) { }
|
: driver_device(mconfig, type, tag),
|
||||||
|
m_viewregs0(*this, "viewregs0"),
|
||||||
|
m_viewregs6(*this, "viewregs6"),
|
||||||
|
m_viewregs7(*this, "viewregs7"),
|
||||||
|
m_viewregs9(*this, "viewregs9"),
|
||||||
|
m_viewregs10(*this, "viewregs10"),
|
||||||
|
m_tilemap_regs(*this, "tilemap_regs"),
|
||||||
|
m_spriteregs(*this, "spriteregs"),
|
||||||
|
m_blitterregs(*this, "blitterregs"),
|
||||||
|
m_spriteram(*this, "spriteram") { }
|
||||||
|
|
||||||
UINT32 *m_viewregs0;
|
required_shared_ptr<UINT32> m_viewregs0;
|
||||||
UINT32 *m_viewregs6;
|
required_shared_ptr<UINT32> m_viewregs6;
|
||||||
UINT32 *m_viewregs7;
|
required_shared_ptr<UINT32> m_viewregs7;
|
||||||
UINT32 *m_viewregs9;
|
required_shared_ptr<UINT32> m_viewregs9;
|
||||||
UINT32 *m_viewregs10;
|
required_shared_ptr<UINT32> m_viewregs10;
|
||||||
UINT32 *m_tilemap_regs[4];
|
required_shared_ptr_array<UINT32, 4> m_tilemap_regs;
|
||||||
UINT32 *m_spriteregs;
|
required_shared_ptr<UINT32> m_spriteregs;
|
||||||
UINT32 *m_blitterregs;
|
required_shared_ptr<UINT32> m_blitterregs;
|
||||||
bitmap_ind16 *m_sprite_bitmap;
|
bitmap_ind16 *m_sprite_bitmap;
|
||||||
rectangle m_sprite_clip;
|
rectangle m_sprite_clip;
|
||||||
int m_vblirqlevel;
|
int m_vblirqlevel;
|
||||||
int m_bltirqlevel;
|
int m_bltirqlevel;
|
||||||
int m_banking;
|
int m_banking;
|
||||||
UINT32 *m_tilemap_ram[4];
|
UINT32 *m_tilemap_ram[4];
|
||||||
UINT32 *m_spriteram;
|
required_shared_ptr<UINT32> m_spriteram;
|
||||||
tilemap_t *m_tilemap[4];
|
tilemap_t *m_tilemap[4];
|
||||||
DECLARE_WRITE32_MEMBER(rabbit_tilemap0_w);
|
DECLARE_WRITE32_MEMBER(rabbit_tilemap0_w);
|
||||||
DECLARE_WRITE32_MEMBER(rabbit_tilemap1_w);
|
DECLARE_WRITE32_MEMBER(rabbit_tilemap1_w);
|
||||||
@ -747,20 +756,20 @@ static ADDRESS_MAP_START( rabbit_map, AS_PROGRAM, 32, rabbit_state )
|
|||||||
AM_RANGE(0x400980, 0x400983) AM_READ(randomrabbits) // sound chip status?
|
AM_RANGE(0x400980, 0x400983) AM_READ(randomrabbits) // sound chip status?
|
||||||
AM_RANGE(0x400984, 0x400987) AM_READ(randomrabbits) // sound chip status?
|
AM_RANGE(0x400984, 0x400987) AM_READ(randomrabbits) // sound chip status?
|
||||||
/* this lot are probably gfxchip/blitter etc. related */
|
/* this lot are probably gfxchip/blitter etc. related */
|
||||||
AM_RANGE(0x400010, 0x400013) AM_WRITEONLY AM_BASE(m_viewregs0 )
|
AM_RANGE(0x400010, 0x400013) AM_WRITEONLY AM_SHARE("viewregs0" )
|
||||||
AM_RANGE(0x400100, 0x400117) AM_WRITEONLY AM_BASE(m_tilemap_regs[0] ) // tilemap regs1
|
AM_RANGE(0x400100, 0x400117) AM_WRITEONLY AM_SHARE("tilemap_regs.0" ) // tilemap regs1
|
||||||
AM_RANGE(0x400120, 0x400137) AM_WRITEONLY AM_BASE(m_tilemap_regs[1] ) // tilemap regs2
|
AM_RANGE(0x400120, 0x400137) AM_WRITEONLY AM_SHARE("tilemap_regs.1" ) // tilemap regs2
|
||||||
AM_RANGE(0x400140, 0x400157) AM_WRITEONLY AM_BASE(m_tilemap_regs[2] ) // tilemap regs3
|
AM_RANGE(0x400140, 0x400157) AM_WRITEONLY AM_SHARE("tilemap_regs.2" ) // tilemap regs3
|
||||||
AM_RANGE(0x400160, 0x400177) AM_WRITEONLY AM_BASE(m_tilemap_regs[3] ) // tilemap regs4
|
AM_RANGE(0x400160, 0x400177) AM_WRITEONLY AM_SHARE("tilemap_regs.3" ) // tilemap regs4
|
||||||
AM_RANGE(0x400200, 0x40021b) AM_WRITEONLY AM_BASE(m_spriteregs ) // sprregs?
|
AM_RANGE(0x400200, 0x40021b) AM_WRITEONLY AM_SHARE("spriteregs" ) // sprregs?
|
||||||
AM_RANGE(0x400300, 0x400303) AM_WRITE(rabbit_rombank_w) // used during rom testing, rombank/area select + something else?
|
AM_RANGE(0x400300, 0x400303) AM_WRITE(rabbit_rombank_w) // used during rom testing, rombank/area select + something else?
|
||||||
AM_RANGE(0x400400, 0x400413) AM_WRITEONLY AM_BASE(m_viewregs6 ) // some global controls? (brightness etc.?)
|
AM_RANGE(0x400400, 0x400413) AM_WRITEONLY AM_SHARE("viewregs6" ) // some global controls? (brightness etc.?)
|
||||||
AM_RANGE(0x400500, 0x400503) AM_WRITEONLY AM_BASE(m_viewregs7 )
|
AM_RANGE(0x400500, 0x400503) AM_WRITEONLY AM_SHARE("viewregs7" )
|
||||||
AM_RANGE(0x400700, 0x40070f) AM_WRITE(rabbit_blitter_w) AM_BASE(m_blitterregs )
|
AM_RANGE(0x400700, 0x40070f) AM_WRITE(rabbit_blitter_w) AM_SHARE("blitterregs" )
|
||||||
AM_RANGE(0x400800, 0x40080f) AM_WRITEONLY AM_BASE(m_viewregs9 ) // never changes?
|
AM_RANGE(0x400800, 0x40080f) AM_WRITEONLY AM_SHARE("viewregs9" ) // never changes?
|
||||||
AM_RANGE(0x400900, 0x40098f) AM_WRITE(rabbit_audio_w)
|
AM_RANGE(0x400900, 0x40098f) AM_WRITE(rabbit_audio_w)
|
||||||
/* hmm */
|
/* hmm */
|
||||||
AM_RANGE(0x479700, 0x479713) AM_WRITEONLY AM_BASE(m_viewregs10 )
|
AM_RANGE(0x479700, 0x479713) AM_WRITEONLY AM_SHARE("viewregs10" )
|
||||||
|
|
||||||
AM_RANGE(0x440000, 0x47ffff) AM_ROMBANK("bank1") // data (gfx / sound) rom readback for ROM testing
|
AM_RANGE(0x440000, 0x47ffff) AM_ROMBANK("bank1") // data (gfx / sound) rom readback for ROM testing
|
||||||
/* tilemaps */
|
/* tilemaps */
|
||||||
@ -768,7 +777,7 @@ static ADDRESS_MAP_START( rabbit_map, AS_PROGRAM, 32, rabbit_state )
|
|||||||
AM_RANGE(0x484000, 0x487fff) AM_READWRITE(rabbit_tilemap1_r,rabbit_tilemap1_w)
|
AM_RANGE(0x484000, 0x487fff) AM_READWRITE(rabbit_tilemap1_r,rabbit_tilemap1_w)
|
||||||
AM_RANGE(0x488000, 0x48bfff) AM_READWRITE(rabbit_tilemap2_r,rabbit_tilemap2_w)
|
AM_RANGE(0x488000, 0x48bfff) AM_READWRITE(rabbit_tilemap2_r,rabbit_tilemap2_w)
|
||||||
AM_RANGE(0x48c000, 0x48ffff) AM_READWRITE(rabbit_tilemap3_r,rabbit_tilemap3_w)
|
AM_RANGE(0x48c000, 0x48ffff) AM_READWRITE(rabbit_tilemap3_r,rabbit_tilemap3_w)
|
||||||
AM_RANGE(0x494000, 0x497fff) AM_RAM AM_BASE(m_spriteram) // sprites?
|
AM_RANGE(0x494000, 0x497fff) AM_RAM AM_SHARE("spriteram") // sprites?
|
||||||
AM_RANGE(0x4a0000, 0x4affff) AM_RAM_WRITE(rabbit_paletteram_dword_w) AM_SHARE("paletteram")
|
AM_RANGE(0x4a0000, 0x4affff) AM_RAM_WRITE(rabbit_paletteram_dword_w) AM_SHARE("paletteram")
|
||||||
AM_RANGE(0xff0000, 0xffffff) AM_RAM
|
AM_RANGE(0xff0000, 0xffffff) AM_RAM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
@ -39,12 +39,15 @@ class tmmjprd_state : public driver_device
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
tmmjprd_state(const machine_config &mconfig, device_type type, const char *tag)
|
tmmjprd_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: driver_device(mconfig, type, tag) { }
|
: driver_device(mconfig, type, tag),
|
||||||
|
m_tilemap_regs(*this, "tilemap_regs"),
|
||||||
|
m_spriteregs(*this, "spriteregs"),
|
||||||
|
m_spriteram(*this, "spriteram") { }
|
||||||
|
|
||||||
UINT32 *m_tilemap_regs[4];
|
required_shared_ptr_array<UINT32, 4> m_tilemap_regs;
|
||||||
UINT32 *m_spriteregs;
|
required_shared_ptr<UINT32> m_spriteregs;
|
||||||
UINT32 *m_tilemap_ram[4];
|
UINT32 *m_tilemap_ram[4];
|
||||||
UINT32 *m_spriteram;
|
required_shared_ptr<UINT32> m_spriteram;
|
||||||
UINT8 m_mux_data;
|
UINT8 m_mux_data;
|
||||||
UINT8 m_system_in;
|
UINT8 m_system_in;
|
||||||
double m_old_brt1;
|
double m_old_brt1;
|
||||||
@ -672,11 +675,11 @@ static ADDRESS_MAP_START( tmmjprd_map, AS_PROGRAM, 32, tmmjprd_state )
|
|||||||
AM_RANGE(0x200984, 0x200987) AM_READ(randomtmmjprds) // sound chip status?
|
AM_RANGE(0x200984, 0x200987) AM_READ(randomtmmjprds) // sound chip status?
|
||||||
/* check these are used .. */
|
/* check these are used .. */
|
||||||
// AM_RANGE(0x200010, 0x200013) AM_WRITEONLY AM_BASE_LEGACY(&tmmjprd_viewregs0 )
|
// AM_RANGE(0x200010, 0x200013) AM_WRITEONLY AM_BASE_LEGACY(&tmmjprd_viewregs0 )
|
||||||
AM_RANGE(0x200100, 0x200117) AM_WRITEONLY AM_BASE(m_tilemap_regs[0] ) // tilemap regs1
|
AM_RANGE(0x200100, 0x200117) AM_WRITEONLY AM_SHARE("tilemap_regs.0" ) // tilemap regs1
|
||||||
AM_RANGE(0x200120, 0x200137) AM_WRITEONLY AM_BASE(m_tilemap_regs[1] ) // tilemap regs2
|
AM_RANGE(0x200120, 0x200137) AM_WRITEONLY AM_SHARE("tilemap_regs.1" ) // tilemap regs2
|
||||||
AM_RANGE(0x200140, 0x200157) AM_WRITEONLY AM_BASE(m_tilemap_regs[2] ) // tilemap regs3
|
AM_RANGE(0x200140, 0x200157) AM_WRITEONLY AM_SHARE("tilemap_regs.2" ) // tilemap regs3
|
||||||
AM_RANGE(0x200160, 0x200177) AM_WRITEONLY AM_BASE(m_tilemap_regs[3] ) // tilemap regs4
|
AM_RANGE(0x200160, 0x200177) AM_WRITEONLY AM_SHARE("tilemap_regs.3" ) // tilemap regs4
|
||||||
AM_RANGE(0x200200, 0x20021b) AM_WRITEONLY AM_BASE(m_spriteregs ) // sprregs?
|
AM_RANGE(0x200200, 0x20021b) AM_WRITEONLY AM_SHARE("spriteregs" ) // sprregs?
|
||||||
// AM_RANGE(0x200300, 0x200303) AM_WRITE_LEGACY(tmmjprd_rombank_w) // used during rom testing, rombank/area select + something else?
|
// AM_RANGE(0x200300, 0x200303) AM_WRITE_LEGACY(tmmjprd_rombank_w) // used during rom testing, rombank/area select + something else?
|
||||||
AM_RANGE(0x20040c, 0x20040f) AM_WRITE(tmmjprd_brt_1_w)
|
AM_RANGE(0x20040c, 0x20040f) AM_WRITE(tmmjprd_brt_1_w)
|
||||||
AM_RANGE(0x200410, 0x200413) AM_WRITE(tmmjprd_brt_2_w)
|
AM_RANGE(0x200410, 0x200413) AM_WRITE(tmmjprd_brt_2_w)
|
||||||
@ -692,7 +695,7 @@ static ADDRESS_MAP_START( tmmjprd_map, AS_PROGRAM, 32, tmmjprd_state )
|
|||||||
AM_RANGE(0x288000, 0x28bfff) AM_READWRITE(tmmjprd_tilemap2_r,tmmjprd_tilemap2_w)
|
AM_RANGE(0x288000, 0x28bfff) AM_READWRITE(tmmjprd_tilemap2_r,tmmjprd_tilemap2_w)
|
||||||
AM_RANGE(0x28c000, 0x28ffff) AM_READWRITE(tmmjprd_tilemap3_r,tmmjprd_tilemap3_w)
|
AM_RANGE(0x28c000, 0x28ffff) AM_READWRITE(tmmjprd_tilemap3_r,tmmjprd_tilemap3_w)
|
||||||
/* ?? is palette ram shared with sprites in this case or just a different map */
|
/* ?? is palette ram shared with sprites in this case or just a different map */
|
||||||
AM_RANGE(0x290000, 0x29bfff) AM_RAM AM_BASE(m_spriteram)
|
AM_RANGE(0x290000, 0x29bfff) AM_RAM AM_SHARE("spriteram")
|
||||||
AM_RANGE(0x29c000, 0x29ffff) AM_RAM_WRITE(tmmjprd_paletteram_dword_w) AM_SHARE("paletteram")
|
AM_RANGE(0x29c000, 0x29ffff) AM_RAM_WRITE(tmmjprd_paletteram_dword_w) AM_SHARE("paletteram")
|
||||||
|
|
||||||
AM_RANGE(0x400000, 0x400003) AM_READ(tmmjprd_mux_r) AM_DEVWRITE_LEGACY("eeprom", tmmjprd_eeprom_write)
|
AM_RANGE(0x400000, 0x400003) AM_READ(tmmjprd_mux_r) AM_DEVWRITE_LEGACY("eeprom", tmmjprd_eeprom_write)
|
||||||
|
Loading…
Reference in New Issue
Block a user