Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 16 additions & 12 deletions src/mame/dataeast/deco32.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -766,10 +766,10 @@ void dragngun_state::speaker_switch_w(u32 data)
// TODO: This should switch the oki3 output between the gun speaker and the standard speakers
m_gun_speaker_disabled = bool(BIT(data, 0));

logerror("Gun speaker: %s\n", m_gun_speaker_disabled ? "Disabled" : "Enabled");
logerror("%s: Gun speaker: %s\n", machine().describe_context(), m_gun_speaker_disabled ? "Disabled" : "Enabled");
}

LC7535_VOLUME_CHANGED( dragngun_state::volume_main_changed )
LC7535_VOLUME_CHANGED(dragngun_state::volume_main_changed)
{
// TODO: Support loudness
logerror("Main speaker volume: left = %d dB, right %d dB, loudness = %s\n", attenuation_left, attenuation_right, loudness ? "on" :"off");
Expand All @@ -787,7 +787,7 @@ LC7535_VOLUME_CHANGED( dragngun_state::volume_main_changed )
m_oki[2]->set_output_gain(ALL_OUTPUTS, gain_l);
}

LC7535_VOLUME_CHANGED( dragngun_state::volume_gun_changed )
LC7535_VOLUME_CHANGED(dragngun_state::volume_gun_changed)
{
logerror("Gun speaker volume: left = %d dB, right %d dB, loudness = %s\n", attenuation_left, attenuation_right, loudness ? "on" :"off");

Expand Down Expand Up @@ -815,15 +815,15 @@ void deco32_state::sound_bankswitch_w(u8 data)
void dragngun_state::lockload_okibank_lo_w(u8 data)
{
m_oki2_bank = (m_oki2_bank & 2) | ((data >> 1) & 1);
logerror("Load OKI2 Bank Low bits: %02x, Current : %02x\n",(data >> 1) & 1, m_oki2_bank);
logerror("%s: Load OKI2 Bank Low bits: %02x, Current : %02x\n", machine().describe_context(), (data >> 1) & 1, m_oki2_bank);
m_oki[0]->set_rom_bank((data >> 0) & 1);
m_oki[1]->set_rom_bank(m_oki2_bank);
}

void dragngun_state::lockload_okibank_hi_w(u8 data)
{
m_oki2_bank = (m_oki2_bank & 1) | ((data & 1) << 1); // TODO : Actually value unverified
logerror("Load OKI2 Bank Hi bits: %02x, Current : %02x\n",((data & 1) << 1), m_oki2_bank);
logerror("%s: Load OKI2 Bank Hi bits: %02x, Current : %02x\n", machine().describe_context(), ((data & 1) << 1), m_oki2_bank);
m_oki[1]->set_rom_bank(m_oki2_bank);
}

Expand Down Expand Up @@ -977,13 +977,14 @@ u32 dragngun_state::lightgun_r()
case 7: return m_io_light_y[1]->read();
}

// logerror("Illegal lightgun port %d read \n",m_lightgun_port);
//if (!machine().side_effects_disabled())
//logerror("%s: Illegal lightgun port %d read \n", machine().describe_context(), m_lightgun_port);
return 0;
}

void dragngun_state::lightgun_w(offs_t offset, u32 data)
{
// logerror("Lightgun port %d\n",m_lightgun_port);
// logerror("%s: Lightgun port %d\n", machine().describe_context(), m_lightgun_port);
m_lightgun_port = offset;
}

