From aba0e736f0e90da0a8d9ffebb165b9827af9585e Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 17 Feb 2021 17:28:55 +0100 Subject: deco_mlc: added sprite autoflicker flag, fixed small problem with use8bppMode [Daniel Filner] --- src/devices/cpu/cops1/cops1d.h | 6 +++--- src/devices/cpu/cops1/cops1op.cpp | 2 +- src/mame/drivers/hh_cops1.cpp | 2 +- src/mame/video/deco_mlc.cpp | 14 +++++++++++--- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/devices/cpu/cops1/cops1d.h b/src/devices/cpu/cops1/cops1d.h index 1412e0c3c1b..4ebe6636412 100644 --- a/src/devices/cpu/cops1/cops1d.h +++ b/src/devices/cpu/cops1/cops1d.h @@ -6,8 +6,8 @@ */ -#ifndef MAME_CPU_COPS1_MM57D_H -#define MAME_CPU_COPS1_MM57D_H +#ifndef MAME_CPU_COPS1_COPS1D_H +#define MAME_CPU_COPS1_COPS1D_H #pragma once @@ -62,4 +62,4 @@ private: }; -#endif // MAME_CPU_COPS1_MM57D_H +#endif // MAME_CPU_COPS1_COPS1D_H diff --git a/src/devices/cpu/cops1/cops1op.cpp b/src/devices/cpu/cops1/cops1op.cpp index 7a8e038e578..c87821e7c11 100644 --- a/src/devices/cpu/cops1/cops1op.cpp +++ b/src/devices/cpu/cops1/cops1op.cpp @@ -163,7 +163,7 @@ void cops1_base_device::op_dspa() void cops1_base_device::op_dsps() { - // DSPA: transfer A+C to segment output latches, via PLA + // DSPS: transfer A+C to segment output latches, via PLA u8 segs = ~m_opla->read((m_a + 1) & 0xf) & 0x7f; m_write_s((m_c << 7 ^ 0x80) | segs); } diff --git a/src/mame/drivers/hh_cops1.cpp b/src/mame/drivers/hh_cops1.cpp index d9a1ba199d1..b83b1931fcc 100644 --- a/src/mame/drivers/hh_cops1.cpp +++ b/src/mame/drivers/hh_cops1.cpp @@ -334,7 +334,7 @@ void qkracerm_state::update_display() void qkracerm_state::ds8874_output_w(u16 data) { - // DS8874N outputs: digit select, input mux + // DS8874 outputs: digit select, input mux m_grid = ~data; m_inp_mux = m_grid >> 3; update_display(); diff --git a/src/mame/video/deco_mlc.cpp b/src/mame/video/deco_mlc.cpp index 9c92baf65ef..75e694fa351 100644 --- a/src/mame/video/deco_mlc.cpp +++ b/src/mame/video/deco_mlc.cpp @@ -161,7 +161,7 @@ void deco_mlc_state::draw_sprites(const rectangle &cliprect, int scanline, u32* for (int offs = 0; offs < (0x3000 / 4); offs += 8) { /* If this bit is set, combine this block with the next one */ - use8bppMode = (offs + 8 < (0x3000 / 4)) && (spriteram[offs + 8 + 1] & 0x1000); + use8bppMode = (offs + 8 < (0x3000 / 4)) && (spriteram[offs + 8 + 1] & 0x1000) && (spriteram[offs + 8 + 0] & 0x8000); if (use8bppMode) offs += 8; @@ -200,7 +200,8 @@ void deco_mlc_state::draw_sprites(const rectangle &cliprect, int scanline, u32* 0x1000 - Y flip 0x0f00 - Height in tiles (0==16) 0x00ff - Y position offset - Word 2: 0xff00 - ? (Always 0?) + Word 2: 0xfe00 - ? (Always 0?) + 0x0100 - Autoflicker 0x00c0 - If set use tile index as pointer into tile index array, else use as tile index directly 0x0080 - If set tile index array format is 12 bit tile, 4 bit colour 0x0040 - If set tile index array is 16 bit tile, 0 bit colour @@ -273,6 +274,10 @@ void deco_mlc_state::draw_sprites(const rectangle &cliprect, int scanline, u32* if (indx & 0x4000) { index_ptr8 = m_gfx2 + indx * 8; /* Byte ptr */ + + if (index_ptr8[5] & 0x01 && m_screen->frame_number() & 1) + continue; + h = (index_ptr8[1] >> 0) & 0xf; w = (index_ptr8[3] >> 0) & 0xf; @@ -282,7 +287,6 @@ void deco_mlc_state::draw_sprites(const rectangle &cliprect, int scanline, u32* sprite = (index_ptr8[7] << 8) | index_ptr8[6]; sprite |= (index_ptr8[4] & 3) << 16; - //unused byte 5 yoffs = index_ptr8[0] & 0xff; xoffs = index_ptr8[2] & 0xff; @@ -302,6 +306,10 @@ void deco_mlc_state::draw_sprites(const rectangle &cliprect, int scanline, u32* { indx &= 0x1fff; index_ptr = m_vram + indx * 4; + + if (index_ptr8[2] & 0x0100 && m_screen->frame_number() & 1) + continue; + h = (index_ptr[0] >> 8) & 0xf; w = (index_ptr[1] >> 8) & 0xf; -- cgit v1.2.3