summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2018-12-07 10:09:02 -0500
committer AJR <ajrhacker@users.noreply.github.com>2018-12-07 10:09:02 -0500
commitfe5e61e0dd2ff4ea2564a34b0cea390399857148 (patch)
treeffe438c2bb4dd2dee80a3747ded0afed181bc11b
parent97e392975716f39076818dfd5144721cbefe368a (diff)
balsente.cpp: Start working out 6809 map for triviaes4; eliminate install_readwrite_handler hacks (nw)
-rw-r--r--src/mame/drivers/balsente.cpp291
-rw-r--r--src/mame/includes/balsente.h15
-rw-r--r--src/mame/machine/balsente.cpp10
3 files changed, 186 insertions, 130 deletions
diff --git a/src/mame/drivers/balsente.cpp b/src/mame/drivers/balsente.cpp
index 6fe2c3362f2..0da7d31b752 100644
--- a/src/mame/drivers/balsente.cpp
+++ b/src/mame/drivers/balsente.cpp
@@ -213,9 +213,11 @@ DIP locations verified for:
#include "cpu/m68000/m68000.h"
#include "machine/watchdog.h"
#include "audio/sente6vb.h"
+#include "machine/6821pia.h"
#include "machine/z80ctc.h"
#include "sound/ay8910.h"
#include "sound/msm5205.h"
+#include "video/mc6845.h"
#include "speaker.h"
#include "stocker.lh"
@@ -260,12 +262,68 @@ void balsente_state::cpu1_map(address_map &map)
map(0x9c00, 0x9cff).rw("nov1", FUNC(x2212_device::read), FUNC(x2212_device::write));
}
+void balsente_state::cpu1_teamht_map(address_map &map)
+{
+ cpu1_map(map);
+ map(0x9404, 0x9404).r(FUNC(balsente_state::teamht_extra_r));
+ map(0x9000, 0x9007).w(FUNC(balsente_state::teamht_multiplex_select_w));
+}
+
+void balsente_state::cpu1_grudge_map(address_map &map)
+{
+ cpu1_map(map);
+ map(0x9400, 0x9400).r(FUNC(balsente_state::grudge_steering_r));
+}
+
+void balsente_state::cpu1_1986_map(address_map &map)
+{
+ cpu1_map(map);
+ map(0x9f00, 0x9f00).w(FUNC(balsente_state::rombank2_select_w));
+}
+
+void balsente_state::cpu1_spiker_map(address_map &map)
+{
+ cpu1_1986_map(map);
+ map(0x9f80, 0x9f8f).rw(FUNC(balsente_state::spiker_expand_r), FUNC(balsente_state::spiker_expand_w));
+}
+
+void balsente_state::cpu1_shrike_map(address_map &map)
+{
+ cpu1_map(map);
+ map(0x9e00, 0x9fff).rw(FUNC(balsente_state::shrike_shared_6809_r), FUNC(balsente_state::shrike_shared_6809_w));
+ map(0x9e01, 0x9e01).w(FUNC(balsente_state::shrike_sprite_select_w));
+}
+
void balsente_state::cpu1_smudge_map(address_map &map)
{
cpu1_base_map(map);
map(0x9b00, 0x9bff).rw(FUNC(balsente_state::novram_8bit_r), FUNC(balsente_state::novram_8bit_w));
}
+void balsente_state::cpu1_triviamb_map(address_map &map)
+{
+ map(0x0000, 0x00ff).ram();
+ map(0x0100, 0x0100).portr("SWH");
+ map(0x0101, 0x0101).portr("SWG");
+ map(0x0102, 0x0102).portr("IN0");
+ map(0x0103, 0x0103).portr("IN1");
+ map(0x0320, 0x0323).rw("pia", FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt));
+ map(0x0340, 0x0340).w("crtc", FUNC(mc6845_device::address_w));
+ map(0x0341, 0x0341).w("crtc", FUNC(mc6845_device::register_w));
+ map(0x0360, 0x0360).w(FUNC(balsente_state::random_reset_w));
+ map(0x0380, 0x0380).r(FUNC(balsente_state::random_num_r));
+ map(0x03a0, 0x03a0).w(FUNC(balsente_state::rombank_select_w));
+ map(0x03c0, 0x03c0).w(FUNC(balsente_state::palette_select_w));
+ map(0x03e0, 0x03e0).w("watchdog", FUNC(watchdog_timer_device::reset_w));
+ map(0x0800, 0x7fff).ram().w(FUNC(balsente_state::videoram_w)).share("videoram"); // probably wrong
+ map(0x8000, 0x8fff).ram().w(FUNC(balsente_state::paletteram_w)).share("paletteram"); // probably wrong
+ map(0x8800, 0x8fff).ram().share("spriteram"); // probably wrong
+ map(0x8800, 0x88ff).rw("nov0", FUNC(x2212_device::read), FUNC(x2212_device::write));
+ map(0x8900, 0x89ff).rw("nov1", FUNC(x2212_device::read), FUNC(x2212_device::write));
+ map(0xa000, 0xbfff).bankr("bank1"); // different banking?
+ map(0xc000, 0xffff).bankr("bank2"); // different banking?
+}
+
/*************************************
@@ -298,7 +356,7 @@ void balsente_state::cpu2_triviamb_io_map(address_map &map)
void balsente_state::shrike68k_map(address_map &map)
{
map(0x000000, 0x003fff).rom();
- map(0x010000, 0x01001f).ram().share("shrike_io");
+ map(0x010000, 0x01001f).ram().share("shrike_io").rw(FUNC(balsente_state::shrike_io_68k_r), FUNC(balsente_state::shrike_io_68k_w));
map(0x018000, 0x018fff).ram().share("shrike_shared");
}
@@ -1326,11 +1384,38 @@ void balsente_state::balsente(machine_config &config)
}
-void balsente_state::shrike(machine_config &config)
+void balsente_state::teamht(machine_config &config)
{
balsente(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &balsente_state::cpu1_teamht_map);
+}
- /* basic machine hardware */
+
+void balsente_state::grudge(machine_config &config)
+{
+ balsente(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &balsente_state::cpu1_grudge_map);
+}
+
+
+void balsente_state::balsent2(machine_config &config)
+{
+ balsente(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &balsente_state::cpu1_1986_map);
+}
+
+
+void balsente_state::spiker(machine_config &config)
+{
+ balsente(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &balsente_state::cpu1_spiker_map);
+}
+
+
+void balsente_state::shrike(machine_config &config)
+{
+ balsente(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &balsente_state::cpu1_shrike_map);
M68000(config, m_68k, 8000000);
m_68k->set_addrmap(AS_PROGRAM, &balsente_state::shrike68k_map);
@@ -1351,6 +1436,18 @@ void balsente_state::triviamb(machine_config &config)
{
balsente(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &balsente_state::cpu1_triviamb_map);
+ config.device_remove("outlatch");
+ config.device_remove("acia");
+ config.device_remove("audio6vb");
+
+ PIA6821(config, "pia");
+
+ mc6845_device &crtc(MC6845(config, "crtc", 20000000 / 16)); // specific type unknown
+ crtc.set_screen("screen");
+ crtc.set_show_border_area(false);
+ crtc.set_char_width(8);
+
// sound PCB has: 2x Z80CTC, 2x AY8910A, 1x M5205, 1x 8MHz XTAL (divisor unknown for every device)
Z80(config, m_audiocpu, 8_MHz_XTAL / 2);
m_audiocpu->set_addrmap(AS_PROGRAM, &balsente_state::cpu2_triviamb_map);
@@ -1365,9 +1462,6 @@ void balsente_state::triviamb(machine_config &config)
AY8910(config, "ay2", 8_MHz_XTAL / 6).add_route(ALL_OUTPUTS, "mono", 0.90);
MSM5205(config, "msm", 384000).add_route(ALL_OUTPUTS, "mono", 0.90);
-
- m_acia->txd_handler().set_nop();
- config.device_remove("audio6vb");
}
/*************************************
@@ -2211,60 +2305,61 @@ void balsente_state::expand_roms(uint8_t cd_rom_mask)
/* ROM region must be 0x40000 total */
std::vector<uint8_t> temp(0x20000);
+
+ uint8_t *rom = memregion("maincpu")->base();
+ uint32_t len = memregion("maincpu")->bytes();
+
+ for (uint32_t base = 0x10000; base < len; base += 0x30000)
{
- uint8_t *rom = memregion("maincpu")->base();
- uint32_t len = memregion("maincpu")->bytes();
- uint32_t base;
+ uint8_t *ab_base = &temp[0x00000];
+ uint8_t *cd_base = &temp[0x10000];
+ uint8_t *cd_common = &temp[0x1c000];
+ uint8_t *ef_common = &temp[0x1e000];
- for (base = 0x10000; base < len; base += 0x30000)
+ for (uint32_t dest = 0x00000; dest < 0x20000; dest += 0x02000)
{
- uint8_t *ab_base = &temp[0x00000];
- uint8_t *cd_base = &temp[0x10000];
- uint8_t *cd_common = &temp[0x1c000];
- uint8_t *ef_common = &temp[0x1e000];
- uint32_t dest;
-
- for (dest = 0x00000; dest < 0x20000; dest += 0x02000)
- {
- if (cd_rom_mask & SWAP_HALVES)
- memcpy(&temp[dest ^ 0x02000], &rom[base + dest], 0x02000);
- else
- memcpy(&temp[dest], &rom[base + dest], 0x02000);
- }
-
- memcpy(&rom[base + 0x2e000], ef_common, 0x2000);
- memcpy(&rom[base + 0x2c000], cd_common, 0x2000);
- memcpy(&rom[base + 0x2a000], &ab_base[0xe000], 0x2000);
-
- memcpy(&rom[base + 0x28000], ef_common, 0x2000);
- memcpy(&rom[base + 0x26000], cd_common, 0x2000);
- memcpy(&rom[base + 0x24000], &ab_base[0xc000], 0x2000);
-
- memcpy(&rom[base + 0x22000], ef_common, 0x2000);
- memcpy(&rom[base + 0x20000], (cd_rom_mask & 0x20) ? &cd_base[0xa000] : cd_common, 0x2000);
- memcpy(&rom[base + 0x1e000], &ab_base[0xa000], 0x2000);
-
- memcpy(&rom[base + 0x1c000], ef_common, 0x2000);
- memcpy(&rom[base + 0x1a000], (cd_rom_mask & 0x10) ? &cd_base[0x8000] : cd_common, 0x2000);
- memcpy(&rom[base + 0x18000], &ab_base[0x8000], 0x2000);
-
- memcpy(&rom[base + 0x16000], ef_common, 0x2000);
- memcpy(&rom[base + 0x14000], (cd_rom_mask & 0x08) ? &cd_base[0x6000] : cd_common, 0x2000);
- memcpy(&rom[base + 0x12000], &ab_base[0x6000], 0x2000);
-
- memcpy(&rom[base + 0x10000], ef_common, 0x2000);
- memcpy(&rom[base + 0x0e000], (cd_rom_mask & 0x04) ? &cd_base[0x4000] : cd_common, 0x2000);
- memcpy(&rom[base + 0x0c000], &ab_base[0x4000], 0x2000);
-
- memcpy(&rom[base + 0x0a000], ef_common, 0x2000);
- memcpy(&rom[base + 0x08000], (cd_rom_mask & 0x02) ? &cd_base[0x2000] : cd_common, 0x2000);
- memcpy(&rom[base + 0x06000], &ab_base[0x2000], 0x2000);
-
- memcpy(&rom[base + 0x04000], ef_common, 0x2000);
- memcpy(&rom[base + 0x02000], (cd_rom_mask & 0x01) ? &cd_base[0x0000] : cd_common, 0x2000);
- memcpy(&rom[base + 0x00000], &ab_base[0x0000], 0x2000);
+ if (cd_rom_mask & SWAP_HALVES)
+ memcpy(&temp[dest ^ 0x02000], &rom[base + dest], 0x02000);
+ else
+ memcpy(&temp[dest], &rom[base + dest], 0x02000);
}
+
+ memcpy(&rom[base + 0x2e000], ef_common, 0x2000);
+ memcpy(&rom[base + 0x2c000], cd_common, 0x2000);
+ memcpy(&rom[base + 0x2a000], &ab_base[0xe000], 0x2000);
+
+ memcpy(&rom[base + 0x28000], ef_common, 0x2000);
+ memcpy(&rom[base + 0x26000], cd_common, 0x2000);
+ memcpy(&rom[base + 0x24000], &ab_base[0xc000], 0x2000);
+
+ memcpy(&rom[base + 0x22000], ef_common, 0x2000);
+ memcpy(&rom[base + 0x20000], (cd_rom_mask & 0x20) ? &cd_base[0xa000] : cd_common, 0x2000);
+ memcpy(&rom[base + 0x1e000], &ab_base[0xa000], 0x2000);
+
+ memcpy(&rom[base + 0x1c000], ef_common, 0x2000);
+ memcpy(&rom[base + 0x1a000], (cd_rom_mask & 0x10) ? &cd_base[0x8000] : cd_common, 0x2000);
+ memcpy(&rom[base + 0x18000], &ab_base[0x8000], 0x2000);
+
+ memcpy(&rom[base + 0x16000], ef_common, 0x2000);
+ memcpy(&rom[base + 0x14000], (cd_rom_mask & 0x08) ? &cd_base[0x6000] : cd_common, 0x2000);
+ memcpy(&rom[base + 0x12000], &ab_base[0x6000], 0x2000);
+
+ memcpy(&rom[base + 0x10000], ef_common, 0x2000);
+ memcpy(&rom[base + 0x0e000], (cd_rom_mask & 0x04) ? &cd_base[0x4000] : cd_common, 0x2000);
+ memcpy(&rom[base + 0x0c000], &ab_base[0x4000], 0x2000);
+
+ memcpy(&rom[base + 0x0a000], ef_common, 0x2000);
+ memcpy(&rom[base + 0x08000], (cd_rom_mask & 0x02) ? &cd_base[0x2000] : cd_common, 0x2000);
+ memcpy(&rom[base + 0x06000], &ab_base[0x2000], 0x2000);
+
+ memcpy(&rom[base + 0x04000], ef_common, 0x2000);
+ memcpy(&rom[base + 0x02000], (cd_rom_mask & 0x01) ? &cd_base[0x0000] : cd_common, 0x2000);
+ memcpy(&rom[base + 0x00000], &ab_base[0x0000], 0x2000);
}
+
+ int numbanks = (len > 0x40000) ? 16 : 8;
+ membank("bank1")->configure_entries(0, numbanks, &rom[0x10000], 0x6000);
+ membank("bank2")->configure_entries(0, numbanks, &rom[0x12000], 0x6000);
}
inline void balsente_state::config_shooter_adc(uint8_t shooter, uint8_t adc_shift)
@@ -2277,15 +2372,6 @@ void balsente_state::init_sentetst() { expand_roms(EXPAND_ALL); config_shooter
void balsente_state::init_cshift() { expand_roms(EXPAND_ALL); config_shooter_adc(false, 0 /* noanalog */); }
void balsente_state::init_gghost() { expand_roms(EXPAND_ALL); config_shooter_adc(false, 1); }
void balsente_state::init_hattrick() { expand_roms(EXPAND_ALL); config_shooter_adc(false, 0 /* noanalog */); }
-void balsente_state::init_teamht()
-{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- expand_roms(EXPAND_ALL);
- config_shooter_adc(false, 0 /* noanalog */);
- space.install_read_handler(0x9404, 0x9404, read8_delegate(FUNC(balsente_state::teamht_extra_r),this));
- space.install_write_handler(0x9000, 0x9007, write8_delegate(FUNC(balsente_state::teamht_multiplex_select_w),this));
-
-}
void balsente_state::init_otwalls() { expand_roms(EXPAND_ALL); config_shooter_adc(false, 0); }
void balsente_state::init_snakepit() { expand_roms(EXPAND_ALL); config_shooter_adc(false, 1); }
@@ -2305,53 +2391,14 @@ void balsente_state::init_gimeabrk() { expand_roms(EXPAND_ALL); config_shooter
void balsente_state::init_minigolf() { expand_roms(EXPAND_NONE); config_shooter_adc(false, 2); }
void balsente_state::init_minigolf2() { expand_roms(0x0c); config_shooter_adc(false, 2); }
void balsente_state::init_toggle() { expand_roms(EXPAND_ALL); config_shooter_adc(false, 0 /* noanalog */); }
-void balsente_state::init_nametune()
-{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.install_write_handler(0x9f00, 0x9f00, write8_delegate(FUNC(balsente_state::rombank2_select_w),this));
- expand_roms(EXPAND_NONE | SWAP_HALVES); config_shooter_adc(false, 0 /* noanalog */);
-}
-void balsente_state::init_nstocker()
-{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.install_write_handler(0x9f00, 0x9f00, write8_delegate(FUNC(balsente_state::rombank2_select_w),this));
- expand_roms(EXPAND_NONE | SWAP_HALVES); config_shooter_adc(true, 1);
-}
-void balsente_state::init_sfootbal()
-{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.install_write_handler(0x9f00, 0x9f00, write8_delegate(FUNC(balsente_state::rombank2_select_w),this));
- expand_roms(EXPAND_ALL | SWAP_HALVES); config_shooter_adc(false, 0);
-}
-void balsente_state::init_spiker()
-{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.install_readwrite_handler(0x9f80, 0x9f8f, read8_delegate(FUNC(balsente_state::spiker_expand_r),this), write8_delegate(FUNC(balsente_state::spiker_expand_w),this));
- space.install_write_handler(0x9f00, 0x9f00, write8_delegate(FUNC(balsente_state::rombank2_select_w),this));
- expand_roms(EXPAND_ALL | SWAP_HALVES); config_shooter_adc(false, 1);
-}
-void balsente_state::init_stompin()
-{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.install_write_handler(0x9f00, 0x9f00, write8_delegate(FUNC(balsente_state::rombank2_select_w),this));
- expand_roms(0x0c | SWAP_HALVES); config_shooter_adc(false, 32);
-}
+void balsente_state::init_nametune() { expand_roms(EXPAND_NONE | SWAP_HALVES); config_shooter_adc(false, 0 /* noanalog */); }
+void balsente_state::init_nstocker() { expand_roms(EXPAND_NONE | SWAP_HALVES); config_shooter_adc(true, 1); }
+void balsente_state::init_sfootbal() { expand_roms(EXPAND_ALL | SWAP_HALVES); config_shooter_adc(false, 0); }
+void balsente_state::init_spiker() { expand_roms(EXPAND_ALL | SWAP_HALVES); config_shooter_adc(false, 1); }
+void balsente_state::init_stompin() { expand_roms(0x0c | SWAP_HALVES); config_shooter_adc(false, 32); }
void balsente_state::init_rescraid() { expand_roms(EXPAND_NONE); config_shooter_adc(false, 0 /* noanalog */); }
-void balsente_state::init_grudge()
-{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.install_read_handler(0x9400, 0x9400, read8_delegate(FUNC(balsente_state::grudge_steering_r),this));
- expand_roms(EXPAND_NONE); config_shooter_adc(false, 0);
-}
-void balsente_state::init_shrike()
-{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.install_readwrite_handler(0x9e00, 0x9fff, read8_delegate(FUNC(balsente_state::shrike_shared_6809_r),this), write8_delegate(FUNC(balsente_state::shrike_shared_6809_w),this));
- space.install_write_handler(0x9e01, 0x9e01, write8_delegate(FUNC(balsente_state::shrike_sprite_select_w),this));
- m_68k->space(AS_PROGRAM).install_readwrite_handler(0x10000, 0x1001f, read16_delegate(FUNC(balsente_state::shrike_io_68k_r),this), write16_delegate(FUNC(balsente_state::shrike_io_68k_w),this));
-
- expand_roms(EXPAND_ALL); config_shooter_adc(false, 32);
-}
+void balsente_state::init_grudge() { expand_roms(EXPAND_NONE); config_shooter_adc(false, 0); }
+void balsente_state::init_shrike() { expand_roms(EXPAND_ALL); config_shooter_adc(false, 32); }
@@ -2382,8 +2429,8 @@ GAME( 1985, gimeabrk, 0, balsente, gimeabrk, balsente_state, init_gimeab
GAME( 1985, minigolf, 0, balsente, minigolf, balsente_state, init_minigolf, ROT0, "Bally/Sente", "Mini Golf (11/25/85)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, minigolf2, minigolf, balsente, minigolf2,balsente_state, init_minigolf2, ROT0, "Bally/Sente", "Mini Golf (10/8/85)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, triviabb, 0, balsente, triviag1, balsente_state, init_triviag2, ROT0, "Bally/Sente", "Trivial Pursuit (Baby Boomer Edition) (3/20/85)", MACHINE_SUPPORTS_SAVE )
-GAME( 198?, grudge, 0, balsente, grudge, balsente_state, init_grudge, ROT0, "Bally Midway", "Grudge Match (v00.90, Italy, location test?)", MACHINE_SUPPORTS_SAVE ) // newer than set below, had a complete cabinet + art
-GAME( 198?, grudgep, grudge, balsente, grudgep, balsente_state, init_grudge, ROT0, "Bally Midway", "Grudge Match (v00.80, prototype)", MACHINE_SUPPORTS_SAVE )
+GAME( 198?, grudge, 0, grudge, grudge, balsente_state, init_grudge, ROT0, "Bally Midway", "Grudge Match (v00.90, Italy, location test?)", MACHINE_SUPPORTS_SAVE ) // newer than set below, had a complete cabinet + art
+GAME( 198?, grudgep, grudge, grudge, grudgep, balsente_state, init_grudge, ROT0, "Bally Midway", "Grudge Match (v00.80, prototype)", MACHINE_SUPPORTS_SAVE )
/* Board: Unknown */
GAME( 1984, triviag1, 0, balsente, triviag1, balsente_state, init_triviag1, ROT0, "Bally/Sente", "Trivial Pursuit (Think Tank - Genus Edition) (set 1)", MACHINE_SUPPORTS_SAVE )
@@ -2392,22 +2439,22 @@ GAME( 1984, triviasp, 0, balsente, triviag1, balsente_state, init_trivia
GAME( 1984, triviayp, 0, balsente, triviag1, balsente_state, init_triviag2, ROT0, "Bally/Sente", "Trivial Pursuit (Young Players Edition)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, triviaes, 0, balsente, triviaes, balsente_state, init_triviaes, ROT0, "Bally/Sente (Maibesa license)", "Trivial Pursuit (Volumen III, Spanish, Maibesa license)", MACHINE_SUPPORTS_SAVE ) // Genus Edition?
GAME( 1985, toggle, 0, balsente, toggle, balsente_state, init_toggle, ROT0, "Bally/Sente", "Toggle (prototype)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, nametune, 0, balsente, nametune, balsente_state, init_nametune, ROT0, "Bally/Sente", "Name That Tune (set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, nametune, 0, balsent2, nametune, balsente_state, init_nametune, ROT0, "Bally/Sente", "Name That Tune (set 1)", MACHINE_SUPPORTS_SAVE )
/* Board: 007-8001-01-0C Rev C1 */
GAME( 1987, triviaes2, triviaes, balsente, triviaes, balsente_state, init_triviaes2, ROT0, "Bally/Sente (Maibesa license)", "Trivial Pursuit (Volumen II, Spanish, Maibesa license)", MACHINE_SUPPORTS_SAVE ) // "Jovenes Carrozas" Edition?
/* Board: 006-8030-01-0A Rev A */
-GAME( 1986, nametune2, nametune, balsente, nametune, balsente_state, init_nametune, ROT0, "Bally/Sente", "Name That Tune (3/23/86)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, nametune2, nametune, balsent2, nametune, balsente_state, init_nametune, ROT0, "Bally/Sente", "Name That Tune (3/23/86)", MACHINE_SUPPORTS_SAVE )
/* Board: 006-8027-01-0B Rev B */
-GAME( 1986, nstocker, 0, balsente, nstocker, balsente_state, init_nstocker, ROT0, "Bally/Sente", "Night Stocker (10/6/86)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, nstocker2, nstocker, balsente, nstocker, balsente_state, init_nstocker, ROT0, "Bally/Sente", "Night Stocker (8/27/86)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, sfootbal, 0, balsente, sfootbal, balsente_state, init_sfootbal, ROT0, "Bally/Sente", "Street Football (11/12/86)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, spiker, 0, balsente, spiker, balsente_state, init_spiker, ROT0, "Bally/Sente", "Spiker", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, spiker2, spiker, balsente, spiker, balsente_state, init_spiker, ROT0, "Bally/Sente", "Spiker (5/5/86)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, spiker3, spiker, balsente, spiker, balsente_state, init_spiker, ROT0, "Bally/Sente", "Spiker (6/9/86)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, stompin, 0, balsente, stompin, balsente_state, init_stompin, ROT0, "Bally/Sente", "Stompin' (4/4/86)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, nstocker, 0, balsent2, nstocker, balsente_state, init_nstocker, ROT0, "Bally/Sente", "Night Stocker (10/6/86)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, nstocker2, nstocker, balsent2, nstocker, balsente_state, init_nstocker, ROT0, "Bally/Sente", "Night Stocker (8/27/86)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, sfootbal, 0, balsent2, sfootbal, balsente_state, init_sfootbal, ROT0, "Bally/Sente", "Street Football (11/12/86)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, spiker, 0, spiker, spiker, balsente_state, init_spiker, ROT0, "Bally/Sente", "Spiker", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, spiker2, spiker, spiker, spiker, balsente_state, init_spiker, ROT0, "Bally/Sente", "Spiker (5/5/86)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, spiker3, spiker, spiker, spiker, balsente_state, init_spiker, ROT0, "Bally/Sente", "Spiker (6/9/86)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, stompin, 0, balsent2, stompin, balsente_state, init_stompin, ROT0, "Bally/Sente", "Stompin' (4/4/86)", MACHINE_SUPPORTS_SAVE )
/* Board: A084-91889-A000 (Not a cartridge, but dedicated board) */
GAME( 1987, rescraid, 0, rescraid, rescraid, balsente_state, init_rescraid, ROT0, "Bally Midway", "Rescue Raider (5/11/87) (non-cartridge)", MACHINE_SUPPORTS_SAVE )
@@ -2415,7 +2462,7 @@ GAME( 1987, rescraid, 0, rescraid, rescraid, balsente_state, init_rescra
/* Board: Unknown */
GAME( 1986, shrike, 0, shrike, shrike, balsente_state, init_shrike, ROT0, "Bally/Sente", "Shrike Avenger (prototype)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, rescraida, rescraid, rescraid, rescraid, balsente_state, init_rescraid, ROT0, "Bally Midway", "Rescue Raider (stand-alone)", MACHINE_SUPPORTS_SAVE )
-GAME( 1985, teamht, 0, balsente, teamht, balsente_state, init_teamht, ROT0, "Bally/Sente", "Team Hat Trick", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, teamht, 0, teamht, teamht, balsente_state, init_hattrick, ROT0, "Bally/Sente", "Team Hat Trick", MACHINE_SUPPORTS_SAVE )
/* Trivial Pursuit running on Maibesa hardware (with Bally/Sente license) */
GAME( 1988, triviaes4, 0, triviamb, triviaes, balsente_state, init_triviaes2, ROT0, "Bally/Sente (Maibesa license)", "Trivial Pursuit (Volumen IV, Spanish, Maibesa hardware)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // different (bootleg?) hardware. maincpu ROMs structure clearly similar to Trivial Pursuit games
diff --git a/src/mame/includes/balsente.h b/src/mame/includes/balsente.h
index b61c054a304..9c934aa5b43 100644
--- a/src/mame/includes/balsente.h
+++ b/src/mame/includes/balsente.h
@@ -61,6 +61,10 @@ public:
void shrike(machine_config &config);
void rescraid(machine_config &config);
void balsente(machine_config &config);
+ void teamht(machine_config &config);
+ void grudge(machine_config &config);
+ void balsent2(machine_config &config);
+ void spiker(machine_config &config);
void triviamb(machine_config &config);
DECLARE_CUSTOM_INPUT_MEMBER(nstocker_bits_r);
void init_otwalls();
@@ -74,7 +78,6 @@ public:
void init_snakepit();
void init_spiker();
void init_hattrick();
- void init_teamht();
void init_toggle();
void init_snakjack();
void init_grudge();
@@ -138,7 +141,13 @@ private:
void cpu1_base_map(address_map &map);
void cpu1_map(address_map &map);
+ void cpu1_teamht_map(address_map &map);
+ void cpu1_grudge_map(address_map &map);
+ void cpu1_1986_map(address_map &map);
+ void cpu1_spiker_map(address_map &map);
+ void cpu1_shrike_map(address_map &map);
void cpu1_smudge_map(address_map &map);
+ void cpu1_triviamb_map(address_map &map);
void cpu2_triviamb_io_map(address_map &map);
void cpu2_triviamb_map(address_map &map);
void shrike68k_map(address_map &map);
@@ -185,9 +194,9 @@ private:
optional_device<cpu_device> m_68k;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
- required_device<ls259_device> m_outlatch;
+ optional_device<ls259_device> m_outlatch;
required_device_array<x2212_device, 2> m_novram;
- required_device<acia6850_device> m_acia;
+ optional_device<acia6850_device> m_acia;
required_shared_ptr<uint8_t> m_generic_paletteram_8;
};
diff --git a/src/mame/machine/balsente.cpp b/src/mame/machine/balsente.cpp
index d2571058ff3..c36a86d07b6 100644
--- a/src/mame/machine/balsente.cpp
+++ b/src/mame/machine/balsente.cpp
@@ -66,8 +66,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(balsente_state::interrupt_timer)
void balsente_state::machine_start()
{
- m_acia->write_cts(0);
- m_acia->write_dcd(0);
+ if (m_acia.found())
+ {
+ m_acia->write_cts(0);
+ m_acia->write_dcd(0);
+ }
save_item(NAME(m_nstocker_bits));
save_item(NAME(m_spiker_expand_color));
@@ -90,9 +93,6 @@ void balsente_state::machine_reset()
m_grudge_steering_result = 0;
/* point the banks to bank 0 */
- int numbanks = (memregion("maincpu")->bytes() > 0x40000) ? 16 : 8;
- membank("bank1")->configure_entries(0, numbanks, &memregion("maincpu")->base()[0x10000], 0x6000);
- membank("bank2")->configure_entries(0, numbanks, &memregion("maincpu")->base()[0x12000], 0x6000);
membank("bank1")->set_entry(0);
membank("bank2")->set_entry(0);
m_maincpu->reset();