mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
bwing.c: replace achocode with clean modern stuff (bankdev, correct TILEMAP_MAPPER_MEMBER, GFXDECODE_RAM) (nw)
This commit is contained in:
parent
15519ba957
commit
9cb5882619
@ -4,6 +4,7 @@ B-Wings (c) 1984 Data East Corporation
|
||||
Zaviga (c) 1984 Data East Corporation
|
||||
|
||||
driver by Acho A. Tang
|
||||
revised by Alex W. Jackson
|
||||
|
||||
Known issues:
|
||||
|
||||
@ -41,11 +42,6 @@ INTERRUPT_GEN_MEMBER(bwing_state::bwp3_interrupt)
|
||||
//****************************************************************************
|
||||
// Memory and I/O Handlers
|
||||
|
||||
WRITE8_MEMBER(bwing_state::bwp12_sharedram1_w)
|
||||
{
|
||||
m_bwp1_sharedram1[offset] = m_bwp2_sharedram1[offset] = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bwing_state::bwp3_u8F_w)
|
||||
{
|
||||
m_bwp3_u8F_d = data; // prepares custom chip for various operations
|
||||
@ -110,10 +106,6 @@ WRITE8_MEMBER(bwing_state::bwp1_ctrl_w)
|
||||
// hardwired to SWAP
|
||||
case 7: break;
|
||||
}
|
||||
|
||||
#if BW_DEBUG
|
||||
(m_bwp123_membase[0])[0x1c00 + offset] = data;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -129,12 +121,6 @@ WRITE8_MEMBER(bwing_state::bwp2_ctrl_w)
|
||||
|
||||
case 3: m_subcpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); break;
|
||||
}
|
||||
|
||||
#if BW_DEBUG
|
||||
{
|
||||
(m_bwp123_membase[1])[0x1800 + offset] = data;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
//****************************************************************************
|
||||
@ -143,22 +129,28 @@ WRITE8_MEMBER(bwing_state::bwp2_ctrl_w)
|
||||
// Main CPU
|
||||
static ADDRESS_MAP_START( bwp1_map, AS_PROGRAM, 8, bwing_state )
|
||||
AM_RANGE(0x1b00, 0x1b07) AM_READ(bwp1_io_r)
|
||||
AM_RANGE(0x0000, 0x07ff) AM_RAM_WRITE(bwp12_sharedram1_w) AM_SHARE("bwp1_sharedram1")
|
||||
AM_RANGE(0x0000, 0x07ff) AM_RAM AM_SHARE("sharedram")
|
||||
AM_RANGE(0x0800, 0x0fff) AM_RAM
|
||||
AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(bwing_videoram_w) AM_SHARE("videoram")
|
||||
AM_RANGE(0x1400, 0x17ff) AM_RAM
|
||||
AM_RANGE(0x1800, 0x19ff) AM_RAM_WRITE(bwing_spriteram_w) AM_SHARE("spriteram")
|
||||
AM_RANGE(0x1800, 0x19ff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x1a00, 0x1aff) AM_RAM_WRITE(bwing_paletteram_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0x1b00, 0x1b07) AM_RAM_WRITE(bwing_scrollreg_w)
|
||||
AM_RANGE(0x1c00, 0x1c07) AM_RAM_WRITE(bwp1_ctrl_w)
|
||||
AM_RANGE(0x2000, 0x3fff) AM_READWRITE(bwing_scrollram_r, bwing_scrollram_w)
|
||||
AM_RANGE(0x2000, 0x3fff) AM_DEVICE("vrambank", address_map_bank_device, amap8)
|
||||
AM_RANGE(0x4000, 0xffff) AM_ROM // "B-Wings US" writes to 9631-9632(debug?)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
// Banked video RAM
|
||||
static ADDRESS_MAP_START( bank_map, AS_PROGRAM, 8, bwing_state )
|
||||
AM_RANGE(0x0000, 0x0fff) AM_RAM_WRITE(fgscrollram_w) AM_SHARE("fgscrollram")
|
||||
AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(bgscrollram_w) AM_SHARE("bgscrollram")
|
||||
AM_RANGE(0x2000, 0x7fff) AM_RAM_WRITE(gfxram_w) AM_SHARE("gfxram")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
// Sub CPU
|
||||
static ADDRESS_MAP_START( bwp2_map, AS_PROGRAM, 8, bwing_state )
|
||||
AM_RANGE(0x0000, 0x07ff) AM_RAM_WRITE(bwp12_sharedram1_w) AM_SHARE("bwp2_sharedram1")
|
||||
AM_RANGE(0x0000, 0x07ff) AM_RAM AM_SHARE("sharedram")
|
||||
AM_RANGE(0x0800, 0x0fff) AM_RAM
|
||||
AM_RANGE(0x1800, 0x1803) AM_WRITE(bwp2_ctrl_w)
|
||||
AM_RANGE(0xa000, 0xffff) AM_ROM
|
||||
@ -176,7 +168,7 @@ static ADDRESS_MAP_START( bwp3_map, AS_PROGRAM, 8, bwing_state )
|
||||
AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("ay2", ay8910_device, address_w)
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
|
||||
AM_RANGE(0xd000, 0xd000) AM_WRITE(bwp3_nmimask_w)
|
||||
AM_RANGE(0xe000, 0xffff) AM_ROM AM_SHARE("bwp3_rombase")
|
||||
AM_RANGE(0xe000, 0xffff) AM_ROM AM_REGION("audiocpu", 0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -298,9 +290,9 @@ INPUT_PORTS_END
|
||||
static const gfx_layout charlayout =
|
||||
{
|
||||
8, 8,
|
||||
256,
|
||||
RGN_FRAC(1,2),
|
||||
2,
|
||||
{ 0, 0x4000 },
|
||||
{ 0, RGN_FRAC(1,2) },
|
||||
{ 7, 6, 5, 4, 3, 2, 1, 0 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
|
||||
8*8
|
||||
@ -309,21 +301,32 @@ static const gfx_layout charlayout =
|
||||
static const gfx_layout spritelayout =
|
||||
{
|
||||
16, 16,
|
||||
512,
|
||||
RGN_FRAC(1,3),
|
||||
3,
|
||||
{ 0x40000, 0x20000, 0 },
|
||||
{ RGN_FRAC(2,3), RGN_FRAC(1,3), 0 },
|
||||
{ 7, 6, 5, 4, 3, 2, 1, 0, 128+7, 128+6, 128+5, 128+4, 128+3, 128+2, 128+1, 128+0 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
|
||||
8*8, 9*8,10*8,11*8,12*8,13*8,14*8,15*8 },
|
||||
32*8
|
||||
};
|
||||
|
||||
static const gfx_layout ram_tilelayout =
|
||||
{
|
||||
16, 16,
|
||||
RGN_FRAC(1,6), // two sets interleaved in the same RAM
|
||||
3,
|
||||
{ RGN_FRAC(2,3), RGN_FRAC(1,3), 0 },
|
||||
{ 7, 6, 5, 4, 3, 2, 1, 0, 128+7, 128+6, 128+5, 128+4, 128+3, 128+2, 128+1, 128+0 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
|
||||
8*8, 9*8,10*8,11*8,12*8,13*8,14*8,15*8 },
|
||||
32*8
|
||||
};
|
||||
|
||||
static GFXDECODE_START( bwing )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0x00, 1 ) // chars
|
||||
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0x20, 2 ) // sprites
|
||||
GFXDECODE_ENTRY( "gpu", 0, bwing_tilelayout, 0x10, 2 ) // foreground tiles place holder
|
||||
GFXDECODE_ENTRY( "gpu", 0, bwing_tilelayout, 0x30, 2 ) // background tiles place holder
|
||||
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0x00, 1 ) // chars
|
||||
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0x20, 2 ) // sprites
|
||||
GFXDECODE_RAM( "gfxram", 0, ram_tilelayout, 0x10, 2 ) // foreground tiles
|
||||
GFXDECODE_RAM( "gfxram", 0x1000, ram_tilelayout, 0x30, 2 ) // background tiles
|
||||
GFXDECODE_END
|
||||
|
||||
//****************************************************************************
|
||||
@ -332,9 +335,7 @@ GFXDECODE_END
|
||||
void bwing_state::machine_start()
|
||||
{
|
||||
save_item(NAME(m_palatch));
|
||||
save_item(NAME(m_srbank));
|
||||
save_item(NAME(m_mapmask));
|
||||
save_item(NAME(m_mapflip));
|
||||
save_item(NAME(m_bwp3_nmimask));
|
||||
save_item(NAME(m_bwp3_u8F_d));
|
||||
|
||||
@ -344,9 +345,7 @@ void bwing_state::machine_start()
|
||||
void bwing_state::machine_reset()
|
||||
{
|
||||
m_palatch = 0;
|
||||
m_srbank = 0;
|
||||
m_mapmask = 0;
|
||||
m_mapflip = 0;
|
||||
|
||||
m_bwp3_nmimask = 0;
|
||||
m_bwp3_u8F_d = 0;
|
||||
@ -368,6 +367,12 @@ static MACHINE_CONFIG_START( bwing, bwing_state )
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(18000)) // high enough?
|
||||
|
||||
MCFG_DEVICE_ADD("vrambank", ADDRESS_MAP_BANK, 0)
|
||||
MCFG_DEVICE_PROGRAM_MAP(bank_map)
|
||||
MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG)
|
||||
MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
|
||||
MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(15)
|
||||
MCFG_ADDRESS_MAP_BANK_STRIDE(0x2000)
|
||||
|
||||
// video hardware
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -411,8 +416,8 @@ ROM_START( bwings )
|
||||
ROM_LOAD( "bw_bv-05-.9d", 0x0c000, 0x02000, CRC(1e393300) SHA1(8d847256eb5dbccf5f524ec3aa836073d70b4edc) ) // different
|
||||
ROM_LOAD( "bw_bv-04-.7d", 0x0e000, 0x02000, CRC(6548c5bb) SHA1(d12cc8d0d5692c3de766f5c42c818dd8f685760a) ) // different
|
||||
|
||||
ROM_REGION( 0x10000, "audiocpu", 0 ) // sound CPU(encrypted)
|
||||
ROM_LOAD( "bw_bv-03.13a", 0x0e000, 0x02000, CRC(e8ac9379) SHA1(aaf5c20aa33ed05747a8a27739e9d09e094a518d) )
|
||||
ROM_REGION( 0x2000, "audiocpu", 0 ) // sound CPU(encrypted)
|
||||
ROM_LOAD( "bw_bv-03.13a", 0x00000, 0x02000, CRC(e8ac9379) SHA1(aaf5c20aa33ed05747a8a27739e9d09e094a518d) )
|
||||
|
||||
// Bottom Board(CCU-01)
|
||||
ROM_REGION( 0x01000, "gfx1", 0 ) // chars
|
||||
@ -423,9 +428,6 @@ ROM_START( bwings )
|
||||
ROM_LOAD( "bw_bv-07.1l", 0x00000, 0x04000, CRC(3d5ab2be) SHA1(2b3a039914ebfcc3993da74853a67546fc22c191) )
|
||||
ROM_LOAD( "bw_bv-08.1k", 0x04000, 0x04000, CRC(7a585f1e) SHA1(99e5d947b6b1fa96b90c676a282376d67fc377f0) )
|
||||
ROM_LOAD( "bw_bv-09.1h", 0x08000, 0x04000, CRC(a14c0b57) SHA1(5033354793d77922f5ef7f268cbe212e551efadf) )
|
||||
|
||||
// GPU Banks
|
||||
ROM_REGION( 0x08000, "gpu", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
|
||||
@ -441,8 +443,8 @@ ROM_START( bwingso )
|
||||
ROM_LOAD( "bw_bv-05.9d", 0x0c000, 0x02000, CRC(f283f39a) SHA1(9f7f4c39d49f4dfff73fe74cd457480e8a43a3c5) )
|
||||
ROM_LOAD( "bw_bv-04.7d", 0x0e000, 0x02000, CRC(29ae75b6) SHA1(48c94e996857f2ac995bcd25f0e67b9f7c17d807) )
|
||||
|
||||
ROM_REGION( 0x10000, "audiocpu", 0 ) // sound CPU(encrypted)
|
||||
ROM_LOAD( "bw_bv-03.13a", 0x0e000, 0x02000, CRC(e8ac9379) SHA1(aaf5c20aa33ed05747a8a27739e9d09e094a518d) )
|
||||
ROM_REGION( 0x2000, "audiocpu", 0 ) // sound CPU(encrypted)
|
||||
ROM_LOAD( "bw_bv-03.13a", 0x00000, 0x02000, CRC(e8ac9379) SHA1(aaf5c20aa33ed05747a8a27739e9d09e094a518d) )
|
||||
|
||||
// Bottom Board(CCU-01)
|
||||
ROM_REGION( 0x01000, "gfx1", 0 ) // chars
|
||||
@ -453,9 +455,6 @@ ROM_START( bwingso )
|
||||
ROM_LOAD( "bw_bv-07.1l", 0x00000, 0x04000, CRC(3d5ab2be) SHA1(2b3a039914ebfcc3993da74853a67546fc22c191) )
|
||||
ROM_LOAD( "bw_bv-08.1k", 0x04000, 0x04000, CRC(7a585f1e) SHA1(99e5d947b6b1fa96b90c676a282376d67fc377f0) )
|
||||
ROM_LOAD( "bw_bv-09.1h", 0x08000, 0x04000, CRC(a14c0b57) SHA1(5033354793d77922f5ef7f268cbe212e551efadf) )
|
||||
|
||||
// GPU Banks
|
||||
ROM_REGION( 0x08000, "gpu", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
|
||||
@ -472,8 +471,8 @@ ROM_START( bwingsa )
|
||||
ROM_LOAD( "bw_bv-05.9d", 0x0c000, 0x02000, CRC(f283f39a) SHA1(9f7f4c39d49f4dfff73fe74cd457480e8a43a3c5) )
|
||||
ROM_LOAD( "bw_bv-04.7d", 0x0e000, 0x02000, CRC(29ae75b6) SHA1(48c94e996857f2ac995bcd25f0e67b9f7c17d807) )
|
||||
|
||||
ROM_REGION( 0x10000, "audiocpu", 0 ) // sound CPU(encrypted)
|
||||
ROM_LOAD( "bw_bv-03.13a", 0x0e000, 0x02000, CRC(e8ac9379) SHA1(aaf5c20aa33ed05747a8a27739e9d09e094a518d) )
|
||||
ROM_REGION( 0x2000, "audiocpu", 0 ) // sound CPU(encrypted)
|
||||
ROM_LOAD( "bw_bv-03.13a", 0x00000, 0x02000, CRC(e8ac9379) SHA1(aaf5c20aa33ed05747a8a27739e9d09e094a518d) )
|
||||
|
||||
// Bottom Board(CCU-01)
|
||||
ROM_REGION( 0x01000, "gfx1", 0 ) // chars
|
||||
@ -484,9 +483,6 @@ ROM_START( bwingsa )
|
||||
ROM_LOAD( "bw_bv-07.1l", 0x00000, 0x04000, CRC(3d5ab2be) SHA1(2b3a039914ebfcc3993da74853a67546fc22c191) )
|
||||
ROM_LOAD( "bw_bv-08.1k", 0x04000, 0x04000, CRC(7a585f1e) SHA1(99e5d947b6b1fa96b90c676a282376d67fc377f0) )
|
||||
ROM_LOAD( "bw_bv-09.1h", 0x08000, 0x04000, CRC(a14c0b57) SHA1(5033354793d77922f5ef7f268cbe212e551efadf) )
|
||||
|
||||
// GPU Banks
|
||||
ROM_REGION( 0x08000, "gpu", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
ROM_START( zaviga )
|
||||
@ -501,8 +497,8 @@ ROM_START( zaviga )
|
||||
ROM_LOAD( "as07.9d", 0x0c000, 0x02000, CRC(dc1170e3) SHA1(c8e4d1564fd272d726d0e4ffd4f33f67f1b37cd7) )
|
||||
ROM_LOAD( "as06.7d", 0x0e000, 0x02000, CRC(ba888f84) SHA1(f94de8553cd4704d9b3349ded881a7cc62fa9b57) )
|
||||
|
||||
ROM_REGION( 0x10000, "audiocpu", 0 ) // sound CPU(encrypted)
|
||||
ROM_LOAD( "as05.13a", 0x0e000, 0x02000, CRC(afe9b0ac) SHA1(3c653cd4fff7f4e00971249900b5a810b6e74dfe) )
|
||||
ROM_REGION( 0x2000, "audiocpu", 0 ) // sound CPU(encrypted)
|
||||
ROM_LOAD( "as05.13a", 0x00000, 0x02000, CRC(afe9b0ac) SHA1(3c653cd4fff7f4e00971249900b5a810b6e74dfe) )
|
||||
|
||||
// Bottom Board(DE-0170-0)
|
||||
ROM_REGION( 0x01000, "gfx1", 0 ) // chars
|
||||
@ -513,9 +509,6 @@ ROM_START( zaviga )
|
||||
ROM_LOAD( "as11.1l", 0x00000, 0x04000, CRC(aa84af24) SHA1(af4ff085dc44b3d1493ec1c8b4a8d18dccecc872) )
|
||||
ROM_LOAD( "as12.1k", 0x04000, 0x04000, CRC(84af9041) SHA1(8fbd5995ca8e708cd7fb9cdfcdb174e12084f526) )
|
||||
ROM_LOAD( "as13.1h", 0x08000, 0x04000, CRC(15d0922b) SHA1(b8d715a9e610531472d516c19f6035adbce93c84) )
|
||||
|
||||
// GPU Banks
|
||||
ROM_REGION( 0x08000, "gpu", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
|
||||
@ -531,8 +524,8 @@ ROM_START( zavigaj )
|
||||
ROM_LOAD( "as07.9d", 0x0c000, 0x02000, CRC(dc1170e3) SHA1(c8e4d1564fd272d726d0e4ffd4f33f67f1b37cd7) )
|
||||
ROM_LOAD( "as06-.7d", 0x0e000, 0x02000, CRC(b02d270c) SHA1(beea3d44d367543b5b5075c5892580e690691e75) ) // different
|
||||
|
||||
ROM_REGION( 0x10000, "audiocpu", 0 ) // sound CPU(encrypted)
|
||||
ROM_LOAD( "as05.13a", 0x0e000, 0x02000, CRC(afe9b0ac) SHA1(3c653cd4fff7f4e00971249900b5a810b6e74dfe) )
|
||||
ROM_REGION( 0x2000, "audiocpu", 0 ) // sound CPU(encrypted)
|
||||
ROM_LOAD( "as05.13a", 0x00000, 0x02000, CRC(afe9b0ac) SHA1(3c653cd4fff7f4e00971249900b5a810b6e74dfe) )
|
||||
|
||||
// Bottom Board(DE-0170-0)
|
||||
ROM_REGION( 0x01000, "gfx1", 0 ) // chars
|
||||
@ -543,9 +536,6 @@ ROM_START( zavigaj )
|
||||
ROM_LOAD( "as11.1l", 0x00000, 0x04000, CRC(aa84af24) SHA1(af4ff085dc44b3d1493ec1c8b4a8d18dccecc872) )
|
||||
ROM_LOAD( "as12.1k", 0x04000, 0x04000, CRC(84af9041) SHA1(8fbd5995ca8e708cd7fb9cdfcdb174e12084f526) )
|
||||
ROM_LOAD( "as13.1h", 0x08000, 0x04000, CRC(15d0922b) SHA1(b8d715a9e610531472d516c19f6035adbce93c84) )
|
||||
|
||||
// GPU Banks
|
||||
ROM_REGION( 0x08000, "gpu", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
//****************************************************************************
|
||||
@ -553,11 +543,11 @@ ROM_END
|
||||
|
||||
void bwing_state::fix_bwp3( )
|
||||
{
|
||||
UINT8 *rom = m_bwp3_rombase;
|
||||
int i, j = m_bwp3_rombase.bytes();
|
||||
UINT8 *rom = memregion("audiocpu")->base();
|
||||
int j = memregion("audiocpu")->bytes();
|
||||
|
||||
// swap nibbles
|
||||
for (i = 0; i < j; i++)
|
||||
for (int i = 0; i < j; i++)
|
||||
rom[i] = ((rom[i] & 0xf0) >> 4) | ((rom[i] & 0xf) << 4);
|
||||
|
||||
// relocate vectors
|
||||
|
@ -4,6 +4,8 @@
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "machine/bankdev.h"
|
||||
|
||||
#define BW_DEBUG 0
|
||||
|
||||
class bwing_state : public driver_device
|
||||
@ -11,39 +13,34 @@ class bwing_state : public driver_device
|
||||
public:
|
||||
bwing_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_bwp1_sharedram1(*this, "bwp1_sharedram1"),
|
||||
m_videoram(*this, "videoram"),
|
||||
m_spriteram(*this, "spriteram"),
|
||||
m_paletteram(*this, "paletteram"),
|
||||
m_bwp2_sharedram1(*this, "bwp2_sharedram1"),
|
||||
m_bwp3_rombase(*this, "bwp3_rombase"),
|
||||
m_fgscrollram(*this, "fgscrollram"),
|
||||
m_bgscrollram(*this, "bgscrollram"),
|
||||
m_gfxram(*this, "gfxram"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_subcpu(*this, "sub"),
|
||||
m_audiocpu(*this, "audiocpu"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette") { }
|
||||
m_palette(*this, "palette"),
|
||||
m_vrambank(*this, "vrambank") { }
|
||||
|
||||
/* memory pointers */
|
||||
required_shared_ptr<UINT8> m_bwp1_sharedram1;
|
||||
required_shared_ptr<UINT8> m_videoram;
|
||||
required_shared_ptr<UINT8> m_spriteram;
|
||||
required_shared_ptr<UINT8> m_paletteram;
|
||||
required_shared_ptr<UINT8> m_bwp2_sharedram1;
|
||||
required_shared_ptr<UINT8> m_bwp3_rombase;
|
||||
required_shared_ptr<UINT8> m_fgscrollram;
|
||||
required_shared_ptr<UINT8> m_bgscrollram;
|
||||
required_shared_ptr<UINT8> m_gfxram;
|
||||
|
||||
/* video-related */
|
||||
tilemap_t *m_charmap;
|
||||
tilemap_t *m_fgmap;
|
||||
tilemap_t *m_bgmap;
|
||||
UINT8 *m_srbase[4];
|
||||
UINT8 *m_fgdata;
|
||||
UINT8 *m_bgdata;
|
||||
int *m_srxlat;
|
||||
unsigned m_sreg[8];
|
||||
unsigned m_palatch;
|
||||
unsigned m_srbank;
|
||||
unsigned m_mapmask;
|
||||
unsigned m_mapflip;
|
||||
|
||||
/* sound-related */
|
||||
int m_bwp3_nmimask;
|
||||
@ -58,8 +55,8 @@ public:
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<address_map_bank_device> m_vrambank;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(bwp12_sharedram1_w);
|
||||
DECLARE_WRITE8_MEMBER(bwp3_u8F_w);
|
||||
DECLARE_WRITE8_MEMBER(bwp3_nmimask_w);
|
||||
DECLARE_WRITE8_MEMBER(bwp3_nmiack_w);
|
||||
@ -68,8 +65,9 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(bwp2_ctrl_w);
|
||||
DECLARE_WRITE8_MEMBER(bwing_spriteram_w);
|
||||
DECLARE_WRITE8_MEMBER(bwing_videoram_w);
|
||||
DECLARE_READ8_MEMBER(bwing_scrollram_r);
|
||||
DECLARE_WRITE8_MEMBER(bwing_scrollram_w);
|
||||
DECLARE_WRITE8_MEMBER(fgscrollram_w);
|
||||
DECLARE_WRITE8_MEMBER(bgscrollram_w);
|
||||
DECLARE_WRITE8_MEMBER(gfxram_w);
|
||||
DECLARE_WRITE8_MEMBER(bwing_scrollreg_w);
|
||||
DECLARE_WRITE8_MEMBER(bwing_paletteram_w);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(coin_inserted);
|
||||
@ -84,10 +82,6 @@ public:
|
||||
virtual void video_start();
|
||||
UINT32 screen_update_bwing(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
INTERRUPT_GEN_MEMBER(bwp3_interrupt);
|
||||
void fill_srxlat( int *xlat );
|
||||
void draw_sprites( bitmap_ind16 &bmp, const rectangle &clip, UINT8 *ram, int pri );
|
||||
void fix_bwp3( );
|
||||
};
|
||||
|
||||
/*----------- defined in video/bwing.c -----------*/
|
||||
extern const gfx_layout bwing_tilelayout;
|
||||
|
@ -4,6 +4,7 @@ B-Wings (c) 1984 Data East Corporation
|
||||
Zaviga (c) 1984 Data East Corporation
|
||||
|
||||
drivers by Acho A. Tang
|
||||
revised by Alex W. Jackson
|
||||
|
||||
*****************************************************************************/
|
||||
// Directives
|
||||
@ -12,53 +13,9 @@ drivers by Acho A. Tang
|
||||
#include "includes/bwing.h"
|
||||
|
||||
|
||||
#define BW_DEBUG 0
|
||||
|
||||
#define BW_NTILES_L2 7
|
||||
#define BW_NTILES (1<<BW_NTILES_L2)
|
||||
|
||||
|
||||
//****************************************************************************
|
||||
// Local Functions
|
||||
|
||||
void bwing_state::fill_srxlat( int *xlat )
|
||||
{
|
||||
unsigned base, offset, i;
|
||||
|
||||
for (base = 0; base < 0x2000; base += 0x400)
|
||||
{
|
||||
for(i = 0; i < 0x100; i++)
|
||||
{
|
||||
offset = base + (i<<2 & ~0x3f) + (i & 0x0f);
|
||||
|
||||
xlat[base + i] = offset;
|
||||
xlat[base + i + 0x100] = offset + 0x10;
|
||||
xlat[base + i + 0x200] = offset + 0x20;
|
||||
xlat[base + i + 0x300] = offset + 0x30;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//****************************************************************************
|
||||
// Exports
|
||||
|
||||
const gfx_layout bwing_tilelayout =
|
||||
{
|
||||
16, 16,
|
||||
BW_NTILES,
|
||||
3,
|
||||
{ 0x4000*8, 0x2000*8, 0 },
|
||||
{ 7, 6, 5, 4, 3, 2, 1, 0, 128+7, 128+6, 128+5, 128+4, 128+3, 128+2, 128+1, 128+0 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
|
||||
8*8, 9*8,10*8,11*8,12*8,13*8,14*8,15*8 },
|
||||
32*8
|
||||
};
|
||||
|
||||
|
||||
WRITE8_MEMBER(bwing_state::bwing_spriteram_w)
|
||||
{
|
||||
m_spriteram[offset] = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bwing_state::bwing_videoram_w)
|
||||
{
|
||||
@ -67,41 +24,25 @@ WRITE8_MEMBER(bwing_state::bwing_videoram_w)
|
||||
}
|
||||
|
||||
|
||||
READ8_MEMBER(bwing_state::bwing_scrollram_r)
|
||||
WRITE8_MEMBER(bwing_state::fgscrollram_w)
|
||||
{
|
||||
int offs;
|
||||
|
||||
if (!m_srbank)
|
||||
offs = m_srxlat[offset];
|
||||
else
|
||||
offs = offset;
|
||||
|
||||
return ((m_srbase[m_srbank])[offs]);
|
||||
m_fgscrollram[offset] = data;
|
||||
m_fgmap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(bwing_state::bwing_scrollram_w)
|
||||
WRITE8_MEMBER(bwing_state::bgscrollram_w)
|
||||
{
|
||||
int offs;
|
||||
m_bgscrollram[offset] = data;
|
||||
m_bgmap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
if (!m_srbank)
|
||||
{
|
||||
offs = m_srxlat[offset];
|
||||
if (offs >> 12)
|
||||
m_bgmap->mark_tile_dirty(offs & 0xfff);
|
||||
else
|
||||
m_fgmap->mark_tile_dirty(offs & 0xfff);
|
||||
}
|
||||
else
|
||||
{
|
||||
offs = offset;
|
||||
if (offset < 0x1000)
|
||||
m_gfxdecode->gfx(2)->mark_dirty(offset / 32);
|
||||
else
|
||||
m_gfxdecode->gfx(3)->mark_dirty(offset / 32);
|
||||
}
|
||||
|
||||
(m_srbase[m_srbank])[offs] = data;
|
||||
WRITE8_MEMBER(bwing_state::gfxram_w)
|
||||
{
|
||||
m_gfxram[offset] = data;
|
||||
int whichgfx = (offset & 0x1000) ? 3 : 2;
|
||||
m_gfxdecode->gfx(whichgfx)->mark_dirty((offset & 0xfff) / 32);
|
||||
}
|
||||
|
||||
|
||||
@ -114,19 +55,10 @@ WRITE8_MEMBER(bwing_state::bwing_scrollreg_w)
|
||||
case 6: m_palatch = data; break; // one of the palette components is latched through I/O(yike)
|
||||
|
||||
case 7:
|
||||
// tile graphics are decoded in RAM on the fly and tile codes are banked + interleaved(ouch)
|
||||
m_mapmask = data;
|
||||
m_srbank = data >> 6;
|
||||
|
||||
#if BW_DEBUG
|
||||
logerror("(%s)%04x: w=%02x a=%04x f=%d\n", device().tag, space.device().safe_pc(), data, 0x1b00 + offset, m_screen->frame_number());
|
||||
#endif
|
||||
m_vrambank->set_bank(data >> 6);
|
||||
break;
|
||||
}
|
||||
|
||||
#if BW_DEBUG
|
||||
(memregion(REGION_CPU1)->base())[0x1b10 + offset] = data;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -161,10 +93,6 @@ WRITE8_MEMBER(bwing_state::bwing_paletteram_w)
|
||||
}
|
||||
|
||||
m_palette->set_pen_color(offset, rgb_t(r, g, b));
|
||||
|
||||
#if BW_DEBUG
|
||||
m_paletteram[offset + 0x40] = m_palatch;
|
||||
#endif
|
||||
}
|
||||
|
||||
//****************************************************************************
|
||||
@ -172,12 +100,12 @@ WRITE8_MEMBER(bwing_state::bwing_paletteram_w)
|
||||
|
||||
TILE_GET_INFO_MEMBER(bwing_state::get_fgtileinfo)
|
||||
{
|
||||
SET_TILE_INFO_MEMBER(2, m_fgdata[tile_index] & 0x7f, m_fgdata[tile_index] >> 7, 0);
|
||||
SET_TILE_INFO_MEMBER(2, m_fgscrollram[tile_index] & 0x7f, m_fgscrollram[tile_index] >> 7, 0);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(bwing_state::get_bgtileinfo)
|
||||
{
|
||||
SET_TILE_INFO_MEMBER(3, m_bgdata[tile_index] & 0x7f, m_bgdata[tile_index] >> 7, 0);
|
||||
SET_TILE_INFO_MEMBER(3, m_bgscrollram[tile_index] & 0x7f, m_bgscrollram[tile_index] >> 7, 0);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(bwing_state::get_charinfo)
|
||||
@ -187,13 +115,12 @@ TILE_GET_INFO_MEMBER(bwing_state::get_charinfo)
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(bwing_state::bwing_scan_cols)
|
||||
{
|
||||
return ((col << 6) + row);
|
||||
return (row & 0xf) | ((col & 0xf) << 4) | ((row & 0x30) << 4) | ((col & 0x30) << 6);
|
||||
}
|
||||
|
||||
|
||||
void bwing_state::video_start()
|
||||
{
|
||||
// UINT32 *dwptr;
|
||||
int i;
|
||||
|
||||
m_charmap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(bwing_state::get_charinfo),this), TILEMAP_SCAN_COLS, 8, 8, 32, 32);
|
||||
@ -203,25 +130,8 @@ void bwing_state::video_start()
|
||||
m_charmap->set_transparent_pen(0);
|
||||
m_fgmap->set_transparent_pen(0);
|
||||
|
||||
m_srxlat = auto_alloc_array(machine(), int, 0x2000);
|
||||
save_pointer(NAME(m_srxlat), 0x2000);
|
||||
|
||||
fill_srxlat(m_srxlat);
|
||||
|
||||
m_fgdata = memregion("gpu")->base();
|
||||
m_bgdata = m_fgdata + 0x1000;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
m_srbase[i] = m_fgdata + i * 0x2000;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
m_sreg[i] = 0;
|
||||
|
||||
// m_fgfx = m_gfxdecode->gfx(2);
|
||||
m_gfxdecode->gfx(2)->set_source(m_srbase[1]);
|
||||
|
||||
// m_bgfx = m_gfxdecode->gfx(3);
|
||||
m_gfxdecode->gfx(3)->set_source(m_srbase[1] + 0x1000);
|
||||
}
|
||||
|
||||
//****************************************************************************
|
||||
@ -270,23 +180,23 @@ void bwing_state::draw_sprites( bitmap_ind16 &bmp, const rectangle &clip, UINT8
|
||||
|
||||
UINT32 bwing_state::screen_update_bwing(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
unsigned x, y, shiftx;
|
||||
unsigned flip, x, y, shiftx;
|
||||
|
||||
if (m_mapmask & 0x20)
|
||||
{
|
||||
m_mapflip = TILEMAP_FLIPX;
|
||||
flip = TILEMAP_FLIPX;
|
||||
shiftx = -8;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_mapflip = TILEMAP_FLIPY;
|
||||
flip = TILEMAP_FLIPY;
|
||||
shiftx = 8;
|
||||
}
|
||||
|
||||
// draw background
|
||||
if (!(m_mapmask & 1))
|
||||
{
|
||||
m_bgmap->set_flip(m_mapflip);
|
||||
m_bgmap->set_flip(flip);
|
||||
x = ((m_sreg[1]<<2 & 0x300) + m_sreg[2] + shiftx) & 0x3ff;
|
||||
m_bgmap->set_scrollx(0, x);
|
||||
y = (m_sreg[1]<<4 & 0x300) + m_sreg[3];
|
||||
@ -302,7 +212,7 @@ UINT32 bwing_state::screen_update_bwing(screen_device &screen, bitmap_ind16 &bit
|
||||
// draw foreground
|
||||
if (!(m_mapmask & 2))
|
||||
{
|
||||
m_fgmap->set_flip(m_mapflip);
|
||||
m_fgmap->set_flip(flip);
|
||||
x = ((m_sreg[1] << 6 & 0x300) + m_sreg[4] + shiftx) & 0x3ff;
|
||||
m_fgmap->set_scrollx(0, x);
|
||||
y = (m_sreg[1] << 8 & 0x300) + m_sreg[5];
|
||||
@ -316,7 +226,7 @@ UINT32 bwing_state::screen_update_bwing(screen_device &screen, bitmap_ind16 &bit
|
||||
// draw text layer
|
||||
// if (m_mapmask & 4)
|
||||
{
|
||||
m_charmap->set_flip(m_mapflip);
|
||||
m_charmap->set_flip(flip);
|
||||
m_charmap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
}
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user