mirror of
https://github.com/holub/mame
synced 2025-04-25 17:56:43 +03:00
Merge pull request #5005 from cam900/superchs_args
superchs.cpp : Updates
This commit is contained in:
commit
cd60cfc70c
@ -56,28 +56,17 @@
|
||||
|
||||
/*********************************************************************/
|
||||
|
||||
READ16_MEMBER(superchs_state::shared_ram_r)
|
||||
u16 superchs_state::shared_ram_r(offs_t offset)
|
||||
{
|
||||
if ((offset&1)==0) return (m_shared_ram[offset/2]&0xffff0000)>>16;
|
||||
return (m_shared_ram[offset/2]&0x0000ffff);
|
||||
return m_shared_ram[offset];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(superchs_state::shared_ram_w)
|
||||
void superchs_state::shared_ram_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
if ((offset&1)==0) {
|
||||
if (ACCESSING_BITS_8_15)
|
||||
m_shared_ram[offset/2]=(m_shared_ram[offset/2]&0x00ffffff)|((data&0xff00)<<16);
|
||||
if (ACCESSING_BITS_0_7)
|
||||
m_shared_ram[offset/2]=(m_shared_ram[offset/2]&0xff00ffff)|((data&0x00ff)<<16);
|
||||
} else {
|
||||
if (ACCESSING_BITS_8_15)
|
||||
m_shared_ram[offset/2]=(m_shared_ram[offset/2]&0xffff00ff)|((data&0xff00)<< 0);
|
||||
if (ACCESSING_BITS_0_7)
|
||||
m_shared_ram[offset/2]=(m_shared_ram[offset/2]&0xffffff00)|((data&0x00ff)<< 0);
|
||||
}
|
||||
COMBINE_DATA(&m_shared_ram[offset]);
|
||||
}
|
||||
|
||||
WRITE32_MEMBER(superchs_state::cpua_ctrl_w)
|
||||
void superchs_state::cpua_ctrl_w(offs_t offset, u32 data, u32 mem_mask)
|
||||
{
|
||||
/*
|
||||
CPUA writes 0x00, 22, 72, f2 in that order.
|
||||
@ -99,7 +88,7 @@ WRITE32_MEMBER(superchs_state::cpua_ctrl_w)
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(superchs_state::coin_word_w)
|
||||
void superchs_state::coin_word_w(u8 data)
|
||||
{
|
||||
machine().bookkeeping().coin_lockout_w(0,~data & 0x01);
|
||||
machine().bookkeeping().coin_lockout_w(1,~data & 0x02);
|
||||
@ -107,7 +96,7 @@ WRITE8_MEMBER(superchs_state::coin_word_w)
|
||||
machine().bookkeeping().coin_counter_w(1, data & 0x08);
|
||||
}
|
||||
|
||||
READ8_MEMBER( superchs_state::volume_r )
|
||||
u8 superchs_state::volume_r()
|
||||
{
|
||||
return ((m_volume->read() * 255) / 100) ^ 0xff; // 00 = full, ff = silent
|
||||
}
|
||||
@ -124,7 +113,7 @@ void superchs_state::superchs_map(address_map &map)
|
||||
map(0x140000, 0x141fff).ram().share("spriteram");
|
||||
map(0x180000, 0x18ffff).rw(m_tc0480scp, FUNC(tc0480scp_device::ram_r), FUNC(tc0480scp_device::ram_w));
|
||||
map(0x1b0000, 0x1b002f).rw(m_tc0480scp, FUNC(tc0480scp_device::ctrl_r), FUNC(tc0480scp_device::ctrl_w));
|
||||
map(0x200000, 0x20ffff).ram().share("shared_ram");
|
||||
map(0x200000, 0x20ffff).rw(FUNC(superchs_state::shared_ram_r), FUNC(superchs_state::shared_ram_w));
|
||||
map(0x240000, 0x240003).w(FUNC(superchs_state::cpua_ctrl_w));
|
||||
map(0x280000, 0x287fff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette");
|
||||
map(0x2c0000, 0x2c07ff).rw("taito_en:dpram", FUNC(mb8421_device::left_r), FUNC(mb8421_device::left_w));
|
||||
@ -137,7 +126,7 @@ void superchs_state::superchs_cpub_map(address_map &map)
|
||||
map(0x000000, 0x03ffff).rom();
|
||||
map(0x200000, 0x20ffff).ram();
|
||||
map(0x600000, 0x60ffff).w(m_tc0480scp, FUNC(tc0480scp_device::ram_w)); /* Only written upon errors */
|
||||
map(0x800000, 0x80ffff).rw(FUNC(superchs_state::shared_ram_r), FUNC(superchs_state::shared_ram_w));
|
||||
map(0x800000, 0x80ffff).ram().share("shared_ram");
|
||||
map(0xa00000, 0xa001ff).ram(); /* Extra road control?? */
|
||||
}
|
||||
|
||||
@ -147,7 +136,7 @@ void superchs_state::chase3_cpub_map(address_map &map)
|
||||
map(0x200000, 0x20ffff).ram();
|
||||
map(0x400000, 0x40ffff).ram();
|
||||
map(0x600000, 0x60ffff).w(m_tc0480scp, FUNC(tc0480scp_device::ram_w)); /* Only written upon errors */
|
||||
map(0x800000, 0x80ffff).rw(FUNC(superchs_state::shared_ram_r), FUNC(superchs_state::shared_ram_w));
|
||||
map(0x800000, 0x80ffff).ram().share("shared_ram");
|
||||
map(0xa00000, 0xa001ff).ram(); /* Extra road control?? */
|
||||
}
|
||||
|
||||
@ -195,11 +184,10 @@ static const gfx_layout tile16x16_layout =
|
||||
16,16, /* 16*16 sprites */
|
||||
RGN_FRAC(1,1),
|
||||
4, /* 4 bits per pixel */
|
||||
{ 0, 8, 16, 24 },
|
||||
{ 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7 },
|
||||
{ 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 },
|
||||
64*16 /* every sprite takes 128 consecutive bytes */
|
||||
{ STEP4(0,8) },
|
||||
{ STEP8(8*4,1), STEP8(0,1) },
|
||||
{ STEP16(0,8*4*2) },
|
||||
16*16*4 /* every sprite takes 128 consecutive bytes */
|
||||
};
|
||||
|
||||
static const gfx_layout charlayout =
|
||||
@ -207,10 +195,10 @@ static const gfx_layout charlayout =
|
||||
16,16, /* 16*16 characters */
|
||||
RGN_FRAC(1,1),
|
||||
4, /* 4 bits per pixel */
|
||||
{ 0, 1, 2, 3 },
|
||||
{ 1*4, 0*4, 5*4, 4*4, 3*4, 2*4, 7*4, 6*4, 9*4, 8*4, 13*4, 12*4, 11*4, 10*4, 15*4, 14*4 },
|
||||
{ 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 */
|
||||
{ STEP4(0,1) },
|
||||
{ STEP8(7*4,-4), STEP8(15*4,-4) },
|
||||
{ STEP16(0,16*4) },
|
||||
16*16*4 /* every sprite takes 128 consecutive bytes */
|
||||
};
|
||||
|
||||
static GFXDECODE_START( gfx_superchs )
|
||||
@ -260,7 +248,7 @@ void superchs_state::superchs(machine_config &config)
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||
screen.set_size(40*8, 32*8);
|
||||
screen.set_visarea(0, 40*8-1, 2*8, 32*8-1);
|
||||
screen.set_screen_update(FUNC(superchs_state::screen_update_superchs));
|
||||
screen.set_screen_update(FUNC(superchs_state::screen_update));
|
||||
screen.set_palette(m_palette);
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_superchs);
|
||||
@ -303,8 +291,8 @@ ROM_START( superchs )
|
||||
ROM_LOAD16_BYTE( "d46-23.ic112", 0x00001, 0x20000, CRC(9a69dbd0) SHA1(13eca492f1db834c599656750864e7003514f3d4) )
|
||||
|
||||
ROM_REGION( 0x200000, "gfx1", 0 )
|
||||
ROM_LOAD16_BYTE( "d46-05.ic87", 0x00000, 0x100000, CRC(150d0e4c) SHA1(9240b32900be733b8f44868ed5d64f5f1aaadb47) ) /* SCR 16x16 tiles */
|
||||
ROM_LOAD16_BYTE( "d46-06.ic88", 0x00001, 0x100000, CRC(321308be) SHA1(17e724cce39b1331650c1f08d693d057dcd43a3f) )
|
||||
ROM_LOAD32_WORD_SWAP( "d46-05.ic87", 0x00002, 0x100000, CRC(150d0e4c) SHA1(9240b32900be733b8f44868ed5d64f5f1aaadb47) ) /* SCR 16x16 tiles */
|
||||
ROM_LOAD32_WORD_SWAP( "d46-06.ic88", 0x00000, 0x100000, CRC(321308be) SHA1(17e724cce39b1331650c1f08d693d057dcd43a3f) )
|
||||
|
||||
ROM_REGION( 0x800000, "gfx2", 0 )
|
||||
ROM_LOAD32_BYTE( "d46-01.ic64", 0x000003, 0x200000, CRC(5c2ae92d) SHA1(bee2caed4729a27fa0569d952d6d12170c2aa2a8) ) /* OBJ 16x16 tiles: each rom has 1 bitplane */
|
||||
@ -312,7 +300,7 @@ ROM_START( superchs )
|
||||
ROM_LOAD32_BYTE( "d46-03.ic66", 0x000001, 0x200000, CRC(e0e9cbfd) SHA1(b7deb2c58320af9d1b4273ad2758ce927d2e279c) )
|
||||
ROM_LOAD32_BYTE( "d46-04.ic67", 0x000000, 0x200000, CRC(832769a9) SHA1(136ead19edeee90b5be91a6e2f434193dc670fd8) )
|
||||
|
||||
ROM_REGION16_LE( 0x80000, "user1", 0 )
|
||||
ROM_REGION16_LE( 0x80000, "spritemap", 0 )
|
||||
ROM_LOAD16_WORD( "d46-07.ic34", 0x00000, 0x80000, CRC(c3b8b093) SHA1(f34364248ca7fdaaa1a0f8f6f795f9b4bc935fb9) ) /* STY, used to create big sprites on the fly */
|
||||
|
||||
ROM_REGION16_BE( 0x1000000, "ensoniq.0" , ROMREGION_ERASE00 )
|
||||
@ -353,8 +341,8 @@ ROM_START( superchsu )
|
||||
ROM_LOAD16_BYTE( "d46-23.ic112", 0x00001, 0x20000, CRC(9a69dbd0) SHA1(13eca492f1db834c599656750864e7003514f3d4) )
|
||||
|
||||
ROM_REGION( 0x200000, "gfx1", 0 )
|
||||
ROM_LOAD16_BYTE( "d46-05.ic87", 0x00000, 0x100000, CRC(150d0e4c) SHA1(9240b32900be733b8f44868ed5d64f5f1aaadb47) ) /* SCR 16x16 tiles */
|
||||
ROM_LOAD16_BYTE( "d46-06.ic88", 0x00001, 0x100000, CRC(321308be) SHA1(17e724cce39b1331650c1f08d693d057dcd43a3f) )
|
||||
ROM_LOAD32_WORD_SWAP( "d46-05.ic87", 0x00002, 0x100000, CRC(150d0e4c) SHA1(9240b32900be733b8f44868ed5d64f5f1aaadb47) ) /* SCR 16x16 tiles */
|
||||
ROM_LOAD32_WORD_SWAP( "d46-06.ic88", 0x00000, 0x100000, CRC(321308be) SHA1(17e724cce39b1331650c1f08d693d057dcd43a3f) )
|
||||
|
||||
ROM_REGION( 0x800000, "gfx2", 0 )
|
||||
ROM_LOAD32_BYTE( "d46-01.ic64", 0x000003, 0x200000, CRC(5c2ae92d) SHA1(bee2caed4729a27fa0569d952d6d12170c2aa2a8) ) /* OBJ 16x16 tiles: each rom has 1 bitplane */
|
||||
@ -362,7 +350,7 @@ ROM_START( superchsu )
|
||||
ROM_LOAD32_BYTE( "d46-03.ic66", 0x000001, 0x200000, CRC(e0e9cbfd) SHA1(b7deb2c58320af9d1b4273ad2758ce927d2e279c) )
|
||||
ROM_LOAD32_BYTE( "d46-04.ic67", 0x000000, 0x200000, CRC(832769a9) SHA1(136ead19edeee90b5be91a6e2f434193dc670fd8) )
|
||||
|
||||
ROM_REGION16_LE( 0x80000, "user1", 0 )
|
||||
ROM_REGION16_LE( 0x80000, "spritemap", 0 )
|
||||
ROM_LOAD16_WORD( "d46-07.ic34", 0x00000, 0x80000, CRC(c3b8b093) SHA1(f34364248ca7fdaaa1a0f8f6f795f9b4bc935fb9) ) /* STY, used to create big sprites on the fly */
|
||||
|
||||
ROM_REGION16_BE( 0x1000000, "ensoniq.0" , ROMREGION_ERASE00 )
|
||||
@ -403,8 +391,8 @@ ROM_START( superchsj )
|
||||
ROM_LOAD16_BYTE( "d46-23.ic112", 0x00001, 0x20000, CRC(9a69dbd0) SHA1(13eca492f1db834c599656750864e7003514f3d4) )
|
||||
|
||||
ROM_REGION( 0x200000, "gfx1", 0 )
|
||||
ROM_LOAD16_BYTE( "d46-05.ic87", 0x00000, 0x100000, CRC(150d0e4c) SHA1(9240b32900be733b8f44868ed5d64f5f1aaadb47) ) /* SCR 16x16 tiles */
|
||||
ROM_LOAD16_BYTE( "d46-06.ic88", 0x00001, 0x100000, CRC(321308be) SHA1(17e724cce39b1331650c1f08d693d057dcd43a3f) )
|
||||
ROM_LOAD32_WORD_SWAP( "d46-05.ic87", 0x00002, 0x100000, CRC(150d0e4c) SHA1(9240b32900be733b8f44868ed5d64f5f1aaadb47) ) /* SCR 16x16 tiles */
|
||||
ROM_LOAD32_WORD_SWAP( "d46-06.ic88", 0x00000, 0x100000, CRC(321308be) SHA1(17e724cce39b1331650c1f08d693d057dcd43a3f) )
|
||||
|
||||
ROM_REGION( 0x800000, "gfx2", 0 )
|
||||
ROM_LOAD32_BYTE( "d46-01.ic64", 0x000003, 0x200000, CRC(5c2ae92d) SHA1(bee2caed4729a27fa0569d952d6d12170c2aa2a8) ) /* OBJ 16x16 tiles: each rom has 1 bitplane */
|
||||
@ -412,7 +400,7 @@ ROM_START( superchsj )
|
||||
ROM_LOAD32_BYTE( "d46-03.ic66", 0x000001, 0x200000, CRC(e0e9cbfd) SHA1(b7deb2c58320af9d1b4273ad2758ce927d2e279c) )
|
||||
ROM_LOAD32_BYTE( "d46-04.ic67", 0x000000, 0x200000, CRC(832769a9) SHA1(136ead19edeee90b5be91a6e2f434193dc670fd8) )
|
||||
|
||||
ROM_REGION16_LE( 0x80000, "user1", 0 )
|
||||
ROM_REGION16_LE( 0x80000, "spritemap", 0 )
|
||||
ROM_LOAD16_WORD( "d46-07.ic34", 0x00000, 0x80000, CRC(c3b8b093) SHA1(f34364248ca7fdaaa1a0f8f6f795f9b4bc935fb9) ) /* STY, used to create big sprites on the fly */
|
||||
|
||||
ROM_REGION16_BE( 0x1000000, "ensoniq.0" , ROMREGION_ERASE00 )
|
||||
@ -453,30 +441,30 @@ ROM_START( superchsp )
|
||||
ROM_LOAD16_BYTE( "ic127_ae27.bin", 0x00000, 0x40000, CRC(8c8cd2a1) SHA1(178ab2df0ea7371ce275d38051643ea19ba88047) )
|
||||
|
||||
ROM_REGION( 0x200000, "gfx1", 0 ) /* SCR 16x16 tiles */
|
||||
ROM_LOAD32_BYTE( "0scn.ic9", 0x00000, 0x080000, CRC(d54e80ec) SHA1(83460cf97b0da8523486ede5bd504710c790b1a6) )
|
||||
ROM_LOAD32_BYTE( "0scn.ic9", 0x00003, 0x080000, CRC(d54e80ec) SHA1(83460cf97b0da8523486ede5bd504710c790b1a6) )
|
||||
ROM_LOAD32_BYTE( "8scn.ic8", 0x00002, 0x080000, CRC(b3da122d) SHA1(1e4198b2d5ce2144a7ca01f418aca33f799dcad2) )
|
||||
ROM_LOAD32_BYTE( "16scn.ic12", 0x00001, 0x080000, CRC(dd26932c) SHA1(31bcc4e0195a6d966829976b89e81e6eb7dde8b6) )
|
||||
ROM_LOAD32_BYTE( "24scn.ic13", 0x00003, 0x080000, CRC(4f560680) SHA1(6398013b8fa5aebc905bf31918e990dd7f5d9490) )
|
||||
ROM_LOAD32_BYTE( "24scn.ic13", 0x00000, 0x080000, CRC(4f560680) SHA1(6398013b8fa5aebc905bf31918e990dd7f5d9490) )
|
||||
|
||||
ROM_REGION( 0x800000, "gfx2", 0 )
|
||||
ROMX_LOAD( "0lobj.ic14", 0x000003, 0x80000, CRC(972d0866) SHA1(7787312ba99d971eee30d50ddff12629e3bdc8b9) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "16lobj.ic15", 0x000002, 0x80000, CRC(ceefdf0d) SHA1(4463f5d1d81b0fcaa29276c995c31dc89cb97680) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "32lobj.ic16", 0x000001, 0x80000, CRC(1e86a77a) SHA1(886080d3872fe2d592269f6541569a290885a475) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "48lobj.ic17", 0x000000, 0x80000, CRC(1d8f3c72) SHA1(92670fc4d331d1243457b67ec7d98a273d9c9540) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "8lobj.ic4", 0x000007, 0x80000, CRC(e138a3f7) SHA1(94f1deb05286af73f5af60a08944017540ae3387) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "24lobj.ic5", 0x000006, 0x80000, CRC(927e0539) SHA1(8adbd77ae5bf8fa3761ac7c315d1c96f616a0197) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "40lobj.ic6", 0x000005, 0x80000, CRC(3810a203) SHA1(f269c5bea5db18626b716d8c204dace7ab681e28) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "56lobj.ic7", 0x000004, 0x80000, CRC(d66d6b30) SHA1(32e08dacffa706e0b3634fc52cabb2a5fe0f5cf5) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "0h-obj.ic22", 0x400003, 0x80000, CRC(985d31b0) SHA1(8e3c899792de0530f1176af992a90dbbbd3938a8) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "16h-obj.ic23", 0x400002, 0x80000, CRC(1be705e8) SHA1(497ee154ee43e81ee7d7e8106663374be0d5a550) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "32h-obj.ic24", 0x400001, 0x80000, CRC(f9fde123) SHA1(8cdd4c98e2eaca542c9916da1fb933606d3c8e3f) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "48h-obj.ic25", 0x400000, 0x80000, CRC(1c5d28c6) SHA1(9844fd41f7d190b8b11b23e01687f7c40cf8b18a) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "8h-obj.ic30", 0x400007, 0x80000, CRC(5559a1a1) SHA1(cdc2f2f0b086cf2468fb5e2289c2308313be6668) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "24h-obj.ic31", 0x400006, 0x80000, CRC(83e724fb) SHA1(0f93163afa4af328b813502cecaf6824b3717bc7) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "40h-obj.ic32", 0x400005, 0x80000, CRC(6a3b2fa0) SHA1(5a8e7875afe3ba8443811729ede21d23fa7b5082) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "56h-obj.ic33", 0x400004, 0x80000, CRC(3e78a619) SHA1(b37bd46b2098db6c8857ffac7444216c617e4e97) , ROM_SKIP(7) )
|
||||
ROM_LOAD64_BYTE( "0lobj.ic14", 0x000003, 0x80000, CRC(972d0866) SHA1(7787312ba99d971eee30d50ddff12629e3bdc8b9) )
|
||||
ROM_LOAD64_BYTE( "16lobj.ic15", 0x000002, 0x80000, CRC(ceefdf0d) SHA1(4463f5d1d81b0fcaa29276c995c31dc89cb97680) )
|
||||
ROM_LOAD64_BYTE( "32lobj.ic16", 0x000001, 0x80000, CRC(1e86a77a) SHA1(886080d3872fe2d592269f6541569a290885a475) )
|
||||
ROM_LOAD64_BYTE( "48lobj.ic17", 0x000000, 0x80000, CRC(1d8f3c72) SHA1(92670fc4d331d1243457b67ec7d98a273d9c9540) )
|
||||
ROM_LOAD64_BYTE( "8lobj.ic4", 0x000007, 0x80000, CRC(e138a3f7) SHA1(94f1deb05286af73f5af60a08944017540ae3387) )
|
||||
ROM_LOAD64_BYTE( "24lobj.ic5", 0x000006, 0x80000, CRC(927e0539) SHA1(8adbd77ae5bf8fa3761ac7c315d1c96f616a0197) )
|
||||
ROM_LOAD64_BYTE( "40lobj.ic6", 0x000005, 0x80000, CRC(3810a203) SHA1(f269c5bea5db18626b716d8c204dace7ab681e28) )
|
||||
ROM_LOAD64_BYTE( "56lobj.ic7", 0x000004, 0x80000, CRC(d66d6b30) SHA1(32e08dacffa706e0b3634fc52cabb2a5fe0f5cf5) )
|
||||
ROM_LOAD64_BYTE( "0h-obj.ic22", 0x400003, 0x80000, CRC(985d31b0) SHA1(8e3c899792de0530f1176af992a90dbbbd3938a8) )
|
||||
ROM_LOAD64_BYTE( "16h-obj.ic23", 0x400002, 0x80000, CRC(1be705e8) SHA1(497ee154ee43e81ee7d7e8106663374be0d5a550) )
|
||||
ROM_LOAD64_BYTE( "32h-obj.ic24", 0x400001, 0x80000, CRC(f9fde123) SHA1(8cdd4c98e2eaca542c9916da1fb933606d3c8e3f) )
|
||||
ROM_LOAD64_BYTE( "48h-obj.ic25", 0x400000, 0x80000, CRC(1c5d28c6) SHA1(9844fd41f7d190b8b11b23e01687f7c40cf8b18a) )
|
||||
ROM_LOAD64_BYTE( "8h-obj.ic30", 0x400007, 0x80000, CRC(5559a1a1) SHA1(cdc2f2f0b086cf2468fb5e2289c2308313be6668) )
|
||||
ROM_LOAD64_BYTE( "24h-obj.ic31", 0x400006, 0x80000, CRC(83e724fb) SHA1(0f93163afa4af328b813502cecaf6824b3717bc7) )
|
||||
ROM_LOAD64_BYTE( "40h-obj.ic32", 0x400005, 0x80000, CRC(6a3b2fa0) SHA1(5a8e7875afe3ba8443811729ede21d23fa7b5082) )
|
||||
ROM_LOAD64_BYTE( "56h-obj.ic33", 0x400004, 0x80000, CRC(3e78a619) SHA1(b37bd46b2098db6c8857ffac7444216c617e4e97) )
|
||||
|
||||
ROM_REGION16_LE( 0x80000, "user1", 0 )
|
||||
ROM_REGION16_LE( 0x80000, "spritemap", 0 )
|
||||
ROM_LOAD16_BYTE( "0style.ic28", 0x00000, 0x40000, CRC(161263e5) SHA1(3b501dd9c543a9505c3fd7627aa42434eeb1a531) )
|
||||
ROM_LOAD16_BYTE( "8style.ic27", 0x00001, 0x40000, CRC(b32f246c) SHA1(be950f0da5d839978961cb77745427ac0bd83a5c) )
|
||||
|
||||
@ -510,30 +498,30 @@ ROM_START( superchsp2 )
|
||||
ROM_LOAD16_BYTE( "ic127.ic127", 0x00000, 0x40000, CRC(41a7a06f) SHA1(80ffe9167ba490ed3c153dc279df65ee758d8d35) )
|
||||
|
||||
ROM_REGION( 0x200000, "gfx1", 0 ) /* SCR 16x16 tiles */
|
||||
ROM_LOAD32_BYTE( "9.ic9", 0x00000, 0x080000, CRC(c0494e23) SHA1(35f94ae1b2f663a7046896f2ae10eacaa8f7c813) )
|
||||
ROM_LOAD32_BYTE( "9.ic9", 0x00003, 0x080000, CRC(c0494e23) SHA1(35f94ae1b2f663a7046896f2ae10eacaa8f7c813) )
|
||||
ROM_LOAD32_BYTE( "8.ic8", 0x00002, 0x080000, CRC(e668dd6c) SHA1(619278598c89c828846068399cdadb8206284da6) )
|
||||
ROM_LOAD32_BYTE( "12.ic12", 0x00001, 0x080000, CRC(b4d20bc2) SHA1(2f9fa38447200a3718e3bc23baceb64e903387dc) )
|
||||
ROM_LOAD32_BYTE( "13.ic13", 0x00003, 0x080000, CRC(54090800) SHA1(66aac7896daa843918679b50a6a179ad06921ca1) )
|
||||
ROM_LOAD32_BYTE( "13.ic13", 0x00000, 0x080000, CRC(54090800) SHA1(66aac7896daa843918679b50a6a179ad06921ca1) )
|
||||
|
||||
ROM_REGION( 0x800000, "gfx2", 0 )
|
||||
ROMX_LOAD( "14.ic14", 0x000003, 0x80000, CRC(9fbd8237) SHA1(392deb7534a61878e282684a9611f374fd14562a) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "15.ic15", 0x000002, 0x80000, CRC(1665c890) SHA1(aede1554c7f71338654f62bc2699763bc4e400a9) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "16.ic16", 0x000001, 0x80000, CRC(a71fa648) SHA1(95dffff8a20e84a6434627255d89837a70de3a6f) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "17.ic17", 0x000000, 0x80000, CRC(2a33d21b) SHA1(b86a0414c4b2108a06572dac5a9f7b0656c3aa88) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "4.ic4", 0x000007, 0x80000, CRC(5cbd609c) SHA1(11985aaa9ce92ac5170f2ffc330583c9104e3e96) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "5.ic5", 0x000006, 0x80000, CRC(5cd6b545) SHA1(2b176ffa60a680b7e20da430dbc62a700aabceab) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "6.ic6", 0x000005, 0x80000, CRC(4996bc41) SHA1(b5c53bbd64cf603fa11088f681d8d48773f18098) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "7.ic7", 0x000004, 0x80000, CRC(24a96745) SHA1(e9fafade59a44d3dcc8937ca918e9f2e0f00732e) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "22.ic22", 0x400003, 0x80000, CRC(3769316a) SHA1(70e8ba5222ab3f1ba9bb3c71d8e9e737ee01c544) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "23.ic23", 0x400002, 0x80000, CRC(875862d9) SHA1(7e26100ada8d88d6ea5443983c18a0f26fe0dbbc) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "24.ic24", 0x400001, 0x80000, CRC(ebf3ac6b) SHA1(93b887302081d104c36ea6f75a4bf7664ea055a0) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "25.ic25", 0x400000, 0x80000, CRC(053f2717) SHA1(a4f398fcc1a0d82f2782fe885fa52fd470744a1e) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "30.ic30", 0x400007, 0x80000, CRC(f9683857) SHA1(5acab4a6fa55692329a8909323bfd0b4e3e2aeec) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "31.ic31", 0x400006, 0x80000, CRC(67afe831) SHA1(016dc96701d30ae97764b58bc5d5e0011e77557c) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "32.ic32", 0x400005, 0x80000, CRC(1c55ac47) SHA1(2b7cd44cd3fb3cbbd49c4ed717b6e6774f600577) , ROM_SKIP(7) )
|
||||
ROMX_LOAD( "33.ic33", 0x400004, 0x80000, CRC(0392a90e) SHA1(abdff64a0db9e3293f8fa50042a8ed9cd29edab6) , ROM_SKIP(7) )
|
||||
ROM_LOAD64_BYTE( "14.ic14", 0x000003, 0x80000, CRC(9fbd8237) SHA1(392deb7534a61878e282684a9611f374fd14562a) )
|
||||
ROM_LOAD64_BYTE( "15.ic15", 0x000002, 0x80000, CRC(1665c890) SHA1(aede1554c7f71338654f62bc2699763bc4e400a9) )
|
||||
ROM_LOAD64_BYTE( "16.ic16", 0x000001, 0x80000, CRC(a71fa648) SHA1(95dffff8a20e84a6434627255d89837a70de3a6f) )
|
||||
ROM_LOAD64_BYTE( "17.ic17", 0x000000, 0x80000, CRC(2a33d21b) SHA1(b86a0414c4b2108a06572dac5a9f7b0656c3aa88) )
|
||||
ROM_LOAD64_BYTE( "4.ic4", 0x000007, 0x80000, CRC(5cbd609c) SHA1(11985aaa9ce92ac5170f2ffc330583c9104e3e96) )
|
||||
ROM_LOAD64_BYTE( "5.ic5", 0x000006, 0x80000, CRC(5cd6b545) SHA1(2b176ffa60a680b7e20da430dbc62a700aabceab) )
|
||||
ROM_LOAD64_BYTE( "6.ic6", 0x000005, 0x80000, CRC(4996bc41) SHA1(b5c53bbd64cf603fa11088f681d8d48773f18098) )
|
||||
ROM_LOAD64_BYTE( "7.ic7", 0x000004, 0x80000, CRC(24a96745) SHA1(e9fafade59a44d3dcc8937ca918e9f2e0f00732e) )
|
||||
ROM_LOAD64_BYTE( "22.ic22", 0x400003, 0x80000, CRC(3769316a) SHA1(70e8ba5222ab3f1ba9bb3c71d8e9e737ee01c544) )
|
||||
ROM_LOAD64_BYTE( "23.ic23", 0x400002, 0x80000, CRC(875862d9) SHA1(7e26100ada8d88d6ea5443983c18a0f26fe0dbbc) )
|
||||
ROM_LOAD64_BYTE( "24.ic24", 0x400001, 0x80000, CRC(ebf3ac6b) SHA1(93b887302081d104c36ea6f75a4bf7664ea055a0) )
|
||||
ROM_LOAD64_BYTE( "25.ic25", 0x400000, 0x80000, CRC(053f2717) SHA1(a4f398fcc1a0d82f2782fe885fa52fd470744a1e) )
|
||||
ROM_LOAD64_BYTE( "30.ic30", 0x400007, 0x80000, CRC(f9683857) SHA1(5acab4a6fa55692329a8909323bfd0b4e3e2aeec) )
|
||||
ROM_LOAD64_BYTE( "31.ic31", 0x400006, 0x80000, CRC(67afe831) SHA1(016dc96701d30ae97764b58bc5d5e0011e77557c) )
|
||||
ROM_LOAD64_BYTE( "32.ic32", 0x400005, 0x80000, CRC(1c55ac47) SHA1(2b7cd44cd3fb3cbbd49c4ed717b6e6774f600577) )
|
||||
ROM_LOAD64_BYTE( "33.ic33", 0x400004, 0x80000, CRC(0392a90e) SHA1(abdff64a0db9e3293f8fa50042a8ed9cd29edab6) )
|
||||
|
||||
ROM_REGION16_LE( 0x80000, "user1", 0 )
|
||||
ROM_REGION16_LE( 0x80000, "spritemap", 0 )
|
||||
ROM_LOAD16_BYTE( "27.ic28", 0x00000, 0x40000, CRC(2686bb57) SHA1(ec793ccd5b1bc40ceda91f8aa913e4a423d1ba0a) )
|
||||
ROM_LOAD16_BYTE( "28.ic27", 0x00001, 0x40000, CRC(94bf0bc3) SHA1(9b0d4517e9c3f3a5833fe773b8e2774b9a42f48f) )
|
||||
|
||||
@ -560,7 +548,7 @@ ROM_END
|
||||
|
||||
READ32_MEMBER(superchs_state::main_cycle_r)
|
||||
{
|
||||
if (m_maincpu->pc()==0x702)
|
||||
if (m_maincpu->pc() == 0x702)
|
||||
m_maincpu->spin_until_interrupt();
|
||||
|
||||
return m_ram[0];
|
||||
@ -568,7 +556,7 @@ READ32_MEMBER(superchs_state::main_cycle_r)
|
||||
|
||||
READ16_MEMBER(superchs_state::sub_cycle_r)
|
||||
{
|
||||
if (m_subcpu->pc()==0x454)
|
||||
if (m_subcpu->pc() == 0x454)
|
||||
m_subcpu->spin_until_interrupt();
|
||||
|
||||
return m_ram[2]&0xffff;
|
||||
|
@ -17,6 +17,7 @@ public:
|
||||
m_ram(*this,"ram"),
|
||||
m_spriteram(*this,"spriteram"),
|
||||
m_shared_ram(*this,"shared_ram"),
|
||||
m_spritemap(*this,"spritemap"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_subcpu(*this, "sub"),
|
||||
m_tc0480scp(*this, "tc0480scp"),
|
||||
@ -36,30 +37,30 @@ protected:
|
||||
private:
|
||||
struct schs_tempsprite
|
||||
{
|
||||
int gfx;
|
||||
int code,color;
|
||||
int flipx,flipy;
|
||||
u8 gfx;
|
||||
u32 code,color;
|
||||
bool flipx,flipy;
|
||||
int x,y;
|
||||
int zoomx,zoomy;
|
||||
int primask;
|
||||
u32 primask;
|
||||
};
|
||||
|
||||
required_shared_ptr<uint32_t> m_ram;
|
||||
required_shared_ptr<uint32_t> m_spriteram;
|
||||
required_shared_ptr<uint32_t> m_shared_ram;
|
||||
required_shared_ptr<u32> m_ram;
|
||||
required_shared_ptr<u32> m_spriteram;
|
||||
required_shared_ptr<u16> m_shared_ram;
|
||||
required_region_ptr<u16> m_spritemap;
|
||||
|
||||
std::unique_ptr<schs_tempsprite[]> m_spritelist;
|
||||
uint32_t m_mem[2];
|
||||
|
||||
DECLARE_READ16_MEMBER(shared_ram_r);
|
||||
DECLARE_WRITE16_MEMBER(shared_ram_w);
|
||||
DECLARE_WRITE32_MEMBER(cpua_ctrl_w);
|
||||
DECLARE_WRITE8_MEMBER(coin_word_w);
|
||||
DECLARE_READ8_MEMBER(volume_r);
|
||||
u16 shared_ram_r(offs_t offset);
|
||||
void shared_ram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
void cpua_ctrl_w(offs_t offset, u32 data, u32 mem_mask = ~0);
|
||||
void coin_word_w(u8 data);
|
||||
u8 volume_r();
|
||||
DECLARE_READ32_MEMBER(main_cycle_r);
|
||||
DECLARE_READ16_MEMBER(sub_cycle_r);
|
||||
uint32_t screen_update_superchs(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, const int *primasks, int x_offs, int y_offs);
|
||||
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, const u32 *primasks, int x_offs, int y_offs);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_subcpu;
|
||||
required_device<tc0480scp_device> m_tc0480scp;
|
||||
|
@ -55,38 +55,31 @@ Heavy use is made of sprite zooming.
|
||||
|
||||
********************************************************/
|
||||
|
||||
void superchs_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect,const int *primasks,int x_offs,int y_offs)
|
||||
void superchs_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, const u32 *primasks, int x_offs, int y_offs)
|
||||
{
|
||||
uint32_t *spriteram32 = m_spriteram;
|
||||
uint16_t *spritemap = (uint16_t *)memregion("user1")->base();
|
||||
int offs, data, tilenum, color, flipx, flipy;
|
||||
int x, y, priority, dblsize, curx, cury;
|
||||
int sprites_flipscreen = 0;
|
||||
int zoomx, zoomy, zx, zy;
|
||||
int sprite_chunk,map_offset,code,j,k,px,py;
|
||||
int dimension,total_chunks,bad_chunks;
|
||||
|
||||
/* pdrawgfx() needs us to draw sprites front to back, so we have to build a list
|
||||
while processing sprite ram and then draw them all at the end */
|
||||
struct schs_tempsprite *sprite_ptr = m_spritelist.get();
|
||||
|
||||
for (offs = (m_spriteram.bytes()/4-4);offs >= 0;offs -= 4)
|
||||
for (int offs = (m_spriteram.bytes()/4-4);offs >= 0;offs -= 4)
|
||||
{
|
||||
data = spriteram32[offs+0];
|
||||
flipx = (data & 0x00800000) >> 23;
|
||||
zoomx = (data & 0x007f0000) >> 16;
|
||||
tilenum = (data & 0x00007fff);
|
||||
u32 data = m_spriteram[offs+0];
|
||||
int flipx = (data & 0x00800000) >> 23;
|
||||
int zoomx = (data & 0x007f0000) >> 16;
|
||||
const u32 tilenum = (data & 0x00007fff);
|
||||
|
||||
data = spriteram32[offs+2];
|
||||
priority = (data & 0x000c0000) >> 18;
|
||||
color = (data & 0x0003fc00) >> 10;
|
||||
x = (data & 0x000003ff);
|
||||
data = m_spriteram[offs+2];
|
||||
const int priority = (data & 0x000c0000) >> 18;
|
||||
int color = (data & 0x0003fc00) >> 10;
|
||||
int x = (data & 0x000003ff);
|
||||
|
||||
data = spriteram32[offs+3];
|
||||
dblsize = (data & 0x00040000) >> 18;
|
||||
flipy = (data & 0x00020000) >> 17;
|
||||
zoomy = (data & 0x0001fc00) >> 10;
|
||||
y = (data & 0x000003ff);
|
||||
data = m_spriteram[offs+3];
|
||||
const int dblsize = (data & 0x00040000) >> 18;
|
||||
int flipy = (data & 0x00020000) >> 17;
|
||||
int zoomy = (data & 0x0001fc00) >> 10;
|
||||
int y = (data & 0x000003ff);
|
||||
|
||||
color |= 0x100;
|
||||
|
||||
@ -99,41 +92,40 @@ void superchs_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap,co
|
||||
y += y_offs;
|
||||
|
||||
/* treat coords as signed */
|
||||
if (x>0x340) x -= 0x400;
|
||||
if (y>0x340) y -= 0x400;
|
||||
if (x > 0x340) x -= 0x400;
|
||||
if (y > 0x340) y -= 0x400;
|
||||
|
||||
x -= x_offs;
|
||||
|
||||
bad_chunks = 0;
|
||||
dimension = ((dblsize*2) + 2); // 2 or 4
|
||||
total_chunks = ((dblsize*3) + 1) << 2; // 4 or 16
|
||||
map_offset = tilenum << 2;
|
||||
int bad_chunks = 0;
|
||||
const int dimension = ((dblsize*2) + 2); // 2 or 4
|
||||
const int total_chunks = ((dblsize*3) + 1) << 2; // 4 or 16
|
||||
const int map_offset = tilenum << 2;
|
||||
|
||||
for (int sprite_chunk = 0; sprite_chunk < total_chunks; sprite_chunk++)
|
||||
{
|
||||
for (sprite_chunk=0;sprite_chunk<total_chunks;sprite_chunk++)
|
||||
{
|
||||
j = sprite_chunk / dimension; /* rows */
|
||||
k = sprite_chunk % dimension; /* chunks per row */
|
||||
const int j = sprite_chunk / dimension; /* rows */
|
||||
const int k = sprite_chunk % dimension; /* chunks per row */
|
||||
|
||||
px = k;
|
||||
py = j;
|
||||
int px = k;
|
||||
int py = j;
|
||||
/* pick tiles back to front for x and y flips */
|
||||
if (flipx) px = dimension-1-k;
|
||||
if (flipy) py = dimension-1-j;
|
||||
if (flipx) px = dimension - 1 - k;
|
||||
if (flipy) py = dimension - 1 - j;
|
||||
|
||||
code = spritemap[map_offset + px + (py<<(dblsize+1))];
|
||||
const u16 code = m_spritemap[map_offset + px + (py << (dblsize + 1))];
|
||||
|
||||
if (code==0xffff)
|
||||
if (code == 0xffff)
|
||||
{
|
||||
bad_chunks += 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
curx = x + ((k*zoomx)/dimension);
|
||||
cury = y + ((j*zoomy)/dimension);
|
||||
int curx = x + ((k * zoomx) / dimension);
|
||||
int cury = y + ((j * zoomy) / dimension);
|
||||
|
||||
zx= x + (((k+1)*zoomx)/dimension) - curx;
|
||||
zy= y + (((j+1)*zoomy)/dimension) - cury;
|
||||
const int zx = x + (((k + 1) * zoomx) / dimension) - curx;
|
||||
const int zy = y + (((j + 1) * zoomy) / dimension) - cury;
|
||||
|
||||
if (sprites_flipscreen)
|
||||
{
|
||||
@ -173,7 +165,6 @@ void superchs_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap,co
|
||||
sprite_ptr->zoomx,sprite_ptr->zoomy,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (bad_chunks)
|
||||
logerror("Sprite number %04x had %02x invalid chunks\n",tilenum,bad_chunks);
|
||||
@ -199,11 +190,11 @@ logerror("Sprite number %04x had %02x invalid chunks\n",tilenum,bad_chunks);
|
||||
SCREEN REFRESH
|
||||
**************************************************************/
|
||||
|
||||
uint32_t superchs_state::screen_update_superchs(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
u32 superchs_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
uint8_t layer[5];
|
||||
uint16_t priority;
|
||||
static const int primasks[4] = {0xfffc, 0xfff0, 0xff00, 0x0};
|
||||
u8 layer[5];
|
||||
u16 priority;
|
||||
static const u32 primasks[4] = {0xfffc, 0xfff0, 0xff00, 0x0};
|
||||
|
||||
m_tc0480scp->tilemap_update();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user