tatsumi: removed calls to driver_data (nw)

This commit is contained in:
smf- 2017-12-20 22:57:01 +00:00
parent 6e862b86e3
commit 7dd5884a37
2 changed files with 66 additions and 66 deletions

View File

@ -52,6 +52,8 @@ public:
DECLARE_READ8_MEMBER(tatsumi_hack_ym2151_r);
DECLARE_READ8_MEMBER(tatsumi_hack_oki_r);
void tatsumi_reset();
template<class _BitmapClass> void draw_sprites(_BitmapClass &bitmap, const rectangle &cliprect, int write_priority_only, int rambank);
void update_cluts(int fake_palette_offset, int object_base, int length);
};
class apache3_state : public tatsumi_state
@ -85,6 +87,7 @@ public:
DECLARE_WRITE_LINE_MEMBER(apache3_68000_reset);
private:
void draw_sky(bitmap_rgb32 &bitmap, const rectangle &cliprect, int palette_base, int start_offset);
void draw_ground(bitmap_rgb32 &dst, const rectangle &cliprect);
required_device<cpu_device> m_subcpu2;
@ -200,4 +203,6 @@ private:
uint16_t m_bigfight_a40000[2];
uint16_t m_bigfight_bank;
uint16_t m_bigfight_last_bank;
void draw_bg(bitmap_rgb32 &dst, tilemap_t *src, const uint16_t* scrollx, const uint16_t* scrolly, const uint16_t* tilemap_ram, int tile_bank, int xscroll_offset, int yscroll_offset, int xsize, int ysize);
};

View File

