deco_mlc: added sprite autoflicker flag, fixed small problem with use8bppMode [Daniel Filner]

This commit is contained in:
hap 2021-02-17 17:28:55 +01:00
parent 83bc1bcdc0
commit aba0e736f0
4 changed files with 16 additions and 8 deletions

View File

@ -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

View File

@ -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);
}

View File

@ -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();

View File

@ -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;