diff options
Diffstat (limited to 'src/mame/video/dooyong.h')
-rw-r--r-- | src/mame/video/dooyong.h | 55 |
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 |