mirror of
https://github.com/holub/mame
synced 2025-07-04 17:38:08 +03:00
new clones
Operation Wolf (Japan, prototype) [caius] does NOT have a c-chip, although seems to be an unfinished version of the game (has a stage select at the start which does not even work if the English dipswitch is enabled - board resets instead) also has infinite health and 'hit %' debug dipswitches.
This commit is contained in:
parent
4c08395ada
commit
be9b908e70
@ -317,18 +317,8 @@ READ16_MEMBER(opwolf_state::opwolf_dsw_r)
|
||||
|
||||
READ16_MEMBER(opwolf_state::opwolf_lightgun_r)
|
||||
{
|
||||
int scaled;
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00: /* P1X - Have to remap 8 bit input value, into 0-319 visible range */
|
||||
scaled = (ioport(P1X_PORT_TAG)->read() * 320 ) / 256;
|
||||
return (scaled + 0x15 + m_opwolf_gun_xoffs);
|
||||
case 0x01: /* P1Y */
|
||||
return (ioport(P1Y_PORT_TAG)->read() - 0x24 + m_opwolf_gun_yoffs);
|
||||
}
|
||||
|
||||
return 0xff;
|
||||
static const char *const dswname[2] = { "IN2", "IN3" };
|
||||
return ioport(dswname[offset])->read();
|
||||
}
|
||||
|
||||
READ8_MEMBER(opwolf_state::z80_input1_r)
|
||||
@ -400,6 +390,25 @@ static ADDRESS_MAP_START( opwolfb_map, AS_PROGRAM, 16, opwolf_state )
|
||||
AM_RANGE(0xd00000, 0xd03fff) AM_DEVREADWRITE("pc090oj", pc090oj_device, word_r, word_w) /* sprite ram */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( opwolfp_map, AS_PROGRAM, 16, opwolf_state )
|
||||
AM_RANGE(0x000000, 0x03ffff) AM_ROM
|
||||
AM_RANGE(0x100000, 0x107fff) AM_RAM
|
||||
|
||||
AM_RANGE(0x200000, 0x200fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||
AM_RANGE(0x380000, 0x380003) AM_READ(opwolf_dsw_r) /* dip switches */
|
||||
AM_RANGE(0x380000, 0x380003) AM_WRITE(opwolf_spritectrl_w) // usually 0x4, changes when you fire
|
||||
AM_RANGE(0x3a0000, 0x3a0003) AM_READ(opwolf_lightgun_r) /* lightgun, read at $11e0/6 (AND INPUTS) */
|
||||
AM_RANGE(0x3c0000, 0x3c0001) AM_WRITENOP /* watchdog ?? */
|
||||
AM_RANGE(0x3e0000, 0x3e0001) AM_READNOP AM_DEVWRITE8("tc0140syt", tc0140syt_device, master_port_w, 0xff00)
|
||||
AM_RANGE(0x3e0002, 0x3e0003) AM_DEVREADWRITE8("tc0140syt", tc0140syt_device, master_comm_r, master_comm_w, 0xff00)
|
||||
AM_RANGE(0xc00000, 0xc0ffff) AM_DEVREADWRITE("pc080sn", pc080sn_device, word_r, word_w)
|
||||
AM_RANGE(0xc10000, 0xc1ffff) AM_WRITEONLY /* error in init code (?) */
|
||||
AM_RANGE(0xc20000, 0xc20003) AM_DEVWRITE("pc080sn", pc080sn_device, yscroll_word_w)
|
||||
AM_RANGE(0xc40000, 0xc40003) AM_DEVWRITE("pc080sn", pc080sn_device, xscroll_word_w)
|
||||
AM_RANGE(0xc50000, 0xc50003) AM_DEVWRITE("pc080sn", pc080sn_device, ctrl_word_w)
|
||||
AM_RANGE(0xd00000, 0xd03fff) AM_DEVREADWRITE("pc090oj", pc090oj_device, word_r, word_w) /* sprite ram */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
This extra Z80 substitutes for the c-chip in the bootleg
|
||||
@ -551,6 +560,21 @@ ADDRESS_MAP_END
|
||||
INPUT PORTS, DIPs
|
||||
***********************************************************/
|
||||
|
||||
|
||||
CUSTOM_INPUT_MEMBER(opwolf_state::opwolf_gun_x_r )
|
||||
{
|
||||
/* P1X - Have to remap 8 bit input value, into 0-319 visible range */
|
||||
int scaled = (ioport(P1X_PORT_TAG)->read() * 320 ) / 256;
|
||||
return (scaled + 0x15 + m_opwolf_gun_xoffs);
|
||||
}
|
||||
|
||||
CUSTOM_INPUT_MEMBER(opwolf_state::opwolf_gun_y_r )
|
||||
{
|
||||
return (ioport(P1Y_PORT_TAG)->read() - 0x24 + m_opwolf_gun_yoffs);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static INPUT_PORTS_START( opwolf )
|
||||
/* 0x380000 -> 0x0ff028 (-$fd8,A5) (C-chip) */
|
||||
PORT_START("DSWA")
|
||||
@ -601,15 +625,66 @@ static INPUT_PORTS_START( opwolf )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
/* P1X (span allows you to shoot enemies behind status bar) */
|
||||
PORT_START(P1X_PORT_TAG)
|
||||
|
||||
PORT_START("IN2")
|
||||
PORT_BIT( 0x01ff, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, opwolf_state, opwolf_gun_x_r, NULL)
|
||||
PORT_BIT( 0xfe00, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("IN3")
|
||||
PORT_BIT( 0x01ff, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, opwolf_state, opwolf_gun_y_r, NULL)
|
||||
PORT_BIT( 0xfe00, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START(P1X_PORT_TAG) /* P1X (span allows you to shoot enemies behind status bar) */
|
||||
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(1)
|
||||
|
||||
/* P1Y (span allows you to be slightly offscreen) */
|
||||
PORT_START(P1Y_PORT_TAG)
|
||||
PORT_START(P1Y_PORT_TAG) /* P1Y (span allows you to be slightly offscreen) */
|
||||
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(1)
|
||||
|
||||
|
||||
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
static INPUT_PORTS_START( opwolfp )
|
||||
PORT_INCLUDE( opwolf )
|
||||
|
||||
|
||||
PORT_MODIFY("IN0")
|
||||
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_MODIFY("IN1")
|
||||
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
|
||||
|
||||
PORT_MODIFY("IN2")
|
||||
/* 0x0000 - 0x01ff is GUNX */
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 )
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 )
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE1 )
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_TILT )
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_START1 )
|
||||
PORT_BIT( 0xc000, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
PORT_MODIFY("IN3")
|
||||
/* 0x0000 - 0x01ff is GUNY */
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_COIN1 )
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN2 )
|
||||
PORT_BIT( 0xf800, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
PORT_MODIFY("DSWB")
|
||||
PORT_DIPNAME( 0x10, 0x10, "Display Hit Percentage (Cheat)" ) PORT_DIPLOCATION("SW2:5") // probably a cheat / debug feature as it's not in the final game
|
||||
PORT_DIPSETTING( 0x10, DEF_STR( No ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
|
||||
PORT_DIPNAME( 0x20, 0x20, "Infinite Health (Cheat)" ) PORT_DIPLOCATION("SW2:6")
|
||||
PORT_DIPSETTING( 0x20, DEF_STR( No ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
|
||||
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Language ) ) PORT_DIPLOCATION("SW2:8")
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( Japanese ) )
|
||||
PORT_DIPSETTING( 0x00, "English (invalid)" ) // game hangs on course screen (confirmed on hardware)
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( opwolfu )
|
||||
PORT_INCLUDE( opwolf )
|
||||
|
||||
@ -751,6 +826,15 @@ static MACHINE_CONFIG_START( opwolf, opwolf_state )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( opwolfp, opwolf )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_MODIFY("maincpu") /* 8 MHz */
|
||||
MCFG_CPU_PROGRAM_MAP(opwolfp_map)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( opwolfb, opwolf_state ) /* OSC clocks unknown for the bootleg, but changed to match original sets */
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -906,6 +990,33 @@ ROM_START( opwolfu ) /* Taito TC0030 C-Chip labeled B20-18 (yes, it has a specif
|
||||
ROM_LOAD( "b20-08.21", 0x00000, 0x80000, CRC(f3e19c64) SHA1(39d48645f776c9c2ade537d959ecc6f9dc6dfa1b) )
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
Prototype board
|
||||
There is no C-CHIP and TC0070RGB module is replaced by three PC040DA DAC, 68000 CPU is socketed as well as RAMs, the PGA customs and YM2151, YM3012 and PC060HA on sound board.
|
||||
Labels on the 68k and Z80 roms are handwritten with checksums, GFX roms are the final MASK roms.
|
||||
*/
|
||||
|
||||
ROM_START( opwolfp )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 ) /* 256k for 68000 code */
|
||||
ROM_LOAD16_BYTE( "ic40", 0x00000, 0x10000, CRC(81f56008) SHA1(8ff02c088ef325a1920b29651672bad2d2d2a7a2) )
|
||||
ROM_LOAD16_BYTE( "ic30", 0x00001, 0x10000, CRC(d90cebb2) SHA1(c36070c20dfad0e1c56c4ac016a115e9e9601ecb) )
|
||||
ROM_LOAD16_BYTE( "ic39", 0x20000, 0x10000, CRC(aeef5cfc) SHA1(3c75d1df80db6ae2d690fdf23b3c44b21056d24a) )
|
||||
ROM_LOAD16_BYTE( "ic29", 0x20001, 0x10000, CRC(5ce89249) SHA1(be22fd57e29114cde66cf4339c26740b3e0f830f) )
|
||||
|
||||
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */
|
||||
ROM_LOAD( "ic10", 0x00000, 0x10000, CRC(684b40dd) SHA1(0546e01cf2c76b9c60730a14835cdeaaec21d26f) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_LOAD( "b20-13.13", 0x00000, 0x80000, CRC(f6acdab1) SHA1(716b94ab3fa330ecf22df576f6a9f47a49c7554a) ) /* SCR tiles (8 x 8) */
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_LOAD( "b20-06.ic72", 0x00000, 0x80000, CRC(89f889e5) SHA1(1592f6ce4fbb75e33d6ab957e5b90242a7a7a8c4) ) /* Sprites (16 x 16) */ // same content as b20-14.72 despite different label (confirmed)
|
||||
|
||||
ROM_REGION( 0x80000, "adpcm", 0 ) /* ADPCM samples */
|
||||
ROM_LOAD( "b20-08.21", 0x00000, 0x80000, CRC(f3e19c64) SHA1(39d48645f776c9c2ade537d959ecc6f9dc6dfa1b) )
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( opwolfb )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 ) /* 256k for 68000 code */
|
||||
ROM_LOAD16_BYTE( "opwlfb.12", 0x00000, 0x10000, CRC(d87e4405) SHA1(de8a7763acd57293fbbff609e949ecd66c0f9234) )
|
||||
@ -980,10 +1091,24 @@ DRIVER_INIT_MEMBER(opwolf_state,opwolfb)
|
||||
membank("z80bank")->configure_entries(0, 4, memregion("audiocpu")->base(), 0x4000);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(opwolf_state,opwolfp)
|
||||
{
|
||||
UINT16* rom = (UINT16*)memregion("maincpu")->base();
|
||||
|
||||
m_opwolf_region = rom[0x03fffe / 2] & 0xff;
|
||||
|
||||
m_opwolf_gun_xoffs = 5;
|
||||
m_opwolf_gun_yoffs = 30;
|
||||
|
||||
membank("z80bank")->configure_entries(0, 4, memregion("audiocpu")->base(), 0x4000);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* year rom parent machine inp init */
|
||||
GAME( 1987, opwolf, 0, opwolf, opwolf, opwolf_state, opwolf, ROT0, "Taito Corporation Japan", "Operation Wolf (World, set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, opwolfa, opwolf, opwolf, opwolf, opwolf_state, opwolf, ROT0, "Taito Corporation Japan", "Operation Wolf (World, set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, opwolfj, opwolf, opwolf, opwolfu, opwolf_state, opwolf, ROT0, "Taito Corporation", "Operation Wolf (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, opwolf, 0, opwolf, opwolf, opwolf_state, opwolf, ROT0, "Taito Corporation Japan", "Operation Wolf (World, set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, opwolfa, opwolf, opwolf, opwolf, opwolf_state, opwolf, ROT0, "Taito Corporation Japan", "Operation Wolf (World, set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, opwolfj, opwolf, opwolf, opwolfu, opwolf_state, opwolf, ROT0, "Taito Corporation", "Operation Wolf (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, opwolfu, opwolf, opwolf, opwolfu, opwolf_state, opwolf, ROT0, "Taito America Corporation", "Operation Wolf (US)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, opwolfb, opwolf, opwolfb, opwolfb, opwolf_state, opwolfb, ROT0, "bootleg (Bear Corporation Korea)", "Operation Bear (bootleg of Operation Wolf)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, opwolfp, opwolf, opwolfp, opwolfp, opwolf_state, opwolfp, ROT0, "Taito Corporation", "Operation Wolf (Japan, prototype)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // unprotected
|
||||
|
@ -89,6 +89,13 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(opwolf_adpcm_c_w);
|
||||
DECLARE_DRIVER_INIT(opwolf);
|
||||
DECLARE_DRIVER_INIT(opwolfb);
|
||||
DECLARE_DRIVER_INIT(opwolfp);
|
||||
|
||||
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(opwolf_gun_x_r);
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(opwolf_gun_y_r);
|
||||
|
||||
|
||||
virtual void machine_start() override;
|
||||
DECLARE_MACHINE_RESET(opwolf);
|
||||
UINT32 screen_update_opwolf(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
@ -28575,6 +28575,7 @@ opwolfa // B20 (c) 1987 Taito Corporation Japan (World)
|
||||
opwolfb // bootleg
|
||||
opwolfj // B20 (c) 1987 Taito Corporation (Japan)
|
||||
opwolfu // B20 (c) 1987 Taito America Corporation (US)
|
||||
opwolfp // prototype?
|
||||
|
||||
@source:orao.cpp
|
||||
orao //
|
||||
|
Loading…
Reference in New Issue
Block a user