diff --git a/src/mame/drivers/micro3d.c b/src/mame/drivers/micro3d.c index d6fc50f196b..f2ea9efcee5 100644 --- a/src/mame/drivers/micro3d.c +++ b/src/mame/drivers/micro3d.c @@ -6,7 +6,7 @@ Games supported: * F-15 Strike Eagle [2 sets] - * B.O.T.S.S. - Battle of the Solar System + * B.O.T.S.S. - Battle of the Solar System [2 sets] * Tank Battle (prototype) TODO: @@ -14,7 +14,10 @@ * DS1267 Volume control Known issues: + * Games are running too smoothly! * F-15 controls need tweaking + * botssa will hit a divide-by-zero error if the throttle is + not calibrated first in service mode. ****************************************************************************/ @@ -123,6 +126,33 @@ static INPUT_PORTS_START( botss ) PORT_BIT( 0xccf5, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END +static INPUT_PORTS_START( botssa ) + PORT_INCLUDE( micro3d ) + + PORT_MODIFY("INPUTS_A_B") + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(botssa_hwchk_r, NULL) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Shield") + PORT_SERVICE( 0x0400, IP_ACTIVE_LOW ) + PORT_BIT( 0x7800, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("INPUTS_C_D") + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Trigger") + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Blaster") + PORT_BIT( 0xccff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("JOYSTICK_X") + PORT_BIT( 0xfff, 0x000, IPT_AD_STICK_X ) PORT_MINMAX(0xc1, 0xc0) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) PORT_REVERSE + + PORT_START("JOYSTICK_Y") + PORT_BIT(0xfff, 0x000, IPT_AD_STICK_Y ) PORT_MINMAX(0xc1, 0x0c0) PORT_SENSITIVITY(25) PORT_KEYDELTA(200) + + PORT_START("THROTTLE") + PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Z ) PORT_MINMAX(0x01,0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(25) PORT_CENTERDELTA(0) PORT_NAME("Throttle") +INPUT_PORTS_END + static INPUT_PORTS_START( tankbatl ) PORT_INCLUDE( micro3d ) @@ -504,6 +534,59 @@ ROM_START( botss ) ROM_LOAD( "110-00013-001.u17", 0x000000, 0x40000, CRC(015a0b17) SHA1(f229c9aa59f0e6b25b818f9513997a8685e33982) ) ROM_END +ROM_START( botssa ) + /* Host PCB (MPG DW-00011C-0011-01) */ + ROM_REGION( 0x180000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "110-00153-100.u67", 0x000001, 0x20000, CRC(338aa9c3) SHA1(3d10329a5df80ab1761fd3953eb3872a72f26bef) ) + ROM_LOAD16_BYTE( "110-00153-101.u91", 0x000000, 0x20000, CRC(3278279e) SHA1(570935988c776283cdcd5aa13d71a75f0a466099) ) + ROM_LOAD16_BYTE( "110-00153-102.u68", 0x040001, 0x20000, CRC(258d2687) SHA1(5b765d14a0a8dc4ef58453bbb7780068c168d268) ) + ROM_LOAD16_BYTE( "110-00153-103.u92", 0x040000, 0x20000, CRC(1dde7ffa) SHA1(5363af00c8c896eccfad38ace5dfeb3bf96a73a1) ) + ROM_LOAD16_BYTE( "110-00013-004.u69", 0x080001, 0x20000, CRC(72a607ca) SHA1(1afc85380be12c429808c48f1502736a4c8b98e5) ) + ROM_LOAD16_BYTE( "110-00013-005.u93", 0x080000, 0x20000, CRC(f37680ae) SHA1(51f1ee805b7d1b2b078c612c572e12846de623b9) ) + ROM_LOAD16_BYTE( "110-00013-006.u70", 0x0c0001, 0x20000, CRC(57a1c728) SHA1(2bdc831be739ada0f4f4adec7974da453878db0e) ) + ROM_LOAD16_BYTE( "110-00013-007.u94", 0x0c0000, 0x20000, CRC(4c9e16af) SHA1(1f8acc9bb85fe1bf459b4358b9bf9cf9847e6a36) ) + ROM_LOAD16_BYTE( "110-00013-008.u71", 0x100001, 0x20000, CRC(cfc0333e) SHA1(9f290769129a61189870faef45c3f061eb7b5c07) ) + ROM_LOAD16_BYTE( "110-00013-009.u95", 0x100000, 0x20000, CRC(6c595d1e) SHA1(89fdc30166ba1e9706798547195bdf6875a02e96) ) + ROM_FILL( 0x140000, 0x40000, 0xff ) + + /* Dr Math PCB (MPG 010-00002-001) */ + ROM_REGION32_BE( 0x100000, "drmath", 0 ) + ROMX_LOAD( "110-00013-122.u134", 0x000000, 0x08000, CRC(bf60c487) SHA1(5ce80e89d9a24b627b0e97bf36a4e71c2eff4324), ROM_SKIP(7) ) + ROMX_LOAD( "110-00013-125.u126", 0x000001, 0x08000, CRC(b0dccf4a) SHA1(e8bfd622c006985b724cdbd3ad14c33e9ed27c6c), ROM_SKIP(7) ) + ROMX_LOAD( "110-00013-123.u114", 0x000002, 0x08000, CRC(04ba6ed1) SHA1(012be71c6b955beda2bd0ff376dcaab51b226723), ROM_SKIP(7) ) + ROMX_LOAD( "110-00013-224.u107", 0x000003, 0x08000, CRC(220db5d3) SHA1(3bfbe0eb97282c4ce449fd44e8e141de74f08eb0), ROM_SKIP(7) ) + ROMX_LOAD( "110-00013-118.u135", 0x000004, 0x08000, CRC(2903e682) SHA1(027ed6524e9d4490632f10aeb22150c2fbc4eec2), ROM_SKIP(7) ) + ROMX_LOAD( "110-00013-121.u127", 0x000005, 0x08000, CRC(198a636b) SHA1(356b8948aafb98cb5e6ee7b5ad6ea9e5998265e5), ROM_SKIP(7) ) + ROMX_LOAD( "110-00013-219.u115", 0x000006, 0x08000, CRC(9c9dbac1) SHA1(4c66971884190598e128684ece2e15a1c80b94ed), ROM_SKIP(7) ) + ROMX_LOAD( "110-00013-120.u108", 0x000007, 0x08000, CRC(dafa173a) SHA1(a19980b92a5e74ebe395be36313701fdb527a46a), ROM_SKIP(7) ) + + ROM_REGION16_BE( 0x80000, "vertex", 0 ) + ROM_LOAD16_BYTE( "110-00013-014.u153", 0x00001, 0x20000, CRC(0eee0557) SHA1(8abe52cad31e59cf814fd9f64f4e42ddb4aa8c93) ) + ROM_LOAD16_BYTE( "110-00013-015.u154", 0x00000, 0x20000, CRC(68564122) SHA1(410d2db74e574774b2eadd7fdf891feef5d8a93f) ) + ROM_LOAD16_BYTE( "110-00013-016.u167", 0x40001, 0x20000, CRC(60c6cb26) SHA1(0e2bf65793715e12d8fd7f87fd3336a9d00ee7e6) ) + ROM_LOAD16_BYTE( "110-00013-017.u160", 0x40000, 0x20000, CRC(d8b89379) SHA1(aa08e111c1505a4ad55b14659f8e21fd39cfcb16) ) + + ROM_REGION16_LE( 0x40000, "tms34010", 0 ) + ROM_LOAD16_BYTE( "110-00023-201.u101", 0x000000, 0x20000, CRC(7dc05f7d) SHA1(4d202b229cf4690d92491311e9ff14034b19c35c) ) + ROM_LOAD16_BYTE( "110-00023-204.u97", 0x000001, 0x20000, CRC(925fd08a) SHA1(fb06413debbffcd63b018f374f25b0d8e419c739) ) + + /* Video Graphics PCB (MPG DW-010-00002-002) */ + ROM_REGION16_LE( 0xc0000, "tms_gfx", 0 ) + ROM_LOAD16_BYTE( "110-00023-205.u124", 0x000000, 0x20000, CRC(5482e0c4) SHA1(492afac1862f2899cd734d1e57ca978ed6a906d5) ) + ROM_LOAD16_BYTE( "110-00023-206.u121", 0x000001, 0x20000, CRC(a55e5d19) SHA1(86fbcb425103ae9fff381357339af349848fc3f2) ) + ROM_LOAD16_BYTE( "110-00023-207.u130", 0x040000, 0x20000, CRC(0d8cf60f) SHA1(d8021c6bc15beb5a0e6c86b91f8ed0389b1311a5) ) + ROM_LOAD16_BYTE( "110-00023-208.u133", 0x040001, 0x20000, CRC(a4db3137) SHA1(ef266cc17e33a2c63cda3332e266bf943e464e7f) ) + ROM_LOAD16_BYTE( "110-00023-203.u114", 0x080000, 0x20000, CRC(b1dacbb1) SHA1(323531b6919eed4a963d6aad871f1fd34203e698) ) + ROM_LOAD16_BYTE( "110-00023-202.u108", 0x080001, 0x20000, CRC(ac0d3179) SHA1(f4c67d59d913ead0f8a6d42e2ca66857ebf01602) ) + + /* Sound PCB (MPG 010-00018-002) */ + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "110-00014-001.u2", 0x000000, 0x08000, CRC(307fcb6d) SHA1(0cf63a39ac8920be6532974311804529d7218545) ) + + ROM_REGION( 0x40000, "upd7759", 0 ) + ROM_LOAD( "110-00013-001.u17", 0x000000, 0x40000, CRC(015a0b17) SHA1(f229c9aa59f0e6b25b818f9513997a8685e33982) ) +ROM_END + ROM_START( tankbatl ) ROM_REGION( 0x180000, "maincpu", 0 ) ROM_LOAD16_BYTE( "lo_u67", 0x000001, 0x20000, CRC(97aabac0) SHA1(12a0719d3332a63e912161200b0a942c27c1f5da) ) @@ -562,5 +645,6 @@ ROM_END GAME( 1991, f15se, 0, micro3d, f15se, micro3d, ROT0, "Microprose Games Inc.", "F-15 Strike Eagle (rev. 2.2 02/25/91)", GAME_IMPERFECT_SOUND ) GAME( 1991, f15se21 , f15se, micro3d, f15se, micro3d, ROT0, "Microprose Games Inc.", "F-15 Strike Eagle (rev. 2.1 02/04/91)", GAME_IMPERFECT_SOUND ) -GAME( 1992, botss, 0, micro3d, botss, micro3d, ROT0, "Microprose Games Inc.", "Battle of the Solar System (rev. 1.1)", GAME_IMPERFECT_SOUND ) +GAME( 1992, botss, 0, micro3d, botss, micro3d, ROT0, "Microprose Games Inc.", "Battle of the Solar System (rev. 1.1 3/24/92)", GAME_IMPERFECT_SOUND ) +GAME( 1992, botssa, botss, micro3d, botssa, botssa, ROT0, "Microprose Games Inc.", "Battle of the Solar System (rev. 1.1a 7/23/92)", GAME_IMPERFECT_SOUND ) GAME( 1992, tankbatl, 0, micro3d, tankbatl, micro3d, ROT0, "Microprose Games Inc.", "Tank Battle (prototype rev. 4/21/92)", GAME_IMPERFECT_SOUND ) diff --git a/src/mame/includes/micro3d.h b/src/mame/includes/micro3d.h index 35078175d16..2cb70873ccd 100644 --- a/src/mame/includes/micro3d.h +++ b/src/mame/includes/micro3d.h @@ -9,7 +9,7 @@ #define HOST_MONITOR_DISPLAY 0 #define VGB_MONITOR_DISPLAY 0 -#define DRMATH_MONITOR_DISPLAY 1 +#define DRMATH_MONITOR_DISPLAY 0 class micro3d_state { @@ -71,6 +71,9 @@ public: /* ADC */ UINT8 adc_val; + /* Hardware version-check latch for BOTSS 1.1a */ + UINT8 botssa_latch; + /* MAC */ UINT32 *mac_sram; UINT32 sram_r_addr; @@ -139,6 +142,10 @@ WRITE16_HANDLER( micro3d_reset_w ); READ16_HANDLER( micro3d_encoder_l_r ); READ16_HANDLER( micro3d_encoder_h_r ); +CUSTOM_INPUT( botssa_hwchk_r ); +READ16_HANDLER( botssa_140000_r ); +READ16_HANDLER( botssa_180000_r ); + READ32_HANDLER( micro3d_shared_r ); WRITE32_HANDLER( micro3d_shared_w ); @@ -156,6 +163,7 @@ void micro3d_duart_tx(running_device *device, int channel, UINT8 data); MACHINE_RESET( micro3d ); DRIVER_INIT( micro3d ); +DRIVER_INIT( botssa ); /*----------- defined in audio/micro3d.c -----------*/ WRITE8_DEVICE_HANDLER( micro3d_upd7759_w ); diff --git a/src/mame/machine/micro3d.c b/src/mame/machine/micro3d.c index b3ea1c0a636..64fc5042785 100644 --- a/src/mame/machine/micro3d.c +++ b/src/mame/machine/micro3d.c @@ -661,6 +661,28 @@ WRITE16_HANDLER( micro3d_adc_w ) timer_set(space->machine, ATTOTIME_IN_USEC(40), NULL, data & ~4, adc_done_callback); } +CUSTOM_INPUT( botssa_hwchk_r ) +{ + micro3d_state *state = (micro3d_state*)field->port->machine->driver_data; + + return state->botssa_latch; +} + +READ16_HANDLER( botssa_140000_r ) +{ + micro3d_state *state = (micro3d_state*)space->machine->driver_data; + + state->botssa_latch = 0; + return 0xffff; +} + +READ16_HANDLER( botssa_180000_r ) +{ + micro3d_state *state = (micro3d_state*)space->machine->driver_data; + + state->botssa_latch = 1; + return 0xffff; +} /************************************* * @@ -743,6 +765,17 @@ DRIVER_INIT( micro3d ) cpu_set_clockscale(devtag_get_device(machine, "maincpu"), 0.945f); } +DRIVER_INIT( botssa ) +{ + const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM); + + /* Required to pass the hardware version check */ + memory_install_read16_handler(space, 0x140000, 0x140001, 0, 0, botssa_140000_r ); + memory_install_read16_handler(space, 0x180000, 0x180001, 0, 0, botssa_180000_r ); + + DRIVER_INIT_CALL(micro3d); +} + MACHINE_RESET( micro3d ) { micro3d_state *state = (micro3d_state*)machine->driver_data; diff --git a/src/mame/mamedriv.c b/src/mame/mamedriv.c index 7d6e8fdcf8a..bf53d8e7b28 100644 --- a/src/mame/mamedriv.c +++ b/src/mame/mamedriv.c @@ -9011,6 +9011,7 @@ Other Sun games DRIVER( f15se ) /* (c) 1991 Microprose Games Inc. */ DRIVER( f15se21 ) /* (c) 1991 Microprose Games Inc. */ DRIVER( botss ) /* (c) 1992 Microprose Games Inc. */ + DRIVER( botssa ) /* (c) 1992 Microprose Games Inc. */ DRIVER( tankbatl ) /* (c) 1992 Microprose Games Inc. */ DRIVER( dynadice ) /* ? */ DRIVER( atamanot ) /* (c) 1983 Yachiyo Denki / Uni Enterprize */