mirror of
https://github.com/holub/mame
synced 2025-04-21 16:01:56 +03:00
psikyo.cpp : Update and Minor cleanup drawing behavior (#6456)
* psikyo.cpp : Move dynamic tilemap size behavior into TILEMAP_MAPPER_MEMBER Correct notes, VRAM/Sprite LUT data type, convert drawing behavior into bitmap_rgb32 * psikyo.cpp : Reduce unnecessary gfx layout
This commit is contained in:
parent
fa46372bbd
commit
a8d5433430
@ -224,20 +224,20 @@ uint8_t psikyo_state::s1945_mcu_control_r()
|
||||
}
|
||||
|
||||
template<int Layer>
|
||||
WRITE32_MEMBER(psikyo_state::vram_w)
|
||||
u16 psikyo_state::vram_r(offs_t offset)
|
||||
{
|
||||
return m_vram[Layer][offset];
|
||||
}
|
||||
|
||||
template<int Layer>
|
||||
void psikyo_state::vram_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_vram[Layer][offset]);
|
||||
for (int size = 0; size < 4; size++)
|
||||
const u32 tilemap_indexes = m_tilemap[Layer]->rows() * m_tilemap[Layer]->cols();
|
||||
while (offset < tilemap_indexes)
|
||||
{
|
||||
if (ACCESSING_BITS_16_31)
|
||||
{
|
||||
m_tilemap[Layer][size]->mark_tile_dirty(offset * 2);
|
||||
}
|
||||
|
||||
if (ACCESSING_BITS_0_15)
|
||||
{
|
||||
m_tilemap[Layer][size]->mark_tile_dirty(offset * 2 + 1);
|
||||
}
|
||||
m_tilemap[Layer]->mark_tile_dirty(offset);
|
||||
offset += 0x1000;
|
||||
}
|
||||
}
|
||||
|
||||
@ -255,8 +255,8 @@ void psikyo_state::psikyo_map(address_map &map)
|
||||
map(0x000000, 0x0fffff).rom(); // ROM (not all used)
|
||||
map(0x400000, 0x401fff).ram().share("spriteram"); // Sprites, buffered by two frames (list buffered + fb buffered)
|
||||
map(0x600000, 0x601fff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette"); // Palette
|
||||
map(0x800000, 0x801fff).ram().w(FUNC(psikyo_state::vram_w<0>)).share("vram_0"); // Layer 0
|
||||
map(0x802000, 0x803fff).ram().w(FUNC(psikyo_state::vram_w<1>)).share("vram_1"); // Layer 1
|
||||
map(0x800000, 0x801fff).rw(FUNC(psikyo_state::vram_r<0>), FUNC(psikyo_state::vram_w<0>)).share("vram_0"); // Layer 0
|
||||
map(0x802000, 0x803fff).rw(FUNC(psikyo_state::vram_r<1>), FUNC(psikyo_state::vram_w<1>)).share("vram_1"); // Layer 1
|
||||
map(0x804000, 0x807fff).ram().share("vregs"); // RAM + Vregs
|
||||
// map(0xc00000, 0xc0000b).r(FUNC(psikyo_state::input_r)); // Depends on board
|
||||
// map(0xc00004, 0xc0000b).w(FUNC(psikyo_state::s1945_mcu_w)); // MCU on sh404
|
||||
@ -290,8 +290,8 @@ void psikyo_state::psikyo_bootleg_map(address_map &map)
|
||||
|
||||
map(0x400000, 0x401fff).ram().share("spriteram"); // Sprites, buffered by two frames (list buffered + fb buffered)
|
||||
map(0x600000, 0x601fff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette"); // Palette
|
||||
map(0x800000, 0x801fff).ram().w(FUNC(psikyo_state::vram_w<0>)).share("vram_0"); // Layer 0
|
||||
map(0x802000, 0x803fff).ram().w(FUNC(psikyo_state::vram_w<1>)).share("vram_1"); // Layer 1
|
||||
map(0x800000, 0x801fff).rw(FUNC(psikyo_state::vram_r<0>), FUNC(psikyo_state::vram_w<0>)).share("vram_0"); // Layer 0
|
||||
map(0x802000, 0x803fff).rw(FUNC(psikyo_state::vram_r<1>), FUNC(psikyo_state::vram_w<1>)).share("vram_1"); // Layer 1
|
||||
map(0x804000, 0x807fff).ram().share("vregs"); // RAM + Vregs
|
||||
map(0xc00000, 0xc0000b).r(FUNC(psikyo_state::gunbird_input_r)); // input ports
|
||||
|
||||
@ -990,20 +990,9 @@ INPUT_PORTS_END
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
static const gfx_layout layout_16x16x4 =
|
||||
{
|
||||
16,16,
|
||||
RGN_FRAC(1,1),
|
||||
4,
|
||||
{STEP4(0,1)},
|
||||
{STEP16(0,4)},
|
||||
{STEP16(0,4*16)},
|
||||
16*16*4
|
||||
};
|
||||
|
||||
static GFXDECODE_START( gfx_psikyo )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x4, 0x000, 0x20 ) // [0] Sprites
|
||||
GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x4, 0x800, 0x48 ) // [1] Layer 0 + 1
|
||||
GFXDECODE_ENTRY( "gfx1", 0, gfx_16x16x4_packed_msb, 0x000, 0x20 ) // [0] Sprites
|
||||
GFXDECODE_ENTRY( "gfx2", 0, gfx_16x16x4_packed_msb, 0x800, 0x48 ) // [1] Layer 0 + 1
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
@ -1053,7 +1042,6 @@ void psikyo_state::sngkace(machine_config &config)
|
||||
m_screen->set_visarea(0, 320-1, 0, 256-32-1);
|
||||
m_screen->set_screen_update(FUNC(psikyo_state::screen_update));
|
||||
m_screen->screen_vblank().set(FUNC(psikyo_state::screen_vblank));
|
||||
m_screen->set_palette(m_palette);
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_psikyo);
|
||||
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x1000);
|
||||
@ -1100,7 +1088,6 @@ void psikyo_state::gunbird(machine_config &config)
|
||||
m_screen->set_visarea(0, 320-1, 0, 256-32-1);
|
||||
m_screen->set_screen_update(FUNC(psikyo_state::screen_update));
|
||||
m_screen->screen_vblank().set(FUNC(psikyo_state::screen_vblank));
|
||||
m_screen->set_palette(m_palette);
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_psikyo);
|
||||
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x1000);
|
||||
@ -1142,7 +1129,6 @@ void psikyo_state::s1945bl(machine_config &config) /* Bootleg hardware based on
|
||||
m_screen->set_visarea(0, 320-1, 0, 256-32-1);
|
||||
m_screen->set_screen_update(FUNC(psikyo_state::screen_update_bootleg));
|
||||
m_screen->screen_vblank().set(FUNC(psikyo_state::screen_vblank_bootleg));
|
||||
m_screen->set_palette(m_palette);
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_psikyo);
|
||||
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x1000);
|
||||
@ -1186,7 +1172,6 @@ void psikyo_state::s1945(machine_config &config)
|
||||
m_screen->set_visarea(0, 320-1, 0, 256-32-1);
|
||||
m_screen->set_screen_update(FUNC(psikyo_state::screen_update));
|
||||
m_screen->screen_vblank().set(FUNC(psikyo_state::screen_vblank));
|
||||
m_screen->set_palette(m_palette);
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_psikyo);
|
||||
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x1000);
|
||||
@ -1249,7 +1234,7 @@ ROM_START( samuraia )
|
||||
ROM_REGION( 0x100000, "ymsnd", 0 ) /* Samples */
|
||||
ROM_LOAD( "u68.bin", 0x000000, 0x100000, CRC(9a7f6c34) SHA1(c549b209bce1d2c6eeb512db198ad20c3f5fb0ea) )
|
||||
|
||||
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_REGION16_LE( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_LOAD( "u11.bin", 0x000000, 0x040000, CRC(11a04d91) SHA1(5d146a9a39a70f2ee212ceab9a5469598432449e) ) // x1xxxxxxxxxxxxxxxx = 0xFF
|
||||
|
||||
ROM_END
|
||||
@ -1272,7 +1257,7 @@ ROM_START( sngkace )
|
||||
ROM_REGION( 0x100000, "ymsnd", 0 ) /* Samples */
|
||||
ROM_LOAD( "u68.bin", 0x000000, 0x100000, CRC(9a7f6c34) SHA1(c549b209bce1d2c6eeb512db198ad20c3f5fb0ea) )
|
||||
|
||||
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_REGION16_LE( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_LOAD( "u11.bin", 0x000000, 0x040000, CRC(11a04d91) SHA1(5d146a9a39a70f2ee212ceab9a5469598432449e) ) // x1xxxxxxxxxxxxxxxx = 0xFF
|
||||
ROM_END
|
||||
|
||||
@ -1295,7 +1280,7 @@ ROM_START( sngkacea ) // the roms have a very visible "." symbol after the numbe
|
||||
ROM_REGION( 0x100000, "ymsnd", 0 ) /* Samples */
|
||||
ROM_LOAD( "u68.bin", 0x000000, 0x100000, CRC(9a7f6c34) SHA1(c549b209bce1d2c6eeb512db198ad20c3f5fb0ea) )
|
||||
|
||||
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_REGION16_LE( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_LOAD( "u11.bin", 0x000000, 0x040000, CRC(11a04d91) SHA1(5d146a9a39a70f2ee212ceab9a5469598432449e) ) // x1xxxxxxxxxxxxxxxx = 0xFF
|
||||
ROM_END
|
||||
|
||||
@ -1341,7 +1326,7 @@ ROM_START( gunbird )
|
||||
ROM_REGION( 0x080000, "ymsnd.deltat", 0 ) /* DELTA-T Samples */
|
||||
ROM_LOAD( "u64.bin", 0x000000, 0x080000, CRC(e187ed4f) SHA1(05060723d89b1d05714447a14b5f5888ff3c2306) )
|
||||
|
||||
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_REGION16_LE( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_LOAD( "u3.bin", 0x000000, 0x040000, CRC(0905aeb2) SHA1(8cca09f7dfe3f804e77515f7b1b1bdbeb7bb3d80) )
|
||||
|
||||
ROM_REGION( 0x0002, "pals", 0 )
|
||||
@ -1372,7 +1357,7 @@ ROM_START( gunbirdk )
|
||||
ROM_REGION( 0x080000, "ymsnd.deltat", 0 ) /* DELTA-T Samples */
|
||||
ROM_LOAD( "u64.bin", 0x000000, 0x080000, CRC(e187ed4f) SHA1(05060723d89b1d05714447a14b5f5888ff3c2306) )
|
||||
|
||||
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_REGION16_LE( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_LOAD( "u3.bin", 0x000000, 0x040000, CRC(0905aeb2) SHA1(8cca09f7dfe3f804e77515f7b1b1bdbeb7bb3d80) )
|
||||
ROM_END
|
||||
|
||||
@ -1399,7 +1384,7 @@ ROM_START( gunbirdj )
|
||||
ROM_REGION( 0x080000, "ymsnd.deltat", 0 ) /* DELTA-T Samples */
|
||||
ROM_LOAD( "u64.bin", 0x000000, 0x080000, CRC(e187ed4f) SHA1(05060723d89b1d05714447a14b5f5888ff3c2306) )
|
||||
|
||||
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_REGION16_LE( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_LOAD( "u3.bin", 0x000000, 0x040000, CRC(0905aeb2) SHA1(8cca09f7dfe3f804e77515f7b1b1bdbeb7bb3d80) )
|
||||
ROM_END
|
||||
|
||||
@ -1427,7 +1412,7 @@ ROM_START( btlkroad )
|
||||
ROM_REGION( 0x080000, "ymsnd.deltat", 0 ) /* DELTA-T Samples */
|
||||
ROM_LOAD( "u64.bin", 0x000000, 0x080000, CRC(0f33049f) SHA1(ca4fd5f3906685ace1af40b75f5678231d7324e8) )
|
||||
|
||||
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_REGION16_LE( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_LOAD( "u3.bin", 0x000000, 0x040000, CRC(30d541ed) SHA1(6f7fb5f5ecbce7c086185392de164ebb6887e780) )
|
||||
|
||||
ROM_REGION( 0x0400, "plds", 0 )
|
||||
@ -1459,7 +1444,7 @@ ROM_START( btlkroadk )
|
||||
ROM_REGION( 0x080000, "ymsnd.deltat", 0 ) /* DELTA-T Samples */
|
||||
ROM_LOAD( "u64.bin", 0x000000, 0x080000, CRC(0f33049f) SHA1(ca4fd5f3906685ace1af40b75f5678231d7324e8) )
|
||||
|
||||
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_REGION16_LE( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_LOAD( "u3.bin", 0x000000, 0x040000, CRC(30d541ed) SHA1(6f7fb5f5ecbce7c086185392de164ebb6887e780) )
|
||||
|
||||
ROM_REGION( 0x0400, "plds", 0 )
|
||||
@ -1506,7 +1491,7 @@ ROM_START( s1945n )
|
||||
ROM_REGION( 0x080000, "ymsnd.deltat", 0 ) /* DELTA-T Samples */
|
||||
ROM_LOAD( "u64.bin", 0x000000, 0x080000, CRC(a44a4a9b) SHA1(5378256752d709daed0b5f4199deebbcffe84e10) )
|
||||
|
||||
ROM_REGION( 0x040000, "spritelut", 0 ) /* */
|
||||
ROM_REGION16_LE( 0x040000, "spritelut", 0 ) /* */
|
||||
ROM_LOAD( "u1.bin", 0x000000, 0x040000, CRC(dee22654) SHA1(5df05b0029ff7b1f7f04b41da7823d2aa8034bd2) )
|
||||
ROM_END
|
||||
|
||||
@ -1533,7 +1518,7 @@ ROM_START( s1945nj )
|
||||
ROM_REGION( 0x080000, "ymsnd.deltat", 0 ) /* DELTA-T Samples */
|
||||
ROM_LOAD( "u64.bin", 0x000000, 0x080000, CRC(a44a4a9b) SHA1(5378256752d709daed0b5f4199deebbcffe84e10) )
|
||||
|
||||
ROM_REGION( 0x040000, "spritelut", 0 ) /* */
|
||||
ROM_REGION16_LE( 0x040000, "spritelut", 0 ) /* */
|
||||
ROM_LOAD( "u1.bin", 0x000000, 0x040000, CRC(dee22654) SHA1(5df05b0029ff7b1f7f04b41da7823d2aa8034bd2) )
|
||||
ROM_END
|
||||
|
||||
@ -1555,7 +1540,7 @@ ROM_START( s1945bl ) /* closely based on s1945nj set, unsurprising because it's
|
||||
ROM_REGION( 0x100000, "oki", 0 ) /* OKI Samples */
|
||||
ROM_LOAD( "rv27c040.m6", 0x000000, 0x080000, CRC(c22e5b65) SHA1(d807bd7c136d6b51f54258b44ebf3eecbd5b35fa) )
|
||||
|
||||
ROM_REGION( 0x040000, "spritelut", 0 ) /* */
|
||||
ROM_REGION16_LE( 0x040000, "spritelut", 0 ) /* */
|
||||
// in 27c010-a 0x460E:01 but should 0x00. Might be bit rot or error when bootleggers copied U1 as all other graphics data matches.
|
||||
ROM_LOAD16_BYTE( "27c010-b", 0x000000, 0x020000, CRC(e38d5ab7) SHA1(73a708ebc305cb6297efd3296da23c87898e805e) ) // u1.bin [even] IDENTICAL
|
||||
ROM_LOAD16_BYTE( "27c010-a", 0x000001, 0x020000, CRC(cb8c65ec) SHA1(a55c5c5067b50a1243e7ba60fa1f9569bfed5de8) ) // u1.bin [odd] 99.999237%
|
||||
@ -1662,7 +1647,7 @@ ROM_START( s1945 )
|
||||
ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */
|
||||
ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) ) // 8 bit signed pcm (16KHz)
|
||||
|
||||
ROM_REGION( 0x040000, "spritelut", 0 ) /* */
|
||||
ROM_REGION16_LE( 0x040000, "spritelut", 0 ) /* */
|
||||
ROM_LOAD( "u1.bin", 0x000000, 0x040000, CRC(dee22654) SHA1(5df05b0029ff7b1f7f04b41da7823d2aa8034bd2) )
|
||||
|
||||
ROM_END
|
||||
@ -1690,7 +1675,7 @@ ROM_START( s1945a )
|
||||
ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */
|
||||
ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) ) // 8 bit signed pcm (16KHz)
|
||||
|
||||
ROM_REGION( 0x040000, "spritelut", 0 ) /* */
|
||||
ROM_REGION16_LE( 0x040000, "spritelut", 0 ) /* */
|
||||
ROM_LOAD( "u1.bin", 0x000000, 0x040000, CRC(dee22654) SHA1(5df05b0029ff7b1f7f04b41da7823d2aa8034bd2) )
|
||||
|
||||
ROM_END
|
||||
@ -1718,7 +1703,7 @@ ROM_START( s1945j )
|
||||
ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */
|
||||
ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) ) // 8 bit signed pcm (16KHz)
|
||||
|
||||
ROM_REGION( 0x040000, "spritelut", 0 ) /* */
|
||||
ROM_REGION16_LE( 0x040000, "spritelut", 0 ) /* */
|
||||
ROM_LOAD( "u1.bin", 0x000000, 0x040000, CRC(dee22654) SHA1(5df05b0029ff7b1f7f04b41da7823d2aa8034bd2) )
|
||||
|
||||
ROM_END
|
||||
@ -1746,7 +1731,7 @@ ROM_START( s1945k ) /* Same MCU as the current parent set, region dip has no eff
|
||||
ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */
|
||||
ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) ) // 8 bit signed pcm (16KHz)
|
||||
|
||||
ROM_REGION( 0x040000, "spritelut", 0 ) /* */
|
||||
ROM_REGION16_LE( 0x040000, "spritelut", 0 ) /* */
|
||||
ROM_LOAD( "u1.bin", 0x000000, 0x040000, CRC(dee22654) SHA1(5df05b0029ff7b1f7f04b41da7823d2aa8034bd2) )
|
||||
|
||||
ROM_END
|
||||
@ -1796,7 +1781,7 @@ ROM_START( tengai )
|
||||
ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a63633c5) SHA1(89e75a40518926ebcc7d88dea86c01ba0bb496e5) ) // 8 bit signed pcm (16KHz)
|
||||
ROM_LOAD( "u62.bin", 0x200000, 0x200000, CRC(3ad0c357) SHA1(35f78cfa2eafa93ab96b24e336f569ee84af06b6) )
|
||||
|
||||
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_REGION16_LE( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_LOAD( "u1.bin", 0x000000, 0x040000, CRC(681d7d55) SHA1(b0b28471440d747adbc4d22d1918f89f6ede1615) )
|
||||
|
||||
ROM_END
|
||||
@ -1824,7 +1809,7 @@ ROM_START( tengaij )
|
||||
ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a63633c5) SHA1(89e75a40518926ebcc7d88dea86c01ba0bb496e5) ) // 8 bit signed pcm (16KHz)
|
||||
ROM_LOAD( "u62.bin", 0x200000, 0x200000, CRC(3ad0c357) SHA1(35f78cfa2eafa93ab96b24e336f569ee84af06b6) )
|
||||
|
||||
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_REGION16_LE( 0x040000, "spritelut", 0 ) /* Sprites LUT */
|
||||
ROM_LOAD( "u1.bin", 0x000000, 0x040000, CRC(681d7d55) SHA1(b0b28471440d747adbc4d22d1918f89f6ede1615) )
|
||||
|
||||
ROM_END
|
||||
|
@ -24,7 +24,7 @@ class psikyo_state : public driver_device
|
||||
public:
|
||||
psikyo_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_vram(*this, "vram_%u", 0)
|
||||
, m_vram(*this, "vram_%u", 0U, (u8)32)
|
||||
, m_vregs(*this, "vregs")
|
||||
, m_bootleg_spritebuffer(*this, "boot_spritebuf")
|
||||
, m_spritelut(*this, "spritelut")
|
||||
@ -43,6 +43,8 @@ public:
|
||||
, m_spriteram(*this, "spriteram")
|
||||
{
|
||||
std::fill(std::begin(m_old_linescroll), std::end(m_old_linescroll), ~u32(0));
|
||||
std::fill(std::begin(m_old_tmapsize), std::end(m_old_tmapsize), ~u32(0));
|
||||
std::fill(std::begin(m_tmapsize), std::end(m_tmapsize), ~u32(0));
|
||||
}
|
||||
|
||||
void sngkace(machine_config &config);
|
||||
@ -64,11 +66,11 @@ public:
|
||||
|
||||
private:
|
||||
/* memory pointers */
|
||||
required_shared_ptr_array<u32, 2> m_vram;
|
||||
required_shared_ptr_array<u16, 2> m_vram;
|
||||
required_shared_ptr<u32> m_vregs;
|
||||
optional_shared_ptr<u32> m_bootleg_spritebuffer;
|
||||
|
||||
required_memory_region m_spritelut;
|
||||
required_region_ptr<u16> m_spritelut;
|
||||
optional_memory_bank m_audiobank;
|
||||
optional_memory_bank m_okibank;
|
||||
optional_ioport m_in_dsw;
|
||||
@ -86,10 +88,12 @@ private:
|
||||
u32 primask;
|
||||
};
|
||||
|
||||
tilemap_t *m_tilemap[2][4];
|
||||
tilemap_t *m_tilemap[2];
|
||||
u8 m_tilemap_bank[2];
|
||||
bool m_ka302c_banking;
|
||||
u32 m_old_linescroll[2];
|
||||
u32 m_old_tmapsize[2];
|
||||
u32 m_tmapsize[2];
|
||||
std::unique_ptr<sprite_t[]> m_spritelist;
|
||||
struct sprite_t *m_sprite_ptr_pre;
|
||||
u16 m_sprite_ctrl;
|
||||
@ -120,22 +124,23 @@ private:
|
||||
DECLARE_READ32_MEMBER(s1945_input_r);
|
||||
DECLARE_WRITE8_MEMBER(s1945bl_okibank_w);
|
||||
template<int Shift> DECLARE_WRITE8_MEMBER(sound_bankswitch_w);
|
||||
template<int Layer> DECLARE_WRITE32_MEMBER(vram_w);
|
||||
template<int Layer> u16 vram_r(offs_t offset);
|
||||
template<int Layer> void vram_w(offs_t offset, u16 data, u16 mem_mask);
|
||||
|
||||
template<int Layer> TILE_GET_INFO_MEMBER(get_tile_info);
|
||||
template<int Layer> TILEMAP_MAPPER_MEMBER(tile_scan);
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
DECLARE_VIDEO_START(sngkace);
|
||||
DECLARE_VIDEO_START(psikyo);
|
||||
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
u32 screen_update_bootleg(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
u32 screen_update_bootleg(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
DECLARE_WRITE_LINE_MEMBER(screen_vblank);
|
||||
DECLARE_WRITE_LINE_MEMBER(screen_vblank_bootleg);
|
||||
void switch_bgbanks(u8 tmap, u8 bank);
|
||||
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
void get_sprites();
|
||||
void get_sprites_bootleg();
|
||||
u16 tilemap_width(u8 size);
|
||||
void s1945_mcu_init();
|
||||
|
||||
/* devices */
|
||||
|
@ -76,24 +76,34 @@ Offset:
|
||||
template<int Layer>
|
||||
TILE_GET_INFO_MEMBER(psikyo_state::get_tile_info)
|
||||
{
|
||||
u16 code = ((u16 *)m_vram[Layer].target())[BYTE_XOR_BE(tile_index)];
|
||||
u16 code = m_vram[Layer][tile_index & 0xfff];
|
||||
tileinfo.set(1,
|
||||
(code & 0x1fff) + 0x2000 * m_tilemap_bank[Layer],
|
||||
((code >> 13) & 7) + (Layer * 0x40),
|
||||
0);
|
||||
}
|
||||
|
||||
template<int Layer>
|
||||
TILEMAP_MAPPER_MEMBER(psikyo_state::tile_scan)
|
||||
{
|
||||
switch (m_tmapsize[Layer])
|
||||
{
|
||||
case 0: return (col & 0x3f) | ((row & 0x3f) << 6) | ((col & 0xc0) << 6) | ((row & 0x40) << 8);
|
||||
case 1: return (col & 0x7f) | ((row & 0x1f) << 7) | ((col & 0x80) << 5) | ((row & 0x60) << 8);
|
||||
case 2: return (col & 0xff) | ((row & 0x0f) << 8) | ((row & 0x70) << 8);
|
||||
default: return (col & 0x1f) | ((row & 0x7f) << 5) | ((col & 0xe0) << 7);
|
||||
}
|
||||
}
|
||||
|
||||
void psikyo_state::switch_bgbanks(u8 tmap, u8 bank)
|
||||
{
|
||||
if (bank != m_tilemap_bank[tmap])
|
||||
{
|
||||
m_tilemap_bank[tmap] = bank;
|
||||
for (int size = 0; size < 4; size++)
|
||||
m_tilemap[tmap][size]->mark_all_dirty();
|
||||
m_tilemap[tmap]->mark_all_dirty();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
VIDEO_START_MEMBER(psikyo_state,psikyo)
|
||||
{
|
||||
m_spritelist = std::make_unique<sprite_t[]>(0x800/2*8*8);
|
||||
@ -101,18 +111,18 @@ VIDEO_START_MEMBER(psikyo_state,psikyo)
|
||||
/* The Hardware is Capable of Changing the Dimensions of the Tilemaps, its safer to create
|
||||
the various sized tilemaps now as opposed to later */
|
||||
|
||||
for (int size = 0; size < 4; size++)
|
||||
{
|
||||
m_tilemap[0][size] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(psikyo_state::get_tile_info<0>)), TILEMAP_SCAN_ROWS, 16, 16, 0x20 << size, 0x80 >> size);
|
||||
m_tilemap[1][size] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(psikyo_state::get_tile_info<1>)), TILEMAP_SCAN_ROWS, 16, 16, 0x20 << size, 0x80 >> size);
|
||||
m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(psikyo_state::get_tile_info<0>)), tilemap_mapper_delegate(*this, FUNC(psikyo_state::tile_scan<0>)), 16, 16, 256, 128);
|
||||
m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(psikyo_state::get_tile_info<1>)), tilemap_mapper_delegate(*this, FUNC(psikyo_state::tile_scan<1>)), 16, 16, 256, 128);
|
||||
|
||||
for (int layer = 0; layer < 2; layer++)
|
||||
{
|
||||
m_tilemap[layer][size]->set_scroll_rows(1);
|
||||
m_tilemap[layer][size]->set_scroll_cols(1);
|
||||
}
|
||||
for (int layer = 0; layer < 2; layer++)
|
||||
{
|
||||
m_tilemap[layer]->set_scroll_rows(1);
|
||||
m_tilemap[layer]->set_scroll_cols(1);
|
||||
}
|
||||
|
||||
save_item(NAME(m_old_linescroll));
|
||||
save_item(NAME(m_old_tmapsize));
|
||||
save_item(NAME(m_tmapsize));
|
||||
save_item(NAME(m_sprite_ctrl));
|
||||
}
|
||||
|
||||
@ -176,8 +186,6 @@ void psikyo_state::get_sprites()
|
||||
m_sprite_ctrl = m_spriteram->buffer()[0x1ffe / 4] & 0xffff;
|
||||
static const int pri[] = { 0, 0xfc, 0xff, 0xff };
|
||||
const u16 *spritelist = (u16 *)(m_spriteram->buffer() + 0x1800 / 4);
|
||||
const u8 *TILES = m_spritelut->base(); // Sprites LUT
|
||||
u32 const TILES_LEN = m_spritelut->bytes();
|
||||
|
||||
u16 const width = m_screen->width();
|
||||
u16 const height = m_screen->height();
|
||||
@ -248,10 +256,8 @@ void psikyo_state::get_sprites()
|
||||
{
|
||||
for (int dx = xstart; dx != xend; dx += xinc)
|
||||
{
|
||||
u32 const addr = (code * 2) & (TILES_LEN - 1);
|
||||
|
||||
m_sprite_ptr_pre->gfx = 0;
|
||||
m_sprite_ptr_pre->code = TILES[addr+1] * 256 + TILES[addr];
|
||||
m_sprite_ptr_pre->code = m_spritelut[code & m_spritelut.mask()];
|
||||
m_sprite_ptr_pre->color = attr >> 8;
|
||||
m_sprite_ptr_pre->flipx = flipx;
|
||||
m_sprite_ptr_pre->flipy = flipy;
|
||||
@ -287,8 +293,6 @@ void psikyo_state::get_sprites_bootleg()
|
||||
m_sprite_ctrl = m_spriteram->buffer()[0x1ffe / 4] & 0xffff;
|
||||
static const int pri[] = { 0, 0xfc, 0xff, 0xff };
|
||||
const u16 *spritelist = (u16 *)(m_spriteram->buffer() + 0x1800 / 4);
|
||||
const u8 *TILES = m_spritelut->base(); // Sprites LUT
|
||||
u32 const TILES_LEN = m_spritelut->bytes();
|
||||
|
||||
u16 const width = m_screen->width();
|
||||
u16 const height = m_screen->height();
|
||||
@ -341,7 +345,6 @@ void psikyo_state::get_sprites_bootleg()
|
||||
zoomx = 32 - zoomx;
|
||||
zoomy = 32 - zoomy;
|
||||
|
||||
|
||||
if (flip_screen())
|
||||
{
|
||||
x = width - x - (nx * zoomx) / 2;
|
||||
@ -360,10 +363,8 @@ void psikyo_state::get_sprites_bootleg()
|
||||
{
|
||||
for (int dx = xstart; dx != xend; dx += xinc)
|
||||
{
|
||||
u32 const addr = (code * 2) & (TILES_LEN-1);
|
||||
|
||||
m_sprite_ptr_pre->gfx = 0;
|
||||
m_sprite_ptr_pre->code = TILES[addr+1] * 256 + TILES[addr];
|
||||
m_sprite_ptr_pre->code = m_spritelut[code & m_spritelut.mask()];
|
||||
m_sprite_ptr_pre->color = attr >> 8;
|
||||
m_sprite_ptr_pre->flipx = flipx;
|
||||
m_sprite_ptr_pre->flipy = flipy;
|
||||
@ -388,7 +389,7 @@ void psikyo_state::get_sprites_bootleg()
|
||||
}
|
||||
}
|
||||
|
||||
void psikyo_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
void psikyo_state::draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
struct sprite_t *sprite_ptr = m_sprite_ptr_pre;
|
||||
u32 transmask = 0;
|
||||
@ -427,23 +428,14 @@ void psikyo_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, con
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
u16 psikyo_state::tilemap_width(u8 size)
|
||||
u32 psikyo_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
return (0x80 * 16) >> size;
|
||||
}
|
||||
|
||||
u32 psikyo_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
u16 bgpen = 0;
|
||||
u32 bgpen = 0;
|
||||
int i, layers_ctrl = -1;
|
||||
|
||||
u32 tmsize[2];
|
||||
|
||||
u32 scrollx[2]{ m_vregs[0x406 / 4], m_vregs[0x40e / 4] }, scrolly[2]{ m_vregs[0x402 / 4], m_vregs[0x40a / 4] };
|
||||
u32 layer_ctrl[2]{ m_vregs[0x412 / 4], m_vregs[0x416 / 4] };
|
||||
|
||||
tilemap_t *tmptilemap[2];
|
||||
|
||||
flip_screen_set(~m_in_dsw->read() & 0x00010000); // hardwired to a DSW bit
|
||||
|
||||
/* Layers enable (not quite right) */
|
||||
@ -456,7 +448,7 @@ u32 psikyo_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, con
|
||||
6- 7: tilemap size
|
||||
8 : per-line rowscroll
|
||||
9 : per-tile rowscroll
|
||||
10 : tilebank (btlkroad/gunbird/s1945jn only)
|
||||
10 : tilebank (btlkroad/gunbird/s1945n only)
|
||||
11-15: ? */
|
||||
|
||||
/*
|
||||
@ -483,37 +475,31 @@ u32 psikyo_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, con
|
||||
switch_bgbanks(layer, (layer_ctrl[layer] & 0x400) >> 10);
|
||||
}
|
||||
|
||||
switch ((layer_ctrl[layer] & 0x00c0) >> 6)
|
||||
u32 new_size = ((layer_ctrl[layer] & 0x00c0) >> 6);
|
||||
if (m_old_tmapsize[layer] != new_size)
|
||||
{
|
||||
case 0: tmsize[layer] = 1; break;
|
||||
case 1: tmsize[layer] = 2; break;
|
||||
case 2: tmsize[layer] = 3; break;
|
||||
default: tmsize[layer] = 0; break;
|
||||
m_tmapsize[layer] = new_size;
|
||||
m_tilemap[layer]->mark_mapping_dirty();
|
||||
}
|
||||
|
||||
tmptilemap[layer] = m_tilemap[layer][tmsize[layer]];
|
||||
|
||||
tmptilemap[layer]->enable(~layer_ctrl[layer] & 1);
|
||||
m_tilemap[layer]->enable(~layer_ctrl[layer] & 1);
|
||||
|
||||
/* Layers scrolling */
|
||||
tmptilemap[layer]->set_scrolly(0, scrolly[layer]);
|
||||
m_tilemap[layer]->set_scrolly(0, scrolly[layer]);
|
||||
if (layer_ctrl[layer] & 0x0300) /* per-line rowscroll */
|
||||
{
|
||||
int tile_rowscroll = (layer_ctrl[layer] & 0x0200) >> 7; /* per-tile rowscroll */
|
||||
assert(tile_rowscroll == 0 || tile_rowscroll == 4);
|
||||
if (m_old_linescroll[layer] != (layer_ctrl[layer] & 0x0300))
|
||||
{
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
m_tilemap[layer][i]->set_scroll_rows(tilemap_width(i));
|
||||
}
|
||||
m_tilemap[layer]->set_scroll_rows(0x800);
|
||||
m_old_linescroll[layer] = (layer_ctrl[layer] & 0x0300);
|
||||
}
|
||||
for (i = 0; i < 256; i++) /* 256 screen lines */
|
||||
{
|
||||
int x0 = ((u16 *)m_vregs.target())[BYTE_XOR_BE((layer * 0x200)/2 + (i >> tile_rowscroll))];
|
||||
tmptilemap[layer]->set_scrollx(
|
||||
(i + scrolly[layer]) % (tilemap_width(tmsize[layer])),
|
||||
m_tilemap[layer]->set_scrollx(
|
||||
(i + scrolly[layer]) & 0x7ff,
|
||||
scrollx[layer] + x0 );
|
||||
}
|
||||
}
|
||||
@ -521,22 +507,19 @@ u32 psikyo_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, con
|
||||
{
|
||||
if (m_old_linescroll[layer] != (layer_ctrl[layer] & 0x0300))
|
||||
{
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
m_tilemap[layer][i]->set_scroll_rows(1);
|
||||
}
|
||||
m_tilemap[layer]->set_scroll_rows(1);
|
||||
m_old_linescroll[layer] = (layer_ctrl[layer] & 0x0300);
|
||||
}
|
||||
tmptilemap[layer]->set_scrollx(0, scrollx[layer]);
|
||||
m_tilemap[layer]->set_scrollx(0, scrollx[layer]);
|
||||
}
|
||||
tmptilemap[layer]->set_transparent_pen((layer_ctrl[layer] & 8 ? 0 : 15));
|
||||
m_tilemap[layer]->set_transparent_pen((layer_ctrl[layer] & 8 ? 0 : 15));
|
||||
}
|
||||
|
||||
// TODO : is this correct?
|
||||
if (layers_ctrl & 1)
|
||||
bgpen = ((layer_ctrl[0] & 8) ? 0x800 : 0x80f);
|
||||
bgpen = m_palette->pen(((layer_ctrl[0] & 8) ? 0x800 : 0x80f));
|
||||
else if (layers_ctrl & 2)
|
||||
bgpen = ((layer_ctrl[1] & 8) ? 0xc00 : 0xc0f);
|
||||
bgpen = m_palette->pen(((layer_ctrl[1] & 8) ? 0xc00 : 0xc0f));
|
||||
else
|
||||
bgpen = m_palette->black_pen(); // TODO
|
||||
|
||||
@ -545,10 +528,10 @@ u32 psikyo_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, con
|
||||
screen.priority().fill(0, cliprect);
|
||||
|
||||
if (layers_ctrl & 1)
|
||||
tmptilemap[0]->draw(screen, bitmap, cliprect, layer_ctrl[0] & 2 ? TILEMAP_DRAW_OPAQUE : 0, 1);
|
||||
m_tilemap[0]->draw(screen, bitmap, cliprect, layer_ctrl[0] & 2 ? TILEMAP_DRAW_OPAQUE : 0, 1);
|
||||
|
||||
if (layers_ctrl & 2)
|
||||
tmptilemap[1]->draw(screen, bitmap, cliprect, layer_ctrl[1] & 2 ? TILEMAP_DRAW_OPAQUE : 0, 2);
|
||||
m_tilemap[1]->draw(screen, bitmap, cliprect, layer_ctrl[1] & 2 ? TILEMAP_DRAW_OPAQUE : 0, 2);
|
||||
|
||||
if (layers_ctrl & 4)
|
||||
draw_sprites(screen, bitmap, cliprect);
|
||||
@ -564,18 +547,14 @@ u32 psikyo_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, con
|
||||
|
||||
*/
|
||||
|
||||
u32 psikyo_state::screen_update_bootleg(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
u32 psikyo_state::screen_update_bootleg(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
u16 bgpen = 0;
|
||||
u32 bgpen = 0;
|
||||
int i, layers_ctrl = -1;
|
||||
|
||||
u32 tmsize[2];
|
||||
|
||||
u32 scrollx[2]{ m_vregs[0x406 / 4], m_vregs[0x40e / 4] }, scrolly[2]{ m_vregs[0x402 / 4], m_vregs[0x40a / 4] };
|
||||
u32 layer_ctrl[2]{ m_vregs[0x412 / 4], m_vregs[0x416 / 4] };
|
||||
|
||||
tilemap_t *tmptilemap[2];
|
||||
|
||||
flip_screen_set(~m_in_dsw->read() & 0x00010000); // hardwired to a DSW bit
|
||||
|
||||
/* Layers enable (not quite right) */
|
||||
@ -588,7 +567,7 @@ u32 psikyo_state::screen_update_bootleg(screen_device &screen, bitmap_ind16 &bit
|
||||
6- 7: tilemap size
|
||||
8 : per-line rowscroll
|
||||
9 : per-tile rowscroll
|
||||
10 : tilebank (btlkroad/gunbird/s1945jn only)
|
||||
10 : tilebank (btlkroad/gunbird/s1945n only)
|
||||
11-15: ? */
|
||||
|
||||
/*
|
||||
@ -615,20 +594,17 @@ u32 psikyo_state::screen_update_bootleg(screen_device &screen, bitmap_ind16 &bit
|
||||
switch_bgbanks(layer, (layer_ctrl[layer] & 0x400) >> 10);
|
||||
}
|
||||
|
||||
switch ((layer_ctrl[layer] & 0x00c0) >> 6)
|
||||
u32 new_size = ((layer_ctrl[layer] & 0x00c0) >> 6);
|
||||
if (m_old_tmapsize[layer] != new_size)
|
||||
{
|
||||
case 0: tmsize[layer] = 1; break;
|
||||
case 1: tmsize[layer] = 2; break;
|
||||
case 2: tmsize[layer] = 3; break;
|
||||
default: tmsize[layer] = 0; break;
|
||||
m_tmapsize[layer] = new_size;
|
||||
m_tilemap[layer]->mark_mapping_dirty();
|
||||
}
|
||||
|
||||
tmptilemap[layer] = m_tilemap[layer][tmsize[layer]];
|
||||
|
||||
tmptilemap[layer]->enable(~layer_ctrl[layer] & 1);
|
||||
m_tilemap[layer]->enable(~layer_ctrl[layer] & 1);
|
||||
|
||||
/* Layers scrolling */
|
||||
tmptilemap[layer]->set_scrolly(0, scrolly[layer]);
|
||||
m_tilemap[layer]->set_scrolly(0, scrolly[layer]);
|
||||
|
||||
if (layer_ctrl[layer] & 0x0300) /* per-line rowscroll */
|
||||
{
|
||||
@ -636,40 +612,34 @@ u32 psikyo_state::screen_update_bootleg(screen_device &screen, bitmap_ind16 &bit
|
||||
assert(tile_rowscroll == 0 || tile_rowscroll == 4);
|
||||
if (m_old_linescroll[layer] != (layer_ctrl[layer] & 0x0300))
|
||||
{
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
m_tilemap[layer][i]->set_scroll_rows(tilemap_width(i));
|
||||
}
|
||||
m_tilemap[layer]->set_scroll_rows(0x800);
|
||||
m_old_linescroll[layer] = (layer_ctrl[layer] & 0x0300);
|
||||
}
|
||||
for (i = 0; i < 256; i++) /* 256 screen lines */
|
||||
{
|
||||
int x0 = ((u16 *)m_vregs.target())[BYTE_XOR_BE((layer * 0x200)/2 + (i >> tile_rowscroll))];
|
||||
tmptilemap[layer]->set_scrollx(
|
||||
(i + scrolly[layer]) % (tilemap_width(tmsize[layer])),
|
||||
scrollx[layer] + x0 );
|
||||
m_tilemap[layer]->set_scrollx(
|
||||
(i + scrolly[layer]) & 0x7ff,
|
||||
scrollx[layer] + x0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_old_linescroll[layer] != (layer_ctrl[layer] & 0x0300))
|
||||
{
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
m_tilemap[layer][i]->set_scroll_rows(1);
|
||||
}
|
||||
m_tilemap[layer]->set_scroll_rows(1);
|
||||
m_old_linescroll[layer] = (layer_ctrl[layer] & 0x0300);
|
||||
}
|
||||
tmptilemap[layer]->set_scrollx(0, scrollx[layer]);
|
||||
m_tilemap[layer]->set_scrollx(0, scrollx[layer]);
|
||||
}
|
||||
tmptilemap[layer]->set_transparent_pen((layer_ctrl[layer] & 8 ? 0 : 15));
|
||||
m_tilemap[layer]->set_transparent_pen((layer_ctrl[layer] & 8 ? 0 : 15));
|
||||
}
|
||||
|
||||
// TODO : is this correct?
|
||||
if (layers_ctrl & 1)
|
||||
bgpen = ((layer_ctrl[0] & 8) ? 0x800 : 0x80f);
|
||||
bgpen = m_palette->pen(((layer_ctrl[0] & 8) ? 0x800 : 0x80f));
|
||||
else if (layers_ctrl & 2)
|
||||
bgpen = ((layer_ctrl[1] & 8) ? 0xc00 : 0xc0f);
|
||||
bgpen = m_palette->pen(((layer_ctrl[1] & 8) ? 0xc00 : 0xc0f));
|
||||
else
|
||||
bgpen = m_palette->black_pen(); // TODO
|
||||
|
||||
@ -678,10 +648,10 @@ u32 psikyo_state::screen_update_bootleg(screen_device &screen, bitmap_ind16 &bit
|
||||
screen.priority().fill(0, cliprect);
|
||||
|
||||
if (layers_ctrl & 1)
|
||||
tmptilemap[0]->draw(screen, bitmap, cliprect, layer_ctrl[0] & 2 ? TILEMAP_DRAW_OPAQUE : 0, 1);
|
||||
m_tilemap[0]->draw(screen, bitmap, cliprect, layer_ctrl[0] & 2 ? TILEMAP_DRAW_OPAQUE : 0, 1);
|
||||
|
||||
if (layers_ctrl & 2)
|
||||
tmptilemap[1]->draw(screen, bitmap, cliprect, layer_ctrl[1] & 2 ? TILEMAP_DRAW_OPAQUE : 0, 2);
|
||||
m_tilemap[1]->draw(screen, bitmap, cliprect, layer_ctrl[1] & 2 ? TILEMAP_DRAW_OPAQUE : 0, 2);
|
||||
|
||||
if (layers_ctrl & 4)
|
||||
draw_sprites(screen, bitmap, cliprect);
|
||||
|
Loading…
Reference in New Issue
Block a user