- pktgaldx.cpp: subclasses and other small cleanups

- vaportra.cpp: consolidated driver in one file, minor cleanups

- few drivers and devices:  removed some custom GFX decodes in favor of the ones provided in emu/video/generic.cpp
This commit is contained in:
Ivan Vangelista 2022-07-27 17:20:02 +02:00
parent dc3b8b6b06
commit 81b4a049a2
12 changed files with 506 additions and 980 deletions

View File

@ -490,23 +490,12 @@ static const gfx_layout leland_layout =
8*8
};
static const gfx_layout ataxx_layout =
{
8,8,
RGN_FRAC(1,6),
6,
{ RGN_FRAC(5,6), RGN_FRAC(4,6), RGN_FRAC(3,6), RGN_FRAC(2,6), RGN_FRAC(1,6), RGN_FRAC(0,6) },
{ STEP8(0,1) },
{ STEP8(0,8) },
8*8
};
static GFXDECODE_START( gfx_leland )
GFXDECODE_ENTRY( "bg_gfx", 0, leland_layout, 0, 8*16) // *16 is foreground
GFXDECODE_END
static GFXDECODE_START( gfx_ataxx )
GFXDECODE_ENTRY( "bg_gfx", 0, ataxx_layout, 0, 16) // 16 is foreground
GFXDECODE_ENTRY( "bg_gfx", 0, gfx_8x8x6_planar, 0, 16) // 16 is foreground
GFXDECODE_END
void leland_state::leland_video(machine_config &config)

View File

