mirror of
https://github.com/holub/mame
synced 2025-05-23 06:08:48 +03:00
[SNES]: added OBJ interlace support
This commit is contained in:
parent
dd46ee883a
commit
14aeb37220
@ -493,7 +493,7 @@ struct SNES_PPU_STRUCT /* once all the regs are saved in this structure, it woul
|
|||||||
UINT8 bg3_priority_bit;
|
UINT8 bg3_priority_bit;
|
||||||
UINT8 direct_color;
|
UINT8 direct_color;
|
||||||
UINT8 ppu_last_scroll; /* as per Anomie's doc and Theme Park, all scroll regs shares (but mode 7 ones) the same
|
UINT8 ppu_last_scroll; /* as per Anomie's doc and Theme Park, all scroll regs shares (but mode 7 ones) the same
|
||||||
'previous' scroll value */
|
'previous' scroll value */
|
||||||
UINT8 mode7_last_scroll; /* as per Anomie's doc mode 7 scroll regs use a different value, shared with mode 7 matrix! */
|
UINT8 mode7_last_scroll; /* as per Anomie's doc mode 7 scroll regs use a different value, shared with mode 7 matrix! */
|
||||||
|
|
||||||
UINT8 main_bg_enabled[5]; // these would probably better fit the layer struct, but it would make worse the code in snes_update_mode_X()
|
UINT8 main_bg_enabled[5]; // these would probably better fit the layer struct, but it would make worse the code in snes_update_mode_X()
|
||||||
@ -508,6 +508,7 @@ struct SNES_PPU_STRUCT /* once all the regs are saved in this structure, it woul
|
|||||||
UINT8 update_offsets;
|
UINT8 update_offsets;
|
||||||
UINT8 mode;
|
UINT8 mode;
|
||||||
UINT8 interlace; //doubles the visible resolution
|
UINT8 interlace; //doubles the visible resolution
|
||||||
|
UINT8 obj_interlace;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct snes_cart_info
|
struct snes_cart_info
|
||||||
|
@ -1162,6 +1162,7 @@ WRITE8_HANDLER( snes_w_io )
|
|||||||
case SETINI: /* Screen mode/video select */
|
case SETINI: /* Screen mode/video select */
|
||||||
/* FIXME: We only support line count and interlace here */
|
/* FIXME: We only support line count and interlace here */
|
||||||
snes_ppu.interlace = (data & 1) ? 2 : 1;
|
snes_ppu.interlace = (data & 1) ? 2 : 1;
|
||||||
|
snes_ppu.obj_interlace = (data & 2) ? 2 : 1;
|
||||||
snes_ppu.beam.last_visible_line = (data & 0x4) ? 240 : 225;
|
snes_ppu.beam.last_visible_line = (data & 0x4) ? 240 : 225;
|
||||||
snes_dynamic_res_change(space->machine);
|
snes_dynamic_res_change(space->machine);
|
||||||
#ifdef SNES_DBG_REG_W
|
#ifdef SNES_DBG_REG_W
|
||||||
@ -1892,6 +1893,7 @@ MACHINE_RESET( snes )
|
|||||||
|
|
||||||
snes_htmult = 1;
|
snes_htmult = 1;
|
||||||
snes_ppu.interlace = 1;
|
snes_ppu.interlace = 1;
|
||||||
|
snes_ppu.obj_interlace = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -768,6 +768,7 @@ static void snes_update_objects( UINT8 screen, UINT8 priority_tbl, UINT16 curlin
|
|||||||
widemode = 1;
|
widemode = 1;
|
||||||
|
|
||||||
curline/=snes_ppu.interlace;
|
curline/=snes_ppu.interlace;
|
||||||
|
curline*=snes_ppu.obj_interlace;
|
||||||
|
|
||||||
oam = 0x1ff;
|
oam = 0x1ff;
|
||||||
oam_extra = oam + 0x20;
|
oam_extra = oam + 0x20;
|
||||||
@ -789,6 +790,7 @@ static void snes_update_objects( UINT8 screen, UINT8 priority_tbl, UINT16 curlin
|
|||||||
extra <<= 1;
|
extra <<= 1;
|
||||||
x |= ((extra & 0x80) << 1);
|
x |= ((extra & 0x80) << 1);
|
||||||
extra <<= 1;
|
extra <<= 1;
|
||||||
|
y*=snes_ppu.obj_interlace;
|
||||||
|
|
||||||
/* Adjust if past maximum position */
|
/* Adjust if past maximum position */
|
||||||
if( y >= snes_ppu.beam.last_visible_line*snes_ppu.interlace )
|
if( y >= snes_ppu.beam.last_visible_line*snes_ppu.interlace )
|
||||||
|
Loading…
Reference in New Issue
Block a user