New games added or promoted from NOT_WORKING

E-Jan Sakurasou [Cs9ph7Rg0]

Todo:
- fix corrupt gfx after Tsumo with Tenbou item
- memory map has some uncertain area
This commit is contained in:
Yasuhiro Ogawa 2009-03-24 08:00:53 +00:00
parent 262f9689a1
commit 89b183ab60
4 changed files with 189 additions and 28 deletions

View File

@ -676,6 +676,7 @@ Notes:
#include "machine/intelfsh.h"
#include "sound/okim6295.h"
#include "sound/ymf271.h"
#include "sound/ymz280b.h"
#include "includes/seibuspi.h"
UINT32 *spimainram;
@ -697,6 +698,8 @@ static int fifoout_read_request = 0;
static UINT8 sb_coin_latch = 0;
static UINT8 ejsakura_input_port = 0;
static UINT8 z80_fifoout_pop(const address_space *space)
{
UINT8 r;
@ -910,6 +913,25 @@ static READ32_HANDLER( spi_controls2_r )
return 0xffffffff;
}
static CUSTOM_INPUT( ejsakura_keyboard_r )
{
switch(ejsakura_input_port)
{
case 0x01:
return input_port_read(field->port->machine, "INPUT01");
case 0x02:
return input_port_read(field->port->machine, "INPUT02");
case 0x04:
return input_port_read(field->port->machine, "INPUT04");
case 0x08:
return input_port_read(field->port->machine, "INPUT08");
case 0x10:
return input_port_read(field->port->machine, "INPUT10");
default:
return input_port_read(field->port->machine, "SYSTEM");
}
return 0xffffffff;
}
/********************************************************************/
static READ8_HANDLER( z80_soundfifo_r )
@ -1063,6 +1085,13 @@ static void irqhandler(const device_config *device, int state)
cpu_set_input_line(device->machine->cpu[1], 0, CLEAR_LINE);
}
static WRITE32_HANDLER(sys386f2_eeprom_w)
{
eeprom_write_bit((data & 0x80) ? 1 : 0);
eeprom_set_clock_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
eeprom_set_cs_line((data & 0x20) ? CLEAR_LINE : ASSERT_LINE);
}
static const ymf271_interface ymf271_config =
{
DEVCB_HANDLER(flashrom_read),
@ -1095,22 +1124,25 @@ static ADDRESS_MAP_START( seibu386_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0xffe00000, 0xffffffff) AM_ROM AM_REGION("user1", 0) AM_SHARE(2) /* ROM location in real-mode */
ADDRESS_MAP_END
static WRITE32_HANDLER(input_select_w)
{
ejsakura_input_port = data;
}
static ADDRESS_MAP_START( sys386f2_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x00000000, 0x00000417) AM_RAM
AM_RANGE(0x00000418, 0x0000041b) AM_READWRITE(spi_layer_bank_r, spi_layer_bank_w)
AM_RANGE(0x0000041c, 0x0000041f) AM_READNOP
AM_RANGE(0x0000041c, 0x0000041f) AM_WRITE(spi_layer_enable_w)
AM_RANGE(0x00000420, 0x0000042b) AM_RAM AM_BASE(&spi_scrollram)
AM_RANGE(0x00000480, 0x00000483) AM_WRITE(tilemap_dma_start_w)
AM_RANGE(0x00000000, 0x0000000f) AM_RAM
AM_RANGE(0x00000010, 0x00000013) AM_READ(spi_int_r) /* Unknown */
// AM_RANGE(0x00000090, 0x00000097) AM_RAM /* Unknown */
AM_RANGE(0x00000400, 0x00000403) AM_READNOP AM_WRITE(input_select_w)
AM_RANGE(0x00000404, 0x00000407) AM_WRITE(sys386f2_eeprom_w)
AM_RANGE(0x00000408, 0x0000040f) AM_DEVWRITE8("ymz", ymz280b_w, 0x000000ff)
AM_RANGE(0x00000484, 0x00000487) AM_WRITE(palette_dma_start_w)
AM_RANGE(0x00000490, 0x00000493) AM_WRITE(video_dma_length_w)
AM_RANGE(0x00000494, 0x00000497) AM_WRITE(video_dma_address_w)
AM_RANGE(0x0000050c, 0x0000050f) AM_WRITE(sprite_dma_start_w)
AM_RANGE(0x00000600, 0x00000603) AM_READ(spi_int_r) /* Unknown */
AM_RANGE(0x00000604, 0x00000607) AM_READ(spi_controls1_r) /* Player controls */
// AM_RANGE(0x00000600, 0x00000607) AM_READNOP /* Unknown */
AM_RANGE(0x00000608, 0x0000060b) AM_READ(spi_unknown_r)
AM_RANGE(0x0000060c, 0x0000060f) AM_READ(spi_controls2_r) /* Player controls (start) */
AM_RANGE(0x0000068c, 0x0000068f) AM_WRITE(eeprom_w)
AM_RANGE(0x0000060c, 0x0000060f) AM_READ(spi_controls1_r) /* Player controls */
AM_RANGE(0x00000800, 0x0003ffff) AM_RAM AM_BASE(&spimainram)
AM_RANGE(0x00200000, 0x003fffff) AM_ROM AM_SHARE(2)
AM_RANGE(0xffe00000, 0xffffffff) AM_ROM AM_REGION("user1", 0) AM_SHARE(2) /* ROM location in real-mode */
@ -1293,6 +1325,62 @@ static INPUT_PORTS_START( spi_ejanhs )
PORT_BIT( 0x100, IP_ACTIVE_HIGH, IPT_MAHJONG_RON ) PORT_PLAYER(1)
INPUT_PORTS_END
static INPUT_PORTS_START( spi_ejsakura )
PORT_START("INPUTS")
PORT_BIT( 0xffffffff, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_CUSTOM(ejsakura_keyboard_r, NULL)
PORT_START("INPUT01")
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(1)
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(1)
PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(1)
PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(1)
PORT_BIT( 0xffffffe0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("INPUT02")
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) PORT_PLAYER(1)
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) PORT_PLAYER(1)
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) PORT_PLAYER(1)
PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) PORT_PLAYER(1)
PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) PORT_PLAYER(1)
PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) PORT_PLAYER(1)
PORT_BIT( 0xffffffc0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("INPUT04")
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_PLAYER(1)
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_PLAYER(1)
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(1)
PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(1)
PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(1)
PORT_BIT( 0xffffffe0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("INPUT08")
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_PLAYER(1)
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_PLAYER(1)
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(1)
PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(1)
PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(1)
PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0xffffffc0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("INPUT10")
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_PLAYER(1)
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_PLAYER(1)
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(1)
PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(1)
PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(1)
PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_PLAYER(1)
PORT_SERVICE_NO_TOGGLE( 0x00000200, IP_ACTIVE_LOW) /* Test Button */
PORT_BIT( 0x00000800, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Payout") PORT_CODE(KEYCODE_Q)
PORT_BIT( 0xfffff5c0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("SYSTEM")
PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x00004000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(eeprom_bit_r, NULL)
PORT_BIT( 0xffffbf3f, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
/********************************************************************/
#define PLANE_CHAR 0
@ -1643,6 +1731,27 @@ static GFXDECODE_START( spi )
#endif
GFXDECODE_END
static const gfx_layout sys386f2_spritelayout =
{
16,16,
RGN_FRAC(1,4),
8,
{ 0, 8, RGN_FRAC(1,4)+0, RGN_FRAC(1,4)+8, RGN_FRAC(2,4)+0, RGN_FRAC(2,4)+8, RGN_FRAC(3,4)+0, RGN_FRAC(3,4)+8 },
{
7,6,5,4,3,2,1,0,23,22,21,20,19,18,17,16
},
{
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
},
16*32
};
static GFXDECODE_START( sys386f2)
GFXDECODE_ENTRY( "gfx1", 0, spi_charlayout, 5632, 16 ) // Not used
GFXDECODE_ENTRY( "gfx2", 0, spi_tilelayout, 4096, 24 ) // Not used
GFXDECODE_ENTRY( "gfx3", 0, sys386f2_spritelayout, 0, 96 )
GFXDECODE_END
/********************************************************************************/
static NVRAM_HANDLER( spi )
@ -2093,6 +2202,24 @@ MACHINE_DRIVER_END
static DRIVER_INIT( sys386f2 )
{
//init_rf2(machine);
memory_install_write32_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x560, 0x563, 0, 0, sprite_dma_start_w);
{
int i, j;
UINT16 *src = (UINT16 *)memory_region(machine, "gfx3");
UINT16 tmp[0x40 / 2], Offset;
for(i = 0; i < memory_region_length(machine, "gfx3") / 0x40; i++)
{
memcpy(tmp, src, 0x40);
for(j = 0; j < 0x40 / 2; j++)
{
Offset = (j >> 1) | (j << 4 & 0x10);
*src++ = tmp[Offset];
}
}
}
}
static MACHINE_DRIVER_START( sys386f2 )
@ -2115,16 +2242,15 @@ static MACHINE_DRIVER_START( sys386f2 )
MDRV_SCREEN_SIZE(64*8, 32*8)
MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 30*8-1)
MDRV_GFXDECODE(spi)
MDRV_PALETTE_LENGTH(6144)
MDRV_GFXDECODE(sys386f2)
MDRV_PALETTE_LENGTH(8192)
MDRV_VIDEO_START(spi)
MDRV_VIDEO_UPDATE(spi)
MDRV_VIDEO_START(sys386f2)
MDRV_VIDEO_UPDATE(sys386f2)
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MDRV_SOUND_ADD("ymf", YMF271, 16934400)
MDRV_SOUND_CONFIG(ymf271_config)
MDRV_SOUND_ADD("ymz", YMZ280B, 16934400)
MDRV_SOUND_ROUTE(0, "lspeaker", 1.0)
MDRV_SOUND_ROUTE(1, "rspeaker", 1.0)
MACHINE_DRIVER_END
@ -3267,12 +3393,12 @@ ROM_START(ejsakura) /* SYS386F V2.0 */
ROM_REGION( 0x900000, "gfx2", ROMREGION_ERASEFF) /* background layer roms */
ROM_REGION( 0x1000000, "gfx3", 0) /* sprites */
ROM_LOAD("chr1.442", 0x000000, 0x400000, CRC(177e3139) SHA1(0385a831c141d59ec4e9c6d6fae9436dca123764) )
ROM_LOAD("chr2.443", 0x400000, 0x400000, CRC(638dc9ae) SHA1(0c11b1e688733fbaeabf83b33410714c22ae53cd) )
ROM_LOAD("chr3.444", 0x800000, 0x400000, CRC(8e5d1de5) SHA1(c1ccb6b4341ee1e939958ec9e68280c6faa2ef1f) )
ROM_LOAD("chr4.445", 0xc00000, 0x400000, CRC(40c6c238) SHA1(0d07b59e25632feb070ce0e572ae75f9bb939893) )
ROM_LOAD16_WORD_SWAP("chr1.442", 0x000000, 0x400000, CRC(40c6c238) SHA1(0d07b59e25632feb070ce0e572ae75f9bb939893) )
ROM_LOAD16_WORD_SWAP("chr2.443", 0x400000, 0x400000, CRC(8e5d1de5) SHA1(c1ccb6b4341ee1e939958ec9e68280c6faa2ef1f) )
ROM_LOAD16_WORD_SWAP("chr3.444", 0x800000, 0x400000, CRC(638dc9ae) SHA1(0c11b1e688733fbaeabf83b33410714c22ae53cd) )
ROM_LOAD16_WORD_SWAP("chr4.445", 0xc00000, 0x400000, CRC(177e3139) SHA1(0385a831c141d59ec4e9c6d6fae9436dca123764) )
ROM_REGION(0x1000000, "ymf", ROMREGION_ERASE00)
ROM_REGION(0x1000000, "ymz", ROMREGION_ERASE00)
ROM_LOAD("sound1.83", 0x000000, 0x800000, CRC(98783cfc) SHA1(f142429e0658a36e908cc135fe0e01ce853d071d) )
ROM_LOAD("sound2.84", 0x800000, 0x800000, CRC(ff37e769) SHA1(eb6d260cbc4e4a925a5d8f604ec695e567ac6bb5) )
ROM_END
@ -3330,4 +3456,4 @@ GAME( 1999, rfjetus, rfjet, sxx2g, spi_2button, rfjet, ROT270, "Seibu
GAME( 2000, rdft22kc, rdft2, seibu386, seibu386_2button, rdft22kc, ROT270, "Seibu Kaihatsu", "Raiden Fighters 2 - 2000 (China)", GAME_IMPERFECT_GRAPHICS )
/* SYS386F V2.0 */
GAME( 1999, ejsakura, 0, sys386f2, spi_ejanhs, sys386f2, ROT270, "Seibu Kaihatsu", "E-Jan Sakurasou", GAME_NOT_WORKING )
GAME( 1999, ejsakura, 0, sys386f2, spi_ejsakura, sys386f2, ROT0, "Seibu Kaihatsu", "E-Jan Sakurasou", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )

View File

@ -30,6 +30,9 @@ extern UINT32 *spi_scrollram;
VIDEO_START( spi );
VIDEO_UPDATE( spi );
VIDEO_START( sys386f2 );
VIDEO_UPDATE( sys386f2 );
READ32_HANDLER( spi_layer_bank_r );
WRITE32_HANDLER( spi_layer_bank_w );
WRITE32_HANDLER( spi_layer_enable_w );

View File

@ -4355,7 +4355,7 @@ BOMULEUL CHAJARA SEGA ST-V 1997/04/11
DRIVER( ggxx ) /* 2002.05 Guilty Gear XX */
/* 2002.05 Cleopatra Fortune + */
DRIVER( mok ) /* 2002.05 The Maze of the Kings */
DRIVER( ngdup23a ) /* GD-ROM Firmware Updater */
DRIVER( ngdup23a ) /* DIMM Firmware Updater */
DRIVER( ngdup23c )
DRIVER( chocomk ) /* 2002.06 Musapy no Choco Marker */
/* 2002.07 Mazan */
@ -4365,13 +4365,13 @@ BOMULEUL CHAJARA SEGA ST-V 1997/04/11
DRIVER( quizqgd ) /* 2003.01 Quiz Keitai Q mode */
/* 2003.03 Yonin Uchi Mahjong MJ Network Taisen ver. */
DRIVER( usagui )
DRIVER( tetkiwam )
DRIVER( ggxxrl ) /* 2003.03 Guilty Gear XX # Reload */
DRIVER( shikgam2 ) /* 2003.04 Shikigami no Shiro 2 */
DRIVER( bdrdown ) /* 2003.04 Border Down */
DRIVER( psyvar2 ) /* 2003.11 Psyvariar 2 */
DRIVER( puyofev ) /* 2003.11 Puyopuyo Fever */
DRIVER( cfield ) /* 2004.06 Chaos Field */
DRIVER( tetkiwam ) /* 2004.06 Tetris Kiwamemichi */
DRIVER( trizeal ) /* 2004.09 Trizeal */
/* 2005.03 Melty Blood Act Cadenza */
DRIVER( ss2005 ) /* 2005.04 Super Shanghai 2005 */
@ -4380,8 +4380,8 @@ BOMULEUL CHAJARA SEGA ST-V 1997/04/11
DRIVER( meltybld ) /* 2005.08 Melty Blood Act Cadenza ver.A */
DRIVER( ggxxsla ) /* 2005.09 Guilty Gear XX Slash */
DRIVER( radirgy ) /* 2005.10 Radirgy */
/* 2005.?? Radirgy (Rev. A) */
DRIVER( undefeat ) /* 2005.10 Under Defeat */
/* 2005.12 Radirgy (Rev. A) */
/* 2006.03 Kurukuru Chameleon */
DRIVER( trgheart ) /* 2006.05 Trigger Heart Exelica */
/* 2006.07 Touch de Zunou */

View File

@ -24,7 +24,8 @@ static int text_layer_offset;
static UINT32 bg_fore_layer_position;
static UINT8 alpha_table[6144];
static UINT8 alpha_table[8192];
static UINT8 sprite_bpp;
READ32_HANDLER( spi_layer_bank_r )
{
@ -320,15 +321,16 @@ static void draw_blend_gfx(running_machine *machine, bitmap_t *bitmap, const rec
for (j=y1; j <= y2; j++)
{
UINT32 *p = BITMAP_ADDR32(bitmap, j, 0);
UINT8 trans_pen = (1 << sprite_bpp) - 1;
int dp_i = (py * width) + px;
py += yd;
for (i=x1; i <= x2; i++)
{
UINT8 pen = dp[dp_i];
if (pen != 0x3f)
if (pen != trans_pen)
{
int global_pen = pen + color*64;
int global_pen = pen + (color << sprite_bpp);
UINT8 alpha = alpha_table[global_pen];
if (alpha)
{
@ -482,6 +484,7 @@ VIDEO_START( spi )
int i;
int region_length;
sprite_bpp = 6;
text_layer = tilemap_create( machine, get_text_tile_info, tilemap_scan_rows, 8,8,64,32 );
back_layer = tilemap_create( machine, get_back_tile_info, tilemap_scan_cols, 16,16,32,32 );
mid_layer = tilemap_create( machine, get_mid_tile_info, tilemap_scan_cols, 16,16,32,32 );
@ -652,3 +655,32 @@ VIDEO_UPDATE( spi )
combine_tilemap(screen->machine, bitmap, cliprect, text_layer, 0, 0, 0, NULL);
return 0;
}
VIDEO_START( sys386f2 )
{
int i;
palette_ram = auto_malloc(0x4000);
sprite_ram = auto_malloc(0x1000);
sprite_bpp = 8;
memset(palette_ram, 0, 0x4000);
memset(sprite_ram, 0, 0x1000);
for (i=0; i < 8192; i++) {
palette_set_color(machine, i, MAKE_RGB(0, 0, 0));
}
memset(alpha_table, 0, 8192 * sizeof(UINT8));
}
VIDEO_UPDATE( sys386f2 )
{
bitmap_fill(bitmap, cliprect, 0);
draw_sprites(screen->machine, bitmap, cliprect, 0);
draw_sprites(screen->machine, bitmap, cliprect, 1);
draw_sprites(screen->machine, bitmap, cliprect, 2);
draw_sprites(screen->machine, bitmap, cliprect, 3);
return 0;
}