📄 wow.c
字号:
PORT_START /* IN1 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER2 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER2 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON2 | IPF_PLAYER2 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START /* IN2 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON2 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* speech status */
PORT_START /* Dip Switch */
PORT_DIPNAME( 0x01, 0x01, "Coin A", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x01, "1 Coin/1 Credit" )
PORT_DIPNAME( 0x06, 0x06, "Coin B", IP_KEY_NONE )
PORT_DIPSETTING( 0x04, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x06, "1 Coin/1 Credit" )
PORT_DIPSETTING( 0x02, "1 Coin/3 Credits" )
PORT_DIPSETTING( 0x00, "1 Coin/5 Credits" )
PORT_DIPNAME( 0x08, 0x08, "Language", IP_KEY_NONE )
PORT_DIPSETTING( 0x08, "English" )
PORT_DIPSETTING( 0x00, "Foreign (NEED ROM)" )
PORT_DIPNAME( 0x10, 0x00, "Lives", IP_KEY_NONE )
PORT_DIPSETTING( 0x10, "2 / 5" )
PORT_DIPSETTING( 0x00, "3 / 7" )
PORT_DIPNAME( 0x20, 0x20, "Bonus Life", IP_KEY_NONE )
PORT_DIPSETTING( 0x20, "3rd Level" )
PORT_DIPSETTING( 0x00, "4th Level" )
PORT_DIPNAME( 0x40, 0x40, "Free Play", IP_KEY_NONE )
PORT_DIPSETTING( 0x40, "Off" )
PORT_DIPSETTING( 0x00, "On" )
PORT_DIPNAME( 0x80, 0x80, "Demo Sounds", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x80, "On" )
INPUT_PORTS_END
static struct Samplesinterface wow_samples_interface =
{
8 /* 8 channels */
};
static struct astrocade_interface astrocade_2chip_interface =
{
2, /* Number of chips */
1789773, /* Clock speed */
255 /* Volume */
};
static struct astrocade_interface astrocade_1chip_interface =
{
1, /* Number of chips */
1789773, /* Clock speed */
255 /* Volume */
};
static struct MachineDriver wow_machine_driver =
{
/* basic machine hardware */
{
{
CPU_Z80,
1789773, /* 1.789 Mhz */
0,
readmem,writemem,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, 204, { 0, 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,
wow_vh_start,
generic_vh_stop,
wow_vh_screenrefresh_stars,
/* sound hardware */
0, /* Initialise audio hardware */
wow_sh_start, /* Start audio */
wow_sh_stop, /* Stop audio */
wow_sh_update, /* Update audio */
{
{
SOUND_SAMPLES,
&wow_samples_interface
},
{
SOUND_ASTROCADE,
&astrocade_2chip_interface
}
}
};
static int wow_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[0xD004],"\x00\x00",2) == 0)
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[0xD004],20);
/* stored twice in memory??? */
memcpy(&RAM[0xD304],&RAM[0xD004],20);
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void wow_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[0xD004],20);
osd_fclose(f);
}
}
struct GameDriver wow_driver =
{
__FILE__,
0,
"wow",
"Wizard of Wor",
"1980",
"Midway",
"Nicola Salmoria (MAME driver)\nSteve Scavone (info and code)\nJim Hernandez (hardware info)\nMike Coates (additional code)\nKevin Estep (samples)\nAlex Judd (sound programming)\nFrank Palazzolo",
0,
&wow_machine_driver,
0,
wow_rom,
0, 0,
wow_sample_names,
0, /* sound_prom */
wow_input_ports,
0, palette, colortable,
ORIENTATION_DEFAULT,
wow_hiload, wow_hisave,
};
/****************************************************************************
* Robby Roto
****************************************************************************/
ROM_START( robby_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "rotox1.bin", 0x0000, 0x1000, 0xa431b85a )
ROM_LOAD( "rotox2.bin", 0x1000, 0x1000, 0x33cdda83 )
ROM_LOAD( "rotox3.bin", 0x2000, 0x1000, 0xdbf97491 )
ROM_LOAD( "rotox4.bin", 0x3000, 0x1000, 0xa3b90ac8 )
ROM_LOAD( "rotox5.bin", 0x8000, 0x1000, 0x46ae8a94 )
ROM_LOAD( "rotox6.bin", 0x9000, 0x1000, 0x7916b730 )
ROM_LOAD( "rotox7.bin", 0xa000, 0x1000, 0x276dc4a5 )
ROM_LOAD( "rotox8.bin", 0xb000, 0x1000, 0x1ef13457 )
ROM_LOAD( "rotox9.bin", 0xc000, 0x1000, 0x370352bf )
ROM_LOAD( "rotox10.bin", 0xd000, 0x1000, 0xe762cbda )
ROM_END
static struct MemoryReadAddress robby_readmem[] =
{
{ 0xe000, 0xffff, MRA_RAM },
{ 0x4000, 0x7fff, MRA_RAM },
{ 0x0000, 0x3fff, MRA_ROM },
{ 0x8000, 0xdfff, MRA_ROM },
{ -1 } /* end of table */
};
static struct MemoryWriteAddress robby_writemem[] =
{
{ 0xe000, 0xffff, MWA_RAM },
{ 0x4000, 0x7fff, wow_videoram_w, &wow_videoram, &videoram_size },
{ 0x0000, 0x3fff, wow_magicram_w },
{ 0x8000, 0xdfff, MWA_ROM },
{ -1 } /* end of table */
};
INPUT_PORTS_START( robby_input_ports )
PORT_START /* IN0 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BITX( 0x08, 0x08, IPT_DIPSWITCH_NAME | IPF_TOGGLE, "Service Mode", OSD_KEY_F2, IP_JOY_NONE, 0 )
PORT_DIPSETTING( 0x08, "Off" )
PORT_DIPSETTING( 0x00, "On" )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_TILT )
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 /* IN1 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_4WAY | IPF_COCKTAIL )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_4WAY | IPF_COCKTAIL )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_4WAY | IPF_COCKTAIL )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_COCKTAIL )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START /* IN2 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_4WAY )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_4WAY )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_4WAY )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START /* Dip Switch */
PORT_DIPNAME( 0x01, 0x00, "Unknown 1", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x01, "On" )
PORT_DIPNAME( 0x02, 0x00, "Unknown 2", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x02, "On" )
PORT_DIPNAME( 0x04, 0x04, "Free Play", IP_KEY_NONE )
PORT_DIPSETTING( 0x04, "Off" )
PORT_DIPSETTING( 0x00, "On" )
PORT_DIPNAME( 0x08, 0x08, "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" )
INPUT_PORTS_END
static struct MachineDriver robby_machine_driver =
{
/* basic machine hardware */
{
{
CPU_Z80,
1789773, /* 1.789 Mhz */
0,
robby_readmem,robby_writemem,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, 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,
wow_vh_screenrefresh,
/* sound hardware */
0,
0,
0,
0,
{
{
SOUND_ASTROCADE,
&astrocade_2chip_interface
}
}
};
static int robby_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[0xE13B],"\x10\x27",2) == 0) &&
(memcmp(&RAM[0xE1E4],"COCK",4) == 0))
{
void *f;
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
{
osd_fread(f,&RAM[0xE13B],0xAD);
/* appears twice in memory??? */
memcpy(&RAM[0xE33B],&RAM[0xE13B],0xAD);
osd_fclose(f);
}
return 1;
}
else return 0; /* we can't load the hi scores yet */
}
static void robby_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[0xE13B],0xAD);
osd_fclose(f);
}
}
struct GameDriver robby_driver =
{
__FILE__,
0,
"robby",
"Robby Roto",
"1981",
"Bally Midway",
"Nicola Salmoria (MAME driver)\nSteve Scavone (info and code)\nMike Coates (additional code)\nFrank Palazzolo",
0,
&robby_machine_driver,
0,
robby_rom,
0, 0,
0,
0, /* sound_prom */
robby_input_ports,
0, palette, colortable,
ORIENTATION_DEFAULT,
robby_hiload, robby_hisave
};
/****************************************************************************
* Gorf
****************************************************************************/
ROM_START( gorf_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "gorf-a.bin", 0x0000, 0x1000, 0x5b348321 )
ROM_LOAD( "gorf-b.bin", 0x1000, 0x1000, 0x62d6de77 )
ROM_LOAD( "gorf-c.bin", 0x2000, 0x1000, 0x1d3bc9c9 )
ROM_LOAD( "gorf-d.bin", 0x3000, 0x1000, 0x70046e56 )
ROM_LOAD( "gorf-e.bin", 0x8000, 0x1000, 0x2d456eb5 )
ROM_LOAD( "gorf-f.bin", 0x9000, 0x1000, 0xf7e4e155 )
ROM_LOAD( "gorf-g.bin", 0xa000, 0x1000, 0x4e2bd9b9 )
ROM_LOAD( "gorf-h.bin", 0xb000, 0x1000, 0xfe7b863d )
ROM_END
ROM_START( gorfpgm1_rom )
ROM_REGION(0x10000) /* 64k for code */
ROM_LOAD( "873a", 0x0000, 0x1000, 0x97cb4a6a )
ROM_LOAD( "873b", 0x1000, 0x1000, 0x257236f8 )
ROM_LOAD( "873c", 0x2000, 0x1000, 0x16b0638b )
ROM_LOAD( "873d", 0x3000, 0x1000, 0xb5e821dc )
ROM_LOAD( "873e", 0x8000, 0x1000, 0x8e82804b )
ROM_LOAD( "873f", 0x9000, 0x1000, 0x715fb4d9 )
ROM_LOAD( "873g", 0xa000, 0x1000, 0x8a066456 )
ROM_LOAD( "873h", 0xb000, 0x1000, 0x56d40c7c )
ROM_END
/* Here's the same words in English : Missing bite, dust, conquer, another, galaxy, try, again, devour, attack, power */
static const char *gorf_sample_names[] =
{
"*gorf","a.sam","a.sam","again.sam","am.sam","am.sam","and.sam","anhilatn.sam",
"another.sam","another.sam","are.sam","are.sam",
"avenger.sam","bad.sam","bad.sam","be.sam",
"been.sam","but.sam","button.sam","cadet.sam",
"cannot.sam","captain.sam","chronicl.sam","coin.sam","coins.sam","colonel.sam",
"consciou.sam","defender.sam","destroy.sam","destroyd.sam",
"doom.sam","draws.sam","empire.sam","end.sam",
"enemy.sam","escape.sam","flagship.sam","for.sam","galactic.sam",
"general.sam","gorf.sam","gorphian.sam","gorphian.sam","gorphins.sam",
"hahahahu.sam","hahaher.sam","harder.sam","have.sam",
"hitting.sam","i.sam","i.sam","impossib.sam","in.sam","insert.sam",
"is.sam","live.sam","long.sam","meet.sam","move.sam",
"my.sam","my.sam",
"near.sam","next.sam","nice.sam","no.sam",
"now.sam","pause.sam","player.sam","prepare.sam","prisonrs.sam",
"promoted.sam","push.sam","robot.sam","robots.sam","robots.sam",
"seek.sam","ship.sam","shot.sam","some.sam","space.sam","spause.sam",
"survival.sam","take.sam","the.sam","the.sam","the.sam","time.sam",
"to.sam","to.sam","unbeatab.sam",
"warrior.sam","warriors.sam","will.sam",
"you.sam","you.sam","you.sam","you.sam","your.sam","your.sam","yourself.sam",
"s.sam","for.sam","for.sam","will.sam","Gorph.sam",
"coin", "attack.sam","bite.sam","conquer.sam","devour.sam","dust.sam",
"galaxy.sam","got.sam","power.sam","try.sam","supreme.sam","all.sam",
"hail.sam","emperor.sam",
0
} ;
static struct IOReadPort Gorf_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, gorf_port_2_r },
{ 0x13, 0x13, input_port_3_r },
{ 0x15, 0x16, Gorf_IO_r }, /* Actually a Write! */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -