mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +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;
|
||||
|
||||
private:
|
||||
UINT32 bg_screen_base(UINT32 bgxcnt);
|
||||
UINT32 bg_char_base(UINT32 bgxcnt);
|
||||
struct internal_reg
|
||||
{
|
||||
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);
|
||||
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
void draw_bg_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, UINT32 hofs, UINT32 vofs);
|
||||
void draw_gba_oam_window(UINT32 *scanline, int y);
|
||||
void draw_gba_oam(UINT32 *scanline, int y);
|
||||
inline int is_in_window(int x, int window);
|
||||
enum class size_type
|
||||
{
|
||||
bg_h = 0,
|
||||
bg_v,
|
||||
obj_h,
|
||||
obj_v
|
||||
};
|
||||
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);
|
||||
|
||||
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_vblank_cb; /* V-Blank 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;
|
||||
|
||||
UINT8 m_windowOn;
|
||||
UINT8 m_fxOn;
|
||||
UINT8 m_gfxBG2Changed;
|
||||
UINT8 m_gfxBG3Changed;
|
||||
INT32 m_gfxBG2X;
|
||||
INT32 m_gfxBG2Y;
|
||||
INT32 m_gfxBG3X;
|
||||
INT32 m_gfxBG3Y;
|
||||
UINT32 m_scanline[6][240];
|
||||
|
||||
UINT32 m_xferscan[7][240+2048];
|
||||
// constants
|
||||
static constexpr UINT32 TRANSPARENT_PIXEL = 0x80000000;
|
||||
};
|
||||
|
||||
#endif /* GBA_LCD_H_ */
|
||||
|
Loading…
Reference in New Issue
Block a user