summaryrefslogtreecommitdiffstats
path: root/src/mame/drivers/gaelco.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/gaelco.cpp')
-rw-r--r--src/mame/drivers/gaelco.cpp47
1 files changed, 33 insertions, 14 deletions
diff --git a/src/mame/drivers/gaelco.cpp b/src/mame/drivers/gaelco.cpp
index d9aa3437ae4..68eeae20a7f 100644
--- a/src/mame/drivers/gaelco.cpp
+++ b/src/mame/drivers/gaelco.cpp
@@ -16,6 +16,19 @@ Year Game PCB NOTES
1995 Biomechanical Toy REF 922804/2 Unprotected
1996 Maniac Square REF 922804/2 Prototype
+TODO: Figure out why Thunder Hoop crashes if you die on Level 4
+ This can be bypassed by killing yourself at the same time as
+ the Level 3 boss dies, suggesting the end stage animation is
+ somehow corrupting the game state. Could this be a bug in
+ the supported revision of the game? It doesn't depend on
+ CPU clock, vblank timing, there are no unmapped reads or
+ writes of significance. Could it be related to a dipswitch
+ setting?
+
+ Priorities for all games - the games don't make extensive
+ enough use of the priority scheme to properly draw any
+ conclusions.
+
***************************************************************************/
#include "emu.h"
@@ -64,6 +77,12 @@ void gaelco_state::oki_bankswitch_w(uint8_t data)
m_okibank->set_entry(data & 0x0f);
}
+void gaelco_state::irqack_w(uint16_t data)
+{
+ // INT 6 ACK or Watchdog timer - written at the end of an IRQ
+ m_maincpu->set_input_line(6, CLEAR_LINE);
+}
+
/*********** Squash Encryption Related Code ******************/
void gaelco_state::vram_encrypted_w(offs_t offset, uint16_t data, uint16_t mem_mask)
@@ -109,7 +128,7 @@ void gaelco_state::bigkarnk_map(address_map &map)
map(0x100000, 0x101fff).ram().w(FUNC(gaelco_state::vram_w)).share("videoram"); // Video RAM
map(0x102000, 0x103fff).ram(); // Screen RAM
map(0x108000, 0x108007).writeonly().share("vregs"); // Video Registers
-// map(0x10800c, 0x10800d).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); // INT 6 ACK/Watchdog timer
+ map(0x10800c, 0x10800d).w(FUNC(gaelco_state::irqack_w)); // INT 6 ACK/Watchdog timer
map(0x200000, 0x2007ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0x440000, 0x440fff).ram().share("spriteram"); // Sprite RAM
map(0x700000, 0x700001).portr("DSW1");
@@ -138,7 +157,7 @@ void gaelco_state::maniacsq_map(address_map &map)
map(0x100000, 0x101fff).ram().w(FUNC(gaelco_state::vram_w)).share("videoram"); // Video RAM
map(0x102000, 0x103fff).ram(); // Screen RAM
map(0x108000, 0x108007).writeonly().share("vregs"); // Video Registers
-// map(0x10800c, 0x10800d).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); // INT 6 ACK/Watchdog timer
+ map(0x10800c, 0x10800d).w(FUNC(gaelco_state::irqack_w)); // INT 6 ACK/Watchdog timer
map(0x200000, 0x2007ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0x440000, 0x440fff).ram().share("spriteram"); // Sprite RAM
map(0x700000, 0x700001).portr("DSW2");
@@ -156,7 +175,7 @@ void gaelco_state::squash_map(address_map &map)
map(0x100000, 0x101fff).ram().w(FUNC(gaelco_state::vram_encrypted_w)).share("videoram"); // Video RAM
map(0x102000, 0x103fff).ram().w(FUNC(gaelco_state::encrypted_w)).share("screenram"); // Screen RAM
map(0x108000, 0x108007).writeonly().share("vregs"); // Video Registers
-// map(0x10800c, 0x10800d).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); // INT 6 ACK/Watchdog timer
+ map(0x10800c, 0x10800d).w(FUNC(gaelco_state::irqack_w)); // INT 6 ACK/Watchdog timer
map(0x200000, 0x2007ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0x440000, 0x440fff).ram().share("spriteram"); // Sprite RAM
map(0x700000, 0x700001).portr("DSW2");
@@ -175,7 +194,7 @@ void gaelco_state::thoop_map(address_map &map)
map(0x100000, 0x101fff).ram().w(FUNC(gaelco_state::thoop_vram_encrypted_w)).share("videoram"); // Video RAM
map(0x102000, 0x103fff).ram().w(FUNC(gaelco_state::thoop_encrypted_w)).share("screenram"); // Screen RAM
map(0x108000, 0x108007).writeonly().share("vregs"); // Video Registers
-// map(0x10800c, 0x10800d).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); // INT 6 ACK/Watchdog timer
+ map(0x10800c, 0x10800d).w(FUNC(gaelco_state::irqack_w)); // INT 6 ACK/Watchdog timer
map(0x200000, 0x2007ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0x440000, 0x440fff).ram().share("spriteram"); // Sprite RAM
map(0x700000, 0x700001).portr("DSW2");
@@ -641,7 +660,7 @@ void gaelco_state::bigkarnk(machine_config &config)
// Basic machine hardware
M68000(config, m_maincpu, XTAL(24'000'000)/2); // MC68000P10, 12 MHz?
m_maincpu->set_addrmap(AS_PROGRAM, &gaelco_state::bigkarnk_map);
- m_maincpu->set_vblank_int("screen", FUNC(gaelco_state::irq6_line_hold));
+ m_maincpu->set_vblank_int("screen", FUNC(gaelco_state::irq6_line_assert));
MC6809E(config, m_audiocpu, XTAL(8'000'000)/4); // 68B09EP, 2 MHz?
m_audiocpu->set_addrmap(AS_PROGRAM, &gaelco_state::bigkarnk_snd_map);
@@ -684,7 +703,7 @@ void gaelco_state::maniacsq(machine_config &config)
// Basic machine hardware
M68000(config, m_maincpu, XTAL(24'000'000)/2); /* verified on pcb */
m_maincpu->set_addrmap(AS_PROGRAM, &gaelco_state::maniacsq_map);
- m_maincpu->set_vblank_int("screen", FUNC(gaelco_state::irq6_line_hold));
+ m_maincpu->set_vblank_int("screen", FUNC(gaelco_state::irq6_line_assert));
// Video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
@@ -713,7 +732,7 @@ void gaelco_state::squash(machine_config &config)
// Basic machine hardware
M68000(config, m_maincpu, XTAL(20'000'000)/2); // Verified on PCB
m_maincpu->set_addrmap(AS_PROGRAM, &gaelco_state::squash_map);
- m_maincpu->set_vblank_int("screen", FUNC(gaelco_state::irq6_line_hold));
+ m_maincpu->set_vblank_int("screen", FUNC(gaelco_state::irq6_line_assert));
config.set_maximum_quantum(attotime::from_hz(600));
@@ -730,13 +749,13 @@ void gaelco_state::squash(machine_config &config)
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
screen.set_size(32*16, 32*16);
screen.set_visarea(0, 320-1, 16, 256-1);
- screen.set_screen_update(FUNC(gaelco_state::screen_update_maniacsq));
+ screen.set_screen_update(FUNC(gaelco_state::screen_update_thoop));
screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_gaelco);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 1024);
- MCFG_VIDEO_START_OVERRIDE(gaelco_state,maniacsq)
+ MCFG_VIDEO_START_OVERRIDE(gaelco_state,squash)
// Sound hardware
SPEAKER(config, "mono").front_center();
@@ -751,7 +770,7 @@ void gaelco_state::thoop(machine_config &config)
// Basic machine hardware
M68000(config, m_maincpu, XTAL(24'000'000)/2); // Verified on PCB
m_maincpu->set_addrmap(AS_PROGRAM, &gaelco_state::thoop_map);
- m_maincpu->set_vblank_int("screen", FUNC(gaelco_state::irq6_line_hold));
+ m_maincpu->set_vblank_int("screen", FUNC(gaelco_state::irq6_line_assert));
config.set_maximum_quantum(attotime::from_hz(600));
@@ -768,13 +787,13 @@ void gaelco_state::thoop(machine_config &config)
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
screen.set_size(32*16, 32*16);
screen.set_visarea(0, 320-1, 16, 256-1);
- screen.set_screen_update(FUNC(gaelco_state::screen_update_maniacsq));
+ screen.set_screen_update(FUNC(gaelco_state::screen_update_thoop));
screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_gaelco);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 1024);
- MCFG_VIDEO_START_OVERRIDE(gaelco_state,maniacsq)
+ MCFG_VIDEO_START_OVERRIDE(gaelco_state,bigkarnk)
// Sound hardware
SPEAKER(config, "mono").front_center();
@@ -1164,7 +1183,7 @@ GAME( 1995, biomtoya, biomtoy, maniacsq, biomtoy, gaelco_state, empty_init, RO
GAME( 1995, biomtoyb, biomtoy, maniacsq, biomtoy, gaelco_state, empty_init, ROT0, "Gaelco", "Biomechanical Toy (Ver. 1.0.1878)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, biomtoyc, biomtoy, maniacsq, biomtoyc, gaelco_state, empty_init, ROT0, "Gaelco", "Biomechanical Toy (Ver. 1.0.1870)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, bioplayc, biomtoy, maniacsq, bioplayc, gaelco_state, empty_init, ROT0, "Gaelco", "Bioplaything Cop (Ver. 1.0.1823, prototype)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) // copyright based on Ver. 1.0.1870
-GAME( 1996, maniacsp, maniacsq, maniacsq, maniacsq, gaelco_state, empty_init, ROT0, "Gaelco", "Maniac Square (prototype)", MACHINE_SUPPORTS_SAVE ) // sometimes listed as a 1992 proto?
+GAME( 1992, maniacsp, 0, maniacsq, maniacsq, gaelco_state, empty_init, ROT0, "Gaelco", "Maniac Square (prototype)", MACHINE_SUPPORTS_SAVE ) // The prototype version was an earlier project, said to be from 1992, game was rewritten in 1996
GAME( 1995, lastkm, 0, maniacsq, lastkm, gaelco_state, empty_init, ROT0, "Gaelco", "Last KM (Ver 1.0.0275)", MACHINE_SUPPORTS_SAVE ) // used on 'Salter' exercise bikes
GAME( 1992, squash, 0, squash, squash, gaelco_state, empty_init, ROT0, "Gaelco", "Squash (Ver. 1.0)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, thoop, 0, thoop, thoop, gaelco_state, empty_init, ROT0, "Gaelco", "Thunder Hoop (Ver. 1, Checksum 02A09F7D)", MACHINE_SUPPORTS_SAVE ) // could be other versions, still Ver. 1 but different checksum listed on boot
+GAME( 1992, thoop, 0, thoop, thoop, gaelco_state, empty_init, ROT0, "Gaelco", "Thunder Hoop (Ver. 1, Checksum 02A09F7D)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // could be other versions, still Ver. 1 but different checksum listed on boot