diff options
Diffstat (limited to 'src/mame/drivers/bishjan.c')
-rw-r--r-- | src/mame/drivers/bishjan.c | 489 |
1 files changed, 489 insertions, 0 deletions
diff --git a/src/mame/drivers/bishjan.c b/src/mame/drivers/bishjan.c new file mode 100644 index 00000000000..a23d1a3945b --- /dev/null +++ b/src/mame/drivers/bishjan.c @@ -0,0 +1,489 @@ +/********************************************************************************************************************* + +Bishou Jan (Laugh World) (C)1999 Subsino + +driver by Luca Elia + +PCB Layout +---------- + +|------------------------------------------------------| +|TDA1519A 28-WAY | +| VOL | +| HM86171 ULN2003 | +| LM324 | +| S-1 ULN2003 | +| | +| |-------| DSW1(8) | +| |-------| |SUBSINO| | +| 2-V201.U9 |SUBSINO| |SS9802 | | +| |SS9904 | | | | +| | | |-------| | +| |-------| | +| | +| 44.1MHz CXK58257 | +| 3-V201.U25 | +| 1-V203.U21 | +| 4-V201.U26 SW1| +| |-------| |-------| |-----| | +| 5-V201.U27 |SUBSINO| |SUBSINO| |H8 | | +| |SS9601 | |SS9803 | |3044 | | +| 6-V201.U28 | | | | |-----| | +| |-------| |-------| | +| 62256 62256 BATTERY | +|------------------------------------------------------| +Notes: + H8/3044 - Subsino re-badged Hitachi H8/3044 HD6433044A22F Microcontroller (QFP100) + The H8/3044 is a H8/3002 with 24bit address bus and has 32k MASKROM and 2k RAM, clock input is 14.7MHz [44.1/3] + MD0,MD1 & MD2 are configured to MODE 6 16MByte Expanded Mode with the on-chip 32k MASKROM enabled. + CXK58257 - Sony CXK58257 32k x8 SRAM (SOP28) + HM86171 - Hualon Microelectronics HMC HM86171 VGA 256 colour RAMDAC (DIP28) + S-1 - ?? Probably some kind of audio OP AMP or DAC? (DIP8) + SW1 - Push Button Test Switch + HSync - 15.75kHz + VSync - 60Hz + +*********************************************************************************************************************/ + +#include "driver.h" +#include "cpu/h83002/h83002.h" + +/*************************************************************************** + Video Hardware +***************************************************************************/ + +static int clr_offset; + +static UINT16 *bishjan_scroll, *bishjan_layers; + +static UINT16 *bishjan_videoram1, *bishjan_videoram2; +static tilemap *tmap1, *tmap2; + +static TILE_GET_INFO( get_tile_info1 ) { SET_TILE_INFO(0, bishjan_videoram1[ tile_index ], 0, 0); } +static TILE_GET_INFO( get_tile_info2 ) { SET_TILE_INFO(0, bishjan_videoram2[ tile_index ], 0, 0); } + +static VIDEO_START(bishjan) +{ + tmap1 = tilemap_create( get_tile_info1, tilemap_scan_rows, + TILEMAP_TYPE_PEN, 8,8, 0x80,0x40 ); + + tmap2 = tilemap_create( get_tile_info2, tilemap_scan_rows, + TILEMAP_TYPE_PEN, 8,8, 0x80,0x40 ); + + tilemap_set_transparent_pen(tmap1, 0); + tilemap_set_transparent_pen(tmap2, 0); + + bishjan_videoram1 = (UINT16*)auto_malloc(sizeof(UINT16) * 0x80 * 0x40); + bishjan_videoram2 = (UINT16*)auto_malloc(sizeof(UINT16) * 0x80 * 0x40); + + colorram = auto_malloc(256*3); +} + +static VIDEO_UPDATE( bishjan ) +{ + int layers_ctrl = ~bishjan_layers[0]; + + int scroll1_x = ((bishjan_scroll[1] & 0x0f00)>>0) | (bishjan_scroll[0] >> 8); + int scroll1_y = ((bishjan_scroll[1] & 0xf000)>>4) | (bishjan_scroll[0] & 0xff); + + int scroll2_x = ((bishjan_scroll[2] & 0x0f)<<8) | (bishjan_scroll[1] & 0xff); + int scroll2_y = ((bishjan_scroll[2] & 0xf0)<<4) | (bishjan_scroll[2] >> 8); + +#ifdef MAME_DEBUG +if (input_code_pressed(KEYCODE_Z)) +{ + int msk = 0; + if (input_code_pressed(KEYCODE_Q)) msk |= 1; + if (input_code_pressed(KEYCODE_W)) msk |= 2; + if (msk != 0) layers_ctrl &= msk; +} +#endif + + scroll1_y += 1; + scroll2_y += 1; + + tilemap_set_scrollx( tmap1, 0, scroll1_x); tilemap_set_scrolly( tmap1, 0, scroll1_y ); + tilemap_set_scrollx( tmap2, 0, scroll2_x); tilemap_set_scrolly( tmap2, 0, scroll2_y ); + + fillbitmap(bitmap,get_black_pen(machine),cliprect); + + if (layers_ctrl & 1) tilemap_draw(bitmap,cliprect, tmap1, 0, 0); + if (layers_ctrl & 2) tilemap_draw(bitmap,cliprect, tmap2, 0, 0); + +// popmessage("23: %03x,%03x - %03x,%03x LY: %02x", scroll1_x,scroll1_y, scroll2_x,scroll2_y, (int)*bishjan_layers); + + return 0; +} + +// Palette: HMC HM86171 VGA 256 colour RAMDAC + +static WRITE16_HANDLER(colordac_w) +{ + if (ACCESSING_LSB) + { + colorram[clr_offset] = data; + palette_set_color_rgb(Machine, clr_offset/3, + pal6bit(colorram[(clr_offset/3)*3+0]), + pal6bit(colorram[(clr_offset/3)*3+1]), + pal6bit(colorram[(clr_offset/3)*3+2]) + ); + clr_offset = (clr_offset+1) % (256*3); + } + + if (ACCESSING_MSB) + { + clr_offset = (data>>8) * 3; + } +} + +// Tilemaps + +static UINT16 bishjan_low; + +static WRITE16_HANDLER( bishjan_low_w ) +{ + if (ACCESSING_MSB) bishjan_low = data >> 8; +} + +static WRITE16_HANDLER( bishjan_tmap1_w ) +{ + if (ACCESSING_MSB) + { + bishjan_videoram1[offset*2] = data | bishjan_low; + tilemap_mark_tile_dirty(tmap1, offset*2); + } + if (ACCESSING_LSB) + { + bishjan_videoram1[offset*2+1] = (data << 8) | bishjan_low; + tilemap_mark_tile_dirty(tmap1, offset*2+1); + } +} +static WRITE16_HANDLER( bishjan_tmap2_w ) +{ + if (ACCESSING_MSB) + { + bishjan_videoram2[offset*2] = data | bishjan_low; + tilemap_mark_tile_dirty(tmap2, offset*2); + } + if (ACCESSING_LSB) + { + bishjan_videoram2[offset*2+1] = (data << 8) | bishjan_low; + tilemap_mark_tile_dirty(tmap2, offset*2+1); + } +} + +static READ16_HANDLER( bishjan_tmap1_lo_r ) +{ + return (bishjan_videoram1[offset*2+0] << 8) | (bishjan_videoram1[offset*2+1] & 0x00ff); +} +static READ16_HANDLER( bishjan_tmap1_hi_r ) +{ + return (bishjan_videoram1[offset*2+0] & 0xff00) | (bishjan_videoram1[offset*2+1] >> 8); +} + +static READ16_HANDLER( bishjan_tmap2_lo_r ) +{ + return (bishjan_videoram2[offset*2+0] << 8) | (bishjan_videoram2[offset*2+1] & 0x00ff); +} +static READ16_HANDLER( bishjan_tmap2_hi_r ) +{ + return (bishjan_videoram2[offset*2+0] & 0xff00) | (bishjan_videoram2[offset*2+1] >> 8); +} + +// Inputs + +static UINT16 bishjan_sel, bishjan_input, bishjan_hopper; + +static WRITE16_HANDLER( bishjan_sel_w ) +{ + if (ACCESSING_MSB) bishjan_sel = data >> 8; +} + +static READ16_HANDLER( bishjan_unk_r ) +{ + return + (mame_rand(Machine) & 0x9800) | // bit 7 eeprom? + (((bishjan_sel==0x12) ? 0x40:0x00) << 8) | +// (mame_rand() & 0xff); +// (((cpu_getcurrentframe()%60)==0)?0x18:0x00); + 0x18; +} + +static WRITE16_HANDLER( bishjan_input_w ) +{ + if (ACCESSING_MSB) bishjan_input = data >> 8; +} + +static READ16_HANDLER( bishjan_input_r ) +{ + int i; + UINT16 res = 0xff; + + for (i = 0; i < 5; i++) + if (bishjan_input & (1 << i)) + res = readinputport(4+i); + + return (res << 8) | + readinputport(3) | + ((bishjan_hopper && !(cpu_getcurrentframe()%10)) ? 0x00 : 0x04) // bit 2: hopper sensor + ; +} + +static WRITE16_HANDLER( bishjan_coin_w ) +{ + if (ACCESSING_LSB) + { + // coin out data & 0x01; + bishjan_hopper = data & 0x02; // hopper + coin_counter_w( 1, data & 0x10 ); + } +} + +/*************************************************************************** + Memory Maps +***************************************************************************/ + +/* +432000 & 436000 W + lo (80*20=1000) +412000 & 422000 R (lo & hi) +416000 & 426000 R (lo & hi) + +433000 & 437000 W +413000 & 423000 R +417000 & 427000 R +*/ + +static ADDRESS_MAP_START( bishjan_map, ADDRESS_SPACE_PROGRAM, 16 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(24) ) + + AM_RANGE( 0x000000, 0x07ffff ) AM_ROM AM_REGION(REGION_CPU1, 0) + AM_RANGE( 0x080000, 0x0fffff ) AM_ROM AM_REGION(REGION_CPU1, 0) + + AM_RANGE( 0x200000, 0x207fff ) AM_RAM AM_BASE(&generic_nvram16) AM_SIZE(&generic_nvram_size) // battery + + AM_RANGE( 0x412000, 0x412fff ) AM_READ( bishjan_tmap2_lo_r ) //? + AM_RANGE( 0x413000, 0x413fff ) AM_READ( MRA16_RAM ) AM_SHARE(1) + AM_RANGE( 0x416000, 0x416fff ) AM_READ( bishjan_tmap1_lo_r ) //? + AM_RANGE( 0x417000, 0x417fff ) AM_READ( MRA16_RAM ) AM_SHARE(1) + AM_RANGE( 0x422000, 0x422fff ) AM_READ( bishjan_tmap2_hi_r ) //? + AM_RANGE( 0x423000, 0x423fff ) AM_READ( MRA16_RAM ) AM_SHARE(2) + AM_RANGE( 0x426000, 0x426fff ) AM_READ( bishjan_tmap1_hi_r ) + AM_RANGE( 0x427000, 0x427fff ) AM_READ( MRA16_RAM ) AM_SHARE(2) + AM_RANGE( 0x430000, 0x431fff ) AM_WRITE( bishjan_tmap2_w ) + AM_RANGE( 0x432000, 0x432fff ) AM_WRITE( bishjan_tmap2_w ) //? + AM_RANGE( 0x433000, 0x433fff ) AM_WRITE( MWA16_RAM ) AM_SHARE(1) + AM_RANGE( 0x434000, 0x435fff ) AM_WRITE( bishjan_tmap1_w ) + AM_RANGE( 0x436000, 0x436fff ) AM_WRITE( bishjan_tmap1_w ) //? + AM_RANGE( 0x437000, 0x437fff ) AM_WRITE( MWA16_RAM ) AM_SHARE(2) + + AM_RANGE( 0x600000, 0x600001 ) AM_READWRITE( MRA16_NOP, bishjan_sel_w ) + AM_RANGE( 0x600060, 0x600061 ) AM_WRITE( colordac_w ) + AM_RANGE( 0x600062, 0x600063 ) AM_WRITE( MWA16_NOP ) // ff to 600062 + AM_RANGE( 0x6000a0, 0x6000a1 ) AM_WRITE( bishjan_low_w ) + + AM_RANGE( 0xa0001e, 0xa0001f ) AM_WRITE( MWA16_RAM ) AM_BASE( &bishjan_layers ) + + AM_RANGE( 0xa00020, 0xa00025 ) AM_WRITE( MWA16_RAM ) AM_BASE( &bishjan_scroll ) + + AM_RANGE( 0xc00000, 0xc00001 ) AM_READ( input_port_1_word_r ) // c00001 sw1 + AM_RANGE( 0xc00002, 0xc00003 ) AM_READWRITE( input_port_2_word_r, bishjan_input_w ) // in c + AM_RANGE( 0xc00004, 0xc00005 ) AM_READ( bishjan_input_r ) // in a & b + AM_RANGE( 0xc00006, 0xc00007 ) AM_READ( bishjan_unk_r ) // c00006 in d ($18) + AM_RANGE( 0xc00008, 0xc00009 ) AM_READWRITE( input_port_0_word_r, bishjan_coin_w ) // c00009 reset +ADDRESS_MAP_END + + +/*************************************************************************** + Graphics Layout +***************************************************************************/ + +static const gfx_layout bishjan_8x8_layout = +{ + 8,8, + RGN_FRAC(1,1), + 8, + { STEP8(0,1) }, + { STEP8(0,8) }, + { STEP8(0,8*8) }, + 8*8*8 +}; + +static GFXDECODE_START( bishjan ) + GFXDECODE_ENTRY( REGION_GFX1, 0, bishjan_8x8_layout, 0, 1 ) +GFXDECODE_END + + +/*************************************************************************** + Input Ports +***************************************************************************/ + +static INPUT_PORTS_START( bishjan ) + PORT_START // IN0 - Reset + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1) + + PORT_START // IN1 - DSW(SW1) + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Controls ) ) + PORT_DIPSETTING( 0x0001, "Keyboard" ) + PORT_DIPSETTING( 0x0000, DEF_STR( Joystick ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_START // IN2 - C + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 ) // start (joy) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) // down (joy) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) // left (joy) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) // right (joy) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) // n (joy) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) // bet (joy) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON2 ) // select (joy) + + PORT_START // IN3 - A + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SERVICE ) // test + PORT_BIT( 0x0004, IP_ACTIVE_HIGH,IPT_SPECIAL ) // hopper sensor + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE1 ) // stats + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE2 ) // pay out? "hopper empty" + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) // coin + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SERVICE3 ) // pay out? "hopper empty" + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) // coin + + PORT_START // IN4 - B(1) + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_A ) // a + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_E ) // e + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_I ) // i + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_M ) // m + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // i2 + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_START1 ) // b2 (start) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START // IN5 - B(2) + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_B ) // b + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_F ) // f + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_J ) // j + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_N ) // n + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // l2 + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) // c2 (bet) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START // IN6 - B(3) + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_C ) // c + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_G ) // g + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_K ) // k + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) // k2 + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // m2 + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START // IN7 - B(4) + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_D ) // d + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_H ) // h + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_L ) // l + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) // j2 + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START // IN8 - B(5) + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) // g2 + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) // e2 + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // d2 + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) // f2 + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + + +/*************************************************************************** + Machine Drivers +***************************************************************************/ + +static INTERRUPT_GEN( bishjan_interrupt ) +{ + switch (cpu_getiloops()) + { + case 0: + cpunum_set_input_line(0, 0, PULSE_LINE); + break; + default: + h8_3002_InterruptRequest(24); + break; + } +} + +static MACHINE_DRIVER_START( bishjan ) + MDRV_CPU_ADD(H83002, 44100000/3) + MDRV_CPU_PROGRAM_MAP( bishjan_map, 0 ) + MDRV_CPU_VBLANK_INT(bishjan_interrupt,2) + + MDRV_NVRAM_HANDLER(generic_0fill) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES( VIDEO_TYPE_RASTER ) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE( 512, 256 ) + MDRV_SCREEN_VISIBLE_AREA( 0, 512-1, 0, 256-16-1 ) + MDRV_GFXDECODE(bishjan) + MDRV_PALETTE_LENGTH( 256 ) + MDRV_SCREEN_REFRESH_RATE( 60 ) + + MDRV_VIDEO_START( bishjan ) + MDRV_VIDEO_UPDATE( bishjan ) +MACHINE_DRIVER_END + +/*************************************************************************** + ROMs Loading +***************************************************************************/ + +ROM_START( bishjan ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) // H8/3044 program + ROM_LOAD( "1-v203.u21", 0x000000, 0x080000, CRC(1f891d48) SHA1(0b6a5aa8b781ba8fc133289790419aa8ea21c400) ) + + ROM_REGION( 0x400000, REGION_GFX1, 0 ) // Tiles + ROM_LOAD32_BYTE( "3-v201.u25", 0x000000, 0x100000, CRC(e013e647) SHA1(a5b0f82f3454393c1ea5e635b0d37735a25e2ea5) ) + ROM_LOAD32_BYTE( "4-v201.u26", 0x000001, 0x100000, CRC(e0d40ef1) SHA1(95f80889103a7b93080b46387274cb1ffe0c8768) ) + ROM_LOAD32_BYTE( "5-v201.u27", 0x000002, 0x100000, CRC(85067d40) SHA1(3ecf7851311a77a0dfca90775fcbf6faabe9c2ab) ) + ROM_LOAD32_BYTE( "6-v201.u28", 0x000003, 0x100000, CRC(430bd9d7) SHA1(dadf5a7eb90cf2dc20f97dbf20a4b6c8e7734fb1) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) // Samples + ROM_LOAD( "2-v201.u9", 0x000000, 0x100000, CRC(ea42764d) SHA1(13fe1cd30e474f4b092949c440068e9ddca79976) ) +ROM_END + +static DRIVER_INIT(bishjan) +{ + UINT16 *rom = (UINT16*)memory_region(REGION_CPU1); + + // check + rom[0x042EA/2] = 0x4008; + + // rts -> rte + rom[0x33386/2] = 0x5670; + rom[0x0CC5C/2] = 0x5670; +} + +GAME(1999, bishjan, 0, bishjan, bishjan, bishjan, ROT0, "Subsino", "Bishou Jan", GAME_NO_SOUND) |