mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
Merge pull request #1195 from mamehaze/master
Street Fight and Cross Shooter (Street Fight type hw) use a common mo…
This commit is contained in:
commit
22f74309ed
@ -3285,9 +3285,12 @@ files {
|
||||
MAME_DIR .. "src/mame/video/seibuspi.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/sengokmj.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/stfight.cpp",
|
||||
MAME_DIR .. "src/mame/video/stfight_dev.cpp",
|
||||
MAME_DIR .. "src/mame/video/stfight_dev.h",
|
||||
MAME_DIR .. "src/mame/video/airraid_dev.cpp",
|
||||
MAME_DIR .. "src/mame/video/airraid_dev.h",
|
||||
MAME_DIR .. "src/mame/includes/stfight.h",
|
||||
MAME_DIR .. "src/mame/machine/stfight.cpp",
|
||||
MAME_DIR .. "src/mame/video/stfight.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/toki.cpp",
|
||||
MAME_DIR .. "src/mame/includes/toki.h",
|
||||
MAME_DIR .. "src/mame/video/toki.cpp",
|
||||
|
@ -1,6 +1,9 @@
|
||||
// license:LGPL-2.1+
|
||||
// copyright-holders:Tomasz Slanina, Angelo Salese, hap
|
||||
/* Cross Shooter (c) 1987 Seibu
|
||||
/* Air Raid (aka Cross Shooter) (c) 1987 Seibu
|
||||
|
||||
this driver is for the single board version on the S-0087-011A-0 PCB
|
||||
for the version using a S-0086-002-B0 base PCB and separate video board see stfight.cpp
|
||||
|
||||
Custom Modules note:
|
||||
|
||||
@ -54,13 +57,6 @@ Stephh's notes (based on the game Z80 code and some tests) :
|
||||
the error.log file.
|
||||
|
||||
|
||||
- Interrupts notes :
|
||||
|
||||
* I think that they aren't handled correctly : after a few frames,
|
||||
the number of lives are reset to 0, causing a "GAME OVER" 8(
|
||||
* - or is this protection from the 68705, haze
|
||||
|
||||
|
||||
- Inputs notes :
|
||||
|
||||
* COINx don't work correcly : see "cshooter_coin_r" read handler.
|
||||
@ -155,256 +151,47 @@ Stephh's notes (based on the game Z80 code and some tests) :
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "audio/seibu.h"
|
||||
#include "video/airraid_dev.h"
|
||||
|
||||
|
||||
class cshooter_state : public driver_device
|
||||
class airraid_state : public driver_device
|
||||
{
|
||||
public:
|
||||
cshooter_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
airraid_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_seibu_sound(*this, "seibu_sound"),
|
||||
m_txram(*this, "txram"),
|
||||
m_vregs(*this, "vregs"),
|
||||
m_mainram(*this, "mainram"),
|
||||
m_spriteram(*this, "spriteram"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_screen(*this, "screen"),
|
||||
m_palette(*this, "palette"),
|
||||
m_decrypted_opcodes(*this, "decrypted_opcodes"),
|
||||
m_tx_clut(*this, "tx_clut"),
|
||||
m_fg_clut(*this, "fg_clut"),
|
||||
m_bg_clut(*this, "bg_clut"),
|
||||
m_spr_clut(*this, "spr_clut")
|
||||
m_airraid_video(*this,"airraid_vid")
|
||||
{ }
|
||||
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_device<seibu_sound_device> m_seibu_sound;
|
||||
required_shared_ptr<UINT8> m_txram;
|
||||
required_shared_ptr<UINT8> m_vregs;
|
||||
optional_shared_ptr<UINT8> m_mainram;
|
||||
optional_shared_ptr<UINT8> m_spriteram;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<palette_device> m_palette;
|
||||
optional_shared_ptr<UINT8> m_decrypted_opcodes;
|
||||
|
||||
required_region_ptr<UINT8> m_tx_clut;
|
||||
required_region_ptr<UINT8> m_fg_clut;
|
||||
required_region_ptr<UINT8> m_bg_clut;
|
||||
required_region_ptr<UINT8> m_spr_clut;
|
||||
required_device<airraid_video_device> m_airraid_video;
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(bg_scan);
|
||||
TILEMAP_MAPPER_MEMBER(fg_scan);
|
||||
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
tilemap_t *m_bg_tilemap;
|
||||
TILE_GET_INFO_MEMBER(get_fg_tile_info);
|
||||
tilemap_t *m_fg_tilemap;
|
||||
TILE_GET_INFO_MEMBER(get_cstx_tile_info);
|
||||
tilemap_t *m_tx_tilemap;
|
||||
UINT16 m_hw;
|
||||
|
||||
bitmap_ind16 m_temp_bitmap;
|
||||
|
||||
|
||||
|
||||
DECLARE_WRITE8_MEMBER(cshooter_txram_w);
|
||||
DECLARE_READ8_MEMBER(cshooter_coin_r);
|
||||
DECLARE_WRITE8_MEMBER(cshooter_c500_w);
|
||||
DECLARE_WRITE8_MEMBER(cshooter_c700_w);
|
||||
DECLARE_WRITE8_MEMBER(bank_w);
|
||||
DECLARE_WRITE8_MEMBER(vregs_w);
|
||||
DECLARE_READ8_MEMBER(seibu_sound_comms_r);
|
||||
DECLARE_WRITE8_MEMBER(seibu_sound_comms_w);
|
||||
DECLARE_DRIVER_INIT(cshootere);
|
||||
DECLARE_DRIVER_INIT(cshooter);
|
||||
virtual void video_start() override;
|
||||
DECLARE_PALETTE_INIT(cshooter);
|
||||
DECLARE_MACHINE_RESET(cshooter);
|
||||
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void mix_layer(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, UINT8* clut, int base);
|
||||
UINT32 screen_update_airraid(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(cshooter_scanline);
|
||||
};
|
||||
|
||||
|
||||
PALETTE_INIT_MEMBER(cshooter_state, cshooter)
|
||||
{
|
||||
// we use the PROMs in the video drawing code instead because
|
||||
// it controls transparency as well as the colour lookup.
|
||||
// (bit 0x40 set in a CLUT PROM means 'transparent pen')
|
||||
}
|
||||
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(cshooter_state::bg_scan)
|
||||
{
|
||||
return ((row&0xf) * 0x10) + (col&0xf) + (((col&0x7f0) >> 4)*0x100) + ((row & 0x30)>>4) * 0x8000;
|
||||
}
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(cshooter_state::fg_scan)
|
||||
{
|
||||
return ((row&0xf) * 0x10) + (col&0xf) + (((col&0x0f0) >> 4)*0x100) + ((row & 0x1f0)>>4) * 0x1000;
|
||||
}
|
||||
|
||||
|
||||
TILE_GET_INFO_MEMBER(cshooter_state::get_bg_tile_info)
|
||||
{
|
||||
UINT8 *bgMap = memregion("bg_map")->base();
|
||||
int tile = bgMap[(tile_index*2)+1] & 0xff;
|
||||
int attr = bgMap[(tile_index*2)+0] & 0xff;
|
||||
|
||||
tile |= (attr & 0x70) << 4;
|
||||
|
||||
SET_TILE_INFO_MEMBER(2,
|
||||
tile,
|
||||
attr&0xf,
|
||||
0);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(cshooter_state::get_fg_tile_info)
|
||||
{
|
||||
UINT8 *bgMap = memregion("fg_map")->base();
|
||||
int tile = bgMap[(tile_index*2)+1] & 0xff;
|
||||
int attr = bgMap[(tile_index*2)+0] & 0xff;
|
||||
|
||||
tile |= (attr & 0x70) << 4;
|
||||
|
||||
SET_TILE_INFO_MEMBER(3,
|
||||
tile,
|
||||
attr&0xf,
|
||||
0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
TILE_GET_INFO_MEMBER(cshooter_state::get_cstx_tile_info)
|
||||
{
|
||||
int code = (m_txram[tile_index*2]);
|
||||
int attr = (m_txram[tile_index*2+1]);
|
||||
int color = attr & 0xf;
|
||||
|
||||
SET_TILE_INFO_MEMBER(0, (code << 1) | ((attr & 0x20) >> 5), color, 0);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(cshooter_state::cshooter_txram_w)
|
||||
{
|
||||
m_txram[offset] = data;
|
||||
m_tx_tilemap->mark_tile_dirty(offset/2);
|
||||
}
|
||||
|
||||
void cshooter_state::video_start()
|
||||
{
|
||||
// there might actually be 4 banks of 2048 x 16 tilemaps in here as the upper scroll bits are with the rom banking.
|
||||
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(cshooter_state::get_bg_tile_info),this),tilemap_mapper_delegate(FUNC(cshooter_state::bg_scan),this),16,16,2048, 64);
|
||||
|
||||
// which could in turn mean this is actually 256 x 128, not 256 x 512
|
||||
// m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(cshooter_state::get_fg_tile_info),this),tilemap_mapper_delegate(FUNC(cshooter_state::fg_scan),this),16,16,256, 512);
|
||||
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(cshooter_state::get_fg_tile_info),this),tilemap_mapper_delegate(FUNC(cshooter_state::fg_scan),this),16,16,256, 128);
|
||||
|
||||
m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(cshooter_state::get_cstx_tile_info),this),TILEMAP_SCAN_ROWS, 8,8,32,32);
|
||||
|
||||
// m_fg_tilemap->set_transparent_pen(0);
|
||||
// m_tx_tilemap->set_transparent_pen(0);
|
||||
|
||||
// we do manual mixing using a temp bitmap
|
||||
m_screen->register_screen_bitmap(m_temp_bitmap);
|
||||
}
|
||||
|
||||
void cshooter_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
for (int i = m_spriteram.bytes() - 4; i >= 0 ; i -= 4)
|
||||
{
|
||||
if (m_spriteram[i+1]&0x80)
|
||||
continue;
|
||||
|
||||
UINT16 tile = (m_spriteram[i]);
|
||||
tile |= (m_spriteram[i + 1] & 0x70) << 4;
|
||||
|
||||
UINT16 col = (m_spriteram[i+1] & 0x0f);
|
||||
//col |= (m_spriteram[i+1] & 0x80)<<3;
|
||||
|
||||
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect, tile,col, 0, 0, m_spriteram[i+3],m_spriteram[i+2],0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#define DISPLAY_SPR 1
|
||||
#define DISPLAY_FG 2
|
||||
#define DISPLAY_BG 4
|
||||
#define DISPLAY_TXT 8
|
||||
#define DM_GETSCROLL(n) (((m_vregs[(n)]<<1)&0xff) + ((m_vregs[(n)]&0x80)?1:0) +( ((m_vregs[(n)-1]<<4) | (m_vregs[(n)-1]<<12) )&0xff00))
|
||||
|
||||
void cshooter_state::mix_layer(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, UINT8* clut, int base)
|
||||
{
|
||||
for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
|
||||
{
|
||||
UINT16 *dest = &bitmap.pix16(y);
|
||||
UINT16 *src = &m_temp_bitmap.pix16(y);
|
||||
for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
|
||||
{
|
||||
UINT8 pix = src[x] & 0xff;
|
||||
UINT8 real = clut[pix];
|
||||
|
||||
if (!(real & 0x40))
|
||||
{
|
||||
dest[x] = (real & 0x3f) + base;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
UINT32 cshooter_state::screen_update_airraid(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
UINT16 bgscrolly = DM_GETSCROLL(0x6);
|
||||
// this is more likely to be 'bank' than scroll, like NMK16
|
||||
bgscrolly += ((m_hw & 0xc0) >> 6) * 256;
|
||||
|
||||
m_bg_tilemap->set_scrollx(0, DM_GETSCROLL(0x2));
|
||||
m_bg_tilemap->set_scrolly(0, bgscrolly);
|
||||
m_fg_tilemap->set_scrollx(0, DM_GETSCROLL(0xa));
|
||||
m_fg_tilemap->set_scrolly(0, DM_GETSCROLL(0xe));
|
||||
|
||||
// draw screen
|
||||
bitmap.fill(0x80, cliprect); // temp
|
||||
|
||||
// m_temp_bitmap.fill(0x00, cliprect);
|
||||
|
||||
if ((m_hw & DISPLAY_BG) == 0x00)
|
||||
{
|
||||
m_bg_tilemap->draw(screen, m_temp_bitmap, cliprect, 0, 0);
|
||||
mix_layer(screen, bitmap, cliprect, m_bg_clut, 0x80);
|
||||
}
|
||||
|
||||
if ((m_hw & DISPLAY_FG) == 0x00)
|
||||
{
|
||||
m_fg_tilemap->draw(screen, m_temp_bitmap, cliprect, 0, 0);
|
||||
mix_layer(screen, bitmap, cliprect, m_fg_clut, 0x00);
|
||||
}
|
||||
|
||||
if (m_hw & DISPLAY_SPR)
|
||||
{
|
||||
m_temp_bitmap.fill(0x00, cliprect);
|
||||
draw_sprites(m_temp_bitmap, cliprect); // technically this should draw manually because 0x40 in the prom is transparency and our code just assumes it to be 0.
|
||||
mix_layer(screen, bitmap, cliprect, m_spr_clut, 0x40);
|
||||
}
|
||||
|
||||
if (m_hw & DISPLAY_TXT)
|
||||
{
|
||||
m_tx_tilemap->draw(screen, m_temp_bitmap, cliprect, 0, 0);
|
||||
mix_layer(screen, bitmap, cliprect, m_tx_clut, 0xc0);
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* main cpu */
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(cshooter_state::cshooter_scanline)
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(airraid_state::cshooter_scanline)
|
||||
{
|
||||
int scanline = param;
|
||||
|
||||
@ -416,19 +203,19 @@ TIMER_DEVICE_CALLBACK_MEMBER(cshooter_state::cshooter_scanline)
|
||||
}
|
||||
|
||||
|
||||
MACHINE_RESET_MEMBER(cshooter_state,cshooter)
|
||||
MACHINE_RESET_MEMBER(airraid_state,cshooter)
|
||||
{
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(cshooter_state::cshooter_c500_w)
|
||||
WRITE8_MEMBER(airraid_state::cshooter_c500_w)
|
||||
{
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(cshooter_state::cshooter_c700_w)
|
||||
WRITE8_MEMBER(airraid_state::cshooter_c700_w)
|
||||
{
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(cshooter_state::bank_w)
|
||||
WRITE8_MEMBER(airraid_state::bank_w)
|
||||
{
|
||||
// format of this address is TTBB tbfs
|
||||
|
||||
@ -439,35 +226,27 @@ WRITE8_MEMBER(cshooter_state::bank_w)
|
||||
// f = fg layer disable
|
||||
// s = sprite layer enable
|
||||
|
||||
// printf("bankw %02x\n", data & 0xc0);
|
||||
|
||||
m_hw = data;
|
||||
|
||||
membank("bank1")->set_entry((data>>4)&3);
|
||||
|
||||
m_airraid_video->layer_enable_w(data & 0xcf);
|
||||
|
||||
}
|
||||
|
||||
|
||||
READ8_MEMBER(cshooter_state::seibu_sound_comms_r)
|
||||
READ8_MEMBER(airraid_state::seibu_sound_comms_r)
|
||||
{
|
||||
return m_seibu_sound->main_word_r(space,offset,0x00ff);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(cshooter_state::seibu_sound_comms_w)
|
||||
WRITE8_MEMBER(airraid_state::seibu_sound_comms_w)
|
||||
{
|
||||
m_seibu_sound->main_word_w(space,offset,data,0x00ff);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(cshooter_state::vregs_w)
|
||||
{
|
||||
m_vregs[offset] = data;
|
||||
|
||||
if ((offset != 0x2) && (offset != 0x01) && (offset != 0xa) && (offset != 0x09) && (offset != 0xe) && (offset != 0x0d) )
|
||||
printf("vregs_w %02x: %02x\n", offset, data);
|
||||
}
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( airraid_map, AS_PROGRAM, 8, cshooter_state )
|
||||
static ADDRESS_MAP_START( airraid_map, AS_PROGRAM, 8, airraid_state )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") AM_WRITENOP // rld result write-back
|
||||
AM_RANGE(0xc000, 0xc000) AM_READ_PORT("IN0")
|
||||
@ -479,22 +258,22 @@ static ADDRESS_MAP_START( airraid_map, AS_PROGRAM, 8, cshooter_state )
|
||||
// AM_RANGE(0xc600, 0xc600) AM_WRITE(cshooter_c600_w) // see notes
|
||||
AM_RANGE(0xc700, 0xc700) AM_WRITE(cshooter_c700_w)
|
||||
// AM_RANGE(0xc801, 0xc801) AM_WRITE(cshooter_c801_w) // see notes
|
||||
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(cshooter_txram_w) AM_SHARE("txram")
|
||||
AM_RANGE(0xd000, 0xd7ff) AM_RAM_DEVWRITE("airraid_vid", airraid_video_device, txram_w) AM_SHARE("txram")
|
||||
AM_RANGE(0xd800, 0xd8ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||
AM_RANGE(0xda00, 0xdaff) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
|
||||
AM_RANGE(0xdc11, 0xdc11) AM_WRITE(bank_w)
|
||||
AM_RANGE(0xdc00, 0xdc0f) AM_RAM_WRITE(vregs_w) AM_SHARE("vregs")
|
||||
AM_RANGE(0xdc00, 0xdc0f) AM_RAM_DEVWRITE("airraid_vid", airraid_video_device, vregs_w) AM_SHARE("vregs")
|
||||
// AM_RANGE(0xdc10, 0xdc10) AM_RAM
|
||||
AM_RANGE(0xdc11, 0xdc11) AM_WRITE(bank_w)
|
||||
// AM_RANGE(0xdc19, 0xdc19) AM_RAM
|
||||
// AM_RANGE(0xdc1e, 0xdc1e) AM_RAM
|
||||
// AM_RANGE(0xdc1f, 0xdc1f) AM_RAM
|
||||
|
||||
AM_RANGE(0xde00, 0xde0f) AM_READWRITE(seibu_sound_comms_r,seibu_sound_comms_w)
|
||||
AM_RANGE(0xe000, 0xfdff) AM_RAM AM_SHARE("mainram")
|
||||
AM_RANGE(0xfe00, 0xffff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0xfe00, 0xffff) AM_RAM AM_SHARE("sprite_ram")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, cshooter_state )
|
||||
static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, airraid_state )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -582,68 +361,22 @@ INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
static const gfx_layout cshooter_charlayout =
|
||||
{
|
||||
8,8, /* 8*8 characters */
|
||||
RGN_FRAC(1,1), /* 512 characters */
|
||||
2, /* 4 bits per pixel */
|
||||
{ 0,4 },
|
||||
{ 8,9,10,11,0,1,2,3 },
|
||||
{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
|
||||
128*1
|
||||
};
|
||||
|
||||
static const gfx_layout cshooter_char16layout =
|
||||
{
|
||||
16,16, /* 8*8 characters */
|
||||
RGN_FRAC(1,1), /* 512 characters */
|
||||
4, /* 4 bits per pixel */
|
||||
// { 0,8,4,12 },
|
||||
{ 0,4,8,12 },
|
||||
|
||||
// { 12,4,8,0 },
|
||||
{ 0,1,2,3, 16,17,18,19, 512+0,512+1,512+2,512+3, 512+16,512+17,512+18,512+19},
|
||||
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32, 8*32, 9*32, 10*32, 11*32, 12*32, 13*32, 14*32, 15*32 },
|
||||
32*32
|
||||
};
|
||||
|
||||
|
||||
|
||||
static GFXDECODE_START( cshooter )
|
||||
GFXDECODE_ENTRY( "tx_gfx", 0, cshooter_charlayout, 0, 16 )
|
||||
GFXDECODE_ENTRY( "spr_gfx", 0, cshooter_char16layout, 0, 16 )
|
||||
GFXDECODE_ENTRY( "bg_gfx", 0, cshooter_char16layout, 0, 16 )
|
||||
GFXDECODE_ENTRY( "fg_gfx", 0, cshooter_char16layout, 0, 16 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( airraid, cshooter_state )
|
||||
static MACHINE_CONFIG_START( airraid, airraid_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", Z80,XTAL_12MHz/2) /* verified on pcb */
|
||||
MCFG_CPU_PROGRAM_MAP(airraid_map)
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", cshooter_state, cshooter_scanline, "screen", 0, 1)
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", airraid_state, cshooter_scanline, "airraid_vid:screen", 0, 1)
|
||||
|
||||
SEIBU2_AIRRAID_SOUND_SYSTEM_CPU(XTAL_14_31818MHz/4) /* verified on pcb */
|
||||
SEIBU_SOUND_SYSTEM_ENCRYPTED_LOW()
|
||||
|
||||
MCFG_QUANTUM_PERFECT_CPU("maincpu")
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
MCFG_SCREEN_SIZE(256, 256)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-1-16)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(cshooter_state, screen_update_airraid)
|
||||
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_QUANTUM_PERFECT_CPU("maincpu")
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 0x100)
|
||||
MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", cshooter)
|
||||
MCFG_AIRRAID_VIDEO_ADD("airraid_vid")
|
||||
|
||||
/* sound hardware */
|
||||
SEIBU_AIRRAID_SOUND_SYSTEM_YM2151_INTERFACE(XTAL_14_31818MHz/4)
|
||||
@ -692,41 +425,41 @@ ROM_START( airraid )
|
||||
ROM_LOAD( "5.6f", 0x00000, 0x02000, CRC(30be398c) SHA1(6c61200ee8888d6270c8cec50423b3b5602c2027) )
|
||||
ROM_LOAD( "4.7f", 0x10000, 0x08000, CRC(3cd715b4) SHA1(da735fb5d262908ddf7ed7dacdea68899f1723ff) )
|
||||
|
||||
ROM_REGION( 0x02000, "tx_gfx", 0 ) // TX Layer
|
||||
ROM_LOAD( "3.13e", 0x00000, 0x02000, CRC(672ec0e8) SHA1(a11cd90d6494251ceee3bc7c72f4e7b1580b77e2) )
|
||||
|
||||
ROM_REGION( 0x100, "tx_clut", 0 ) // taken from cshootert, not verified for this PCB
|
||||
ROM_LOAD( "63s281.d16", 0x0000, 0x0100, CRC(0b8b914b) SHA1(8cf4910b846de79661cc187887171ed8ebfd6719) ) // clut
|
||||
|
||||
ROM_REGION( 0x0200, "proms", 0 ) // this PCB type has different proms when compared to the cshootert hardware PCB where they were dumped
|
||||
ROM_LOAD( "pr.c19", 0x0000, 0x0200, NO_DUMP )
|
||||
ROM_LOAD( "6308.a13", 0x0000, 0x0100, NO_DUMP )
|
||||
|
||||
ROM_REGION( 0x02000, "airraid_vid:tx_gfx", 0 ) // TX Layer
|
||||
ROM_LOAD( "3.13e", 0x00000, 0x02000, CRC(672ec0e8) SHA1(a11cd90d6494251ceee3bc7c72f4e7b1580b77e2) )
|
||||
|
||||
ROM_REGION( 0x100, "airraid_vid:tx_clut", 0 ) // taken from cshootert, not verified for this PCB
|
||||
ROM_LOAD( "63s281.d16", 0x0000, 0x0100, CRC(0b8b914b) SHA1(8cf4910b846de79661cc187887171ed8ebfd6719) ) // clut
|
||||
|
||||
/* ### MODULE 1 ### Background generation / graphics */
|
||||
ROM_REGION( 0x40000, "bg_map", 0 )
|
||||
ROM_REGION( 0x40000, "airraid_vid:bg_map", 0 )
|
||||
ROM_LOAD16_BYTE( "bg_layouts_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "bg_layouts_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x40000, "bg_gfx", 0 )
|
||||
ROM_REGION( 0x40000, "airraid_vid:bg_gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "bg_tiles_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "bg_tiles_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x100, "bg_clut", 0 )
|
||||
ROM_REGION( 0x100, "airraid_vid:bg_clut", 0 )
|
||||
ROM_LOAD( "bg_clut", 0x000, 0x100, NO_DUMP )
|
||||
|
||||
/* ### MODULE 2 ### Foreground generation / graphics */
|
||||
ROM_REGION( 0x40000, "fg_map", 0 )
|
||||
ROM_REGION( 0x40000, "airraid_vid:fg_map", 0 )
|
||||
ROM_LOAD16_BYTE( "fg_layouts_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "fg_layouts_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x40000, "fg_gfx", 0 )
|
||||
ROM_REGION( 0x40000, "airraid_vid:fg_gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "fg_tiles_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "fg_tiles_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x100, "fg_clut", 0 )
|
||||
ROM_REGION( 0x100, "airraid_vid:fg_clut", 0 )
|
||||
ROM_LOAD( "fg_clut", 0x000, 0x100, NO_DUMP )
|
||||
|
||||
/* ### MODULE 3 ### Sprite graphics */
|
||||
ROM_REGION( 0x40000, "spr_gfx", 0 )
|
||||
ROM_REGION( 0x40000, "airraid_vid:spr_gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "sprite_tiles_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "sprite_tiles_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x100, "spr_clut", 0 )
|
||||
ROM_REGION( 0x100, "airraid_vid:spr_clut", 0 )
|
||||
ROM_LOAD( "spr_clut", 0x000, 0x100, NO_DUMP )
|
||||
ROM_END
|
||||
|
||||
@ -775,52 +508,53 @@ ROM_START( cshooter )
|
||||
ROM_LOAD( "5.6f", 0x00000, 0x02000, CRC(30be398c) SHA1(6c61200ee8888d6270c8cec50423b3b5602c2027) ) // 5.g6
|
||||
ROM_LOAD( "4.7f", 0x10000, 0x08000, CRC(3cd715b4) SHA1(da735fb5d262908ddf7ed7dacdea68899f1723ff) ) // 4.g8
|
||||
|
||||
ROM_REGION( 0x02000, "tx_gfx", 0 ) // TX Layer
|
||||
ROM_LOAD( "3.f11", 0x00000, 0x02000, CRC(67b50a47) SHA1(b1f4aefc9437edbeefba5371149cc08c0b55c741) )
|
||||
|
||||
ROM_REGION( 0x100, "tx_clut", 0 ) // taken from cshootert, not verified for this PCB
|
||||
ROM_LOAD( "63s281.d16", 0x0000, 0x0100, CRC(0b8b914b) SHA1(8cf4910b846de79661cc187887171ed8ebfd6719) ) // clut
|
||||
|
||||
ROM_REGION( 0x0200, "proms", 0 ) // this PCB type has different proms when compared to the cshootert hardware PCB where they were dumped
|
||||
ROM_LOAD( "pr.c19", 0x0000, 0x0200, NO_DUMP )
|
||||
ROM_LOAD( "6308.a13", 0x0000, 0x0100, NO_DUMP )
|
||||
|
||||
|
||||
ROM_REGION( 0x02000, "airraid_vid:tx_gfx", 0 ) // TX Layer
|
||||
ROM_LOAD( "3.f11", 0x00000, 0x02000, CRC(67b50a47) SHA1(b1f4aefc9437edbeefba5371149cc08c0b55c741) )
|
||||
|
||||
ROM_REGION( 0x100, "airraid_vid:tx_clut", 0 ) // taken from cshootert, not verified for this PCB
|
||||
ROM_LOAD( "63s281.d16", 0x0000, 0x0100, CRC(0b8b914b) SHA1(8cf4910b846de79661cc187887171ed8ebfd6719) ) // clut
|
||||
|
||||
/* ### MODULE 1 ### Background generation / graphics */
|
||||
ROM_REGION( 0x40000, "bg_map", 0 )
|
||||
ROM_REGION( 0x40000, "airraid_vid:bg_map", 0 )
|
||||
ROM_LOAD16_BYTE( "bg_layouts_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "bg_layouts_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x40000, "bg_gfx", 0 )
|
||||
ROM_REGION( 0x40000, "airraid_vid:bg_gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "bg_tiles_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "bg_tiles_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x100, "bg_clut", 0 )
|
||||
ROM_REGION( 0x100, "airraid_vid:bg_clut", 0 )
|
||||
ROM_LOAD( "bg_clut", 0x000, 0x100, NO_DUMP )
|
||||
|
||||
/* ### MODULE 2 ### Foreground generation / graphics */
|
||||
ROM_REGION( 0x40000, "fg_map", 0 )
|
||||
ROM_REGION( 0x40000, "airraid_vid:fg_map", 0 )
|
||||
ROM_LOAD16_BYTE( "fg_layouts_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "fg_layouts_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x40000, "fg_gfx", 0 )
|
||||
ROM_REGION( 0x40000, "airraid_vid:fg_gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "fg_tiles_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "fg_tiles_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x100, "fg_clut", 0 )
|
||||
ROM_REGION( 0x100, "airraid_vid:fg_clut", 0 )
|
||||
ROM_LOAD( "fg_clut", 0x000, 0x100, NO_DUMP )
|
||||
|
||||
/* ### MODULE 3 ### Sprite graphics */
|
||||
ROM_REGION( 0x40000, "spr_gfx", 0 )
|
||||
ROM_REGION( 0x40000, "airraid_vid:spr_gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "sprite_tiles_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "sprite_tiles_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x100, "spr_clut", 0 )
|
||||
ROM_REGION( 0x100, "airraid_vid:spr_clut", 0 )
|
||||
ROM_LOAD( "spr_clut", 0x000, 0x100, NO_DUMP )
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
DRIVER_INIT_MEMBER(cshooter_state, cshooter)
|
||||
DRIVER_INIT_MEMBER(airraid_state, cshooter)
|
||||
{
|
||||
membank("bank1")->configure_entries(0, 4, memregion("maindata")->base(), 0x4000);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(cshooter_state,cshootere)
|
||||
DRIVER_INIT_MEMBER(airraid_state,cshootere)
|
||||
{
|
||||
UINT8 *rom = memregion("maincpu")->base();
|
||||
|
||||
@ -853,8 +587,7 @@ DRIVER_INIT_MEMBER(cshooter_state,cshootere)
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
GAME( 1987, cshooter, airraid, airraid_crypt, airraid, cshooter_state, cshootere, ROT270, "Seibu Kaihatsu (J.K.H. license)", "Cross Shooter (Single PCB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
|
||||
GAME( 1987, airraid, 0, airraid_crypt, airraid, cshooter_state, cshootere, ROT270, "Seibu Kaihatsu", "Air Raid (Single PCB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
|
||||
// There's also an undumped International Games version
|
||||
GAME( 1987, cshooter, airraid, airraid_crypt, airraid, airraid_state, cshootere, ROT270, "Seibu Kaihatsu (J.K.H. license)", "Cross Shooter (Single PCB)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, airraid, 0, airraid_crypt, airraid, airraid_state, cshootere, ROT270, "Seibu Kaihatsu", "Air Raid (Single PCB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
|
||||
|
||||
|
@ -4,6 +4,17 @@
|
||||
*** STREET FIGHT hardware *** This has been adapted from the excellent
|
||||
***************************** Psychic 5 description (by Roberto Ventura)
|
||||
|
||||
|
||||
Notes: Lower Board - CPU board S-0086-002-B0 (both games)
|
||||
Top Board - GFX board S-0086-002A-A0 (Street Fight)
|
||||
Top Board - GFX board S-0087-807 (Cross Shooter)
|
||||
|
||||
for the single PCB version of Air Raid / Cross Shooter on the S-0087-011A-0 PCB,
|
||||
see airraid.cpp
|
||||
|
||||
|
||||
---
|
||||
|
||||
Street Fight (c) Seibu Kaihatsu (1986)
|
||||
|
||||
|
||||
@ -180,8 +191,6 @@ colors on screen.
|
||||
Each color component (RGB) depth is 4 bits, two bytes $100 apart are used
|
||||
for each color code (12 bits).
|
||||
|
||||
format: unknown - probably RRRRGGGG - 0000BBBB
|
||||
|
||||
I suspect that the colors are organized in sub-palettes, since the graphics
|
||||
layers are all 4 bits (16 colors) each. Each of the text/graphics layers
|
||||
have 'attribute' bytes associated with them that would define the palette
|
||||
@ -190,14 +199,16 @@ usage for each character/tile.
|
||||
The 16 colours at offset $C0 appear to be the text palette. This group of
|
||||
colours does not appear to change throughout the game, and the lower 192
|
||||
colours fade in/out independently of these 16 - consistent with observations
|
||||
of the real game. You'd think then that the palette would be reaonably
|
||||
easy to deduce from the text video ram attribute byte - go ahead and try! :P
|
||||
|
||||
The mapping of graphics pixels to palette similarly escapes me, though I
|
||||
must admit I haven't exhausted all avenues of investigation just yet!
|
||||
of the real game.
|
||||
|
||||
There is a related mystery with the transparency colour. For the most part
|
||||
colour 15 corresponds to the transparent colour, except in a few cases.
|
||||
(for some Seibu PCB types transparency is handled by bit 0x40 in the CLUT
|
||||
PROMs, but not here, unless they've been dumped incorrectly)
|
||||
|
||||
-----
|
||||
|
||||
Notes below are for Street Fight video board only
|
||||
|
||||
6) TILE-BASED LAYERS
|
||||
|
||||
@ -232,7 +243,6 @@ conventional RAM. See the memory map for sprite data format.
|
||||
****************************************************************************
|
||||
|
||||
TODO:
|
||||
- palette is incorporated - fix!!!
|
||||
- handle transparency in text layer properly (how?)
|
||||
- second bank of sf02 is this used? (probably NOT)
|
||||
- stfight/empcity YM2203s should be clocked at 1.5MHz but this results in
|
||||
@ -254,8 +264,8 @@ TODO:
|
||||
static ADDRESS_MAP_START( cpu1_map, AS_PROGRAM, 8, stfight_state )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") /* sf02.bin */
|
||||
AM_RANGE(0xc000, 0xc0ff) AM_RAM_DEVWRITE("palette", palette_device, write_indirect) AM_SHARE("palette")
|
||||
AM_RANGE(0xc100, 0xc1ff) AM_RAM_DEVWRITE("palette", palette_device, write_indirect_ext) AM_SHARE("palette_ext")
|
||||
AM_RANGE(0xc000, 0xc0ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||
AM_RANGE(0xc100, 0xc1ff) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
|
||||
AM_RANGE(0xc200, 0xc200) AM_READ_PORT("P1")
|
||||
AM_RANGE(0xc201, 0xc201) AM_READ_PORT("P2")
|
||||
AM_RANGE(0xc202, 0xc202) AM_READ_PORT("START")
|
||||
@ -267,26 +277,34 @@ static ADDRESS_MAP_START( cpu1_map, AS_PROGRAM, 8, stfight_state )
|
||||
AM_RANGE(0xc700, 0xc700) AM_WRITE(stfight_coin_w)
|
||||
AM_RANGE(0xc804, 0xc804) AM_WRITE(stfight_io_w)
|
||||
AM_RANGE(0xc806, 0xc806) AM_WRITENOP /* TBD */
|
||||
AM_RANGE(0xc807, 0xc807) AM_WRITE(stfight_sprite_bank_w)
|
||||
AM_RANGE(0xd000, 0xd3ff) AM_RAM_WRITE(stfight_text_char_w) AM_SHARE("text_char_ram")
|
||||
AM_RANGE(0xd400, 0xd7ff) AM_RAM_WRITE(stfight_text_attr_w) AM_SHARE("text_attr_ram")
|
||||
AM_RANGE(0xd800, 0xd808) AM_WRITE(stfight_vh_latch_w) AM_SHARE("vh_latch_ram")
|
||||
AM_RANGE(0xe000, 0xefff) AM_RAM
|
||||
AM_RANGE(0xf000, 0xffff) AM_RAM AM_SHARE("sprite_ram")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( stfight_cpu1_map, AS_PROGRAM, 8, stfight_state )
|
||||
AM_RANGE(0xc807, 0xc807) AM_DEVWRITE("stfight_vid", stfight_video_device, stfight_sprite_bank_w)
|
||||
AM_RANGE(0xd000, 0xd7ff) AM_RAM_DEVWRITE("stfight_vid", stfight_video_device, stfight_text_char_w) AM_SHARE("txram")
|
||||
AM_RANGE(0xd800, 0xd808) AM_RAM_DEVWRITE("stfight_vid", stfight_video_device, stfight_vh_latch_w) AM_SHARE("vregs")
|
||||
AM_RANGE(0xf000, 0xffff) AM_RAM AM_SHARE("sprite_ram")
|
||||
AM_IMPORT_FROM(cpu1_map)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, stfight_state )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( cshooter_cpu1_map, AS_PROGRAM, 8, stfight_state )
|
||||
AM_RANGE(0xc801, 0xc801) AM_WRITE(stfight_bank_w)
|
||||
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(cshooter_text_w) AM_SHARE("tx_vram")
|
||||
AM_RANGE(0xd000, 0xd7ff) AM_RAM_DEVWRITE("airraid_vid", airraid_video_device, txram_w) AM_SHARE("txram")
|
||||
AM_RANGE(0xd800, 0xd80f) AM_RAM_DEVWRITE("airraid_vid", airraid_video_device, vregs_w) AM_SHARE("vregs") // wrong?
|
||||
AM_RANGE(0xe000, 0xfdff) AM_RAM
|
||||
AM_RANGE(0xfe00, 0xffff) AM_RAM AM_SHARE("sprite_ram")
|
||||
AM_IMPORT_FROM(cpu1_map)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( cpu2_map, AS_PROGRAM, 8, stfight_state )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ym1", ym2203_device, read, write)
|
||||
@ -433,115 +451,15 @@ static INPUT_PORTS_START( cshooter )
|
||||
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW1:8" )
|
||||
INPUT_PORTS_END
|
||||
|
||||
/* text-layer characters */
|
||||
static const gfx_layout charlayout =
|
||||
{
|
||||
8,8, /* 8*8 pixels */
|
||||
512, /* 512 characters */
|
||||
2, /* 2 bits per pixel */
|
||||
{ 4, 0 },
|
||||
{ 0, 1, 2, 3, 8+0, 8+1, 8+2, 8+3 },
|
||||
{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
|
||||
8*16 /* every char takes 16 consecutive bytes */
|
||||
};
|
||||
|
||||
static const gfx_layout cshooter_charlayout =
|
||||
{
|
||||
8,8, /* 8*8 characters */
|
||||
RGN_FRAC(1,1), /* 512 characters */
|
||||
2, /* 4 bits per pixel */
|
||||
{ 0,4 },
|
||||
{ 8,9,10,11,0,1,2,3 },
|
||||
{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
|
||||
128*1
|
||||
};
|
||||
|
||||
|
||||
/* foreground tiles */
|
||||
static const gfx_layout fglayout =
|
||||
{
|
||||
16,16, /* 16*16 pixels */
|
||||
1024, /* 1024 tiles */
|
||||
4, /* 4 bits per pixel */
|
||||
{ 64*1024*8+0, 64*1024*8+4, 0, 4 },
|
||||
{ 0, 1, 2, 3,
|
||||
8, 9, 10, 11,
|
||||
32*8+0, 32*8+1, 32*8+ 2, 32*8+ 3,
|
||||
32*8+8, 32*8+9, 32*8+10, 32*8+11 },
|
||||
{ 0*8, 2*8, 4*8, 6*8,
|
||||
8*8, 10*8, 12*8, 14*8,
|
||||
16*8, 18*8, 20*8, 22*8,
|
||||
24*8, 26*8, 28*8, 30*8 },
|
||||
64*8 /* every char takes 64 consecutive bytes */
|
||||
};
|
||||
|
||||
/*
|
||||
* The background tiles are interleaved in banks of 2
|
||||
* - so we need to create two separate layout structs
|
||||
* to handle them properly with tilemaps
|
||||
*/
|
||||
|
||||
/* background tiles */
|
||||
static const gfx_layout bglayout =
|
||||
{
|
||||
16,16, /* 16*16 pixels */
|
||||
512, /* 512 tiles */
|
||||
4, /* 4 bits per pixel */
|
||||
{ 64*1024*8+4, 64*1024*8+0, 4, 0 },
|
||||
{ 0, 1, 2, 3,
|
||||
8, 9, 10, 11,
|
||||
64*8+0, 64*8+1, 64*8+ 2, 64*8+ 3,
|
||||
64*8+8, 64*8+9, 64*8+10, 64*8+11 },
|
||||
{ 0*8, 2*8, 4*8, 6*8,
|
||||
8*8, 10*8, 12*8, 14*8,
|
||||
16*8, 18*8, 20*8, 22*8,
|
||||
24*8, 26*8, 28*8, 30*8 },
|
||||
128*8 /* every tile takes 64/128 consecutive bytes */
|
||||
};
|
||||
|
||||
/* sprites */
|
||||
static const gfx_layout spritelayout =
|
||||
{
|
||||
16,16, /* 16*16 pixels */
|
||||
1024, /* 1024 sprites */
|
||||
4, /* 4 bits per pixel */
|
||||
{ 64*1024*8+0, 64*1024*8+4, 0, 4 },
|
||||
{ 0, 1, 2, 3,
|
||||
8, 9, 10, 11,
|
||||
32*8+0, 32*8+1, 32*8+ 2, 32*8+ 3,
|
||||
32*8+8, 32*8+9, 32*8+10, 32*8+11 },
|
||||
{ 0*8, 2*8, 4*8, 6*8,
|
||||
8*8, 10*8, 12*8, 14*8,
|
||||
16*8, 18*8, 20*8, 22*8,
|
||||
24*8, 26*8, 28*8, 30*8 },
|
||||
64*8 /* every sprite takes 64 consecutive bytes */
|
||||
};
|
||||
|
||||
|
||||
static GFXDECODE_START( stfight )
|
||||
GFXDECODE_ENTRY( "tx_gfx", 0x0000, charlayout, 0, 16 )
|
||||
GFXDECODE_ENTRY( "fg_gfx", 0x0000, fglayout, 16*16, 16 )
|
||||
GFXDECODE_ENTRY( "bg_gfx", 0x0000, bglayout, 16*16+16*16, 16 )
|
||||
GFXDECODE_ENTRY( "bg_gfx", 0x0020, bglayout, 16*16+16*16, 16 )
|
||||
GFXDECODE_ENTRY( "spr_gfx", 0x0000, spritelayout, 16*16+16*16+16*16, 16 )
|
||||
GFXDECODE_END
|
||||
|
||||
static GFXDECODE_START( cshooter )
|
||||
GFXDECODE_ENTRY( "tx_gfx", 0x0000, cshooter_charlayout,0, 16 )
|
||||
GFXDECODE_ENTRY( "fg_gfx", 0x0000, fglayout, 16*16, 16 )
|
||||
GFXDECODE_ENTRY( "bg_gfx", 0x0000, bglayout, 16*16+16*16, 16 )
|
||||
GFXDECODE_ENTRY( "bg_gfx", 0x0020, bglayout, 16*16+16*16, 16 )
|
||||
GFXDECODE_ENTRY( "spr_gfx", 0x0000, spritelayout, 16*16+16*16+16*16, 16 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( stfight, stfight_state )
|
||||
static MACHINE_CONFIG_START( stfight_base, stfight_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", Z80, XTAL_12MHz / 4)
|
||||
MCFG_CPU_PROGRAM_MAP(cpu1_map)
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", stfight_state, stfight_vb_interrupt)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("stfight_vid:screen", stfight_state, stfight_vb_interrupt)
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", Z80, XTAL_12MHz / 4)
|
||||
MCFG_CPU_PROGRAM_MAP(cpu2_map)
|
||||
@ -552,21 +470,8 @@ static MACHINE_CONFIG_START( stfight, stfight_state )
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(600))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(stfight_state, screen_update_stfight)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_VIDEO_START_OVERRIDE(stfight_state,stfight)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", stfight)
|
||||
MCFG_PALETTE_ADD("palette", 16*16+16*16+16*16+16*16)
|
||||
MCFG_PALETTE_INDIRECT_ENTRIES(256)
|
||||
MCFG_PALETTE_ADD("palette", 256)
|
||||
MCFG_PALETTE_FORMAT(xxxxBBBBRRRRGGGG)
|
||||
MCFG_PALETTE_INIT_OWNER(stfight_state, stfight)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
@ -590,30 +495,22 @@ static MACHINE_CONFIG_START( stfight, stfight_state )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( stfight, stfight_base )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(stfight_cpu1_map)
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("stfight_vid:screen", stfight_state, stfight_vb_interrupt)
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( cshooter, stfight )
|
||||
MCFG_CPU_REPLACE("maincpu", Z80, XTAL_12MHz / 2)
|
||||
MCFG_STFIGHT_VIDEO_ADD("stfight_vid")
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( cshooter, stfight_base )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(cshooter_cpu1_map)
|
||||
MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_DECRYPTED_OPCODES)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", stfight_state, stfight_vb_interrupt)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("airraid_vid:screen", stfight_state, stfight_vb_interrupt)
|
||||
|
||||
MCFG_CPU_REPLACE("audiocpu", Z80, XTAL_12MHz / 2)
|
||||
MCFG_CPU_PROGRAM_MAP(cpu2_map)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(stfight_state, irq0_line_hold, 120)
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(600))
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_UPDATE_DRIVER(stfight_state, screen_update_cshooter)
|
||||
|
||||
MCFG_GFXDECODE_MODIFY("gfxdecode", cshooter)
|
||||
MCFG_VIDEO_START_OVERRIDE(stfight_state,cshooter)
|
||||
|
||||
MCFG_SOUND_MODIFY("ym1")
|
||||
MCFG_SOUND_CLOCK(XTAL_12MHz / 8)
|
||||
|
||||
MCFG_SOUND_MODIFY("ym2")
|
||||
MCFG_SOUND_CLOCK(XTAL_12MHz / 8)
|
||||
MCFG_AIRRAID_VIDEO_ADD("airraid_vid")
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -635,47 +532,47 @@ ROM_START( empcity )
|
||||
ROM_REGION( 0x0800, "mcu", 0 )
|
||||
ROM_LOAD( "empcityu_68705.3j", 0x0000, 0x0800, CRC(182f7616) SHA1(38b4f23a559ae13f8ca1b974407a2a40fc52879f) )
|
||||
|
||||
ROM_REGION( 0x02000, "tx_gfx", 0 ) /* character data */
|
||||
ROM_REGION( 0x02000, "stfight_vid:tx_gfx", 0 ) /* character data */
|
||||
ROM_LOAD( "17.2N", 0x0000, 0x2000, CRC(1b3706b5) SHA1(61f069329a7a836523ffc8cce915b0d0129fd896) )
|
||||
|
||||
ROM_REGION( 0x20000, "fg_gfx", 0 ) /* foreground tile pixel data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:fg_gfx", 0 ) /* foreground tile pixel data */
|
||||
ROM_LOAD( "7.4C", 0x10000, 0x8000, CRC(2c6caa5f) SHA1(f6893cb87004979ead331897c684f995f850447e) )
|
||||
ROM_LOAD( "8.5C", 0x18000, 0x8000, CRC(e11ded31) SHA1(e3e634ad324d51e52d79dd79e5e6e5697cb8d21f) )
|
||||
ROM_LOAD( "5.2C", 0x00000, 0x8000, CRC(0c099a31) SHA1(dabaf8edc59e4954941cd8176031a358f45a1956) )
|
||||
ROM_LOAD( "6.3C", 0x08000, 0x8000, CRC(3cc77c31) SHA1(13d2324df5a322d499c9959a6bb3a844edaefb45) )
|
||||
|
||||
ROM_REGION( 0x20000, "bg_gfx", 0 ) /* background tile pixel data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:bg_gfx", 0 ) /* background tile pixel data */
|
||||
ROM_LOAD( "13.4C", 0x10000, 0x8000, CRC(0ae48dd3) SHA1(ca3d9aeb9f4343c379cef9282e408fbf8aa67d99) )
|
||||
ROM_LOAD( "14.5J", 0x18000, 0x8000, CRC(debf5d76) SHA1(eb18c35166eb5f93be98b3c30c7d909c0a68eada) )
|
||||
ROM_LOAD( "11.2J", 0x00000, 0x8000, CRC(8261ecfe) SHA1(5817f4a0458a949298414fe09c86bbcf50be52f3) )
|
||||
ROM_LOAD( "12.3J", 0x08000, 0x8000, CRC(71137301) SHA1(087a9f401939bc30f1dafa9916e8d8c564595a57) )
|
||||
|
||||
ROM_REGION( 0x20000, "spr_gfx", 0 ) /* sprite data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:spr_gfx", 0 ) /* sprite data */
|
||||
ROM_LOAD( "20.8W", 0x10000, 0x8000, CRC(8299f247) SHA1(71891f7b1fbfaed14c3854b7f6e10a3ddb4bd479) )
|
||||
ROM_LOAD( "21.9W", 0x18000, 0x8000, CRC(b57dc037) SHA1(69ac79a95ba9ace7c9ca7af480a4a10176be5ace) )
|
||||
ROM_LOAD( "18.6W", 0x00000, 0x8000, CRC(68acd627) SHA1(f98ff9ccb0913711079a2988e8dd08695fb5e107) )
|
||||
ROM_LOAD( "19.7W", 0x08000, 0x8000, CRC(5170a057) SHA1(9222f9febc222fa0c2eead258ad77c857f6d40c8) )
|
||||
|
||||
ROM_REGION( 0x10000, "fg_map", 0 ) /* foreground map data */
|
||||
ROM_REGION( 0x10000, "stfight_vid:fg_map", 0 ) /* foreground map data */
|
||||
ROM_LOAD( "9.7C", 0x00000, 0x8000, CRC(8ceaf4fe) SHA1(5698f2ff44c109825b8d9d0b6dd2426624df668b) )
|
||||
ROM_LOAD( "10.8C", 0x08000, 0x8000, CRC(5a1a227a) SHA1(24928ab218824ae1f5380398ceb90dcad525cc08) )
|
||||
|
||||
ROM_REGION( 0x10000, "bg_map", 0 ) /* background map data */
|
||||
ROM_REGION( 0x10000, "stfight_vid:bg_map", 0 ) /* background map data */
|
||||
ROM_LOAD( "15.7J", 0x00000, 0x8000, CRC(27a310bc) SHA1(dd30d72bc33b0bf7ddaf3ab730e028f51b20152a) )
|
||||
ROM_LOAD( "16.8J", 0x08000, 0x8000, CRC(3d19ce18) SHA1(38f691a23c96ef672637965c1a13f6d1595f9d51) )
|
||||
|
||||
ROM_REGION( 0x0100, "tx_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:tx_clut", 0 )
|
||||
ROM_LOAD( "82s129.006", 0x0000, 0x0100, CRC(f9424b5b) SHA1(e3bc23213406d35d54f1221f17f25d433df273a2) ) /* text lookup table */
|
||||
|
||||
ROM_REGION( 0x0100, "fg_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:fg_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.002", 0x0000, 0x0100, CRC(c883d49b) SHA1(e84900ccf6f27e5043e43c0d85ea1e4eee7e52d3) ) /* fg lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.003", 0x0000, 0x0100, CRC(af81882a) SHA1(b1008c991bd8d1157b3479e465ab286c70418b58) )
|
||||
|
||||
ROM_REGION( 0x0100, "bg_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:bg_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.004", 0x0000, 0x0100, CRC(1831ce7c) SHA1(57afbee9225f0efd63895a5f522e96dc87ca2616) ) /* bg lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.005", 0x0000, 0x0100, CRC(96cb6293) SHA1(1dcdeaa995e6ffa3753b742842c5ffe0f68ef8cd) )
|
||||
|
||||
ROM_REGION( 0x0100, "spr_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:spr_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.052", 0x0000, 0x0100, CRC(3d915ffc) SHA1(921be6d5e5fc0fdee9c9f545c1c4a0c334e9844c) ) /* sprite lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.066", 0x0000, 0x0100, CRC(51e8832f) SHA1(ed8c00559e7a02bb8c11861d747c8c64c01b7437) )
|
||||
|
||||
@ -697,47 +594,47 @@ ROM_START( empcityu )
|
||||
ROM_REGION( 0x0800, "mcu", 0 )
|
||||
ROM_LOAD( "empcityu_68705.3j", 0x0000, 0x0800, CRC(182f7616) SHA1(38b4f23a559ae13f8ca1b974407a2a40fc52879f) )
|
||||
|
||||
ROM_REGION( 0x02000, "tx_gfx", 0 ) /* character data */
|
||||
ROM_REGION( 0x02000, "stfight_vid:tx_gfx", 0 ) /* character data */
|
||||
ROM_LOAD( "vid.2p", 0x0000, 0x2000, CRC(15593793) SHA1(ac9ca8a0aa0ce3810f45aa41e74d4946ecced245) )
|
||||
|
||||
ROM_REGION( 0x20000, "fg_gfx", 0 ) /* foreground tile pixel data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:fg_gfx", 0 ) /* foreground tile pixel data */
|
||||
ROM_LOAD( "7.4C", 0x10000, 0x8000, CRC(2c6caa5f) SHA1(f6893cb87004979ead331897c684f995f850447e) )
|
||||
ROM_LOAD( "8.5C", 0x18000, 0x8000, CRC(e11ded31) SHA1(e3e634ad324d51e52d79dd79e5e6e5697cb8d21f) )
|
||||
ROM_LOAD( "5.2C", 0x00000, 0x8000, CRC(0c099a31) SHA1(dabaf8edc59e4954941cd8176031a358f45a1956) )
|
||||
ROM_LOAD( "6.3C", 0x08000, 0x8000, CRC(3cc77c31) SHA1(13d2324df5a322d499c9959a6bb3a844edaefb45) )
|
||||
|
||||
ROM_REGION( 0x20000, "bg_gfx", 0 ) /* background tile pixel data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:bg_gfx", 0 ) /* background tile pixel data */
|
||||
ROM_LOAD( "13.4C", 0x10000, 0x8000, CRC(0ae48dd3) SHA1(ca3d9aeb9f4343c379cef9282e408fbf8aa67d99) )
|
||||
ROM_LOAD( "14.5J", 0x18000, 0x8000, CRC(debf5d76) SHA1(eb18c35166eb5f93be98b3c30c7d909c0a68eada) )
|
||||
ROM_LOAD( "11.2J", 0x00000, 0x8000, CRC(8261ecfe) SHA1(5817f4a0458a949298414fe09c86bbcf50be52f3) )
|
||||
ROM_LOAD( "12.3J", 0x08000, 0x8000, CRC(71137301) SHA1(087a9f401939bc30f1dafa9916e8d8c564595a57) )
|
||||
|
||||
ROM_REGION( 0x20000, "spr_gfx", 0 ) /* sprite data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:spr_gfx", 0 ) /* sprite data */
|
||||
ROM_LOAD( "20.8W", 0x10000, 0x8000, CRC(8299f247) SHA1(71891f7b1fbfaed14c3854b7f6e10a3ddb4bd479) )
|
||||
ROM_LOAD( "21.9W", 0x18000, 0x8000, CRC(b57dc037) SHA1(69ac79a95ba9ace7c9ca7af480a4a10176be5ace) )
|
||||
ROM_LOAD( "18.6W", 0x00000, 0x8000, CRC(68acd627) SHA1(f98ff9ccb0913711079a2988e8dd08695fb5e107) )
|
||||
ROM_LOAD( "19.7W", 0x08000, 0x8000, CRC(5170a057) SHA1(9222f9febc222fa0c2eead258ad77c857f6d40c8) )
|
||||
|
||||
ROM_REGION( 0x10000, "fg_map", 0 ) /* foreground map data */
|
||||
ROM_REGION( 0x10000, "stfight_vid:fg_map", 0 ) /* foreground map data */
|
||||
ROM_LOAD( "9.7C", 0x00000, 0x8000, CRC(8ceaf4fe) SHA1(5698f2ff44c109825b8d9d0b6dd2426624df668b) )
|
||||
ROM_LOAD( "10.8C", 0x08000, 0x8000, CRC(5a1a227a) SHA1(24928ab218824ae1f5380398ceb90dcad525cc08) )
|
||||
|
||||
ROM_REGION( 0x10000, "bg_map", 0 ) /* background map data */
|
||||
ROM_REGION( 0x10000, "stfight_vid:bg_map", 0 ) /* background map data */
|
||||
ROM_LOAD( "15.7J", 0x00000, 0x8000, CRC(27a310bc) SHA1(dd30d72bc33b0bf7ddaf3ab730e028f51b20152a) )
|
||||
ROM_LOAD( "16.8J", 0x08000, 0x8000, CRC(3d19ce18) SHA1(38f691a23c96ef672637965c1a13f6d1595f9d51) )
|
||||
|
||||
ROM_REGION( 0x0100, "tx_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:tx_clut", 0 )
|
||||
ROM_LOAD( "82s129.006", 0x0000, 0x0100, CRC(f9424b5b) SHA1(e3bc23213406d35d54f1221f17f25d433df273a2) ) /* text lookup table */
|
||||
|
||||
ROM_REGION( 0x0100, "fg_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:fg_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.002", 0x0000, 0x0100, CRC(c883d49b) SHA1(e84900ccf6f27e5043e43c0d85ea1e4eee7e52d3) ) /* fg lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.003", 0x0000, 0x0100, CRC(af81882a) SHA1(b1008c991bd8d1157b3479e465ab286c70418b58) )
|
||||
|
||||
ROM_REGION( 0x0100, "bg_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:bg_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.004", 0x0000, 0x0100, CRC(1831ce7c) SHA1(57afbee9225f0efd63895a5f522e96dc87ca2616) ) /* bg lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.005", 0x0000, 0x0100, CRC(96cb6293) SHA1(1dcdeaa995e6ffa3753b742842c5ffe0f68ef8cd) )
|
||||
|
||||
ROM_REGION( 0x0100, "spr_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:spr_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.052", 0x0000, 0x0100, CRC(3d915ffc) SHA1(921be6d5e5fc0fdee9c9f545c1c4a0c334e9844c) ) /* sprite lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.066", 0x0000, 0x0100, CRC(51e8832f) SHA1(ed8c00559e7a02bb8c11861d747c8c64c01b7437) )
|
||||
|
||||
@ -762,47 +659,47 @@ ROM_START( empcityj )
|
||||
ROM_REGION( 0x0800, "mcu", 0 )
|
||||
ROM_LOAD( "empcityj_68705.3j", 0x0000, 0x0800, BAD_DUMP CRC(19bdb0a9) SHA1(6baba9a46d64ae8349c7e9713419141f76a7af96) )
|
||||
|
||||
ROM_REGION( 0x02000, "tx_gfx", 0 ) /* character data */
|
||||
ROM_REGION( 0x02000, "stfight_vid:tx_gfx", 0 ) /* character data */
|
||||
ROM_LOAD( "17.2N", 0x0000, 0x2000, CRC(1b3706b5) SHA1(61f069329a7a836523ffc8cce915b0d0129fd896) )
|
||||
|
||||
ROM_REGION( 0x20000, "fg_gfx", 0 ) /* foreground tile pixel data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:fg_gfx", 0 ) /* foreground tile pixel data */
|
||||
ROM_LOAD( "7.4C", 0x10000, 0x8000, CRC(2c6caa5f) SHA1(f6893cb87004979ead331897c684f995f850447e) )
|
||||
ROM_LOAD( "8.5C", 0x18000, 0x8000, CRC(e11ded31) SHA1(e3e634ad324d51e52d79dd79e5e6e5697cb8d21f) )
|
||||
ROM_LOAD( "5.2C", 0x00000, 0x8000, CRC(0c099a31) SHA1(dabaf8edc59e4954941cd8176031a358f45a1956) )
|
||||
ROM_LOAD( "6.3C", 0x08000, 0x8000, CRC(3cc77c31) SHA1(13d2324df5a322d499c9959a6bb3a844edaefb45) )
|
||||
|
||||
ROM_REGION( 0x20000, "bg_gfx", 0 ) /* background tile pixel data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:bg_gfx", 0 ) /* background tile pixel data */
|
||||
ROM_LOAD( "13.4C", 0x10000, 0x8000, CRC(0ae48dd3) SHA1(ca3d9aeb9f4343c379cef9282e408fbf8aa67d99) )
|
||||
ROM_LOAD( "14.5J", 0x18000, 0x8000, CRC(debf5d76) SHA1(eb18c35166eb5f93be98b3c30c7d909c0a68eada) )
|
||||
ROM_LOAD( "11.2J", 0x00000, 0x8000, CRC(8261ecfe) SHA1(5817f4a0458a949298414fe09c86bbcf50be52f3) )
|
||||
ROM_LOAD( "12.3J", 0x08000, 0x8000, CRC(71137301) SHA1(087a9f401939bc30f1dafa9916e8d8c564595a57) )
|
||||
|
||||
ROM_REGION( 0x20000, "spr_gfx", 0 ) /* sprite data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:spr_gfx", 0 ) /* sprite data */
|
||||
ROM_LOAD( "20.8W", 0x10000, 0x8000, CRC(8299f247) SHA1(71891f7b1fbfaed14c3854b7f6e10a3ddb4bd479) )
|
||||
ROM_LOAD( "21.9W", 0x18000, 0x8000, CRC(b57dc037) SHA1(69ac79a95ba9ace7c9ca7af480a4a10176be5ace) )
|
||||
ROM_LOAD( "18.6W", 0x00000, 0x8000, CRC(68acd627) SHA1(f98ff9ccb0913711079a2988e8dd08695fb5e107) )
|
||||
ROM_LOAD( "19.7W", 0x08000, 0x8000, CRC(5170a057) SHA1(9222f9febc222fa0c2eead258ad77c857f6d40c8) )
|
||||
|
||||
ROM_REGION( 0x10000, "fg_map", 0 ) /* foreground map data */
|
||||
ROM_REGION( 0x10000, "stfight_vid:fg_map", 0 ) /* foreground map data */
|
||||
ROM_LOAD( "9.7C", 0x00000, 0x8000, CRC(8ceaf4fe) SHA1(5698f2ff44c109825b8d9d0b6dd2426624df668b) )
|
||||
ROM_LOAD( "10.8C", 0x08000, 0x8000, CRC(5a1a227a) SHA1(24928ab218824ae1f5380398ceb90dcad525cc08) )
|
||||
|
||||
ROM_REGION( 0x10000, "bg_map", 0 ) /* background map data */
|
||||
ROM_REGION( 0x10000, "stfight_vid:bg_map", 0 ) /* background map data */
|
||||
ROM_LOAD( "15.7J", 0x00000, 0x8000, CRC(27a310bc) SHA1(dd30d72bc33b0bf7ddaf3ab730e028f51b20152a) )
|
||||
ROM_LOAD( "16.8J", 0x08000, 0x8000, CRC(3d19ce18) SHA1(38f691a23c96ef672637965c1a13f6d1595f9d51) )
|
||||
|
||||
ROM_REGION( 0x0100, "tx_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:tx_clut", 0 )
|
||||
ROM_LOAD( "82s129.006", 0x0000, 0x0100, CRC(f9424b5b) SHA1(e3bc23213406d35d54f1221f17f25d433df273a2) ) /* text lookup table */
|
||||
|
||||
ROM_REGION( 0x0100, "fg_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:fg_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.002", 0x0000, 0x0100, CRC(c883d49b) SHA1(e84900ccf6f27e5043e43c0d85ea1e4eee7e52d3) ) /* fg lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.003", 0x0000, 0x0100, CRC(af81882a) SHA1(b1008c991bd8d1157b3479e465ab286c70418b58) )
|
||||
|
||||
ROM_REGION( 0x0100, "bg_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:bg_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.004", 0x0000, 0x0100, CRC(1831ce7c) SHA1(57afbee9225f0efd63895a5f522e96dc87ca2616) ) /* bg lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.005", 0x0000, 0x0100, CRC(96cb6293) SHA1(1dcdeaa995e6ffa3753b742842c5ffe0f68ef8cd) )
|
||||
|
||||
ROM_REGION( 0x0100, "spr_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:spr_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.052", 0x0000, 0x0100, CRC(3d915ffc) SHA1(921be6d5e5fc0fdee9c9f545c1c4a0c334e9844c) ) /* sprite lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.066", 0x0000, 0x0100, CRC(51e8832f) SHA1(ed8c00559e7a02bb8c11861d747c8c64c01b7437) )
|
||||
|
||||
@ -824,47 +721,47 @@ ROM_START( stfight )
|
||||
ROM_REGION( 0x0800, "mcu", 0 )
|
||||
ROM_LOAD( "stfight_68705.3j", 0x0000, 0x0800, BAD_DUMP CRC(f4cc50d6) SHA1(2ff62a349b74fa965b5d19615e52b867c04988dc) )
|
||||
|
||||
ROM_REGION( 0x02000, "tx_gfx", 0 ) /* character data */
|
||||
ROM_REGION( 0x02000, "stfight_vid:tx_gfx", 0 ) /* character data */
|
||||
ROM_LOAD( "17.2N", 0x0000, 0x2000, CRC(1b3706b5) SHA1(61f069329a7a836523ffc8cce915b0d0129fd896) )
|
||||
|
||||
ROM_REGION( 0x20000, "fg_gfx", 0 ) /* foreground tile pixel data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:fg_gfx", 0 ) /* foreground tile pixel data */
|
||||
ROM_LOAD( "7.4C", 0x10000, 0x8000, CRC(2c6caa5f) SHA1(f6893cb87004979ead331897c684f995f850447e) )
|
||||
ROM_LOAD( "8.5C", 0x18000, 0x8000, CRC(e11ded31) SHA1(e3e634ad324d51e52d79dd79e5e6e5697cb8d21f) )
|
||||
ROM_LOAD( "5.2C", 0x00000, 0x8000, CRC(0c099a31) SHA1(dabaf8edc59e4954941cd8176031a358f45a1956) )
|
||||
ROM_LOAD( "6.3C", 0x08000, 0x8000, CRC(3cc77c31) SHA1(13d2324df5a322d499c9959a6bb3a844edaefb45) )
|
||||
|
||||
ROM_REGION( 0x20000, "bg_gfx", 0 ) /* background tile pixel data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:bg_gfx", 0 ) /* background tile pixel data */
|
||||
ROM_LOAD( "13.4C", 0x10000, 0x8000, CRC(0ae48dd3) SHA1(ca3d9aeb9f4343c379cef9282e408fbf8aa67d99) )
|
||||
ROM_LOAD( "14.5J", 0x18000, 0x8000, CRC(debf5d76) SHA1(eb18c35166eb5f93be98b3c30c7d909c0a68eada) )
|
||||
ROM_LOAD( "11.2J", 0x00000, 0x8000, CRC(8261ecfe) SHA1(5817f4a0458a949298414fe09c86bbcf50be52f3) )
|
||||
ROM_LOAD( "12.3J", 0x08000, 0x8000, CRC(71137301) SHA1(087a9f401939bc30f1dafa9916e8d8c564595a57) )
|
||||
|
||||
ROM_REGION( 0x20000, "spr_gfx", 0 ) /* sprite data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:spr_gfx", 0 ) /* sprite data */
|
||||
ROM_LOAD( "20.8W", 0x10000, 0x8000, CRC(8299f247) SHA1(71891f7b1fbfaed14c3854b7f6e10a3ddb4bd479) )
|
||||
ROM_LOAD( "21.9W", 0x18000, 0x8000, CRC(b57dc037) SHA1(69ac79a95ba9ace7c9ca7af480a4a10176be5ace) )
|
||||
ROM_LOAD( "18.6W", 0x00000, 0x8000, CRC(68acd627) SHA1(f98ff9ccb0913711079a2988e8dd08695fb5e107) )
|
||||
ROM_LOAD( "19.7W", 0x08000, 0x8000, CRC(5170a057) SHA1(9222f9febc222fa0c2eead258ad77c857f6d40c8) )
|
||||
|
||||
ROM_REGION( 0x10000, "fg_map", 0 ) /* foreground map data */
|
||||
ROM_REGION( 0x10000, "stfight_vid:fg_map", 0 ) /* foreground map data */
|
||||
ROM_LOAD( "9.7C", 0x00000, 0x8000, CRC(8ceaf4fe) SHA1(5698f2ff44c109825b8d9d0b6dd2426624df668b) )
|
||||
ROM_LOAD( "10.8C", 0x08000, 0x8000, CRC(5a1a227a) SHA1(24928ab218824ae1f5380398ceb90dcad525cc08) )
|
||||
|
||||
ROM_REGION( 0x10000, "bg_map", 0 ) /* background map data */
|
||||
ROM_REGION( 0x10000, "stfight_vid:bg_map", 0 ) /* background map data */
|
||||
ROM_LOAD( "15.7J", 0x00000, 0x8000, CRC(27a310bc) SHA1(dd30d72bc33b0bf7ddaf3ab730e028f51b20152a) )
|
||||
ROM_LOAD( "16.8J", 0x08000, 0x8000, CRC(3d19ce18) SHA1(38f691a23c96ef672637965c1a13f6d1595f9d51) )
|
||||
|
||||
ROM_REGION( 0x0100, "tx_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:tx_clut", 0 )
|
||||
ROM_LOAD( "82s129.006", 0x0000, 0x0100, CRC(f9424b5b) SHA1(e3bc23213406d35d54f1221f17f25d433df273a2) ) /* text lookup table */
|
||||
|
||||
ROM_REGION( 0x0100, "fg_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:fg_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.002", 0x0000, 0x0100, CRC(c883d49b) SHA1(e84900ccf6f27e5043e43c0d85ea1e4eee7e52d3) ) /* fg lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.003", 0x0000, 0x0100, CRC(af81882a) SHA1(b1008c991bd8d1157b3479e465ab286c70418b58) )
|
||||
|
||||
ROM_REGION( 0x0100, "bg_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:bg_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.004", 0x0000, 0x0100, CRC(1831ce7c) SHA1(57afbee9225f0efd63895a5f522e96dc87ca2616) ) /* bg lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.005", 0x0000, 0x0100, CRC(96cb6293) SHA1(1dcdeaa995e6ffa3753b742842c5ffe0f68ef8cd) )
|
||||
|
||||
ROM_REGION( 0x0100, "spr_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:spr_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.052", 0x0000, 0x0100, CRC(3d915ffc) SHA1(921be6d5e5fc0fdee9c9f545c1c4a0c334e9844c) ) /* sprite lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.066", 0x0000, 0x0100, CRC(51e8832f) SHA1(ed8c00559e7a02bb8c11861d747c8c64c01b7437) )
|
||||
|
||||
@ -888,47 +785,47 @@ ROM_START( stfighta )
|
||||
ROM_REGION( 0x0800, "mcu", 0 )
|
||||
ROM_LOAD( "stfight_68705.3j", 0x0000, 0x0800, BAD_DUMP CRC(f4cc50d6) SHA1(2ff62a349b74fa965b5d19615e52b867c04988dc) )
|
||||
|
||||
ROM_REGION( 0x02000, "tx_gfx", 0 ) /* character data */
|
||||
ROM_REGION( 0x02000, "stfight_vid:tx_gfx", 0 ) /* character data */
|
||||
ROM_LOAD( "17.2N", 0x0000, 0x2000, CRC(1b3706b5) SHA1(61f069329a7a836523ffc8cce915b0d0129fd896) )
|
||||
|
||||
ROM_REGION( 0x20000, "fg_gfx", 0 ) /* foreground tile pixel data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:fg_gfx", 0 ) /* foreground tile pixel data */
|
||||
ROM_LOAD( "7.4C", 0x10000, 0x8000, CRC(2c6caa5f) SHA1(f6893cb87004979ead331897c684f995f850447e) )
|
||||
ROM_LOAD( "8.5C", 0x18000, 0x8000, CRC(e11ded31) SHA1(e3e634ad324d51e52d79dd79e5e6e5697cb8d21f) )
|
||||
ROM_LOAD( "5.2C", 0x00000, 0x8000, CRC(0c099a31) SHA1(dabaf8edc59e4954941cd8176031a358f45a1956) )
|
||||
ROM_LOAD( "6.3C", 0x08000, 0x8000, CRC(3cc77c31) SHA1(13d2324df5a322d499c9959a6bb3a844edaefb45) )
|
||||
|
||||
ROM_REGION( 0x20000, "bg_gfx", 0 ) /* background tile pixel data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:bg_gfx", 0 ) /* background tile pixel data */
|
||||
ROM_LOAD( "13.4C", 0x10000, 0x8000, CRC(0ae48dd3) SHA1(ca3d9aeb9f4343c379cef9282e408fbf8aa67d99) )
|
||||
ROM_LOAD( "14.5J", 0x18000, 0x8000, CRC(debf5d76) SHA1(eb18c35166eb5f93be98b3c30c7d909c0a68eada) )
|
||||
ROM_LOAD( "11.2J", 0x00000, 0x8000, CRC(8261ecfe) SHA1(5817f4a0458a949298414fe09c86bbcf50be52f3) )
|
||||
ROM_LOAD( "12.3J", 0x08000, 0x8000, CRC(71137301) SHA1(087a9f401939bc30f1dafa9916e8d8c564595a57) )
|
||||
|
||||
ROM_REGION( 0x20000, "spr_gfx", 0 ) /* sprite data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:spr_gfx", 0 ) /* sprite data */
|
||||
ROM_LOAD( "20.8W", 0x10000, 0x8000, CRC(8299f247) SHA1(71891f7b1fbfaed14c3854b7f6e10a3ddb4bd479) )
|
||||
ROM_LOAD( "21.9W", 0x18000, 0x8000, CRC(b57dc037) SHA1(69ac79a95ba9ace7c9ca7af480a4a10176be5ace) )
|
||||
ROM_LOAD( "18.6W", 0x00000, 0x8000, CRC(68acd627) SHA1(f98ff9ccb0913711079a2988e8dd08695fb5e107) )
|
||||
ROM_LOAD( "19.7W", 0x08000, 0x8000, CRC(5170a057) SHA1(9222f9febc222fa0c2eead258ad77c857f6d40c8) )
|
||||
|
||||
ROM_REGION( 0x10000, "fg_map", 0 ) /* foreground map data */
|
||||
ROM_REGION( 0x10000, "stfight_vid:fg_map", 0 ) /* foreground map data */
|
||||
ROM_LOAD( "9.7C", 0x00000, 0x8000, CRC(8ceaf4fe) SHA1(5698f2ff44c109825b8d9d0b6dd2426624df668b) )
|
||||
ROM_LOAD( "10.8C", 0x08000, 0x8000, CRC(5a1a227a) SHA1(24928ab218824ae1f5380398ceb90dcad525cc08) )
|
||||
|
||||
ROM_REGION( 0x10000, "bg_map", 0 ) /* background map data */
|
||||
ROM_REGION( 0x10000, "stfight_vid:bg_map", 0 ) /* background map data */
|
||||
ROM_LOAD( "15.7J", 0x00000, 0x8000, CRC(27a310bc) SHA1(dd30d72bc33b0bf7ddaf3ab730e028f51b20152a) )
|
||||
ROM_LOAD( "16.8J", 0x08000, 0x8000, CRC(3d19ce18) SHA1(38f691a23c96ef672637965c1a13f6d1595f9d51) )
|
||||
|
||||
ROM_REGION( 0x0100, "tx_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:tx_clut", 0 )
|
||||
ROM_LOAD( "82s129.006", 0x0000, 0x0100, CRC(f9424b5b) SHA1(e3bc23213406d35d54f1221f17f25d433df273a2) ) /* text lookup table */
|
||||
|
||||
ROM_REGION( 0x0100, "fg_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:fg_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.002", 0x0000, 0x0100, CRC(c883d49b) SHA1(e84900ccf6f27e5043e43c0d85ea1e4eee7e52d3) ) /* fg lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.003", 0x0000, 0x0100, CRC(af81882a) SHA1(b1008c991bd8d1157b3479e465ab286c70418b58) )
|
||||
|
||||
ROM_REGION( 0x0100, "bg_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:bg_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.004", 0x0000, 0x0100, CRC(1831ce7c) SHA1(57afbee9225f0efd63895a5f522e96dc87ca2616) ) /* bg lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.005", 0x0000, 0x0100, CRC(96cb6293) SHA1(1dcdeaa995e6ffa3753b742842c5ffe0f68ef8cd) )
|
||||
|
||||
ROM_REGION( 0x0100, "spr_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:spr_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.052", 0x0000, 0x0100, CRC(3d915ffc) SHA1(921be6d5e5fc0fdee9c9f545c1c4a0c334e9844c) ) /* sprite lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.066", 0x0000, 0x0100, CRC(51e8832f) SHA1(ed8c00559e7a02bb8c11861d747c8c64c01b7437) )
|
||||
|
||||
@ -950,47 +847,47 @@ ROM_START( empcityi ) // very similar to above set
|
||||
ROM_REGION( 0x0800, "mcu", 0 )
|
||||
ROM_LOAD( "empcityi_68705.3j", 0x0000, 0x0800, BAD_DUMP CRC(b1817d44) SHA1(395aad763eb054514f658a14c12b92c1b90c02ce) )
|
||||
|
||||
ROM_REGION( 0x02000, "tx_gfx", 0 ) /* character data */
|
||||
ROM_REGION( 0x02000, "stfight_vid:tx_gfx", 0 ) /* character data */
|
||||
ROM_LOAD( "17.2N", 0x0000, 0x2000, CRC(1b3706b5) SHA1(61f069329a7a836523ffc8cce915b0d0129fd896) )
|
||||
|
||||
ROM_REGION( 0x20000, "fg_gfx", 0 ) /* foreground tile pixel data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:fg_gfx", 0 ) /* foreground tile pixel data */
|
||||
ROM_LOAD( "7.4C", 0x10000, 0x8000, CRC(2c6caa5f) SHA1(f6893cb87004979ead331897c684f995f850447e) )
|
||||
ROM_LOAD( "8.5C", 0x18000, 0x8000, CRC(e11ded31) SHA1(e3e634ad324d51e52d79dd79e5e6e5697cb8d21f) )
|
||||
ROM_LOAD( "5.2C", 0x00000, 0x8000, CRC(0c099a31) SHA1(dabaf8edc59e4954941cd8176031a358f45a1956) )
|
||||
ROM_LOAD( "6.3C", 0x08000, 0x8000, CRC(3cc77c31) SHA1(13d2324df5a322d499c9959a6bb3a844edaefb45) )
|
||||
|
||||
ROM_REGION( 0x20000, "bg_gfx", 0 ) /* background tile pixel data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:bg_gfx", 0 ) /* background tile pixel data */
|
||||
ROM_LOAD( "13.4C", 0x10000, 0x8000, CRC(0ae48dd3) SHA1(ca3d9aeb9f4343c379cef9282e408fbf8aa67d99) )
|
||||
ROM_LOAD( "14.5J", 0x18000, 0x8000, CRC(debf5d76) SHA1(eb18c35166eb5f93be98b3c30c7d909c0a68eada) )
|
||||
ROM_LOAD( "11.2J", 0x00000, 0x8000, CRC(8261ecfe) SHA1(5817f4a0458a949298414fe09c86bbcf50be52f3) )
|
||||
ROM_LOAD( "12.3J", 0x08000, 0x8000, CRC(71137301) SHA1(087a9f401939bc30f1dafa9916e8d8c564595a57) )
|
||||
|
||||
ROM_REGION( 0x20000, "spr_gfx", 0 ) /* sprite data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:spr_gfx", 0 ) /* sprite data */
|
||||
ROM_LOAD( "20.8W", 0x10000, 0x8000, CRC(8299f247) SHA1(71891f7b1fbfaed14c3854b7f6e10a3ddb4bd479) )
|
||||
ROM_LOAD( "21.9W", 0x18000, 0x8000, CRC(b57dc037) SHA1(69ac79a95ba9ace7c9ca7af480a4a10176be5ace) )
|
||||
ROM_LOAD( "18.6W", 0x00000, 0x8000, CRC(68acd627) SHA1(f98ff9ccb0913711079a2988e8dd08695fb5e107) )
|
||||
ROM_LOAD( "19.7W", 0x08000, 0x8000, CRC(5170a057) SHA1(9222f9febc222fa0c2eead258ad77c857f6d40c8) )
|
||||
|
||||
ROM_REGION( 0x10000, "fg_map", 0 ) /* foreground map data */
|
||||
ROM_REGION( 0x10000, "stfight_vid:fg_map", 0 ) /* foreground map data */
|
||||
ROM_LOAD( "9.7C", 0x00000, 0x8000, CRC(8ceaf4fe) SHA1(5698f2ff44c109825b8d9d0b6dd2426624df668b) )
|
||||
ROM_LOAD( "10.8C", 0x08000, 0x8000, CRC(5a1a227a) SHA1(24928ab218824ae1f5380398ceb90dcad525cc08) )
|
||||
|
||||
ROM_REGION( 0x10000, "bg_map", 0 ) /* background map data */
|
||||
ROM_REGION( 0x10000, "stfight_vid:bg_map", 0 ) /* background map data */
|
||||
ROM_LOAD( "15.7J", 0x00000, 0x8000, CRC(27a310bc) SHA1(dd30d72bc33b0bf7ddaf3ab730e028f51b20152a) )
|
||||
ROM_LOAD( "16.8J", 0x08000, 0x8000, CRC(3d19ce18) SHA1(38f691a23c96ef672637965c1a13f6d1595f9d51) )
|
||||
|
||||
ROM_REGION( 0x0100, "tx_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:tx_clut", 0 )
|
||||
ROM_LOAD( "82s129.006", 0x0000, 0x0100, CRC(f9424b5b) SHA1(e3bc23213406d35d54f1221f17f25d433df273a2) ) /* text lookup table */
|
||||
|
||||
ROM_REGION( 0x0100, "fg_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:fg_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.002", 0x0000, 0x0100, CRC(c883d49b) SHA1(e84900ccf6f27e5043e43c0d85ea1e4eee7e52d3) ) /* fg lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.003", 0x0000, 0x0100, CRC(af81882a) SHA1(b1008c991bd8d1157b3479e465ab286c70418b58) )
|
||||
|
||||
ROM_REGION( 0x0100, "bg_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:bg_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.004", 0x0000, 0x0100, CRC(1831ce7c) SHA1(57afbee9225f0efd63895a5f522e96dc87ca2616) ) /* bg lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.005", 0x0000, 0x0100, CRC(96cb6293) SHA1(1dcdeaa995e6ffa3753b742842c5ffe0f68ef8cd) )
|
||||
|
||||
ROM_REGION( 0x0100, "spr_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:spr_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.052", 0x0000, 0x0100, CRC(3d915ffc) SHA1(921be6d5e5fc0fdee9c9f545c1c4a0c334e9844c) ) /* sprite lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.066", 0x0000, 0x0100, CRC(51e8832f) SHA1(ed8c00559e7a02bb8c11861d747c8c64c01b7437) )
|
||||
|
||||
@ -1012,47 +909,47 @@ ROM_START( stfightgb )
|
||||
ROM_REGION( 0x0800, "mcu", 0 )
|
||||
ROM_LOAD( "stfightgb_68705.3J", 0x0000, 0x0800, BAD_DUMP CRC(3b1b2660) SHA1(8d5d853a0861ff9cdea27eb3588586b441cc77b1) ) //hand-crafted, to be dumped
|
||||
|
||||
ROM_REGION( 0x02000, "tx_gfx", 0 ) /* character data */
|
||||
ROM_REGION( 0x02000, "stfight_vid:tx_gfx", 0 ) /* character data */
|
||||
ROM_LOAD( "17.2N", 0x0000, 0x2000, CRC(1b3706b5) SHA1(61f069329a7a836523ffc8cce915b0d0129fd896) )
|
||||
|
||||
ROM_REGION( 0x20000, "fg_gfx", 0 ) /* foreground tile pixel data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:fg_gfx", 0 ) /* foreground tile pixel data */
|
||||
ROM_LOAD( "7.4C", 0x10000, 0x8000, CRC(2c6caa5f) SHA1(f6893cb87004979ead331897c684f995f850447e) )
|
||||
ROM_LOAD( "8.5C", 0x18000, 0x8000, CRC(e11ded31) SHA1(e3e634ad324d51e52d79dd79e5e6e5697cb8d21f) )
|
||||
ROM_LOAD( "5.2C", 0x00000, 0x8000, CRC(0c099a31) SHA1(dabaf8edc59e4954941cd8176031a358f45a1956) )
|
||||
ROM_LOAD( "6.3C", 0x08000, 0x8000, CRC(3cc77c31) SHA1(13d2324df5a322d499c9959a6bb3a844edaefb45) )
|
||||
|
||||
ROM_REGION( 0x20000, "bg_gfx", 0 ) /* background tile pixel data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:bg_gfx", 0 ) /* background tile pixel data */
|
||||
ROM_LOAD( "13.4C", 0x10000, 0x8000, CRC(0ae48dd3) SHA1(ca3d9aeb9f4343c379cef9282e408fbf8aa67d99) )
|
||||
ROM_LOAD( "14.5J", 0x18000, 0x8000, CRC(debf5d76) SHA1(eb18c35166eb5f93be98b3c30c7d909c0a68eada) )
|
||||
ROM_LOAD( "11.2J", 0x00000, 0x8000, CRC(8261ecfe) SHA1(5817f4a0458a949298414fe09c86bbcf50be52f3) )
|
||||
ROM_LOAD( "12.3J", 0x08000, 0x8000, CRC(71137301) SHA1(087a9f401939bc30f1dafa9916e8d8c564595a57) )
|
||||
|
||||
ROM_REGION( 0x20000, "spr_gfx", 0 ) /* sprite data */
|
||||
ROM_REGION( 0x20000, "stfight_vid:spr_gfx", 0 ) /* sprite data */
|
||||
ROM_LOAD( "20.8W", 0x10000, 0x8000, CRC(8299f247) SHA1(71891f7b1fbfaed14c3854b7f6e10a3ddb4bd479) )
|
||||
ROM_LOAD( "21.9W", 0x18000, 0x8000, CRC(b57dc037) SHA1(69ac79a95ba9ace7c9ca7af480a4a10176be5ace) )
|
||||
ROM_LOAD( "18.6W", 0x00000, 0x8000, CRC(68acd627) SHA1(f98ff9ccb0913711079a2988e8dd08695fb5e107) )
|
||||
ROM_LOAD( "19.7W", 0x08000, 0x8000, CRC(5170a057) SHA1(9222f9febc222fa0c2eead258ad77c857f6d40c8) )
|
||||
|
||||
ROM_REGION( 0x10000, "fg_map", 0 ) /* foreground map data */
|
||||
ROM_REGION( 0x10000, "stfight_vid:fg_map", 0 ) /* foreground map data */
|
||||
ROM_LOAD( "9.7C", 0x00000, 0x8000, CRC(8ceaf4fe) SHA1(5698f2ff44c109825b8d9d0b6dd2426624df668b) )
|
||||
ROM_LOAD( "10.8C", 0x08000, 0x8000, CRC(5a1a227a) SHA1(24928ab218824ae1f5380398ceb90dcad525cc08) )
|
||||
|
||||
ROM_REGION( 0x10000, "bg_map", 0 ) /* background map data */
|
||||
ROM_REGION( 0x10000, "stfight_vid:bg_map", 0 ) /* background map data */
|
||||
ROM_LOAD( "15.7J", 0x00000, 0x8000, CRC(27a310bc) SHA1(dd30d72bc33b0bf7ddaf3ab730e028f51b20152a) )
|
||||
ROM_LOAD( "16.8J", 0x08000, 0x8000, CRC(3d19ce18) SHA1(38f691a23c96ef672637965c1a13f6d1595f9d51) )
|
||||
|
||||
ROM_REGION( 0x0100, "tx_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:tx_clut", 0 )
|
||||
ROM_LOAD( "82s129.006", 0x0000, 0x0100, CRC(f9424b5b) SHA1(e3bc23213406d35d54f1221f17f25d433df273a2) ) /* text lookup table */
|
||||
|
||||
ROM_REGION( 0x0100, "fg_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:fg_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.002", 0x0000, 0x0100, CRC(c883d49b) SHA1(e84900ccf6f27e5043e43c0d85ea1e4eee7e52d3) ) /* fg lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.003", 0x0000, 0x0100, CRC(af81882a) SHA1(b1008c991bd8d1157b3479e465ab286c70418b58) )
|
||||
|
||||
ROM_REGION( 0x0100, "bg_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:bg_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.004", 0x0000, 0x0100, CRC(1831ce7c) SHA1(57afbee9225f0efd63895a5f522e96dc87ca2616) ) /* bg lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.005", 0x0000, 0x0100, CRC(96cb6293) SHA1(1dcdeaa995e6ffa3753b742842c5ffe0f68ef8cd) )
|
||||
|
||||
ROM_REGION( 0x0100, "spr_clut", 0 )
|
||||
ROM_REGION( 0x0100, "stfight_vid:spr_clut", 0 )
|
||||
ROM_LOAD_NIB_HIGH( "82s129.052", 0x0000, 0x0100, CRC(3d915ffc) SHA1(921be6d5e5fc0fdee9c9f545c1c4a0c334e9844c) ) /* sprite lookup table */
|
||||
ROM_LOAD_NIB_LOW( "82s129.066", 0x0000, 0x0100, CRC(51e8832f) SHA1(ed8c00559e7a02bb8c11861d747c8c64c01b7437) )
|
||||
|
||||
@ -1083,13 +980,6 @@ TB 4E 82S129 2.BPR 00DC [ motion objects ]
|
||||
TB 16A 63S281 x x [ clut ] NOTE: dumped much later
|
||||
LB 3J 68705
|
||||
|
||||
|
||||
Notes: LB - CPU board S-0086-002-0B
|
||||
TB - GFX board S-0087-807
|
||||
|
||||
The PCB looks like a prototype, due to the modifications
|
||||
to the PCB. The game is probably licensed from Seibu.
|
||||
|
||||
The 0/1/2 bipolar PROMs are not used for colour.
|
||||
|
||||
However, this contradicts Guru's findings: "If I short some of the pins(of 0.bpr at 7A)
|
||||
@ -1128,45 +1018,48 @@ ROM_START( cshootert )
|
||||
ROM_REGION( 0x0800, "mcu", 0 ) /* 2k for the microcontroller */
|
||||
ROM_LOAD( "crshooter.3j", 0x0000, 0x0800, CRC(aae61ce7) SHA1(bb2b9887ec73a5b82604b9b64c533c2242d20d0f) )
|
||||
|
||||
ROM_REGION( 0x02000, "tx_gfx", 0 ) // TX Layer
|
||||
ROM_LOAD( "r3.11a", 0x00000, 0x02000, CRC(67b50a47) SHA1(b1f4aefc9437edbeefba5371149cc08c0b55c741) )
|
||||
|
||||
ROM_REGION( 0x100, "tx_clut", 0 )
|
||||
ROM_LOAD( "63s281.16a", 0x0000, 0x0100, CRC(0b8b914b) SHA1(8cf4910b846de79661cc187887171ed8ebfd6719) ) // clut
|
||||
|
||||
/* ### MODULE 1 ### Background generation / graphics */
|
||||
ROM_REGION( 0x40000, "bg_map", 0 )
|
||||
ROM_LOAD16_BYTE( "bg_layouts_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "bg_layouts_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x40000, "bg_gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "bg_tiles_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "bg_tiles_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x100, "bg_clut", 0 )
|
||||
ROM_LOAD( "bg_clut", 0x000, 0x100, NO_DUMP )
|
||||
|
||||
/* ### MODULE 2 ### Foreground generation / graphics */
|
||||
ROM_REGION( 0x40000, "fg_map", 0 )
|
||||
ROM_LOAD16_BYTE( "fg_layouts_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "fg_layouts_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x40000, "fg_gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "fg_tiles_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "fg_tiles_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x100, "fg_clut", 0 )
|
||||
ROM_LOAD( "fg_clut", 0x000, 0x100, NO_DUMP )
|
||||
|
||||
/* ### MODULE 3 ### Sprite graphics */
|
||||
ROM_REGION( 0x40000, "spr_gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "sprite_tiles_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "sprite_tiles_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x100, "spr_clut", 0 )
|
||||
ROM_LOAD( "spr_clut", 0x000, 0x100, NO_DUMP )
|
||||
|
||||
ROM_REGION( 0x820, "proms", 0 )
|
||||
ROM_LOAD( "82s129.9s", 0x0500, 0x0100, CRC(cf14ba30) SHA1(3284b6809075756b3c8e07d9705fc7eacb7556f1) ) // timing? (not used)
|
||||
ROM_LOAD( "82s129.4e", 0x0600, 0x0100, CRC(0eaf5158) SHA1(bafd4108708f66cd7b280e47152b108f3e254fc9) ) // timing? (not used)
|
||||
ROM_LOAD( "82s123.7a", 0x0800, 0x0020, CRC(93e2d292) SHA1(af8edd0cfe85f28ede9604cfaf4516d54e5277c9) ) // ? (not used)
|
||||
|
||||
// below are from the video board
|
||||
|
||||
ROM_REGION( 0x02000, "airraid_vid:tx_gfx", 0 ) // TX Layer
|
||||
ROM_LOAD( "r3.11a", 0x00000, 0x02000, CRC(67b50a47) SHA1(b1f4aefc9437edbeefba5371149cc08c0b55c741) )
|
||||
|
||||
ROM_REGION( 0x100, "airraid_vid:tx_clut", 0 )
|
||||
ROM_LOAD( "63s281.16a", 0x0000, 0x0100, CRC(0b8b914b) SHA1(8cf4910b846de79661cc187887171ed8ebfd6719) ) // clut
|
||||
|
||||
/* ### MODULE 1 ### Background generation / graphics */
|
||||
ROM_REGION( 0x40000, "airraid_vid:bg_map", 0 )
|
||||
ROM_LOAD16_BYTE( "bg_layouts_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "bg_layouts_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x40000, "airraid_vid:bg_gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "bg_tiles_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "bg_tiles_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x100, "airraid_vid:bg_clut", 0 )
|
||||
ROM_LOAD( "bg_clut", 0x000, 0x100, NO_DUMP )
|
||||
|
||||
/* ### MODULE 2 ### Foreground generation / graphics */
|
||||
ROM_REGION( 0x40000, "airraid_vid:fg_map", 0 )
|
||||
ROM_LOAD16_BYTE( "fg_layouts_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "fg_layouts_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x40000, "airraid_vid:fg_gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "fg_tiles_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "fg_tiles_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x100, "airraid_vid:fg_clut", 0 )
|
||||
ROM_LOAD( "fg_clut", 0x000, 0x100, NO_DUMP )
|
||||
|
||||
/* ### MODULE 3 ### Sprite graphics */
|
||||
ROM_REGION( 0x40000, "airraid_vid:spr_gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "sprite_tiles_even", 0x00000, 0x20000, NO_DUMP )
|
||||
ROM_LOAD16_BYTE( "sprite_tiles_odd", 0x00001, 0x20000, NO_DUMP )
|
||||
ROM_REGION( 0x100, "airraid_vid:spr_clut", 0 )
|
||||
ROM_LOAD( "spr_clut", 0x000, 0x100, NO_DUMP )
|
||||
ROM_END
|
||||
|
||||
|
||||
// Note: Marked MACHINE_IMPERFECT_SOUND due to YM2203 clock issue
|
||||
GAME( 1986, empcity, 0, stfight, stfight, stfight_state, empcity, ROT0, "Seibu Kaihatsu", "Empire City: 1931 (bootleg?)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, empcityu, empcity, stfight, stfight, stfight_state, stfight, ROT0, "Seibu Kaihatsu (Taito / Romstar license)", "Empire City: 1931 (US)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // different title logo
|
||||
@ -1176,5 +1069,5 @@ GAME( 1986, stfight, empcity, stfight, stfight, stfight_state, stfight, ROT0,
|
||||
GAME( 1986, stfighta, empcity, stfight, stfight, stfight_state, stfight, ROT0, "Seibu Kaihatsu", "Street Fight (bootleg?)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, stfightgb,empcity, stfight, stfight, stfight_state, stfight, ROT0, "Seibu Kaihatsu (Tuning license)", "Street Fight (Germany - Benelux)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
/* Cross Shooter runs on a slightly modified PCB, with a different text tilemap and gfx blobs (see also airraid.c) */
|
||||
/* Cross Shooter uses the same base board, but different video board */
|
||||
GAME( 1987, cshootert, airraid, cshooter, cshooter, stfight_state, cshooter, ROT270, "Seibu Kaihatsu (Taito license)", "Cross Shooter (2 PCB Stack)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -1,6 +1,8 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mark McDougall
|
||||
#include "sound/msm5205.h"
|
||||
#include "video/stfight_dev.h"
|
||||
#include "video/airraid_dev.h"
|
||||
|
||||
class stfight_state : public driver_device
|
||||
{
|
||||
@ -16,28 +18,21 @@ public:
|
||||
m_audiocpu(*this, "audiocpu"),
|
||||
m_mcu(*this, "mcu"),
|
||||
m_msm(*this, "msm"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette"),
|
||||
m_text_char_ram(*this, "text_char_ram"),
|
||||
m_text_attr_ram(*this, "text_attr_ram"),
|
||||
m_tx_vram(*this, "tx_vram"),
|
||||
m_vh_latch_ram(*this, "vh_latch_ram"),
|
||||
m_sprite_ram(*this, "sprite_ram"),
|
||||
m_decrypted_opcodes(*this, "decrypted_opcodes") { }
|
||||
m_decrypted_opcodes(*this, "decrypted_opcodes"),
|
||||
m_stfight_video(*this, "stfight_vid"),
|
||||
m_airraid_video(*this, "airraid_vid")
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device<cpu_device> m_mcu;
|
||||
required_device<msm5205_device> m_msm;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
optional_shared_ptr<UINT8> m_text_char_ram;
|
||||
optional_shared_ptr<UINT8> m_text_attr_ram;
|
||||
optional_shared_ptr<UINT8> m_tx_vram;
|
||||
required_shared_ptr<UINT8> m_vh_latch_ram;
|
||||
required_shared_ptr<UINT8> m_sprite_ram;
|
||||
optional_shared_ptr<UINT8> m_decrypted_opcodes;
|
||||
optional_device<stfight_video_device> m_stfight_video;
|
||||
optional_device<airraid_video_device> m_airraid_video;
|
||||
|
||||
UINT8 *m_decrypt;
|
||||
UINT8 m_fm_data;
|
||||
@ -49,10 +44,6 @@ public:
|
||||
UINT8 m_adpcm_reset;
|
||||
|
||||
UINT8 m_coin_state;
|
||||
tilemap_t *m_fg_tilemap;
|
||||
tilemap_t *m_bg_tilemap;
|
||||
tilemap_t *m_tx_tilemap;
|
||||
int m_sprite_base;
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(stfight_adpcm_int);
|
||||
|
||||
@ -67,31 +58,15 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(stfight_mcu_w);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(stfight_bank_w);
|
||||
DECLARE_WRITE8_MEMBER(stfight_text_char_w);
|
||||
DECLARE_WRITE8_MEMBER(stfight_text_attr_w);
|
||||
DECLARE_WRITE8_MEMBER(stfight_sprite_bank_w);
|
||||
DECLARE_WRITE8_MEMBER(stfight_vh_latch_w);
|
||||
DECLARE_WRITE8_MEMBER(cshooter_text_w);
|
||||
|
||||
|
||||
DECLARE_READ8_MEMBER(stfight_fm_r);
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(fg_scan);
|
||||
TILE_GET_INFO_MEMBER(get_fg_tile_info);
|
||||
TILEMAP_MAPPER_MEMBER(bg_scan);
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_tx_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_cshooter_tx_tile_info);
|
||||
|
||||
DECLARE_VIDEO_START(stfight);
|
||||
DECLARE_VIDEO_START(cshooter);
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
DECLARE_PALETTE_INIT(stfight);
|
||||
UINT32 screen_update_stfight(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
UINT32 screen_update_cshooter(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
INTERRUPT_GEN_MEMBER(stfight_vb_interrupt);
|
||||
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void cshooter_draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
/*
|
||||
MCU specifics
|
||||
|
@ -82,7 +82,6 @@ void stfight_state::machine_start()
|
||||
save_item(NAME(m_adpcm_nibble));
|
||||
save_item(NAME(m_adpcm_reset));
|
||||
save_item(NAME(m_coin_state));
|
||||
save_item(NAME(m_sprite_base));
|
||||
save_item(NAME(m_portA_out));
|
||||
save_item(NAME(m_portA_in));
|
||||
save_item(NAME(m_portB_out));
|
||||
@ -94,6 +93,7 @@ void stfight_state::machine_start()
|
||||
save_item(NAME(m_ddrC));
|
||||
}
|
||||
|
||||
|
||||
void stfight_state::machine_reset()
|
||||
{
|
||||
m_fm_data = 0;
|
||||
|
@ -10285,7 +10285,7 @@ psattack // 2004 Uniana
|
||||
topbladv // 2002 Sonokong. Top Blade V
|
||||
trivrus // 2009 AGT. Trivia R Us
|
||||
|
||||
@source:cshooter.cpp
|
||||
@source:airraid.cpp
|
||||
airraid // (c) 1987 Seibu Kaihatsu
|
||||
cshooter // (c) 1987 JKH (bootleg)
|
||||
|
||||
|
261
src/mame/video/airraid_dev.cpp
Normal file
261
src/mame/video/airraid_dev.cpp
Normal file
@ -0,0 +1,261 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Tomasz Slanina, Angelo Salese, hap, David Haywood
|
||||
|
||||
/* There are 2 versions of the Air Raid / Cross Shooter hardware, one has everything integrated on a single PCB
|
||||
the other is a Air Raid specific video PCB used with the Street Fight motherboard, there could be differences.
|
||||
|
||||
This is very similar to Dark Mist */
|
||||
|
||||
#include "emu.h"
|
||||
#include "airraid_dev.h"
|
||||
|
||||
extern const device_type AIRRAID_VIDEO = &device_creator<airraid_video_device>;
|
||||
|
||||
airraid_video_device::airraid_video_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, AIRRAID_VIDEO, "Seibu Air Raid Video", tag, owner, clock, "airraid_vid", __FILE__),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "^palette"),
|
||||
m_screen(*this, "screen"),
|
||||
m_tx_clut(*this, "tx_clut"),
|
||||
m_fg_clut(*this, "fg_clut"),
|
||||
m_bg_clut(*this, "bg_clut"),
|
||||
m_spr_clut(*this, "spr_clut"),
|
||||
m_fgmap(*this, "fg_map"),
|
||||
m_bgmap(*this, "bg_map"),
|
||||
m_sprite_ram(*this, "^sprite_ram"),
|
||||
m_txram(*this,"^txram"),
|
||||
m_vregs(*this,"^vregs"),
|
||||
m_hw(0x09)
|
||||
{
|
||||
}
|
||||
|
||||
static const gfx_layout charlayout =
|
||||
{
|
||||
8,8, /* 8*8 characters */
|
||||
RGN_FRAC(1,1), /* 512 characters */
|
||||
2, /* 4 bits per pixel */
|
||||
{ 0,4 },
|
||||
{ 8,9,10,11,0,1,2,3 },
|
||||
{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
|
||||
128*1
|
||||
};
|
||||
|
||||
static const gfx_layout char16layout =
|
||||
{
|
||||
16,16, /* 8*8 characters */
|
||||
RGN_FRAC(1,1), /* 512 characters */
|
||||
4, /* 4 bits per pixel */
|
||||
{ 0,4,8,12 },
|
||||
{ 0,1,2,3, 16,17,18,19, 512+0,512+1,512+2,512+3, 512+16,512+17,512+18,512+19},
|
||||
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32, 8*32, 9*32, 10*32, 11*32, 12*32, 13*32, 14*32, 15*32 },
|
||||
32*32
|
||||
};
|
||||
|
||||
static GFXDECODE_START( cshooter )
|
||||
GFXDECODE_ENTRY( "tx_gfx", 0, charlayout, 0, 16 )
|
||||
GFXDECODE_ENTRY( "spr_gfx", 0, char16layout, 0, 16 )
|
||||
GFXDECODE_ENTRY( "bg_gfx", 0, char16layout, 0, 16 )
|
||||
GFXDECODE_ENTRY( "fg_gfx", 0, char16layout, 0, 16 )
|
||||
GFXDECODE_END
|
||||
|
||||
static MACHINE_CONFIG_FRAGMENT( airraid_vid )
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
MCFG_SCREEN_SIZE(256, 256)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-1-16)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(airraid_video_device, screen_update_airraid)
|
||||
MCFG_SCREEN_PALETTE("^palette")
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "^palette", cshooter)
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
machine_config_constructor airraid_video_device::device_mconfig_additions() const
|
||||
{
|
||||
return MACHINE_CONFIG_NAME( airraid_vid );
|
||||
}
|
||||
|
||||
void airraid_video_device::device_start()
|
||||
{
|
||||
save_item(NAME(m_hw));
|
||||
|
||||
// there might actually be 4 banks of 2048 x 16 tilemaps in here as the upper scroll bits are with the rom banking.
|
||||
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(airraid_video_device::get_bg_tile_info),this),tilemap_mapper_delegate(FUNC(airraid_video_device::bg_scan),this),16,16,2048, 64);
|
||||
|
||||
// which could in turn mean this is actually 256 x 128, not 256 x 512
|
||||
// m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(airraid_video_device::get_fg_tile_info),this),tilemap_mapper_delegate(FUNC(airraid_video_device::fg_scan),this),16,16,256, 512);
|
||||
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(airraid_video_device::get_fg_tile_info),this),tilemap_mapper_delegate(FUNC(airraid_video_device::fg_scan),this),16,16,256, 128);
|
||||
|
||||
m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(airraid_video_device::get_cstx_tile_info),this),TILEMAP_SCAN_ROWS, 8,8,32,32);
|
||||
|
||||
// m_fg_tilemap->set_transparent_pen(0);
|
||||
// m_tx_tilemap->set_transparent_pen(0);
|
||||
|
||||
// we do manual mixing using a temp bitmap
|
||||
m_screen->register_screen_bitmap(m_temp_bitmap);
|
||||
}
|
||||
|
||||
void airraid_video_device::device_reset()
|
||||
{
|
||||
}
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(airraid_video_device::bg_scan)
|
||||
{
|
||||
return ((row&0xf) * 0x10) + (col&0xf) + (((col&0x7f0) >> 4)*0x100) + ((row & 0x30)>>4) * 0x8000;
|
||||
}
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(airraid_video_device::fg_scan)
|
||||
{
|
||||
return ((row&0xf) * 0x10) + (col&0xf) + (((col&0x0f0) >> 4)*0x100) + ((row & 0x1f0)>>4) * 0x1000;
|
||||
}
|
||||
|
||||
|
||||
TILE_GET_INFO_MEMBER(airraid_video_device::get_bg_tile_info)
|
||||
{
|
||||
int tile = m_bgmap[(tile_index*2)+1] & 0xff;
|
||||
int attr = m_bgmap[(tile_index*2)+0] & 0xff;
|
||||
|
||||
tile |= (attr & 0x70) << 4;
|
||||
|
||||
SET_TILE_INFO_MEMBER(2,
|
||||
tile,
|
||||
attr&0xf,
|
||||
0);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(airraid_video_device::get_fg_tile_info)
|
||||
{
|
||||
int tile = m_fgmap[(tile_index*2)+1] & 0xff;
|
||||
int attr = m_fgmap[(tile_index*2)+0] & 0xff;
|
||||
|
||||
tile |= (attr & 0x70) << 4;
|
||||
|
||||
SET_TILE_INFO_MEMBER(3,
|
||||
tile,
|
||||
attr&0xf,
|
||||
0);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(airraid_video_device::get_cstx_tile_info)
|
||||
{
|
||||
int code = (m_txram[tile_index*2]);
|
||||
int attr = (m_txram[tile_index*2+1]);
|
||||
int color = attr & 0xf;
|
||||
|
||||
SET_TILE_INFO_MEMBER(0, (code << 1) | ((attr & 0x20) >> 5), color, 0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void airraid_video_device::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
for (int i = 0x200 - 4; i >= 0 ; i -= 4)
|
||||
{
|
||||
if (m_sprite_ram[i+1]&0x80)
|
||||
continue;
|
||||
|
||||
UINT16 tile = (m_sprite_ram[i]);
|
||||
tile |= (m_sprite_ram[i + 1] & 0x70) << 4;
|
||||
|
||||
UINT16 col = (m_sprite_ram[i+1] & 0x0f);
|
||||
//col |= (m_sprite_ram[i+1] & 0x80)<<3;
|
||||
|
||||
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect, tile,col, 0, 0, m_sprite_ram[i+3],m_sprite_ram[i+2],0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#define DISPLAY_SPR 1
|
||||
#define DISPLAY_FG 2
|
||||
#define DISPLAY_BG 4
|
||||
#define DISPLAY_TXT 8
|
||||
#define DM_GETSCROLL(n) (((m_vregs[(n)]<<1)&0xff) + ((m_vregs[(n)]&0x80)?1:0) +( ((m_vregs[(n)-1]<<4) | (m_vregs[(n)-1]<<12) )&0xff00))
|
||||
|
||||
void airraid_video_device::mix_layer(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, UINT8* clut, int base)
|
||||
{
|
||||
for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
|
||||
{
|
||||
UINT16 *dest = &bitmap.pix16(y);
|
||||
UINT16 *src = &m_temp_bitmap.pix16(y);
|
||||
for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
|
||||
{
|
||||
UINT8 pix = src[x] & 0xff;
|
||||
UINT8 real = clut[pix];
|
||||
|
||||
if (!(real & 0x40))
|
||||
{
|
||||
dest[x] = (real & 0x3f) + base;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
UINT32 airraid_video_device::screen_update_airraid(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
UINT16 bgscrolly = DM_GETSCROLL(0x6);
|
||||
// this is more likely to be 'bank' than scroll, like NMK16
|
||||
bgscrolly += ((m_hw & 0xc0) >> 6) * 256;
|
||||
|
||||
m_bg_tilemap->set_scrollx(0, DM_GETSCROLL(0x2));
|
||||
m_bg_tilemap->set_scrolly(0, bgscrolly);
|
||||
m_fg_tilemap->set_scrollx(0, DM_GETSCROLL(0xa));
|
||||
m_fg_tilemap->set_scrolly(0, DM_GETSCROLL(0xe));
|
||||
|
||||
// draw screen
|
||||
bitmap.fill(0x80, cliprect); // temp
|
||||
|
||||
// m_temp_bitmap.fill(0x00, cliprect);
|
||||
|
||||
if ((m_hw & DISPLAY_BG) == 0x00)
|
||||
{
|
||||
m_bg_tilemap->draw(screen, m_temp_bitmap, cliprect, 0, 0);
|
||||
mix_layer(screen, bitmap, cliprect, m_bg_clut, 0x80);
|
||||
}
|
||||
|
||||
if ((m_hw & DISPLAY_FG) == 0x00)
|
||||
{
|
||||
m_fg_tilemap->draw(screen, m_temp_bitmap, cliprect, 0, 0);
|
||||
mix_layer(screen, bitmap, cliprect, m_fg_clut, 0x00);
|
||||
}
|
||||
|
||||
if (m_hw & DISPLAY_SPR)
|
||||
{
|
||||
m_temp_bitmap.fill(0x00, cliprect);
|
||||
draw_sprites(m_temp_bitmap, cliprect); // technically this should draw manually because 0x40 in the prom is transparency and our code just assumes it to be 0.
|
||||
mix_layer(screen, bitmap, cliprect, m_spr_clut, 0x40);
|
||||
}
|
||||
|
||||
if (m_hw & DISPLAY_TXT)
|
||||
{
|
||||
m_tx_tilemap->draw(screen, m_temp_bitmap, cliprect, 0, 0);
|
||||
mix_layer(screen, bitmap, cliprect, m_tx_clut, 0xc0);
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// public functions
|
||||
|
||||
WRITE8_MEMBER(airraid_video_device::txram_w)
|
||||
{
|
||||
m_txram[offset] = data;
|
||||
m_tx_tilemap->mark_tile_dirty(offset/2);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(airraid_video_device::vregs_w)
|
||||
{
|
||||
m_vregs[offset] = data;
|
||||
|
||||
if ((offset != 0x2) && (offset != 0x01) && (offset != 0xa) && (offset != 0x09) && (offset != 0xe) && (offset != 0x0d) )
|
||||
printf("vregs_w %02x: %02x\n", offset, data);
|
||||
}
|
||||
|
||||
void airraid_video_device::layer_enable_w(UINT8 enable)
|
||||
{
|
||||
m_hw = enable;
|
||||
}
|
75
src/mame/video/airraid_dev.h
Normal file
75
src/mame/video/airraid_dev.h
Normal file
@ -0,0 +1,75 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Tomasz Slanina, Angelo Salese, hap, David Haywood
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __AIRRAID_VIDEO__
|
||||
#define __AIRRAID_VIDEO__
|
||||
|
||||
|
||||
|
||||
extern const device_type AIRRAID_VIDEO;
|
||||
|
||||
#define MCFG_AIRRAID_VIDEO_ADD(_tag) \
|
||||
MCFG_DEVICE_ADD(_tag, AIRRAID_VIDEO, 0)
|
||||
|
||||
|
||||
class airraid_video_device : public device_t
|
||||
/* public device_video_interface */
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
airraid_video_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(txram_w);
|
||||
DECLARE_WRITE8_MEMBER(vregs_w);
|
||||
void layer_enable_w(UINT8 enable);
|
||||
|
||||
UINT32 screen_update_airraid(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
protected:
|
||||
virtual machine_config_constructor device_mconfig_additions() const override;
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
private:
|
||||
// devices
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<screen_device> m_screen;
|
||||
|
||||
// region pointers
|
||||
required_region_ptr<UINT8> m_tx_clut;
|
||||
required_region_ptr<UINT8> m_fg_clut;
|
||||
required_region_ptr<UINT8> m_bg_clut;
|
||||
required_region_ptr<UINT8> m_spr_clut;
|
||||
required_region_ptr<UINT8> m_fgmap;
|
||||
required_region_ptr<UINT8> m_bgmap;
|
||||
|
||||
// memory pointers
|
||||
required_shared_ptr<UINT8> m_sprite_ram;
|
||||
required_shared_ptr<UINT8> m_txram;
|
||||
required_shared_ptr<UINT8> m_vregs;
|
||||
|
||||
// tilemaps
|
||||
tilemap_t *m_bg_tilemap;
|
||||
tilemap_t *m_fg_tilemap;
|
||||
tilemap_t *m_tx_tilemap;
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(bg_scan);
|
||||
TILEMAP_MAPPER_MEMBER(fg_scan);
|
||||
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_fg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_cstx_tile_info);
|
||||
|
||||
// internal variables
|
||||
UINT16 m_hw;
|
||||
|
||||
// rendering / mixing
|
||||
bitmap_ind16 m_temp_bitmap;
|
||||
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void mix_layer(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, UINT8* clut, int base);
|
||||
};
|
||||
|
||||
#endif
|
@ -1,365 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mark McDougall
|
||||
/***************************************************************************
|
||||
|
||||
video.c
|
||||
|
||||
Functions to emulate the video hardware of the machine.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/stfight.h"
|
||||
|
||||
|
||||
/*
|
||||
Graphics ROM Format
|
||||
===================
|
||||
|
||||
Each tile is 8x8 pixels
|
||||
Each composite tile is 2x2 tiles, 16x16 pixels
|
||||
Each screen is 32x32 composite tiles, 64x64 tiles, 256x256 pixels
|
||||
Each layer is a 4-plane bitmap 8x16 screens, 2048x4096 pixels
|
||||
|
||||
There are 4x256=1024 composite tiles defined for each layer
|
||||
|
||||
Each layer is mapped using 2 bytes/composite tile
|
||||
- one byte for the tile
|
||||
- one byte for the tile bank, attribute
|
||||
- b7,b5 tile bank (0-3)
|
||||
|
||||
Each pixel is 4 bits = 16 colours.
|
||||
|
||||
*/
|
||||
|
||||
PALETTE_INIT_MEMBER(stfight_state, stfight)
|
||||
{
|
||||
UINT8 *color_prom = memregion("tx_clut")->base();
|
||||
int i;
|
||||
|
||||
/* text uses colors 0xc0-0xff */
|
||||
for (i = 0; i < 0x100; i++)
|
||||
{
|
||||
UINT8 ctabentry = (color_prom[i] & 0x3f) | 0xc0;
|
||||
palette.set_pen_indirect(i, ctabentry);
|
||||
}
|
||||
|
||||
color_prom = memregion("fg_clut")->base();
|
||||
|
||||
/* fg uses colors 0x40-0x7f */
|
||||
for (i = 0x00; i < 0x100; i++)
|
||||
{
|
||||
UINT8 ctabentry = (color_prom[i] & 0x3f) | 0x40;
|
||||
palette.set_pen_indirect(i+0x100, ctabentry);
|
||||
}
|
||||
|
||||
color_prom = memregion("bg_clut")->base();
|
||||
|
||||
/* bg uses colors 0-0x3f */
|
||||
for (i = 0x000; i < 0x100; i++)
|
||||
{
|
||||
UINT8 ctabentry = (color_prom[i] & 0x3f);
|
||||
palette.set_pen_indirect(i+0x200, ctabentry);
|
||||
}
|
||||
|
||||
color_prom = memregion("spr_clut")->base();
|
||||
|
||||
/* spr uses colors 0x80-0xbf */
|
||||
for (i = 0x000; i < 0x100; i++)
|
||||
{
|
||||
UINT8 ctabentry = (color_prom[i] & 0x3f) | 0x80;
|
||||
palette.set_pen_indirect(i+0x300, ctabentry);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Callbacks for the TileMap code
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(stfight_state::fg_scan)
|
||||
{
|
||||
/* logical (col,row) -> memory offset */
|
||||
return (col & 0x0f) + ((row & 0x0f) << 4) + ((col & 0x70) << 4) + ((row & 0xf0) << 7);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(stfight_state::get_fg_tile_info)
|
||||
{
|
||||
UINT8 *fgMap = memregion("fg_map")->base();
|
||||
int attr,tile_base;
|
||||
|
||||
attr = fgMap[0x8000+tile_index];
|
||||
tile_base = ((attr & 0x80) << 2) | ((attr & 0x20) << 3);
|
||||
|
||||
SET_TILE_INFO_MEMBER(1,
|
||||
tile_base + fgMap[tile_index],
|
||||
attr & 0x07,
|
||||
0);
|
||||
}
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(stfight_state::bg_scan)
|
||||
{
|
||||
/* logical (col,row) -> memory offset */
|
||||
return ((col & 0x0e) >> 1) + ((row & 0x0f) << 3) + ((col & 0x70) << 3) +
|
||||
((row & 0x80) << 3) + ((row & 0x10) << 7) + ((col & 0x01) << 12) +
|
||||
((row & 0x60) << 8);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(stfight_state::get_bg_tile_info)
|
||||
{
|
||||
UINT8 *bgMap = memregion("bg_map")->base();
|
||||
int attr,tile_bank,tile_base;
|
||||
|
||||
attr = bgMap[0x8000+tile_index];
|
||||
tile_bank = (attr & 0x20) >> 5;
|
||||
tile_base = (attr & 0x80) << 1;
|
||||
|
||||
SET_TILE_INFO_MEMBER(2+tile_bank,
|
||||
tile_base + bgMap[tile_index],
|
||||
attr & 0x07,
|
||||
0);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(stfight_state::get_tx_tile_info)
|
||||
{
|
||||
UINT8 attr = m_text_attr_ram[tile_index];
|
||||
int color = attr & 0x0f;
|
||||
|
||||
tileinfo.group = color;
|
||||
|
||||
SET_TILE_INFO_MEMBER(0,
|
||||
m_text_char_ram[tile_index] + ((attr & 0x80) << 1),
|
||||
attr & 0x0f,
|
||||
TILE_FLIPYX((attr & 0x60) >> 5));
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(stfight_state::get_cshooter_tx_tile_info)
|
||||
{
|
||||
UINT8 tile = m_tx_vram[tile_index*2];
|
||||
UINT8 attr = m_tx_vram[tile_index*2+1];
|
||||
int color = attr & 0x0f;
|
||||
|
||||
tileinfo.group = color;
|
||||
|
||||
SET_TILE_INFO_MEMBER(0,
|
||||
(tile << 1) | ((attr & 0x20) >> 5),
|
||||
attr & 0x0f,
|
||||
/*TILE_FLIPYX((attr & 0x60) >> 5)*/0);
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Start the video hardware emulation.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
VIDEO_START_MEMBER(stfight_state,stfight)
|
||||
{
|
||||
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(stfight_state::get_bg_tile_info),this),tilemap_mapper_delegate(FUNC(stfight_state::bg_scan),this),16,16,128,256);
|
||||
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(stfight_state::get_fg_tile_info),this),tilemap_mapper_delegate(FUNC(stfight_state::fg_scan),this),16,16,128,256);
|
||||
m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(stfight_state::get_tx_tile_info),this),TILEMAP_SCAN_ROWS, 8,8,32,32);
|
||||
|
||||
m_fg_tilemap->set_transparent_pen(0x0f);
|
||||
m_tx_tilemap->configure_groups(*m_gfxdecode->gfx(0), 0xcf);
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(stfight_state,cshooter)
|
||||
{
|
||||
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(stfight_state::get_bg_tile_info),this),tilemap_mapper_delegate(FUNC(stfight_state::bg_scan),this),16,16,128,256);
|
||||
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(stfight_state::get_fg_tile_info),this),tilemap_mapper_delegate(FUNC(stfight_state::fg_scan),this),16,16,128,256);
|
||||
m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(stfight_state::get_cshooter_tx_tile_info),this),TILEMAP_SCAN_ROWS, 8,8,32,32);
|
||||
|
||||
m_fg_tilemap->set_transparent_pen(0x0f);
|
||||
m_tx_tilemap->configure_groups(*m_gfxdecode->gfx(0), 0xcf);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Memory handlers
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
WRITE8_MEMBER(stfight_state::stfight_text_char_w)
|
||||
{
|
||||
m_text_char_ram[offset] = data;
|
||||
m_tx_tilemap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(stfight_state::stfight_text_attr_w)
|
||||
{
|
||||
m_text_attr_ram[offset] = data;
|
||||
m_tx_tilemap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(stfight_state::cshooter_text_w)
|
||||
{
|
||||
m_tx_vram[offset] = data;
|
||||
m_tx_tilemap->mark_tile_dirty(offset/2);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(stfight_state::stfight_sprite_bank_w)
|
||||
{
|
||||
m_sprite_base = ( ( data & 0x04 ) << 7 ) |
|
||||
( ( data & 0x01 ) << 8 );
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(stfight_state::stfight_vh_latch_w)
|
||||
{
|
||||
int scroll;
|
||||
|
||||
|
||||
m_vh_latch_ram[offset] = data;
|
||||
|
||||
switch( offset )
|
||||
{
|
||||
case 0x00:
|
||||
case 0x01:
|
||||
scroll = (m_vh_latch_ram[1] << 8) | m_vh_latch_ram[0];
|
||||
m_fg_tilemap->set_scrollx(0,scroll);
|
||||
break;
|
||||
|
||||
case 0x02:
|
||||
case 0x03:
|
||||
scroll = (m_vh_latch_ram[3] << 8) | m_vh_latch_ram[2];
|
||||
m_fg_tilemap->set_scrolly(0,scroll);
|
||||
break;
|
||||
|
||||
case 0x04:
|
||||
case 0x05:
|
||||
scroll = (m_vh_latch_ram[5] << 8) | m_vh_latch_ram[4];
|
||||
m_bg_tilemap->set_scrollx(0,scroll);
|
||||
break;
|
||||
|
||||
case 0x06:
|
||||
case 0x08:
|
||||
scroll = (m_vh_latch_ram[8] << 8) | m_vh_latch_ram[6];
|
||||
m_bg_tilemap->set_scrolly(0,scroll);
|
||||
break;
|
||||
|
||||
case 0x07:
|
||||
m_tx_tilemap->enable(data & 0x80);
|
||||
/* 0x40 = sprites */
|
||||
m_bg_tilemap->enable(data & 0x20);
|
||||
m_fg_tilemap->enable(data & 0x10);
|
||||
flip_screen_set(data & 0x01);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Display refresh
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
void stfight_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
int offs,sx,sy;
|
||||
|
||||
for (offs = 0;offs < 4096;offs += 32)
|
||||
{
|
||||
int code;
|
||||
int attr = m_sprite_ram[offs+1];
|
||||
int flipx = attr & 0x10;
|
||||
int color = attr & 0x0f;
|
||||
int pri = (attr & 0x20) >> 5;
|
||||
|
||||
sy = m_sprite_ram[offs+2];
|
||||
sx = m_sprite_ram[offs+3];
|
||||
|
||||
// non-active sprites have zero y coordinate value
|
||||
if( sy > 0 )
|
||||
{
|
||||
// sprites which wrap onto/off the screen have
|
||||
// a sign extension bit in the sprite attribute
|
||||
if( sx >= 0xf0 )
|
||||
{
|
||||
if (attr & 0x80)
|
||||
sx -= 0x100;
|
||||
}
|
||||
|
||||
if (flip_screen())
|
||||
{
|
||||
sx = 240 - sx;
|
||||
sy = 240 - sy;
|
||||
flipx = !flipx;
|
||||
}
|
||||
|
||||
code = m_sprite_base + m_sprite_ram[offs];
|
||||
|
||||
m_gfxdecode->gfx(4)->prio_transpen(bitmap,cliprect,
|
||||
code,
|
||||
color,
|
||||
flipx,flip_screen(),
|
||||
sx,sy,
|
||||
screen.priority(),
|
||||
pri ? 0x02 : 0,0x0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
UINT32 stfight_state::screen_update_stfight(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
screen.priority().fill(0, cliprect);
|
||||
|
||||
bitmap.fill(0, cliprect); /* in case m_bg_tilemap is disabled */
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0);
|
||||
m_fg_tilemap->draw(screen, bitmap, cliprect, 0,1);
|
||||
|
||||
/* Draw sprites (may be obscured by foreground layer) */
|
||||
if (m_vh_latch_ram[0x07] & 0x40)
|
||||
draw_sprites(screen,bitmap,cliprect);
|
||||
|
||||
m_tx_tilemap->draw(screen, bitmap, cliprect, 0,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void stfight_state::cshooter_draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
for (int i = m_sprite_ram.bytes() - 4; i >= 0 ; i -= 4)
|
||||
{
|
||||
if (m_sprite_ram[i+1]&0x80)
|
||||
continue;
|
||||
|
||||
int attr = m_sprite_ram[i+1];
|
||||
int flipx = attr & 0x10;
|
||||
int color = attr & 0x0f;
|
||||
int pri = (attr & 0x20) >> 5;
|
||||
|
||||
/* BCD debug code, to be removed in the end */
|
||||
UINT8 tile_low = (m_sprite_ram[i]&0x0f);
|
||||
UINT8 tile_high = ((m_sprite_ram[i]&0xf0)>>4);
|
||||
|
||||
tile_low += (tile_low > 0x9) ? 0x37 : 0x30;
|
||||
tile_high += (tile_high > 0x9) ? 0x37 : 0x30;
|
||||
|
||||
m_gfxdecode->gfx(0)->prio_transpen(bitmap,cliprect, tile_high << 1, color, flipx, 0, m_sprite_ram[i+3],m_sprite_ram[i+2],screen.priority(),pri ? 0x02 : 0,0x00);
|
||||
m_gfxdecode->gfx(0)->prio_transpen(bitmap,cliprect, tile_high << 1, color, flipx, 0, m_sprite_ram[i+3]+8,m_sprite_ram[i+2],screen.priority(),pri ? 0x02 : 0,0x00);
|
||||
m_gfxdecode->gfx(0)->prio_transpen(bitmap,cliprect, tile_low << 1, color, flipx, 0, m_sprite_ram[i+3]+8,m_sprite_ram[i+2]+8,screen.priority(),pri ? 0x02 : 0,0x00);
|
||||
m_gfxdecode->gfx(0)->prio_transpen(bitmap,cliprect, tile_low << 1, color, flipx, 0, m_sprite_ram[i+3],m_sprite_ram[i+2]+8,screen.priority(),pri ? 0x02 : 0,0x00);
|
||||
}
|
||||
}
|
||||
|
||||
UINT32 stfight_state::screen_update_cshooter(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
screen.priority().fill(0, cliprect);
|
||||
|
||||
bitmap.fill(0, cliprect); /* in case m_bg_tilemap is disabled */
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0);
|
||||
m_fg_tilemap->draw(screen, bitmap, cliprect, 0,1);
|
||||
|
||||
/* Draw sprites (may be obscured by foreground layer) */
|
||||
// if (m_vh_latch_ram[0x07] & 0x40)
|
||||
cshooter_draw_sprites(screen,bitmap,cliprect);
|
||||
|
||||
m_tx_tilemap->draw(screen, bitmap, cliprect, 0,0);
|
||||
return 0;
|
||||
}
|
387
src/mame/video/stfight_dev.cpp
Normal file
387
src/mame/video/stfight_dev.cpp
Normal file
@ -0,0 +1,387 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mark McDougall, David Haywood
|
||||
|
||||
// The Street Fight video appears to be 4 layers, very similar to Dark Mist and Air Raid, but at least without the CLUT transparency handling?
|
||||
// which are presumably handled by the SEI0100BU chips on the other games (with the GFX inside the modules on Air Raid)
|
||||
|
||||
#include "emu.h"
|
||||
#include "stfight_dev.h"
|
||||
|
||||
|
||||
|
||||
extern const device_type STFIGHT_VIDEO = &device_creator<stfight_video_device>;
|
||||
|
||||
|
||||
stfight_video_device::stfight_video_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, STFIGHT_VIDEO, "Seibu Street Fight Video", tag, owner, clock, "stfight_vid", __FILE__),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this,"^palette"),
|
||||
m_screen(*this, "screen"),
|
||||
m_tx_clut(*this, "tx_clut"),
|
||||
m_fg_clut(*this, "fg_clut"),
|
||||
m_bg_clut(*this, "bg_clut"),
|
||||
m_spr_clut(*this, "spr_clut"),
|
||||
m_fgmap(*this,"fg_map"),
|
||||
m_bgmap(*this,"bg_map"),
|
||||
m_vregs(*this,"^vregs"),
|
||||
m_sprite_ram(*this, "^sprite_ram"),
|
||||
m_txram(*this, "^txram")
|
||||
{
|
||||
}
|
||||
|
||||
/* text-layer characters */
|
||||
static const gfx_layout charlayout =
|
||||
{
|
||||
8,8, /* 8*8 pixels */
|
||||
512, /* 512 characters */
|
||||
2, /* 2 bits per pixel */
|
||||
{ 4, 0 },
|
||||
{ 0, 1, 2, 3, 8+0, 8+1, 8+2, 8+3 },
|
||||
{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
|
||||
8*16 /* every char takes 16 consecutive bytes */
|
||||
};
|
||||
|
||||
/* foreground tiles */
|
||||
static const gfx_layout fglayout =
|
||||
{
|
||||
16,16, /* 16*16 pixels */
|
||||
1024, /* 1024 tiles */
|
||||
4, /* 4 bits per pixel */
|
||||
{ 64*1024*8+0, 64*1024*8+4, 0, 4 },
|
||||
{ 0, 1, 2, 3,
|
||||
8, 9, 10, 11,
|
||||
32*8+0, 32*8+1, 32*8+ 2, 32*8+ 3,
|
||||
32*8+8, 32*8+9, 32*8+10, 32*8+11 },
|
||||
{ 0*8, 2*8, 4*8, 6*8,
|
||||
8*8, 10*8, 12*8, 14*8,
|
||||
16*8, 18*8, 20*8, 22*8,
|
||||
24*8, 26*8, 28*8, 30*8 },
|
||||
64*8 /* every char takes 64 consecutive bytes */
|
||||
};
|
||||
|
||||
/*
|
||||
* The background tiles are interleaved in banks of 2
|
||||
* - so we need to create two separate layout structs
|
||||
* to handle them properly with tilemaps
|
||||
*/
|
||||
|
||||
/* background tiles */
|
||||
static const gfx_layout bglayout =
|
||||
{
|
||||
16,16, /* 16*16 pixels */
|
||||
512, /* 512 tiles */
|
||||
4, /* 4 bits per pixel */
|
||||
{ 64*1024*8+4, 64*1024*8+0, 4, 0 },
|
||||
{ 0, 1, 2, 3,
|
||||
8, 9, 10, 11,
|
||||
64*8+0, 64*8+1, 64*8+ 2, 64*8+ 3,
|
||||
64*8+8, 64*8+9, 64*8+10, 64*8+11 },
|
||||
{ 0*8, 2*8, 4*8, 6*8,
|
||||
8*8, 10*8, 12*8, 14*8,
|
||||
16*8, 18*8, 20*8, 22*8,
|
||||
24*8, 26*8, 28*8, 30*8 },
|
||||
128*8 /* every tile takes 64/128 consecutive bytes */
|
||||
};
|
||||
|
||||
/* sprites */
|
||||
static const gfx_layout spritelayout =
|
||||
{
|
||||
16,16, /* 16*16 pixels */
|
||||
1024, /* 1024 sprites */
|
||||
4, /* 4 bits per pixel */
|
||||
{ 64*1024*8+0, 64*1024*8+4, 0, 4 },
|
||||
{ 0, 1, 2, 3,
|
||||
8, 9, 10, 11,
|
||||
32*8+0, 32*8+1, 32*8+ 2, 32*8+ 3,
|
||||
32*8+8, 32*8+9, 32*8+10, 32*8+11 },
|
||||
{ 0*8, 2*8, 4*8, 6*8,
|
||||
8*8, 10*8, 12*8, 14*8,
|
||||
16*8, 18*8, 20*8, 22*8,
|
||||
24*8, 26*8, 28*8, 30*8 },
|
||||
64*8 /* every sprite takes 64 consecutive bytes */
|
||||
};
|
||||
|
||||
static GFXDECODE_START( stfight )
|
||||
GFXDECODE_ENTRY( "tx_gfx", 0x0000, charlayout, 0, 16 )
|
||||
GFXDECODE_ENTRY( "fg_gfx", 0x0000, fglayout, 0, 16 )
|
||||
GFXDECODE_ENTRY( "bg_gfx", 0x0000, bglayout, 0, 16 )
|
||||
GFXDECODE_ENTRY( "bg_gfx", 0x0020, bglayout, 0, 16 )
|
||||
GFXDECODE_ENTRY( "spr_gfx", 0x0000, spritelayout, 0, 32 )
|
||||
GFXDECODE_END
|
||||
|
||||
static MACHINE_CONFIG_FRAGMENT( stfight_vid )
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(stfight_video_device, screen_update_stfight)
|
||||
MCFG_SCREEN_PALETTE("^palette")
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "^palette", stfight)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
machine_config_constructor stfight_video_device::device_mconfig_additions() const
|
||||
{
|
||||
return MACHINE_CONFIG_NAME( stfight_vid );
|
||||
}
|
||||
|
||||
/*
|
||||
Graphics ROM Format
|
||||
===================
|
||||
|
||||
Each tile is 8x8 pixels
|
||||
Each composite tile is 2x2 tiles, 16x16 pixels
|
||||
Each screen is 32x32 composite tiles, 64x64 tiles, 256x256 pixels
|
||||
Each layer is a 4-plane bitmap 8x16 screens, 2048x4096 pixels
|
||||
|
||||
There are 4x256=1024 composite tiles defined for each layer
|
||||
|
||||
Each layer is mapped using 2 bytes/composite tile
|
||||
- one byte for the tile
|
||||
- one byte for the tile bank, attribute
|
||||
- b7,b5 tile bank (0-3)
|
||||
|
||||
Each pixel is 4 bits = 16 colours.
|
||||
|
||||
*/
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(stfight_video_device::fg_scan)
|
||||
{
|
||||
/* logical (col,row) -> memory offset */
|
||||
return (col & 0x0f) + ((row & 0x0f) << 4) + ((col & 0x70) << 4) + ((row & 0xf0) << 7);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(stfight_video_device::get_fg_tile_info)
|
||||
{
|
||||
int attr,tile_base;
|
||||
|
||||
attr = m_fgmap[0x8000+tile_index];
|
||||
tile_base = ((attr & 0x80) << 2) | ((attr & 0x20) << 3);
|
||||
|
||||
SET_TILE_INFO_MEMBER(1,
|
||||
tile_base + m_fgmap[tile_index],
|
||||
attr & 0x07,
|
||||
0);
|
||||
}
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(stfight_video_device::bg_scan)
|
||||
{
|
||||
/* logical (col,row) -> memory offset */
|
||||
return ((col & 0x0e) >> 1) + ((row & 0x0f) << 3) + ((col & 0x70) << 3) +
|
||||
((row & 0x80) << 3) + ((row & 0x10) << 7) + ((col & 0x01) << 12) +
|
||||
((row & 0x60) << 8);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(stfight_video_device::get_bg_tile_info)
|
||||
{
|
||||
int attr,tile_bank,tile_base;
|
||||
|
||||
attr = m_bgmap[0x8000+tile_index];
|
||||
tile_bank = (attr & 0x20) >> 5;
|
||||
tile_base = (attr & 0x80) << 1;
|
||||
|
||||
SET_TILE_INFO_MEMBER(2+tile_bank,
|
||||
tile_base + m_bgmap[tile_index],
|
||||
attr & 0x07,
|
||||
0);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(stfight_video_device::get_tx_tile_info)
|
||||
{
|
||||
UINT8 attr = m_txram[tile_index+0x400];
|
||||
int color = attr & 0x0f;
|
||||
|
||||
tileinfo.group = color;
|
||||
|
||||
SET_TILE_INFO_MEMBER(0,
|
||||
m_txram[tile_index] + ((attr & 0x80) << 1),
|
||||
attr & 0x0f,
|
||||
TILE_FLIPYX((attr & 0x60) >> 5));
|
||||
}
|
||||
|
||||
void stfight_video_device::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
int offs, sx, sy;
|
||||
|
||||
for (offs = 4096 - 32;offs >= 0;offs -= 32)
|
||||
{
|
||||
int code;
|
||||
int attr = m_sprite_ram[offs + 1];
|
||||
int flipx = attr & 0x10;
|
||||
int color = attr & 0x0f;
|
||||
color |= (attr & 0x20) >> 1; // mix in priority bit
|
||||
|
||||
sy = m_sprite_ram[offs + 2];
|
||||
sx = m_sprite_ram[offs + 3];
|
||||
|
||||
// non-active sprites have zero y coordinate value
|
||||
if (sy > 0)
|
||||
{
|
||||
// sprites which wrap onto/off the screen have
|
||||
// a sign extension bit in the sprite attribute
|
||||
if (sx >= 0xf0)
|
||||
{
|
||||
if (attr & 0x80)
|
||||
sx -= 0x100;
|
||||
}
|
||||
|
||||
/*
|
||||
if (flip_screen())
|
||||
{
|
||||
sx = 240 - sx;
|
||||
sy = 240 - sy;
|
||||
flipx = !flipx;
|
||||
}
|
||||
*/
|
||||
|
||||
code = m_sprite_base + m_sprite_ram[offs];
|
||||
|
||||
m_gfxdecode->gfx(4)->transpen(bitmap, cliprect,
|
||||
code,
|
||||
color,
|
||||
flipx, 0/*flip_screen()*/,
|
||||
sx, sy,
|
||||
0x0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
UINT32 stfight_video_device::screen_update_stfight(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
bitmap.fill(0, cliprect); /* in case m_bg_tilemap is disabled */
|
||||
|
||||
m_temp_sprite_bitmap.fill(-1, cliprect);
|
||||
draw_sprites(screen, m_temp_sprite_bitmap, cliprect);
|
||||
|
||||
m_temp_bitmap.fill(-1, cliprect);
|
||||
m_bg_tilemap->draw(screen, m_temp_bitmap, cliprect, 0, 0);
|
||||
mix_txlayer(screen, bitmap, m_temp_bitmap, cliprect, m_bg_clut, 0x00, 0x00, 0x00, false);
|
||||
|
||||
if (m_vregs[0x07] & 0x40) mix_txlayer(screen, bitmap, m_temp_sprite_bitmap, cliprect, m_spr_clut, 0x80, 0x100, 0x100, false); // low priority sprites
|
||||
|
||||
m_temp_bitmap.fill(-1, cliprect);
|
||||
m_fg_tilemap->draw(screen, m_temp_bitmap, cliprect, 0, 0);
|
||||
mix_txlayer(screen, bitmap, m_temp_bitmap, cliprect, m_fg_clut, 0x40, 0x00, 0x00, false);
|
||||
|
||||
if (m_vregs[0x07] & 0x40) mix_txlayer(screen, bitmap, m_temp_sprite_bitmap, cliprect, m_spr_clut, 0x80, 0x100, 0x000, false); // high priority sprites
|
||||
|
||||
m_temp_bitmap.fill(-1, cliprect);
|
||||
m_tx_tilemap->draw(screen, m_temp_bitmap, cliprect, 0, 0);
|
||||
mix_txlayer(screen, bitmap, m_temp_bitmap, cliprect, m_tx_clut, 0xc0, 0x00, 0x00, true);
|
||||
//
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void stfight_video_device::mix_txlayer(screen_device &screen, bitmap_ind16 &bitmap, bitmap_ind16 &bitmap2, const rectangle &cliprect, UINT8* clut, int base, int mask, int condition, bool realcheck)
|
||||
{
|
||||
for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
|
||||
{
|
||||
UINT16 *dest = &bitmap.pix16(y);
|
||||
UINT16 *src = &bitmap2.pix16(y);
|
||||
for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
|
||||
{
|
||||
if (src[x] == -1)
|
||||
continue;
|
||||
|
||||
if ((src[x] & mask) == condition)
|
||||
{
|
||||
UINT8 pix = src[x] & 0xff;
|
||||
UINT8 real = clut[pix];
|
||||
|
||||
if (realcheck) // the text layer transparency appears to be 0xf *after* lookup
|
||||
{
|
||||
if ((real & 0x0f) != 0x0f)
|
||||
{
|
||||
dest[x] = (real & 0x3f) + base;
|
||||
}
|
||||
}
|
||||
else if ((src[x] & 0xf) != 0xf) // other layers it's pre-lookup
|
||||
{
|
||||
dest[x] = (real & 0x3f) + base;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void stfight_video_device::device_start()
|
||||
{
|
||||
if(!m_gfxdecode->started())
|
||||
throw device_missing_dependencies();
|
||||
|
||||
save_item(NAME(m_sprite_base));
|
||||
|
||||
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(stfight_video_device::get_bg_tile_info),this),tilemap_mapper_delegate(FUNC(stfight_video_device::bg_scan),this),16,16,128,256);
|
||||
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(stfight_video_device::get_fg_tile_info),this),tilemap_mapper_delegate(FUNC(stfight_video_device::fg_scan),this),16,16,128,256);
|
||||
m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(stfight_video_device::get_tx_tile_info),this),TILEMAP_SCAN_ROWS, 8,8,32,32);
|
||||
|
||||
// we do manual mixing using a temp bitmap
|
||||
m_screen->register_screen_bitmap(m_temp_sprite_bitmap);
|
||||
m_screen->register_screen_bitmap(m_temp_bitmap);
|
||||
}
|
||||
|
||||
void stfight_video_device::device_reset()
|
||||
{
|
||||
}
|
||||
|
||||
// public functions
|
||||
|
||||
WRITE8_MEMBER(stfight_video_device::stfight_text_char_w)
|
||||
{
|
||||
m_txram[offset] = data;
|
||||
m_tx_tilemap->mark_tile_dirty(offset&0x3ff);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(stfight_video_device::stfight_sprite_bank_w)
|
||||
{
|
||||
m_sprite_base = ( ( data & 0x04 ) << 7 ) |
|
||||
( ( data & 0x01 ) << 8 );
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(stfight_video_device::stfight_vh_latch_w)
|
||||
{
|
||||
int scroll;
|
||||
|
||||
|
||||
m_vregs[offset] = data;
|
||||
|
||||
switch( offset )
|
||||
{
|
||||
case 0x00:
|
||||
case 0x01:
|
||||
scroll = (m_vregs[1] << 8) | m_vregs[0];
|
||||
m_fg_tilemap->set_scrollx(0,scroll);
|
||||
break;
|
||||
|
||||
case 0x02:
|
||||
case 0x03:
|
||||
scroll = (m_vregs[3] << 8) | m_vregs[2];
|
||||
m_fg_tilemap->set_scrolly(0,scroll);
|
||||
break;
|
||||
|
||||
case 0x04:
|
||||
case 0x05:
|
||||
scroll = (m_vregs[5] << 8) | m_vregs[4];
|
||||
m_bg_tilemap->set_scrollx(0,scroll);
|
||||
break;
|
||||
|
||||
case 0x06:
|
||||
case 0x08:
|
||||
scroll = (m_vregs[8] << 8) | m_vregs[6];
|
||||
m_bg_tilemap->set_scrolly(0,scroll);
|
||||
break;
|
||||
|
||||
case 0x07:
|
||||
m_tx_tilemap->enable(data & 0x80);
|
||||
/* 0x40 = sprites */
|
||||
m_bg_tilemap->enable(data & 0x20);
|
||||
m_fg_tilemap->enable(data & 0x10);
|
||||
//flip_screen_set(data & 0x01);
|
||||
break;
|
||||
}
|
||||
}
|
76
src/mame/video/stfight_dev.h
Normal file
76
src/mame/video/stfight_dev.h
Normal file
@ -0,0 +1,76 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mark McDougall, David Haywood
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __STFIGHT_VIDEO__
|
||||
#define __STFIGHT_VIDEO__
|
||||
|
||||
|
||||
|
||||
extern const device_type STFIGHT_VIDEO;
|
||||
|
||||
#define MCFG_STFIGHT_VIDEO_ADD(_tag) \
|
||||
MCFG_DEVICE_ADD(_tag, STFIGHT_VIDEO, 0)
|
||||
|
||||
|
||||
class stfight_video_device : public device_t
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
stfight_video_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
|
||||
DECLARE_WRITE8_MEMBER(stfight_text_char_w);
|
||||
DECLARE_WRITE8_MEMBER(stfight_sprite_bank_w);
|
||||
DECLARE_WRITE8_MEMBER(stfight_vh_latch_w);
|
||||
|
||||
UINT32 screen_update_stfight(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
protected:
|
||||
virtual machine_config_constructor device_mconfig_additions() const override;
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
private:
|
||||
// devices
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<screen_device> m_screen;
|
||||
|
||||
// region pointers
|
||||
required_region_ptr<UINT8> m_tx_clut;
|
||||
required_region_ptr<UINT8> m_fg_clut;
|
||||
required_region_ptr<UINT8> m_bg_clut;
|
||||
required_region_ptr<UINT8> m_spr_clut;
|
||||
required_region_ptr<UINT8> m_fgmap;
|
||||
required_region_ptr<UINT8> m_bgmap;
|
||||
|
||||
// memory pointers
|
||||
required_shared_ptr<UINT8> m_vregs;
|
||||
required_shared_ptr<UINT8> m_sprite_ram;
|
||||
required_shared_ptr<UINT8> m_txram;
|
||||
|
||||
// tilemaps
|
||||
tilemap_t *m_fg_tilemap;
|
||||
tilemap_t *m_bg_tilemap;
|
||||
tilemap_t *m_tx_tilemap;
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(fg_scan);
|
||||
TILEMAP_MAPPER_MEMBER(bg_scan);
|
||||
|
||||
TILE_GET_INFO_MEMBER(get_fg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_tx_tile_info);
|
||||
|
||||
// internal variables
|
||||
int m_sprite_base;
|
||||
|
||||
// rendering / mixing
|
||||
bitmap_ind16 m_temp_bitmap;
|
||||
bitmap_ind16 m_temp_sprite_bitmap;
|
||||
void mix_txlayer(screen_device &screen, bitmap_ind16 &bitmap, bitmap_ind16 &bitmap2, const rectangle &cliprect, UINT8* clut, int base, int mask, int condition, bool realcheck);
|
||||
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user