mirror of
https://github.com/holub/mame
synced 2025-10-05 16:50:57 +03:00
State-ized VDP1
This commit is contained in:
parent
e4ccc74ae3
commit
982684a6cb
@ -424,7 +424,8 @@ static void system_reset(address_space *space)
|
||||
memset(state->m_vdp2_regs,0x00,0x040000);
|
||||
memset(state->m_vdp2_vram,0x00,0x100000);
|
||||
memset(state->m_vdp2_cram,0x00,0x080000);
|
||||
//vdp1
|
||||
memset(state->m_vdp1_vram,0x00,0x100000);
|
||||
|
||||
//A-Bus
|
||||
/*Order is surely wrong but whatever...*/
|
||||
}
|
||||
@ -1873,13 +1874,9 @@ static ADDRESS_MAP_START( saturn_mem, AS_PROGRAM, 32 )
|
||||
AM_RANGE(0x05a00000, 0x05a7ffff) AM_READWRITE16(saturn_soundram_r, saturn_soundram_w,0xffffffff)
|
||||
AM_RANGE(0x05b00000, 0x05b00fff) AM_DEVREADWRITE16("scsp", scsp_r, scsp_w, 0xffffffff)
|
||||
/* VDP1 */
|
||||
/*0x05c00000-0x05c7ffff VRAM*/
|
||||
/*0x05c80000-0x05c9ffff Frame Buffer 0*/
|
||||
/*0x05ca0000-0x05cbffff Frame Buffer 1*/
|
||||
/*0x05d00000-0x05d7ffff VDP1 Regs */
|
||||
AM_RANGE(0x05c00000, 0x05c7ffff) AM_READWRITE(stv_vdp1_vram_r, stv_vdp1_vram_w)
|
||||
AM_RANGE(0x05c80000, 0x05cbffff) AM_READWRITE(stv_vdp1_framebuffer0_r, stv_vdp1_framebuffer0_w)
|
||||
AM_RANGE(0x05d00000, 0x05d0001f) AM_READWRITE(stv_vdp1_regs_r, stv_vdp1_regs_w)
|
||||
AM_RANGE(0x05c00000, 0x05c7ffff) AM_READWRITE(saturn_vdp1_vram_r, saturn_vdp1_vram_w)
|
||||
AM_RANGE(0x05c80000, 0x05cbffff) AM_READWRITE(saturn_vdp1_framebuffer0_r, saturn_vdp1_framebuffer0_w)
|
||||
AM_RANGE(0x05d00000, 0x05d0001f) AM_READWRITE(saturn_vdp1_regs_r, saturn_vdp1_regs_w)
|
||||
AM_RANGE(0x05e00000, 0x05efffff) AM_READWRITE(saturn_vdp2_vram_r, saturn_vdp2_vram_w)
|
||||
AM_RANGE(0x05f00000, 0x05f7ffff) AM_READWRITE(saturn_vdp2_cram_r, saturn_vdp2_cram_w)
|
||||
AM_RANGE(0x05f80000, 0x05fbffff) AM_READWRITE(saturn_vdp2_regs_r, saturn_vdp2_regs_w)
|
||||
@ -1903,9 +1900,9 @@ static ADDRESS_MAP_START( stv_mem, AS_PROGRAM, 32 )
|
||||
AM_RANGE(0x05a00000, 0x05afffff) AM_READWRITE16(saturn_soundram_r, saturn_soundram_w,0xffffffff)
|
||||
AM_RANGE(0x05b00000, 0x05b00fff) AM_DEVREADWRITE16("scsp", scsp_r, scsp_w, 0xffffffff)
|
||||
/* VDP1 */
|
||||
AM_RANGE(0x05c00000, 0x05c7ffff) AM_READWRITE(stv_vdp1_vram_r, stv_vdp1_vram_w)
|
||||
AM_RANGE(0x05c80000, 0x05cbffff) AM_READWRITE(stv_vdp1_framebuffer0_r, stv_vdp1_framebuffer0_w)
|
||||
AM_RANGE(0x05d00000, 0x05d0001f) AM_READWRITE(stv_vdp1_regs_r, stv_vdp1_regs_w)
|
||||
AM_RANGE(0x05c00000, 0x05c7ffff) AM_READWRITE(saturn_vdp1_vram_r, saturn_vdp1_vram_w)
|
||||
AM_RANGE(0x05c80000, 0x05cbffff) AM_READWRITE(saturn_vdp1_framebuffer0_r, saturn_vdp1_framebuffer0_w)
|
||||
AM_RANGE(0x05d00000, 0x05d0001f) AM_READWRITE(saturn_vdp1_regs_r, saturn_vdp1_regs_w)
|
||||
AM_RANGE(0x05e00000, 0x05efffff) AM_READWRITE(saturn_vdp2_vram_r, saturn_vdp2_vram_w)
|
||||
AM_RANGE(0x05f00000, 0x05f7ffff) AM_READWRITE(saturn_vdp2_cram_r, saturn_vdp2_cram_w)
|
||||
AM_RANGE(0x05f80000, 0x05fbffff) AM_READWRITE(saturn_vdp2_regs_r, saturn_vdp2_regs_w)
|
||||
@ -2594,8 +2591,6 @@ static MACHINE_START( stv )
|
||||
state_save_register_global_pointer(machine, state->m_smpc_ram, 0x80);
|
||||
state_save_register_global_pointer(machine, state->m_scu_regs, 0x100/4);
|
||||
state_save_register_global_pointer(machine, state->m_scsp_regs, 0x1000/2);
|
||||
// state_save_register_global(machine, stv_vblank);
|
||||
// state_save_register_global(machine, stv_hblank);
|
||||
state_save_register_global(machine, state->m_NMI_reset);
|
||||
state_save_register_global(machine, state->m_en_68k);
|
||||
state_save_register_global(machine, timer_0);
|
||||
@ -2636,8 +2631,6 @@ static MACHINE_START( saturn )
|
||||
state_save_register_global_pointer(machine, state->m_smpc_ram, 0x80);
|
||||
state_save_register_global_pointer(machine, state->m_scu_regs, 0x100/4);
|
||||
state_save_register_global_pointer(machine, state->m_scsp_regs, 0x1000/2);
|
||||
state_save_register_global(machine, stv_vblank);
|
||||
state_save_register_global(machine, stv_hblank);
|
||||
state_save_register_global(machine, state->m_NMI_reset);
|
||||
state_save_register_global(machine, state->m_en_68k);
|
||||
state_save_register_global(machine, timer_0);
|
||||
|
@ -16,6 +16,9 @@ public:
|
||||
UINT32 *m_vdp2_regs;
|
||||
UINT32 *m_vdp2_vram;
|
||||
UINT32 *m_vdp2_cram;
|
||||
UINT32 *m_vdp1_vram;
|
||||
UINT32 *m_vdp1_regs;
|
||||
UINT8 *m_vdp1_gfx_decode;
|
||||
|
||||
UINT8 m_NMI_reset;
|
||||
UINT8 m_en_68k;
|
||||
@ -32,6 +35,26 @@ public:
|
||||
attotime m_minit_boost_timeslice;
|
||||
attotime m_sinit_boost_timeslice;
|
||||
|
||||
struct {
|
||||
UINT16 **framebuffer_display_lines;
|
||||
int framebuffer_mode;
|
||||
int framebuffer_double_interlace;
|
||||
int fbcr_accessed;
|
||||
int framebuffer_width;
|
||||
int framebuffer_height;
|
||||
int framebuffer_current_display;
|
||||
int framebuffer_current_draw;
|
||||
int framebuffer_clear_on_next_frame;
|
||||
rectangle system_cliprect;
|
||||
rectangle user_cliprect;
|
||||
UINT16 *framebuffer[2];
|
||||
UINT16 **framebuffer_draw_lines;
|
||||
|
||||
int local_x;
|
||||
int local_y;
|
||||
}m_vdp1;
|
||||
|
||||
|
||||
/* ST-V specific */
|
||||
UINT8 m_stv_multi_bank;
|
||||
UINT8 m_prev_bankswitch;
|
||||
@ -94,7 +117,6 @@ DRIVER_INIT(nameclv3);
|
||||
|
||||
/*----------- defined in video/stvvdp1.c -----------*/
|
||||
|
||||
extern UINT32* stv_vdp1_vram;
|
||||
extern UINT16 **stv_framebuffer_display_lines;
|
||||
extern int stv_framebuffer_double_interlace;
|
||||
extern int stv_framebuffer_mode;
|
||||
@ -103,29 +125,26 @@ extern UINT8* stv_vdp1_gfx_decode;
|
||||
int stv_vdp1_start ( running_machine &machine );
|
||||
void video_update_vdp1(running_machine &machine);
|
||||
|
||||
READ32_HANDLER( stv_vdp1_regs_r );
|
||||
WRITE32_HANDLER( stv_vdp1_regs_w );
|
||||
READ32_HANDLER ( stv_vdp1_vram_r );
|
||||
WRITE32_HANDLER ( stv_vdp1_vram_w );
|
||||
READ32_HANDLER ( saturn_vdp1_regs_r );
|
||||
READ32_HANDLER ( saturn_vdp1_vram_r );
|
||||
READ32_HANDLER ( saturn_vdp1_framebuffer0_r );
|
||||
|
||||
WRITE32_HANDLER ( stv_vdp1_framebuffer0_w );
|
||||
READ32_HANDLER ( stv_vdp1_framebuffer0_r );
|
||||
WRITE32_HANDLER ( saturn_vdp1_regs_w );
|
||||
WRITE32_HANDLER ( saturn_vdp1_vram_w );
|
||||
WRITE32_HANDLER ( saturn_vdp1_framebuffer0_w );
|
||||
|
||||
/*----------- defined in video/stvvdp2.c -----------*/
|
||||
|
||||
extern int stv_vblank,stv_hblank;
|
||||
|
||||
UINT8 stv_get_vblank(running_machine &machine);
|
||||
|
||||
WRITE32_HANDLER ( saturn_vdp2_vram_w );
|
||||
READ32_HANDLER ( saturn_vdp2_vram_r );
|
||||
|
||||
WRITE32_HANDLER ( saturn_vdp2_cram_w );
|
||||
READ32_HANDLER ( saturn_vdp2_cram_r );
|
||||
|
||||
WRITE32_HANDLER ( saturn_vdp2_regs_w );
|
||||
READ32_HANDLER ( saturn_vdp2_regs_r );
|
||||
|
||||
WRITE32_HANDLER ( saturn_vdp2_vram_w );
|
||||
WRITE32_HANDLER ( saturn_vdp2_cram_w );
|
||||
WRITE32_HANDLER ( saturn_vdp2_regs_w );
|
||||
|
||||
VIDEO_START ( stv_vdp2 );
|
||||
SCREEN_UPDATE( stv_vdp2 );
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -108,8 +108,6 @@ In other words,the first three types uses the offset and not the color allocated
|
||||
static UINT8* stv_vdp2_gfx_decode;
|
||||
|
||||
static int stv_vdp2_render_rbg0;
|
||||
int stv_hblank,stv_vblank;
|
||||
static int stv_odd;
|
||||
static int horz_res,vert_res;
|
||||
|
||||
|
||||
@ -5189,6 +5187,7 @@ READ32_HANDLER ( saturn_vdp2_regs_r )
|
||||
{
|
||||
case 0x4/4:
|
||||
{
|
||||
int stv_hblank,stv_vblank,stv_odd;
|
||||
/*Screen Status Register*/
|
||||
stv_vblank = stv_get_vblank(space->machine());
|
||||
stv_hblank = get_hblank(space->machine());
|
||||
@ -5476,6 +5475,7 @@ static int stv_vdp2_start (running_machine &machine)
|
||||
/* maybe we should move this to video/stv.c */
|
||||
VIDEO_START( stv_vdp2 )
|
||||
{
|
||||
saturn_state *state = machine.driver_data<saturn_state>();
|
||||
stv_vdp2_roz_bitmap[0] = stv_vdp2_roz_bitmap[1] = NULL;
|
||||
stv_vdp2_start(machine);
|
||||
stv_vdp1_start(machine);
|
||||
@ -5486,10 +5486,10 @@ VIDEO_START( stv_vdp2 )
|
||||
gfx_element_set_source(machine.gfx[1], stv_vdp2_gfx_decode);
|
||||
gfx_element_set_source(machine.gfx[2], stv_vdp2_gfx_decode);
|
||||
gfx_element_set_source(machine.gfx[3], stv_vdp2_gfx_decode);
|
||||
gfx_element_set_source(machine.gfx[4], stv_vdp1_gfx_decode);
|
||||
gfx_element_set_source(machine.gfx[5], stv_vdp1_gfx_decode);
|
||||
gfx_element_set_source(machine.gfx[6], stv_vdp1_gfx_decode);
|
||||
gfx_element_set_source(machine.gfx[7], stv_vdp1_gfx_decode);
|
||||
gfx_element_set_source(machine.gfx[4], state->m_vdp1_gfx_decode);
|
||||
gfx_element_set_source(machine.gfx[5], state->m_vdp1_gfx_decode);
|
||||
gfx_element_set_source(machine.gfx[6], state->m_vdp1_gfx_decode);
|
||||
gfx_element_set_source(machine.gfx[7], state->m_vdp1_gfx_decode);
|
||||
}
|
||||
|
||||
static void stv_vdp2_dynamic_res_change(running_machine &machine)
|
||||
@ -5931,14 +5931,14 @@ static void draw_sprites(running_machine &machine, bitmap_t *bitmap, const recta
|
||||
}
|
||||
|
||||
/* framebuffer interlace */
|
||||
if ( (STV_VDP2_LSMD == 2 || STV_VDP2_LSMD == 3) && stv_framebuffer_double_interlace == 0 )
|
||||
if ( (STV_VDP2_LSMD == 2 || STV_VDP2_LSMD == 3) && state->m_vdp1.framebuffer_double_interlace == 0 )
|
||||
interlace_framebuffer = 1;
|
||||
else
|
||||
interlace_framebuffer = 0;
|
||||
|
||||
/*Guess:Some games needs that the horizontal sprite size to be doubled
|
||||
(TODO: understand the proper settings,it might not work like this)*/
|
||||
if(STV_VDP2_LSMD == 3 && /*((STV_VDP2_HRES & 3) != 3) &&*/ (!(stv_framebuffer_mode & 1)))
|
||||
if(STV_VDP2_LSMD == 3 && /*((STV_VDP2_HRES & 3) != 3) &&*/ (!(state->m_vdp1.framebuffer_mode & 1)))
|
||||
double_x = 1;
|
||||
else
|
||||
double_x = 0;
|
||||
@ -5967,7 +5967,7 @@ static void draw_sprites(running_machine &machine, bitmap_t *bitmap, const recta
|
||||
if (stv_sprite_priorities_in_fb_line[y][pri] == 0)
|
||||
continue;
|
||||
|
||||
framebuffer_line = stv_framebuffer_display_lines[y];
|
||||
framebuffer_line = state->m_vdp1.framebuffer_display_lines[y];
|
||||
bitmap_line = BITMAP_ADDR16(bitmap, y, 0);
|
||||
|
||||
for ( x = mycliprect.min_x; x <= mycliprect.max_x; x++ )
|
||||
@ -6039,7 +6039,7 @@ static void draw_sprites(running_machine &machine, bitmap_t *bitmap, const recta
|
||||
if (stv_sprite_priorities_in_fb_line[y][pri] == 0)
|
||||
continue;
|
||||
|
||||
framebuffer_line = stv_framebuffer_display_lines[y];
|
||||
framebuffer_line = state->m_vdp1.framebuffer_display_lines[y];
|
||||
bitmap_line = BITMAP_ADDR16(bitmap, y, 0);
|
||||
|
||||
for ( x = mycliprect.min_x; x <= mycliprect.max_x; x++ )
|
||||
@ -6141,7 +6141,7 @@ static void draw_sprites(running_machine &machine, bitmap_t *bitmap, const recta
|
||||
if (stv_sprite_priorities_in_fb_line[y][pri] == 0)
|
||||
continue;
|
||||
|
||||
framebuffer_line = stv_framebuffer_display_lines[y];
|
||||
framebuffer_line = state->m_vdp1.framebuffer_display_lines[y];
|
||||
if ( interlace_framebuffer == 0 )
|
||||
{
|
||||
bitmap_line = BITMAP_ADDR16(bitmap, y, 0);
|
||||
|
Loading…
Reference in New Issue
Block a user