Merge pull request #5182 from cam900/taito_f3_args

taito_f3.cpp, 2mindril.cpp : Updates
This commit is contained in:
R. Belmont 2019-06-08 15:03:07 -04:00 committed by GitHub
commit 650142e5cb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 3208 additions and 3249 deletions

View File

@ -55,26 +55,27 @@ public:
void init_drill();
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
private:
/* input-related */
required_ioport m_in0;
uint8_t m_defender_sensor;
uint8_t m_shutter_sensor;
uint16_t m_irq_reg;
u8 m_defender_sensor;
u8 m_shutter_sensor;
u16 m_irq_reg;
/* devices */
DECLARE_READ8_MEMBER(arm_pwr_r);
DECLARE_READ8_MEMBER(sensors_r);
DECLARE_WRITE8_MEMBER(coins_w);
DECLARE_WRITE16_MEMBER(sensors_w);
DECLARE_READ16_MEMBER(drill_irq_r);
DECLARE_WRITE16_MEMBER(drill_irq_w);
u8 arm_pwr_r();
u8 sensors_r();
void coins_w(u8 data);
void sensors_w(u16 data);
u16 irq_r();
void irq_w(offs_t offset, u16 data, u16 mem_mask);
DECLARE_MACHINE_START(drill);
DECLARE_MACHINE_RESET(drill);
INTERRUPT_GEN_MEMBER(drill_vblank_irq);
INTERRUPT_GEN_MEMBER(vblank_irq);
//INTERRUPT_GEN_MEMBER(drill_device_irq);
void tile_decode();
DECLARE_WRITE_LINE_MEMBER(irqhandler);
void drill_map(address_map &map);
@ -92,23 +93,23 @@ protected:
};
READ8_MEMBER(_2mindril_state::arm_pwr_r)
u8 _2mindril_state::arm_pwr_r()
{
int arm_pwr = m_in0->read();//throw
if(arm_pwr > 0xe0) return ~0x18;
if(arm_pwr > 0xc0) return ~0x14;
if(arm_pwr > 0x80) return ~0x12;
if(arm_pwr > 0x40) return ~0x10;
if (arm_pwr > 0xe0) return ~0x18;
if (arm_pwr > 0xc0) return ~0x14;
if (arm_pwr > 0x80) return ~0x12;
if (arm_pwr > 0x40) return ~0x10;
else return ~0x00;
}
READ8_MEMBER(_2mindril_state::sensors_r)
u8 _2mindril_state::sensors_r()
{
return (m_defender_sensor) | (m_shutter_sensor);
}
WRITE8_MEMBER(_2mindril_state::coins_w)
void _2mindril_state::coins_w(u8 data)
{
machine().bookkeeping().coin_counter_w(0, data & 0x04);
machine().bookkeeping().coin_counter_w(1, data & 0x08);
@ -147,7 +148,7 @@ void _2mindril_state::device_timer(emu_timer &timer, device_timer_id id, int par
}
#endif
WRITE16_MEMBER(_2mindril_state::sensors_w)
void _2mindril_state::sensors_w(u16 data)
{
/*---- xxxx ---- ---- select "lamps" (guess)*/
/*---- ---- ---- -x-- lamp*/
@ -174,12 +175,12 @@ WRITE16_MEMBER(_2mindril_state::sensors_w)
}
}
READ16_MEMBER(_2mindril_state::drill_irq_r)
u16 _2mindril_state::irq_r()
{
return m_irq_reg;
}
WRITE16_MEMBER(_2mindril_state::drill_irq_w)
void _2mindril_state::irq_w(offs_t offset, u16 data, u16 mem_mask)
{
/*
(note: could rather be irq mask)
@ -187,13 +188,13 @@ WRITE16_MEMBER(_2mindril_state::drill_irq_w)
---- ---- ---- x--- irq lv 4 ack, 0->1 latch
---- ---- -??- -??? connected to the other levels?
*/
if(((m_irq_reg & 8) == 0) && data & 8)
if (((m_irq_reg & 8) == 0) && data & 8)
m_maincpu->set_input_line(4, CLEAR_LINE);
if(((m_irq_reg & 0x10) == 0) && data & 0x10)
if (((m_irq_reg & 0x10) == 0) && data & 0x10)
m_maincpu->set_input_line(5, CLEAR_LINE);
if(data & 0xffe7)
if (data & 0xffe7)
printf("%04x\n",data);
COMBINE_DATA(&m_irq_reg);
@ -204,18 +205,18 @@ void _2mindril_state::drill_map(address_map &map)
map(0x000000, 0x07ffff).rom();
map(0x200000, 0x20ffff).ram();
map(0x300000, 0x3000ff).ram();
map(0x400000, 0x40ffff).rw(FUNC(_2mindril_state::f3_spriteram_r), FUNC(_2mindril_state::f3_spriteram_w));
map(0x410000, 0x41bfff).rw(FUNC(_2mindril_state::f3_pf_data_r), FUNC(_2mindril_state::f3_pf_data_w));
map(0x41c000, 0x41dfff).rw(FUNC(_2mindril_state::f3_videoram_r), FUNC(_2mindril_state::f3_videoram_w));
map(0x41e000, 0x41ffff).rw(FUNC(_2mindril_state::f3_vram_r), FUNC(_2mindril_state::f3_vram_w));
map(0x420000, 0x42ffff).rw(FUNC(_2mindril_state::f3_lineram_r), FUNC(_2mindril_state::f3_lineram_w));
map(0x430000, 0x43ffff).rw(FUNC(_2mindril_state::f3_pivot_r), FUNC(_2mindril_state::f3_pivot_w));
map(0x460000, 0x46000f).w(FUNC(_2mindril_state::f3_control_0_w));
map(0x460010, 0x46001f).w(FUNC(_2mindril_state::f3_control_1_w));
map(0x400000, 0x40ffff).ram().share("spriteram");
map(0x410000, 0x41bfff).ram().w(FUNC(_2mindril_state::pf_ram_w)).share("pf_ram");
map(0x41c000, 0x41dfff).ram().w(FUNC(_2mindril_state::textram_w)).share("textram");
map(0x41e000, 0x41ffff).ram().w(FUNC(_2mindril_state::charram_w)).share("charram");
map(0x420000, 0x42ffff).ram().share("line_ram");
map(0x430000, 0x43ffff).ram().w(FUNC(_2mindril_state::pivot_w)).share("pivot_ram");
map(0x460000, 0x46000f).w(FUNC(_2mindril_state::control_0_w));
map(0x460010, 0x46001f).w(FUNC(_2mindril_state::control_1_w));
map(0x500000, 0x501fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x502022, 0x502023).nopw(); //countinously switches between 0 and 2
map(0x600000, 0x600007).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write)).umask16(0x00ff);
map(0x60000c, 0x60000d).rw(FUNC(_2mindril_state::drill_irq_r), FUNC(_2mindril_state::drill_irq_w));
map(0x60000c, 0x60000d).rw(FUNC(_2mindril_state::irq_r), FUNC(_2mindril_state::irq_w));
map(0x60000e, 0x60000f).ram(); // unknown purpose, zeroed at start-up and nothing else
map(0x700000, 0x70000f).rw("tc0510nio", FUNC(tc0510nio_device::read), FUNC(tc0510nio_device::write)).umask16(0xff00);
map(0x800000, 0x800001).w(FUNC(_2mindril_state::sensors_w));
@ -269,7 +270,7 @@ static const gfx_layout charlayout =
4,
{ 0,1,2,3 },
{ 20, 16, 28, 24, 4, 0, 12, 8 },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
{ STEP8(0,4*8) },
32*8
};
@ -280,52 +281,19 @@ static const gfx_layout pivotlayout =
4,
{ 0,1,2,3 },
{ 20, 16, 28, 24, 4, 0, 12, 8 },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
{ STEP8(0,4*8) },
32*8
};
static const gfx_layout spriteram_layout =
{
16,16,
RGN_FRAC(1,2),
6, /* Palettes have 4 bpp indexes despite up to 6 bpp data */
{ RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+1, 0, 1, 2, 3 },
{
4, 0, 12, 8,
16+4, 16+0, 16+12, 16+8,
32+4, 32+0, 32+12, 32+8,
48+4, 48+0, 48+12, 48+8 },
{ 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 },
128*8 /* every sprite takes 128 consecutive bytes */
};
static const gfx_layout tile_layout =
{
16,16,
RGN_FRAC(1,2),
6, /* Palettes have 4 bpp indexes despite up to 6 bpp data */
{ RGN_FRAC(1,2)+2, RGN_FRAC(1,2)+3, 0, 1, 2, 3 },
{
4, 0, 16+4, 16+0,
8+4, 8+0, 24+4, 24+0,
32+4, 32+0, 48+4, 48+0,
40+4, 40+0, 56+4, 56+0,
},
{ 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 },
128*8 /* every sprite takes 128 consecutive bytes */
};
static GFXDECODE_START( gfx_2mindril )
GFXDECODE_ENTRY( nullptr, 0x000000, charlayout, 0x0000, 0x0400>>4 ) /* Dynamically modified */
GFXDECODE_ENTRY( "gfx2", 0x000000, tile_layout, 0x0000, 0x2000>>4 ) /* Tiles area */
GFXDECODE_ENTRY( "gfx1", 0x000000, spriteram_layout, 0x1000, 0x1000>>4 ) /* Sprites area */
GFXDECODE_ENTRY( nullptr, 0x000000, pivotlayout, 0x0000, 0x400>>4 ) /* Dynamically modified */
GFXDECODE_ENTRY( nullptr, 0x000000, charlayout, 0x0000, 0x0400>>4 ) /* Dynamically modified */
GFXDECODE_ENTRY( "tilemap", 0x000000, gfx_16x16x4_packed_lsb, 0x0000, 0x2000>>4 ) /* Tiles area */
GFXDECODE_ENTRY( "sprites", 0x000000, gfx_16x16x4_packed_lsb, 0x1000, 0x1000>>4 ) /* Sprites area */
GFXDECODE_ENTRY( nullptr, 0x000000, pivotlayout, 0x0000, 0x400>>4 ) /* Dynamically modified */
GFXDECODE_END
INTERRUPT_GEN_MEMBER(_2mindril_state::drill_vblank_irq)
INTERRUPT_GEN_MEMBER(_2mindril_state::vblank_irq)
{
device.execute().set_input_line(4, ASSERT_LINE);
}
@ -344,14 +312,14 @@ WRITE_LINE_MEMBER(_2mindril_state::irqhandler)
}
MACHINE_START_MEMBER(_2mindril_state,drill)
void _2mindril_state::machine_start()
{
save_item(NAME(m_defender_sensor));
save_item(NAME(m_shutter_sensor));
save_item(NAME(m_irq_reg));
}
MACHINE_RESET_MEMBER(_2mindril_state,drill)
void _2mindril_state::machine_reset()
{
m_defender_sensor = 0;
m_shutter_sensor = 0;
@ -362,7 +330,7 @@ void _2mindril_state::drill(machine_config &config)
{
M68000(config, m_maincpu, 16000000);
m_maincpu->set_addrmap(AS_PROGRAM, &_2mindril_state::drill_map);
m_maincpu->set_vblank_int("screen", FUNC(_2mindril_state::drill_vblank_irq));
m_maincpu->set_vblank_int("screen", FUNC(_2mindril_state::vblank_irq));
//MCFG_DEVICE_PERIODIC_INT_DRIVER(_2mindril_state, drill_device_irq, 60)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_2mindril);
@ -373,16 +341,13 @@ void _2mindril_state::drill(machine_config &config)
tc0510nio.write_4_callback().set(FUNC(_2mindril_state::coins_w));
tc0510nio.read_7_callback().set_ioport("COINS");
MCFG_MACHINE_START_OVERRIDE(_2mindril_state,drill)
MCFG_MACHINE_RESET_OVERRIDE(_2mindril_state,drill)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* inaccurate, same as Taito F3? (needs screen raw params anyway) */
m_screen->set_size(40*8+48*2, 32*8);
m_screen->set_visarea(46, 40*8-1 + 46, 24, 24+224-1);
m_screen->set_screen_update(FUNC(_2mindril_state::screen_update_f3));
m_screen->screen_vblank().set(FUNC(_2mindril_state::screen_vblank_f3));
m_screen->set_screen_update(FUNC(_2mindril_state::screen_update));
m_screen->screen_vblank().set(FUNC(_2mindril_state::screen_vblank));
PALETTE(config, m_palette).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x2000);
@ -406,78 +371,20 @@ ROM_START( 2mindril )
ROM_REGION( 0x200000, "ymsnd", 0 ) /* Samples */
ROM_LOAD( "d58-11.ic31", 0x000000, 0x200000, CRC(dc26d58d) SHA1(cffb18667da18f5367b02af85a2f7674dd61ae97) )
ROM_REGION( 0x800000, "gfx1", ROMREGION_ERASE00 )
ROM_REGION( 0x400000, "sprites", ROMREGION_ERASE00 )
ROM_REGION( 0x200000, "sprites_hi", ROMREGION_ERASE00 )
ROM_REGION( 0x800000, "gfx2", 0 )
ROM_LOAD16_BYTE( "d58-09.ic28", 0x000001, 0x200000, CRC(d8f6a86a) SHA1(d6b2ec309e21064574ee63e025ae4716b1982a98) )
ROM_LOAD16_BYTE( "d58-08.ic27", 0x000000, 0x200000, CRC(9f5a3f52) SHA1(7b696bd823819965b974c853cebc1660750db61e) )
ROM_LOAD( "d58-10.ic29", 0x400000, 0x200000, CRC(74c87e08) SHA1(f39b3a64f8338ccf5ca6eb76cee92a10fe0aad8f) )
ROM_RELOAD( 0x600000, 0x200000 )
ROM_REGION( 0x400000, "tilemap", 0 )
ROM_LOAD32_WORD( "d58-08.ic27", 0x000000, 0x200000, CRC(9f5a3f52) SHA1(7b696bd823819965b974c853cebc1660750db61e) )
ROM_LOAD32_WORD( "d58-09.ic28", 0x000002, 0x200000, CRC(d8f6a86a) SHA1(d6b2ec309e21064574ee63e025ae4716b1982a98) )
ROM_REGION( 0x200000, "tilemap_hi", 0 )
ROM_LOAD ( "d58-10.ic29", 0x000000, 0x200000, CRC(74c87e08) SHA1(f39b3a64f8338ccf5ca6eb76cee92a10fe0aad8f) )
ROM_END
void _2mindril_state::tile_decode()
{
uint8_t lsb,msb;
uint32_t offset,i;
uint8_t *gfx = memregion("gfx2")->base();
int size=memregion("gfx2")->bytes();
int data;
/* Setup ROM formats:
Some games will only use 4 or 5 bpp sprites, and some only use 4 bpp tiles,
I don't believe this is software or prom controlled but simply the unused data lines
are tied low on the game board if unused. This is backed up by the fact the palette
indices are always related to 4 bpp data, even in 6 bpp games.
Most (all?) games with 5bpp tiles have the sixth bit set. Also, in Arabian Magic
sprites 1200-120f contain 6bpp data which is probably bogus.
video_start clears the fifth and sixth bit of the decoded graphics according
to the bit depth specified in f3_config_table.
*/
offset = size/2;
for (i = size/2+size/4; i<size; i+=2)
{
/* Expand 2bits into 4bits format */
lsb = gfx[i+1];
msb = gfx[i];
gfx[offset+0]=((msb&0x02)<<3) | ((msb&0x01)>>0) | ((lsb&0x02)<<4) | ((lsb&0x01)<<1);
gfx[offset+2]=((msb&0x08)<<1) | ((msb&0x04)>>2) | ((lsb&0x08)<<2) | ((lsb&0x04)>>1);
gfx[offset+1]=((msb&0x20)>>1) | ((msb&0x10)>>4) | ((lsb&0x20)<<0) | ((lsb&0x10)>>3);
gfx[offset+3]=((msb&0x80)>>3) | ((msb&0x40)>>6) | ((lsb&0x80)>>2) | ((lsb&0x40)>>5);
offset+=4;
}
gfx = memregion("gfx1")->base();
size=memregion("gfx1")->bytes();
offset = size/2;
for (i = size/2+size/4; i<size; i++)
{
int d1,d2,d3,d4;
/* Expand 2bits into 4bits format */
data = gfx[i];
d1 = (data>>0) & 3;
d2 = (data>>2) & 3;
d3 = (data>>4) & 3;
d4 = (data>>6) & 3;
gfx[offset] = (d1<<2) | (d2<<6);
offset++;
gfx[offset] = (d3<<2) | (d4<<6);
offset++;
}
}
void _2mindril_state::init_drill()
{
m_f3_game = TMDRILL;
m_game = TMDRILL;
tile_decode();
}

File diff suppressed because it is too large Load Diff

View File

@ -60,19 +60,28 @@ public:
taito_f3_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "taito_en:audiocpu"),
m_taito_en(*this, "taito_en"),
m_watchdog(*this, "watchdog"),
m_oki(*this, "oki"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_eeprom(*this, "eeprom"),
m_f3_ram(*this,"f3_ram"),
m_paletteram32(*this, "paletteram"),
m_spriterom_hi(*this, "sprites_hi"),
m_tilemaprom_hi(*this, "tilemap_hi"),
m_textram(*this, "textram", 0),
m_spriteram(*this, "spriteram", 0),
m_charram(*this, "charram", 0),
m_line_ram(*this, "line_ram", 0),
m_pf_ram(*this, "pf_ram", 0),
m_pivot_ram(*this, "pivot_ram", 0),
m_input(*this, "IN.%u", 0),
m_dial(*this, "DIAL.%u", 0),
m_eepromin(*this, "EEPROMIN")
m_eepromin(*this, "EEPROMIN"),
m_eepromout(*this, "EEPROMOUT"),
m_audiocpu(*this, "taito_en:audiocpu"),
m_taito_en(*this, "taito_en"),
m_oki(*this, "oki"),
m_paletteram32(*this, "paletteram"),
m_okibank(*this, "okibank")
{ }
void f3_eeprom(machine_config &config);
@ -132,75 +141,103 @@ protected:
TIMER_F3_INTERRUPT3
};
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
virtual void device_post_load(void) override;
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_audiocpu;
optional_device<taito_en_device> m_taito_en;
optional_device<watchdog_timer_device> m_watchdog;
optional_device<okim6295_device> m_oki;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
optional_device<eeprom_serial_base_device> m_eeprom;
optional_shared_ptr<uint32_t> m_f3_ram;
optional_shared_ptr<uint32_t> m_paletteram32;
optional_region_ptr<u8> m_spriterom_hi; // all but 2mindril, bubsymphb
optional_region_ptr<u8> m_tilemaprom_hi;
required_shared_ptr<u16> m_textram;
required_shared_ptr<u16> m_spriteram;
required_shared_ptr<u16> m_charram;
required_shared_ptr<u16> m_line_ram;
required_shared_ptr<u16> m_pf_ram;
required_shared_ptr<u16> m_pivot_ram;
optional_ioport_array<6> m_input;
optional_ioport_array<2> m_dial;
optional_ioport m_eepromin;
std::unique_ptr<uint16_t[]> m_videoram;
std::unique_ptr<uint16_t[]> m_spriteram;
std::unique_ptr<uint16_t[]> m_f3_vram;
std::unique_ptr<uint16_t[]> m_f3_line_ram;
std::unique_ptr<uint16_t[]> m_f3_pf_data;
std::unique_ptr<uint16_t[]> m_f3_pivot_ram;
optional_ioport m_eepromout;
emu_timer *m_interrupt3_timer;
uint32_t m_coin_word[2];
int m_f3_game;
tilemap_t *m_pf1_tilemap;
tilemap_t *m_pf2_tilemap;
tilemap_t *m_pf3_tilemap;
tilemap_t *m_pf4_tilemap;
tilemap_t *m_pf5_tilemap;
tilemap_t *m_pf6_tilemap;
tilemap_t *m_pf7_tilemap;
tilemap_t *m_pf8_tilemap;
u32 m_coin_word[2];
struct tempsprite
{
int code, color;
int flipx, flipy;
int x, y;
int zoomx, zoomy;
int pri;
};
struct f3_playfield_line_inf
{
int alpha_mode[256];
int pri[256];
/* use for draw_scanlines */
u16 *src[256], *src_s[256], *src_e[256];
u8 *tsrc[256], *tsrc_s[256];
int x_count[256];
u32 x_zoom[256];
u32 clip0[256];
u32 clip1[256];
};
struct f3_spritealpha_line_inf
{
u16 alpha_level[256];
u16 spri[256];
u16 sprite_alpha[256];
u32 sprite_clip0[256];
u32 sprite_clip1[256];
s16 clip0_l[256];
s16 clip0_r[256];
s16 clip1_l[256];
s16 clip1_r[256];
};
int m_game;
tilemap_t *m_tilemap[8];
tilemap_t *m_pixel_layer;
tilemap_t *m_vram_layer;
std::unique_ptr<uint16_t[]> m_spriteram16_buffered;
uint16_t m_f3_control_0[8];
uint16_t m_f3_control_1[8];
std::unique_ptr<u16[]> m_spriteram16_buffered;
u16 m_control_0[8];
u16 m_control_1[8];
int m_flipscreen;
uint8_t m_sprite_extra_planes;
uint8_t m_sprite_pen_mask;
uint16_t *m_f3_pf_data_1;
uint16_t *m_f3_pf_data_2;
uint16_t *m_f3_pf_data_3;
uint16_t *m_f3_pf_data_4;
uint16_t *m_f3_pf_data_5;
uint16_t *m_f3_pf_data_6;
uint16_t *m_f3_pf_data_7;
uint16_t *m_f3_pf_data_8;
u8 m_sprite_extra_planes;
u8 m_sprite_pen_mask;
u16 *m_pf_data[8];
int m_sprite_lag;
uint8_t m_sprite_pri_usage;
u8 m_sprite_pri_usage;
bitmap_ind8 m_pri_alp_bitmap;
int m_f3_alpha_level_2as;
int m_f3_alpha_level_2ad;
int m_f3_alpha_level_3as;
int m_f3_alpha_level_3ad;
int m_f3_alpha_level_2bs;
int m_f3_alpha_level_2bd;
int m_f3_alpha_level_3bs;
int m_f3_alpha_level_3bd;
int m_alpha_level_2as;
int m_alpha_level_2ad;
int m_alpha_level_3as;
int m_alpha_level_3ad;
int m_alpha_level_2bs;
int m_alpha_level_2bd;
int m_alpha_level_3bs;
int m_alpha_level_3bd;
int m_alpha_level_last;
int m_width_mask;
int m_twidth_mask;
int m_twidth_mask_bit;
std::unique_ptr<uint8_t[]> m_tile_opaque_sp;
std::unique_ptr<uint8_t[]> m_tile_opaque_pf[8];
uint8_t m_add_sat[256][256];
std::unique_ptr<u8[]> m_tile_opaque_sp;
std::unique_ptr<u8[]> m_tile_opaque_pf[8];
u8 m_add_sat[256][256];
int m_alpha_s_1_1;
int m_alpha_s_1_2;
int m_alpha_s_1_4;
@ -221,197 +258,151 @@ protected:
int m_alpha_s_3b_0;
int m_alpha_s_3b_1;
int m_alpha_s_3b_2;
uint32_t m_dval;
uint8_t m_pval;
uint8_t m_tval;
uint8_t m_pdest_2a;
uint8_t m_pdest_2b;
u32 m_dval;
u8 m_pval;
u8 m_tval;
u8 m_pdest_2a;
u8 m_pdest_2b;
int m_tr_2a;
int m_tr_2b;
uint8_t m_pdest_3a;
uint8_t m_pdest_3b;
u8 m_pdest_3a;
u8 m_pdest_3b;
int m_tr_3a;
int m_tr_3b;
uint16_t *m_src0;
uint16_t *m_src_s0;
uint16_t *m_src_e0;
uint16_t m_clip_al0;
uint16_t m_clip_ar0;
uint16_t m_clip_bl0;
uint16_t m_clip_br0;
uint8_t *m_tsrc0;
uint8_t *m_tsrc_s0;
uint32_t m_x_count0;
uint32_t m_x_zoom0;
uint16_t *m_src1;
uint16_t *m_src_s1;
uint16_t *m_src_e1;
uint16_t m_clip_al1;
uint16_t m_clip_ar1;
uint16_t m_clip_bl1;
uint16_t m_clip_br1;
uint8_t *m_tsrc1;
uint8_t *m_tsrc_s1;
uint32_t m_x_count1;
uint32_t m_x_zoom1;
uint16_t *m_src2;
uint16_t *m_src_s2;
uint16_t *m_src_e2;
uint16_t m_clip_al2;
uint16_t m_clip_ar2;
uint16_t m_clip_bl2;
uint16_t m_clip_br2;
uint8_t *m_tsrc2;
uint8_t *m_tsrc_s2;
uint32_t m_x_count2;
uint32_t m_x_zoom2;
uint16_t *m_src3;
uint16_t *m_src_s3;
uint16_t *m_src_e3;
uint16_t m_clip_al3;
uint16_t m_clip_ar3;
uint16_t m_clip_bl3;
uint16_t m_clip_br3;
uint8_t *m_tsrc3;
uint8_t *m_tsrc_s3;
uint32_t m_x_count3;
uint32_t m_x_zoom3;
uint16_t *m_src4;
uint16_t *m_src_s4;
uint16_t *m_src_e4;
uint16_t m_clip_al4;
uint16_t m_clip_ar4;
uint16_t m_clip_bl4;
uint16_t m_clip_br4;
uint8_t *m_tsrc4;
uint8_t *m_tsrc_s4;
uint32_t m_x_count4;
uint32_t m_x_zoom4;
u16 *m_src[5];
u16 *m_src_s[5];
u16 *m_src_e[5];
u16 m_clip_al[5];
u16 m_clip_ar[5];
u16 m_clip_bl[5];
u16 m_clip_br[5];
u8 *m_tsrc[5];
u8 *m_tsrc_s[5];
u32 m_x_count[5];
u32 m_x_zoom[5];
struct tempsprite *m_spritelist;
const struct tempsprite *m_sprite_end;
struct f3_playfield_line_inf *m_pf_line_inf;
struct f3_spritealpha_line_inf *m_sa_line_inf;
const struct F3config *m_f3_game_config;
int (taito_f3_state::*m_dpix_n[8][16])(uint32_t s_pix);
int (taito_f3_state::**m_dpix_lp[5])(uint32_t s_pix);
int (taito_f3_state::**m_dpix_sp[9])(uint32_t s_pix);
const struct F3config *m_game_config;
int (taito_f3_state::*m_dpix_n[8][16])(u32 s_pix);
int (taito_f3_state::**m_dpix_lp[5])(u32 s_pix);
int (taito_f3_state::**m_dpix_sp[9])(u32 s_pix);
DECLARE_READ32_MEMBER(f3_control_r);
DECLARE_WRITE32_MEMBER(f3_control_w);
DECLARE_WRITE32_MEMBER(f3_sound_reset_0_w);
DECLARE_WRITE32_MEMBER(f3_sound_reset_1_w);
DECLARE_WRITE32_MEMBER(f3_sound_bankswitch_w);
DECLARE_WRITE16_MEMBER(f3_unk_w);
DECLARE_READ32_MEMBER(bubsympb_oki_r);
DECLARE_WRITE32_MEMBER(bubsympb_oki_w);
DECLARE_READ16_MEMBER(f3_pf_data_r);
DECLARE_WRITE16_MEMBER(f3_pf_data_w);
DECLARE_WRITE16_MEMBER(f3_control_0_w);
DECLARE_WRITE16_MEMBER(f3_control_1_w);
DECLARE_READ16_MEMBER(f3_spriteram_r);
DECLARE_WRITE16_MEMBER(f3_spriteram_w);
DECLARE_READ16_MEMBER(f3_videoram_r);
DECLARE_WRITE16_MEMBER(f3_videoram_w);
DECLARE_READ16_MEMBER(f3_vram_r);
DECLARE_WRITE16_MEMBER(f3_vram_w);
DECLARE_READ16_MEMBER(f3_pivot_r);
DECLARE_WRITE16_MEMBER(f3_pivot_w);
DECLARE_READ16_MEMBER(f3_lineram_r);
DECLARE_WRITE16_MEMBER(f3_lineram_w);
DECLARE_WRITE32_MEMBER(f3_palette_24bit_w);
u16 pf_ram_r(offs_t offset);
void pf_ram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
void control_0_w(offs_t offset, u16 data, u16 mem_mask = ~0);
void control_1_w(offs_t offset, u16 data, u16 mem_mask = ~0);
u16 spriteram_r(offs_t offset);
void spriteram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
u16 textram_r(offs_t offset);
void textram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
u16 charram_r(offs_t offset);
void charram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
u16 pivot_r(offs_t offset);
void pivot_w(offs_t offset, u16 data, u16 mem_mask = ~0);
u16 lineram_r(offs_t offset);
void lineram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
TILE_GET_INFO_MEMBER(get_tile_info1);
TILE_GET_INFO_MEMBER(get_tile_info2);
TILE_GET_INFO_MEMBER(get_tile_info3);
TILE_GET_INFO_MEMBER(get_tile_info4);
TILE_GET_INFO_MEMBER(get_tile_info5);
TILE_GET_INFO_MEMBER(get_tile_info6);
TILE_GET_INFO_MEMBER(get_tile_info7);
TILE_GET_INFO_MEMBER(get_tile_info8);
TILE_GET_INFO_MEMBER(get_tile_info_vram);
template<unsigned Layer> TILE_GET_INFO_MEMBER(get_tile_info);
TILE_GET_INFO_MEMBER(get_tile_info_text);
TILE_GET_INFO_MEMBER(get_tile_info_pixel);
uint32_t screen_update_f3(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(screen_vblank_f3);
INTERRUPT_GEN_MEMBER(f3_interrupt2);
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(screen_vblank);
void bubsympb_map(address_map &map);
void f3_map(address_map &map);
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
void tile_decode();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
virtual void device_post_load(void) override;
inline void get_tile_info(tile_data &tileinfo, int tile_index, uint16_t *gfx_base);
inline void f3_drawgfx(bitmap_rgb32 &dest_bmp,const rectangle &clip,gfx_element *gfx,int code,int color,int flipx,int flipy,int sx,int sy,uint8_t pri_dst);
inline void f3_drawgfxzoom(bitmap_rgb32 &dest_bmp,const rectangle &clip,gfx_element *gfx,int code,int color,int flipx,int flipy,int sx,int sy,int scalex,int scaley,uint8_t pri_dst);
inline void f3_drawgfx(bitmap_rgb32 &dest_bmp, const rectangle &clip, gfx_element *gfx, int code, int color, int flipx, int flipy, int sx, int sy, u8 pri_dst);
inline void f3_drawgfxzoom(bitmap_rgb32 &dest_bmp, const rectangle &clip, gfx_element *gfx, int code, int color, int flipx, int flipy, int sx, int sy, int scalex, int scaley, u8 pri_dst);
void draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect);
void get_sprite_info(const uint16_t *spriteram16_ptr);
void get_sprite_info(const u16 *spriteram16_ptr);
void print_debug_info(bitmap_rgb32 &bitmap);
inline void f3_alpha_set_level();
inline void f3_alpha_blend32_s(int alphas, uint32_t s);
inline void f3_alpha_blend32_d(int alphas, uint32_t s);
inline void f3_alpha_blend_1_1(uint32_t s);
inline void f3_alpha_blend_1_2(uint32_t s);
inline void f3_alpha_blend_1_4(uint32_t s);
inline void f3_alpha_blend_1_5(uint32_t s);
inline void f3_alpha_blend_1_6(uint32_t s);
inline void f3_alpha_blend_1_8(uint32_t s);
inline void f3_alpha_blend_1_9(uint32_t s);
inline void f3_alpha_blend_1_a(uint32_t s);
inline void f3_alpha_blend_2a_0(uint32_t s);
inline void f3_alpha_blend_2a_4(uint32_t s);
inline void f3_alpha_blend_2a_8(uint32_t s);
inline void f3_alpha_blend_2b_0(uint32_t s);
inline void f3_alpha_blend_2b_4(uint32_t s);
inline void f3_alpha_blend_2b_8(uint32_t s);
inline void f3_alpha_blend_3a_0(uint32_t s);
inline void f3_alpha_blend_3a_1(uint32_t s);
inline void f3_alpha_blend_3a_2(uint32_t s);
inline void f3_alpha_blend_3b_0(uint32_t s);
inline void f3_alpha_blend_3b_1(uint32_t s);
inline void f3_alpha_blend_3b_2(uint32_t s);
int dpix_1_noalpha(uint32_t s_pix);
int dpix_ret1(uint32_t s_pix);
int dpix_ret0(uint32_t s_pix);
int dpix_1_1(uint32_t s_pix);
int dpix_1_2(uint32_t s_pix);
int dpix_1_4(uint32_t s_pix);
int dpix_1_5(uint32_t s_pix);
int dpix_1_6(uint32_t s_pix);
int dpix_1_8(uint32_t s_pix);
int dpix_1_9(uint32_t s_pix);
int dpix_1_a(uint32_t s_pix);
int dpix_2a_0(uint32_t s_pix);
int dpix_2a_4(uint32_t s_pix);
int dpix_2a_8(uint32_t s_pix);
int dpix_3a_0(uint32_t s_pix);
int dpix_3a_1(uint32_t s_pix);
int dpix_3a_2(uint32_t s_pix);
int dpix_2b_0(uint32_t s_pix);
int dpix_2b_4(uint32_t s_pix);
int dpix_2b_8(uint32_t s_pix);
int dpix_3b_0(uint32_t s_pix);
int dpix_3b_1(uint32_t s_pix);
int dpix_3b_2(uint32_t s_pix);
int dpix_2_0(uint32_t s_pix);
int dpix_2_4(uint32_t s_pix);
int dpix_2_8(uint32_t s_pix);
int dpix_3_0(uint32_t s_pix);
int dpix_3_1(uint32_t s_pix);
int dpix_3_2(uint32_t s_pix);
inline void dpix_1_sprite(uint32_t s_pix);
inline void dpix_bg(uint32_t bgcolor);
inline void alpha_set_level();
inline void alpha_blend32_s(int alphas, u32 s);
inline void alpha_blend32_d(int alphas, u32 s);
inline void alpha_blend_1_1(u32 s);
inline void alpha_blend_1_2(u32 s);
inline void alpha_blend_1_4(u32 s);
inline void alpha_blend_1_5(u32 s);
inline void alpha_blend_1_6(u32 s);
inline void alpha_blend_1_8(u32 s);
inline void alpha_blend_1_9(u32 s);
inline void alpha_blend_1_a(u32 s);
inline void alpha_blend_2a_0(u32 s);
inline void alpha_blend_2a_4(u32 s);
inline void alpha_blend_2a_8(u32 s);
inline void alpha_blend_2b_0(u32 s);
inline void alpha_blend_2b_4(u32 s);
inline void alpha_blend_2b_8(u32 s);
inline void alpha_blend_3a_0(u32 s);
inline void alpha_blend_3a_1(u32 s);
inline void alpha_blend_3a_2(u32 s);
inline void alpha_blend_3b_0(u32 s);
inline void alpha_blend_3b_1(u32 s);
inline void alpha_blend_3b_2(u32 s);
int dpix_1_noalpha(u32 s_pix);
int dpix_ret1(u32 s_pix);
int dpix_ret0(u32 s_pix);
int dpix_1_1(u32 s_pix);
int dpix_1_2(u32 s_pix);
int dpix_1_4(u32 s_pix);
int dpix_1_5(u32 s_pix);
int dpix_1_6(u32 s_pix);
int dpix_1_8(u32 s_pix);
int dpix_1_9(u32 s_pix);
int dpix_1_a(u32 s_pix);
int dpix_2a_0(u32 s_pix);
int dpix_2a_4(u32 s_pix);
int dpix_2a_8(u32 s_pix);
int dpix_3a_0(u32 s_pix);
int dpix_3a_1(u32 s_pix);
int dpix_3a_2(u32 s_pix);
int dpix_2b_0(u32 s_pix);
int dpix_2b_4(u32 s_pix);
int dpix_2b_8(u32 s_pix);
int dpix_3b_0(u32 s_pix);
int dpix_3b_1(u32 s_pix);
int dpix_3b_2(u32 s_pix);
int dpix_2_0(u32 s_pix);
int dpix_2_4(u32 s_pix);
int dpix_2_8(u32 s_pix);
int dpix_3_0(u32 s_pix);
int dpix_3_1(u32 s_pix);
int dpix_3_2(u32 s_pix);
inline void dpix_1_sprite(u32 s_pix);
inline void dpix_bg(u32 bgcolor);
void init_alpha_blend_func();
inline void draw_scanlines(bitmap_rgb32 &bitmap, int xsize, int16_t *draw_line_num, const struct f3_playfield_line_inf **line_t, const int *sprite, uint32_t orient, int skip_layer_num);
void visible_tile_check(struct f3_playfield_line_inf *line_t, int line, uint32_t x_index_fx,uint32_t y_index, uint16_t *f3_pf_data_n);
void calculate_clip(int y, uint16_t pri, uint32_t* clip0, uint32_t* clip1, int* line_enable);
inline void draw_scanlines(bitmap_rgb32 &bitmap, int xsize, s16 *draw_line_num, const struct f3_playfield_line_inf **line_t, const int *sprite, u32 orient, int skip_layer_num);
void visible_tile_check(struct f3_playfield_line_inf *line_t, int line, u32 x_index_fx, u32 y_index, u16 *pf_data_n);
void calculate_clip(int y, u16 pri, u32* clip0, u32* clip1, int *line_enable);
void get_spritealphaclip_info();
void get_line_ram_info(tilemap_t *tmap, int sx, int sy, int pos, uint16_t *f3_pf_data_n);
void get_line_ram_info(tilemap_t *tmap, int sx, int sy, int pos, u16 *pf_data_n);
void get_vram_info(tilemap_t *vram_tilemap, tilemap_t *pixel_tilemap, int sx, int sy);
void scanline_draw(bitmap_rgb32 &bitmap, const rectangle &cliprect);
private:
optional_device<cpu_device> m_audiocpu;
optional_device<taito_en_device> m_taito_en;
optional_device<okim6295_device> m_oki;
optional_shared_ptr<u32> m_paletteram32;
optional_memory_bank m_okibank;
void bubsympb_oki_w(u8 data);
u32 f3_control_r(offs_t offset);
void f3_control_w(offs_t offset, u32 data, u32 mem_mask = ~0);
void f3_unk_w(offs_t offset, u16 data);
void sound_reset_0_w(u32 data);
void sound_reset_1_w(u32 data);
void sound_bankswitch_w(offs_t offset, u32 data, u32 mem_mask = ~0);
void palette_24bit_w(offs_t offset, u32 data, u32 mem_mask = ~0);
INTERRUPT_GEN_MEMBER(interrupt2);
void bubsympb_oki_map(address_map &map);
};
#endif // MAME_INCLUDES_TAITO_F3_H

File diff suppressed because it is too large Load Diff