mirror of
https://github.com/holub/mame
synced 2025-07-04 17:38:08 +03:00
Merge pull request #1374 from GiuseppeGorgoglione/master
gba_lcd: one bug fix and code refactoring
This commit is contained in:
commit
44e4ed61a7
File diff suppressed because it is too large
Load Diff
@ -136,20 +136,101 @@ protected:
|
|||||||
virtual machine_config_constructor device_mconfig_additions() const override;
|
virtual machine_config_constructor device_mconfig_additions() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UINT32 bg_screen_base(UINT32 bgxcnt);
|
struct internal_reg
|
||||||
UINT32 bg_char_base(UINT32 bgxcnt);
|
{
|
||||||
|
INT32 status;
|
||||||
|
bool update;
|
||||||
|
};
|
||||||
|
internal_reg m_bg2x, m_bg2y, m_bg3x, m_bg3y;
|
||||||
|
|
||||||
|
UINT8 bg_video_mode();
|
||||||
|
|
||||||
|
enum class dispcnt : UINT16
|
||||||
|
{
|
||||||
|
alt_frame_sel = 0x0010,
|
||||||
|
vram_map_1d = 0x0040,
|
||||||
|
forced_blank = 0x0080,
|
||||||
|
bg0_en = 0x0100,
|
||||||
|
bg1_en = 0x0200,
|
||||||
|
bg2_en = 0x0400,
|
||||||
|
bg3_en = 0x0800,
|
||||||
|
obj_en = 0x1000,
|
||||||
|
win0_en = 0x2000,
|
||||||
|
win1_en = 0x4000,
|
||||||
|
obj_win_en = 0x8000
|
||||||
|
};
|
||||||
|
bool is_set(dispcnt flag);
|
||||||
|
|
||||||
|
enum class dispstat : UINT16
|
||||||
|
{
|
||||||
|
vblank = 0x0001,
|
||||||
|
hblank = 0x0002,
|
||||||
|
vcount = 0x0004,
|
||||||
|
vblank_irq_en = 0x0008,
|
||||||
|
hblank_irq_en = 0x0010,
|
||||||
|
vcount_irq_en = 0x0020
|
||||||
|
};
|
||||||
|
void set(dispstat flag);
|
||||||
|
void clear(dispstat flag);
|
||||||
|
bool is_set(dispstat flag);
|
||||||
|
|
||||||
|
enum class bgcnt : UINT16
|
||||||
|
{
|
||||||
|
mosaic_en = 0x0040,
|
||||||
|
palette_256 = 0x0080,
|
||||||
|
wraparound_en = 0x2000
|
||||||
|
};
|
||||||
|
bool is_set(UINT16 bgxcnt, bgcnt flag);
|
||||||
|
|
||||||
|
UINT8 bg_priority(UINT16 bgxcnt);
|
||||||
|
UINT32 bg_char_base(UINT16 bgxcnt);
|
||||||
|
UINT32 bg_screen_base(UINT16 bgxcnt);
|
||||||
void bg_screen_size(UINT16 bgxcnt, bool text, int &width, int &height);
|
void bg_screen_size(UINT16 bgxcnt, bool text, int &width, int &height);
|
||||||
|
|
||||||
inline void update_mask(UINT8* mask, int mode, int submode, UINT32* obj_win, UINT8 inwin0, UINT8 inwin1, UINT8 in0_mask, UINT8 in1_mask, UINT8 out_mask);
|
enum class size_type
|
||||||
void draw_modes(int mode, int submode, int y, UINT32* line0, UINT32* line1, UINT32* line2, UINT32* line3, UINT32* lineOBJ, UINT32* lineOBJWin, UINT32* lineMix, int bpp);
|
{
|
||||||
void draw_roz_bitmap_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, INT32 X, INT32 Y, INT32 PA, INT32 PB, INT32 PC, INT32 PD, INT32 *currentx, INT32 *currenty, int changed, int depth);
|
bg_h = 0,
|
||||||
void draw_roz_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, INT32 X, INT32 Y, INT32 PA, INT32 PB, INT32 PC, INT32 PD, INT32 *currentx, INT32 *currenty, int changed);
|
bg_v,
|
||||||
void draw_bg_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, UINT32 hofs, UINT32 vofs);
|
obj_h,
|
||||||
void draw_gba_oam_window(UINT32 *scanline, int y);
|
obj_v
|
||||||
void draw_gba_oam(UINT32 *scanline, int y);
|
};
|
||||||
inline int is_in_window(int x, int window);
|
UINT16 mosaic_size(size_type type);
|
||||||
|
|
||||||
|
enum class sfx : UINT16
|
||||||
|
{
|
||||||
|
none = 0x0000,
|
||||||
|
alpha = 0x0040,
|
||||||
|
lighten = 0x0080,
|
||||||
|
darken = 0x00c0
|
||||||
|
};
|
||||||
|
sfx color_sfx();
|
||||||
|
|
||||||
|
enum class target
|
||||||
|
{
|
||||||
|
first = 0,
|
||||||
|
second
|
||||||
|
};
|
||||||
|
UINT8 color_sfx_target(target id);
|
||||||
|
|
||||||
|
UINT16 tile_number(UINT16 vram_data) { return vram_data & 0x03ff; }
|
||||||
|
bool tile_hflip(UINT16 vram_data) { return vram_data & 0x0400; }
|
||||||
|
bool tile_vflip(UINT16 vram_data) { return vram_data & 0x0800; }
|
||||||
|
|
||||||
|
void update_mask(UINT8 *mask, int y);
|
||||||
|
void draw_roz_bitmap_scanline(UINT32 *scanline, int ypos, dispcnt bg_enable, UINT32 ctrl, INT32 X, INT32 Y, INT32 PA, INT32 PB, INT32 PC, INT32 PD, internal_reg ¤tx, internal_reg ¤ty, int depth);
|
||||||
|
void draw_roz_scanline(UINT32 *scanline, int ypos, dispcnt bg_enable, UINT32 ctrl, INT32 X, INT32 Y, INT32 PA, INT32 PB, INT32 PC, INT32 PD, internal_reg ¤tx, internal_reg ¤ty);
|
||||||
|
void draw_bg_scanline(UINT32 *scanline, int ypos, dispcnt bg_enable, UINT32 ctrl, UINT32 hofs, UINT32 vofs);
|
||||||
|
void draw_oam_window(UINT32 *scanline, int y);
|
||||||
|
void draw_oam(UINT32 *scanline, int y);
|
||||||
void draw_scanline(int y);
|
void draw_scanline(int y);
|
||||||
|
|
||||||
|
bool is_in_window_h(int x, int window);
|
||||||
|
bool is_in_window_v(int y, int window);
|
||||||
|
|
||||||
|
UINT32 alpha_blend(UINT32 color0, UINT32 color1);
|
||||||
|
UINT32 increase_brightness(UINT32 color);
|
||||||
|
UINT32 decrease_brightness(UINT32 color);
|
||||||
|
|
||||||
devcb_write_line m_int_hblank_cb; /* H-Blank interrupt callback function */
|
devcb_write_line m_int_hblank_cb; /* H-Blank interrupt callback function */
|
||||||
devcb_write_line m_int_vblank_cb; /* V-Blank interrupt callback function */
|
devcb_write_line m_int_vblank_cb; /* V-Blank interrupt callback function */
|
||||||
devcb_write_line m_int_vcount_cb; /* V-Counter Match interrupt callback function */
|
devcb_write_line m_int_vcount_cb; /* V-Counter Match interrupt callback function */
|
||||||
@ -164,16 +245,10 @@ private:
|
|||||||
|
|
||||||
bitmap_ind16 m_bitmap;
|
bitmap_ind16 m_bitmap;
|
||||||
|
|
||||||
UINT8 m_windowOn;
|
UINT32 m_scanline[6][240];
|
||||||
UINT8 m_fxOn;
|
|
||||||
UINT8 m_gfxBG2Changed;
|
|
||||||
UINT8 m_gfxBG3Changed;
|
|
||||||
INT32 m_gfxBG2X;
|
|
||||||
INT32 m_gfxBG2Y;
|
|
||||||
INT32 m_gfxBG3X;
|
|
||||||
INT32 m_gfxBG3Y;
|
|
||||||
|
|
||||||
UINT32 m_xferscan[7][240+2048];
|
// constants
|
||||||
|
static constexpr UINT32 TRANSPARENT_PIXEL = 0x80000000;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* GBA_LCD_H_ */
|
#endif /* GBA_LCD_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user