summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/video/315_5124.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/video/315_5124.h')
-rw-r--r--src/devices/video/315_5124.h104
1 files changed, 54 insertions, 50 deletions
diff --git a/src/devices/video/315_5124.h b/src/devices/video/315_5124.h
index 29fadde2a82..b88cf5c38d7 100644
--- a/src/devices/video/315_5124.h
+++ b/src/devices/video/315_5124.h
@@ -13,6 +13,7 @@
#pragma once
+#include "sound/sn76496.h"
#include "emupal.h"
#include "screen.h"
@@ -28,7 +29,8 @@ DECLARE_DEVICE_TYPE(SEGA315_5377, sega315_5377_device) /* aka Gamegear (2 A
class sega315_5124_device : public device_t,
public device_memory_interface,
- public device_video_interface
+ public device_video_interface,
+ public device_mixer_interface
{
public:
static constexpr unsigned WIDTH = 342; /* 342 pixels */
@@ -51,7 +53,7 @@ public:
// construction/destruction
- sega315_5124_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ sega315_5124_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
void set_is_pal(bool is_pal) { m_is_pal = is_pal; }
@@ -59,12 +61,14 @@ public:
auto csync() { return m_csync_cb.bind(); }
auto pause() { return m_pause_cb.bind(); }
- DECLARE_READ8_MEMBER( data_read );
- DECLARE_WRITE8_MEMBER( data_write );
- DECLARE_READ8_MEMBER( control_read );
- DECLARE_WRITE8_MEMBER( control_write );
- DECLARE_READ8_MEMBER( vcount_read );
- DECLARE_READ8_MEMBER( hcount_read );
+ void psg_w(u8 data) { m_snsnd->write(data); }
+ void psg_stereo_w(u8 data) { m_snsnd->stereo_w(data); }
+ u8 data_read();
+ void data_write(u8 data);
+ u8 control_read();
+ void control_write(u8 data);
+ u8 vcount_read();
+ u8 hcount_read();
void hcount_latch() { hcount_latch_at_hpos(screen().hpos()); };
void hcount_latch_at_hpos(int hpos);
@@ -73,7 +77,7 @@ public:
bitmap_ind8 &get_y1_bitmap() { return m_y1_bitmap; };
/* update the screen */
- 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);
virtual void set_sega315_5124_compatibility_mode(bool sega315_5124_compatibility_mode) { }
@@ -81,9 +85,10 @@ protected:
static constexpr unsigned SEGA315_5377_CRAM_SIZE = 0x40; /* 32 colors x 2 bytes per color = 64 bytes */
static constexpr unsigned SEGA315_5124_CRAM_SIZE = 0x20; /* 32 colors x 1 bytes per color = 32 bytes */
- sega315_5124_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint8_t cram_size, uint8_t palette_offset, uint8_t reg_num_mask, int max_sprite_zoom_hcount, int max_sprite_zoom_vcount, const uint8_t *line_timing);
+ sega315_5124_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 cram_size, u8 palette_offset, u8 reg_num_mask, int max_sprite_zoom_hcount, int max_sprite_zoom_vcount, const u8 *line_timing);
// device-level overrides
+ virtual void device_post_load() override;
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;
@@ -98,9 +103,9 @@ protected:
void set_display_settings();
void set_frame_timing();
virtual void update_palette();
- virtual void write_memory(uint8_t data);
- virtual void cram_write(uint8_t data);
- virtual void load_vram_addr(uint8_t data);
+ virtual void write_memory(u8 data);
+ virtual void cram_write(u8 data);
+ virtual void load_vram_addr(u8 data);
virtual void select_display_mode();
virtual void select_extended_res_mode4(bool M1, bool M2, bool M3);
virtual void select_sprites(int line);
@@ -109,9 +114,9 @@ protected:
virtual void draw_scanline(int pixel_offset_x, int pixel_plot_y, int line);
virtual void blit_scanline(int *line_buffer, int *priority_selected, int pixel_offset_x, int pixel_plot_y, int line);
virtual void draw_leftmost_pixels_mode4(int *line_buffer, int *priority_selected, int fine_x_scroll, int palette_selected, int tile_line);
- virtual uint16_t name_table_row_mode4(int row);
- virtual uint16_t sprite_attributes_addr_mode4(uint16_t base);
- virtual uint8_t sprite_tile_mask_mode4(uint8_t tile_number);
+ virtual u16 name_table_row_mode4(int row);
+ virtual u16 sprite_attributes_addr_mode4(u16 base);
+ virtual u8 sprite_tile_mask_mode4(u8 tile_number);
void process_line_timer();
void draw_scanline_mode4(int *line_buffer, int *priority_selected, int line);
void draw_sprites_mode4(int *line_buffer, int *priority_selected, int line);
@@ -122,44 +127,42 @@ protected:
void draw_scanline_mode0(int *line_buffer, int line);
void check_pending_flags();
- void vdp_postload();
-
- uint8_t m_reg[16]; /* All the registers */
- uint8_t m_status; /* Status register */
- uint8_t m_pending_status; /* Pending status flags */
- uint8_t m_reg8copy; /* Internal copy of register 8 (X-Scroll) */
- uint8_t m_reg9copy; /* Internal copy of register 9 (Y-Scroll) */
- uint8_t m_addrmode; /* Type of VDP action */
- uint16_t m_addr; /* Contents of internal VDP address register */
- const uint8_t m_cram_size; /* CRAM size */
- uint8_t m_cram_mask; /* Mask to switch between SMS and GG CRAM sizes */
+ u8 m_reg[16]; /* All the registers */
+ u8 m_status; /* Status register */
+ u8 m_pending_status; /* Pending status flags */
+ u8 m_reg8copy; /* Internal copy of register 8 (X-Scroll) */
+ u8 m_reg9copy; /* Internal copy of register 9 (Y-Scroll) */
+ u8 m_addrmode; /* Type of VDP action */
+ u16 m_addr; /* Contents of internal VDP address register */
+ const u8 m_cram_size; /* CRAM size */
+ u8 m_cram_mask; /* Mask to switch between SMS and GG CRAM sizes */
bool m_cram_dirty; /* Have there been any changes to the CRAM area */
bool m_hint_occurred;
bool m_pending_hint;
bool m_pending_control_write;
int m_pending_sprcol_x;
- uint8_t m_buffer;
- uint8_t m_control_write_data_latch;
+ u8 m_buffer;
+ u8 m_control_write_data_latch;
bool m_sega315_5124_compatibility_mode; /* when true, GG VDP behaves as SMS VDP */
int m_irq_state; /* The status of the IRQ line of the VDP */
int m_vdp_mode; /* Current mode of the VDP: 0,1,2,3,4 */
int m_y_pixels; /* 192, 224, 240 */
int m_draw_time;
- uint8_t m_line_counter;
- uint8_t m_hcounter;
- uint8_t m_CRAM[SEGA315_5377_CRAM_SIZE]; /* CRAM */
- const uint8_t *m_frame_timing;
- const uint8_t *m_line_timing;
+ u8 m_line_counter;
+ u8 m_hcounter;
+ u8 m_CRAM[SEGA315_5377_CRAM_SIZE]; /* CRAM */
+ const u8 *m_frame_timing;
+ const u8 *m_line_timing;
bitmap_rgb32 m_tmpbitmap;
bitmap_ind8 m_y1_bitmap;
- const uint8_t m_palette_offset;
- const uint8_t m_reg_num_mask;
+ const u8 m_palette_offset;
+ const u8 m_reg_num_mask;
bool m_display_disabled;
- uint16_t m_sprite_base;
- uint16_t m_sprite_pattern_line[8];
+ u16 m_sprite_base;
+ u16 m_sprite_pattern_line[8];
int m_sprite_tile_selected[8];
int m_sprite_x[8];
- uint8_t m_sprite_flags[8];
+ u8 m_sprite_flags[8];
int m_sprite_count;
int m_sprite_height;
int m_sprite_zoom_scale;
@@ -192,20 +195,21 @@ protected:
static constexpr device_timer_id TIMER_FLAGS = 7;
required_device<palette_device> m_palette;
+ required_device<sn76496_base_device> m_snsnd;
};
class sega315_5246_device : public sega315_5124_device
{
public:
- sega315_5246_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ sega315_5246_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
- sega315_5246_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint8_t cram_size, uint8_t palette_offset, uint8_t reg_num_mask, int max_sprite_zoom_hcount, int max_sprite_zoom_vcount, const uint8_t *line_timing);
+ sega315_5246_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 cram_size, u8 palette_offset, u8 reg_num_mask, int max_sprite_zoom_hcount, int max_sprite_zoom_vcount, const u8 *line_timing);
- virtual uint16_t name_table_row_mode4(int row) override;
- virtual uint16_t sprite_attributes_addr_mode4(uint16_t base) override;
- virtual uint8_t sprite_tile_mask_mode4(uint8_t tile_number) override;
+ virtual u16 name_table_row_mode4(int row) override;
+ virtual u16 sprite_attributes_addr_mode4(u16 base) override;
+ virtual u8 sprite_tile_mask_mode4(u8 tile_number) override;
virtual void select_extended_res_mode4(bool M1, bool M2, bool M3) override;
};
@@ -213,18 +217,18 @@ protected:
class sega315_5377_device : public sega315_5246_device
{
public:
- sega315_5377_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ sega315_5377_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual void set_sega315_5124_compatibility_mode(bool sega315_5124_compatibility_mode) override;
protected:
- sega315_5377_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint8_t cram_size, uint8_t palette_offset, uint8_t reg_num_mask, int max_sprite_zoom_hcount, int max_sprite_zoom_vcount, const uint8_t *line_timing);
+ sega315_5377_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 cram_size, u8 palette_offset, u8 reg_num_mask, int max_sprite_zoom_hcount, int max_sprite_zoom_vcount, const u8 *line_timing);
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
virtual void update_palette() override;
- virtual void cram_write(uint8_t data) override;
+ virtual void cram_write(u8 data) override;
virtual void blit_scanline(int *line_buffer, int *priority_selected, int pixel_offset_x, int pixel_plot_y, int line) override;
private:
@@ -239,10 +243,10 @@ public:
void stop_timers();
protected:
- sega315_5313_mode4_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint8_t cram_size, uint8_t palette_offset, uint8_t reg_num_mask, int max_sprite_zoom_hcount, int max_sprite_zoom_vcount, const uint8_t *line_timing);
+ sega315_5313_mode4_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 cram_size, u8 palette_offset, u8 reg_num_mask, int max_sprite_zoom_hcount, int max_sprite_zoom_vcount, const u8 *line_timing);
- virtual void write_memory(uint8_t data) override;
- virtual void load_vram_addr(uint8_t data) override;
+ virtual void write_memory(u8 data) override;
+ virtual void load_vram_addr(u8 data) override;
virtual void select_sprites(int line) override;
virtual void sprite_collision(int line, int sprite_col_x) override;
virtual void sprite_count_overflow(int line, int sprite_index) override;