mirror of
https://github.com/holub/mame
synced 2025-10-05 16:50:57 +03:00
tatsumi: removed calls to driver_data (nw)
This commit is contained in:
parent
6e862b86e3
commit
7dd5884a37
@ -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);
|
||||
};
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user