summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/spg2xx_video.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/spg2xx_video.h')
-rw-r--r--src/devices/machine/spg2xx_video.h97
1 files changed, 17 insertions, 80 deletions
diff --git a/src/devices/machine/spg2xx_video.h b/src/devices/machine/spg2xx_video.h
index 6debca5de2c..69a96b449c3 100644
--- a/src/devices/machine/spg2xx_video.h
+++ b/src/devices/machine/spg2xx_video.h
@@ -11,6 +11,7 @@
#pragma once
+#include "spg_renderer.h"
#include "cpu/unsp/unsp.h"
#include "screen.h"
@@ -24,104 +25,40 @@ public:
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
- DECLARE_WRITE_LINE_MEMBER(vblank);
+ void vblank(int state);
- DECLARE_READ16_MEMBER(video_r);
- DECLARE_WRITE16_MEMBER(video_w);
+ uint16_t video_r(offs_t offset);
+ void video_w(offs_t offset, uint16_t data);
- auto sprlimit_read_callback() { return m_sprlimit_read_cb.bind(); };
+ auto sprlimit_read_callback() { return m_sprlimit_read_cb.bind(); }
- auto write_video_irq_callback() { return m_video_irq_cb.bind(); };
+ auto write_video_irq_callback() { return m_video_irq_cb.bind(); }
protected:
-
- devcb_read16 m_guny_in;
- devcb_read16 m_gunx_in;
-
- enum
- {
- PAGE_ENABLE_MASK = 0x0008,
- PAGE_WALLPAPER_MASK = 0x0004,
-
- SPRITE_ENABLE_MASK = 0x0001,
- SPRITE_COORD_TL_MASK = 0x0002,
-
- PAGE_PRIORITY_FLAG_MASK = 0x3000,
- PAGE_PRIORITY_FLAG_SHIFT = 12,
- PAGE_TILE_HEIGHT_MASK = 0x00c0,
- PAGE_TILE_HEIGHT_SHIFT = 6,
- PAGE_TILE_WIDTH_MASK = 0x0030,
- PAGE_TILE_WIDTH_SHIFT = 4,
- TILE_X_FLIP = 0x0004,
- TILE_Y_FLIP = 0x0008
- };
-
-
- inline void check_video_irq();
-
- static const device_timer_id TIMER_SCREENPOS = 2;
-
virtual void device_start() override;
virtual void device_reset() override;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
-
- void do_sprite_dma(uint32_t len);
-
- enum blend_enable_t : bool
- {
- BlendOff = false,
- BlendOn = true
- };
-
- enum rowscroll_enable_t : bool
- {
- RowScrollOff = false,
- RowScrollOn = true
- };
+ virtual void device_add_mconfig(machine_config &config) override;
- enum flipx_t : bool
- {
- FlipXOff = false,
- FlipXOn = true
- };
-
- void apply_saturation(const rectangle &cliprect);
- void apply_fade(const rectangle &cliprect);
-
- template<blend_enable_t Blend, rowscroll_enable_t RowScroll, flipx_t FlipX>
- void draw(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t bitmap_addr, uint16_t tile, int32_t h, int32_t w, uint8_t bpp, uint32_t yflipmask, uint32_t palette_offset, int yscroll);
- void draw_bitmap(const rectangle& cliprect, uint32_t scanline, int priority, uint32_t bitmap_addr, uint16_t* regs);
- void draw_page(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t bitmap_addr, uint16_t *regs);
- void draw_sprite(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t base_addr);
- void draw_sprites(const rectangle &cliprect, uint32_t scanline, int priority);
-
- uint8_t mix_channel(uint8_t a, uint8_t b);
-
- uint32_t m_screenbuf[320 * 240];
- uint8_t m_rgb5_to_rgb8[32];
- uint32_t m_rgb555_to_rgb888[0x8000];
-
- bool m_hide_page0;
- bool m_hide_page1;
- bool m_hide_sprites;
- bool m_debug_sprites;
- bool m_debug_blit;
- bool m_debug_palette;
- uint8_t m_sprite_index_to_debug;
+ void check_video_irq();
+ TIMER_CALLBACK_MEMBER(screenpos_hit);
- uint16_t m_video_regs[0x100];
+ void do_sprite_dma(uint32_t len);
+ devcb_read16 m_guny_in;
+ devcb_read16 m_gunx_in;
devcb_read16 m_sprlimit_read_cb;
-
- emu_timer *m_screenpos_timer;
+ devcb_write_line m_video_irq_cb;
required_device<unsp_device> m_cpu;
required_device<screen_device> m_screen;
required_shared_ptr<uint16_t> m_scrollram;
+ required_shared_ptr<uint16_t> m_hcompram;
required_shared_ptr<uint16_t> m_paletteram;
required_shared_ptr<uint16_t> m_spriteram;
+ required_device<spg_renderer_device> m_renderer;
- devcb_write_line m_video_irq_cb;
+ emu_timer *m_screenpos_timer;
+ uint16_t m_video_regs[0x100];
};
class spg24x_video_device : public spg2xx_video_device