summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/dooyong.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/dooyong.h')
-rw-r--r--src/mame/video/dooyong.h55
1 files changed, 28 insertions, 27 deletions
diff --git a/src/mame/video/dooyong.h b/src/mame/video/dooyong.h
index ccc33d111cc..8c1c76012ee 100644
--- a/src/mame/video/dooyong.h
+++ b/src/mame/video/dooyong.h
@@ -18,9 +18,9 @@ public:
template <typename T> void set_gfxdecode_tag(T &&cpu_tag) { m_gfxdecode.set_tag(std::forward<T>(cpu_tag)); }
void set_gfxnum(int gfxnum) { m_gfxnum = gfxnum; }
- void draw(screen_device &screen, bitmap_ind16 &dest, rectangle const &cliprect, uint32_t flags, uint8_t priority);
+ void draw(screen_device &screen, bitmap_ind16 &dest, rectangle const &cliprect, u32 flags, u8 priority, u8 priority_mask = 0xff);
- void set_palette_bank(uint16_t bank);
+ void set_palette_bank(u16 bank);
protected:
dooyong_tilemap_device_base(
@@ -28,7 +28,7 @@ protected:
device_type type,
char const *tag,
device_t *owner,
- uint32_t clock);
+ u32 clock);
gfx_element const &gfx() const { return *m_gfxdecode->gfx(m_gfxnum); }
@@ -36,35 +36,34 @@ protected:
int m_gfxnum;
tilemap_t *m_tilemap;
- uint16_t m_palette_bank;
+ u16 m_palette_bank;
};
class dooyong_rom_tilemap_device : public dooyong_tilemap_device_base
{
public:
template <typename T, typename U>
- dooyong_rom_tilemap_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&gfxdecode_tag, int gfxnum, U &&tilerom_tag, int tilerom_offset)
+ dooyong_rom_tilemap_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&gfxdecode_tag, int gfxnum, U &&tilerom_tag, int tilerom_offset, int tilerom_length)
: dooyong_rom_tilemap_device(mconfig, tag, owner, 0)
{
set_gfxdecode_tag(std::forward<T>(gfxdecode_tag));
set_gfxnum(gfxnum);
set_tilerom_tag(std::forward<U>(tilerom_tag));
set_tilerom_offset(tilerom_offset);
+ set_tilerom_length(tilerom_length);
}
- dooyong_rom_tilemap_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock);
+ dooyong_rom_tilemap_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock);
template <typename U> void set_tilerom_tag(U &&tilerom_tag) { m_tilerom.set_tag(std::forward<U>(tilerom_tag)); }
void set_tilerom_offset(int offset) { m_tilerom_offset = offset; }
+ void set_tilerom_length(int length) { m_tilerom_length = length; }
void set_transparent_pen(unsigned pen) { m_transparent_pen = pen; }
- void set_primella_code_bits(unsigned bits)
- {
- m_primella_code_mask = (1U << bits) - 1U;
- m_primella_color_mask = ((1U << 14) - 1) & ~m_primella_code_mask;
- m_primella_color_shift = bits;
- }
- DECLARE_WRITE8_MEMBER(ctrl_w);
+ typedef device_delegate<void (u16 attr, u32 &code, u32 &color)> dooyong_tmap_cb_delegate;
+ void set_tile_callback(dooyong_tmap_cb_delegate cb) { m_tmap_cb = cb; }
+
+ void ctrl_w(offs_t offset, u8 data);
protected:
dooyong_rom_tilemap_device(
@@ -72,7 +71,7 @@ protected:
device_type type,
char const *tag,
device_t *owner,
- uint32_t clock);
+ u32 clock);
virtual void device_start() override;
@@ -84,36 +83,37 @@ protected:
int m_rows;
private:
- required_region_ptr<uint16_t> m_tilerom;
+ required_region_ptr<u16> m_tilerom;
int m_tilerom_offset;
+ int m_tilerom_length;
unsigned m_transparent_pen;
- unsigned m_primella_code_mask;
- unsigned m_primella_color_mask;
- unsigned m_primella_color_shift;
- uint8_t m_registers[0x10];
+ u8 m_registers[0x10];
+ dooyong_tmap_cb_delegate m_tmap_cb;
};
class rshark_rom_tilemap_device : public dooyong_rom_tilemap_device
{
public:
template <typename T, typename U, typename V>
- rshark_rom_tilemap_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&gfxdecode_tag, int gfxnum, U &&tilerom_tag, int tilerom_offset, V &&colorrom_tag, int colorrom_offset)
+ rshark_rom_tilemap_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&gfxdecode_tag, int gfxnum, U &&tilerom_tag, int tilerom_offset, int tilerom_length, V &&colorrom_tag, int colorrom_offset, int colorrom_length)
: rshark_rom_tilemap_device(mconfig, tag, owner, 0)
{
set_gfxdecode_tag(std::forward<T>(gfxdecode_tag));
set_gfxnum(gfxnum);
set_tilerom_tag(std::forward<U>(tilerom_tag));
set_tilerom_offset(tilerom_offset);
+ set_tilerom_length(tilerom_length);
set_colorrom_tag(std::forward<V>(colorrom_tag));
set_colorrom_offset(colorrom_offset);
- set_primella_code_bits(13);
+ set_colorrom_length(colorrom_length);
}
- rshark_rom_tilemap_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock);
+ rshark_rom_tilemap_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock);
template <typename V> void set_colorrom_tag(V &&colorrom_tag) { m_colorrom.set_tag(std::forward<V>(colorrom_tag)); }
void set_colorrom_offset(int offset) { m_colorrom_offset = offset; }
+ void set_colorrom_length(int length) { m_colorrom_length = length; }
protected:
virtual void device_start() override;
@@ -121,8 +121,9 @@ protected:
virtual TILE_GET_INFO_MEMBER(tile_info) override;
private:
- required_region_ptr<uint8_t> m_colorrom;
+ required_region_ptr<u8> m_colorrom;
int m_colorrom_offset;
+ int m_colorrom_length;
};
class dooyong_ram_tilemap_device : public dooyong_tilemap_device_base
@@ -136,10 +137,10 @@ public:
set_gfxnum(gfxnum);
}
- dooyong_ram_tilemap_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock);
+ dooyong_ram_tilemap_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock);
- DECLARE_READ16_MEMBER(tileram_r) { return m_tileram[offset & ((64U * 32U) - 1)]; }
- DECLARE_WRITE16_MEMBER(tileram_w);
+ u16 tileram_r(offs_t offset) { return m_tileram[offset & ((64U * 32U) - 1)]; }
+ void tileram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
void set_scrolly(int value) { m_tilemap->set_scrolly(value); }
protected:
@@ -148,7 +149,7 @@ protected:
private:
TILE_GET_INFO_MEMBER(tile_info);
- std::unique_ptr<uint16_t[]> m_tileram;
+ std::unique_ptr<u16[]> m_tileram;
};
#endif // MAME_VIDEO_DOOYONG_H