diff --git a/src/mame/drivers/mole.c b/src/mame/drivers/mole.c index 49057a0978d..125e697adbf 100644 --- a/src/mame/drivers/mole.c +++ b/src/mame/drivers/mole.c @@ -1,51 +1,55 @@ -// MOLE ATTACK YACHIYO 1982 -// known clones: "Holy Moly" -// -// emulated by Jason Nelson, Phil Stroffolino -// known issues: -// some dips not mapped -// protection isn't fully understood, but game seems to be -// ok. -// -// buttons are laid out as follows: -// 7 8 9 -// 4 5 6 -// 1 2 3 -// -// Working RAM notes: -// 0x2e0 number of credits -// 0x2F1 coin up trigger -// 0x2F2 round counter -// 0x2F3 flag value -// 0x2FD hammer aim for attract mode -// 0x2E1-E2 high score -// 0x2ED-EE score -// 0x301-309 presence and height of mole in each hole, from bottom left -// 0x30a -// 0x32E-336 if a hammer is above a mole. (Not the same as collision) -// 0x337 dip switch related -// 0x338 dip switch related -// 0x340 hammer control: manual=0; auto=1 -// 0x34C round point 10s. -// 0x34D which bonus round pattern to use for moles. -// 0x349 button pressed (0..8 / 0xff) -// 0x350 number of players -// 0x351 irq-related -// 0x361 -// 0x362 -// 0x363 -// 0x364 -// 0x366 mirrors tile bank -// 0x36B controls which player is playing. (1 == player 2); -// 0x3DC affects mole popmessage -// 0x3E5 round point/passing point control? -// 0x3E7 round point/passing point control? +/* MOLE ATTACK by Yachiyo Electronics Co.,LTD. 1982 + + Known Clones: + "Holey Moley", from tai (Thomas Automatics, Inc.) + + emulated by Jason Nelson, Phil Stroffolino + + Known Issues: + - some dips not mapped + - protection isn't fully understood, but game seems to be ok. + - cpu speeds unverified + + Buttons are laid out as follows: + 7 8 9 + 4 5 6 + 1 2 3 + + Working RAM notes: + 0x2e0 number of credits + 0x2F1 coin up trigger + 0x2F2 round counter + 0x2F3 flag value + 0x2FD hammer aim for attract mode + 0x2E1-E2 high score + 0x2ED-EE score + 0x301-309 presence and height of mole in each hole, from bottom left + 0x30a + 0x32E-336 if a hammer is above a mole. (Not the same as collision) + 0x337 dip switch related + 0x338 dip switch related + 0x340 hammer control: manual=0; auto=1 + 0x34C round point 10s. + 0x34D which bonus round pattern to use for moles. + 0x349 button pressed (0..8 / 0xff) + 0x350 number of players + 0x351 irq-related + 0x361 + 0x362 + 0x363 + 0x364 + 0x366 mirrors tile bank + 0x36B controls which player is playing. (1 == player 2); + 0x3DC affects mole popmessage + 0x3E5 round point/passing point control? + 0x3E7 round point/passing point control? +*/ + #include "driver.h" #include "cpu/m6502/m6502.h" #include "sound/ay8910.h" - WRITE8_HANDLER(mole_videoram_w); WRITE8_HANDLER(mole_tilebank_w); WRITE8_HANDLER(mole_flipscreen_w); @@ -57,7 +61,8 @@ VIDEO_UPDATE(mole); static READ8_HANDLER( mole_protection_r ) { - /* Following are all known examples of Mole Attack + + /* Following are all known examples of Mole Attack ** code reading from the protection circuitry: ** ** 5b0b: @@ -94,11 +99,12 @@ static READ8_HANDLER( mole_protection_r ) case 0xae: return 0x32; /* coinage */ } - /* The above are critical protection reads. + /* The above are critical protection reads. ** It isn't clear what effect (if any) the ** remaining reads have; for now we simply ** return 0x00 */ + return 0x00; } @@ -143,34 +149,34 @@ static INPUT_PORTS_START( mole ) PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_START("IN0") /* 0x8d40 */ - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON5 ) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON6 ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON7 ) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON8 ) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P1 Pad 1") PORT_CODE(KEYCODE_1_PAD) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P1 Pad 2") PORT_CODE(KEYCODE_2_PAD) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P1 Pad 3") PORT_CODE(KEYCODE_3_PAD) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P1 Pad 4") PORT_CODE(KEYCODE_4_PAD) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P1 Pad 5") PORT_CODE(KEYCODE_5_PAD) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P1 Pad 6") PORT_CODE(KEYCODE_6_PAD) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P1 Pad 7") PORT_CODE(KEYCODE_7_PAD) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P1 Pad 8") PORT_CODE(KEYCODE_8_PAD) PORT_START("IN1") /* 0x8d80 */ - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON9 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_COCKTAIL + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P1 Pad 9") PORT_CODE(KEYCODE_9_PAD) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Pad 1") PORT_CODE(KEYCODE_Q) PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Pad 2") PORT_CODE(KEYCODE_W) PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Pad 3") PORT_CODE(KEYCODE_E) PORT_COCKTAIL PORT_DIPNAME( 0x10, 0x00, DEF_STR( Cabinet ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Cocktail ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Cocktail ) ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START2 ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START1 ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_START("IN2") /* 0x8dc0 */ - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_COCKTAIL - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_COCKTAIL - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_COCKTAIL - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON9 ) PORT_COCKTAIL - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_COCKTAIL - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_COCKTAIL + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Pad 8") PORT_CODE(KEYCODE_X) PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Pad 7") PORT_CODE(KEYCODE_Z) PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Pad 4") PORT_CODE(KEYCODE_A) PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Pad 9") PORT_CODE(KEYCODE_C) PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Pad 6") PORT_CODE(KEYCODE_D) PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Pad 5") PORT_CODE(KEYCODE_S) PORT_COCKTAIL PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED ) INPUT_PORTS_END