@ -46,10 +46,10 @@ NOTE: Hold down both Player1 & Player2 Start buttons during boot up to see versi
*/
/*
original todo:
original TODO:
verify sound.
bootleg todo:
bootleg TODO:
Fix GFX glitches in background of girls after each level.
Tidy up code.
@ -57,61 +57,230 @@ bootleg todo:
*/
#include "emu.h"
#include "pktgaldx.h"
#include "deco16ic.h"
#include "deco102.h"
#include "deco104.h"
#include "decocrpt.h"
#include "decospr.h"
#include "cpu/m68000/m68000.h"
#include "decocrpt.h"
#include "deco102.h"
#include "sound/okim6295.h"
#include "emupal.h"
#include "screen.h"
#include "speaker.h"
namespace {
class base_state : public driver_device
{
public:
base_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_oki2(*this, "oki2"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette")
{ }
protected:
// devices
required_device<cpu_device> m_maincpu;
required_device<okim6295_device> m_oki2;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
void oki_bank_w(uint16_t data);
DECLARE_WRITE_LINE_MEMBER(vblank_w);
void vblank_ack_w(uint16_t data);
};
class pktgaldx_state : public base_state
{
public:
pktgaldx_state(const machine_config &mconfig, device_type type, const char *tag) :
base_state(mconfig, type, tag),
m_pf1_rowscroll(*this, "pf1_rowscroll"),
m_pf2_rowscroll(*this, "pf2_rowscroll"),
m_spriteram(*this, "spriteram"),
m_decrypted_opcodes(*this, "decrypted_opcodes"),
m_deco104(*this, "ioprot104"),
m_sprgen(*this, "spritegen"),
m_deco_tilegen(*this, "tilegen")
{ }
void pktgaldx(machine_config &config);
virtual void driver_init() override;
private:
// memory pointers
required_shared_ptr<uint16_t> m_pf1_rowscroll;
required_shared_ptr<uint16_t> m_pf2_rowscroll;
required_shared_ptr<uint16_t> m_spriteram;
required_shared_ptr<uint16_t> m_decrypted_opcodes;
// devices
required_device<deco104_device> m_deco104;
required_device<decospr_device> m_sprgen;
required_device<deco16ic_device> m_deco_tilegen;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECO16IC_BANK_CB_MEMBER(bank_callback);
uint16_t protection_region_f_104_r(offs_t offset);
void protection_region_f_104_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
void decrypted_opcodes_map(address_map &map);
void prg_map(address_map &map);
};
class pktgaldxb_state : public base_state
{
public:
pktgaldxb_state(const machine_config &mconfig, device_type type, const char *tag) :
base_state(mconfig, type, tag),
m_fgram(*this, "fgram"),
m_sprites(*this, "sprites")
{ }
void pktgaldxb(machine_config &config);
private:
// memory pointers
required_shared_ptr<uint16_t> m_fgram;
required_shared_ptr<uint16_t> m_sprites;
uint16_t unknown_r();
uint16_t protection_r();
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void prg_map(address_map &map);
};
// video
uint32_t pktgaldx_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
uint16_t flip = m_deco_tilegen->pf_control_r(0);
// sprites are flipped relative to tilemaps
flip_screen_set(BIT(flip, 7));
m_sprgen->set_flip_screen(!BIT(flip, 7));
m_deco_tilegen->pf_update(m_pf1_rowscroll, m_pf2_rowscroll);
bitmap.fill(0, cliprect); // not confirmed
screen.priority().fill(0);
m_deco_tilegen->tilemap_2_draw(screen, bitmap, cliprect, 0, 0);
m_sprgen->draw_sprites(bitmap, cliprect, m_spriteram, 0x400);
m_deco_tilegen->tilemap_1_draw(screen, bitmap, cliprect, 0, 0);
return 0;
}
uint32_t pktgaldxb_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
bitmap.fill(m_palette->black_pen(), cliprect);
// the bootleg seems to treat the tilemaps as sprites
for (int offset = 0; offset < 0x1600 / 2; offset += 8)
{
int const tileno = m_sprites[offset + 3] | (m_sprites[offset + 2] << 16);
int const colour = m_sprites[offset + 1] >> 1;
int x = m_sprites[offset + 0];
int y = m_sprites[offset + 4];
x -= 0xc2;
y &= 0x1ff;
y -= 8;
m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, tileno ^ 0x1000, colour, 0, 0, x, y, 0);
}
for (int offset = 0x1600/2; offset < 0x2000 / 2; offset += 8)
{
int const tileno = m_sprites[offset + 3] | (m_sprites[offset + 2] << 16);
int const colour = m_sprites[offset + 1] >> 1;
int x = m_sprites[offset + 0] & 0x1ff;
int y = m_sprites[offset + 4] & 0x0ff;
x -= 0xc2;
y &= 0x1ff;
y -= 8;
m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, tileno ^ 0x4000, colour, 0, 0, x, y, 0);
}
for (int offset = 0x2000/2; offset < 0x4000 / 2; offset += 8)
{
int const tileno = m_sprites[offset + 3] | (m_sprites[offset + 2] << 16);
int const colour = m_sprites[offset + 1] >> 1;
int x = m_sprites[offset + 0] & 0x1ff;
int y = m_sprites[offset + 4] & 0x0ff;
x -= 0xc2;
y &= 0x1ff;
y -= 8;
m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, tileno ^ 0x3000, colour, 0, 0, x, y, 0);
}
return 0;
}
// machine
/**********************************************************************************/
void pktgaldx_state::pktgaldx_oki_bank_w(uint16_t data)
void base_state::oki_bank_w(uint16_t data)
{
m_oki2->set_rom_bank(data & 3);
}
/**********************************************************************************/
uint16_t pktgaldx_state::pktgaldx_protection_region_f_104_r(offs_t offset)
uint16_t pktgaldx_state::protection_region_f_104_r(offs_t offset)
{
int real_address = 0 + (offset *2);
int real_address = 0 + (offset * 2);
uint8_t cs = 0;
uint16_t data = m_deco104->read_data( real_address&0x7fff, cs );
uint16_t data = m_deco104->read_data(real_address & 0x7fff, cs);
return data;
}
void pktgaldx_state::pktgaldx_protection_region_f_104_w(offs_t offset, uint16_t data, uint16_t mem_mask)
void pktgaldx_state::protection_region_f_104_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
int real_address = 0 + (offset *2);
int real_address = 0 + (offset * 2);
uint8_t cs = 0;
m_deco104->write_data( real_address&0x7fff, data, mem_mask, cs );
m_deco104->write_data(real_address & 0x7fff, data, mem_mask, cs);
}
WRITE_LINE_MEMBER( pktgaldx_state::vblank_w )
WRITE_LINE_MEMBER(base_state::vblank_w)
{
if (state)
m_maincpu->set_input_line(6, ASSERT_LINE);
}
void pktgaldx_state::vblank_ack_w(uint16_t data)
void base_state::vblank_ack_w(uint16_t data)
{
m_maincpu->set_input_line(6, CLEAR_LINE);
}
void pktgaldx_state::pktgaldx_map(address_map &map)
void pktgaldx_state::prg_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x100fff).rw(m_deco_tilegen, FUNC(deco16ic_device::pf1_data_r), FUNC(deco16ic_device::pf1_data_w));
map(0x102000, 0x102fff).rw(m_deco_tilegen, FUNC(deco16ic_device::pf2_data_r), FUNC(deco16ic_device::pf2_data_w));
map(0x110000, 0x1107ff).ram().share("pf1_rowscroll");
map(0x112000, 0x1127ff).ram().share("pf2_rowscroll");
map(0x110000, 0x1107ff).ram().share(m_pf1_rowscroll);
map(0x112000, 0x1127ff).ram().share(m_pf2_rowscroll);
map(0x120000, 0x1207ff).ram().share("spriteram");
map(0x120000, 0x1207ff).ram().share(m_spriteram);
map(0x130000, 0x130fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x140000, 0x14000f).w("oki1", FUNC(okim6295_device::write)).umask16(0x00ff);
@ -120,29 +289,29 @@ void pktgaldx_state::pktgaldx_map(address_map &map)
map(0x150007, 0x150007).r(m_oki2, FUNC(okim6295_device::read));
map(0x161800, 0x16180f).w(m_deco_tilegen, FUNC(deco16ic_device::pf_control_w));
map(0x164800, 0x164801).w(FUNC(pktgaldx_state::pktgaldx_oki_bank_w));
map(0x164800, 0x164801).w(FUNC(pktgaldx_state::oki_bank_w));
map(0x166800, 0x166801).w(FUNC(pktgaldx_state::vblank_ack_w));
map(0x167800, 0x167fff).rw(FUNC(pktgaldx_state::pktgaldx_protection_region_f_104_r), FUNC(pktgaldx_state::pktgaldx_protection_region_f_104_w)).share("prot16ram"); /* Protection device */
map(0x167800, 0x167fff).rw(FUNC(pktgaldx_state::protection_region_f_104_r), FUNC(pktgaldx_state::protection_region_f_104_w)).share("prot16ram");
map(0x170000, 0x17ffff).ram();
}
void pktgaldx_state::decrypted_opcodes_map(address_map &map)
{
map(0x000000, 0x07ffff).rom().share("decrypted_opcodes");
map(0x000000, 0x07ffff).rom().share(m_decrypted_opcodes);
}
/* Pocket Gal Deluxe (bootleg!) */
// Pocket Gal Deluxe (bootleg!)
uint16_t pktgaldx_state::pckgaldx_unknown_r()
uint16_t pktgaldxb_state::unknown_r()
{
return 0xffff;
}
uint16_t pktgaldx_state::pckgaldx_protection_r()
uint16_t pktgaldxb_state::protection_r()
{
logerror("pckgaldx_protection_r address %06x\n",m_maincpu->pc());
logerror("protection_r address %06x\n", m_maincpu->pc());
return -1;
}
@ -156,15 +325,15 @@ cpu #0 (PC=00009B12): unmapped program memory word read from 00167842 & FF00
cpu #0 (PC=0000923C): unmapped program memory word read from 00167DB2 & 00FF
*/
/* do the 300000 addresses somehow interact with the protection addresses on this bootleg? */
/* or maybe protection writes go to sound ... */
// do the 300000 addresses somehow interact with the protection addresses on this bootleg?
// or maybe protection writes go to sound ...
void pktgaldx_state::pktgaldb_map(address_map &map)
void pktgaldxb_state::prg_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0x100000, 0x100fff).ram().share("pktgaldb_fgram"); // fgram on original?
map(0x100000, 0x100fff).ram().share(m_fgram); // fgram on original?
map(0x102000, 0x102fff).ram(); // bgram on original?
map(0x120000, 0x123fff).ram().share("pktgaldb_spr");
map(0x120000, 0x123fff).ram().share(m_sprites);
map(0x130000, 0x130fff).ram(); // palette on original?
@ -174,17 +343,17 @@ void pktgaldx_state::pktgaldb_map(address_map &map)
map(0x150007, 0x150007).r(m_oki2, FUNC(okim6295_device::read));
// map(0x160000, 0x167fff).ram();
map(0x164800, 0x164801).w(FUNC(pktgaldx_state::pktgaldx_oki_bank_w));
map(0x16500a, 0x16500b).r(FUNC(pktgaldx_state::pckgaldx_unknown_r));
map(0x166800, 0x166801).w(FUNC(pktgaldx_state::vblank_ack_w));
map(0x164800, 0x164801).w(FUNC(pktgaldxb_state::oki_bank_w));
map(0x16500a, 0x16500b).r(FUNC(pktgaldxb_state::unknown_r));
map(0x166800, 0x166801).w(FUNC(pktgaldxb_state::vblank_ack_w));
/* should we really be using these to read the i/o in the BOOTLEG?
these look like i/o through protection ... */
map(0x167842, 0x167843).portr("INPUTS");
map(0x167c4c, 0x167c4d).portr("DSW");
map(0x167db2, 0x167db3).portr("SYSTEM");
map(0x167d10, 0x167d11).r(FUNC(pktgaldx_state::pckgaldx_protection_r)); // check code at 6ea
map(0x167d1a, 0x167d1b).r(FUNC(pktgaldx_state::pckgaldx_protection_r)); // check code at 7C4
map(0x167d10, 0x167d11).r(FUNC(pktgaldxb_state::protection_r)); // check code at 6ea
map(0x167d1a, 0x167d1b).r(FUNC(pktgaldxb_state::protection_r)); // check code at 7c4
map(0x170000, 0x17ffff).ram();
@ -256,7 +425,7 @@ static INPUT_PORTS_START( pktgaldx )
PORT_DIPSETTING( 0x0100, "3" )
PORT_DIPSETTING( 0x0300, "4" )
PORT_DIPSETTING( 0x0200, "5" )
PORT_DIPNAME( 0x0c00, 0x0c00, "Time" ) PORT_DIPLOCATION("SW2:3,4") /* Listed as "Difficulty" */
PORT_DIPNAME( 0x0c00, 0x0c00, "Time" ) PORT_DIPLOCATION("SW2:3,4") // Listed as "Difficulty"
PORT_DIPSETTING( 0x0000, "60" )
PORT_DIPSETTING( 0x0400, "80" )
PORT_DIPSETTING( 0x0c00, "100" )
@ -306,9 +475,9 @@ static const gfx_layout spritelayout =
};
static GFXDECODE_START( gfx_pktgaldx )
GFXDECODE_ENTRY( "gfx1", 0, tile_8x8_layout, 0, 32 ) /* Tiles (8x8) */
GFXDECODE_ENTRY( "gfx1", 0, tile_16x16_layout, 0, 32 ) /* Tiles (16x16) */
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 512, 32 ) /* Sprites (16x16) */
GFXDECODE_ENTRY( "tiles", 0, tile_8x8_layout, 0, 32 ) // 8x8
GFXDECODE_ENTRY( "tiles", 0, tile_16x16_layout, 0, 32 ) // 16x16
GFXDECODE_ENTRY( "sprites", 0, spritelayout, 512, 32 ) // 16x16
GFXDECODE_END
static const gfx_layout bootleg_spritelayout =
@ -324,7 +493,7 @@ static const gfx_layout bootleg_spritelayout =
};
static GFXDECODE_START( gfx_bootleg )
GFXDECODE_ENTRY( "gfx1", 0, bootleg_spritelayout, 0, 64 )
GFXDECODE_ENTRY( "tiles", 0, bootleg_spritelayout, 0, 64 )
GFXDECODE_END
@ -334,24 +503,20 @@ DECO16IC_BANK_CB_MEMBER(pktgaldx_state::bank_callback)
}
void pktgaldx_state::machine_start()
{
}
void pktgaldx_state::pktgaldx(machine_config &config)
{
/* basic machine hardware */
// basic machine hardware
M68000(config, m_maincpu, 28_MHz_XTAL / 2); // The clock input is 14.000MHz on pin 6
m_maincpu->set_addrmap(AS_PROGRAM, &pktgaldx_state::pktgaldx_map);
m_maincpu->set_addrmap(AS_PROGRAM, &pktgaldx_state::prg_map);
m_maincpu->set_addrmap(AS_OPCODES, &pktgaldx_state::decrypted_opcodes_map);
/* video hardware */
// video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(58);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate
screen.set_size(40*8, 32*8);
screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1);
screen.set_screen_update(FUNC(pktgaldx_state::screen_update_pktgaldx));
screen.set_screen_update(FUNC(pktgaldx_state::screen_update));
screen.screen_vblank().set(FUNC(pktgaldx_state::vblank_w));
screen.set_palette(m_palette);
@ -370,11 +535,11 @@ void pktgaldx_state::pktgaldx(machine_config &config)
m_deco_tilegen->set_bank2_callback(FUNC(pktgaldx_state::bank_callback));
m_deco_tilegen->set_pf12_8x8_bank(0);
m_deco_tilegen->set_pf12_16x16_bank(1);
m_deco_tilegen->set_gfxdecode_tag("gfxdecode");
m_deco_tilegen->set_gfxdecode_tag(m_gfxdecode);
DECO_SPRITE(config, m_sprgen, 0);
m_sprgen->set_gfx_region(2);
m_sprgen->set_gfxdecode_tag("gfxdecode");
m_sprgen->set_gfxdecode_tag(m_gfxdecode);
DECO104PROT(config, m_deco104, 0);
m_deco104->port_a_cb().set_ioport("INPUTS");
@ -382,7 +547,7 @@ void pktgaldx_state::pktgaldx(machine_config &config)
m_deco104->port_c_cb().set_ioport("DSW");
m_deco104->set_interface_scramble(8,9, 4,5,6,7, 1,0,3,2); // hopefully this is correct, nothing else uses this arrangement!
/* sound hardware */
// sound hardware
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
@ -396,100 +561,100 @@ void pktgaldx_state::pktgaldx(machine_config &config)
}
void pktgaldx_state::pktgaldb(machine_config &config)
void pktgaldxb_state::pktgaldxb(machine_config &config)
{
/* basic machine hardware */
// basic machine hardware
M68000(config, m_maincpu, 16000000);
m_maincpu->set_addrmap(AS_PROGRAM, &pktgaldx_state::pktgaldb_map);
m_maincpu->set_addrmap(AS_PROGRAM, &pktgaldxb_state::prg_map);
/* video hardware */
// video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(58);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate
screen.set_size(40*8, 32*8);
screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1);
screen.set_screen_update(FUNC(pktgaldx_state::screen_update_pktgaldb));
screen.screen_vblank().set(FUNC(pktgaldx_state::vblank_w));
screen.set_screen_update(FUNC(pktgaldxb_state::screen_update));
screen.screen_vblank().set(FUNC(pktgaldxb_state::vblank_w));
screen.set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xBGR_888, 4096);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_bootleg);
/* sound hardware */
// sound hardware
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
okim6295_device &oki1(OKIM6295(config, "oki1", 32220000/32, okim6295_device::PIN7_HIGH));
okim6295_device &oki1(OKIM6295(config, "oki1", 32220000 / 32, okim6295_device::PIN7_HIGH));
oki1.add_route(ALL_OUTPUTS, "lspeaker", 0.75);
oki1.add_route(ALL_OUTPUTS, "rspeaker", 0.75);
OKIM6295(config, m_oki2, 32220000/16, okim6295_device::PIN7_HIGH);
OKIM6295(config, m_oki2, 32220000 / 16, okim6295_device::PIN7_HIGH);
m_oki2->add_route(ALL_OUTPUTS, "lspeaker", 0.60);
m_oki2->add_route(ALL_OUTPUTS, "rspeaker", 0.60);
}
ROM_START( pktgaldx )
ROM_REGION( 0x80000, "maincpu", 0 ) /* DE102 code (encrypted) */
ROM_LOAD16_WORD_SWAP( "ke00-2.12a", 0x00000, 0x80000, CRC(b04baf3a) SHA1(680d1b4ab4b6edef36cd96a60539fb7c2dac9637) ) /* Version 3.00 Euro */
ROM_REGION( 0x80000, "maincpu", 0 ) // DE102 code (encrypted)
ROM_LOAD16_WORD_SWAP( "ke00-2.12a", 0x00000, 0x80000, CRC(b04baf3a) SHA1(680d1b4ab4b6edef36cd96a60539fb7c2dac9637) ) // Version 3.00 Euro
ROM_REGION( 0x100000, "gfx1", 0 )
ROM_REGION( 0x100000, "tiles", 0 )
ROM_LOAD( "maz-02.2h", 0x00000, 0x100000, CRC(c9d35a59) SHA1(07b44c7d7d76b668b4d6ca5672bd1c2910228e68) )
ROM_REGION( 0x100000, "gfx2", 0 )
ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD16_BYTE( "maz-00.1b", 0x000000, 0x080000, CRC(fa3071f4) SHA1(72e7d920e9ca94f8cb166007a9e9e5426a201af8) )
ROM_LOAD16_BYTE( "maz-01.3b", 0x000001, 0x080000, CRC(4934fe21) SHA1(b852249f59906d69d32160ebaf9b4781193227e4) )
ROM_REGION( 0x40000, "oki1", 0 ) /* Oki samples */
ROM_REGION( 0x40000, "oki1", 0 )
ROM_LOAD( "ke01.14f", 0x00000, 0x20000, CRC(8a106263) SHA1(229ab17403c2b8f4e89a90a8cda2f3c3a4b55d9e) )
ROM_REGION( 0x100000, "oki2", 0 ) /* Oki samples (banked?) */
ROM_REGION( 0x100000, "oki2", 0 ) // banked
ROM_LOAD( "maz-03.13f", 0x00000, 0x100000, CRC(a313c964) SHA1(4a3664c4e2c44a017a0ab6a6d4361799cbda57b5) )
ROM_END
ROM_START( pktgaldxj )
ROM_REGION( 0x80000, "maincpu", 0 ) /* DE102 code (encrypted) */
ROM_LOAD16_WORD_SWAP( "kg00-2.12a", 0x00000, 0x80000, CRC(62dc4137) SHA1(23887dc3f6e7c4cdcb1bf4f4c87fe3cbe8cdbe69) ) /* Version 3.00 Japan */
ROM_REGION( 0x80000, "maincpu", 0 ) // DE102 code (encrypted)
ROM_LOAD16_WORD_SWAP( "kg00-2.12a", 0x00000, 0x80000, CRC(62dc4137) SHA1(23887dc3f6e7c4cdcb1bf4f4c87fe3cbe8cdbe69) ) // Version 3.00 Japan
ROM_REGION( 0x100000, "gfx1", 0 )
ROM_REGION( 0x100000, "tiles", 0 )
ROM_LOAD( "maz-02.2h", 0x00000, 0x100000, CRC(c9d35a59) SHA1(07b44c7d7d76b668b4d6ca5672bd1c2910228e68) )
ROM_REGION( 0x100000, "gfx2", 0 )
ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD16_BYTE( "maz-00.1b", 0x000000, 0x080000, CRC(fa3071f4) SHA1(72e7d920e9ca94f8cb166007a9e9e5426a201af8) )
ROM_LOAD16_BYTE( "maz-01.3b", 0x000001, 0x080000, CRC(4934fe21) SHA1(b852249f59906d69d32160ebaf9b4781193227e4) )
ROM_REGION( 0x40000, "oki1", 0 ) /* Oki samples */
ROM_REGION( 0x40000, "oki1", 0 )
ROM_LOAD( "ke01.14f", 0x00000, 0x20000, CRC(8a106263) SHA1(229ab17403c2b8f4e89a90a8cda2f3c3a4b55d9e) )
ROM_REGION( 0x100000, "oki2", 0 ) /* Oki samples (banked?) */
ROM_REGION( 0x100000, "oki2", 0 ) // banked
ROM_LOAD( "maz-03.13f", 0x00000, 0x100000, CRC(a313c964) SHA1(4a3664c4e2c44a017a0ab6a6d4361799cbda57b5) )
ROM_END
ROM_START( pktgaldxa )
ROM_REGION( 0x80000, "maincpu", 0 ) /* DE102 code (encrypted) */
ROM_LOAD16_WORD_SWAP( "rom.12a", 0x00000, 0x80000, CRC(c4c7cc68) SHA1(d3841459096a37ffd96fbf9017d3176893034c01) ) /* Version 3.00 Asia - Need to verify label */
ROM_REGION( 0x80000, "maincpu", 0 ) // DE102 code (encrypted)
ROM_LOAD16_WORD_SWAP( "rom.12a", 0x00000, 0x80000, CRC(c4c7cc68) SHA1(d3841459096a37ffd96fbf9017d3176893034c01) ) // Version 3.00 Asia - Need to verify label
ROM_REGION( 0x100000, "gfx1", 0 )
ROM_REGION( 0x100000, "tiles", 0 )
ROM_LOAD( "maz-02.2h", 0x00000, 0x100000, CRC(c9d35a59) SHA1(07b44c7d7d76b668b4d6ca5672bd1c2910228e68) )
ROM_REGION( 0x100000, "gfx2", 0 )
ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD16_BYTE( "maz-00.1b", 0x000000, 0x080000, CRC(fa3071f4) SHA1(72e7d920e9ca94f8cb166007a9e9e5426a201af8) )
ROM_LOAD16_BYTE( "maz-01.3b", 0x000001, 0x080000, CRC(4934fe21) SHA1(b852249f59906d69d32160ebaf9b4781193227e4) )
ROM_REGION( 0x40000, "oki1", 0 ) /* Oki samples */
ROM_REGION( 0x40000, "oki1", 0 )
ROM_LOAD( "ke01.14f", 0x00000, 0x20000, CRC(8a106263) SHA1(229ab17403c2b8f4e89a90a8cda2f3c3a4b55d9e) )
ROM_REGION( 0x100000, "oki2", 0 ) /* Oki samples (banked?) */
ROM_REGION( 0x100000, "oki2", 0 ) // banked
ROM_LOAD( "maz-03.13f", 0x00000, 0x100000, CRC(a313c964) SHA1(4a3664c4e2c44a017a0ab6a6d4361799cbda57b5) )
ROM_END
ROM_START( pktgaldxb )
ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */
ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE ("4.bin", 0x00000, 0x80000, CRC(67ce30aa) SHA1(c5228ed19eebbfb6d5f7cbfcb99734d9fcd5aba3) )
ROM_LOAD16_BYTE( "5.bin", 0x00001, 0x80000, CRC(64cb4c33) SHA1(02f988f558113dd9a77079dee59e23583394fa98) )
ROM_REGION( 0x400000, "gfx1", 0 )
ROM_REGION( 0x400000, "tiles", 0 )
ROM_LOAD16_BYTE( "11.bin", 0x000000, 0x80000, CRC(a8c8f1fd) SHA1(9fd5fa500967a1bd692abdbeef89ce195c8aecd4) )
ROM_LOAD16_BYTE( "6.bin", 0x000001, 0x80000, CRC(0e3335a1) SHA1(2d6899336302d222e8404dde159e64911a8f94e6) )
ROM_LOAD16_BYTE( "10.bin", 0x100000, 0x80000, CRC(9dd743a9) SHA1(dbc3e2bd044dbf21b04c174bd860969ee53b4050) )
@ -497,23 +662,28 @@ ROM_START( pktgaldxb )
ROM_LOAD16_BYTE( "9.bin", 0x200001, 0x80000, CRC(078f371c) SHA1(5b510a0f7f50c55cce1ffcc8f2e9c3432b23e352) )
ROM_LOAD16_BYTE( "8.bin", 0x200000, 0x80000, CRC(40f5a032) SHA1(c2ad585ddbc3ef40c6214cb30b4d78a2cd0a9446) )
ROM_REGION( 0x40000, "oki1", 0 ) /* Oki samples */
ROM_REGION( 0x40000, "oki1", 0 )
ROM_LOAD( "1.bin", 0x00000, 0x20000, CRC(8a106263) SHA1(229ab17403c2b8f4e89a90a8cda2f3c3a4b55d9e) )
ROM_REGION( 0x100000, "oki2", 0 ) /* Oki samples (banked?) */
ROM_REGION( 0x100000, "oki2", 0 ) // banked
ROM_LOAD( "3.bin", 0x00000, 0x80000, CRC(4638747b) SHA1(56d79cd8d4d7b41b71f1e942b5a5bf1bafc5c6e7) )
ROM_LOAD( "2.bin", 0x80000, 0x80000, CRC(f841d995) SHA1(0ef2f8fd9be62b979862c3688e7aad34c7b0404d) )
ROM_END
void pktgaldx_state::init_pktgaldx()
void pktgaldx_state::driver_init()
{
deco56_decrypt_gfx(machine(), "gfx1");
base_state::driver_init();
deco56_decrypt_gfx(machine(), "tiles");
deco102_decrypt_cpu((uint16_t *)memregion("maincpu")->base(), m_decrypted_opcodes, 0x80000, 0x42ba, 0x00, 0x00);
}
GAME( 1992, pktgaldx, 0, pktgaldx, pktgaldx, pktgaldx_state, init_pktgaldx, ROT0, "Data East Corporation", "Pocket Gal Deluxe (Euro v3.00)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, pktgaldxj, pktgaldx, pktgaldx, pktgaldx, pktgaldx_state, init_pktgaldx, ROT0, "Data East Corporation (Nihon System license)", "Pocket Gal Deluxe (Japan v3.00)", MACHINE_SUPPORTS_SAVE )
GAME( 1992, pktgaldxa, pktgaldx, pktgaldx, pktgaldx, pktgaldx_state, init_pktgaldx, ROT0, "Data East Corporation", "Pocket Gal Deluxe (Asia v3.00)", MACHINE_SUPPORTS_SAVE )
GAME( 1992, pktgaldxb, pktgaldx, pktgaldb, pktgaldx, pktgaldx_state, empty_init, ROT0, "bootleg", "Pocket Gal Deluxe (Euro v3.00, bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
} // anonymous namespace
GAME( 1992, pktgaldx, 0, pktgaldx, pktgaldx, pktgaldx_state, driver_init, ROT0, "Data East Corporation", "Pocket Gal Deluxe (Euro v3.00)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, pktgaldxj, pktgaldx, pktgaldx, pktgaldx, pktgaldx_state, driver_init, ROT0, "Data East Corporation (Nihon System license)", "Pocket Gal Deluxe (Japan v3.00)", MACHINE_SUPPORTS_SAVE )
GAME( 1992, pktgaldxa, pktgaldx, pktgaldx, pktgaldx, pktgaldx_state, driver_init, ROT0, "Data East Corporation", "Pocket Gal Deluxe (Asia v3.00)", MACHINE_SUPPORTS_SAVE )
GAME( 1992, pktgaldxb, pktgaldx, pktgaldxb, pktgaldx, pktgaldxb_state, empty_init, ROT0, "bootleg", "Pocket Gal Deluxe (Euro v3.00, bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )

View File

@ -1,81 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood, Bryan McPhail
/*************************************************************************
Pocket Gal Deluxe
*************************************************************************/
#ifndef MAME_INCLUDES_PKTGALDX_H
#define MAME_INCLUDES_PKTGALDX_H
#pragma once
#include "sound/okim6295.h"
#include "decospr.h"
#include "deco16ic.h"
#include "deco104.h"
#include "emupal.h"
class pktgaldx_state : public driver_device
{
public:
pktgaldx_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_deco104(*this, "ioprot104"),
m_pf1_rowscroll(*this, "pf1_rowscroll"),
m_pf2_rowscroll(*this, "pf2_rowscroll"),
m_spriteram(*this, "spriteram"),
m_pktgaldb_fgram(*this, "pktgaldb_fgram"),
m_pktgaldb_sprites(*this, "pktgaldb_spr"),
m_sprgen(*this, "spritegen"),
m_maincpu(*this, "maincpu"),
m_oki2(*this, "oki2"),
m_deco_tilegen(*this, "tilegen"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_decrypted_opcodes(*this, "decrypted_opcodes")
{ }
void pktgaldx(machine_config &config);
void pktgaldb(machine_config &config);
void init_pktgaldx();
private:
optional_device<deco104_device> m_deco104;
/* memory pointers */
optional_shared_ptr<uint16_t> m_pf1_rowscroll;
optional_shared_ptr<uint16_t> m_pf2_rowscroll;
optional_shared_ptr<uint16_t> m_spriteram;
optional_shared_ptr<uint16_t> m_pktgaldb_fgram;
optional_shared_ptr<uint16_t> m_pktgaldb_sprites;
optional_device<decospr_device> m_sprgen;
/* devices */
required_device<cpu_device> m_maincpu;
required_device<okim6295_device> m_oki2;
optional_device<deco16ic_device> m_deco_tilegen;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
optional_shared_ptr<uint16_t> m_decrypted_opcodes;
uint16_t pckgaldx_unknown_r();
uint16_t pckgaldx_protection_r();
void pktgaldx_oki_bank_w(uint16_t data);
virtual void machine_start() override;
uint32_t screen_update_pktgaldx(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_pktgaldb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint16_t pktgaldx_protection_region_f_104_r(offs_t offset);
void pktgaldx_protection_region_f_104_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
DECLARE_WRITE_LINE_MEMBER( vblank_w );
void vblank_ack_w(uint16_t data);
DECO16IC_BANK_CB_MEMBER(bank_callback);
void decrypted_opcodes_map(address_map &map);
void pktgaldb_map(address_map &map);
void pktgaldx_map(address_map &map);
};
#endif // MAME_INCLUDES_PKTGALDX_H

View File

@ -1,82 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood, Bryan McPhail
#include "emu.h"
#include "pktgaldx.h"
#include "screen.h"
/* Video on the orginal */
uint32_t pktgaldx_state::screen_update_pktgaldx(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
uint16_t flip = m_deco_tilegen->pf_control_r(0);
// sprites are flipped relative to tilemaps
flip_screen_set(BIT(flip, 7));
m_sprgen->set_flip_screen(!BIT(flip, 7));
m_deco_tilegen->pf_update(m_pf1_rowscroll, m_pf2_rowscroll);
bitmap.fill(0, cliprect); /* not Confirmed */
screen.priority().fill(0);
m_deco_tilegen->tilemap_2_draw(screen, bitmap, cliprect, 0, 0);
m_sprgen->draw_sprites(bitmap, cliprect, m_spriteram, 0x400);
m_deco_tilegen->tilemap_1_draw(screen, bitmap, cliprect, 0, 0);
return 0;
}
/* Video for the bootleg */
uint32_t pktgaldx_state::screen_update_pktgaldb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int x, y;
int offset = 0;
int tileno;
int colour;
bitmap.fill(m_palette->black_pen(), cliprect);
/* the bootleg seems to treat the tilemaps as sprites */
for (offset = 0; offset < 0x1600 / 2; offset += 8)
{
tileno = m_pktgaldb_sprites[offset + 3] | (m_pktgaldb_sprites[offset + 2] << 16);
colour = m_pktgaldb_sprites[offset + 1] >> 1;
x = m_pktgaldb_sprites[offset + 0];
y = m_pktgaldb_sprites[offset + 4];
x -= 0xc2;
y &= 0x1ff;
y -= 8;
m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, tileno ^ 0x1000, colour, 0, 0, x, y, 0);
}
for (offset = 0x1600/2; offset < 0x2000 / 2; offset += 8)
{
tileno = m_pktgaldb_sprites[offset + 3] | (m_pktgaldb_sprites[offset + 2] << 16);
colour = m_pktgaldb_sprites[offset + 1] >> 1;
x = m_pktgaldb_sprites[offset + 0] & 0x1ff;
y = m_pktgaldb_sprites[offset + 4] & 0x0ff;
x -= 0xc2;
y &= 0x1ff;
y -= 8;
m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, tileno ^ 0x4000, colour, 0, 0, x, y, 0);
}
for (offset = 0x2000/2; offset < 0x4000 / 2; offset += 8)
{
tileno = m_pktgaldb_sprites[offset + 3] | (m_pktgaldb_sprites[offset + 2] << 16);
colour = m_pktgaldb_sprites[offset + 1] >> 1;
x = m_pktgaldb_sprites[offset + 0] & 0x1ff;
y = m_pktgaldb_sprites[offset + 4] & 0x0ff;
x -= 0xc2;
y &= 0x1ff;
y -= 8;
m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, tileno ^ 0x3000, colour, 0, 0, x, y, 0);
}
return 0;
}

View File

@ -9,24 +9,190 @@
Notes:
-----
- If you activate the service mode dip switch during the gameplay, it acts like invicibility
either for player 1 and player 2. It works for all sets.
- If you activate the service mode dip switch during the gameplay, it acts
like invincibility either for player 1 and player 2. It works for all sets.
Emulation by Bryan McPhail, mish@tendril.co.uk
added pal & prom-maps - Highwayman.
***************************************************************************/
#include "emu.h"
#include "vaportra.h"
#include "decmxc06.h"
#include "deco16ic.h"
#include "cpu/h6280/h6280.h"
#include "cpu/m68000/m68000.h"
#include "machine/gen_latch.h"
#include "sound/okim6295.h"
#include "sound/ymopm.h"
#include "sound/ymopn.h"
#include "video/bufsprite.h"
#include "emupal.h"
#include "screen.h"
#include "speaker.h"
class vaportra_state : public driver_device
{
public:
vaportra_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu")
, m_deco_tilegen(*this, "tilegen%u", 1U)
, m_spritegen(*this, "spritegen")
, m_spriteram(*this, "spriteram")
, m_gfxdecode(*this, "gfxdecode")
, m_palette(*this, "colors")
, m_soundlatch(*this, "soundlatch")
, m_paletteram(*this, "palette")
, m_paletteram_ext(*this, "palette_ext")
{ }
void vaportra(machine_config &config);
virtual void driver_init() override;
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
private:
// devices
required_device<cpu_device> m_maincpu;
required_device<h6280_device> m_audiocpu;
required_device_array<deco16ic_device, 2> m_deco_tilegen;
required_device<deco_mxc06_device> m_spritegen;
required_device<buffered_spriteram16_device> m_spriteram;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<generic_latch_8_device> m_soundlatch;
required_shared_ptr<uint16_t> m_paletteram;
required_shared_ptr<uint16_t> m_paletteram_ext;
// misc
uint16_t m_priority[2]{};
uint8_t irq6_ack_r();
void irq6_ack_w(uint8_t data);
void priority_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
void palette_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
void palette_ext_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
void colpri_cb(u32 &colour, u32 &pri_mask);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void update_palette( int offset );
DECO16IC_BANK_CB_MEMBER(bank_callback);
void main_map(address_map &map);
void sound_map(address_map &map);
};
// video
/****************************************************************************
2 Data East 55 chips for playfields (same as Dark Seal, etc)
1 Data East MXC-06 chip for sprites (same as Bad Dudes, etc)
***************************************************************************/
/******************************************************************************/
void vaportra_state::priority_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
COMBINE_DATA(&m_priority[offset]);
}
/******************************************************************************/
void vaportra_state::update_palette( int offset )
{
uint8_t r, g, b;
// TODO : Values aren't written in game when higher than 0xf0,
// It's related to hardware colour resistors?
r = (m_paletteram[offset] >> 0) & 0xff;
g = (m_paletteram[offset] >> 8) & 0xff;
b = (m_paletteram_ext[offset] >> 0) & 0xff;
m_palette->set_pen_color(offset, rgb_t(r,g,b));
}
void vaportra_state::palette_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
COMBINE_DATA(&m_paletteram[offset]);
update_palette(offset);
}
void vaportra_state::palette_ext_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
COMBINE_DATA(&m_paletteram_ext[offset]);
update_palette(offset);
}
/******************************************************************************/
void vaportra_state::colpri_cb(u32 &colour, u32 &pri_mask)
{
pri_mask = 0; // above back, mid, foreground
if (colour >= m_priority[1])
{
pri_mask |= GFX_PMASK_4; // behind foreground
}
}
uint32_t vaportra_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
uint16_t const flip = m_deco_tilegen[0]->pf_control_r(0);
int const pri = m_priority[0] & 0x03;
screen.priority().fill(0, cliprect);
flip_screen_set(!BIT(flip, 7));
m_deco_tilegen[0]->pf_update(nullptr, nullptr);
m_deco_tilegen[1]->pf_update(nullptr, nullptr);
m_spritegen->set_flip_screen(!BIT(flip, 7));
// Draw playfields
if (pri == 0)
{
m_deco_tilegen[1]->tilemap_2_draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
m_deco_tilegen[1]->tilemap_1_draw(screen, bitmap, cliprect, 0, 2);
m_deco_tilegen[0]->tilemap_2_draw(screen, bitmap, cliprect, 0, 4);
}
else if (pri == 1)
{
m_deco_tilegen[1]->tilemap_1_draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
m_deco_tilegen[1]->tilemap_2_draw(screen, bitmap, cliprect, 0, 2);
m_deco_tilegen[0]->tilemap_2_draw(screen, bitmap, cliprect, 0, 4);
}
else if (pri == 2)
{
m_deco_tilegen[1]->tilemap_2_draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
m_deco_tilegen[0]->tilemap_2_draw(screen, bitmap, cliprect, 0, 2);
m_deco_tilegen[1]->tilemap_1_draw(screen, bitmap, cliprect, 0, 4);
}
else
{
m_deco_tilegen[1]->tilemap_1_draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
m_deco_tilegen[0]->tilemap_2_draw(screen, bitmap, cliprect, 0, 2);
m_deco_tilegen[1]->tilemap_2_draw(screen, bitmap, cliprect, 0, 4);
}
m_spritegen->draw_sprites(screen, bitmap, cliprect, m_gfxdecode->gfx(4), m_spriteram->buffer(), 0x800 / 2);
m_deco_tilegen[0]->tilemap_1_draw(screen, bitmap, cliprect, 0, 0);
return 0;
}
// machine
/******************************************************************************/
uint8_t vaportra_state::irq6_ack_r()
@ -57,8 +223,8 @@ void vaportra_state::main_map(address_map &map)
map(0x280000, 0x281fff).rw(m_deco_tilegen[0], FUNC(deco16ic_device::pf1_data_r), FUNC(deco16ic_device::pf1_data_w));
map(0x282000, 0x283fff).rw(m_deco_tilegen[0], FUNC(deco16ic_device::pf2_data_r), FUNC(deco16ic_device::pf2_data_w));
map(0x2c0000, 0x2c000f).w(m_deco_tilegen[0], FUNC(deco16ic_device::pf_control_w));
map(0x300000, 0x3009ff).ram().w(FUNC(vaportra_state::palette_w)).share("palette");
map(0x304000, 0x3049ff).ram().w(FUNC(vaportra_state::palette_ext_w)).share("palette_ext");
map(0x300000, 0x3009ff).ram().w(FUNC(vaportra_state::palette_w)).share(m_paletteram);
map(0x304000, 0x3049ff).ram().w(FUNC(vaportra_state::palette_ext_w)).share(m_paletteram_ext);
map(0x308001, 0x308001).rw(FUNC(vaportra_state::irq6_ack_r), FUNC(vaportra_state::irq6_ack_w));
map(0x30c000, 0x30c001).w(m_spriteram, FUNC(buffered_spriteram16_device::write));
map(0x318000, 0x3187ff).mirror(0xce0000).ram().share("spriteram");
@ -182,11 +348,11 @@ static const gfx_layout tilelayout =
};
static GFXDECODE_START( gfx_vaportra )
GFXDECODE_ENTRY( "gfx1", 0x000000, charlayout, 0x000, 0x500 ) /* Characters 8x8 */
GFXDECODE_ENTRY( "gfx1", 0x000000, tilelayout, 0x000, 0x500 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "gfx2", 0x000000, charlayout, 0x000, 0x500 ) /* Characters 8x8 */
GFXDECODE_ENTRY( "gfx2", 0x000000, tilelayout, 0x000, 0x500 ) /* Tiles 16x16 */ // ok
GFXDECODE_ENTRY( "gfx3", 0x000000, tilelayout, 0x100, 16 ) /* Sprites 16x16 */
GFXDECODE_ENTRY( "tiles1", 0x000000, charlayout, 0x000, 0x500 ) // Characters 8x8
GFXDECODE_ENTRY( "tiles1", 0x000000, tilelayout, 0x000, 0x500 ) // Tiles 16x16
GFXDECODE_ENTRY( "tiles2", 0x000000, charlayout, 0x000, 0x500 ) // Characters 8x8
GFXDECODE_ENTRY( "tiles2", 0x000000, tilelayout, 0x000, 0x500 ) // Tiles 16x16 // ok
GFXDECODE_ENTRY( "sprites", 0x000000, tilelayout, 0x100, 16 ) // 16x16
GFXDECODE_END
/******************************************************************************/
@ -209,17 +375,17 @@ void vaportra_state::machine_reset()
void vaportra_state::vaportra(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(24'000'000)/2); /* Custom chip 59 */
// basic machine hardware
M68000(config, m_maincpu, XTAL(24'000'000) / 2); // Custom chip 59
m_maincpu->set_addrmap(AS_PROGRAM, &vaportra_state::main_map);
m_maincpu->set_vblank_int("screen", FUNC(vaportra_state::irq6_line_assert));
H6280(config, m_audiocpu, XTAL(24'000'000)/4); /* Custom chip 45; Audio section crystal is 32.220 MHz but CPU clock is confirmed as coming from the 24MHz crystal (6Mhz exactly on the CPU) */
H6280(config, m_audiocpu, XTAL(24'000'000) / 4); // Custom chip 45; Audio section crystal is 32.220 MHz but CPU clock is confirmed as coming from the 24MHz crystal (6Mhz exactly on the CPU)
m_audiocpu->set_addrmap(AS_PROGRAM, &vaportra_state::sound_map);
m_audiocpu->add_route(ALL_OUTPUTS, "mono", 0); // internal sound unused
m_audiocpu->set_timer_scale(2);
/* video hardware */
// video hardware
BUFFERED_SPRITERAM16(config, m_spriteram);
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
@ -260,53 +426,53 @@ void vaportra_state::vaportra(machine_config &config)
m_deco_tilegen[1]->set_gfxdecode_tag(m_gfxdecode);
DECO_MXC06(config, m_spritegen, 0);
m_spritegen->set_colpri_callback(FUNC(vaportra_state::vaportra_colpri_cb));
m_spritegen->set_colpri_callback(FUNC(vaportra_state::colpri_cb));
/* sound hardware */
// sound hardware
SPEAKER(config, "mono").front_center();
GENERIC_LATCH_8(config, m_soundlatch);
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0);
YM2203(config, "ym1", XTAL(32'220'000)/8).add_route(ALL_OUTPUTS, "mono", 0.60);
YM2203(config, "ym1", XTAL(32'220'000) / 8).add_route(ALL_OUTPUTS, "mono", 0.60);
ym2151_device &ym2(YM2151(config, "ym2", XTAL(32'220'000)/9)); // uses a preset LS163 to force the odd speed
ym2.irq_handler().set_inputline(m_audiocpu, 1); /* IRQ2 */
ym2151_device &ym2(YM2151(config, "ym2", XTAL(32'220'000) / 9)); // uses a preset LS163 to force the odd speed
ym2.irq_handler().set_inputline(m_audiocpu, 1); // IRQ2
ym2.add_route(0, "mono", 0.60);
ym2.add_route(1, "mono", 0.60);
OKIM6295(config, "oki1", XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.75);
OKIM6295(config, "oki1", XTAL(32'220'000) / 32, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.75);
OKIM6295(config, "oki2", XTAL(32'220'000)/16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60);
OKIM6295(config, "oki2", XTAL(32'220'000) / 16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60);
}
/******************************************************************************/
ROM_START( vaportra )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */
ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "fl_02-1.bin", 0x00000, 0x20000, CRC(9ae36095) SHA1(c8d11a6033a44277a267915b4ca471c43acd1143) )
ROM_LOAD16_BYTE( "fl_00-1.bin", 0x00001, 0x20000, CRC(c08cc048) SHA1(b28f95856817b8a8cb6cc588d48e95196cbf52fd) )
ROM_LOAD16_BYTE( "fl_03.bin", 0x40000, 0x20000, CRC(80bd2844) SHA1(3fcaa409c7134388fa9458df8e8aaecc93f085e6) )
ROM_LOAD16_BYTE( "fl_01.bin", 0x40001, 0x20000, CRC(9474b085) SHA1(5510309ddab5fbf1dbb0a7b1e424a5dff5ec263d) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "fj04", 0x00000, 0x10000, CRC(e9aedf9b) SHA1(f7bcf8f666015140aaad8ee5cf619636934b7066) )
ROM_REGION( 0x080000, "gfx1", 0 )
ROM_LOAD( "vtmaa00.bin", 0x000000, 0x80000, CRC(0330e13b) SHA1(dce70667ea738295332556752d1305c5e941b383) ) /* chars & tiles */
ROM_REGION( 0x080000, "tiles1", 0 ) // chars & tiles
ROM_LOAD( "vtmaa00.bin", 0x000000, 0x80000, CRC(0330e13b) SHA1(dce70667ea738295332556752d1305c5e941b383) )
ROM_REGION( 0x100000, "gfx2", 0 )
ROM_LOAD( "vtmaa02.bin", 0x000000, 0x80000, CRC(091ff98e) SHA1(814dc08c055bad5368955a4b1fe6a706b58adc02) ) /* tiles 3 */
ROM_LOAD( "vtmaa01.bin", 0x080000, 0x80000, CRC(c217a31b) SHA1(e259d48190d6890781fb0338e17e14822876babb) ) /* tiles 2 */
ROM_REGION( 0x100000, "tiles2", 0 )
ROM_LOAD( "vtmaa02.bin", 0x000000, 0x80000, CRC(091ff98e) SHA1(814dc08c055bad5368955a4b1fe6a706b58adc02) )
ROM_LOAD( "vtmaa01.bin", 0x080000, 0x80000, CRC(c217a31b) SHA1(e259d48190d6890781fb0338e17e14822876babb) )
ROM_REGION( 0x100000, "gfx3", 0 )
ROM_LOAD( "vtmaa03.bin", 0x000000, 0x80000, CRC(1a30bf81) SHA1(00e6c713e12133a99d64ca80638c9cbc8e26b2c8) ) /* sprites */
ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD( "vtmaa03.bin", 0x000000, 0x80000, CRC(1a30bf81) SHA1(00e6c713e12133a99d64ca80638c9cbc8e26b2c8) )
ROM_LOAD( "vtmaa04.bin", 0x080000, 0x80000, CRC(b713e9cc) SHA1(af33943d75d2ee3a7385f624537008dca9e1d5d8) )
ROM_REGION( 0x40000, "oki1", 0 ) /* ADPCM samples */
ROM_REGION( 0x40000, "oki1", 0 )
ROM_LOAD( "fj06", 0x00000, 0x20000, CRC(6e98a235) SHA1(374564b4e494d03cd1330c06e321b9452c22a075) )
ROM_REGION( 0x40000, "oki2", 0 ) /* ADPCM samples */
ROM_REGION( 0x40000, "oki2", 0 )
ROM_LOAD( "fj05", 0x00000, 0x20000, CRC(39cda2b5) SHA1(f5c5a305025d451ab48f84cd63e36a3bbdefda96) )
ROM_REGION( 0x200, "proms", 0 )
@ -321,33 +487,33 @@ ROM_START( vaportra )
ROM_END
ROM_START( vaportra3 ) // 74 bytes of 68k code have been changed compared to vaportra set
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */
ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "fl02-3.bin", 0x00000, 0x20000, CRC(6c59be54) SHA1(ce60be53fb2cc3a26a28e8632c8638771d3db3c9) ) // == fl_02-1.bin (99.973297%)
ROM_LOAD16_BYTE( "fl00-3.bin", 0x00001, 0x20000, CRC(69f8bef4) SHA1(7249d097c33adac9b42dd98d1328ad1c496ff927) ) // == fl_00-1.bin (99.970245%)
ROM_LOAD16_BYTE( "fl_03.bin", 0x40000, 0x20000, CRC(80bd2844) SHA1(3fcaa409c7134388fa9458df8e8aaecc93f085e6) )
ROM_LOAD16_BYTE( "fl_01.bin", 0x40001, 0x20000, CRC(9474b085) SHA1(5510309ddab5fbf1dbb0a7b1e424a5dff5ec263d) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "fj04", 0x00000, 0x10000, CRC(e9aedf9b) SHA1(f7bcf8f666015140aaad8ee5cf619636934b7066) )
ROM_REGION( 0x080000, "gfx1", 0 ) // original DE board with mask rom split into 4 roms
ROM_REGION( 0x080000, "tiles1", 0 ) // chars & tiles // original DE board with mask ROM split into 4 ROMs
ROM_LOAD16_BYTE( "fl23", 0x00000, 0x20000, CRC(6089f9e7) SHA1(a036068398a8e72c8fcf29fadaaad5a8930c2bfe) )
ROM_LOAD16_BYTE( "fl25", 0x00001, 0x20000, CRC(3989290a) SHA1(7d2d8a334d4c206298d806eac4f2cd46e7d4f918) )
ROM_LOAD16_BYTE( "fl24", 0x40000, 0x20000, CRC(41551bfa) SHA1(bc636fec6d610f651101656d6e9ad06656ce516a) )
ROM_LOAD16_BYTE( "fl26", 0x40001, 0x20000, CRC(dc67fa5c) SHA1(459a1ee059d6bb2fb2c6744fffeb25b915b29e67) )
ROM_REGION( 0x100000, "gfx2", 0 )
ROM_LOAD( "vtmaa02.bin", 0x000000, 0x80000, CRC(091ff98e) SHA1(814dc08c055bad5368955a4b1fe6a706b58adc02) ) /* tiles 3 */
ROM_LOAD( "vtmaa01.bin", 0x080000, 0x80000, CRC(c217a31b) SHA1(e259d48190d6890781fb0338e17e14822876babb) ) /* tiles 2 */
ROM_REGION( 0x100000, "tiles2", 0 )
ROM_LOAD( "vtmaa02.bin", 0x000000, 0x80000, CRC(091ff98e) SHA1(814dc08c055bad5368955a4b1fe6a706b58adc02) )
ROM_LOAD( "vtmaa01.bin", 0x080000, 0x80000, CRC(c217a31b) SHA1(e259d48190d6890781fb0338e17e14822876babb) )
ROM_REGION( 0x100000, "gfx3", 0 )
ROM_LOAD( "vtmaa03.bin", 0x000000, 0x80000, CRC(1a30bf81) SHA1(00e6c713e12133a99d64ca80638c9cbc8e26b2c8) ) /* sprites */
ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD( "vtmaa03.bin", 0x000000, 0x80000, CRC(1a30bf81) SHA1(00e6c713e12133a99d64ca80638c9cbc8e26b2c8) )
ROM_LOAD( "vtmaa04.bin", 0x080000, 0x80000, CRC(b713e9cc) SHA1(af33943d75d2ee3a7385f624537008dca9e1d5d8) )
ROM_REGION( 0x40000, "oki1", 0 ) /* ADPCM samples */
ROM_REGION( 0x40000, "oki1", 0 )
ROM_LOAD( "fj06", 0x00000, 0x20000, CRC(6e98a235) SHA1(374564b4e494d03cd1330c06e321b9452c22a075) )
ROM_REGION( 0x40000, "oki2", 0 ) /* ADPCM samples */
ROM_REGION( 0x40000, "oki2", 0 )
ROM_LOAD( "fj05", 0x00000, 0x20000, CRC(39cda2b5) SHA1(f5c5a305025d451ab48f84cd63e36a3bbdefda96) )
ROM_REGION( 0x200, "proms", 0 )
@ -362,30 +528,30 @@ ROM_START( vaportra3 ) // 74 bytes of 68k code have been changed compared to vap
ROM_END
ROM_START( vaportrau )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */
ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "fj02", 0x00000, 0x20000, CRC(a2affb73) SHA1(0d49397cc9891047a0b92e92e2e3d0e7fcaf8db9) )
ROM_LOAD16_BYTE( "fj00", 0x00001, 0x20000, CRC(ef05e07b) SHA1(0e505709fa251e6b30f019c0c28ee9ba2b29a50a) )
ROM_LOAD16_BYTE( "fj03", 0x40000, 0x20000, CRC(44893379) SHA1(da1340bc1821a552c317cb9a7c1ba69eb080b055) )
ROM_LOAD16_BYTE( "fj01", 0x40001, 0x20000, CRC(97fbc107) SHA1(b2899eb4347c0471397b83051e46c94dff3526f5) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "fj04", 0x00000, 0x10000, CRC(e9aedf9b) SHA1(f7bcf8f666015140aaad8ee5cf619636934b7066) )
ROM_REGION( 0x080000, "gfx1", 0 )
ROM_LOAD( "vtmaa00.bin", 0x000000, 0x80000, CRC(0330e13b) SHA1(dce70667ea738295332556752d1305c5e941b383) ) /* chars & tiles */
ROM_REGION( 0x080000, "tiles1", 0 ) // chars & tiles
ROM_LOAD( "vtmaa00.bin", 0x000000, 0x80000, CRC(0330e13b) SHA1(dce70667ea738295332556752d1305c5e941b383) )
ROM_REGION( 0x100000, "gfx2", 0 )
ROM_LOAD( "vtmaa02.bin", 0x000000, 0x80000, CRC(091ff98e) SHA1(814dc08c055bad5368955a4b1fe6a706b58adc02) ) /* tiles 3 */
ROM_LOAD( "vtmaa01.bin", 0x080000, 0x80000, CRC(c217a31b) SHA1(e259d48190d6890781fb0338e17e14822876babb) ) /* tiles 2 */
ROM_REGION( 0x100000, "tiles2", 0 )
ROM_LOAD( "vtmaa02.bin", 0x000000, 0x80000, CRC(091ff98e) SHA1(814dc08c055bad5368955a4b1fe6a706b58adc02) )
ROM_LOAD( "vtmaa01.bin", 0x080000, 0x80000, CRC(c217a31b) SHA1(e259d48190d6890781fb0338e17e14822876babb) )
ROM_REGION( 0x100000, "gfx3", 0 )
ROM_LOAD( "vtmaa03.bin", 0x000000, 0x80000, CRC(1a30bf81) SHA1(00e6c713e12133a99d64ca80638c9cbc8e26b2c8) ) /* sprites */
ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD( "vtmaa03.bin", 0x000000, 0x80000, CRC(1a30bf81) SHA1(00e6c713e12133a99d64ca80638c9cbc8e26b2c8) )
ROM_LOAD( "vtmaa04.bin", 0x080000, 0x80000, CRC(b713e9cc) SHA1(af33943d75d2ee3a7385f624537008dca9e1d5d8) )
ROM_REGION( 0x40000, "oki1", 0 ) /* ADPCM samples */
ROM_REGION( 0x40000, "oki1", 0 )
ROM_LOAD( "fj06", 0x00000, 0x20000, CRC(6e98a235) SHA1(374564b4e494d03cd1330c06e321b9452c22a075) )
ROM_REGION( 0x40000, "oki2", 0 ) /* ADPCM samples */
ROM_REGION( 0x40000, "oki2", 0 )
ROM_LOAD( "fj05", 0x00000, 0x20000, CRC(39cda2b5) SHA1(f5c5a305025d451ab48f84cd63e36a3bbdefda96) )
ROM_REGION( 0x200, "proms", 0 )
@ -400,438 +566,49 @@ ROM_START( vaportrau )
ROM_END
ROM_START( kuhga )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */
ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "fp02-3.bin", 0x00000, 0x20000, CRC(d0705ef4) SHA1(781efbf36d9dda543895e0a59cd4d72667439a93) )
ROM_LOAD16_BYTE( "fp00-3.bin", 0x00001, 0x20000, CRC(1da92e48) SHA1(6507bd9bbc31ee03e38b82cc135aebf090902761) )
ROM_LOAD16_BYTE( "fp03.bin", 0x40000, 0x20000, CRC(ea0da0f1) SHA1(ca40e694cb0aa0c13672c14fd4a389bc6d26cbc6) )
ROM_LOAD16_BYTE( "fp01.bin", 0x40001, 0x20000, CRC(e3ecbe86) SHA1(382e959111ec37ad94da8fd6dcefe2d2aab346b6) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "fj04", 0x00000, 0x10000, CRC(e9aedf9b) SHA1(f7bcf8f666015140aaad8ee5cf619636934b7066) )
ROM_REGION( 0x080000, "gfx1", 0 )
ROM_LOAD( "vtmaa00.bin", 0x000000, 0x80000, CRC(0330e13b) SHA1(dce70667ea738295332556752d1305c5e941b383) ) /* chars & tiles */
ROM_REGION( 0x080000, "tiles1", 0 ) // chars & tiles
ROM_LOAD( "vtmaa00.bin", 0x000000, 0x80000, CRC(0330e13b) SHA1(dce70667ea738295332556752d1305c5e941b383) )
ROM_REGION( 0x100000, "gfx2", 0 )
ROM_LOAD( "vtmaa02.bin", 0x000000, 0x80000, CRC(091ff98e) SHA1(814dc08c055bad5368955a4b1fe6a706b58adc02) ) /* tiles 3 */
ROM_LOAD( "vtmaa01.bin", 0x080000, 0x80000, CRC(c217a31b) SHA1(e259d48190d6890781fb0338e17e14822876babb) ) /* tiles 2 */
ROM_REGION( 0x100000, "tiles2", 0 )
ROM_LOAD( "vtmaa02.bin", 0x000000, 0x80000, CRC(091ff98e) SHA1(814dc08c055bad5368955a4b1fe6a706b58adc02) )
ROM_LOAD( "vtmaa01.bin", 0x080000, 0x80000, CRC(c217a31b) SHA1(e259d48190d6890781fb0338e17e14822876babb) )
ROM_REGION( 0x100000, "gfx3", 0 )
ROM_LOAD( "vtmaa03.bin", 0x000000, 0x80000, CRC(1a30bf81) SHA1(00e6c713e12133a99d64ca80638c9cbc8e26b2c8) ) /* sprites */
ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD( "vtmaa03.bin", 0x000000, 0x80000, CRC(1a30bf81) SHA1(00e6c713e12133a99d64ca80638c9cbc8e26b2c8) )
ROM_LOAD( "vtmaa04.bin", 0x080000, 0x80000, CRC(b713e9cc) SHA1(af33943d75d2ee3a7385f624537008dca9e1d5d8) )
ROM_REGION( 0x40000, "oki1", 0 ) /* ADPCM samples */
ROM_REGION( 0x40000, "oki1", 0 )
ROM_LOAD( "fj06", 0x00000, 0x20000, CRC(6e98a235) SHA1(374564b4e494d03cd1330c06e321b9452c22a075) )
ROM_REGION( 0x40000, "oki2", 0 ) /* ADPCM samples */
ROM_REGION( 0x40000, "oki2", 0 )
ROM_LOAD( "fj05", 0x00000, 0x20000, CRC(39cda2b5) SHA1(f5c5a305025d451ab48f84cd63e36a3bbdefda96) )
ROM_REGION( 0x200, "proms", 0 )
ROM_LOAD( "fj-27.bin", 0x00000, 0x00200, CRC(65045742) SHA1(5dfb6c85a70b208cd16d3bf8ec1897e77f4a9b7d) )
ROM_END
/*
Pals
----
Fuse Plot - 1
?
PAL16L8/A/A-2/A-4
*
DD PAL16L8/A/A-2/A-4*
QP20*
QF2048*
G0*
F0*
L0 11111111111111111111111111111111*
L32 10111011101110111111111111111111*
L64 00000000000000000000000000000000*
L96 00000000000000000000000000000000*
L128 00000000000000000000000000000000*
L160 00000000000000000000000000000000*
L192 00000000000000000000000000000000*
L224 00000000000000000000000000000000*
L256 11111111111111111111111111111111*
L288 10101011101101111111111111111111*
L320 00000000000000000000000000000000*
L352 00000000000000000000000000000000*
L384 00000000000000000000000000000000*
L416 00000000000000000000000000000000*
L448 00000000000000000000000000000000*
L480 00000000000000000000000000000000*
L512 11111111111111111111111111111111*
L544 10011011101101111111111111111111*
L576 00000000000000000000000000000000*
L608 00000000000000000000000000000000*
L640 00000000000000000000000000000000*
L672 00000000000000000000000000000000*
L704 00000000000000000000000000000000*
L736 00000000000000000000000000000000*
L768 11111111111111111111111111111111*
L800 01011011101101111111111111111111*
L832 00000000000000000000000000000000*
L864 00000000000000000000000000000000*
L896 00000000000000000000000000000000*
L928 00000000000000000000000000000000*
L960 00000000000000000000000000000000*
L992 00000000000000000000000000000000*
L1024 11111111111111111111111111111111*
L1056 01101011101101111111111111111111*
L1088 00000000000000000000000000000000*
L1120 00000000000000000000000000000000*
L1152 00000000000000000000000000000000*
L1184 00000000000000000000000000000000*
L1216 00000000000000000000000000000000*
L1248 00000000000000000000000000000000*
L1280 11111111111111111111111111111111*
L1312 10100111101101111111111111111111*
L1344 00000000000000000000000000000000*
L1376 00000000000000000000000000000000*
L1408 00000000000000000000000000000000*
L1440 00000000000000000000000000000000*
L1472 00000000000000000000000000000000*
L1504 00000000000000000000000000000000*
L1536 11111111111111111111111111111111*
L1568 11111111111111111011111110111111*
L1600 00000000000000000000000000000000*
L1632 00000000000000000000000000000000*
L1664 00000000000000000000000000000000*
L1696 00000000000000000000000000000000*
L1728 00000000000000000000000000000000*
L1760 00000000000000000000000000000000*
L1792 11111111111111111111111111111111*
L1824 11111111111111111111101110111111*
L1856 00000000000000000000000000000000*
L1888 00000000000000000000000000000000*
L1920 00000000000000000000000000000000*
L1952 00000000000000000000000000000000*
L1984 00000000000000000000000000000000*
L2016 00000000000000000000000000000000*
C3E44*
?
Fuse Plot - TD0
?
PAL16L8B/D/H-15
*
DD PAL16L8B/D/H-15*
QP20*
QF2048*
G0*
F0*
L0 11111111111111111111111111111111*
L32 10101111111111111111111111111111*
L64 00000000000000000000000000000000*
L96 00000000000000000000000000000000*
L128 00000000000000000000000000000000*
L160 00000000000000000000000000000000*
L192 00000000000000000000000000000000*
L224 00000000000000000000000000000000*
L256 11111111111111111111111111111111*
L288 11111111111110111111111111111111*
L320 11111111111111111011111111111111*
L352 11111111111111111111101111111111*
L384 00000000000000000000000000000000*
L416 00000000000000000000000000000000*
L448 00000000000000000000000000000000*
L480 00000000000000000000000000000000*
L512 11111111111111111111111111111111*
L544 11111111111111111111011111101111*
L576 00000000000000000000000000000000*
L608 00000000000000000000000000000000*
L640 00000000000000000000000000000000*
L672 00000000000000000000000000000000*
L704 00000000000000000000000000000000*
L736 00000000000000000000000000000000*
L768 11111111111111111111111111111111*
L800 11111111111111111111101111101111*
L832 00000000000000000000000000000000*
L864 00000000000000000000000000000000*
L896 00000000000000000000000000000000*
L928 00000000000000000000000000000000*
L960 00000000000000000000000000000000*
L992 00000000000000000000000000000000*
L1024 11111111111111111111111111111111*
L1056 10011111101111111111111111111111*
L1088 00000000000000000000000000000000*
L1120 00000000000000000000000000000000*
L1152 00000000000000000000000000000000*
L1184 00000000000000000000000000000000*
L1216 00000000000000000000000000000000*
L1248 00000000000000000000000000000000*
L1280 11111111111111111111111111111111*
L1312 01011111101111111111111111111111*
L1344 00000000000000000000000000000000*
L1376 00000000000000000000000000000000*
L1408 00000000000000000000000000000000*
L1440 00000000000000000000000000000000*
L1472 00000000000000000000000000000000*
L1504 00000000000000000000000000000000*
L1536 11111111111111111111111111111111*
L1568 01101111101111111111111111111111*
L1600 00000000000000000000000000000000*
L1632 00000000000000000000000000000000*
L1664 00000000000000000000000000000000*
L1696 00000000000000000000000000000000*
L1728 00000000000000000000000000000000*
L1760 00000000000000000000000000000000*
L1792 11111111111111111111111111111111*
L1824 10100111111111111111111111111111*
L1856 11111111111111111111111110111011*
L1888 10011111101111111111111111111111*
L1920 01011111101111111111111111111111*
L1952 00000000000000000000000000000000*
L1984 00000000000000000000000000000000*
L2016 00000000000000000000000000000000*
C52BB*
?
Fuse Plot - TD1
?
PAL16L8B/D/H-15
*
DD PAL16L8B/D/H-15*
QP20*
QF2048*
G0*
F0*
L0 11111111111111111111111111111111*
L32 10111011111111111111111111111111*
L64 00000000000000000000000000000000*
L96 00000000000000000000000000000000*
L128 00000000000000000000000000000000*
L160 00000000000000000000000000000000*
L192 00000000000000000000000000000000*
L224 00100000000000000000000000000000*
L256 11111111111111111111111111111111*
L288 11101111101110111111111111111111*
L320 00000000000000000000000000000000*
L352 00000000000000000000000000000000*
L384 00000000000000000000000000000000*
L416 00000000000000000000000000000000*
L448 00000000000000000000000000000000*
L480 00000000000000000000000000000000*
L512 11111111111111111111111111111111*
L544 11101111011110111111111111111111*
L576 00000000000000000000000000000000*
L608 00000000000000000000000000000000*
L640 00000000000000000000000000000000*
L672 00000000000000000000000000000000*
L704 00000000000000000000000000000000*
L736 00100000000000000000000000000000*
L768 11111111111111111111111111111111*
L800 10111111101110111111111111111111*
L832 00000000000000000000000000000000*
L864 00000000000000000000000000000000*
L896 00000000000000000000000000000000*
L928 00000000000000000000000000000000*
L960 00000000000000000000000000000000*
L992 00000000000000000000000000000000*
L1024 11111111111111111111111111111111*
L1056 10111111011110111111111111111111*
L1088 00000000000000000000000000000000*
L1120 00000000000000000000000000000000*
L1152 00000000000000000000000000000000*
L1184 00000000000000000000000000000000*
L1216 00000000000000000000000000000000*
L1248 00000000000000000000000000000000*
L1280 11111111111111111111111111111111*
L1312 11100111111111111111111111111111*
L1344 00000000000000000000000000000000*
L1376 00000000000000000000000000000000*
L1408 00000000000000000000000000000000*
L1440 00000000000000000000000000000000*
L1472 00000000000000000000000000000000*
L1504 00000000000000000000000000000000*
L1536 11111111111111111111111111111111*
L1568 10110111111111111111111111111111*
L1600 00000000000000000000000000000000*
L1632 00000000000000000000000000000000*
L1664 00000000000000000000000000000000*
L1696 00000000000000000000000000000000*
L1728 00000000000000000000000000000000*
L1760 00000000000000000000000000000000*
L1792 11111111111111111111111111111111*
L1824 11101011111111111111111111111111*
L1856 00000000000000000000000000000000*
L1888 00000000000000000000000000000000*
L1920 00000000000000000000000000000000*
L1952 00000000000000000000000000000000*
L1984 00000000000000000000000000000000*
L2016 00000000000000000000000000000000*
C3EBA*
?
Fuse Plot - TD2
?
PAL16L8B/D/H-15
*
DD PAL16L8B/D/H-15*
QP20*
QF2048*
G0*
F0*
L0 11111111111111111111111111111111*
L32 11110111011110110111111111111111*
L64 00000000000000000000000000000000*
L96 00000000000000000000000000000000*
L128 00000000000000000000000000000000*
L160 00000000000000000000000000000000*
L192 00000000000000000000000000000000*
L224 00000000000000000000000000000000*
L256 11111111111111111111111111111111*
L288 11111011011110110111111111111111*
L320 00000000000000000000000000000000*
L352 00000000000000000000000000000000*
L384 00000000000000000000000000000000*
L416 00000000000000000000000000000000*
L448 00000000000000000000000000000000*
L480 00000000000000000000000000000000*
L512 11111111111111111111111111111111*
L544 11111011101110111011111111111111*
L576 00000000000000000000000000000000*
L608 00000000000000000000000000000000*
L640 00000000000000000000000000000000*
L672 00000000000000000000000000000000*
L704 00000000000000000000000000000000*
L736 00000000000000000000000000000000*
L768 11111111111111111111111111111111*
L800 11110111101110111011111111111111*
L832 00000000000000000000000000000000*
L864 00000000000000000000000000000000*
L896 00000000000000000000000000000000*
L928 00000000000000000000000000000000*
L960 00000000000000000000000000000000*
L992 00000000000000000000000000000000*
L1024 11111111111111111111111111111111*
L1056 11111011011110111011111111111111*
L1088 00000000000000000000000000000000*
L1120 00000000000000000000000000000000*
L1152 00000000000000000000000000000000*
L1184 00000000000000000000000000000000*
L1216 00000000000000000000000000000000*
L1248 00000000000000000000000000000000*
L1280 11111111111111111111111111111111*
L1312 11110111011110111011111111111111*
L1344 00000000000000000000000000000000*
L1376 00000000000000000000000000000000*
L1408 00000000000000000000000000000000*
L1440 00000000000000000000000000000000*
L1472 00000000000000000000000000000000*
L1504 00000000000000000000000000000000*
L1536 11111011101101111011111111111111*
L1568 11101111111111111111111111111111*
L1600 00000000000000000000000000000000*
L1632 00000000000000000000000000000000*
L1664 00000000000000000000000000000000*
L1696 00000000000000000000000000000000*
L1728 00000000000000000000000000000000*
L1760 00000000000000000000000000000000*
L1792 11111011101101111011111111111111*
L1824 10111111111111111111111111111111*
L1856 00000000000000000000000000000000*
L1888 00000000000000000000000000000000*
L1920 00000000000000000000000000000000*
L1952 00000000000000000000000000000000*
L1984 00000000000000000000000000000000*
L2016 00000000000000000000000000000000*
C3DEC*
?
Fuse Plot - TD3
?
PAL16L8B/D/H-15
*
DD PAL16L8B/D/H-15*
QP20*
QF2048*
G0*
F0*
L0 11111111111111111111111111111111*
L32 11111010111111111111111111111111*
L64 11111101111111111111111111111111*
L96 00000000000000000000000000000000*
L128 00000000000000000000000000000000*
L160 00000000000000000000000000000000*
L192 00000000000000000000000000000000*
L224 00000000000000000000000000000000*
L256 11111111111111111111111111111111*
L288 11111011111111111111111111111111*
L320 10111111111111111111111111111111*
L352 00000000000000000000000000000000*
L384 00000000000000000000000000000000*
L416 00000000000000000000000000000000*
L448 00000000000000000000000000000000*
L480 00000000000000000000000000000000*
L512 11111111111111111111111111111111*
L544 11111110111111111111111110111111*
L576 00000000000000000000000000000000*
L608 00000000000000000000000000000000*
L640 00000000000000000000000000000000*
L672 00000000000000000000000000000000*
L704 00000000000000000000000000000000*
L736 00000000000000000000000000000000*
L768 11111111111111111111111111111111*
L800 11111110111111111111101111111111*
L832 00000000000000000000000000000000*
L864 00000000000000000000000000000000*
L896 00000000000000000000000000000000*
L928 00000000000000000000000000000000*
L960 00000000000000000000000000000000*
L992 00000000000000000000000000000000*
L1024 11111111111111111111111111111111*
L1056 11111011111111111011111111111111*
L1088 00000000000000000000000000000000*
L1120 00000000000000000000000000000000*
L1152 00000000000000000000000000000000*
L1184 00000000000000000000000000000000*
L1216 00000000000000000000000000000000*
L1248 00000000000000000000000000000000*
L1280 11111111111111111111111111111111*
L1312 10111111111111111011111111111111*
L1344 00000000000000000000000000000000*
L1376 00000000000000000000000000000000*
L1408 00000000000000000000000000000000*
L1440 00000000000000000000000000000000*
L1472 00000000000000000000000000000000*
L1504 00000000000000000000000000000000*
L1536 11111111111111111111111111111111*
L1568 10111111111110111111111111111111*
L1600 00000000000000000000000000000000*
L1632 00000000000000000000000000000000*
L1664 00000000000000000000000000000000*
L1696 00000000000000000000000000000000*
L1728 00000000000000000000000000000000*
L1760 00000000000000000000000000000000*
L1792 00000000000000000000000000000000*
L1824 00000000000000000000000000000000*
L1856 00000000000000000000000000000000*
L1888 00000000000000000000000000000000*
L1920 00000000000000000000000000000000*
L1952 00000000000000000000000000000000*
L1984 00000000000000000000000000000000*
L2016 00000000000000000000000000000000*
C3D54*
?
*/
/******************************************************************************/
void vaportra_state::init_vaportra()
void vaportra_state::driver_init()
{
uint8_t *RAM = memregion("maincpu")->base();
uint8_t *rom = memregion("maincpu")->base();
for (int i = 0x00000; i < 0x80000; i++)
RAM[i] = bitswap<8>(RAM[i],0,6,5,4,3,2,1,7);
rom[i] = bitswap<8>(rom[i], 0, 6, 5, 4, 3, 2, 1, 7);
}
/******************************************************************************/
GAME( 1989, vaportra, 0, vaportra, vaportra, vaportra_state, init_vaportra, ROT270, "Data East Corporation", "Vapor Trail - Hyper Offence Formation (World revision 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, vaportra3, vaportra, vaportra, vaportra, vaportra_state, init_vaportra, ROT270, "Data East Corporation", "Vapor Trail - Hyper Offence Formation (World revision 3?)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, vaportrau, vaportra, vaportra, vaportra, vaportra_state, init_vaportra, ROT270, "Data East USA", "Vapor Trail - Hyper Offence Formation (US)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, kuhga, vaportra, vaportra, vaportra, vaportra_state, init_vaportra, ROT270, "Data East Corporation", "Kuhga - Operation Code 'Vapor Trail' (Japan revision 3)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, vaportra, 0, vaportra, vaportra, vaportra_state, driver_init, ROT270, "Data East Corporation", "Vapor Trail - Hyper Offence Formation (World revision 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, vaportra3, vaportra, vaportra, vaportra, vaportra_state, driver_init, ROT270, "Data East Corporation", "Vapor Trail - Hyper Offence Formation (World revision 3?)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, vaportrau, vaportra, vaportra, vaportra, vaportra_state, driver_init, ROT270, "Data East USA", "Vapor Trail - Hyper Offence Formation (US)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, kuhga, vaportra, vaportra, vaportra, vaportra_state, driver_init, ROT270, "Data East Corporation", "Kuhga - Operation Code 'Vapor Trail' (Japan revision 3)", MACHINE_SUPPORTS_SAVE )

View File

@ -1,77 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Bryan McPhail
/*************************************************************************
Vapor Trail
*************************************************************************/
#ifndef MAME_INCLUDES_VAPORTRA_H
#define MAME_INCLUDES_VAPORTRA_H
#pragma once
#include "cpu/h6280/h6280.h"
#include "machine/gen_latch.h"
#include "video/bufsprite.h"
#include "deco16ic.h"
#include "decmxc06.h"
#include "emupal.h"
class vaportra_state : public driver_device
{
public:
vaportra_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu")
, m_deco_tilegen(*this, "tilegen%u", 1U)
, m_spritegen(*this, "spritegen")
, m_spriteram(*this, "spriteram")
, m_gfxdecode(*this, "gfxdecode")
, m_palette(*this, "colors")
, m_soundlatch(*this, "soundlatch")
, m_paletteram(*this, "palette")
, m_paletteram_ext(*this, "palette_ext")
{ }
void vaportra(machine_config &config);
void init_vaportra();
private:
/* devices */
required_device<cpu_device> m_maincpu;
required_device<h6280_device> m_audiocpu;
required_device_array<deco16ic_device, 2> m_deco_tilegen;
required_device<deco_mxc06_device> m_spritegen;
required_device<buffered_spriteram16_device> m_spriteram;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<generic_latch_8_device> m_soundlatch;
required_shared_ptr<uint16_t> m_paletteram;
required_shared_ptr<uint16_t> m_paletteram_ext;
/* misc */
uint16_t m_priority[2]{};
uint8_t irq6_ack_r();
void irq6_ack_w(uint8_t data);
void priority_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
void palette_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
void palette_ext_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
virtual void machine_start() override;
virtual void machine_reset() override;
void vaportra_colpri_cb(u32 &colour, u32 &pri_mask);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void update_palette( int offset );
DECO16IC_BANK_CB_MEMBER(bank_callback);
void main_map(address_map &map);
void sound_map(address_map &map);
};
#endif // MAME_INCLUDES_VAPORTRA_H

View File

@ -1,103 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Bryan McPhail
/***************************************************************************
Vapour Trail Video emulation - Bryan McPhail, mish@tendril.co.uk
****************************************************************************
2 Data East 55 chips for playfields (same as Dark Seal, etc)
1 Data East MXC-06 chip for sprites (same as Bad Dudes, etc)
***************************************************************************/
#include "emu.h"
#include "vaportra.h"
/******************************************************************************/
void vaportra_state::priority_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
COMBINE_DATA(&m_priority[offset]);
}
/******************************************************************************/
void vaportra_state::update_palette( int offset )
{
uint8_t r, g, b;
// TODO : Values aren't write in game when higher than 0xf0,
// It's related from hardware colour resistors?
r = (m_paletteram[offset] >> 0) & 0xff;
g = (m_paletteram[offset] >> 8) & 0xff;
b = (m_paletteram_ext[offset] >> 0) & 0xff;
m_palette->set_pen_color(offset, rgb_t(r,g,b));
}
void vaportra_state::palette_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
COMBINE_DATA(&m_paletteram[offset]);
update_palette(offset);
}
void vaportra_state::palette_ext_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
COMBINE_DATA(&m_paletteram_ext[offset]);
update_palette(offset);
}
/******************************************************************************/
void vaportra_state::vaportra_colpri_cb(u32 &colour, u32 &pri_mask)
{
pri_mask = 0; // above back, mid, foreground
if (colour >= m_priority[1])
{
pri_mask |= GFX_PMASK_4; // behind foreground
}
}
uint32_t vaportra_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
uint16_t flip = m_deco_tilegen[0]->pf_control_r(0);
int pri = m_priority[0] & 0x03;
screen.priority().fill(0, cliprect);
flip_screen_set(!BIT(flip, 7));
m_deco_tilegen[0]->pf_update(nullptr, nullptr);
m_deco_tilegen[1]->pf_update(nullptr, nullptr);
m_spritegen->set_flip_screen(!BIT(flip, 7));
/* Draw playfields */
if (pri == 0)
{
m_deco_tilegen[1]->tilemap_2_draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
m_deco_tilegen[1]->tilemap_1_draw(screen, bitmap, cliprect, 0, 2);
m_deco_tilegen[0]->tilemap_2_draw(screen, bitmap, cliprect, 0, 4);
}
else if (pri == 1)
{
m_deco_tilegen[1]->tilemap_1_draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
m_deco_tilegen[1]->tilemap_2_draw(screen, bitmap, cliprect, 0, 2);
m_deco_tilegen[0]->tilemap_2_draw(screen, bitmap, cliprect, 0, 4);
}
else if (pri == 2)
{
m_deco_tilegen[1]->tilemap_2_draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
m_deco_tilegen[0]->tilemap_2_draw(screen, bitmap, cliprect, 0, 2);
m_deco_tilegen[1]->tilemap_1_draw(screen, bitmap, cliprect, 0, 4);
}
else
{
m_deco_tilegen[1]->tilemap_1_draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
m_deco_tilegen[0]->tilemap_2_draw(screen, bitmap, cliprect, 0, 2);
m_deco_tilegen[1]->tilemap_2_draw(screen, bitmap, cliprect, 0, 4);
}
m_spritegen->draw_sprites(screen, bitmap, cliprect, m_gfxdecode->gfx(4), m_spriteram->buffer(), 0x800 / 2);
m_deco_tilegen[0]->tilemap_1_draw(screen, bitmap, cliprect, 0, 0);
return 0;
}

View File

@ -295,31 +295,9 @@ INPUT_PORTS_END
GFX DECODING
**************************************************************/
static const gfx_layout charlayout =
{
16,16, /* 16*16 characters */
RGN_FRAC(1,1),
4, /* 4 bits per pixel */
{ STEP4(0,1) },
{ STEP16(0,4) },
{ STEP16(0,4*16) },
16*16*4 /* every sprite takes 128 consecutive bytes */
};
static const gfx_layout char_8x8_layout =
{
8,8, /* 8*8 characters */
RGN_FRAC(1,1),
4, /* 4 bits per pixel */
{ STEP4(0,1) },
{ STEP8(0,4) },
{ STEP8(0,4*8) },
8*8*4 /* every sprite takes 32 consecutive bytes */
};
static GFXDECODE_START( gfx_gcpinbal )
GFXDECODE_ENTRY( "bg0", 0, charlayout, 0, 0x60 ) // playfield
GFXDECODE_ENTRY( "fg0", 0, char_8x8_layout, 0x700, 0x10 ) // playfield
GFXDECODE_ENTRY( "bg0", 0, gfx_16x16x4_packed_msb, 0, 0x60 ) // playfield
GFXDECODE_ENTRY( "fg0", 0, gfx_8x8x4_packed_msb, 0x700, 0x10 ) // playfield
GFXDECODE_END

