mirror of
https://github.com/holub/mame
synced 2025-05-25 07:15:25 +03:00
not worth separate mention in the whatsnew: snes drawing improvements, step 7 (and final, for the moment):
* a few cleanups
This commit is contained in:
parent
c396a76810
commit
89e0918c1b
@ -135,11 +135,12 @@ enum
|
|||||||
* Routine for additive/subtractive blending
|
* Routine for additive/subtractive blending
|
||||||
* between the main and sub screens.
|
* between the main and sub screens.
|
||||||
*****************************************/
|
*****************************************/
|
||||||
INLINE void snes_draw_blend(UINT16 offset, UINT16 *colour, UINT8 factor, UINT8 clip, UINT8 black_pen_clip )
|
|
||||||
|
INLINE void snes_draw_blend( UINT16 offset, UINT16 *colour, UINT8 clip, UINT8 black_pen_clip )
|
||||||
{
|
{
|
||||||
if ((black_pen_clip == SNES_CLIP_ALL2) ||
|
if ((black_pen_clip == SNES_CLIP_ALL2) ||
|
||||||
(black_pen_clip == SNES_CLIP_IN && snes_ppu.clipmasks[SNES_COLOR][offset / factor]) ||
|
(black_pen_clip == SNES_CLIP_IN && snes_ppu.clipmasks[SNES_COLOR][offset]) ||
|
||||||
(black_pen_clip == SNES_CLIP_OUT && !snes_ppu.clipmasks[SNES_COLOR][offset / factor]))
|
(black_pen_clip == SNES_CLIP_OUT && !snes_ppu.clipmasks[SNES_COLOR][offset]))
|
||||||
*colour = 0; //clip to black before color math
|
*colour = 0; //clip to black before color math
|
||||||
|
|
||||||
if (clip == SNES_CLIP_ALL2) // blending mode 3 == always OFF
|
if (clip == SNES_CLIP_ALL2) // blending mode 3 == always OFF
|
||||||
@ -149,8 +150,8 @@ INLINE void snes_draw_blend(UINT16 offset, UINT16 *colour, UINT8 factor, UINT8 c
|
|||||||
if (!debug_options.transparency_disabled)
|
if (!debug_options.transparency_disabled)
|
||||||
#endif /* SNES_LAYER_DEBUG */
|
#endif /* SNES_LAYER_DEBUG */
|
||||||
if ((clip == SNES_CLIP_ALL) ||
|
if ((clip == SNES_CLIP_ALL) ||
|
||||||
(clip == SNES_CLIP_IN && !snes_ppu.clipmasks[SNES_COLOR][offset / factor]) ||
|
(clip == SNES_CLIP_IN && !snes_ppu.clipmasks[SNES_COLOR][offset]) ||
|
||||||
(clip == SNES_CLIP_OUT && snes_ppu.clipmasks[SNES_COLOR][offset / factor]))
|
(clip == SNES_CLIP_OUT && snes_ppu.clipmasks[SNES_COLOR][offset]))
|
||||||
{
|
{
|
||||||
UINT16 r, g, b;
|
UINT16 r, g, b;
|
||||||
int clip_max = 0; // if add then clip to 0x1f, if sub then clip to 0
|
int clip_max = 0; // if add then clip to 0x1f, if sub then clip to 0
|
||||||
@ -224,22 +225,13 @@ INLINE void snes_draw_blend(UINT16 offset, UINT16 *colour, UINT8 factor, UINT8 c
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE void snes_draw_blend_lores(UINT16 offset, UINT16 *colour, UINT8 clip, UINT8 black_pen_clip )
|
|
||||||
{
|
|
||||||
snes_draw_blend(offset, colour, 1, clip, black_pen_clip);
|
|
||||||
}
|
|
||||||
|
|
||||||
INLINE void snes_draw_blend_hires(UINT16 offset, UINT16 *colour, UINT8 clip, UINT8 black_pen_clip )
|
|
||||||
{
|
|
||||||
snes_draw_blend(offset, colour, 1, clip, black_pen_clip);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************
|
/*****************************************
|
||||||
* snes_draw_tile()
|
* snes_draw_tile()
|
||||||
*
|
*
|
||||||
* Draw tiles with variable bit planes
|
* Draw tiles with variable bit planes
|
||||||
*****************************************/
|
*****************************************/
|
||||||
INLINE void snes_draw_tile(UINT8 planes, UINT8 layer, UINT16 tileaddr, INT16 x, UINT8 priority, UINT8 flip, UINT16 pal, UINT8 direct_colors, UINT8 hires )
|
|
||||||
|
INLINE void snes_draw_tile( UINT8 planes, UINT8 layer, UINT16 tileaddr, INT16 x, UINT8 priority, UINT8 flip, UINT16 pal, UINT8 direct_colors, UINT8 hires )
|
||||||
{
|
{
|
||||||
UINT8 mask, plane[8];
|
UINT8 mask, plane[8];
|
||||||
UINT16 c;
|
UINT16 c;
|
||||||
@ -444,7 +436,8 @@ INLINE void snes_draw_tile(UINT8 planes, UINT8 layer, UINT16 tileaddr, INT16 x,
|
|||||||
*
|
*
|
||||||
* Draw 2 tiles with variable bit planes
|
* Draw 2 tiles with variable bit planes
|
||||||
*****************************************/
|
*****************************************/
|
||||||
INLINE void snes_draw_tile_x2(UINT8 planes, UINT8 layer, UINT16 tileaddr, INT16 x, UINT8 priority, UINT8 flip, UINT16 pal, UINT8 direct_colors, UINT8 hires )
|
|
||||||
|
INLINE void snes_draw_tile_x2( UINT8 planes, UINT8 layer, UINT16 tileaddr, INT16 x, UINT8 priority, UINT8 flip, UINT16 pal, UINT8 direct_colors, UINT8 hires )
|
||||||
{
|
{
|
||||||
if (flip)
|
if (flip)
|
||||||
{
|
{
|
||||||
@ -465,6 +458,7 @@ INLINE void snes_draw_tile_x2(UINT8 planes, UINT8 layer, UINT16 tileaddr, INT16
|
|||||||
* The same as snes_draw_tile_4() except
|
* The same as snes_draw_tile_4() except
|
||||||
* that it takes a blend parameter.
|
* that it takes a blend parameter.
|
||||||
*****************************************/
|
*****************************************/
|
||||||
|
|
||||||
INLINE void snes_draw_tile_object( UINT16 tileaddr, INT16 x, UINT8 priority, UINT8 flip, UINT16 pal, UINT8 blend )
|
INLINE void snes_draw_tile_object( UINT16 tileaddr, INT16 x, UINT8 priority, UINT8 flip, UINT16 pal, UINT8 blend )
|
||||||
{
|
{
|
||||||
UINT8 mask, plane[4];
|
UINT8 mask, plane[4];
|
||||||
@ -656,14 +650,14 @@ INLINE void snes_update_line( UINT8 color_depth, UINT8 hires, UINT8 priority_a,
|
|||||||
while (ii < 256)
|
while (ii < 256)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Tilemap format
|
Tilemap format
|
||||||
vhopppcc cccccccc
|
vhopppcc cccccccc
|
||||||
|
|
||||||
v/h = Vertical/Horizontal flip this tile.
|
v/h = Vertical/Horizontal flip this tile.
|
||||||
o = Tile priority.
|
o = Tile priority.
|
||||||
ppp = Tile palette. The number of entries in the palette depends on the Mode and the BG.
|
ppp = Tile palette. The number of entries in the palette depends on the Mode and the BG.
|
||||||
cccccccccc = Tile number.
|
cccccccccc = Tile number.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// determine the horizontal position (Bishojo Janshi Suchi Pai & Desert Figther have tile_size & hires == 1)
|
// determine the horizontal position (Bishojo Janshi Suchi Pai & Desert Figther have tile_size & hires == 1)
|
||||||
UINT32 xpos = xoff + (ii << (tile_size * hires));
|
UINT32 xpos = xoff + (ii << (tile_size * hires));
|
||||||
@ -774,6 +768,7 @@ INLINE void snes_update_line( UINT8 color_depth, UINT8 hires, UINT8 priority_a,
|
|||||||
*
|
*
|
||||||
* Update an entire line of mode7 tiles.
|
* Update an entire line of mode7 tiles.
|
||||||
*********************************************/
|
*********************************************/
|
||||||
|
|
||||||
#define MODE7_CLIP(x) (((x) & 0x2000) ? ((x) | ~0x03ff) : ((x) & 0x03ff))
|
#define MODE7_CLIP(x) (((x) & 0x2000) ? ((x) | ~0x03ff) : ((x) & 0x03ff))
|
||||||
|
|
||||||
static void snes_update_line_mode7( UINT8 priority_a, UINT8 priority_b, UINT8 layer, UINT16 curline )
|
static void snes_update_line_mode7( UINT8 priority_a, UINT8 priority_b, UINT8 layer, UINT16 curline )
|
||||||
@ -948,6 +943,7 @@ static void snes_update_line_mode7( UINT8 priority_a, UINT8 priority_b, UINT8 la
|
|||||||
* Update an entire line of sprites.
|
* Update an entire line of sprites.
|
||||||
* FIXME: We need to support high priority bit
|
* FIXME: We need to support high priority bit
|
||||||
*********************************************/
|
*********************************************/
|
||||||
|
|
||||||
static void snes_update_objects( UINT8 priority_tbl, UINT16 curline )
|
static void snes_update_objects( UINT8 priority_tbl, UINT16 curline )
|
||||||
{
|
{
|
||||||
INT8 xs, ys;
|
INT8 xs, ys;
|
||||||
@ -1086,6 +1082,7 @@ static void snes_update_objects( UINT8 priority_tbl, UINT16 curline )
|
|||||||
*
|
*
|
||||||
* Update Mode X line.
|
* Update Mode X line.
|
||||||
*********************************************/
|
*********************************************/
|
||||||
|
|
||||||
static void snes_update_mode_0( UINT16 curline )
|
static void snes_update_mode_0( UINT16 curline )
|
||||||
{
|
{
|
||||||
#ifdef SNES_LAYER_DEBUG
|
#ifdef SNES_LAYER_DEBUG
|
||||||
@ -1235,7 +1232,8 @@ static void snes_draw_screens( UINT16 curline )
|
|||||||
* XOR: ...###..###... ###...##...###
|
* XOR: ...###..###... ###...##...###
|
||||||
* XNOR: ###...##...### ...###..###...
|
* XNOR: ###...##...### ...###..###...
|
||||||
*********************************************/
|
*********************************************/
|
||||||
static void snes_update_windowmasks(void)
|
|
||||||
|
static void snes_update_windowmasks( void )
|
||||||
{
|
{
|
||||||
UINT16 ii, jj;
|
UINT16 ii, jj;
|
||||||
INT8 w1, w2;
|
INT8 w1, w2;
|
||||||
@ -1306,7 +1304,8 @@ static void snes_update_windowmasks(void)
|
|||||||
*
|
*
|
||||||
* Update the offsets with the latest changes.
|
* Update the offsets with the latest changes.
|
||||||
*********************************************/
|
*********************************************/
|
||||||
static void snes_update_offsets(void)
|
|
||||||
|
static void snes_update_offsets( void )
|
||||||
{
|
{
|
||||||
int ii;
|
int ii;
|
||||||
for (ii = 0; ii < 4; ii++)
|
for (ii = 0; ii < 4; ii++)
|
||||||
@ -1320,6 +1319,7 @@ static void snes_update_offsets(void)
|
|||||||
*
|
*
|
||||||
* Redraw the current line.
|
* Redraw the current line.
|
||||||
*********************************************/
|
*********************************************/
|
||||||
|
|
||||||
static void snes_refresh_scanline( running_machine *machine, bitmap_t *bitmap, UINT16 curline )
|
static void snes_refresh_scanline( running_machine *machine, bitmap_t *bitmap, UINT16 curline )
|
||||||
{
|
{
|
||||||
UINT16 ii;
|
UINT16 ii;
|
||||||
@ -1396,7 +1396,7 @@ static void snes_refresh_scanline( running_machine *machine, bitmap_t *bitmap, U
|
|||||||
|
|
||||||
/* perform color math if the layer wants it (except if it's an object > 192) */
|
/* perform color math if the layer wants it (except if it's an object > 192) */
|
||||||
if (!scanlines[SNES_MAINSCREEN].blend_exception[x] && snes_ppu.layer[scanlines[SNES_MAINSCREEN].layer[x]].color_math)
|
if (!scanlines[SNES_MAINSCREEN].blend_exception[x] && snes_ppu.layer[scanlines[SNES_MAINSCREEN].layer[x]].color_math)
|
||||||
snes_draw_blend_lores(x, &c, snes_ppu.sub_color_mask, snes_ppu.main_color_mask);
|
snes_draw_blend(x, &c, snes_ppu.sub_color_mask, snes_ppu.main_color_mask);
|
||||||
|
|
||||||
r = ((c & 0x1f) * fade) >> 4;
|
r = ((c & 0x1f) * fade) >> 4;
|
||||||
g = (((c & 0x3e0) >> 5) * fade) >> 4;
|
g = (((c & 0x3e0) >> 5) * fade) >> 4;
|
||||||
@ -1412,7 +1412,7 @@ static void snes_refresh_scanline( running_machine *machine, bitmap_t *bitmap, U
|
|||||||
scanlines[SNES_SUBSCREEN].buffer[x] = temp_col;
|
scanlines[SNES_SUBSCREEN].buffer[x] = temp_col;
|
||||||
|
|
||||||
if (!scanlines[SNES_SUBSCREEN].blend_exception[x] && snes_ppu.layer[scanlines[SNES_MAINSCREEN].layer[x]].color_math)
|
if (!scanlines[SNES_SUBSCREEN].blend_exception[x] && snes_ppu.layer[scanlines[SNES_MAINSCREEN].layer[x]].color_math)
|
||||||
snes_draw_blend_lores(x, &c, snes_ppu.sub_color_mask, snes_ppu.main_color_mask);
|
snes_draw_blend(x, &c, snes_ppu.sub_color_mask, snes_ppu.main_color_mask);
|
||||||
|
|
||||||
r = ((c & 0x1f) * fade) >> 4;
|
r = ((c & 0x1f) * fade) >> 4;
|
||||||
g = (((c & 0x3e0) >> 5) * fade) >> 4;
|
g = (((c & 0x3e0) >> 5) * fade) >> 4;
|
||||||
|
Loading…
Reference in New Issue
Block a user