Expand Down Expand Up @@ -1065,7 +1066,7 @@ void tattass_state::tattass_control_w(offs_t offset, u32 data, u32 mem_mask)
{
if (m_buf_ptr)
{
logerror("Eprom reset (bit count %d): ", m_read_bit_count);
logerror("%s: Eprom reset (bit count %d): ", machine().describe_context(), m_read_bit_count);
for (int i = 0; i < m_buf_ptr; i++)
logerror("%s", BIT(m_buffer, m_buf_ptr - 1 - i) ? "1" : "0");
logerror("\n");
Expand All @@ -1081,7 +1082,7 @@ void tattass_state::tattass_control_w(offs_t offset, u32 data, u32 mem_mask)
{
if (m_buf_ptr >= 32)
{
logerror("Eprom overflow!");
logerror("%s: Eprom overflow!\n", machine().describe_context());
m_buf_ptr = 0;
}

Expand Down Expand Up @@ -1137,15 +1138,15 @@ void tattass_state::tattass_control_w(offs_t offset, u32 data, u32 mem_mask)
}
else
{
logerror("Detected unknown eprom command\n");
logerror("%s: Detected unknown eprom command\n", machine().describe_context());
}
}
}
else
{
if (!(BIT(data, 6)))
{
logerror("Cs set low\n");
logerror("%s: Cs set low\n", machine().describe_context());
m_buf_ptr = 0;
}
}
Expand Down Expand Up @@ -2207,6 +2208,7 @@ void dragngun_state::namco_sprites(machine_config &config)
NAMCO_C355SPR(config, m_sprgenzoom, 0);
m_sprgenzoom->set_tile_callback(namco_c355spr_device::c355_obj_code2tile_delegate(&dragngun_state::sprite_bank_callback, this));
m_sprgenzoom->set_palette(m_palette);
m_sprgenzoom->set_transparent_pen(15);
m_sprgenzoom->set_colors(32);
m_sprgenzoom->set_granularity(16);
m_sprgenzoom->set_read_spritetile(FUNC(dragngun_state::read_spritetile));
Expand All @@ -2215,7 +2217,9 @@ void dragngun_state::namco_sprites(machine_config &config)
m_sprgenzoom->set_read_spritelist(FUNC(dragngun_state::read_spritelist));
m_sprgenzoom->set_read_cliptable(FUNC(dragngun_state::read_cliptable));
m_sprgenzoom->set_priority_callback(FUNC(dragngun_state::sprite_priority_callback));
m_sprgenzoom->set_device_allocates_spriteram_and_bitmaps(false);
m_sprgenzoom->set_mix_callback(FUNC(dragngun_state::sprite_mix_callback));
m_sprgenzoom->set_device_allocates_spriteram(false);
m_sprgenzoom->set_alt_precision(true);
}

// DE-0420-1 + Bottom board DE-0421-0
Expand Down
48 changes: 24 additions & 24 deletions src/mame/dataeast/deco32.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,7 @@ class deco32_state : public driver_device
void sound_bankswitch_w(u8 data);

protected:
void h6280_sound_custom_latch_map(address_map &map) ATTR_COLD;
void h6280_sound_map(address_map &map) ATTR_COLD;
void z80_sound_io(address_map &map) ATTR_COLD;
void z80_sound_map(address_map &map) ATTR_COLD;
virtual void video_start() override ATTR_COLD;

// common
u16 ioprot_r(offs_t offset);
Expand All @@ -77,6 +74,15 @@ class deco32_state : public driver_device
void buffered_palette_w(offs_t offset, u32 data, u32 mem_mask = ~0);
void palette_dma_w(u32 data);

void allocate_spriteram(int chip);
void allocate_buffered_palette();
void allocate_rowscroll(int size1, int size2, int size3, int size4);

void h6280_sound_custom_latch_map(address_map &map) ATTR_COLD;
void h6280_sound_map(address_map &map) ATTR_COLD;
void z80_sound_io(address_map &map) ATTR_COLD;
void z80_sound_map(address_map &map) ATTR_COLD;

optional_device<cpu_device> m_audiocpu;
optional_device_array<decospr_device, 2> m_sprgen;
required_device_array<deco16ic_device, 2> m_deco_tilegen;
Expand All @@ -91,14 +97,8 @@ class deco32_state : public driver_device
optional_device<generic_latch_8_device> m_soundlatch;
required_device<cpu_device> m_maincpu;

void allocate_spriteram(int chip);
void allocate_buffered_palette();
void allocate_rowscroll(int size1, int size2, int size3, int size4);

virtual void video_start() override ATTR_COLD;

std::unique_ptr<u8[]> m_dirty_palette{}; // all but captaven
int m_pri = 0; // all but dragngun
u32 m_pri = 0; // all but dragngun
std::unique_ptr<u16[]> m_spriteram16[2]{}; // all but dragngun
std::unique_ptr<u16[]> m_spriteram16_buffered[2]{}; // all but dragngun
std::unique_ptr<u16[]> m_pf_rowscroll[4]{}; // common
Expand Down Expand Up @@ -167,7 +167,6 @@ class fghthist_state : public deco32_state

void fghthist_map(address_map &map) ATTR_COLD;
void fghthsta_memmap(address_map &map) ATTR_COLD;
private:
};

// nslasher
Expand All @@ -188,6 +187,7 @@ class nslasher_state : public deco32_state
virtual void video_start() override ATTR_COLD;

