summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/video/imagetek_i4100.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/video/imagetek_i4100.h')
-rw-r--r--src/devices/video/imagetek_i4100.h194
1 files changed, 104 insertions, 90 deletions
diff --git a/src/devices/video/imagetek_i4100.h b/src/devices/video/imagetek_i4100.h
index f94179a5b68..aed5413df53 100644
--- a/src/devices/video/imagetek_i4100.h
+++ b/src/devices/video/imagetek_i4100.h
@@ -28,7 +28,7 @@ class imagetek_i4100_device : public device_t,
{
public:
// construction/destruction
- imagetek_i4100_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ imagetek_i4100_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
void map(address_map &map);
@@ -38,12 +38,12 @@ public:
auto blit_irq_cb() { return m_blit_irq_cb.bind(); }
void set_spriteram_buffered(bool buffer) { m_spriteram_buffered = buffer; }
- uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void draw_foreground(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(screen_eof);
protected:
- imagetek_i4100_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, bool has_ext_tiles);
+ imagetek_i4100_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, bool has_ext_tiles);
// device-level overrides
//virtual void device_validity_check(validity_checker &valid) const override;
@@ -52,33 +52,45 @@ protected:
virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
- required_shared_ptr<uint16_t> m_vram_0;
- required_shared_ptr<uint16_t> m_vram_1;
- required_shared_ptr<uint16_t> m_vram_2;
- required_shared_ptr<uint16_t> m_scratchram;
- required_shared_ptr<uint16_t> m_blitter_regs;
+ required_shared_ptr_array<u16, 3> m_vram;
+ required_shared_ptr<u16> m_scratchram;
+ required_shared_ptr<u16> m_blitter_regs;
required_device<buffered_spriteram16_device> m_spriteram;
- required_shared_ptr<uint16_t> m_tiletable;
- required_shared_ptr<uint16_t> m_window;
- required_shared_ptr<uint16_t> m_scroll;
+ required_shared_ptr<u16> m_tiletable;
+ required_shared_ptr<u16> m_window;
+ required_shared_ptr<u16> m_scroll;
required_device<palette_device> m_palette;
- required_region_ptr<uint8_t> m_gfxrom;
+ required_region_ptr<u8> m_gfxrom;
- std::unique_ptr<uint8_t[]> m_expanded_gfx1;
+ std::unique_ptr<u8[]> m_expanded_gfx1;
devcb_write_line m_blit_irq_cb;
- uint16_t m_rombank;
+ struct sprite_t
+ {
+ int x, y;
+ u32 gfxstart;
+ int width, height;
+ int flipx, flipy;
+ u16 color;
+ u32 zoom;
+ int curr_pri;
+ };
+
+ std::unique_ptr<sprite_t []> m_spritelist;
+ const sprite_t *m_sprite_end;
+
+ u16 m_rombank;
size_t m_gfxrom_size;
bool m_crtc_unlock;
- uint16_t m_sprite_count;
- uint16_t m_sprite_priority;
- uint16_t m_sprite_xoffset,m_sprite_yoffset;
- uint16_t m_sprite_color_code;
- uint8_t m_layer_priority[3];
- uint16_t m_background_color;
- uint16_t m_screen_xoffset,m_screen_yoffset;
+ u16 m_sprite_count;
+ u16 m_sprite_priority;
+ u16 m_sprite_xoffset,m_sprite_yoffset;
+ u16 m_sprite_color_code;
+ u8 m_layer_priority[3];
+ u16 m_background_color;
+ u16 m_screen_xoffset,m_screen_yoffset;
bool m_layer_tile_select[3];
bool m_screen_blank;
bool m_screen_flip;
@@ -87,7 +99,7 @@ protected:
int m_tilemap_scrolldy[3];
bool m_spriteram_buffered;
- void blt_write( address_space &space, const int tmap, const offs_t offs, const uint16_t data, const uint16_t mask );
+ void blt_write(const int tmap, const offs_t offs, const u16 data, const u16 mask);
enum
{
@@ -96,77 +108,79 @@ protected:
emu_timer *m_blit_done_timer;
- // I/O operations
- DECLARE_READ16_MEMBER( vram_0_r );
- DECLARE_READ16_MEMBER( vram_1_r );
- DECLARE_READ16_MEMBER( vram_2_r );
- DECLARE_WRITE16_MEMBER( vram_0_w );
- DECLARE_WRITE16_MEMBER( vram_1_w );
- DECLARE_WRITE16_MEMBER( vram_2_w );
- DECLARE_READ16_MEMBER( rmw_vram_0_r );
- DECLARE_READ16_MEMBER( rmw_vram_1_r );
- DECLARE_READ16_MEMBER( rmw_vram_2_r );
- DECLARE_WRITE16_MEMBER( rmw_vram_0_w );
- DECLARE_WRITE16_MEMBER( rmw_vram_1_w );
- DECLARE_WRITE16_MEMBER( rmw_vram_2_w );
- DECLARE_READ16_MEMBER( scratchram_r );
- DECLARE_WRITE16_MEMBER( scratchram_w );
- DECLARE_READ16_MEMBER( spriteram_r );
- DECLARE_WRITE16_MEMBER( spriteram_w );
- DECLARE_READ16_MEMBER( tiletable_r );
- DECLARE_WRITE16_MEMBER( tiletable_w );
- DECLARE_READ16_MEMBER( sprite_count_r );
- DECLARE_WRITE16_MEMBER( sprite_count_w );
- DECLARE_READ16_MEMBER( sprite_priority_r );
- DECLARE_WRITE16_MEMBER( sprite_priority_w );
- DECLARE_READ16_MEMBER( sprite_xoffset_r );
- DECLARE_WRITE16_MEMBER( sprite_xoffset_w );
- DECLARE_READ16_MEMBER( sprite_yoffset_r );
- DECLARE_WRITE16_MEMBER( sprite_yoffset_w );
- DECLARE_READ16_MEMBER( sprite_color_code_r );
- DECLARE_WRITE16_MEMBER( sprite_color_code_w );
- DECLARE_READ16_MEMBER( layer_priority_r );
- DECLARE_WRITE16_MEMBER( layer_priority_w );
- DECLARE_READ16_MEMBER( background_color_r );
- DECLARE_WRITE16_MEMBER( background_color_w );
-
- DECLARE_READ16_MEMBER( screen_xoffset_r );
- DECLARE_WRITE16_MEMBER( screen_xoffset_w );
- DECLARE_READ16_MEMBER( screen_yoffset_r );
- DECLARE_WRITE16_MEMBER( screen_yoffset_w );
-
- DECLARE_READ16_MEMBER( window_r );
- DECLARE_WRITE16_MEMBER( window_w );
- DECLARE_READ16_MEMBER( scroll_r );
- DECLARE_WRITE16_MEMBER( scroll_w );
-
-
- DECLARE_READ16_MEMBER( gfxrom_r );
- DECLARE_WRITE16_MEMBER( crtc_vert_w );
- DECLARE_WRITE16_MEMBER( crtc_horz_w );
- DECLARE_WRITE16_MEMBER( crtc_unlock_w );
- DECLARE_WRITE16_MEMBER( blitter_w );
- DECLARE_WRITE16_MEMBER( screen_ctrl_w );
- DECLARE_WRITE16_MEMBER( rombank_w );
-
- void draw_layers( screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int pri );
- inline uint8_t get_tile_pix( uint16_t code, uint8_t x, uint8_t y, bool const big, uint32_t &pix );
- void draw_tilemap( screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, uint32_t flags, uint32_t const pcode,
- int sx, int sy, int wx, int wy, bool const big, uint16_t const *tilemapram, int const layer );
+ // I/O operations
+ inline u16 vram_r(offs_t offset, int layer) { return m_vram[layer][offset]; }
+ inline void vram_w(offs_t offset, u16 data, u16 mem_mask, int layer) { COMBINE_DATA(&m_vram[layer][offset]); }
+ DECLARE_READ16_MEMBER(vram_0_r);
+ DECLARE_READ16_MEMBER(vram_1_r);
+ DECLARE_READ16_MEMBER(vram_2_r);
+ DECLARE_WRITE16_MEMBER(vram_0_w);
+ DECLARE_WRITE16_MEMBER(vram_1_w);
+ DECLARE_WRITE16_MEMBER(vram_2_w);
+ DECLARE_READ16_MEMBER(rmw_vram_0_r);
+ DECLARE_READ16_MEMBER(rmw_vram_1_r);
+ DECLARE_READ16_MEMBER(rmw_vram_2_r);
+ DECLARE_WRITE16_MEMBER(rmw_vram_0_w);
+ DECLARE_WRITE16_MEMBER(rmw_vram_1_w);
+ DECLARE_WRITE16_MEMBER(rmw_vram_2_w);
+ DECLARE_READ16_MEMBER(scratchram_r);
+ DECLARE_WRITE16_MEMBER(scratchram_w);
+ DECLARE_READ16_MEMBER(spriteram_r);
+ DECLARE_WRITE16_MEMBER(spriteram_w);
+ DECLARE_READ16_MEMBER(tiletable_r);
+ DECLARE_WRITE16_MEMBER(tiletable_w);
+ DECLARE_READ16_MEMBER(sprite_count_r);
+ DECLARE_WRITE16_MEMBER(sprite_count_w);
+ DECLARE_READ16_MEMBER(sprite_priority_r);
+ DECLARE_WRITE16_MEMBER(sprite_priority_w);
+ DECLARE_READ16_MEMBER(sprite_xoffset_r);
+ DECLARE_WRITE16_MEMBER(sprite_xoffset_w);
+ DECLARE_READ16_MEMBER(sprite_yoffset_r);
+ DECLARE_WRITE16_MEMBER(sprite_yoffset_w);
+ DECLARE_READ16_MEMBER(sprite_color_code_r);
+ DECLARE_WRITE16_MEMBER(sprite_color_code_w);
+ DECLARE_READ16_MEMBER(layer_priority_r);
+ DECLARE_WRITE16_MEMBER(layer_priority_w);
+ DECLARE_READ16_MEMBER(background_color_r);
+ DECLARE_WRITE16_MEMBER(background_color_w);
+
+ DECLARE_READ16_MEMBER(screen_xoffset_r);
+ DECLARE_WRITE16_MEMBER(screen_xoffset_w);
+ DECLARE_READ16_MEMBER(screen_yoffset_r);
+ DECLARE_WRITE16_MEMBER(screen_yoffset_w);
+
+ DECLARE_READ16_MEMBER(window_r);
+ DECLARE_WRITE16_MEMBER(window_w);
+ DECLARE_READ16_MEMBER(scroll_r);
+ DECLARE_WRITE16_MEMBER(scroll_w);
+
+
+ DECLARE_READ16_MEMBER(gfxrom_r);
+ DECLARE_WRITE16_MEMBER(crtc_vert_w);
+ DECLARE_WRITE16_MEMBER(crtc_horz_w);
+ DECLARE_WRITE16_MEMBER(crtc_unlock_w);
+ DECLARE_WRITE16_MEMBER(blitter_w);
+ DECLARE_WRITE16_MEMBER(screen_ctrl_w);
+ DECLARE_WRITE16_MEMBER(rombank_w);
+
+ void draw_layers(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int pri);
+ inline u8 get_tile_pix(u16 code, u8 x, u8 y, bool const big, u32 &pix);
+ void draw_tilemap(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 flags, u32 const pcode,
+ int sx, int sy, int wx, int wy, bool const big, int const layer);
void draw_spritegfx(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &clip,
- uint32_t const gfxstart, uint16_t const width, uint16_t const height,
- uint16_t color, int const flipx, int const flipy, int sx, int sy,
- uint32_t const scale, uint8_t const prival );
- void draw_sprites( screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect );
+ u32 const gfxstart, u16 const width, u16 const height,
+ u16 color, int const flipx, int const flipy, int sx, int sy,
+ u32 const scale, u8 const prival);
+ void draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void expand_gfx1();
// A 2048 x 2048 virtual tilemap
- static constexpr uint32_t BIG_NX = (0x100);
- static constexpr uint32_t BIG_NY = (0x100);
+ static constexpr u32 BIG_NX = (0x100);
+ static constexpr u32 BIG_NY = (0x100);
// A smaller 512 x 256 window defines the actual tilemap
- static constexpr uint32_t WIN_NX = (0x40);
- static constexpr uint32_t WIN_NY = (0x20);
+ static constexpr u32 WIN_NX = (0x40);
+ static constexpr u32 WIN_NY = (0x20);
bool m_inited_hack;
DECLARE_GFXDECODE_MEMBER(gfxinfo);
@@ -177,11 +191,11 @@ class imagetek_i4220_device : public imagetek_i4100_device
{
public:
// construction/destruction
- imagetek_i4220_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ imagetek_i4220_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
// needed by Blazing Tornado / Grand Striker 2 for mixing with PSAC
// (it's unknown how the chip enables external sync)
- uint32_t get_background_pen() { return m_palette->pen(m_background_color); };
+ u32 get_background_pen() { return m_palette->pen(m_background_color); };
void v2_map(address_map &map);
};
@@ -190,7 +204,7 @@ class imagetek_i4300_device : public imagetek_i4100_device
{
public:
// construction/destruction
- imagetek_i4300_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ imagetek_i4300_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
void v3_map(address_map &map);
};