View File

@ -337,18 +337,6 @@ INPUT_PORTS_END
// graphics layouts
//-------------------------------------------------
/* 16x16x4 */
static const gfx_layout layout_16x16x4 =
{
16,16,
RGN_FRAC(1,1),
4,
{ STEP4(0,1) },
{ STEP16(0,4) },
{ STEP16(0,16*4) },
16*16*4
};
/* 16x16x8 */
static const gfx_layout layout_16x16x8 =
{
@ -362,7 +350,7 @@ static const gfx_layout layout_16x16x8 =
};
static GFXDECODE_START( gfx_fuuki16 )
GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x4, 0x400*0, 0x40 ) // [0] Layer 0
GFXDECODE_ENTRY( "gfx2", 0, gfx_16x16x4_packed_msb, 0x400*0, 0x40 ) // [0] Layer 0
GFXDECODE_ENTRY( "gfx3", 0, layout_16x16x8, 0x400*1, 0x40 ) // [1] Layer 1
GFXDECODE_ENTRY( "gfx4", 0, gfx_8x8x4_packed_msb, 0x400*3, 0x40 ) // [2] Layer 2
GFXDECODE_END

View File

@ -63,19 +63,8 @@ megasys1_tilemap_device::megasys1_tilemap_device(const machine_config &mconfig,
*
*************************************/
static const gfx_layout tilelayout =
{
8,8,
RGN_FRAC(1,1),
4,
{ STEP4(0,1) },
{ STEP8(0,4) },
{ STEP8(0,4*8) },
8*8*4
};
GFXDECODE_MEMBER(megasys1_tilemap_device::gfxinfo)
GFXDECODE_DEVICE(DEVICE_SELF, 0, tilelayout, 0, 16)
GFXDECODE_DEVICE(DEVICE_SELF, 0, gfx_8x8x4_packed_msb, 0, 16)
GFXDECODE_END
//-------------------------------------------------

View File

@ -570,17 +570,6 @@ INPUT_PORTS_END
Graphics Layout
***************************************************************************/
static const gfx_layout layout_16x16x4 =
{
16, 16,
RGN_FRAC(1, 1),
4,
{ STEP4(0,1) },
{ 4*1,4*0, 4*3,4*2, 4*5,4*4, 4*7,4*6, 4*9,4*8, 4*11,4*10, 4*13,4*12, 4*15,4*14 },
{ STEP16(0,16*4) },
16*16*4
};
static const gfx_layout layout_16x16x1 =
{
16, 16,
@ -593,9 +582,9 @@ static const gfx_layout layout_16x16x1 =
};
static GFXDECODE_START( gfx_quizpun2 )
GFXDECODE_ENTRY( "bg", 0, layout_16x16x4, 0, 256/16 )
GFXDECODE_ENTRY( "fg", 0, layout_16x16x1, 0x100, 256/2 )
GFXDECODE_ENTRY( "fg2", 0, layout_16x16x1, 0x100, 256/2 )
GFXDECODE_ENTRY( "bg", 0, gfx_16x16x4_packed_lsb, 0, 256/16 )
GFXDECODE_ENTRY( "fg", 0, layout_16x16x1 , 0x100, 256/2 )
GFXDECODE_ENTRY( "fg2", 0, layout_16x16x1, 0x100, 256/2 )
GFXDECODE_END
/***************************************************************************

View File

@ -160,19 +160,8 @@ INPUT_PORTS_END
/******************************************************************************/
static const gfx_layout charlayout =
{
8,8, /* 8*8 characters */
RGN_FRAC(1,1),
4, /* 4 bits per pixel */
{ STEP4(0,1) },
{ STEP8(0,4) },
{ STEP8(0,4*8) },
32*8 /* every char takes 32 consecutive bytes */
};
static GFXDECODE_START( gfx_prehisle )
GFXDECODE_ENTRY( "chars", 0, charlayout, 0, 16 )
GFXDECODE_ENTRY( "chars", 0, gfx_8x8x4_packed_msb, 0, 16 )
GFXDECODE_ENTRY( "bgtiles", 0, gfx_8x8x4_col_2x2_group_packed_msb, 768, 16 )
GFXDECODE_ENTRY( "fgtiles", 0, gfx_8x8x4_col_2x2_group_packed_msb, 512, 16 )
GFXDECODE_ENTRY( "sprites", 0, gfx_8x8x4_col_2x2_group_packed_msb, 256, 16 )