📄 wow.c
字号:
PORT_START /* Dip Switch */
PORT_DIPNAME( 0x01, 0x01, "Coinage", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x01, "1 Coin/1 Credit" )
PORT_DIPNAME( 0x06, 0x00, "Play Time", IP_KEY_NONE )
PORT_DIPSETTING( 0x06, "40" )
PORT_DIPSETTING( 0x04, "50" )
PORT_DIPSETTING( 0x02, "60" )
PORT_DIPSETTING( 0x00, "70" )
PORT_DIPNAME( 0x08, 0x08, "2 Players Game", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "1 Credit" )
PORT_DIPSETTING( 0x08, "2 Credits" )
PORT_DIPNAME( 0x30, 0x00, "Extended Play", IP_KEY_NONE )
PORT_DIPSETTING( 0x10, "5000" )
PORT_DIPSETTING( 0x20, "6000" )
PORT_DIPSETTING( 0x30, "7000" )
PORT_DIPSETTING( 0x00, "None" )
PORT_DIPNAME( 0x40, 0x40, "Screen", IP_KEY_NONE )
PORT_DIPSETTING( 0x40, "Colour" )
PORT_DIPSETTING( 0x00, "Mono" )
PORT_BITX( 0x80, 0x80, IPT_DIPSWITCH_NAME | IPF_TOGGLE, "Service Mode", OSD_KEY_F2, IP_JOY_NONE, 0 )
PORT_DIPSETTING( 0x80, "Off" )
PORT_DIPSETTING( 0x00, "On" )
INPUT_PORTS_END
static struct IOReadPort seawolf2_readport[] =
{
{ 0x08, 0x08, wow_intercept_r },
{ 0x0E, 0x0E, wow_video_retrace_r },
{ 0x10, 0x10, seawolf2_controller2_r },
{ 0x11, 0x11, seawolf2_controller1_r },
{ 0x12, 0x12, input_port_2_r },
{ 0x13, 0x13, input_port_3_r },
{ -1 } /* end of table */
};
static struct IOWritePort seawolf2_writeport[] =
{
{ 0x00, 0x07, colour_register_w },
{ 0x08, 0x08, MWA_NOP }, /* Gorf uses this */
{ 0x09, 0x09, colour_split_w },
{ 0x0a, 0x0b, MWA_NOP }, /* Gorf uses this */
{ 0x0c, 0x0c, wow_magic_control_w },
{ 0x0d, 0x0d, interrupt_vector_w },
{ 0x0e, 0x0e, wow_interrupt_enable_w },
{ 0x0f, 0x0f, wow_interrupt_w },
{ 0x19, 0x19, wow_magic_expand_color_w },
{ -1 } /* end of table */
};
static struct MachineDriver seawolf_machine_driver =
{
/* basic machine hardware */
{
{
CPU_Z80,
1789773, /* 1.789 Mhz */
0,
seawolf2_readmem,seawolf2_writemem,seawolf2_readport,seawolf2_writeport,
wow_interrupt,256
}
},
60, DEFAULT_60HZ_VBLANK_DURATION, /* frames per second, vblank duration */
1, /* single CPU, no need for interleaving */
0,
/* video hardware */
320, 204, { 1, 320-1, 0, 204-1 },
0, /* no gfxdecodeinfo - bitmapped display */
sizeof(palette)/3,sizeof(colortable)/sizeof(unsigned short),
0,
VIDEO_TYPE_RASTER | VIDEO_SUPPORTS_DIRTY,
0,
generic_vh_start,
generic_vh_stop,
seawolf2_vh_screenrefresh,
/* sound hardware */
0,
0,
0,
0,
};
static int seawolf_hiload(void)
{
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
/* check if the hi score table has already been initialized */
if (memcmp(&RAM[0xC20D],"\xD8\x19",2) == 0)
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[0xC208],2);
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void seawolf_hisave(void)
{
void *f;
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,1)) != 0)
{
osd_fwrite(f,&RAM[0xC208],2);
osd_fclose(f);
}
}
struct GameDriver seawolf2_driver =
{
__FILE__,
0,
"seawolf2",
"Sea Wolf II",
"1978",
"Midway",
"Nicola Salmoria (MAME driver)\nSteve Scavone (info and code)\nMike Coates (game support)",
0,
&seawolf_machine_driver,
0,
seawolf2_rom,
0, 0,
0,
0, /* sound_prom */
seawolf2_input_ports,
0, palette, colortable,
ORIENTATION_DEFAULT,
seawolf_hiload, seawolf_hisave
};
/****************************************************************************
* Extra Bases (Bally/Midway)
****************************************************************************/
ROM_START( ebases_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "m761a", 0x0000, 0x1000, 0x34422147 )
ROM_LOAD( "m761b", 0x1000, 0x1000, 0x4f28dfd6 )
ROM_LOAD( "m761c", 0x2000, 0x1000, 0xbff6c97e )
ROM_LOAD( "m761d", 0x3000, 0x1000, 0x5173781a )
ROM_END
static struct MemoryReadAddress ebases_readmem[] =
{
{ 0x0000, 0x3fff, MRA_ROM },
{ 0x4000, 0x7fff, MRA_RAM },
{ 0x8000, 0xcfff, MRA_ROM },
{ 0xd000, 0xffff, MRA_RAM },
{ -1 } /* end of table */
};
static struct MemoryWriteAddress ebases_writemem[] =
{
{ 0x0000, 0x3fff, wow_magicram_w },
{ 0x4000, 0x7fff, wow_videoram_w, &wow_videoram, &videoram_size },
{ 0x8000, 0xbfff, MWA_RAM },
{ 0xc000, 0xcfff, MWA_RAM },
{ -1 } /* end of table */
};
INPUT_PORTS_START( ebases_input_ports )
PORT_START /* IN0 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_4WAY | IPF_COCKTAIL )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_4WAY | IPF_COCKTAIL )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_4WAY | IPF_COCKTAIL )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_COCKTAIL )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_TILT )
PORT_DIPNAME( 0x08, 0x08, "Cabinet", IP_KEY_NONE )
PORT_DIPSETTING( 0x08, "Upright" )
PORT_DIPSETTING( 0x00, "Cocktail" )
PORT_DIPNAME( 0x10, 0x00, "Colour / Mono", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Colour" )
PORT_DIPSETTING( 0x10, "Mono" )
PORT_DIPNAME( 0x20, 0x00, "Unknown 4", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x20, "On" )
PORT_DIPNAME( 0x40, 0x00, "Unknown 5", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x40, "On" )
PORT_DIPNAME( 0x80, 0x80, "Demo Sounds", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x80, "On" )
PORT_START /* Dip Switch */
PORT_DIPNAME( 0x01, 0x00, "2 Players Game", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "1 Credit" )
PORT_DIPSETTING( 0x08, "2 Credits" )
PORT_DIPNAME( 0x02, 0x00, "Unknown 2", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x02, "On" )
PORT_DIPNAME( 0x04, 0x00, "Free Play", IP_KEY_NONE )
PORT_DIPSETTING( 0x04, "Off" )
PORT_DIPSETTING( 0x00, "On" )
PORT_DIPNAME( 0x08, 0x00, "Cabinet", IP_KEY_NONE )
PORT_DIPSETTING( 0x08, "Upright" )
PORT_DIPSETTING( 0x00, "Cocktail" )
PORT_DIPNAME( 0x10, 0x00, "Unknown 3", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x10, "On" )
PORT_DIPNAME( 0x20, 0x00, "Unknown 4", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x20, "On" )
PORT_DIPNAME( 0x40, 0x00, "Unknown 5", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x40, "On" )
PORT_DIPNAME( 0x80, 0x80, "Demo Sounds", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x80, "On" )
PORT_START /* Dip Switch */
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
static struct IOReadPort ebases_readport[] =
{
{ 0x08, 0x08, wow_intercept_r },
{ 0x0E, 0x0E, wow_video_retrace_r },
{ 0x10, 0x10, input_port_0_r },
{ 0x11, 0x11, input_port_1_r },
{ 0x12, 0x12, input_port_2_r },
{ 0x13, 0x13, input_port_3_r },
{ -1 } /* end of table */
};
static struct MachineDriver ebases_machine_driver =
{
/* basic machine hardware */
{
{
CPU_Z80,
1789773, /* 1.789 Mhz */
0,
ebases_readmem,ebases_writemem,ebases_readport,writeport,
wow_interrupt,256
}
},
60, DEFAULT_60HZ_VBLANK_DURATION, /* frames per second, vblank duration */
1, /* single CPU, no need for interleaving */
0,
/* video hardware */
320, 210, { 1, 320-1, 0, 192-1 },
0, /* no gfxdecodeinfo - bitmapped display */
sizeof(palette)/3,sizeof(colortable)/sizeof(unsigned short),
0,
VIDEO_TYPE_RASTER | VIDEO_SUPPORTS_DIRTY,
0,
generic_vh_start,
generic_vh_stop,
seawolf2_vh_screenrefresh,
/* sound hardware */
0,
0,
0,
0,
{
{
SOUND_ASTROCADE,
&astrocade_1chip_interface
}
}
};
struct GameDriver ebases_driver =
{
__FILE__,
0,
"ebases",
"Extra Bases",
"1980",
"Midway",
"Alex Judd (MAME driver)\nSteve Scavone (info and code)\nMike Coates (game support)\nFrank Palazzolo",
GAME_NOT_WORKING,
&ebases_machine_driver,
0,
ebases_rom,
0, 0,
0,
0, /* sound_prom */
ebases_input_ports,
0, palette, colortable,
ORIENTATION_DEFAULT,
0, 0
};
/***************************************************************************
Wizard of Wor memory map (preliminary)
0000-3fff ROM A/B/C/D but also "magic" RAM (which processes data and copies it to the video RAM)
4000-7fff SCREEN RAM (bitmap)
8000-afff ROM E/F/G
c000-cfff ROM X (Foreign language - not required)
d000-d3ff STATIC RAM
I/O ports:
IN:
08 intercept register (collision detector)
bit 0: intercept in pixel 3 in an OR or XOR write since last reset
bit 1: intercept in pixel 2 in an OR or XOR write since last reset
bit 2: intercept in pixel 1 in an OR or XOR write since last reset
bit 3: intercept in pixel 0 in an OR or XOR write since last reset
bit 4: intercept in pixel 3 in last OR or XOR write
bit 5: intercept in pixel 2 in last OR or XOR write
bit 6: intercept in pixel 1 in last OR or XOR write
bit 7: intercept in pixel 0 in last OR or XOR write
10 IN0
11 IN1
12 IN2
13 DSW
14 Video Retrace
15 ?
17 Speech Synthesizer (Output)
*
* IN0 (all bits are inverted)
* bit 7 : flip screen
* bit 6 : START 2
* bit 5 : START 1
* bit 4 : SLAM
* bit 3 : TEST
* bit 2 : COIN 3
* bit 1 : COIN 2
* bit 0 : COIN 1
*
*
* IN1 (all bits are inverted)
* bit 7 : ?
* bit 6 : ?
* bit 5 : FIRE player 1
* bit 4 : MOVE player 1
* bit 3 : RIGHT player 1
* bit 2 : LEFT player 1
* bit 1 : DOWN player 1
* bit 0 : UP player 1
*
*
* IN2 (all bits are inverted)
* bit 7 : ?
* bit 6 : ?
* bit 5 : FIRE player 2
* bit 4 : MOVE player 2
* bit 3 : RIGHT player 2
* bit 2 : LEFT player 2
* bit 1 : DOWN player 2
* bit 0 : UP player 2
*
*
* DSW (all bits are inverted)
* bit 7 : Attract mode sound 0 = Off 1 = On
* bit 6 : 1 = Coin play 0 = Free Play
* bit 5 : Bonus 0 = After fourth level 1 = After third level
* bit 4 : Number of lives 0 = 3/7 1 = 2/5
* bit 3 : language 1 = English 0 = Foreign
* bit 2 : \ right coin slot 00 = 1 coin 5 credits 01 = 1 coin 3 credits
* bit 1 : / 10 = 2 coins 1 credit 11 = 1 coin 1 credit
* bit 0 : left coin slot 0 = 2 coins 1 credit 1 = 1 coin 1 credit
*
OUT:
00-07 palette (00-03 = left part of screen; 04-07 right part)
09 position where to switch from the "left" to the "right" palette.
08 select video mode (0 = low res 160x102, 1 = high res 320x204)
0a screen height
0b color block transfer
0c magic RAM control
bit 7: ?
bit 6: flip
bit 5: draw in XOR mode
bit 4: draw in OR mode
bit 3: "expand" mode (convert 1bpp data to 2bpp)
bit 2: ?
bit 1:\ shift amount to be applied before copying
bit 0:/
0d set interrupt vector
10-18 sound
19 magic RAM expand mode color
78-7e pattern board (see vidhrdw.c for details)
***************************************************************************
Seawolf Specific Bits
IN
10 Controller Player 2
bit 0-5 = rotary controller
bit 7 = fire button
11 Controller Player 1
bit 0-5 = rotary controller
bit 6 = Language Select 1 (On = French, Off = language 2)
bit 7 = fire button
12 bit 0 = Coin
bit 1 = Start 1 Player
bit 2 = Start 2 Player
bit 3 = Language 2 (On = German, Off = English)
13 bit 0 = Coinage
bit 1 = \ Length of time (40, 50, 60 or 70 Seconds)
bit 2 = / for Game
bit 3 = ?
bit 4 = ?
bit 5 = ?
bit 6 = Colour / Mono
bit 7 = Test
***************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -