summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/toaplan/toaplan2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/toaplan/toaplan2.cpp')
-rw-r--r--src/mame/toaplan/toaplan2.cpp1170
1 files changed, 772 insertions, 398 deletions
diff --git a/src/mame/toaplan/toaplan2.cpp b/src/mame/toaplan/toaplan2.cpp
index 8c63b3c8935..37481ca647d 100644
--- a/src/mame/toaplan/toaplan2.cpp
+++ b/src/mame/toaplan/toaplan2.cpp
@@ -42,7 +42,8 @@ Supported games:
batsugunsp TP-030 Toaplan Batsugun (Special Version)
enmadaio TP-031 Toaplan Enma Daio
pwrkick SW931201 Sunwise Power Kick
- othldrby ?????? Sunwise Othello Derby
+ burgkids SW931201 Sunwise Burger Kids
+ othldrby S951060-VGP Sunwise Othello Derby
snowbro2 TP-033 Hanafram Snow Bros. 2 - With New Elves
* This version of Whoopee!! is on a board labeled TP-020
@@ -403,7 +404,6 @@ To reset the NVRAM in Othello Derby, hold P1 Button 1 down while booting.
#include "speaker.h"
-#define UNICODE_YEN "\xC2\xA5"
#define PWRKICK_HOPPER_PULSE 50 // time between hopper pulses in milliseconds (probably wrong)
//#define TRUXTON2_STEREO /* Uncomment to hear truxton2 music in stereo */
@@ -416,41 +416,38 @@ constexpr unsigned toaplan2_state::T2PALETTE_LENGTH;
***************************************************************************/
-void toaplan2_state::machine_start()
+void ghox_state::machine_start()
{
- save_item(NAME(m_old_p1_paddle_h));
- save_item(NAME(m_old_p2_paddle_h));
- save_item(NAME(m_z80_busreq));
+ toaplan2_state::machine_start();
+ save_item(NAME(m_old_paddle_h));
}
-WRITE_LINE_MEMBER(toaplan2_state::toaplan2_reset)
+void truxton2_state::machine_start()
{
- if (m_audiocpu != nullptr)
- m_audiocpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
+ toaplan2_state::machine_start();
+ save_item(NAME(m_z80_busreq));
}
-MACHINE_RESET_MEMBER(toaplan2_state,toaplan2)
+void toaplan2_state::toaplan2_reset(int state)
{
- // All games execute a RESET instruction on init, presumably to reset the sound CPU.
- // This is important for games with common RAM; the RAM test will fail
- // when leaving service mode if the sound CPU is not reset.
- m_maincpu->set_reset_callback(*this, FUNC(toaplan2_state::toaplan2_reset));
+ if (m_audiocpu != nullptr)
+ m_audiocpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
}
-MACHINE_RESET_MEMBER(toaplan2_state,ghox)
+void ghox_state::machine_reset()
{
- MACHINE_RESET_CALL_MEMBER(toaplan2);
- m_old_p1_paddle_h = 0;
- m_old_p2_paddle_h = 0;
+ toaplan2_state::machine_reset();
+ m_old_paddle_h[0] = 0;
+ m_old_paddle_h[1] = 0;
}
-MACHINE_RESET_MEMBER(toaplan2_state,bgaregga)
+MACHINE_RESET_MEMBER(truxton2_state, bgaregga)
{
- MACHINE_RESET_CALL_MEMBER(toaplan2);
+ toaplan2_state::machine_reset();
for (int chip = 0; chip < 2; chip++)
{
for (int i = 0; i < 8; i++)
@@ -468,7 +465,7 @@ void toaplan2_state::init_dogyuun()
}
-void toaplan2_state::init_fixeight()
+void truxton2_state::init_fixeight()
{
m_sound_reset_bit = 0x08;
}
@@ -501,7 +498,7 @@ void toaplan2_state::init_pipibibsbl()
}
}
-void toaplan2_state::install_raizing_okibank(int chip)
+void truxton2_state::install_raizing_okibank(int chip)
{
assert(m_oki_rom[chip] && m_raizing_okibank[chip][0]);
@@ -516,7 +513,7 @@ void toaplan2_state::install_raizing_okibank(int chip)
}
}
-void toaplan2_state::init_bgaregga()
+void truxton2_state::init_bgaregga()
{
u8 *Z80 = memregion("audiocpu")->base();
@@ -526,7 +523,7 @@ void toaplan2_state::init_bgaregga()
}
-void toaplan2_state::init_batrider()
+void truxton2_state::init_batrider()
{
u8 *Z80 = memregion("audiocpu")->base();
@@ -537,7 +534,7 @@ void toaplan2_state::init_batrider()
}
-void toaplan2_state::init_bbakraid()
+void truxton2_state::init_bbakraid()
{
m_sndirq_line = 2;
}
@@ -622,7 +619,7 @@ void toaplan2_state::coin_w(u8 data)
}
}
-void toaplan2_state::pwrkick_coin_w(u8 data)
+void pwrkick_state::pwrkick_coin_w(u8 data)
{
machine().bookkeeping().coin_counter_w(0, BIT(data, 1)); // medal
machine().bookkeeping().coin_counter_w(1, BIT(data, 3)); // 10 yen
@@ -630,7 +627,7 @@ void toaplan2_state::pwrkick_coin_w(u8 data)
m_hopper->motor_w(BIT(data, 7));
}
-void toaplan2_state::pwrkick_coin_lockout_w(u8 data)
+void pwrkick_state::pwrkick_coin_lockout_w(u8 data)
{
machine().bookkeeping().coin_lockout_w(0, BIT(~data, 2));
machine().bookkeeping().coin_lockout_w(1, BIT(~data, 2));
@@ -647,7 +644,7 @@ void toaplan2_state::coin_sound_reset_w(u8 data)
}
-void toaplan2_state::shippumd_coin_w(u8 data)
+void truxton2_state::shippumd_coin_w(u8 data)
{
coin_w(data & ~0x10);
m_oki[0]->set_rom_bank(BIT(data, 4));
@@ -666,37 +663,27 @@ void toaplan2_state::shared_ram_w(offs_t offset, u8 data)
}
-READ_LINE_MEMBER(toaplan2_state::c2map_r)
+int toaplan2_state::c2map_r()
{
// For Teki Paki hardware
// bit 4 high signifies secondary CPU is ready
// bit 5 is tested low before V-Blank bit ???
- return m_soundlatch->pending_r() ? 0x00 : 0x01;
+ return m_soundlatch[0]->pending_r() ? 0x00 : 0x01;
}
-u16 toaplan2_state::ghox_p1_h_analog_r()
+template<unsigned Which>
+u16 ghox_state::ghox_h_analog_r()
{
- const s8 new_value = m_io_pad[0]->read();
- if (new_value == m_old_p1_paddle_h) return 0;
- const s8 value = new_value - m_old_p1_paddle_h;
+ const s8 new_value = m_io_pad[Which]->read();
+ const s8 result = new_value - m_old_paddle_h[Which];
if (!machine().side_effects_disabled())
- m_old_p1_paddle_h = new_value;
- return value;
+ m_old_paddle_h[Which] = new_value;
+ return result;
}
-u16 toaplan2_state::ghox_p2_h_analog_r()
-{
- const s8 new_value = m_io_pad[1]->read();
- if (new_value == m_old_p2_paddle_h) return 0;
- const s8 value = new_value - m_old_p2_paddle_h;
- if (!machine().side_effects_disabled())
- m_old_p2_paddle_h = new_value;
- return value;
-}
-
void toaplan2_state::sound_reset_w(u8 data)
{
m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & m_sound_reset_bit) ? CLEAR_LINE : ASSERT_LINE);
@@ -720,7 +707,7 @@ void toaplan2_state::fixeightbl_oki_bankswitch_w(u8 data)
***************************************************************************/
-void toaplan2_state::raizing_z80_bankswitch_w(u8 data)
+void truxton2_state::raizing_z80_bankswitch_w(u8 data)
{
m_audiobank->set_entry(data & 0x0f);
}
@@ -731,7 +718,7 @@ void toaplan2_state::raizing_z80_bankswitch_w(u8 data)
// it may not be a coincidence that the composer and sound designer for
// these two games, Manabu "Santaruru" Namiki, came to Raizing from NMK...
-void toaplan2_state::raizing_oki_bankswitch_w(offs_t offset, u8 data)
+void truxton2_state::raizing_oki_bankswitch_w(offs_t offset, u8 data)
{
m_raizing_okibank[(offset & 4) >> 2][offset & 3]->set_entry(data & 0xf);
m_raizing_okibank[(offset & 4) >> 2][4 + (offset & 3)]->set_entry(data & 0xf);
@@ -742,15 +729,15 @@ void toaplan2_state::raizing_oki_bankswitch_w(offs_t offset, u8 data)
}
-u8 toaplan2_state::bgaregga_E01D_r()
+u8 truxton2_state::bgaregga_E01D_r()
{
// the Z80 reads this address during its IRQ routine,
// and reads the soundlatch only if the lowest bit is clear.
- return m_soundlatch->pending_r() ? 0 : 1;
+ return m_soundlatch[0]->pending_r() ? 0 : 1;
}
-u16 toaplan2_state::batrider_z80_busack_r()
+u16 truxton2_state::batrider_z80_busack_r()
{
// Bit 0x01 returns the status of BUSAK from the Z80.
// These accesses are made when the 68K wants to read the Z80
@@ -760,39 +747,39 @@ u16 toaplan2_state::batrider_z80_busack_r()
}
-void toaplan2_state::batrider_z80_busreq_w(u8 data)
+void truxton2_state::batrider_z80_busreq_w(u8 data)
{
m_z80_busreq = (data & 0x01); // see batrider_z80_busack_r above
}
-u16 toaplan2_state::batrider_z80rom_r(offs_t offset)
+u16 truxton2_state::batrider_z80rom_r(offs_t offset)
{
return m_z80_rom[offset];
}
// these two latches are always written together, via a single move.l instruction
-void toaplan2_state::batrider_soundlatch_w(u8 data)
+void truxton2_state::batrider_soundlatch_w(u8 data)
{
- m_soundlatch->write(data & 0xff);
+ m_soundlatch[0]->write(data & 0xff);
m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
}
-void toaplan2_state::batrider_soundlatch2_w(u8 data)
+void truxton2_state::batrider_soundlatch2_w(u8 data)
{
- m_soundlatch2->write(data & 0xff);
+ m_soundlatch[1]->write(data & 0xff);
m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
}
-void toaplan2_state::batrider_unknown_sound_w(u16 data)
+void truxton2_state::batrider_unknown_sound_w(u16 data)
{
// the 68K writes here when it wants a sound acknowledge IRQ from the Z80
// for bbakraid this is on every sound command; for batrider, only on certain commands
}
-void toaplan2_state::batrider_clear_sndirq_w(u16 data)
+void truxton2_state::batrider_clear_sndirq_w(u16 data)
{
// not sure whether this is correct
// the 68K writes here during the sound IRQ handler, and nowhere else...
@@ -800,20 +787,20 @@ void toaplan2_state::batrider_clear_sndirq_w(u16 data)
}
-void toaplan2_state::batrider_sndirq_w(u8 data)
+void truxton2_state::batrider_sndirq_w(u8 data)
{
// if batrider_clear_sndirq_w() is correct, should this be ASSERT_LINE?
m_maincpu->set_input_line(m_sndirq_line, HOLD_LINE);
}
-void toaplan2_state::batrider_clear_nmi_w(u8 data)
+void truxton2_state::batrider_clear_nmi_w(u8 data)
{
m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
}
-u16 toaplan2_state::bbakraid_eeprom_r()
+u16 truxton2_state::bbakraid_eeprom_r()
{
// Bit 0x01 returns the status of BUSAK from the Z80.
// BUSRQ is activated via bit 0x10 on the EEPROM write port.
@@ -828,7 +815,7 @@ u16 toaplan2_state::bbakraid_eeprom_r()
}
-void toaplan2_state::bbakraid_eeprom_w(u8 data)
+void truxton2_state::bbakraid_eeprom_w(u8 data)
{
if (data & ~0x1f)
logerror("CPU #0 PC:%06X - Unknown EEPROM data being written %02X\n",m_maincpu->pc(),data);
@@ -839,7 +826,7 @@ void toaplan2_state::bbakraid_eeprom_w(u8 data)
}
-INTERRUPT_GEN_MEMBER(toaplan2_state::bbakraid_snd_interrupt)
+INTERRUPT_GEN_MEMBER(truxton2_state::bbakraid_snd_interrupt)
{
device.execute().set_input_line(0, HOLD_LINE);
}
@@ -859,20 +846,20 @@ void toaplan2_state::tekipaki_68k_mem(address_map &map)
map(0x180041, 0x180041).w(FUNC(toaplan2_state::coin_w));
map(0x180050, 0x180051).portr("IN1");
map(0x180060, 0x180061).portr("IN2");
- map(0x180071, 0x180071).w(m_soundlatch, FUNC(generic_latch_8_device::write));
+ map(0x180071, 0x180071).w(m_soundlatch[0], FUNC(generic_latch_8_device::write));
}
-void toaplan2_state::ghox_68k_mem(address_map &map)
+void ghox_state::ghox_68k_mem(address_map &map)
{
map(0x000000, 0x03ffff).rom();
- map(0x040000, 0x040001).r(FUNC(toaplan2_state::ghox_p2_h_analog_r));
+ map(0x040000, 0x040001).r(FUNC(ghox_state::ghox_h_analog_r<1>));
map(0x080000, 0x083fff).ram();
map(0x0c0000, 0x0c0fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
- map(0x100000, 0x100001).r(FUNC(toaplan2_state::ghox_p1_h_analog_r));
+ map(0x100000, 0x100001).r(FUNC(ghox_state::ghox_h_analog_r<0>));
map(0x140000, 0x14000d).rw(m_vdp[0], FUNC(gp9001vdp_device::read), FUNC(gp9001vdp_device::write));
- map(0x180000, 0x180fff).rw(FUNC(toaplan2_state::shared_ram_r), FUNC(toaplan2_state::shared_ram_w)).umask16(0x00ff);
- map(0x181001, 0x181001).w(FUNC(toaplan2_state::coin_w));
+ map(0x180000, 0x180fff).rw(FUNC(ghox_state::shared_ram_r), FUNC(ghox_state::shared_ram_w)).umask16(0x00ff);
+ map(0x181001, 0x181001).w(FUNC(ghox_state::coin_w));
map(0x18100c, 0x18100d).portr("JMPR");
}
@@ -893,6 +880,24 @@ void toaplan2_state::dogyuun_68k_mem(address_map &map)
}
+void toaplan2_state::dogyuunto_68k_mem(address_map &map)
+{
+ map(0x000000, 0x07ffff).rom();
+ map(0x100000, 0x103fff).ram();
+ map(0x218000, 0x218fff).rw(FUNC(toaplan2_state::shared_ram_r), FUNC(toaplan2_state::shared_ram_w)).umask16(0x00ff); // reads the same area as the finished game on startup, but then uses only this part
+ map(0x21c01d, 0x21c01d).w(FUNC(toaplan2_state::coin_sound_reset_w)); // Coin count/lock + Z80 reset line
+ map(0x21c020, 0x21c021).portr("IN1");
+ map(0x21c024, 0x21c025).portr("IN2");
+ map(0x21c028, 0x21c029).portr("SYS");
+ map(0x21c02c, 0x21c02d).portr("DSWA");
+ map(0x21c030, 0x21c031).portr("DSWB");
+ map(0x300000, 0x30000d).rw(m_vdp[0], FUNC(gp9001vdp_device::read), FUNC(gp9001vdp_device::write));
+ map(0x400000, 0x400fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
+ map(0x500000, 0x50000d).rw(m_vdp[1], FUNC(gp9001vdp_device::read), FUNC(gp9001vdp_device::write));
+ map(0x700000, 0x700001).r(FUNC(toaplan2_state::video_count_r)); // test bit 8
+}
+
+
void toaplan2_state::kbash_68k_mem(address_map &map)
{
map(0x000000, 0x07ffff).rom();
@@ -930,18 +935,18 @@ void toaplan2_state::kbash2_68k_mem(address_map &map)
}
-void toaplan2_state::truxton2_68k_mem(address_map &map)
+void truxton2_state::truxton2_68k_mem(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x10ffff).ram();
map(0x200000, 0x20000d).rw(m_vdp[0], FUNC(gp9001vdp_device::read), FUNC(gp9001vdp_device::write));
map(0x300000, 0x300fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
- map(0x400000, 0x401fff).ram().w(FUNC(toaplan2_state::tx_videoram_w)).share("tx_videoram");
- map(0x402000, 0x402fff).ram().share("tx_lineselect");
- map(0x403000, 0x4031ff).ram().w(FUNC(toaplan2_state::tx_linescroll_w)).share("tx_linescroll");
+ map(0x400000, 0x401fff).ram().w(FUNC(truxton2_state::tx_videoram_w)).share(m_tx_videoram);
+ map(0x402000, 0x402fff).ram().share(m_tx_lineselect);
+ map(0x403000, 0x4031ff).ram().w(FUNC(truxton2_state::tx_linescroll_w)).share(m_tx_linescroll);
map(0x403200, 0x403fff).ram();
- map(0x500000, 0x50ffff).ram().w(FUNC(toaplan2_state::tx_gfxram_w)).share("tx_gfxram");
- map(0x600000, 0x600001).r(FUNC(toaplan2_state::video_count_r));
+ map(0x500000, 0x50ffff).ram().w(FUNC(truxton2_state::tx_gfxram_w)).share(m_tx_gfxram);
+ map(0x600000, 0x600001).r(FUNC(truxton2_state::video_count_r));
map(0x700000, 0x700001).portr("DSWA");
map(0x700002, 0x700003).portr("DSWB");
map(0x700004, 0x700005).portr("JMPR");
@@ -950,7 +955,7 @@ void toaplan2_state::truxton2_68k_mem(address_map &map)
map(0x70000a, 0x70000b).portr("SYS");
map(0x700011, 0x700011).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x700014, 0x700017).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)).umask16(0x00ff);
- map(0x70001f, 0x70001f).w(FUNC(toaplan2_state::coin_w));
+ map(0x70001f, 0x70001f).w(FUNC(truxton2_state::coin_w));
}
@@ -975,13 +980,13 @@ void toaplan2_state::pipibibi_bootleg_68k_mem(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x080000, 0x082fff).ram();
- map(0x083000, 0x0837ff).rw(m_vdp[0], FUNC(gp9001vdp_device::pipibibi_bootleg_spriteram16_r), FUNC(gp9001vdp_device::pipibibi_bootleg_spriteram16_w)); // SpriteRAM
+ map(0x083000, 0x0837ff).rw(m_vdp[0], FUNC(gp9001vdp_device::bootleg_spriteram16_r), FUNC(gp9001vdp_device::bootleg_spriteram16_w)); // SpriteRAM
map(0x083800, 0x087fff).ram(); // SpriteRAM (unused)
map(0x0c0000, 0x0c0fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x120000, 0x120fff).ram(); // Copy of SpriteRAM ?
// map(0x13f000, 0x13f001).nopw(); // ???
- map(0x180000, 0x182fff).rw(m_vdp[0], FUNC(gp9001vdp_device::pipibibi_bootleg_videoram16_r), FUNC(gp9001vdp_device::pipibibi_bootleg_videoram16_w)); // TileRAM
- map(0x188000, 0x18800f).w(m_vdp[0], FUNC(gp9001vdp_device::pipibibi_bootleg_scroll_w));
+ map(0x180000, 0x182fff).rw(m_vdp[0], FUNC(gp9001vdp_device::bootleg_videoram16_r), FUNC(gp9001vdp_device::bootleg_videoram16_w)); // TileRAM
+ map(0x188000, 0x18800f).w(m_vdp[0], FUNC(gp9001vdp_device::bootleg_scroll_w));
map(0x190003, 0x190003).r(FUNC(toaplan2_state::shared_ram_r)); // Z80 ready ?
map(0x190011, 0x190011).w(FUNC(toaplan2_state::shared_ram_w)); // Z80 task to perform
map(0x19c01d, 0x19c01d).w(FUNC(toaplan2_state::coin_w));
@@ -994,7 +999,7 @@ void toaplan2_state::pipibibi_bootleg_68k_mem(address_map &map)
}
-void toaplan2_state::fixeight_68k_mem(address_map &map)
+void truxton2_state::fixeight_68k_mem(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x103fff).ram();
@@ -1002,20 +1007,20 @@ void toaplan2_state::fixeight_68k_mem(address_map &map)
map(0x200004, 0x200005).portr("IN2");
map(0x200008, 0x200009).portr("IN3");
map(0x200010, 0x200011).portr("SYS");
- map(0x20001d, 0x20001d).w(FUNC(toaplan2_state::coin_w));
- map(0x280000, 0x28ffff).rw(FUNC(toaplan2_state::shared_ram_r), FUNC(toaplan2_state::shared_ram_w)).umask16(0x00ff);
+ map(0x20001d, 0x20001d).w(FUNC(truxton2_state::coin_w));
+ map(0x280000, 0x28ffff).rw(FUNC(truxton2_state::shared_ram_r), FUNC(truxton2_state::shared_ram_w)).umask16(0x00ff);
map(0x300000, 0x30000d).rw(m_vdp[0], FUNC(gp9001vdp_device::read), FUNC(gp9001vdp_device::write));
map(0x400000, 0x400fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
- map(0x500000, 0x501fff).ram().w(FUNC(toaplan2_state::tx_videoram_w)).share("tx_videoram");
- map(0x502000, 0x5021ff).ram().share("tx_lineselect");
- map(0x503000, 0x5031ff).ram().w(FUNC(toaplan2_state::tx_linescroll_w)).share("tx_linescroll");
- map(0x600000, 0x60ffff).ram().w(FUNC(toaplan2_state::tx_gfxram_w)).share("tx_gfxram");
- map(0x700000, 0x700001).w(FUNC(toaplan2_state::sound_reset_w)).umask16(0x00ff).cswidth(16);
- map(0x800000, 0x800001).r(FUNC(toaplan2_state::video_count_r));
+ map(0x500000, 0x501fff).ram().w(FUNC(truxton2_state::tx_videoram_w)).share(m_tx_videoram);
+ map(0x502000, 0x5021ff).ram().share(m_tx_lineselect);
+ map(0x503000, 0x5031ff).ram().w(FUNC(truxton2_state::tx_linescroll_w)).share(m_tx_linescroll);
+ map(0x600000, 0x60ffff).ram().w(FUNC(truxton2_state::tx_gfxram_w)).share(m_tx_gfxram);
+ map(0x700000, 0x700001).w(FUNC(truxton2_state::sound_reset_w)).umask16(0x00ff).cswidth(16);
+ map(0x800000, 0x800001).r(FUNC(truxton2_state::video_count_r));
}
-void toaplan2_state::fixeightbl_68k_mem(address_map &map)
+void truxton2_state::fixeightbl_68k_mem(address_map &map)
{
map(0x000000, 0x0fffff).rom(); // 0-7ffff ?
map(0x100000, 0x10ffff).ram(); // 100000-107fff 105000-105xxx 106000-106xxx 108000 - related to sound ?
@@ -1024,13 +1029,13 @@ void toaplan2_state::fixeightbl_68k_mem(address_map &map)
map(0x200008, 0x200009).portr("IN3");
map(0x20000c, 0x20000d).portr("DSWB");
map(0x200010, 0x200011).portr("SYS");
- map(0x200015, 0x200015).w(FUNC(toaplan2_state::fixeightbl_oki_bankswitch_w)); // Sound banking. Code at $4084c, $5070
+ map(0x200015, 0x200015).w(FUNC(truxton2_state::fixeightbl_oki_bankswitch_w)); // Sound banking. Code at $4084c, $5070
map(0x200019, 0x200019).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x20001c, 0x20001d).portr("DSWA");
map(0x300000, 0x30000d).rw(m_vdp[0], FUNC(gp9001vdp_device::read), FUNC(gp9001vdp_device::write));
map(0x400000, 0x400fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
- map(0x500000, 0x501fff).ram().w(FUNC(toaplan2_state::tx_videoram_w)).share("tx_videoram");
- map(0x700000, 0x700001).r(FUNC(toaplan2_state::video_count_r));
+ map(0x500000, 0x501fff).ram().w(FUNC(truxton2_state::tx_videoram_w)).share(m_tx_videoram);
+ map(0x700000, 0x700001).r(FUNC(truxton2_state::video_count_r));
map(0x800000, 0x87ffff).rom().region("maincpu", 0x80000);
}
@@ -1086,7 +1091,7 @@ void toaplan2_state::batsugunbl_68k_mem(address_map &map)
map(0x700000, 0x700001).r(FUNC(toaplan2_state::video_count_r));
}
-void toaplan2_state::pwrkick_68k_mem(address_map &map)
+void pwrkick_state::pwrkick_68k_mem(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x103fff).ram().share("nvram"); // Only 10022C-10037B is actually saved as NVRAM
@@ -1097,19 +1102,19 @@ void toaplan2_state::pwrkick_68k_mem(address_map &map)
map(0x400000, 0x400fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x600001, 0x600001).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x700000, 0x700001).r(FUNC(toaplan2_state::video_count_r));
+ map(0x700000, 0x700001).r(FUNC(pwrkick_state::video_count_r));
map(0x700004, 0x700005).portr("DSWA");
map(0x700008, 0x700009).portr("DSWB");
map(0x70000c, 0x70000d).portr("IN1");
map(0x700014, 0x700015).portr("IN2");
map(0x700018, 0x700019).portr("DSWC");
map(0x70001c, 0x70001d).portr("SYS");
- map(0x700031, 0x700031).w(FUNC(toaplan2_state::oki_bankswitch_w<0>));
- map(0x700035, 0x700035).w(FUNC(toaplan2_state::pwrkick_coin_w));
- map(0x700039, 0x700039).w(FUNC(toaplan2_state::pwrkick_coin_lockout_w));
+ map(0x700031, 0x700031).w(FUNC(pwrkick_state::oki_bankswitch_w<0>));
+ map(0x700035, 0x700035).w(FUNC(pwrkick_state::pwrkick_coin_w));
+ map(0x700039, 0x700039).w(FUNC(pwrkick_state::pwrkick_coin_lockout_w));
}
-void toaplan2_state::othldrby_68k_mem(address_map &map)
+void pwrkick_state::othldrby_68k_mem(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x103fff).ram().share("nvram"); // Only 10331E-103401 is actually saved as NVRAM
@@ -1120,14 +1125,14 @@ void toaplan2_state::othldrby_68k_mem(address_map &map)
map(0x400000, 0x400fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x600001, 0x600001).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x700000, 0x700001).r(FUNC(toaplan2_state::video_count_r));
+ map(0x700000, 0x700001).r(FUNC(pwrkick_state::video_count_r));
map(0x700004, 0x700005).portr("DSWA");
map(0x700008, 0x700009).portr("DSWB");
map(0x70000c, 0x70000d).portr("IN1");
map(0x700010, 0x700011).portr("IN2");
map(0x70001c, 0x70001d).portr("SYS");
- map(0x700031, 0x700031).w(FUNC(toaplan2_state::oki_bankswitch_w<0>));
- map(0x700035, 0x700035).w(FUNC(toaplan2_state::coin_w));
+ map(0x700031, 0x700031).w(FUNC(pwrkick_state::oki_bankswitch_w<0>));
+ map(0x700035, 0x700035).w(FUNC(pwrkick_state::coin_w));
}
@@ -1192,150 +1197,170 @@ void toaplan2_state::snowbro2_68k_mem(address_map &map)
map(0x700035, 0x700035).w(FUNC(toaplan2_state::coin_w));
}
+void toaplan2_state::snowbro2b3_68k_mem(address_map &map)
+{
+ map(0x000000, 0x07ffff).rom();
+ map(0x100000, 0x10ffff).ram();
+ map(0x404000, 0x404fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
+ map(0x500000, 0x500003).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)).umask16(0x00ff);
+ map(0x600001, 0x600001).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+ map(0x700004, 0x700005).portr("DSWA");
+ map(0x700008, 0x700009).portr("DSWB");
+ map(0x70000c, 0x70000d).portr("IN1");
+ map(0x700010, 0x700011).portr("IN2");
+ map(0x700014, 0x700015).portr("IN3");
+ map(0x700018, 0x700019).portr("IN4");
+ map(0x700035, 0x700035).w(FUNC(toaplan2_state::coin_w));
+ map(0x700041, 0x700041).w(FUNC(toaplan2_state::oki_bankswitch_w<0>));
+ map(0xff0000, 0xff2fff).rw(m_vdp[0], FUNC(gp9001vdp_device::bootleg_videoram16_r), FUNC(gp9001vdp_device::bootleg_videoram16_w));
+ map(0xff3000, 0xff37ff).rw(m_vdp[0], FUNC(gp9001vdp_device::bootleg_spriteram16_r), FUNC(gp9001vdp_device::bootleg_spriteram16_w));
+ map(0xff8000, 0xff800f).w(m_vdp[0], FUNC(gp9001vdp_device::bootleg_scroll_w));
+}
+
-void toaplan2_state::mahoudai_68k_mem(address_map &map)
+void truxton2_state::mahoudai_68k_mem(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x10ffff).ram();
- map(0x218000, 0x21bfff).rw(FUNC(toaplan2_state::shared_ram_r), FUNC(toaplan2_state::shared_ram_w)).umask16(0x00ff);
- map(0x21c01d, 0x21c01d).w(FUNC(toaplan2_state::coin_w));
+ map(0x218000, 0x21bfff).rw(FUNC(truxton2_state::shared_ram_r), FUNC(truxton2_state::shared_ram_w)).umask16(0x00ff);
+ map(0x21c01d, 0x21c01d).w(FUNC(truxton2_state::coin_w));
map(0x21c020, 0x21c021).portr("IN1");
map(0x21c024, 0x21c025).portr("IN2");
map(0x21c028, 0x21c029).portr("SYS");
map(0x21c02c, 0x21c02d).portr("DSWA");
map(0x21c030, 0x21c031).portr("DSWB");
map(0x21c034, 0x21c035).portr("JMPR");
- map(0x21c03c, 0x21c03d).r(FUNC(toaplan2_state::video_count_r));
+ map(0x21c03c, 0x21c03d).r(FUNC(truxton2_state::video_count_r));
map(0x300000, 0x30000d).rw(m_vdp[0], FUNC(gp9001vdp_device::read), FUNC(gp9001vdp_device::write));
map(0x400000, 0x400fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x401000, 0x4017ff).ram(); // Unused palette RAM
- map(0x500000, 0x501fff).ram().w(FUNC(toaplan2_state::tx_videoram_w)).share("tx_videoram");
- map(0x502000, 0x502fff).ram().share("tx_lineselect");
- map(0x503000, 0x5031ff).ram().w(FUNC(toaplan2_state::tx_linescroll_w)).share("tx_linescroll");
+ map(0x500000, 0x501fff).ram().w(FUNC(truxton2_state::tx_videoram_w)).share(m_tx_videoram);
+ map(0x502000, 0x502fff).ram().share(m_tx_lineselect);
+ map(0x503000, 0x5031ff).ram().w(FUNC(truxton2_state::tx_linescroll_w)).share(m_tx_linescroll);
map(0x503200, 0x503fff).ram();
}
-void toaplan2_state::shippumd_68k_mem(address_map &map)
+void truxton2_state::shippumd_68k_mem(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0x100000, 0x10ffff).ram();
- map(0x218000, 0x21bfff).rw(FUNC(toaplan2_state::shared_ram_r), FUNC(toaplan2_state::shared_ram_w)).umask16(0x00ff);
+ map(0x218000, 0x21bfff).rw(FUNC(truxton2_state::shared_ram_r), FUNC(truxton2_state::shared_ram_w)).umask16(0x00ff);
// map(0x21c008, 0x21c009).nopw(); // ???
- map(0x21c01d, 0x21c01d).w(FUNC(toaplan2_state::shippumd_coin_w)); // Coin count/lock + oki bankswitch
+ map(0x21c01d, 0x21c01d).w(FUNC(truxton2_state::shippumd_coin_w)); // Coin count/lock + oki bankswitch
map(0x21c020, 0x21c021).portr("IN1");
map(0x21c024, 0x21c025).portr("IN2");
map(0x21c028, 0x21c029).portr("SYS");
map(0x21c02c, 0x21c02d).portr("DSWA");
map(0x21c030, 0x21c031).portr("DSWB");
map(0x21c034, 0x21c035).portr("JMPR");
- map(0x21c03c, 0x21c03d).r(FUNC(toaplan2_state::video_count_r));
+ map(0x21c03c, 0x21c03d).r(FUNC(truxton2_state::video_count_r));
map(0x300000, 0x30000d).rw(m_vdp[0], FUNC(gp9001vdp_device::read), FUNC(gp9001vdp_device::write));
map(0x400000, 0x400fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x401000, 0x4017ff).ram(); // Unused palette RAM
- map(0x500000, 0x501fff).ram().w(FUNC(toaplan2_state::tx_videoram_w)).share("tx_videoram");
- map(0x502000, 0x502fff).ram().share("tx_lineselect");
- map(0x503000, 0x5031ff).ram().w(FUNC(toaplan2_state::tx_linescroll_w)).share("tx_linescroll");
+ map(0x500000, 0x501fff).ram().w(FUNC(truxton2_state::tx_videoram_w)).share(m_tx_videoram);
+ map(0x502000, 0x502fff).ram().share(m_tx_lineselect);
+ map(0x503000, 0x5031ff).ram().w(FUNC(truxton2_state::tx_linescroll_w)).share(m_tx_linescroll);
map(0x503200, 0x503fff).ram();
}
-void toaplan2_state::bgaregga_68k_mem(address_map &map)
+void truxton2_state::bgaregga_68k_mem(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0x100000, 0x10ffff).ram();
- map(0x218000, 0x21bfff).rw(FUNC(toaplan2_state::shared_ram_r), FUNC(toaplan2_state::shared_ram_w)).umask16(0x00ff);
- map(0x21c01d, 0x21c01d).w(FUNC(toaplan2_state::coin_w));
+ map(0x218000, 0x21bfff).rw(FUNC(truxton2_state::shared_ram_r), FUNC(truxton2_state::shared_ram_w)).umask16(0x00ff);
+ map(0x21c01d, 0x21c01d).w(FUNC(truxton2_state::coin_w));
map(0x21c020, 0x21c021).portr("IN1");
map(0x21c024, 0x21c025).portr("IN2");
map(0x21c028, 0x21c029).portr("SYS");
map(0x21c02c, 0x21c02d).portr("DSWA");
map(0x21c030, 0x21c031).portr("DSWB");
map(0x21c034, 0x21c035).portr("JMPR");
- map(0x21c03c, 0x21c03d).r(FUNC(toaplan2_state::video_count_r));
+ map(0x21c03c, 0x21c03d).r(FUNC(truxton2_state::video_count_r));
map(0x300000, 0x30000d).rw(m_vdp[0], FUNC(gp9001vdp_device::read), FUNC(gp9001vdp_device::write));
map(0x400000, 0x400fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
- map(0x500000, 0x501fff).ram().w(FUNC(toaplan2_state::tx_videoram_w)).share("tx_videoram");
- map(0x502000, 0x502fff).ram().share("tx_lineselect");
- map(0x503000, 0x5031ff).ram().w(FUNC(toaplan2_state::tx_linescroll_w)).share("tx_linescroll");
+ map(0x500000, 0x501fff).ram().w(FUNC(truxton2_state::tx_videoram_w)).share(m_tx_videoram);
+ map(0x502000, 0x502fff).ram().share(m_tx_lineselect);
+ map(0x503000, 0x5031ff).ram().w(FUNC(truxton2_state::tx_linescroll_w)).share(m_tx_linescroll);
map(0x503200, 0x503fff).ram();
- map(0x600001, 0x600001).w(m_soundlatch, FUNC(generic_latch_8_device::write));
+ map(0x600001, 0x600001).w(m_soundlatch[0], FUNC(generic_latch_8_device::write));
}
-void toaplan2_state::batrider_dma_mem(address_map &map)
+void truxton2_state::batrider_dma_mem(address_map &map)
{
- map(0x0000, 0x1fff).ram().w(FUNC(toaplan2_state::tx_videoram_w)).share("tx_videoram");
+ map(0x0000, 0x1fff).ram().w(FUNC(truxton2_state::tx_videoram_w)).share(m_tx_videoram);
map(0x2000, 0x2fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
- map(0x3000, 0x31ff).ram().share("tx_lineselect");
- map(0x3200, 0x33ff).ram().w(FUNC(toaplan2_state::tx_linescroll_w)).share("tx_linescroll");
+ map(0x3000, 0x31ff).ram().share(m_tx_lineselect);
+ map(0x3200, 0x33ff).ram().w(FUNC(truxton2_state::tx_linescroll_w)).share(m_tx_linescroll);
map(0x3400, 0x7fff).ram();
- map(0x8000, 0xffff).ram().w(FUNC(toaplan2_state::batrider_tx_gfxram_w)).share("tx_gfxram");
+ map(0x8000, 0xffff).ram().w(FUNC(truxton2_state::batrider_tx_gfxram_w)).share(m_tx_gfxram);
}
-void toaplan2_state::batrider_68k_mem(address_map &map)
+void truxton2_state::batrider_68k_mem(address_map &map)
{
map(0x000000, 0x1fffff).rom();
// actually 200000 - 20ffff is probably all main RAM, and the text and palette RAM are written via DMA
- map(0x200000, 0x207fff).ram().share("mainram");
+ map(0x200000, 0x207fff).ram().share(m_mainram);
map(0x208000, 0x20ffff).ram();
- map(0x300000, 0x37ffff).r(FUNC(toaplan2_state::batrider_z80rom_r));
+ map(0x300000, 0x37ffff).r(FUNC(truxton2_state::batrider_z80rom_r));
map(0x400000, 0x40000d).lrw16(
NAME([this](offs_t offset, u16 mem_mask) { return m_vdp[0]->read(offset ^ (0xc/2), mem_mask); }),
NAME([this](offs_t offset, u16 data, u16 mem_mask) { m_vdp[0]->write(offset ^ (0xc/2), data, mem_mask); }));
map(0x500000, 0x500001).portr("IN");
map(0x500002, 0x500003).portr("SYS-DSW");
map(0x500004, 0x500005).portr("DSW");
- map(0x500006, 0x500007).r(FUNC(toaplan2_state::video_count_r));
- map(0x500009, 0x500009).r("soundlatch3", FUNC(generic_latch_8_device::read));
- map(0x50000b, 0x50000b).r("soundlatch4", FUNC(generic_latch_8_device::read));
- map(0x50000c, 0x50000d).r(FUNC(toaplan2_state::batrider_z80_busack_r));
- map(0x500011, 0x500011).w(FUNC(toaplan2_state::coin_w));
- map(0x500021, 0x500021).w(FUNC(toaplan2_state::batrider_soundlatch_w));
- map(0x500023, 0x500023).w(FUNC(toaplan2_state::batrider_soundlatch2_w));
- map(0x500024, 0x500025).w(FUNC(toaplan2_state::batrider_unknown_sound_w));
- map(0x500026, 0x500027).w(FUNC(toaplan2_state::batrider_clear_sndirq_w));
- map(0x500061, 0x500061).w(FUNC(toaplan2_state::batrider_z80_busreq_w));
- map(0x500080, 0x500081).w(FUNC(toaplan2_state::batrider_textdata_dma_w));
- map(0x500082, 0x500083).w(FUNC(toaplan2_state::batrider_pal_text_dma_w));
- map(0x5000c0, 0x5000cf).w(FUNC(toaplan2_state::batrider_objectbank_w)).umask16(0x00ff);
+ map(0x500006, 0x500007).r(FUNC(truxton2_state::video_count_r));
+ map(0x500009, 0x500009).r(m_soundlatch[2], FUNC(generic_latch_8_device::read));
+ map(0x50000b, 0x50000b).r(m_soundlatch[3], FUNC(generic_latch_8_device::read));
+ map(0x50000c, 0x50000d).r(FUNC(truxton2_state::batrider_z80_busack_r));
+ map(0x500011, 0x500011).w(FUNC(truxton2_state::coin_w));
+ map(0x500021, 0x500021).w(FUNC(truxton2_state::batrider_soundlatch_w));
+ map(0x500023, 0x500023).w(FUNC(truxton2_state::batrider_soundlatch2_w));
+ map(0x500024, 0x500025).w(FUNC(truxton2_state::batrider_unknown_sound_w));
+ map(0x500026, 0x500027).w(FUNC(truxton2_state::batrider_clear_sndirq_w));
+ map(0x500061, 0x500061).w(FUNC(truxton2_state::batrider_z80_busreq_w));
+ map(0x500080, 0x500081).w(FUNC(truxton2_state::batrider_textdata_dma_w));
+ map(0x500082, 0x500083).w(FUNC(truxton2_state::batrider_pal_text_dma_w));
+ map(0x5000c0, 0x5000cf).w(FUNC(truxton2_state::batrider_objectbank_w)).umask16(0x00ff);
}
-void toaplan2_state::bbakraid_68k_mem(address_map &map)
+void truxton2_state::bbakraid_68k_mem(address_map &map)
{
map(0x000000, 0x1fffff).rom();
// actually 200000 - 20ffff is probably all main RAM, and the text and palette RAM are written via DMA
- map(0x200000, 0x207fff).ram().share("mainram");
+ map(0x200000, 0x207fff).ram().share(m_mainram);
map(0x208000, 0x20ffff).ram();
- map(0x300000, 0x33ffff).r(FUNC(toaplan2_state::batrider_z80rom_r));
+ map(0x300000, 0x33ffff).r(FUNC(truxton2_state::batrider_z80rom_r));
map(0x400000, 0x40000d).lrw16(
NAME([this](offs_t offset, u16 mem_mask) { return m_vdp[0]->read(offset ^ (0xc/2), mem_mask); }),
NAME([this](offs_t offset, u16 data, u16 mem_mask) { m_vdp[0]->write(offset ^ (0xc/2), data, mem_mask); }));
map(0x500000, 0x500001).portr("IN");
map(0x500002, 0x500003).portr("SYS-DSW");
map(0x500004, 0x500005).portr("DSW");
- map(0x500006, 0x500007).r(FUNC(toaplan2_state::video_count_r));
- map(0x500009, 0x500009).w(FUNC(toaplan2_state::coin_w));
- map(0x500011, 0x500011).r("soundlatch3", FUNC(generic_latch_8_device::read));
- map(0x500013, 0x500013).r("soundlatch4", FUNC(generic_latch_8_device::read));
- map(0x500015, 0x500015).w(FUNC(toaplan2_state::batrider_soundlatch_w));
- map(0x500017, 0x500017).w(FUNC(toaplan2_state::batrider_soundlatch2_w));
- map(0x500018, 0x500019).r(FUNC(toaplan2_state::bbakraid_eeprom_r));
- map(0x50001a, 0x50001b).w(FUNC(toaplan2_state::batrider_unknown_sound_w));
- map(0x50001c, 0x50001d).w(FUNC(toaplan2_state::batrider_clear_sndirq_w));
- map(0x50001f, 0x50001f).w(FUNC(toaplan2_state::bbakraid_eeprom_w));
- map(0x500080, 0x500081).w(FUNC(toaplan2_state::batrider_textdata_dma_w));
- map(0x500082, 0x500083).w(FUNC(toaplan2_state::batrider_pal_text_dma_w));
- map(0x5000c0, 0x5000cf).w(FUNC(toaplan2_state::batrider_objectbank_w)).umask16(0x00ff);
+ map(0x500006, 0x500007).r(FUNC(truxton2_state::video_count_r));
+ map(0x500009, 0x500009).w(FUNC(truxton2_state::coin_w));
+ map(0x500011, 0x500011).r(m_soundlatch[2], FUNC(generic_latch_8_device::read));
+ map(0x500013, 0x500013).r(m_soundlatch[3], FUNC(generic_latch_8_device::read));
+ map(0x500015, 0x500015).w(FUNC(truxton2_state::batrider_soundlatch_w));
+ map(0x500017, 0x500017).w(FUNC(truxton2_state::batrider_soundlatch2_w));
+ map(0x500018, 0x500019).r(FUNC(truxton2_state::bbakraid_eeprom_r));
+ map(0x50001a, 0x50001b).w(FUNC(truxton2_state::batrider_unknown_sound_w));
+ map(0x50001c, 0x50001d).w(FUNC(truxton2_state::batrider_clear_sndirq_w));
+ map(0x50001f, 0x50001f).w(FUNC(truxton2_state::bbakraid_eeprom_w));
+ map(0x500080, 0x500081).w(FUNC(truxton2_state::batrider_textdata_dma_w));
+ map(0x500082, 0x500083).w(FUNC(truxton2_state::batrider_pal_text_dma_w));
+ map(0x5000c0, 0x5000cf).w(FUNC(truxton2_state::batrider_objectbank_w)).umask16(0x00ff);
}
-void toaplan2_state::nprobowl_68k_mem(address_map &map) // TODO: verify everything, implement oki banking
+void truxton2_state::nprobowl_68k_mem(address_map &map) // TODO: verify everything, implement oki banking
{
map(0x000000, 0x0fffff).rom();
- map(0x200000, 0x207fff).ram().share("mainram");
+ map(0x200000, 0x207fff).ram().share(m_mainram);
map(0x208000, 0x20ffff).ram();
map(0x400000, 0x40000d).lrw16(
NAME([this](offs_t offset, u16 mem_mask) { return m_vdp[0]->read(offset ^ (0xc/2), mem_mask); }),
@@ -1349,138 +1374,147 @@ void toaplan2_state::nprobowl_68k_mem(address_map &map) // TODO: verify everythi
//map(0x500040, 0x500041).w();
//map(0x500042, 0x500043).w();
map(0x500060, 0x500061).lr16(NAME([this] () -> u16 { return machine().rand(); })); // TODO: Hack, probably checks something in the mechanical part, verify
- map(0x500080, 0x500081).w(FUNC(toaplan2_state::batrider_textdata_dma_w));
- map(0x500082, 0x500083).w(FUNC(toaplan2_state::batrider_pal_text_dma_w));
+ map(0x500080, 0x500081).w(FUNC(truxton2_state::batrider_textdata_dma_w));
+ map(0x500082, 0x500083).w(FUNC(truxton2_state::batrider_pal_text_dma_w));
}
void toaplan2_state::pipibibs_sound_z80_mem(address_map &map)
{
map(0x0000, 0x7fff).rom();
- map(0x8000, 0x87ff).ram().share("shared_ram");
+ map(0x8000, 0x87ff).ram().share(m_shared_ram);
map(0xe000, 0xe001).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
}
-void toaplan2_state::raizing_sound_z80_mem(address_map &map)
+void truxton2_state::raizing_sound_z80_mem(address_map &map)
{
map(0x0000, 0xbfff).rom();
- map(0xc000, 0xdfff).ram().share("shared_ram");
+ map(0xc000, 0xdfff).ram().share(m_shared_ram);
map(0xe000, 0xe001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0xe004, 0xe004).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0xe00e, 0xe00e).w(FUNC(toaplan2_state::coin_w));
+ map(0xe00e, 0xe00e).w(FUNC(truxton2_state::coin_w));
}
-void toaplan2_state::bgaregga_sound_z80_mem(address_map &map)
+void truxton2_state::bgaregga_sound_z80_mem(address_map &map)
{
map(0x0000, 0x7fff).rom();
- map(0x8000, 0xbfff).bankr("audiobank");
- map(0xc000, 0xdfff).ram().share("shared_ram");
+ map(0x8000, 0xbfff).bankr(m_audiobank);
+ map(0xc000, 0xdfff).ram().share(m_shared_ram);
map(0xe000, 0xe001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0xe004, 0xe004).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0xe006, 0xe008).w(FUNC(toaplan2_state::raizing_oki_bankswitch_w));
- map(0xe00a, 0xe00a).w(FUNC(toaplan2_state::raizing_z80_bankswitch_w));
- map(0xe00c, 0xe00c).w(m_soundlatch, FUNC(generic_latch_8_device::acknowledge_w));
- map(0xe01c, 0xe01c).r(m_soundlatch, FUNC(generic_latch_8_device::read));
- map(0xe01d, 0xe01d).r(FUNC(toaplan2_state::bgaregga_E01D_r));
+ map(0xe006, 0xe008).w(FUNC(truxton2_state::raizing_oki_bankswitch_w));
+ map(0xe00a, 0xe00a).w(FUNC(truxton2_state::raizing_z80_bankswitch_w));
+ map(0xe00c, 0xe00c).w(m_soundlatch[0], FUNC(generic_latch_8_device::acknowledge_w));
+ map(0xe01c, 0xe01c).r(m_soundlatch[0], FUNC(generic_latch_8_device::read));
+ map(0xe01d, 0xe01d).r(FUNC(truxton2_state::bgaregga_E01D_r));
}
-void toaplan2_state::batrider_sound_z80_mem(address_map &map)
+void truxton2_state::batrider_sound_z80_mem(address_map &map)
{
map(0x0000, 0x7fff).rom();
- map(0x8000, 0xbfff).bankr("audiobank");
+ map(0x8000, 0xbfff).bankr(m_audiobank);
map(0xc000, 0xdfff).ram();
}
-void toaplan2_state::batrider_sound_z80_port(address_map &map)
+void truxton2_state::batrider_sound_z80_port(address_map &map)
{
map.global_mask(0xff);
- map(0x40, 0x40).w("soundlatch3", FUNC(generic_latch_8_device::write));
- map(0x42, 0x42).w("soundlatch4", FUNC(generic_latch_8_device::write));
- map(0x44, 0x44).w(FUNC(toaplan2_state::batrider_sndirq_w));
- map(0x46, 0x46).w(FUNC(toaplan2_state::batrider_clear_nmi_w));
- map(0x48, 0x48).r(m_soundlatch, FUNC(generic_latch_8_device::read));
- map(0x4a, 0x4a).r(m_soundlatch2, FUNC(generic_latch_8_device::read));
+ map(0x40, 0x40).w(m_soundlatch[2], FUNC(generic_latch_8_device::write));
+ map(0x42, 0x42).w(m_soundlatch[3], FUNC(generic_latch_8_device::write));
+ map(0x44, 0x44).w(FUNC(truxton2_state::batrider_sndirq_w));
+ map(0x46, 0x46).w(FUNC(truxton2_state::batrider_clear_nmi_w));
+ map(0x48, 0x48).r(m_soundlatch[0], FUNC(generic_latch_8_device::read));
+ map(0x4a, 0x4a).r(m_soundlatch[1], FUNC(generic_latch_8_device::read));
map(0x80, 0x81).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0x82, 0x82).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x84, 0x84).rw(m_oki[1], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x88, 0x88).w(FUNC(toaplan2_state::raizing_z80_bankswitch_w));
- map(0xc0, 0xc6).w(FUNC(toaplan2_state::raizing_oki_bankswitch_w));
+ map(0x88, 0x88).w(FUNC(truxton2_state::raizing_z80_bankswitch_w));
+ map(0xc0, 0xc6).w(FUNC(truxton2_state::raizing_oki_bankswitch_w));
}
-void toaplan2_state::bbakraid_sound_z80_mem(address_map &map)
+void truxton2_state::bbakraid_sound_z80_mem(address_map &map)
{
map(0x0000, 0xbfff).rom(); // No banking? ROM only contains code and data up to 0x28DC
map(0xc000, 0xffff).ram();
}
-void toaplan2_state::bbakraid_sound_z80_port(address_map &map)
+void truxton2_state::bbakraid_sound_z80_port(address_map &map)
{
map.global_mask(0xff);
- map(0x40, 0x40).w("soundlatch3", FUNC(generic_latch_8_device::write));
- map(0x42, 0x42).w("soundlatch4", FUNC(generic_latch_8_device::write));
- map(0x44, 0x44).w(FUNC(toaplan2_state::batrider_sndirq_w));
- map(0x46, 0x46).w(FUNC(toaplan2_state::batrider_clear_nmi_w));
- map(0x48, 0x48).r(m_soundlatch, FUNC(generic_latch_8_device::read));
- map(0x4a, 0x4a).r(m_soundlatch2, FUNC(generic_latch_8_device::read));
+ map(0x40, 0x40).w(m_soundlatch[2], FUNC(generic_latch_8_device::write));
+ map(0x42, 0x42).w(m_soundlatch[3], FUNC(generic_latch_8_device::write));
+ map(0x44, 0x44).w(FUNC(truxton2_state::batrider_sndirq_w));
+ map(0x46, 0x46).w(FUNC(truxton2_state::batrider_clear_nmi_w));
+ map(0x48, 0x48).r(m_soundlatch[0], FUNC(generic_latch_8_device::read));
+ map(0x4a, 0x4a).r(m_soundlatch[1], FUNC(generic_latch_8_device::read));
map(0x80, 0x81).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write));
}
+void toaplan2_state::dogyuunto_sound_z80_mem(address_map &map)
+{
+ map(0x0000, 0x7fff).rom();
+ map(0xc000, 0xc7ff).ram().share(m_shared_ram);
+ map(0xe000, 0xe001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
+ map(0xe004, 0xe004).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+}
+
+
void toaplan2_state::v25_mem(address_map &map)
{
map(0x00000, 0x00001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0x00004, 0x00004).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x80000, 0x87fff).mirror(0x78000).ram().share("shared_ram");
+ map(0x80000, 0x87fff).mirror(0x78000).ram().share(m_shared_ram);
}
void toaplan2_state::kbash_v25_mem(address_map &map)
{
- map(0x00000, 0x007ff).ram().share("shared_ram");
+ map(0x00000, 0x007ff).ram().share(m_shared_ram);
map(0x04000, 0x04001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0x04002, 0x04002).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x80000, 0x87fff).mirror(0x78000).rom().region("audiocpu", 0);
}
-void toaplan2_state::fixeight_v25_mem(address_map &map)
+void truxton2_state::fixeight_v25_mem(address_map &map)
{
map(0x00000, 0x00000).portr("IN1");
map(0x00002, 0x00002).portr("IN2");
map(0x00004, 0x00004).portr("IN3");
map(0x0000a, 0x0000b).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0x0000c, 0x0000c).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x80000, 0x87fff).mirror(0x78000).ram().share("shared_ram");
+ map(0x80000, 0x87fff).mirror(0x78000).ram().share(m_shared_ram);
}
void toaplan2_state::vfive_v25_mem(address_map &map)
{
map(0x00000, 0x00001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
- map(0x80000, 0x87fff).mirror(0x78000).ram().share("shared_ram");
+ map(0x80000, 0x87fff).mirror(0x78000).ram().share(m_shared_ram);
}
void toaplan2_state::fixeightbl_oki(address_map &map)
{
map(0x00000, 0x2ffff).rom();
- map(0x30000, 0x3ffff).bankr("okibank");
+ map(0x30000, 0x3ffff).bankr(m_okibank);
}
void toaplan2_state::enmadaio_oki(address_map &map)
{
- map(0x00000, 0x3ffff).bankr("okibank");
+ map(0x00000, 0x3ffff).bankr(m_okibank);
}
// similar as NMK112, but GAL-driven; NOT actual NMK112 is present
template<unsigned Chip>
-void toaplan2_state::raizing_oki(address_map &map)
+void truxton2_state::raizing_oki(address_map &map)
{
map(0x00000, 0x000ff).bankr(m_raizing_okibank[Chip][0]);
map(0x00100, 0x001ff).bankr(m_raizing_okibank[Chip][1]);
@@ -1495,7 +1529,7 @@ void toaplan2_state::raizing_oki(address_map &map)
u8 toaplan2_state::tekipaki_cmdavailable_r()
{
- if (m_soundlatch->pending_r()) return 0xff;
+ if (m_soundlatch[0]->pending_r()) return 0xff;
else return 0x00;
};
@@ -1505,16 +1539,16 @@ void toaplan2_state::hd647180_io_map(address_map &map)
map(0x60, 0x60).nopr();
map(0x70, 0x75).nopw(); // DDRs are written with the wrong upper addresses!
- map(0x84, 0x84).r(m_soundlatch, FUNC(generic_latch_8_device::read));
+ map(0x84, 0x84).r(m_soundlatch[0], FUNC(generic_latch_8_device::read));
map(0x82, 0x82).rw("ymsnd", FUNC(ym3812_device::status_r), FUNC(ym3812_device::address_w));
map(0x83, 0x83).w("ymsnd", FUNC(ym3812_device::data_w));
}
-void toaplan2_state::ghox_hd647180_mem_map(address_map &map)
+void ghox_state::ghox_hd647180_mem_map(address_map &map)
{
- map(0x40000, 0x407ff).ram().share("shared_ram");
+ map(0x40000, 0x407ff).ram().share(m_shared_ram);
map(0x80002, 0x80002).portr("DSWA");
map(0x80004, 0x80004).portr("DSWB");
@@ -2427,10 +2461,10 @@ static INPUT_PORTS_START( pwrkick )
PORT_START("DSWB")
PORT_DIPNAME( 0x03, 0x00, "Play Credit" ) PORT_DIPLOCATION("SW2:!1,!2")
- PORT_DIPSETTING( 0x00, UNICODE_YEN "10" )
- PORT_DIPSETTING( 0x01, UNICODE_YEN "20" )
- PORT_DIPSETTING( 0x02, UNICODE_YEN "30" )
- PORT_DIPSETTING( 0x03, UNICODE_YEN "40" )
+ PORT_DIPSETTING( 0x00, u8"¥10" )
+ PORT_DIPSETTING( 0x01, u8"¥20" )
+ PORT_DIPSETTING( 0x02, u8"¥30" )
+ PORT_DIPSETTING( 0x03, u8"¥40" )
PORT_DIPNAME( 0x0c, 0x00, "Coin Exchange" ) PORT_DIPLOCATION("SW2:!3,!4")
PORT_DIPSETTING( 0x00, "12" )
PORT_DIPSETTING( 0x04, "10" )
@@ -2462,7 +2496,7 @@ static INPUT_PORTS_START( pwrkick )
PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN2")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_NAME("Coin 2 (" UNICODE_YEN "10)")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_NAME(u8"Coin 2 (¥10)")
PORT_SERVICE_NO_TOGGLE( 0x02, IP_ACTIVE_HIGH )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SLOT_STOP4 ) PORT_NAME("Down") // does this button really exist?
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("hopper", ticket_dispenser_device, line_r)
@@ -2471,7 +2505,7 @@ static INPUT_PORTS_START( pwrkick )
PORT_START("SYS")
PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN3 ) PORT_NAME("Coin Exchange (" UNICODE_YEN "100)")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN3 ) PORT_NAME(u8"Coin Exchange (¥100)")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_GAMBLE_BOOK )
PORT_BIT( 0x30, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_GAMBLE_SERVICE ) PORT_NAME("Attendant Key")
@@ -2480,6 +2514,88 @@ static INPUT_PORTS_START( pwrkick )
// The specific "Payout" button shown on the test screen and diagnostic menu does not exist.
INPUT_PORTS_END
+static INPUT_PORTS_START( burgkids )
+ PORT_START("DSWA")
+ PORT_DIPNAME( 0x03, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:!1,!2")
+ PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( Very_Hard ) )
+ PORT_DIPNAME( 0x5c, 0x00, "Payout" ) PORT_DIPLOCATION("SW1:!3,!4,!5,!7")
+ PORT_DIPSETTING( 0x00, "110" ) // Service mode displays values as 1-8, ignoring SW1:7
+ PORT_DIPSETTING( 0x04, "105" )
+ PORT_DIPSETTING( 0x08, "100" )
+ PORT_DIPSETTING( 0x0c, "95" )
+ PORT_DIPSETTING( 0x10, "90" )
+ PORT_DIPSETTING( 0x14, "85" )
+ PORT_DIPSETTING( 0x18, "80" )
+ PORT_DIPSETTING( 0x1c, "75" )
+ PORT_DIPSETTING( 0x40, "70" )
+ PORT_DIPSETTING( 0x44, "65" )
+ PORT_DIPSETTING( 0x48, "60" )
+ PORT_DIPSETTING( 0x4c, "55" )
+ PORT_DIPSETTING( 0x50, "50" )
+ PORT_DIPSETTING( 0x54, "45" )
+ PORT_DIPSETTING( 0x58, "40" )
+ PORT_DIPSETTING( 0x5c, "35" )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:!6")
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPUNUSED_DIPLOC( 0x80, 0x00, "SW2:!8" )
+
+ PORT_START("DSWB")
+ PORT_DIPNAME( 0x03, 0x00, "Play Credit" ) PORT_DIPLOCATION("SW2:!1,!2")
+ PORT_DIPSETTING( 0x00, u8"¥10" )
+ PORT_DIPSETTING( 0x01, u8"¥20" )
+ PORT_DIPSETTING( 0x02, u8"¥30" )
+ PORT_DIPSETTING( 0x03, u8"¥40" )
+ PORT_DIPNAME( 0x1c, 0x00, "Coin Exchange" ) PORT_DIPLOCATION("SW2:!3,!4,!5")
+ PORT_DIPSETTING( 0x00, "12" )
+ PORT_DIPSETTING( 0x04, "11" )
+ PORT_DIPSETTING( 0x08, "10" )
+ PORT_DIPSETTING( 0x0c, "6" )
+ PORT_DIPSETTING( 0x10, "5" )
+ PORT_DIPSETTING( 0x14, "4" )
+ PORT_DIPSETTING( 0x18, "3" )
+ PORT_DIPSETTING( 0x1c, DEF_STR ( Off ) )
+ PORT_DIPUNUSED_DIPLOC( 0x20, 0x00, "SW2:!6" )
+ PORT_DIPUNUSED_DIPLOC( 0x40, 0x00, "SW2:!7" )
+ PORT_DIPUNUSED_DIPLOC( 0x80, 0x00, "SW2:!8" )
+
+ PORT_START("DSWC")
+ PORT_DIPUNUSED_DIPLOC( 0x01, 0x00, "SW3:!1" )
+ PORT_DIPUNUSED_DIPLOC( 0x02, 0x00, "SW3:!2" )
+ PORT_DIPUNUSED_DIPLOC( 0x04, 0x00, "SW3:!3" )
+ PORT_DIPUNUSED_DIPLOC( 0x08, 0x00, "SW3:!4" )
+ PORT_DIPUNUSED_DIPLOC( 0x10, 0x00, "SW3:!5" )
+ PORT_DIPUNUSED_DIPLOC( 0x20, 0x00, "SW3:!6" )
+ PORT_DIPUNUSED_DIPLOC( 0x40, 0x00, "SW3:!7" )
+ PORT_DIPUNUSED_DIPLOC( 0x80, 0x00, "SW3:!8" )
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SLOT_STOP1 ) PORT_NAME("1")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SLOT_STOP2 ) PORT_NAME("2")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SLOT_STOP3 ) PORT_NAME("3")
+ PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_NAME(u8"Coin 2 (¥10)")
+ PORT_SERVICE_NO_TOGGLE( 0x02, IP_ACTIVE_HIGH )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SLOT_STOP4 ) PORT_NAME("Down")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("hopper", ticket_dispenser_device, line_r)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MEMORY_RESET )
+ PORT_BIT( 0xe0, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("SYS")
+ PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN3 ) PORT_NAME(u8"Coin Exchange (¥100)")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_GAMBLE_BOOK )
+ PORT_BIT( 0x30, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_GAMBLE_SERVICE ) PORT_NAME("Attendant Key")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_NAME("Coin 1 (Medal)")
+INPUT_PORTS_END
+
static INPUT_PORTS_START( othldrby )
PORT_INCLUDE( toaplan2_3b )
@@ -2813,6 +2929,105 @@ static INPUT_PORTS_START( snowbro2 )
INPUT_PORTS_END
+static INPUT_PORTS_START( snowbro2b3 )
+ PORT_START("IN1")
+ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_8WAY
+ PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_8WAY
+ PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_8WAY
+ PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_8WAY
+ PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_8WAY
+ PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_8WAY
+ PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_8WAY
+ PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_8WAY
+ PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_SERVICE1 )
+ PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_TILT )
+ TOAPLAN_TEST_SWITCH( 0x0400, IP_ACTIVE_HIGH )
+ PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN1 )
+ PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_COIN2 )
+ PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_START1 )
+ PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_START2 )
+ PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_START("IN3")
+ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(3) PORT_8WAY
+ PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3) PORT_8WAY
+ PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3) PORT_8WAY
+ PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3) PORT_8WAY
+ PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_START3 )
+ PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_START("IN4")
+ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(4) PORT_8WAY
+ PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4) PORT_8WAY
+ PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4) PORT_8WAY
+ PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4) PORT_8WAY
+ PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(4)
+ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(4)
+ PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_START4 )
+ PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_START("DSWA")
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Continue_Price ) ) PORT_DIPLOCATION("SW1:!1")
+ PORT_DIPSETTING( 0x00, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x01, "Discount" )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:!2")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( On ) )
+ PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_HIGH, "SW1:!3" )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:!4")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:!5,!6")
+ PORT_DIPSETTING( 0x30, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
+ PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:!7,!8")
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0xc0, DEF_STR( 1C_6C ) )
+
+ PORT_START("DSWB")
+ PORT_DIPNAME( 0x03, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:!1,!2")
+ PORT_DIPSETTING( 0x01, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( Very_Hard ) )
+ PORT_DIPNAME( 0x000c, 0x0000, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:!3,!4")
+ PORT_DIPSETTING( 0x000c, DEF_STR( None ) )
+ PORT_DIPSETTING( 0x0008, "200k only" )
+ PORT_DIPSETTING( 0x0000, "100k only" )
+ PORT_DIPSETTING( 0x0004, "100k and every 500k" )
+ PORT_DIPNAME( 0x0030, 0x0000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:!5,!6")
+ PORT_DIPSETTING( 0x0030, "1" )
+ PORT_DIPSETTING( 0x0020, "2" )
+ PORT_DIPSETTING( 0x0000, "3" )
+ PORT_DIPSETTING( 0x0010, "4" )
+ PORT_DIPNAME( 0x0040, 0x0000, "Invulnerability (Cheat)" ) PORT_DIPLOCATION("SW2:!7")
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0000, "Maximum Players" ) PORT_DIPLOCATION("SW2:!8")
+ PORT_DIPSETTING( 0x0080, "2" )
+ PORT_DIPSETTING( 0x0000, "4" )
+INPUT_PORTS_END
+
+
static INPUT_PORTS_START( sstriker )
PORT_INCLUDE( toaplan2_3b )
@@ -3073,6 +3288,19 @@ static INPUT_PORTS_START( bgareggacn )
INPUT_PORTS_END
+static INPUT_PORTS_START( bgareggabl )
+ PORT_INCLUDE( bgaregga )
+
+ PORT_MODIFY("DSWB") // Always uses bonus life settings from Japan region
+ PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:!8")
+ PORT_DIPSETTING( 0x0080, "1000k and 2000k" )
+ PORT_DIPSETTING( 0x0000, "Every 1000k" )
+
+ PORT_MODIFY("JMPR") // Region is hard-coded
+ PORT_BIT( 0x0003, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+
static INPUT_PORTS_START( batrider )
PORT_START("IN") // Player Inputs
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
@@ -3343,6 +3571,7 @@ void toaplan2_state::tekipaki(machine_config &config)
/* basic machine hardware */
M68000(config, m_maincpu, 10_MHz_XTAL); // 10MHz Oscillator
m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::tekipaki_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(toaplan2_state::toaplan2_reset));
hd647180x_device &audiocpu(HD647180X(config, m_audiocpu, 10_MHz_XTAL));
// 16k byte ROM and 512 byte RAM are internal
@@ -3351,8 +3580,6 @@ void toaplan2_state::tekipaki(machine_config &config)
config.set_maximum_quantum(attotime::from_hz(600));
- MCFG_MACHINE_RESET_OVERRIDE(toaplan2_state,toaplan2)
-
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
@@ -3375,26 +3602,25 @@ void toaplan2_state::tekipaki(machine_config &config)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- GENERIC_LATCH_8(config, m_soundlatch);
+ GENERIC_LATCH_8(config, m_soundlatch[0]);
ym3812_device &ymsnd(YM3812(config, "ymsnd", 27_MHz_XTAL/8));
ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
ymsnd.add_route(ALL_OUTPUTS, "mono", 1.0);
}
-void toaplan2_state::ghox(machine_config &config)
+void ghox_state::ghox(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, 10_MHz_XTAL); /* verified on pcb */
- m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::ghox_68k_mem);
+ m_maincpu->set_addrmap(AS_PROGRAM, &ghox_state::ghox_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(ghox_state::toaplan2_reset));
HD647180X(config, m_audiocpu, 10_MHz_XTAL);
- m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan2_state::ghox_hd647180_mem_map);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &ghox_state::ghox_hd647180_mem_map);
config.set_maximum_quantum(attotime::from_hz(600));
- MCFG_MACHINE_RESET_OVERRIDE(toaplan2_state,ghox)
-
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
@@ -3402,8 +3628,8 @@ void toaplan2_state::ghox(machine_config &config)
//m_screen->set_refresh_hz(60);
//m_screen->set_size(432, 262);
//m_screen->set_visarea(0, 319, 0, 239);
- m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_toaplan2));
- m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank));
+ m_screen->set_screen_update(FUNC(ghox_state::screen_update_toaplan2));
+ m_screen->screen_vblank().set(FUNC(ghox_state::screen_vblank));
m_screen->set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, T2PALETTE_LENGTH);
@@ -3412,7 +3638,7 @@ void toaplan2_state::ghox(machine_config &config)
m_vdp[0]->set_palette(m_palette);
m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4);
- MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2)
+ MCFG_VIDEO_START_OVERRIDE(ghox_state,toaplan2)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -3475,6 +3701,7 @@ void toaplan2_state::dogyuun(machine_config &config)
/* basic machine hardware */
M68000(config, m_maincpu, 25_MHz_XTAL/2); /* verified on pcb */
m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::dogyuun_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(toaplan2_state::toaplan2_reset));
v25_device &audiocpu(V25(config, m_audiocpu, 25_MHz_XTAL/2)); /* NEC V25 type Toaplan marked CPU ??? */
audiocpu.set_addrmap(AS_PROGRAM, &toaplan2_state::v25_mem);
@@ -3513,11 +3740,26 @@ void toaplan2_state::dogyuun(machine_config &config)
}
+void toaplan2_state::dogyuunto(machine_config &config)
+{
+ dogyuun(config);
+
+ m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::dogyuunto_68k_mem);
+ m_maincpu->set_clock(24_MHz_XTAL / 2); // 24 MHz instead of 25
+
+ z80_device &audiocpu(Z80(config.replace(), "audiocpu", 27_MHz_XTAL / 8)); // guessed divisor
+ audiocpu.set_addrmap(AS_PROGRAM, &toaplan2_state::dogyuunto_sound_z80_mem);
+
+ m_oki[0]->set_clock(1.056_MHz_XTAL); // blue resonator 1056J
+}
+
+
void toaplan2_state::kbash(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, 16_MHz_XTAL); /* 16MHz Oscillator */
m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::kbash_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(toaplan2_state::toaplan2_reset));
/* ROM based v25 */
v25_device &audiocpu(V25(config, m_audiocpu, 16_MHz_XTAL)); /* NEC V25 type Toaplan marked CPU ??? */
@@ -3562,6 +3804,7 @@ void toaplan2_state::kbash2(machine_config &config)
/* basic machine hardware */
M68000(config, m_maincpu, 16_MHz_XTAL); /* 16MHz Oscillator */
m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::kbash2_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(toaplan2_state::toaplan2_reset));
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
@@ -3593,18 +3836,19 @@ void toaplan2_state::kbash2(machine_config &config)
}
-void toaplan2_state::truxton2(machine_config &config)
+void truxton2_state::truxton2(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, 16_MHz_XTAL); /* verified on pcb */
- m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::truxton2_68k_mem);
+ m_maincpu->set_addrmap(AS_PROGRAM, &truxton2_state::truxton2_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(truxton2_state::toaplan2_reset));
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240);
- m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_truxton2));
- m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank));
+ m_screen->set_screen_update(FUNC(truxton2_state::screen_update_truxton2));
+ m_screen->screen_vblank().set(FUNC(truxton2_state::screen_vblank));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_truxton2);
@@ -3614,7 +3858,7 @@ void toaplan2_state::truxton2(machine_config &config)
m_vdp[0]->set_palette(m_palette);
m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_2);
- MCFG_VIDEO_START_OVERRIDE(toaplan2_state,truxton2)
+ MCFG_VIDEO_START_OVERRIDE(truxton2_state,truxton2)
/* sound hardware */
#ifdef TRUXTON2_STEREO // music data is stereo...
@@ -3642,14 +3886,13 @@ void toaplan2_state::pipibibs(machine_config &config)
/* basic machine hardware */
M68000(config, m_maincpu, 10_MHz_XTAL); // verified on PCB
m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::pipibibs_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(toaplan2_state::toaplan2_reset));
Z80(config, m_audiocpu, 27_MHz_XTAL/8); // verified on PCB
m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan2_state::pipibibs_sound_z80_mem);
config.set_maximum_quantum(attotime::from_hz(600));
- MCFG_MACHINE_RESET_OVERRIDE(toaplan2_state,toaplan2)
-
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
@@ -3684,14 +3927,13 @@ void toaplan2_state::pipibibsbl(machine_config &config)
M68000(config, m_maincpu, 12_MHz_XTAL); // ??? (position labeled "68000-12" but 10 MHz-rated parts used)
m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::pipibibi_bootleg_68k_mem);
m_maincpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &toaplan2_state::cpu_space_pipibibsbl_map);
+ m_maincpu->reset_cb().set(FUNC(toaplan2_state::toaplan2_reset));
Z80(config, m_audiocpu, 12_MHz_XTAL / 2); // GoldStar Z8400B; clock source and divider unknown
m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan2_state::pipibibs_sound_z80_mem);
config.set_maximum_quantum(attotime::from_hz(600));
- MCFG_MACHINE_RESET_OVERRIDE(toaplan2_state,toaplan2)
-
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
@@ -3705,6 +3947,7 @@ void toaplan2_state::pipibibsbl(machine_config &config)
GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL); // FIXME: bootleg has no VDP
m_vdp[0]->set_palette(m_palette);
m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4, ASSERT_LINE);
+ m_vdp[0]->set_bootleg_extra_offsets(0x01f, 0x1ef, 0x01d, 0x1ef, 0x01b, 0x1ef, 0x1d4, 0x1f7);
MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2)
@@ -3755,14 +3998,15 @@ static const u8 ts001turbo_decryption_table[256] = {
};
-void toaplan2_state::fixeight(machine_config &config)
+void truxton2_state::fixeight(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, 16_MHz_XTAL); // verified on PCB
- m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::fixeight_68k_mem);
+ m_maincpu->set_addrmap(AS_PROGRAM, &truxton2_state::fixeight_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(truxton2_state::toaplan2_reset));
v25_device &audiocpu(V25(config, m_audiocpu, 16_MHz_XTAL)); // NEC V25 type Toaplan marked CPU ???
- audiocpu.set_addrmap(AS_PROGRAM, &toaplan2_state::fixeight_v25_mem);
+ audiocpu.set_addrmap(AS_PROGRAM, &truxton2_state::fixeight_v25_mem);
audiocpu.set_decryption_table(ts001turbo_decryption_table);
audiocpu.p0_in_cb().set_ioport("EEPROM");
audiocpu.p0_out_cb().set_ioport("EEPROM");
@@ -3773,8 +4017,8 @@ void toaplan2_state::fixeight(machine_config &config)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240); // verified on PCB
- m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_truxton2));
- m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank));
+ m_screen->set_screen_update(FUNC(truxton2_state::screen_update_truxton2));
+ m_screen->screen_vblank().set(FUNC(truxton2_state::screen_vblank));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_truxton2);
@@ -3784,7 +4028,7 @@ void toaplan2_state::fixeight(machine_config &config)
m_vdp[0]->set_palette(m_palette);
m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4);
- MCFG_VIDEO_START_OVERRIDE(toaplan2_state,truxton2)
+ MCFG_VIDEO_START_OVERRIDE(truxton2_state,truxton2)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -3796,12 +4040,13 @@ void toaplan2_state::fixeight(machine_config &config)
}
-void toaplan2_state::fixeightbl(machine_config &config)
+void truxton2_state::fixeightbl(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(10'000'000)); /* 10MHz Oscillator */
- m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::fixeightbl_68k_mem);
- m_maincpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &toaplan2_state::cpu_space_fixeightbl_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &truxton2_state::fixeightbl_68k_mem);
+ m_maincpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &truxton2_state::cpu_space_fixeightbl_map);
+ m_maincpu->reset_cb().set(FUNC(truxton2_state::toaplan2_reset));
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
@@ -3810,8 +4055,8 @@ void toaplan2_state::fixeightbl(machine_config &config)
//m_screen->set_refresh_hz(60);
//m_screen->set_size(432, 262);
//m_screen->set_visarea(0, 319, 0, 239);
- m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_bootleg));
- m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank));
+ m_screen->set_screen_update(FUNC(truxton2_state::screen_update_bootleg));
+ m_screen->screen_vblank().set(FUNC(truxton2_state::screen_vblank));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_textrom);
@@ -3821,14 +4066,14 @@ void toaplan2_state::fixeightbl(machine_config &config)
m_vdp[0]->set_palette(m_palette);
m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_2, ASSERT_LINE);
- MCFG_VIDEO_START_OVERRIDE(toaplan2_state,fixeightbl)
+ MCFG_VIDEO_START_OVERRIDE(truxton2_state,fixeightbl)
/* sound hardware */
SPEAKER(config, "mono").front_center();
OKIM6295(config, m_oki[0], 14_MHz_XTAL/16, okim6295_device::PIN7_LOW);
m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0);
- m_oki[0]->set_addrmap(0, &toaplan2_state::fixeightbl_oki);
+ m_oki[0]->set_addrmap(0, &truxton2_state::fixeightbl_oki);
}
@@ -3837,6 +4082,7 @@ void toaplan2_state::vfive(machine_config &config)
/* basic machine hardware */
M68000(config, m_maincpu, 20_MHz_XTAL/2); // verified on PCB
m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::vfive_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(toaplan2_state::toaplan2_reset));
v25_device &audiocpu(V25(config, m_audiocpu, 20_MHz_XTAL/2)); // Verified on PCB, NEC V25 type Toaplan mark scratched out
audiocpu.set_addrmap(AS_PROGRAM, &toaplan2_state::vfive_v25_mem);
@@ -3874,6 +4120,7 @@ void toaplan2_state::batsugun(machine_config &config)
/* basic machine hardware */
M68000(config, m_maincpu, 32_MHz_XTAL/2); // 16MHz, 32MHz Oscillator
m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::batsugun_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(toaplan2_state::toaplan2_reset));
v25_device &audiocpu(V25(config, m_audiocpu, 32_MHz_XTAL/2)); // NEC V25 type Toaplan marked CPU ???
audiocpu.set_addrmap(AS_PROGRAM, &toaplan2_state::v25_mem);
@@ -3930,13 +4177,14 @@ void toaplan2_state::batsugunbl(machine_config &config)
m_oki[0]->set_addrmap(0, &toaplan2_state::fixeightbl_oki);
}
-void toaplan2_state::pwrkick(machine_config &config)
+void pwrkick_state::pwrkick(machine_config &config) // Sunwise SW931201-1 PCB (27.000MHz, 20.000MHz & 16.000MHz OSCs)
{
/* basic machine hardware */
- M68000(config, m_maincpu, 16_MHz_XTAL);
- m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::pwrkick_68k_mem);
+ M68000(config, m_maincpu, 20_MHz_XTAL/2); // verified on PCB
+ m_maincpu->set_addrmap(AS_PROGRAM, &pwrkick_state::pwrkick_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(pwrkick_state::toaplan2_reset));
- UPD4992(config, m_rtc, 32'768);
+ UPD4992(config, m_rtc, 32.768_kHz_XTAL);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@@ -3946,8 +4194,8 @@ void toaplan2_state::pwrkick(machine_config &config)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240);
- m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_toaplan2));
- m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank));
+ m_screen->set_screen_update(FUNC(pwrkick_state::screen_update_toaplan2));
+ m_screen->screen_vblank().set(FUNC(pwrkick_state::screen_vblank));
m_screen->set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, T2PALETTE_LENGTH);
@@ -3956,22 +4204,23 @@ void toaplan2_state::pwrkick(machine_config &config)
m_vdp[0]->set_palette(m_palette);
m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4);
- MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2)
+ MCFG_VIDEO_START_OVERRIDE(pwrkick_state,toaplan2)
/* sound hardware */
SPEAKER(config, "mono").front_center();
// empty YM2151 socket
- OKIM6295(config, m_oki[0], 27_MHz_XTAL/8, okim6295_device::PIN7_HIGH); // not confirmed
+ OKIM6295(config, m_oki[0], 16_MHz_XTAL/4, okim6295_device::PIN7_LOW); // verified on PCB
m_oki[0]->add_route(ALL_OUTPUTS, "mono", 0.5);
}
-void toaplan2_state::othldrby(machine_config &config)
+void pwrkick_state::othldrby(machine_config &config) // Sunwise S951060-VGP PCB (27.000MHz, 20.000MHz & 16.000MHz OSCs)
{
/* basic machine hardware */
- M68000(config, m_maincpu, 16_MHz_XTAL);
- m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::othldrby_68k_mem);
+ M68000(config, m_maincpu, 20_MHz_XTAL/2); // assumed same as pwrkick
+ m_maincpu->set_addrmap(AS_PROGRAM, &pwrkick_state::othldrby_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(pwrkick_state::toaplan2_reset));
- UPD4992(config, m_rtc, 32'768);
+ UPD4992(config, m_rtc, 32.768_kHz_XTAL);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@@ -3979,8 +4228,8 @@ void toaplan2_state::othldrby(machine_config &config)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
m_screen->set_raw(27_MHz_XTAL/4, 432, 0, 320, 262, 0, 240);
- m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_toaplan2));
- m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank));
+ m_screen->set_screen_update(FUNC(pwrkick_state::screen_update_toaplan2));
+ m_screen->screen_vblank().set(FUNC(pwrkick_state::screen_vblank));
m_screen->set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, T2PALETTE_LENGTH);
@@ -3989,12 +4238,12 @@ void toaplan2_state::othldrby(machine_config &config)
m_vdp[0]->set_palette(m_palette);
m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4);
- MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2)
+ MCFG_VIDEO_START_OVERRIDE(pwrkick_state,toaplan2)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- OKIM6295(config, m_oki[0], 27_MHz_XTAL/8, okim6295_device::PIN7_HIGH); // not confirmed
+ OKIM6295(config, m_oki[0], 16_MHz_XTAL/4, okim6295_device::PIN7_LOW); // assumed same as pwrkick
m_oki[0]->add_route(ALL_OUTPUTS, "mono", 0.5);
}
@@ -4004,6 +4253,7 @@ void toaplan2_state::enmadaio(machine_config &config)
/* basic machine hardware */
M68000(config, m_maincpu, 20_MHz_XTAL/2);
m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::enmadaio_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(toaplan2_state::toaplan2_reset));
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
@@ -4034,8 +4284,9 @@ void toaplan2_state::enmadaio(machine_config &config)
void toaplan2_state::snowbro2(machine_config &config)
{
/* basic machine hardware */
- M68000(config, m_maincpu, 16_MHz_XTAL);
+ M68000(config, m_maincpu, 32_MHz_XTAL/2);
m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::snowbro2_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(toaplan2_state::toaplan2_reset));
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
@@ -4061,24 +4312,34 @@ void toaplan2_state::snowbro2(machine_config &config)
YM2151(config, "ymsnd", 27_MHz_XTAL/8).add_route(ALL_OUTPUTS, "mono", 0.5);
- OKIM6295(config, m_oki[0], 27_MHz_XTAL/10, okim6295_device::PIN7_HIGH);
+ OKIM6295(config, m_oki[0], 16_MHz_XTAL/4, okim6295_device::PIN7_LOW);
m_oki[0]->add_route(ALL_OUTPUTS, "mono", 0.5);
}
+void toaplan2_state::snowbro2b3(machine_config &config)
+{
+ snowbro2(config);
+
+ m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::snowbro2b3_68k_mem);
+ m_maincpu->set_vblank_int("screen", FUNC(toaplan2_state::irq2_line_hold));
+
+ m_vdp[0]->vint_out_cb().set_nop();
+ m_vdp[0]->set_bootleg_extra_offsets(0x02e, 0x1f0, 0x02e, 0x1ee, 0x02e, 0x1ef, 0x1e9, 0x1ef);
+}
+
-void toaplan2_state::mahoudai(machine_config &config)
+void truxton2_state::mahoudai(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, 32_MHz_XTAL/2); // 16MHz, 32MHz Oscillator
- m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::mahoudai_68k_mem);
+ m_maincpu->set_addrmap(AS_PROGRAM, &truxton2_state::mahoudai_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(truxton2_state::toaplan2_reset));
Z80(config, m_audiocpu, 32_MHz_XTAL/8); // 4MHz, 32MHz Oscillator
- m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan2_state::raizing_sound_z80_mem);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &truxton2_state::raizing_sound_z80_mem);
config.set_maximum_quantum(attotime::from_hz(600));
- MCFG_MACHINE_RESET_OVERRIDE(toaplan2_state,toaplan2)
-
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
@@ -4086,8 +4347,8 @@ void toaplan2_state::mahoudai(machine_config &config)
//m_screen->set_refresh_hz(60);
//m_screen->set_size(432, 262);
//m_screen->set_visarea(0, 319, 0, 239);
- m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_truxton2));
- m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank));
+ m_screen->set_screen_update(FUNC(truxton2_state::screen_update_truxton2));
+ m_screen->screen_vblank().set(FUNC(truxton2_state::screen_vblank));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_textrom);
@@ -4097,7 +4358,7 @@ void toaplan2_state::mahoudai(machine_config &config)
m_vdp[0]->set_palette(m_palette);
m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4);
- MCFG_VIDEO_START_OVERRIDE(toaplan2_state,bgaregga)
+ MCFG_VIDEO_START_OVERRIDE(truxton2_state,bgaregga)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -4109,25 +4370,26 @@ void toaplan2_state::mahoudai(machine_config &config)
}
-void toaplan2_state::shippumd(machine_config &config)
+void truxton2_state::shippumd(machine_config &config)
{
mahoudai(config);
/* basic machine hardware */
- m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::shippumd_68k_mem);
+ m_maincpu->set_addrmap(AS_PROGRAM, &truxton2_state::shippumd_68k_mem);
}
-void toaplan2_state::bgaregga(machine_config &config)
+void truxton2_state::bgaregga(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, 32_MHz_XTAL/2); // 16MHz, 32MHz Oscillator
- m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::bgaregga_68k_mem);
+ m_maincpu->set_addrmap(AS_PROGRAM, &truxton2_state::bgaregga_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(truxton2_state::toaplan2_reset));
Z80(config, m_audiocpu, 32_MHz_XTAL/8); // 4MHz, 32MHz Oscillator
- m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan2_state::bgaregga_sound_z80_mem);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &truxton2_state::bgaregga_sound_z80_mem);
config.set_maximum_quantum(attotime::from_hz(6000));
- MCFG_MACHINE_RESET_OVERRIDE(toaplan2_state,bgaregga)
+ MCFG_MACHINE_RESET_OVERRIDE(truxton2_state,bgaregga)
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
@@ -4136,8 +4398,8 @@ void toaplan2_state::bgaregga(machine_config &config)
//m_screen->set_refresh_hz(60);
//m_screen->set_size(432, 262);
//m_screen->set_visarea(0, 319, 0, 239);
- m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_truxton2));
- m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank));
+ m_screen->set_screen_update(FUNC(truxton2_state::screen_update_truxton2));
+ m_screen->screen_vblank().set(FUNC(truxton2_state::screen_vblank));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_textrom);
@@ -4147,47 +4409,48 @@ void toaplan2_state::bgaregga(machine_config &config)
m_vdp[0]->set_palette(m_palette);
m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_4);
- MCFG_VIDEO_START_OVERRIDE(toaplan2_state,bgaregga)
+ MCFG_VIDEO_START_OVERRIDE(truxton2_state,bgaregga)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- GENERIC_LATCH_8(config, m_soundlatch);
- m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0);
- m_soundlatch->set_separate_acknowledge(true);
+ GENERIC_LATCH_8(config, m_soundlatch[0]);
+ m_soundlatch[0]->data_pending_callback().set_inputline(m_audiocpu, 0);
+ m_soundlatch[0]->set_separate_acknowledge(true);
YM2151(config, "ymsnd", 32_MHz_XTAL/8).add_route(ALL_OUTPUTS, "mono", 0.35);
OKIM6295(config, m_oki[0], 32_MHz_XTAL/16, okim6295_device::PIN7_HIGH);
- m_oki[0]->set_addrmap(0, &toaplan2_state::raizing_oki<0>);
+ m_oki[0]->set_addrmap(0, &truxton2_state::raizing_oki<0>);
m_oki[0]->add_route(ALL_OUTPUTS, "mono", 0.7);
}
-void toaplan2_state::bgareggabl(machine_config &config)
+void truxton2_state::bgareggabl(machine_config &config)
{
bgaregga(config);
- MCFG_VIDEO_START_OVERRIDE(toaplan2_state,bgareggabl)
+ MCFG_VIDEO_START_OVERRIDE(truxton2_state,bgareggabl)
- m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_bootleg));
+ m_screen->set_screen_update(FUNC(truxton2_state::screen_update_bootleg));
}
-void toaplan2_state::batrider(machine_config &config)
+void truxton2_state::batrider(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, 32_MHz_XTAL/2); // 16MHz, 32MHz Oscillator (verified)
- m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::batrider_68k_mem);
+ m_maincpu->set_addrmap(AS_PROGRAM, &truxton2_state::batrider_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(truxton2_state::toaplan2_reset));
Z80(config, m_audiocpu, 32_MHz_XTAL/6); // 5.333MHz, 32MHz Oscillator (verified)
- m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan2_state::batrider_sound_z80_mem);
- m_audiocpu->set_addrmap(AS_IO, &toaplan2_state::batrider_sound_z80_port);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &truxton2_state::batrider_sound_z80_mem);
+ m_audiocpu->set_addrmap(AS_IO, &truxton2_state::batrider_sound_z80_port);
config.set_maximum_quantum(attotime::from_hz(600));
- MCFG_MACHINE_RESET_OVERRIDE(toaplan2_state,bgaregga)
+ MCFG_MACHINE_RESET_OVERRIDE(truxton2_state,bgaregga)
ADDRESS_MAP_BANK(config, m_dma_space, 0);
- m_dma_space->set_addrmap(0, &toaplan2_state::batrider_dma_mem);
+ m_dma_space->set_addrmap(0, &truxton2_state::batrider_dma_mem);
m_dma_space->set_endianness(ENDIANNESS_BIG);
m_dma_space->set_data_width(16);
m_dma_space->set_addr_width(16);
@@ -4200,8 +4463,8 @@ void toaplan2_state::batrider(machine_config &config)
//m_screen->set_refresh_hz(60);
//m_screen->set_size(432, 262);
//m_screen->set_visarea(0, 319, 0, 239);
- m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_truxton2));
- m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank));
+ m_screen->set_screen_update(FUNC(truxton2_state::screen_update_truxton2));
+ m_screen->screen_vblank().set(FUNC(truxton2_state::screen_vblank));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_batrider);
@@ -4209,51 +4472,50 @@ void toaplan2_state::batrider(machine_config &config)
GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL);
m_vdp[0]->set_palette(m_palette);
- m_vdp[0]->set_tile_callback(FUNC(toaplan2_state::batrider_bank_cb));
+ m_vdp[0]->set_tile_callback(FUNC(truxton2_state::batrider_bank_cb));
m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_2);
- MCFG_VIDEO_START_OVERRIDE(toaplan2_state,batrider)
+ MCFG_VIDEO_START_OVERRIDE(truxton2_state,batrider)
/* sound hardware */
SPEAKER(config, "mono").front_center();
// these two latches are always written together, via a single move.l instruction
- GENERIC_LATCH_8(config, "soundlatch");
- GENERIC_LATCH_8(config, "soundlatch2");
- GENERIC_LATCH_8(config, "soundlatch3");
- GENERIC_LATCH_8(config, "soundlatch4");
+ GENERIC_LATCH_8(config, m_soundlatch[0]);
+ GENERIC_LATCH_8(config, m_soundlatch[1]);
+ GENERIC_LATCH_8(config, m_soundlatch[2]);
+ GENERIC_LATCH_8(config, m_soundlatch[3]);
YM2151(config, "ymsnd", 32_MHz_XTAL/8).add_route(ALL_OUTPUTS, "mono", 0.25); // 4MHz, 32MHz Oscillator (verified)
OKIM6295(config, m_oki[0], 32_MHz_XTAL/10, okim6295_device::PIN7_HIGH);
- m_oki[0]->set_addrmap(0, &toaplan2_state::raizing_oki<0>);
+ m_oki[0]->set_addrmap(0, &truxton2_state::raizing_oki<0>);
m_oki[0]->add_route(ALL_OUTPUTS, "mono", 0.5);
OKIM6295(config, m_oki[1], 32_MHz_XTAL/10, okim6295_device::PIN7_LOW);
- m_oki[1]->set_addrmap(0, &toaplan2_state::raizing_oki<1>);
+ m_oki[1]->set_addrmap(0, &truxton2_state::raizing_oki<1>);
m_oki[1]->add_route(ALL_OUTPUTS, "mono", 0.5);
}
-void toaplan2_state::bbakraid(machine_config &config)
+void truxton2_state::bbakraid(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, 32_MHz_XTAL/2); // 16MHz, 32MHz Oscillator
- m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::bbakraid_68k_mem);
+ m_maincpu->set_addrmap(AS_PROGRAM, &truxton2_state::bbakraid_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(truxton2_state::toaplan2_reset));
Z80(config, m_audiocpu, XTAL(32'000'000)/6); /* 5.3333MHz , 32MHz Oscillator */
- m_audiocpu->set_addrmap(AS_PROGRAM, &toaplan2_state::bbakraid_sound_z80_mem);
- m_audiocpu->set_addrmap(AS_IO, &toaplan2_state::bbakraid_sound_z80_port);
- m_audiocpu->set_periodic_int(FUNC(toaplan2_state::bbakraid_snd_interrupt), attotime::from_hz(XTAL(32'000'000) / 6 / 12000)); // sound CPU clock (divider unverified)
+ m_audiocpu->set_addrmap(AS_PROGRAM, &truxton2_state::bbakraid_sound_z80_mem);
+ m_audiocpu->set_addrmap(AS_IO, &truxton2_state::bbakraid_sound_z80_port);
+ m_audiocpu->set_periodic_int(FUNC(truxton2_state::bbakraid_snd_interrupt), attotime::from_hz(XTAL(32'000'000) / 6 / 12000)); // sound CPU clock (divider unverified)
config.set_maximum_quantum(attotime::from_hz(600));
- MCFG_MACHINE_RESET_OVERRIDE(toaplan2_state,toaplan2)
-
- EEPROM_93C66_8BIT(config, "eeprom");
+ EEPROM_93C66_8BIT(config, m_eeprom);
ADDRESS_MAP_BANK(config, m_dma_space, 0);
- m_dma_space->set_addrmap(0, &toaplan2_state::batrider_dma_mem);
+ m_dma_space->set_addrmap(0, &truxton2_state::batrider_dma_mem);
m_dma_space->set_endianness(ENDIANNESS_BIG);
m_dma_space->set_data_width(16);
m_dma_space->set_addr_width(16);
@@ -4266,8 +4528,8 @@ void toaplan2_state::bbakraid(machine_config &config)
//m_screen->set_refresh_hz(60);
//m_screen->set_size(432, 262);
//m_screen->set_visarea(0, 319, 0, 239);
- m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_truxton2));
- m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank));
+ m_screen->set_screen_update(FUNC(truxton2_state::screen_update_truxton2));
+ m_screen->screen_vblank().set(FUNC(truxton2_state::screen_vblank));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_batrider);
@@ -4275,33 +4537,34 @@ void toaplan2_state::bbakraid(machine_config &config)
GP9001_VDP(config, m_vdp[0], 27_MHz_XTAL);
m_vdp[0]->set_palette(m_palette);
- m_vdp[0]->set_tile_callback(FUNC(toaplan2_state::batrider_bank_cb));
+ m_vdp[0]->set_tile_callback(FUNC(truxton2_state::batrider_bank_cb));
m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_1);
- MCFG_VIDEO_START_OVERRIDE(toaplan2_state,batrider)
+ MCFG_VIDEO_START_OVERRIDE(truxton2_state,batrider)
/* sound hardware */
SPEAKER(config, "mono").front_center();
// these two latches are always written together, via a single move.l instruction
- GENERIC_LATCH_8(config, "soundlatch");
- GENERIC_LATCH_8(config, "soundlatch2");
- GENERIC_LATCH_8(config, "soundlatch3");
- GENERIC_LATCH_8(config, "soundlatch4");
+ GENERIC_LATCH_8(config, m_soundlatch[0]);
+ GENERIC_LATCH_8(config, m_soundlatch[1]);
+ GENERIC_LATCH_8(config, m_soundlatch[2]);
+ GENERIC_LATCH_8(config, m_soundlatch[3]);
YMZ280B(config, "ymz", 16.9344_MHz_XTAL).add_route(ALL_OUTPUTS, "mono", 1.0);
// IRQ not used ??? Connected to a test pin (TP082)
}
-void toaplan2_state::nprobowl(machine_config &config)
+void truxton2_state::nprobowl(machine_config &config)
{
// basic machine hardware
M68000(config, m_maincpu, 32_MHz_XTAL / 2); // 32MHz Oscillator, divisor not verified
- m_maincpu->set_addrmap(AS_PROGRAM, &toaplan2_state::nprobowl_68k_mem);
+ m_maincpu->set_addrmap(AS_PROGRAM, &truxton2_state::nprobowl_68k_mem);
+ m_maincpu->reset_cb().set(FUNC(truxton2_state::toaplan2_reset));
ADDRESS_MAP_BANK(config, m_dma_space, 0);
- m_dma_space->set_addrmap(0, &toaplan2_state::batrider_dma_mem);
+ m_dma_space->set_addrmap(0, &truxton2_state::batrider_dma_mem);
m_dma_space->set_endianness(ENDIANNESS_BIG);
m_dma_space->set_data_width(16);
m_dma_space->set_addr_width(16);
@@ -4314,8 +4577,8 @@ void toaplan2_state::nprobowl(machine_config &config)
//m_screen->set_refresh_hz(60);
//m_screen->set_size(432, 262);
//m_screen->set_visarea(0, 319, 0, 239);
- m_screen->set_screen_update(FUNC(toaplan2_state::screen_update_truxton2));
- m_screen->screen_vblank().set(FUNC(toaplan2_state::screen_vblank));
+ m_screen->set_screen_update(FUNC(truxton2_state::screen_update_truxton2));
+ m_screen->screen_vblank().set(FUNC(truxton2_state::screen_vblank));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_batrider);
@@ -4325,7 +4588,7 @@ void toaplan2_state::nprobowl(machine_config &config)
m_vdp[0]->set_palette(m_palette);
m_vdp[0]->vint_out_cb().set_inputline(m_maincpu, M68K_IRQ_2);
- MCFG_VIDEO_START_OVERRIDE(toaplan2_state, batrider)
+ MCFG_VIDEO_START_OVERRIDE(truxton2_state, batrider)
// sound hardware
SPEAKER(config, "mono").front_center();
@@ -4493,6 +4756,40 @@ ROM_START( dogyuunt )
ROM_END
+/*
+This set came on a TX-022 PCB (different from the final version, TP-022).
+Seems the game is always in 'debug mode' according to the test menu (dip has no effect). Still, it has no invicibility effect.
+Couldn't find a read for the region settings jumpers.
+Hardware differences according to the dumper:
+* Two GCUs have nearly identical sections copy-pasted, one above the other.
+* Toaplan HK-1000 ceramic module is used for inputs; the final implements the logic separately.
+* Inputs mapped in the main CPU address space.
+* No NEC V25 sound CPU; instead, there is a Z80 with its own ROM.
+* Sound amp pinout is reversed; mounted to the underside as a bodge fix (this is how I received it).
+* Board is marked "TX-022" instead of "TP-022". A halfway point from the development code "GX-022"
+*/
+ROM_START( dogyuunto )
+ ROM_REGION( 0x080000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "8-25.u11", 0x000000, 0x080000, CRC(4d3c952f) SHA1(194f3065c513238921047ead8b425c3d0538b9a7) ) // real hand-written label is '8/25'
+
+ ROM_REGION( 0x08000, "audiocpu", 0 )
+ ROM_LOAD( "u25", 0x00000, 0x08000, CRC(41a34a7e) SHA1(c4f7833249436fd064c7088c9776d12dee4a7d39) ) // only had a white label
+
+ // the GP9001 mask ROMs were not dumped for this set, but the ROM codes match so they are believed identical
+ ROM_REGION( 0x200000, "gp9001_0", 0 )
+ ROM_LOAD16_WORD_SWAP( "tp022_3.w92", 0x000000, 0x100000, CRC(191b595f) SHA1(89344946daa18087cc83f92027cf5da659b1c7a5) )
+ ROM_LOAD16_WORD_SWAP( "tp022_4.w93", 0x100000, 0x100000, CRC(d58d29ca) SHA1(90d142fef37764ef817347a2bed77892a288a077) )
+
+ ROM_REGION( 0x400000, "gp9001_1", 0 )
+ ROM_LOAD16_WORD_SWAP( "tp022_5.w16", 0x000000, 0x200000, CRC(d4c1db45) SHA1(f5655467149ba737128c2f54c9c6cdaca6e4c35c) )
+ ROM_LOAD16_WORD_SWAP( "tp022_6.w17", 0x200000, 0x200000, CRC(d48dc74f) SHA1(081b5a00a2ff2bd82b98b30aab3cb5b6ae1014d5) )
+
+ // this may have some corruption (only 24, apparently random, bytes differ from the standard ROM), however preserve it for now until it has been verified.
+ ROM_REGION( 0x40000, "oki1", 0 )
+ ROM_LOAD( "2m.u29", 0x00000, 0x40000, CRC(5e7a77d8) SHA1(da6beb5e8e015965ff42fd52f5aa0c0ae5bcee4f) ) // '2M' hand-written
+ROM_END
+
+
ROM_START( kbash )
ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */
ROM_LOAD16_WORD_SWAP( "tp023_01.bin", 0x000000, 0x080000, CRC(2965f81d) SHA1(46f2df30fa92c80ba5a37f75e756424e15534784) )
@@ -5099,28 +5396,87 @@ ROM_START( batsugunbl )
ROM_LOAD( "27c040.bin", 0x00000, 0x80000, CRC(1f8ec1b6) SHA1(28107a90d29613ceddc001df2556543b33c1294c) )
ROM_END
-ROM_START( pwrkick )
+ROM_START( pwrkick ) // Sunwise SW931201-1 PCB - 8-liner connections
ROM_REGION( 0x80000, "maincpu", ROMREGION_ERASE00 )
- ROM_LOAD16_WORD_SWAP( "1.u61", 0x000000, 0x080000, CRC(118b5899) SHA1(7a1637a63eb17e3892d79aede5730013a1dc00f9) )
+ ROM_LOAD16_WORD_SWAP( "1.u61", 0x000000, 0x080000, CRC(118b5899) SHA1(7a1637a63eb17e3892d79aede5730013a1dc00f9) )
ROM_REGION( 0x100000, "gp9001_0", ROMREGION_ERASE00 )
- ROM_LOAD( "2.u26", 0x000000, 0x080000, CRC(a190eaea) SHA1(2c7b8c8026873e0f591fbcbc2e72b196ef84e162) )
- ROM_LOAD( "3.u27", 0x080000, 0x080000, CRC(0b81e038) SHA1(8376617ae519a8ef604f20b26e941aa5b8066602) )
+ ROM_LOAD( "2.u26", 0x000000, 0x080000, CRC(a190eaea) SHA1(2c7b8c8026873e0f591fbcbc2e72b196ef84e162) )
+ ROM_LOAD( "3.u27", 0x080000, 0x080000, CRC(0b81e038) SHA1(8376617ae519a8ef604f20b26e941aa5b8066602) )
ROM_REGION( 0x80000, "oki1", ROMREGION_ERASE00 )
- ROM_LOAD( "4.u33", 0x000000, 0x080000, CRC(3ab742f1) SHA1(ce8ca02ca57fd77872e421ce601afd017d3518a0) )
+ ROM_LOAD( "4.u33", 0x000000, 0x080000, CRC(3ab742f1) SHA1(ce8ca02ca57fd77872e421ce601afd017d3518a0) )
ROM_END
-ROM_START( othldrby )
+/*
+
+Burger Kids, 1995 Sunwise
+
+SW931201-1
++--||||||-----------------------------------------+
+| YM3014* YM2151* |
+| TDA1519A M6295 FFK4.U33 BT1 |
+| U31* |
+| 16.000MHz 32.768kHz D4992C |
+| MB3771 |
+|8 |
+|- U67* |
+|L FFK1.U61 62256 |
+|I U68* 62256 |
+|N GAL16V8B TMP68HC000P-12 |
+|E |
+|R |
+| 1635 27.000MHz FFK3.U27 |
+| GAL16V8B 1635 20.000MHz U12* |
+| SW1 GAL16V8B +---------+ FFK2.U26 |
+| SW2 | L7A0498 | U13* |
+| SW3 | GP9001 | 4256 4256 |
+| 6216 +---------+ 4256 4256 |
+| 6216 4256 4256 |
++-------------------------------------------------+
+
+NOTE: This PCB uses an 8-Liner style edge connector
+
+* Denotes unpopulated components
+
+ CPU: Toshiba TMP68HC000P-12
+ Sound: OKI M6295
+ Video: L7A0498 GP9001 QFP208
+ OSC: 27MHz, 20MHz, 16MHz & 32.768kHz
+ RAM: MB81C4256A-70P - 256K x 4-bit DRAM
+ HM62256BLP-9 - 32K x 8-bit SRAM
+ IMS1635P-25 - 8K x 8-bit SRAM
+ XRM6216-10 - 2K x 8-bit SRAM
+ Other: 8 Position Dipswitch x 3
+ NEC D4992 CMOS 8-Bit Parallel I/O Calendar Clock
+ MB3771 Voltage monitor
+ BT1 - CR2550 3Volt battery
+
+NOTE: Sunwise's S951060-VGP PCB uses identical componenets to the SW931201 but has a standard JAMMA connector
+*/
+
+ROM_START( burgkids ) // Sunwise SW931201-1 PCB - 8-liner connections
+ ROM_REGION( 0x80000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD16_WORD_SWAP( "ffk1.u61", 0x000000, 0x080000, CRC(ac96cb0d) SHA1(2ce5c06d61f3ff18b222619e41d09e46d44c5bab) )
+
+ ROM_REGION( 0x100000, "gp9001_0", ROMREGION_ERASE00 )
+ ROM_LOAD( "ffk2.u26", 0x000000, 0x080000, CRC(09f7b0ae) SHA1(f340f27a601ff89f143398263d822b8f340eea6e) )
+ ROM_LOAD( "ffk3.u27", 0x080000, 0x080000, CRC(63c761bc) SHA1(f0ee1dc6aaeacff23e55d072102b814c7ef30550) )
+
+ ROM_REGION( 0x80000, "oki1", ROMREGION_ERASE00 )
+ ROM_LOAD( "ffk4.u33", 0x000000, 0x080000, CRC(3b032d4f) SHA1(69056bf205aadf6c9fee56ce396b11a5187caa03) )
+ROM_END
+
+ROM_START( othldrby ) // Sunwise S951060-VGP PCB - JAMMA compliant (components identical to Sunwise SW931201-1 PCB)
ROM_REGION( 0x080000, "maincpu", 0 )
- ROM_LOAD16_WORD_SWAP( "db0.1", 0x00000, 0x80000, CRC(6b4008d3) SHA1(4cf838c47563ba482be8364b2e115569a4a06c83) )
+ ROM_LOAD16_WORD_SWAP( "sunwise_db0_1.u61", 0x00000, 0x80000, CRC(6b4008d3) SHA1(4cf838c47563ba482be8364b2e115569a4a06c83) )
ROM_REGION( 0x400000, "gp9001_0", 0 )
- ROM_LOAD( "db0-r2", 0x000000, 0x200000, CRC(4efff265) SHA1(4cd239ff42f532495946cb52bd1fee412f84e192) )
- ROM_LOAD( "db0-r3", 0x200000, 0x200000, CRC(5c142b38) SHA1(5466a8b061a0f2545493de0f96fd4387beea276a) )
+ ROM_LOAD( "db0-r2.u26", 0x000000, 0x200000, CRC(4efff265) SHA1(4cd239ff42f532495946cb52bd1fee412f84e192) ) // mask ROMs
+ ROM_LOAD( "db0-r3.u27", 0x200000, 0x200000, CRC(5c142b38) SHA1(5466a8b061a0f2545493de0f96fd4387beea276a) )
ROM_REGION( 0x080000, "oki1", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "db0.4", 0x00000, 0x80000, CRC(a9701868) SHA1(9ee89556666d358e8d3915622573b3ba660048b8) )
+ ROM_LOAD( "sunwise_db0_4.u33", 0x00000, 0x80000, CRC(a9701868) SHA1(9ee89556666d358e8d3915622573b3ba660048b8) )
ROM_END
ROM_START( enmadaio )
@@ -5194,6 +5550,20 @@ ROM_START( snowbro2b2 ) // seems to mostly be the same data, but with copyright
ROM_LOAD( "rom09.bin", 0x00000, 0x80000, CRC(638f341e) SHA1(aa3fca25f099339ece1878ea730c5e9f18ec4823) )
ROM_END
+ROM_START( snowbro2b3 ) // SK000616 PCB, no original parts, seems hardcoded on Europe region
+ ROM_REGION( 0x080000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "prg", 0x000000, 0x080000, CRC(8ce2ede2) SHA1(ddd8a2aa442cd5bb3a7d393b9b5c06fd981e7c61) )
+
+ ROM_REGION( 0x400000, "gp9001_0", 0 ) // not actually a GP9001
+ ROM_LOAD( "gfx2", 0x100000, 0x100000, CRC(a3be41af) SHA1(4cb1ce9c47bf8bbf7d1e36f6a1d276ce52957cfb) )
+ ROM_CONTINUE( 0x000000, 0x100000 )
+ ROM_LOAD( "gfx1", 0x300000, 0x100000, CRC(8df1ab06) SHA1(2a28caf7d545dc05acfcd2a8d2ffbd9f710af45d) )
+ ROM_CONTINUE( 0x200000, 0x100000 )
+
+ ROM_REGION( 0x80000, "oki1", 0 )
+ ROM_LOAD( "voice", 0x00000, 0x80000, CRC(638f341e) SHA1(aa3fca25f099339ece1878ea730c5e9f18ec4823) )
+ROM_END
+
ROM_START( snowbro2ny ) // Nyanko
ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */
ROM_LOAD16_WORD_SWAP( "rom1_c8.u61", 0x000000, 0x080000, CRC(9e6eb76b) SHA1(9e8b356dabedeb4ae9e08d60fbf6ed4a09edc0bd) )
@@ -5545,7 +5915,7 @@ ROM_START( bgareggacn )
ROM_LOAD( "rom5.bin", 0x000000, 0x100000, CRC(f6d49863) SHA1(3a3c354852adad06e8a051511abfab7606bce382) )
ROM_END
-
+// 1945二代 (1945 Èr Dài)
ROM_START( bgareggabl )
ROM_REGION( 0x100000, "maincpu", 0 ) /* Main 68K code */
ROM_LOAD16_WORD_SWAP( "xt-8m.bin", 0x000000, 0x100000, CRC(4a6657cb) SHA1(1838956e7597eaa78ea5ee58d0ccc79cbbd7ded5) )
@@ -5567,6 +5937,7 @@ ROM_START( bgareggabl )
ROM_LOAD( "rom5.bin", 0x000000, 0x100000, CRC(f6d49863) SHA1(3a3c354852adad06e8a051511abfab7606bce382) )
ROM_END
+// 雷神传 (Léishén Chuán)
ROM_START( bgareggabla )
ROM_REGION( 0x100000, "maincpu", 0 ) /* Main 68K code */
ROM_LOAD16_WORD_SWAP( "27c8100.mon-sys", 0x000000, 0x100000, CRC(d334e5aa) SHA1(41607b5630d7b92a96607ea95c5b55ad43745857) )
@@ -6068,14 +6439,15 @@ ROM_END
GAME( 1991, tekipaki, 0, tekipaki, tekipaki, toaplan2_state, empty_init, ROT0, "Toaplan", "Teki Paki", MACHINE_SUPPORTS_SAVE )
GAME( 1991, tekipakit, tekipaki, tekipaki, tekipaki, toaplan2_state, empty_init, ROT0, "Toaplan", "Teki Paki (location test)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, ghox, 0, ghox, ghox, toaplan2_state, empty_init, ROT270, "Toaplan", "Ghox (spinner)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, ghoxj, ghox, ghox, ghox, toaplan2_state, empty_init, ROT270, "Toaplan", "Ghox (joystick)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, ghoxjo, ghox, ghox, ghoxjo, toaplan2_state, empty_init, ROT270, "Toaplan", "Ghox (joystick, older)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, ghox, 0, ghox, ghox, ghox_state, empty_init, ROT270, "Toaplan", "Ghox (spinner)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, ghoxj, ghox, ghox, ghox, ghox_state, empty_init, ROT270, "Toaplan", "Ghox (joystick)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, ghoxjo, ghox, ghox, ghoxjo, ghox_state, empty_init, ROT270, "Toaplan", "Ghox (joystick, older)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, dogyuun, 0, dogyuun, dogyuun, toaplan2_state, init_dogyuun, ROT270, "Toaplan", "Dogyuun", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, dogyuuna, dogyuun, dogyuun, dogyuuna, toaplan2_state, init_dogyuun, ROT270, "Toaplan", "Dogyuun (older set)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, dogyuunb, dogyuun, dogyuun, dogyuunt, toaplan2_state, init_dogyuun, ROT270, "Toaplan", "Dogyuun (oldest set)", MACHINE_SUPPORTS_SAVE ) // maybe a newer location test version, instead
-GAME( 1992, dogyuunt, dogyuun, dogyuun, dogyuunt, toaplan2_state, init_dogyuun, ROT270, "Toaplan", "Dogyuun (location test)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, dogyuun, 0, dogyuun, dogyuun, toaplan2_state, init_dogyuun, ROT270, "Toaplan", "Dogyuun", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, dogyuuna, dogyuun, dogyuun, dogyuuna, toaplan2_state, init_dogyuun, ROT270, "Toaplan", "Dogyuun (older set)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, dogyuunb, dogyuun, dogyuun, dogyuunt, toaplan2_state, init_dogyuun, ROT270, "Toaplan", "Dogyuun (oldest set)", MACHINE_SUPPORTS_SAVE ) // maybe a newer location test version, instead
+GAME( 1992, dogyuunt, dogyuun, dogyuun, dogyuunt, toaplan2_state, init_dogyuun, ROT270, "Toaplan", "Dogyuun (10/9/1992 location test)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, dogyuunto, dogyuun, dogyuunto, dogyuunt, toaplan2_state, init_vfive, ROT270, "Toaplan", "Dogyuun (8/25/1992 location test)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, kbash, 0, kbash, kbash, toaplan2_state, empty_init, ROT0, "Toaplan / Atari", "Knuckle Bash", MACHINE_SUPPORTS_SAVE ) // Atari license shown for some regions.
GAME( 1993, kbashk, kbash, kbash, kbashk, toaplan2_state, empty_init, ROT0, "Toaplan / Taito", "Knuckle Bash (Korean PCB)", MACHINE_SUPPORTS_SAVE ) // Japan region has optional Taito license, maybe the original Japan release?
@@ -6083,7 +6455,7 @@ GAME( 1993, kbashp, kbash, kbash, kbash, toaplan2_state, emp
GAME( 1999, kbash2, 0, kbash2, kbash2, toaplan2_state, empty_init, ROT0, "bootleg", "Knuckle Bash 2 (bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, truxton2, 0, truxton2, truxton2, toaplan2_state, empty_init, ROT270, "Toaplan", "Truxton II / Tatsujin Oh", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, truxton2, 0, truxton2, truxton2, truxton2_state, empty_init, ROT270, "Toaplan", "Truxton II / Tatsujin Oh", MACHINE_SUPPORTS_SAVE )
GAME( 1991, pipibibs, 0, pipibibs, pipibibs, toaplan2_state, empty_init, ROT0, "Toaplan", "Pipi & Bibis / Whoopee!! (Z80 sound cpu, set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, pipibibsa, pipibibs, pipibibs, pipibibs, toaplan2_state, empty_init, ROT0, "Toaplan", "Pipi & Bibis / Whoopee!! (Z80 sound cpu, set 2)", MACHINE_SUPPORTS_SAVE )
@@ -6097,22 +6469,22 @@ GAME( 1991, pipibibsbl3, pipibibs, pipibibsbl, pipibibsbl, toaplan2_state, emp
GAME( 1993, enmadaio, 0, enmadaio, enmadaio, toaplan2_state, init_enmadaio, ROT0, "Toaplan / Taito", "Enma Daio (Japan)", 0 ) // TP-031
// region is in eeprom (and also requires correct return value from a v25 mapped address??)
-GAME( 1992, fixeight, 0, fixeight, fixeight, toaplan2_state, init_fixeight, ROT270, "Toaplan", "FixEight (Europe)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, fixeightk, fixeight, fixeight, fixeight, toaplan2_state, init_fixeight, ROT270, "Toaplan", "FixEight (Korea)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, fixeighth, fixeight, fixeight, fixeight, toaplan2_state, init_fixeight, ROT270, "Toaplan", "FixEight (Hong Kong)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, fixeighttw, fixeight, fixeight, fixeight, toaplan2_state, init_fixeight, ROT270, "Toaplan", "FixEight (Taiwan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, fixeighta, fixeight, fixeight, fixeight, toaplan2_state, init_fixeight, ROT270, "Toaplan", "FixEight (Southeast Asia)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, fixeightu, fixeight, fixeight, fixeight, toaplan2_state, init_fixeight, ROT270, "Toaplan", "FixEight (USA)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, fixeightj, fixeight, fixeight, fixeight, toaplan2_state, init_fixeight, ROT270, "Toaplan", "FixEight - Jigoku no Eiyuu Densetsu (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, fixeightt, fixeight, fixeight, fixeight, toaplan2_state, init_fixeight, ROT270, "Toaplan (Taito license)", "FixEight (Europe, Taito license)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, fixeightkt, fixeight, fixeight, fixeight, toaplan2_state, init_fixeight, ROT270, "Toaplan (Taito license)", "FixEight (Korea, Taito license)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, fixeightht, fixeight, fixeight, fixeight, toaplan2_state, init_fixeight, ROT270, "Toaplan (Taito license)", "FixEight (Hong Kong, Taito license)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, fixeighttwt, fixeight, fixeight, fixeight, toaplan2_state, init_fixeight, ROT270, "Toaplan (Taito license)", "FixEight (Taiwan, Taito license)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, fixeightat, fixeight, fixeight, fixeight, toaplan2_state, init_fixeight, ROT270, "Toaplan (Taito license)", "FixEight (Southeast Asia, Taito license)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, fixeightut, fixeight, fixeight, fixeight, toaplan2_state, init_fixeight, ROT270, "Toaplan (Taito license)", "FixEight (USA, Taito license)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, fixeightjt, fixeight, fixeight, fixeight, toaplan2_state, init_fixeight, ROT270, "Toaplan (Taito license)", "FixEight - Jigoku no Eiyuu Densetsu (Japan, Taito license)", MACHINE_SUPPORTS_SAVE )
-
-GAME( 1992, fixeightbl, fixeight, fixeightbl, fixeightbl, toaplan2_state, init_fixeightbl, ROT270,"bootleg", "FixEight (Korea, bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, fixeight, 0, fixeight, fixeight, truxton2_state, init_fixeight, ROT270, "Toaplan", "FixEight (Europe)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, fixeightk, fixeight, fixeight, fixeight, truxton2_state, init_fixeight, ROT270, "Toaplan", "FixEight (Korea)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, fixeighth, fixeight, fixeight, fixeight, truxton2_state, init_fixeight, ROT270, "Toaplan", "FixEight (Hong Kong)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, fixeighttw, fixeight, fixeight, fixeight, truxton2_state, init_fixeight, ROT270, "Toaplan", "FixEight (Taiwan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, fixeighta, fixeight, fixeight, fixeight, truxton2_state, init_fixeight, ROT270, "Toaplan", "FixEight (Southeast Asia)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, fixeightu, fixeight, fixeight, fixeight, truxton2_state, init_fixeight, ROT270, "Toaplan", "FixEight (USA)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, fixeightj, fixeight, fixeight, fixeight, truxton2_state, init_fixeight, ROT270, "Toaplan", "FixEight - Jigoku no Eiyuu Densetsu (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, fixeightt, fixeight, fixeight, fixeight, truxton2_state, init_fixeight, ROT270, "Toaplan (Taito license)", "FixEight (Europe, Taito license)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, fixeightkt, fixeight, fixeight, fixeight, truxton2_state, init_fixeight, ROT270, "Toaplan (Taito license)", "FixEight (Korea, Taito license)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, fixeightht, fixeight, fixeight, fixeight, truxton2_state, init_fixeight, ROT270, "Toaplan (Taito license)", "FixEight (Hong Kong, Taito license)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, fixeighttwt, fixeight, fixeight, fixeight, truxton2_state, init_fixeight, ROT270, "Toaplan (Taito license)", "FixEight (Taiwan, Taito license)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, fixeightat, fixeight, fixeight, fixeight, truxton2_state, init_fixeight, ROT270, "Toaplan (Taito license)", "FixEight (Southeast Asia, Taito license)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, fixeightut, fixeight, fixeight, fixeight, truxton2_state, init_fixeight, ROT270, "Toaplan (Taito license)", "FixEight (USA, Taito license)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, fixeightjt, fixeight, fixeight, fixeight, truxton2_state, init_fixeight, ROT270, "Toaplan (Taito license)", "FixEight - Jigoku no Eiyuu Densetsu (Japan, Taito license)", MACHINE_SUPPORTS_SAVE )
+
+GAME( 1992, fixeightbl, fixeight, fixeightbl, fixeightbl, truxton2_state, init_fixeightbl, ROT270, "bootleg", "FixEight (Korea, bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1992, grindstm, 0, vfive, grindstm, toaplan2_state, init_vfive, ROT270, "Toaplan", "Grind Stormer", MACHINE_SUPPORTS_SAVE )
GAME( 1992, grindstma, grindstm, vfive, grindstma, toaplan2_state, init_vfive, ROT270, "Toaplan", "Grind Stormer (older set)", MACHINE_SUPPORTS_SAVE )
@@ -6125,52 +6497,54 @@ GAME( 1993, batsugunb, batsugun, batsugun, batsugun, toaplan2_state, init_
GAME( 1993, batsugunsp, batsugun, batsugun, batsugun, toaplan2_state, init_dogyuun, ROT270, "Toaplan", "Batsugun - Special Version", MACHINE_SUPPORTS_SAVE )
GAME( 1993, batsugunbl, batsugun, batsugunbl, batsugunbl, toaplan2_state, init_fixeightbl, ROT270, "Toaplan", "Batsugun (bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // needs correct GFX offsets and oki banking fix
-GAME( 1994, pwrkick, 0, pwrkick, pwrkick, toaplan2_state, empty_init, ROT0, "Sunwise", "Power Kick (Japan)", 0 )
-GAME( 1995, othldrby, 0, othldrby, othldrby, toaplan2_state, empty_init, ROT0, "Sunwise", "Othello Derby (Japan)", 0 )
+GAME( 1994, pwrkick, 0, pwrkick, pwrkick, pwrkick_state, empty_init, ROT0, "Sunwise", "Power Kick (Japan)", 0 )
+GAME( 1995, burgkids, 0, pwrkick, burgkids, pwrkick_state, empty_init, ROT0, "Sunwise", "Burger Kids (Japan)", 0 )
+GAME( 1995, othldrby, 0, othldrby, othldrby, pwrkick_state, empty_init, ROT0, "Sunwise", "Othello Derby (Japan)", 0 )
GAME( 1994, snowbro2, 0, snowbro2, snowbro2, toaplan2_state, empty_init, ROT0, "Hanafram", "Snow Bros. 2 - With New Elves / Otenki Paradise (Hanafram)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, snowbro2ny, snowbro2, snowbro2, snowbro2, toaplan2_state, empty_init, ROT0, "Nyanko", "Snow Bros. 2 - With New Elves / Otenki Paradise (Nyanko)", MACHINE_SUPPORTS_SAVE ) // not a bootleg, has original parts (the "GP9001 L7A0498 TOA PLAN" IC and the three mask ROMs)
GAME( 1998, snowbro2b, snowbro2, snowbro2, snowbro2, toaplan2_state, empty_init, ROT0, "bootleg", "Snow Bros. 2 - With New Elves / Otenki Paradise (bootleg, set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, snowbro2b2, snowbro2, snowbro2, snowbro2, toaplan2_state, empty_init, ROT0, "bootleg (Q Elec)", "Snow Bros. 2 - With New Elves / Otenki Paradise (bootleg, set 2)", MACHINE_SUPPORTS_SAVE ) // possibly not a bootleg, has some original parts
-
-GAME( 1993, sstriker, 0, mahoudai, sstriker, toaplan2_state, empty_init, ROT270, "Raizing", "Sorcer Striker", MACHINE_SUPPORTS_SAVE ) // verified on two different PCBs
-GAME( 1993, sstrikerk, sstriker, mahoudai, sstrikerk, toaplan2_state, empty_init, ROT270, "Raizing (Unite Trading license)", "Sorcer Striker (Korea)" , MACHINE_SUPPORTS_SAVE ) // Although the region jumper is functional, it's a Korean board / version
-GAME( 1993, mahoudai, sstriker, mahoudai, mahoudai, toaplan2_state, empty_init, ROT270, "Raizing (Able license)", "Mahou Daisakusen (Japan)", MACHINE_SUPPORTS_SAVE )
-
-GAME( 1994, kingdmgp, 0, shippumd, kingdmgp, toaplan2_state, empty_init, ROT270, "Raizing / Eighting", "Kingdom Grandprix", MACHINE_SUPPORTS_SAVE ) // from Korean board, missing letters on credits screen but this is correct
-GAME( 1994, shippumd, kingdmgp, shippumd, shippumd, toaplan2_state, empty_init, ROT270, "Raizing / Eighting", "Shippu Mahou Daisakusen (Japan)", MACHINE_SUPPORTS_SAVE )
-
-GAME( 1996, bgaregga, 0, bgaregga, bgaregga, toaplan2_state, init_bgaregga, ROT270, "Raizing / Eighting", "Battle Garegga (Europe / USA / Japan / Asia) (Sat Feb 3 1996)", MACHINE_SUPPORTS_SAVE )
-GAME( 1996, bgareggat, bgaregga, bgaregga, bgaregga, toaplan2_state, init_bgaregga, ROT270, "Raizing / Eighting", "Battle Garegga (location test) (Wed Jan 17 1996)", MACHINE_SUPPORTS_SAVE )
-GAME( 1996, bgareggahk, bgaregga, bgaregga, bgareggahk, toaplan2_state, init_bgaregga, ROT270, "Raizing / Eighting", "Battle Garegga (Austria / Hong Kong) (Sat Feb 3 1996)", MACHINE_SUPPORTS_SAVE )
-GAME( 1996, bgareggatw, bgaregga, bgaregga, bgareggatw, toaplan2_state, init_bgaregga, ROT270, "Raizing / Eighting", "Battle Garegga (Taiwan / Germany) (Thu Feb 1 1996)", MACHINE_SUPPORTS_SAVE )
-GAME( 1996, bgareggak, bgaregga, bgaregga, bgareggak, toaplan2_state, init_bgaregga, ROT270, "Raizing / Eighting", "Battle Garegga (Korea / Greece) (Wed Feb 7 1996)", MACHINE_SUPPORTS_SAVE )
-GAME( 1996, bgaregganv, bgaregga, bgaregga, bgareggahk, toaplan2_state, init_bgaregga, ROT270, "Raizing / Eighting", "Battle Garegga - New Version (Austria / Hong Kong) (Sat Mar 2 1996)" , MACHINE_SUPPORTS_SAVE ) // displays New Version only when set to HK
-GAME( 1996, bgareggat2, bgaregga, bgaregga, bgaregga, toaplan2_state, init_bgaregga, ROT270, "Raizing / Eighting", "Battle Garegga - Type 2 (Europe / USA / Japan / Asia) (Sat Mar 2 1996)" , MACHINE_SUPPORTS_SAVE ) // displays Type 2 only when set to Europe
-GAME( 1996, bgareggacn, bgaregga, bgaregga, bgareggacn, toaplan2_state, init_bgaregga, ROT270, "Raizing / Eighting", "Battle Garegga - Type 2 (Denmark / China) (Tue Apr 2 1996)", MACHINE_SUPPORTS_SAVE ) // displays Type 2 only when set to Denmark
-GAME( 1996, bgareggabl, bgaregga, bgareggabl, bgareggacn, toaplan2_state, init_bgaregga, ROT270, "bootleg", "1945 Part-2 (Chinese hack of Battle Garegga)", MACHINE_SUPPORTS_SAVE )
-GAME( 1996, bgareggabla, bgaregga, bgareggabl, bgareggacn, toaplan2_state, init_bgaregga, ROT270, "bootleg", "Lei Shen Zhuan Thunder Deity Biography (Chinese hack of Battle Garegga)", MACHINE_SUPPORTS_SAVE )
-GAME( 1996, bgareggablj, bgaregga, bgareggabl, bgaregga, toaplan2_state, init_bgaregga, ROT270, "bootleg", "Battle Garegga (Japan, bootleg) (Sat Feb 3 1996)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, snowbro2b3, snowbro2, snowbro2b3, snowbro2b3, toaplan2_state, empty_init, ROT0, "bootleg", "Snow Bros. 2 - With New Elves / Otenki Paradise (bootleg, set 3)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // GFX offsets not 100% correct
+
+GAME( 1993, sstriker, 0, mahoudai, sstriker, truxton2_state, empty_init, ROT270, "Raizing", "Sorcer Striker", MACHINE_SUPPORTS_SAVE ) // verified on two different PCBs
+GAME( 1993, sstrikerk, sstriker, mahoudai, sstrikerk, truxton2_state, empty_init, ROT270, "Raizing (Unite Trading license)", "Sorcer Striker (Korea)", MACHINE_SUPPORTS_SAVE ) // Although the region jumper is functional, it's a Korean board / version
+GAME( 1993, mahoudai, sstriker, mahoudai, mahoudai, truxton2_state, empty_init, ROT270, "Raizing (Able license)", "Mahou Daisakusen (Japan)", MACHINE_SUPPORTS_SAVE )
+
+GAME( 1994, kingdmgp, 0, shippumd, kingdmgp, truxton2_state, empty_init, ROT270, "Raizing / Eighting", "Kingdom Grandprix", MACHINE_SUPPORTS_SAVE ) // from Korean board, missing letters on credits screen but this is correct
+GAME( 1994, shippumd, kingdmgp, shippumd, shippumd, truxton2_state, empty_init, ROT270, "Raizing / Eighting", "Shippu Mahou Daisakusen (Japan)", MACHINE_SUPPORTS_SAVE )
+
+GAME( 1996, bgaregga, 0, bgaregga, bgaregga, truxton2_state, init_bgaregga, ROT270, "Raizing / Eighting", "Battle Garegga (Europe / USA / Japan / Asia) (Sat Feb 3 1996)", MACHINE_SUPPORTS_SAVE )
+GAME( 1996, bgareggat, bgaregga, bgaregga, bgaregga, truxton2_state, init_bgaregga, ROT270, "Raizing / Eighting", "Battle Garegga (location test) (Wed Jan 17 1996)", MACHINE_SUPPORTS_SAVE )
+GAME( 1996, bgareggahk, bgaregga, bgaregga, bgareggahk, truxton2_state, init_bgaregga, ROT270, "Raizing / Eighting", "Battle Garegga (Austria / Hong Kong) (Sat Feb 3 1996)", MACHINE_SUPPORTS_SAVE )
+GAME( 1996, bgareggatw, bgaregga, bgaregga, bgareggatw, truxton2_state, init_bgaregga, ROT270, "Raizing / Eighting", "Battle Garegga (Taiwan / Germany) (Thu Feb 1 1996)", MACHINE_SUPPORTS_SAVE )
+GAME( 1996, bgareggak, bgaregga, bgaregga, bgareggak, truxton2_state, init_bgaregga, ROT270, "Raizing / Eighting", "Battle Garegga (Korea / Greece) (Wed Feb 7 1996)", MACHINE_SUPPORTS_SAVE )
+GAME( 1996, bgaregganv, bgaregga, bgaregga, bgareggahk, truxton2_state, init_bgaregga, ROT270, "Raizing / Eighting", "Battle Garegga - New Version (Austria / Hong Kong) (Sat Mar 2 1996)", MACHINE_SUPPORTS_SAVE ) // displays New Version only when set to HK
+GAME( 1996, bgareggat2, bgaregga, bgaregga, bgaregga, truxton2_state, init_bgaregga, ROT270, "Raizing / Eighting", "Battle Garegga - Type 2 (Europe / USA / Japan / Asia) (Sat Mar 2 1996)", MACHINE_SUPPORTS_SAVE ) // displays Type 2 only when set to Europe
+GAME( 1996, bgareggacn, bgaregga, bgaregga, bgareggacn, truxton2_state, init_bgaregga, ROT270, "Raizing / Eighting", "Battle Garegga - Type 2 (Denmark / China) (Tue Apr 2 1996)", MACHINE_SUPPORTS_SAVE ) // displays Type 2 only when set to Denmark
+GAME( 1998, bgareggabl, bgaregga, bgareggabl, bgareggabl, truxton2_state, init_bgaregga, ROT270, "bootleg (Melody)", "1945 Er Dai / 1945 Part-2 (Chinese hack of Battle Garegga)", MACHINE_SUPPORTS_SAVE ) // based on Thu Feb 1 1996 set, Region hardcoded to China
+GAME( 1997, bgareggabla, bgaregga, bgareggabl, bgareggabl, truxton2_state, init_bgaregga, ROT270, "bootleg (Melody)", "Leishen Chuan / Thunder Deity Biography (Chinese hack of Battle Garegga)", MACHINE_SUPPORTS_SAVE ) // based on Thu Feb 1 1996 set, Region hardcoded to Asia
+GAME( 1996, bgareggablj, bgaregga, bgareggabl, bgareggabl, truxton2_state, init_bgaregga, ROT270, "bootleg", "Battle Garegga (Japan, bootleg) (Sat Feb 3 1996)", MACHINE_SUPPORTS_SAVE )
// these are all based on Version B, even if only the Japan version states 'version B'
-GAME( 1998, batrider, 0, batrider, batrider, toaplan2_state, init_batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Europe) (Fri Feb 13 1998)", MACHINE_SUPPORTS_SAVE )
-GAME( 1998, batrideru, batrider, batrider, batrider, toaplan2_state, init_batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (USA) (Fri Feb 13 1998)", MACHINE_SUPPORTS_SAVE )
-GAME( 1998, batriderc, batrider, batrider, batrider, toaplan2_state, init_batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (China) (Fri Feb 13 1998)", MACHINE_SUPPORTS_SAVE )
-GAME( 1998, batriderj, batrider, batrider, batriderj, toaplan2_state, init_batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Japan, B version) (Fri Feb 13 1998)", MACHINE_SUPPORTS_SAVE )
-GAME( 1998, batriderk, batrider, batrider, batrider, toaplan2_state, init_batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Korea) (Fri Feb 13 1998)", MACHINE_SUPPORTS_SAVE )
+GAME( 1998, batrider, 0, batrider, batrider, truxton2_state, init_batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Europe) (Fri Feb 13 1998)", MACHINE_SUPPORTS_SAVE )
+GAME( 1998, batrideru, batrider, batrider, batrider, truxton2_state, init_batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (USA) (Fri Feb 13 1998)", MACHINE_SUPPORTS_SAVE )
+GAME( 1998, batriderc, batrider, batrider, batrider, truxton2_state, init_batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (China) (Fri Feb 13 1998)", MACHINE_SUPPORTS_SAVE )
+GAME( 1998, batriderj, batrider, batrider, batriderj, truxton2_state, init_batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Japan, B version) (Fri Feb 13 1998)", MACHINE_SUPPORTS_SAVE )
+GAME( 1998, batriderk, batrider, batrider, batrider, truxton2_state, init_batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Korea) (Fri Feb 13 1998)", MACHINE_SUPPORTS_SAVE )
// older revision of the code
-GAME( 1998, batriderja, batrider, batrider, batriderj, toaplan2_state, init_batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Japan, older version) (Mon Dec 22 1997)", MACHINE_SUPPORTS_SAVE )
-GAME( 1998, batriderhk, batrider, batrider, batrider, toaplan2_state, init_batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Hong Kong) (Mon Dec 22 1997)", MACHINE_SUPPORTS_SAVE )
-GAME( 1998, batridert, batrider, batrider, batrider, toaplan2_state, init_batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Taiwan) (Mon Dec 22 1997)", MACHINE_SUPPORTS_SAVE )
+GAME( 1998, batriderja, batrider, batrider, batriderj, truxton2_state, init_batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Japan, older version) (Mon Dec 22 1997)", MACHINE_SUPPORTS_SAVE )
+GAME( 1998, batriderhk, batrider, batrider, batrider, truxton2_state, init_batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Hong Kong) (Mon Dec 22 1997)", MACHINE_SUPPORTS_SAVE )
+GAME( 1998, batridert, batrider, batrider, batrider, truxton2_state, init_batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Taiwan) (Mon Dec 22 1997)", MACHINE_SUPPORTS_SAVE )
// Battle Bakraid
// the 'unlimited' version is a newer revision of the code
-GAME( 1999, bbakraid, 0, bbakraid, bbakraid, toaplan2_state, init_bbakraid, ROT270, "Eighting", "Battle Bakraid - Unlimited Version (USA) (Tue Jun 8 1999)", MACHINE_SUPPORTS_SAVE )
-GAME( 1999, bbakraidc, bbakraid, bbakraid, bbakraid, toaplan2_state, init_bbakraid, ROT270, "Eighting", "Battle Bakraid - Unlimited Version (China) (Tue Jun 8 1999)", MACHINE_SUPPORTS_SAVE )
-GAME( 1999, bbakraidj, bbakraid, bbakraid, bbakraid, toaplan2_state, init_bbakraid, ROT270, "Eighting", "Battle Bakraid - Unlimited Version (Japan) (Tue Jun 8 1999)", MACHINE_SUPPORTS_SAVE )
+GAME( 1999, bbakraid, 0, bbakraid, bbakraid, truxton2_state, init_bbakraid, ROT270, "Eighting", "Battle Bakraid - Unlimited Version (USA) (Tue Jun 8 1999)", MACHINE_SUPPORTS_SAVE )
+GAME( 1999, bbakraidc, bbakraid, bbakraid, bbakraid, truxton2_state, init_bbakraid, ROT270, "Eighting", "Battle Bakraid - Unlimited Version (China) (Tue Jun 8 1999)", MACHINE_SUPPORTS_SAVE )
+GAME( 1999, bbakraidj, bbakraid, bbakraid, bbakraid, truxton2_state, init_bbakraid, ROT270, "Eighting", "Battle Bakraid - Unlimited Version (Japan) (Tue Jun 8 1999)", MACHINE_SUPPORTS_SAVE )
// older revision of the code
-GAME( 1999, bbakraidja, bbakraid, bbakraid, bbakraid, toaplan2_state, init_bbakraid, ROT270, "Eighting", "Battle Bakraid (Japan) (Wed Apr 7 1999)", MACHINE_SUPPORTS_SAVE )
+GAME( 1999, bbakraidja, bbakraid, bbakraid, bbakraid, truxton2_state, init_bbakraid, ROT270, "Eighting", "Battle Bakraid (Japan) (Wed Apr 7 1999)", MACHINE_SUPPORTS_SAVE )
// dedicated PCB
-GAME( 1996, nprobowl, 0, nprobowl, nprobowl, toaplan2_state, empty_init, ROT0, "Zuck / Able Corp", "New Pro Bowl", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_MECHANICAL | MACHINE_SUPPORTS_SAVE ) // bad GFXs, no sound banking, controls, etc
-GAME( 1996, probowl2, nprobowl, nprobowl, nprobowl, toaplan2_state, empty_init, ROT0, "Zuck / Able Corp", "Pro Bowl 2", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_MECHANICAL | MACHINE_SUPPORTS_SAVE ) // bad GFXs, no sound banking, controls, etc
+GAME( 1996, nprobowl, 0, nprobowl, nprobowl, truxton2_state, empty_init, ROT0, "Zuck / Able Corp", "New Pro Bowl", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_MECHANICAL | MACHINE_SUPPORTS_SAVE ) // bad GFXs, no sound banking, controls, etc
+GAME( 1996, probowl2, nprobowl, nprobowl, nprobowl, truxton2_state, empty_init, ROT0, "Zuck / Able Corp", "Pro Bowl 2", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_MECHANICAL | MACHINE_SUPPORTS_SAVE ) // bad GFXs, no sound banking, controls, etc