From 5a19d33ee9afb4cc33db3ab61fc6074d739a6926 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Banaan=20Ananas?= Date: Thu, 25 Aug 2011 14:47:46 +0000 Subject: made pbillian plunger more authentic: just hold CTRL for an amount of time and let go --- src/mame/drivers/superqix.c | 91 ++++++++++++++++++++------------------------ src/mame/includes/superqix.h | 2 - src/mame/video/superqix.c | 23 ----------- 3 files changed, 41 insertions(+), 75 deletions(-) (limited to 'src/mame') diff --git a/src/mame/drivers/superqix.c b/src/mame/drivers/superqix.c index 202e24259d2..cb04ef02c1c 100644 --- a/src/mame/drivers/superqix.c +++ b/src/mame/drivers/superqix.c @@ -33,11 +33,6 @@ Notes: - pullout plunger for shot power (there's no on-screen power indicator in the game) - dial for aiming - button (fire M powerup, high score initials) - They are mapped a bit differently in MAME. BUTTON1 simlates pulling out the - plunger and releasing it. The plunger strength is controlled by an analog input - (by default mapped to up/down arrows) and shown on screen. The dial is mapped - as expected. The button is mapped on BUTTON2. BUTTON3 is also recognized by the - game when entering initials, but was probably not present in the cabinet. TODO: @@ -180,14 +175,14 @@ The MCU acts this way: static READ8_DEVICE_HANDLER( in4_mcu_r ) { superqix_state *state = device->machine().driver_data(); -// logerror("%04x: in4_mcu_r\n",cpu_get_pc(&space->device())); +// logerror("%04x: in4_mcu_r\n",cpu_get_pc(&space->device())); return input_port_read(device->machine(), "P2") | (state->m_from_mcu_pending << 6) | (state->m_from_z80_pending << 7); } static READ8_DEVICE_HANDLER( sqix_from_mcu_r ) { superqix_state *state = device->machine().driver_data(); -// logerror("%04x: read mcu answer (%02x)\n",cpu_get_pc(&space->device()),state->m_from_mcu); +// logerror("%04x: read mcu answer (%02x)\n",cpu_get_pc(&space->device()),state->m_from_mcu); return state->m_from_mcu; } @@ -196,7 +191,7 @@ static TIMER_CALLBACK( mcu_acknowledge_callback ) superqix_state *state = machine.driver_data(); state->m_from_z80_pending = 1; state->m_from_z80 = state->m_portb; -// logerror("Z80->MCU %02x\n",state->m_from_z80); +// logerror("Z80->MCU %02x\n",state->m_from_z80); } static READ8_HANDLER( mcu_acknowledge_r ) @@ -208,7 +203,7 @@ static READ8_HANDLER( mcu_acknowledge_r ) static WRITE8_DEVICE_HANDLER( sqix_z80_mcu_w ) { superqix_state *state = device->machine().driver_data(); -// logerror("%04x: sqix_z80_mcu_w %02x\n",cpu_get_pc(&space->device()),data); +// logerror("%04x: sqix_z80_mcu_w %02x\n",cpu_get_pc(&space->device()),data); state->m_portb = data; } @@ -245,7 +240,7 @@ static WRITE8_HANDLER( bootleg_mcu_p1_w ) case 7: if ((data & 1) == 0) { -// logerror("%04x: MCU -> Z80 %02x\n",cpu_get_pc(&space->device()),state->m_port3); +// logerror("%04x: MCU -> Z80 %02x\n",cpu_get_pc(&space->device()),state->m_port3); state->m_from_mcu = state->m_port3_latch; state->m_from_mcu_pending = 1; state->m_from_z80_pending = 0; // ???? @@ -273,7 +268,7 @@ static READ8_HANDLER( bootleg_mcu_p3_r ) } else if ((state->m_port1 & 0x40) == 0) { -// logerror("%04x: read Z80 command %02x\n",cpu_get_pc(&space->device()),state->m_from_z80); +// logerror("%04x: read Z80 command %02x\n",cpu_get_pc(&space->device()),state->m_from_z80); state->m_from_z80_pending = 0; return state->m_from_z80; } @@ -312,7 +307,7 @@ static WRITE8_HANDLER( sqixu_mcu_p2_w ) // bit 7 = clock latch from port 3 to Z80 if ((state->m_port2 & 0x80) != 0 && (data & 0x80) == 0) { -// logerror("%04x: MCU -> Z80 %02x\n",cpu_get_pc(&space->device()),state->m_port3); +// logerror("%04x: MCU -> Z80 %02x\n",cpu_get_pc(&space->device()),state->m_port3); state->m_from_mcu = state->m_port3; state->m_from_mcu_pending = 1; state->m_from_z80_pending = 0; // ???? @@ -324,7 +319,7 @@ static WRITE8_HANDLER( sqixu_mcu_p2_w ) static READ8_HANDLER( sqixu_mcu_p3_r ) { superqix_state *state = space->machine().driver_data(); -// logerror("%04x: read Z80 command %02x\n",cpu_get_pc(&space->device()),state->m_from_z80); +// logerror("%04x: read Z80 command %02x\n",cpu_get_pc(&space->device()),state->m_from_z80); state->m_from_z80_pending = 0; return state->m_from_z80; } @@ -383,7 +378,7 @@ static int read_dial(running_machine &machine, int player) static TIMER_CALLBACK( delayed_z80_mcu_w ) { superqix_state *state = machine.driver_data(); -logerror("Z80 sends command %02x\n",param); +// logerror("Z80 sends command %02x\n",param); state->m_from_z80 = param; state->m_from_mcu_pending = 0; cputag_set_input_line(machine, "mcu", 0, HOLD_LINE); @@ -393,7 +388,7 @@ logerror("Z80 sends command %02x\n",param); static TIMER_CALLBACK( delayed_mcu_z80_w ) { superqix_state *state = machine.driver_data(); -logerror("68705 sends answer %02x\n",param); +// logerror("68705 sends answer %02x\n",param); state->m_from_mcu = param; state->m_from_mcu_pending = 1; } @@ -420,7 +415,7 @@ logerror("68705 sends answer %02x\n",param); static READ8_HANDLER( hotsmash_68705_portA_r ) { superqix_state *state = space->machine().driver_data(); -//logerror("%04x: 68705 reads port A = %02x\n",cpu_get_pc(&space->device()),state->m_portA_in); +// logerror("%04x: 68705 reads port A = %02x\n",cpu_get_pc(&space->device()),state->m_portA_in); return state->m_portA_in; } @@ -458,7 +453,7 @@ static WRITE8_HANDLER( hotsmash_68705_portC_w ) case 0x3: // command from Z80 state->m_portA_in = state->m_from_z80; -logerror("%04x: z80 reads command %02x\n",cpu_get_pc(&space->device()),state->m_from_z80); +// logerror("%04x: z80 reads command %02x\n",cpu_get_pc(&space->device()),state->m_from_z80); break; case 0x4: @@ -487,7 +482,7 @@ static WRITE8_HANDLER( hotsmash_z80_mcu_w ) static READ8_HANDLER(hotsmash_from_mcu_r) { superqix_state *state = space->machine().driver_data(); -logerror("%04x: z80 reads answer %02x\n",cpu_get_pc(&space->device()),state->m_from_mcu); +// logerror("%04x: z80 reads answer %02x\n",cpu_get_pc(&space->device()),state->m_from_mcu); state->m_from_mcu_pending = 0; return state->m_from_mcu; } @@ -495,7 +490,7 @@ logerror("%04x: z80 reads answer %02x\n",cpu_get_pc(&space->device()),state->m_f static READ8_DEVICE_HANDLER(hotsmash_ay_port_a_r) { superqix_state *state = device->machine().driver_data(); -//logerror("%04x: ay_port_a_r and mcu_pending is %d\n",cpu_get_pc(&space->device()),state->m_from_mcu_pending); +// logerror("%04x: ay_port_a_r and mcu_pending is %d\n",cpu_get_pc(&space->device()),state->m_from_mcu_pending); return input_port_read(device->machine(), "SYSTEM") | ((state->m_from_mcu_pending^1) << 7); } @@ -517,22 +512,30 @@ static READ8_HANDLER(pbillian_from_mcu_r) switch (state->m_from_z80) { - case 0x01: return input_port_read(space->machine(), state->m_curr_player ? "PADDLE2" : "PADDLE1"); + case 0x01: + { + UINT8 p = input_port_read(space->machine(), state->m_curr_player ? "PLUNGER2" : "PLUNGER1") & 0xbf; + if ((p & 0x3f) == 0) p |= 0x40; + return p; + } + case 0x02: return input_port_read(space->machine(), state->m_curr_player ? "DIAL2" : "DIAL1"); + case 0x04: return input_port_read(space->machine(), "DSW1"); case 0x08: return input_port_read(space->machine(), "DSW2"); + case 0x80: state->m_curr_player = 0; return 0; case 0x81: state->m_curr_player = 1; return 0; } - logerror("408[%x] r at %x\n",state->m_from_z80,cpu_get_pc(&space->device())); +// logerror("408[%x] r at %x\n",state->m_from_z80,cpu_get_pc(&space->device())); return 0; } static READ8_DEVICE_HANDLER(pbillian_ay_port_a_r) { -// logerror("%04x: ay_port_a_r\n",cpu_get_pc(&space->device())); - /* bits 76------ MCU status bits */ +// logerror("%04x: ay_port_a_r\n",cpu_get_pc(&space->device())); + /* bits 76------ MCU status bits */ return (device->machine().rand() & 0xc0) | input_port_read(device->machine(), "BUTTONS"); } @@ -732,19 +735,19 @@ static INPUT_PORTS_START( pbillian ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) // mcu status (pending mcu->z80) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) // mcu status (pending z80->mcu) - PORT_START("PADDLE1") // pullout plunger - PORT_BIT( 0x3f, 0x00, IPT_PADDLE_V ) PORT_MINMAX(0,0x3f) PORT_SENSITIVITY(30) PORT_KEYDELTA(3) PORT_CENTERDELTA(0) PORT_REVERSE - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_START("PLUNGER1") // plunger mechanism for shot (BUTTON1 and PEDAL mapped to the same key in MAME) + PORT_BIT( 0x3f, 0x00, IPT_PEDAL ) PORT_MINMAX(0x00, 0x3f) PORT_SENSITIVITY(100) PORT_KEYDELTA(1) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_START("DIAL1") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(20) PORT_KEYDELTA(10) + PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(20) PORT_KEYDELTA(8) - PORT_START("PADDLE2") - PORT_BIT( 0x3f, 0x00, IPT_PADDLE_V ) PORT_MINMAX(0,0x3f) PORT_SENSITIVITY(30) PORT_KEYDELTA(3) PORT_CENTERDELTA(0) PORT_REVERSE PORT_COCKTAIL - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_START("PLUNGER2") + PORT_BIT( 0x3f, 0x00, IPT_PEDAL ) PORT_MINMAX(0x00, 0x3f) PORT_SENSITIVITY(100) PORT_KEYDELTA(1) PORT_COCKTAIL + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_START("DIAL2") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(20) PORT_KEYDELTA(10) PORT_COCKTAIL + PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(20) PORT_KEYDELTA(8) PORT_COCKTAIL INPUT_PORTS_END static INPUT_PORTS_START( hotsmash ) @@ -955,7 +958,7 @@ static const ay8910_interface pbillian_ay8910_interface = { AY8910_LEGACY_OUTPUT, AY8910_DEFAULT_LOADS, - DEVCB_HANDLER(pbillian_ay_port_a_r), /* port Aread */ + DEVCB_HANDLER(pbillian_ay_port_a_r), /* port Aread */ DEVCB_INPUT_PORT("SYSTEM"), DEVCB_NULL, DEVCB_NULL @@ -965,7 +968,7 @@ static const ay8910_interface hotsmash_ay8910_interface = { AY8910_LEGACY_OUTPUT, AY8910_DEFAULT_LOADS, - DEVCB_HANDLER(hotsmash_ay_port_a_r), /* port Aread */ + DEVCB_HANDLER(hotsmash_ay_port_a_r), /* port Aread */ DEVCB_INPUT_PORT("SYSTEM"), DEVCB_NULL, DEVCB_NULL @@ -987,8 +990,8 @@ static const ay8910_interface sqix_ay8910_interface_2 = AY8910_DEFAULT_LOADS, DEVCB_INPUT_PORT("DSW2"), DEVCB_HANDLER(sqix_from_mcu_r), /* port Bread */ - DEVCB_NULL, /* port Awrite */ - DEVCB_HANDLER(sqix_z80_mcu_w) /* port Bwrite */ + DEVCB_NULL, /* port Awrite */ + DEVCB_HANDLER(sqix_z80_mcu_w) /* port Bwrite */ }; static const ay8910_interface bootleg_ay8910_interface_1 = @@ -1006,7 +1009,7 @@ static const ay8910_interface bootleg_ay8910_interface_2 = AY8910_LEGACY_OUTPUT, AY8910_DEFAULT_LOADS, DEVCB_INPUT_PORT("DSW2"), - DEVCB_HANDLER(bootleg_in0_r), /* port Bread */ + DEVCB_HANDLER(bootleg_in0_r), /* port Bread */ DEVCB_NULL, DEVCB_NULL }; @@ -1349,18 +1352,6 @@ ROM_END -static DRIVER_INIT( pbillian ) -{ - superqix_state *state = machine.driver_data(); - state->m_pbillian_show_power = 1; -} - -static DRIVER_INIT( hotsmash ) -{ - superqix_state *state = machine.driver_data(); - state->m_pbillian_show_power = 0; -} - static DRIVER_INIT( sqix ) { superqix_state *state = machine.driver_data(); @@ -1437,8 +1428,8 @@ static DRIVER_INIT( perestro ) -GAME( 1986, pbillian, 0, pbillian, pbillian, pbillian, ROT0, "Kaneko / Taito", "Prebillian", GAME_SUPPORTS_SAVE ) -GAME( 1987, hotsmash, 0, hotsmash, hotsmash, hotsmash, ROT90, "Kaneko / Taito", "Vs. Hot Smash", GAME_SUPPORTS_SAVE ) +GAME( 1986, pbillian, 0, pbillian, pbillian, 0, ROT0, "Kaneko / Taito", "Prebillian", GAME_SUPPORTS_SAVE ) +GAME( 1987, hotsmash, 0, hotsmash, hotsmash, 0, ROT90, "Kaneko / Taito", "Vs. Hot Smash", GAME_SUPPORTS_SAVE ) GAME( 1987, sqix, 0, sqix, superqix, sqix, ROT90, "Kaneko / Taito", "Super Qix (World, Rev 2)", GAME_SUPPORTS_SAVE ) GAME( 1987, sqixr1, sqix, sqix, superqix, sqix, ROT90, "Kaneko / Taito", "Super Qix (World, Rev 1)", GAME_SUPPORTS_SAVE ) GAME( 1987, sqixu, sqix, sqixu, superqix, 0, ROT90, "Kaneko / Taito (Romstar License)", "Super Qix (US)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/superqix.h b/src/mame/includes/superqix.h index 36227370766..43b2e3c3f15 100644 --- a/src/mame/includes/superqix.h +++ b/src/mame/includes/superqix.h @@ -24,12 +24,10 @@ public: UINT8 *m_videoram; UINT8 *m_bitmapram; UINT8 *m_bitmapram2; - int m_pbillian_show_power; int m_gfxbank; bitmap_t *m_fg_bitmap[2]; int m_show_bitmap; tilemap_t *m_bg_tilemap; - int m_last_power[2]; UINT8 *m_spriteram; size_t m_spriteram_size; }; diff --git a/src/mame/video/superqix.c b/src/mame/video/superqix.c index 6711c23c0a3..1b297a3b3d1 100644 --- a/src/mame/video/superqix.c +++ b/src/mame/video/superqix.c @@ -53,11 +53,6 @@ VIDEO_START( pbillian ) { superqix_state *state = machine.driver_data(); state->m_bg_tilemap = tilemap_create(machine, pb_get_bg_tile_info, tilemap_scan_rows, 8, 8,32,32); - - /* Need to do save state here */ - state->save_item(NAME(state->m_last_power[0])); - state->save_item(NAME(state->m_last_power[1])); - state->save_item(NAME(state->m_pbillian_show_power)); } VIDEO_START( superqix ) @@ -235,24 +230,6 @@ SCREEN_UPDATE( pbillian ) tilemap_draw(bitmap, cliprect, state->m_bg_tilemap, 0, 0); pbillian_draw_sprites(screen->machine(), bitmap,cliprect); - if (state->m_pbillian_show_power) - { - int curr_power; - - curr_power = ((input_port_read(screen->machine(), "PADDLE1") & 0x3f) * 100) / 0x3f; - if (state->m_last_power[0] != curr_power) - { - popmessage ("Power %d%%", curr_power); - state->m_last_power[0] = curr_power; - } - - curr_power = ((input_port_read(screen->machine(), "PADDLE2") & 0x3f) * 100) / 0x3f; - if (state->m_last_power[1] != curr_power) - { - popmessage ("Power %d%%", curr_power); - state->m_last_power[1] = curr_power; - } - } return 0; } -- cgit v1.2.3