@ -434,10 +434,8 @@ static void mycopyrozbitmap_core(bitmap_rgb32 &bitmap,bitmap_rgb32 &srcbitmap,
}
template<class _BitmapClass>
static void draw_sprites(running_machine &machine, _BitmapClass &bitmap, const rectangle &cliprect, int write_priority_only, int rambank)
void tatsumi_state::draw_sprites(_BitmapClass &bitmap, const rectangle &cliprect, int write_priority_only, int rambank)
{
tatsumi_state *state = machine.driver_data<tatsumi_state>();
uint16_t *spriteram16 = state->m_spriteram;
int offs, flip_x, flip_y, x, y, color;
int w, h, index, lines, scale, rotate;
uint8_t *src1, *src2;
@ -482,28 +480,28 @@ static void draw_sprites(running_machine &machine, _BitmapClass &bitmap, const r
Bytes 2/3: Tile index to start fetching tiles from (increments per tile).
*/
y = spriteram16[offs+3];
x = spriteram16[offs+2];
scale = spriteram16[offs+4] & 0x1ff;
color = spriteram16[offs+1] >> 3 & 0x1ff;
flip_x = spriteram16[offs+1] & 0x8000;
flip_y = spriteram16[offs+1] & 0x4000;
rotate = 0;//spriteram16[offs+5]&0x1ff; // Todo: Turned off for now
y = m_spriteram[offs+3];
x = m_spriteram[offs+2];
scale = m_spriteram[offs+4] & 0x1ff;
color = m_spriteram[offs+1] >> 3 & 0x1ff;
flip_x = m_spriteram[offs+1] & 0x8000;
flip_y = m_spriteram[offs+1] & 0x4000;
rotate = 0;//m_spriteram[offs+5]&0x1ff; // Todo: Turned off for now
index = spriteram16[offs];
index = m_spriteram[offs];
// if (spriteram16[offs+1]&0x7)
// if (m_spriteram[offs+1]&0x7)
// color=machine().rand()%0xff;
/* End of sprite list marker */
if (index == 0xffff || spriteram16[offs + 4] == 0xffff) // todo
if (index == 0xffff || m_spriteram[offs + 4] == 0xffff) // todo
return;
if (index >= 0x4000)
continue;
src1 = state->m_rom_sprite_lookup1 + (index * 4);
src2 = state->m_rom_sprite_lookup2 + (index * 4);
src1 = m_rom_sprite_lookup1 + (index * 4);
src2 = m_rom_sprite_lookup2 + (index * 4);
lines = src1[2];
y_offset = src1[0]&0xf8;
@ -521,7 +519,7 @@ static void draw_sprites(running_machine &machine, _BitmapClass &bitmap, const r
if (rotate)
{
render_y = 0;
state->m_temp_bitmap.fill(0);
m_temp_bitmap.fill(0);
}
extent_x = extent_y = 0;
@ -560,14 +558,14 @@ static void draw_sprites(running_machine &machine, _BitmapClass &bitmap, const r
for (w = 0; w < x_width; w++) {
if (rotate)
roundupt_drawgfxzoomrotate(state,
state->m_temp_bitmap,cliprect,state->m_gfxdecode->gfx(0),
roundupt_drawgfxzoomrotate(this,
m_temp_bitmap,cliprect,m_gfxdecode->gfx(0),
base,
color,flip_x,flip_y,x_pos,render_y,
scale,scale,0,write_priority_only);
else
roundupt_drawgfxzoomrotate(state,
bitmap,cliprect,state->m_gfxdecode->gfx(0),
roundupt_drawgfxzoomrotate(this,
bitmap,cliprect,m_gfxdecode->gfx(0),
base,
color,flip_x,flip_y,x_pos,render_y,
scale,scale,0,write_priority_only);
@ -616,14 +614,13 @@ static void draw_sprites(running_machine &machine, _BitmapClass &bitmap, const r
extent_x = extent_x >> 16;
extent_y = extent_y >> 16;
if (extent_x > 2 && extent_y > 2)
mycopyrozbitmap_core(bitmap, state->m_temp_bitmap, x/* + (extent_x/2)*/, y /*+ (extent_y/2)*/, extent_x, extent_y, incxx, incxy, incyx, incyy, cliprect, 0);
mycopyrozbitmap_core(bitmap, m_temp_bitmap, x/* + (extent_x/2)*/, y /*+ (extent_y/2)*/, extent_x, extent_y, incxx, incxy, incyx, incyy, cliprect, 0);
}
}
}
static void draw_sky(running_machine &machine, bitmap_rgb32 &bitmap,const rectangle &cliprect, int palette_base, int start_offset)
void apache3_state::draw_sky(bitmap_rgb32 &bitmap,const rectangle &cliprect, int palette_base, int start_offset)
{
tatsumi_state *state = machine.driver_data<tatsumi_state>();
// all todo
int x,y;
@ -639,7 +636,7 @@ start_offset-=48;
if (col<palette_base) col=palette_base;
if (col>palette_base+127) col=palette_base+127;
bitmap.pix32(y, x) = state->m_palette->pen(col);
bitmap.pix32(y, x) = m_palette->pen(col);
}
}
}
@ -859,35 +856,34 @@ offset is from last pixel of first road segment?
}
}
static void update_cluts(running_machine &machine, int fake_palette_offset, int object_base, int length)
void tatsumi_state::update_cluts(int fake_palette_offset, int object_base, int length)
{
tatsumi_state *state = machine.driver_data<tatsumi_state>();
/* Object palettes are build from a series of cluts stored in the object roms.
We update 'Mame palettes' from the clut here in order to simplify the
draw routines. We also note down any uses of the 'shadow' pen (index 255).
*/
int i;
const uint8_t* bank1=state->m_rom_clut0;
const uint8_t* bank2=state->m_rom_clut1;
const uint8_t* bank1=m_rom_clut0;
const uint8_t* bank2=m_rom_clut1;
for (i=0; i<length; i+=8) {
state->m_palette->set_pen_color(fake_palette_offset+i+0,state->m_palette->pen_color(bank1[1]+object_base));
state->m_shadow_pen_array[i+0]=(bank1[1]==255);
state->m_palette->set_pen_color(fake_palette_offset+i+1,state->m_palette->pen_color(bank1[0]+object_base));
state->m_shadow_pen_array[i+1]=(bank1[0]==255);
state->m_palette->set_pen_color(fake_palette_offset+i+2,state->m_palette->pen_color(bank1[3]+object_base));
state->m_shadow_pen_array[i+2]=(bank1[3]==255);
state->m_palette->set_pen_color(fake_palette_offset+i+3,state->m_palette->pen_color(bank1[2]+object_base));
state->m_shadow_pen_array[i+3]=(bank1[2]==255);
m_palette->set_pen_color(fake_palette_offset+i+0,m_palette->pen_color(bank1[1]+object_base));
m_shadow_pen_array[i+0]=(bank1[1]==255);
m_palette->set_pen_color(fake_palette_offset+i+1,m_palette->pen_color(bank1[0]+object_base));
m_shadow_pen_array[i+1]=(bank1[0]==255);
m_palette->set_pen_color(fake_palette_offset+i+2,m_palette->pen_color(bank1[3]+object_base));
m_shadow_pen_array[i+2]=(bank1[3]==255);
m_palette->set_pen_color(fake_palette_offset+i+3,m_palette->pen_color(bank1[2]+object_base));
m_shadow_pen_array[i+3]=(bank1[2]==255);
state->m_palette->set_pen_color(fake_palette_offset+i+4,state->m_palette->pen_color(bank2[1]+object_base));
state->m_shadow_pen_array[i+4]=(bank2[1]==255);
state->m_palette->set_pen_color(fake_palette_offset+i+5,state->m_palette->pen_color(bank2[0]+object_base));
state->m_shadow_pen_array[i+5]=(bank2[0]==255);
state->m_palette->set_pen_color(fake_palette_offset+i+6,state->m_palette->pen_color(bank2[3]+object_base));
state->m_shadow_pen_array[i+6]=(bank2[3]==255);
state->m_palette->set_pen_color(fake_palette_offset+i+7,state->m_palette->pen_color(bank2[2]+object_base));
state->m_shadow_pen_array[i+7]=(bank2[2]==255);
m_palette->set_pen_color(fake_palette_offset+i+4,m_palette->pen_color(bank2[1]+object_base));
m_shadow_pen_array[i+4]=(bank2[1]==255);
m_palette->set_pen_color(fake_palette_offset+i+5,m_palette->pen_color(bank2[0]+object_base));
m_shadow_pen_array[i+5]=(bank2[0]==255);
m_palette->set_pen_color(fake_palette_offset+i+6,m_palette->pen_color(bank2[3]+object_base));
m_shadow_pen_array[i+6]=(bank2[3]==255);
m_palette->set_pen_color(fake_palette_offset+i+7,m_palette->pen_color(bank2[2]+object_base));
m_shadow_pen_array[i+7]=(bank2[2]==255);
bank1+=4;
bank2+=4;
@ -896,14 +892,13 @@ static void update_cluts(running_machine &machine, int fake_palette_offset, int
/**********************************************************************/
static void draw_bg(running_machine &machine, bitmap_rgb32 &dst, tilemap_t *src, const uint16_t* scrollx, const uint16_t* scrolly, const uint16_t* tilemap_ram, int tile_bank, int xscroll_offset, int yscroll_offset, int xsize, int ysize)
void cyclwarr_state::draw_bg(bitmap_rgb32 &dst, tilemap_t *src, const uint16_t* scrollx, const uint16_t* scrolly, const uint16_t* tilemap_ram, int tile_bank, int xscroll_offset, int yscroll_offset, int xsize, int ysize)
{
/*
Each tile (0x4000 of them) has a lookup table in ROM to build an individual 3-bit palette
from sets of 8 bit palettes!
*/
tatsumi_state *state = machine.driver_data<tatsumi_state>();
const uint8_t* tile_cluts = machine.root_device().memregion("gfx4")->base();
const uint8_t* tile_cluts = machine().root_device().memregion("gfx4")->base();
const bitmap_ind16 &src_bitmap = src->pixmap();
int src_y_mask=ysize-1;
int src_x_mask=xsize-1;
@ -927,7 +922,7 @@ static void draw_bg(running_machine &machine, bitmap_rgb32 &dst, tilemap_t *src,
ppp=pp + ((p&0x78)<<5);
if ((p&0x7)!=0 || ((p&0x7)==0 && (pp&0x7)!=0)) // Transparent pixels are set by both the tile pixel data==0 AND colour palette==0
dst.pix32(y, x) = state->m_palette->pen(ppp);
dst.pix32(y, x) = m_palette->pen(ppp);
}
}
}
@ -1001,14 +996,14 @@ if (0) {
uint32_t apache3_state::screen_update_apache3(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
update_cluts(machine(), 1024, 0, 2048);
update_cluts(1024, 0, 2048);
m_tx_layer->set_scrollx(0,24);
bitmap.fill(m_palette->pen(0), cliprect);
draw_sky(machine(), bitmap, cliprect, 256, m_apache3_rotate_ctrl[1]);
draw_sky(bitmap, cliprect, 256, m_apache3_rotate_ctrl[1]);
// draw_ground(machine(), bitmap, cliprect);
draw_sprites(machine(), bitmap,cliprect,0, (m_sprite_control_ram[0x20]&0x1000) ? 0x1000 : 0);
draw_sprites(bitmap,cliprect,0, (m_sprite_control_ram[0x20]&0x1000) ? 0x1000 : 0);
m_tx_layer->draw(screen, bitmap, cliprect, 0,0);
return 0;
}
@ -1018,7 +1013,7 @@ uint32_t roundup5_state::screen_update_roundup5(screen_device &screen, bitmap_rg
// uint16_t bg_x_scroll=m_roundup5_unknown1[0];
// uint16_t bg_y_scroll=m_roundup5_unknown2[0];
update_cluts(machine(), 1024, 512, 4096);
update_cluts(1024, 512, 4096);
m_tx_layer->set_scrollx(0,24);
m_tx_layer->set_scrolly(0,0); //(((m_roundupt_crt_reg[0xe]<<8)|m_roundupt_crt_reg[0xf])>>5) + 96);
@ -1026,9 +1021,9 @@ uint32_t roundup5_state::screen_update_roundup5(screen_device &screen, bitmap_rg
bitmap.fill(m_palette->pen(384), cliprect); // todo
screen.priority().fill(0, cliprect);
draw_sprites(machine(), screen.priority(),cliprect,1,(m_sprite_control_ram[0xe0]&0x1000) ? 0x1000 : 0); // Alpha pass only
draw_sprites(screen.priority(),cliprect,1,(m_sprite_control_ram[0xe0]&0x1000) ? 0x1000 : 0); // Alpha pass only
draw_road(bitmap,cliprect,screen.priority());
draw_sprites(machine(), bitmap,cliprect,0,(m_sprite_control_ram[0xe0]&0x1000) ? 0x1000 : 0); // Full pass
draw_sprites(bitmap,cliprect,0,(m_sprite_control_ram[0xe0]&0x1000) ? 0x1000 : 0); // Full pass
m_tx_layer->draw(screen, bitmap, cliprect, 0,0);
return 0;
}
@ -1047,12 +1042,12 @@ uint32_t cyclwarr_state::screen_update_cyclwarr(screen_device &screen, bitmap_rg
bitmap.fill(m_palette->pen(0), cliprect);
draw_bg(machine(), bitmap, m_layer3, &m_cyclwarr_videoram1[0x000], &m_cyclwarr_videoram1[0x100], m_cyclwarr_videoram1, m_bigfight_a40000[0], 8, -0x80, 512, 4096);
draw_bg(machine(), bitmap, m_layer2, &m_cyclwarr_videoram1[0x200], &m_cyclwarr_videoram1[0x300], m_cyclwarr_videoram1, m_bigfight_a40000[0], 8, -0x80, 512, 4096);
draw_bg(machine(), bitmap, m_layer1, &m_cyclwarr_videoram0[0x000], &m_cyclwarr_videoram0[0x100], m_cyclwarr_videoram0, m_bigfight_a40000[0], 8, -0x40, 1024, 2048);
update_cluts(machine(), 8192, 4096, 8192);
draw_sprites(machine(), bitmap,cliprect,0,(m_sprite_control_ram[0xe0]&0x1000) ? 0x1000 : 0);
draw_bg(machine(), bitmap, m_layer0, &m_cyclwarr_videoram0[0x200], &m_cyclwarr_videoram0[0x300], m_cyclwarr_videoram0, m_bigfight_a40000[0], 0x10, -0x80, 512, 4096);
draw_bg(bitmap, m_layer3, &m_cyclwarr_videoram1[0x000], &m_cyclwarr_videoram1[0x100], m_cyclwarr_videoram1, m_bigfight_a40000[0], 8, -0x80, 512, 4096);
draw_bg(bitmap, m_layer2, &m_cyclwarr_videoram1[0x200], &m_cyclwarr_videoram1[0x300], m_cyclwarr_videoram1, m_bigfight_a40000[0], 8, -0x80, 512, 4096);
draw_bg(bitmap, m_layer1, &m_cyclwarr_videoram0[0x000], &m_cyclwarr_videoram0[0x100], m_cyclwarr_videoram0, m_bigfight_a40000[0], 8, -0x40, 1024, 2048);
update_cluts(8192, 4096, 8192);
draw_sprites(bitmap,cliprect,0,(m_sprite_control_ram[0xe0]&0x1000) ? 0x1000 : 0);
draw_bg(bitmap, m_layer0, &m_cyclwarr_videoram0[0x200], &m_cyclwarr_videoram0[0x300], m_cyclwarr_videoram0, m_bigfight_a40000[0], 0x10, -0x80, 512, 4096);
return 0;
}
@ -1070,12 +1065,12 @@ uint32_t cyclwarr_state::screen_update_bigfight(screen_device &screen, bitmap_rg
}
bitmap.fill(m_palette->pen(0), cliprect);
draw_bg(machine(), bitmap, m_layer3, &m_cyclwarr_videoram1[0x000], &m_cyclwarr_videoram1[0x100], m_cyclwarr_videoram1, m_bigfight_a40000[0], 8, -0x40, 1024, 2048);
draw_bg(machine(), bitmap, m_layer2, &m_cyclwarr_videoram1[0x200], &m_cyclwarr_videoram1[0x300], m_cyclwarr_videoram1, m_bigfight_a40000[0], 8, -0x40, 1024, 2048);
draw_bg(machine(), bitmap, m_layer1, &m_cyclwarr_videoram0[0x000], &m_cyclwarr_videoram0[0x100], m_cyclwarr_videoram0, m_bigfight_a40000[0], 8, -0x40, 1024, 2048);
update_cluts(machine(), 8192, 4096, 8192);
draw_sprites(machine(), bitmap,cliprect,0,(m_sprite_control_ram[0xe0]&0x1000) ? 0x1000 : 0);
draw_bg(machine(), bitmap, m_layer0, &m_cyclwarr_videoram0[0x200], &m_cyclwarr_videoram0[0x300], m_cyclwarr_videoram0, m_bigfight_a40000[0], 0x10, -0x40, 1024, 2048);
draw_bg(bitmap, m_layer3, &m_cyclwarr_videoram1[0x000], &m_cyclwarr_videoram1[0x100], m_cyclwarr_videoram1, m_bigfight_a40000[0], 8, -0x40, 1024, 2048);
draw_bg(bitmap, m_layer2, &m_cyclwarr_videoram1[0x200], &m_cyclwarr_videoram1[0x300], m_cyclwarr_videoram1, m_bigfight_a40000[0], 8, -0x40, 1024, 2048);
draw_bg(bitmap, m_layer1, &m_cyclwarr_videoram0[0x000], &m_cyclwarr_videoram0[0x100], m_cyclwarr_videoram0, m_bigfight_a40000[0], 8, -0x40, 1024, 2048);
update_cluts(8192, 4096, 8192);
draw_sprites(bitmap,cliprect,0,(m_sprite_control_ram[0xe0]&0x1000) ? 0x1000 : 0);
draw_bg(bitmap, m_layer0, &m_cyclwarr_videoram0[0x200], &m_cyclwarr_videoram0[0x300], m_cyclwarr_videoram0, m_bigfight_a40000[0], 0x10, -0x40, 1024, 2048);
return 0;
}