required_device<deco_ace_device> m_deco_ace;
std::unique_ptr<bitmap_ind16> m_tilemap_alpha_bitmap;

void tilemap_color_bank_w(u8 data);
void sprite1_color_bank_w(u8 data);
Expand All @@ -203,7 +203,6 @@ class nslasher_state : public deco32_state

void mix_nslasher(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, gfx_element *gfx0, gfx_element *gfx1, int mixAlphaTilemap);

std::unique_ptr<bitmap_ind16> m_tilemap_alpha_bitmap;
};

// tattass
Expand All @@ -222,6 +221,14 @@ class tattass_state : public nslasher_state
private:
required_device<decobsmt_device> m_decobsmt;

u8 m_tattass_eprom_bit = 0;
s32 m_last_clock = 0;
u32 m_buffer = 0U;
u32 m_buf_ptr = 0;
s32 m_pending_command = 0;
s32 m_read_bit_count = 0;
u32 m_byte_addr = 0;

void tattass_control_w(offs_t offset, u32 data, u32 mem_mask = ~0);
void tattass_sound_irq_w(int state);

Expand All @@ -232,14 +239,6 @@ class tattass_state : public nslasher_state
void tattass_map(address_map &map) ATTR_COLD;

void mix_tattass(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, gfx_element *gfx0, gfx_element *gfx1, int mixAlphaTilemap);

int m_tattass_eprom_bit = 0;
int m_last_clock = 0;
u32 m_buffer = 0U;
int m_buf_ptr = 0;
int m_pending_command = 0;
int m_read_bit_count = 0;
int m_byte_addr = 0;
};

class dragngun_state : public deco32_state
Expand Down Expand Up @@ -291,9 +290,10 @@ class dragngun_state : public deco32_state
optional_ioport_array<2> m_io_light_y;

u32 m_sprite_ctrl = 0U;
int m_lightgun_port = 0;
u32 m_lightgun_port = 0;
int m_oki2_bank = 0; // lockload
bitmap_rgb32 m_temp_render_bitmap{};

bool m_gun_speaker_disabled;

u32 lightgun_r();
void lightgun_w(offs_t offset, u32 data = 0);
Expand Down Expand Up @@ -323,6 +323,7 @@ class dragngun_state : public deco32_state
void expand_sprite_data();
void dragngun_init_common();

bool sprite_mix_callback(u16 &dest, u8 &destpri, u16 colbase, u16 src, int srcpri, int pri);
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);

DECO16IC_BANK_CB_MEMBER(bank_1_callback);
Expand All @@ -336,7 +337,6 @@ class dragngun_state : public deco32_state
void lockloadu_map(address_map &map) ATTR_COLD;
void lockload_sound_map(address_map &map) ATTR_COLD;
void lockloadu_sound_map(address_map &map) ATTR_COLD;
bool m_gun_speaker_disabled;
};

#endif // MAME_DATAEAST_DECO32_H
20 changes: 17 additions & 3 deletions src/mame/dataeast/deco32_v.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,6 @@ void nslasher_state::video_start()

void dragngun_state::video_start()
{
m_screen->register_screen_bitmap(m_temp_render_bitmap);
deco32_state::allocate_rowscroll(0x4000/4, 0x2000/4, 0x4000/4, 0x2000/4);
deco32_state::allocate_buffered_palette();
save_item(NAME(m_sprite_ctrl));
Expand Down Expand Up @@ -231,6 +230,21 @@ int dragngun_state::sprite_priority_callback(int priority)
return priority;
}

bool dragngun_state::sprite_mix_callback(u16 &dest, u8 &destpri, u16 colbase, u16 src, int srcpri, int pri)
{
// TODO: proper priority handling
if (srcpri >= destpri)
{
if ((src & 0xf) != 0xf)
{
dest = colbase + src;
destpri = srcpri;
return true;
}
}
return false;
}


u32 dragngun_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
Expand All @@ -255,8 +269,8 @@ u32 dragngun_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, c
if (cliprect.bottom() == 247)
{
rectangle clip(cliprect.left(), cliprect.right(), 8, 247);

m_sprgenzoom->draw_dg(screen, bitmap, clip, screen.priority(), m_temp_render_bitmap);
m_sprgenzoom->clear_screen_bitmap(clip);
m_sprgenzoom->draw_dg(screen, bitmap, clip);
}

return 0;
Expand Down
Loading
Loading