m92.cpp : Updates/Cleanups (#3651)

* m92.cpp : Cleanup duplicates, Reduce runtime tag lookups, Make EEPROM Save/loadable, Fix spacing, Split machine configs/address maps related to main CPU ROM, Add notes

* m92.cpp : Minor fix spacing
This commit is contained in:
cam900 2018-06-16 23:51:30 +09:00 committed by Vas Crabb
parent 2d88b65933
commit 67fd77d244
3 changed files with 193 additions and 189 deletions

View File

@ -63,6 +63,7 @@ Glitch list!
LeagueMan:
Raster effects don't work properly (not even cpu time per line?).
Reference : https://youtu.be/K8mvKXnvgXc?t=53s
(0.141 update: at least following two seems fixed from a lot of time ... -AS)
Perfect Soldiers:
@ -208,6 +209,7 @@ psoldier dip locations still need verification.
#include "cpu/nec/v25.h"
#include "machine/gen_latch.h"
#include "machine/irem_cpu.h"
#include "machine/nvram.h"
#include "sound/ym2151.h"
#include "sound/iremga20.h"
#include "speaker.h"
@ -223,7 +225,7 @@ MACHINE_RESET_MEMBER(m92_state,m92)
/*****************************************************************************/
TIMER_DEVICE_CALLBACK_MEMBER(m92_state::m92_scanline_interrupt)
TIMER_DEVICE_CALLBACK_MEMBER(m92_state::scanline_interrupt)
{
int scanline = param;
@ -253,41 +255,33 @@ TIMER_DEVICE_CALLBACK_MEMBER(m92_state::m92_scanline_interrupt)
/*****************************************************************************/
READ16_MEMBER(m92_state::m92_eeprom_r)
READ16_MEMBER(m92_state::eeprom_r)
{
uint8_t *RAM = memregion("eeprom")->base();
// logerror("%05x: EEPROM RE %04x\n",m_maincpu->pc(),offset);
return RAM[offset] | 0xff00;
return m_eeprom[offset] | 0xff00;
}
WRITE16_MEMBER(m92_state::m92_eeprom_w)
WRITE16_MEMBER(m92_state::eeprom_w)
{
uint8_t *RAM = memregion("eeprom")->base();
// logerror("%05x: EEPROM WR %04x\n",m_maincpu->pc(),offset);
if (ACCESSING_BITS_0_7)
RAM[offset] = data;
m_eeprom[offset] = data;
}
WRITE16_MEMBER(m92_state::m92_coincounter_w)
WRITE8_MEMBER(m92_state::coincounter_w)
{
if (ACCESSING_BITS_0_7)
{
machine().bookkeeping().coin_counter_w(0, data & 0x01);
machine().bookkeeping().coin_counter_w(1, data & 0x02);
/* Bit 0x8 is Motor(?!), used in Hook, In The Hunt, UCops */
/* Bit 0x8 is Memcard related in RTypeLeo */
/* Bit 0x40 set in Blade Master test mode input check */
}
machine().bookkeeping().coin_counter_w(0, data & 0x01);
machine().bookkeeping().coin_counter_w(1, data & 0x02);
/* Bit 0x8 is Motor(?!), used in Hook, In The Hunt, UCops */
/* Bit 0x8 is Memcard related in RTypeLeo */
/* Bit 0x40 set in Blade Master test mode input check */
}
WRITE16_MEMBER(m92_state::m92_bankswitch_w)
WRITE8_MEMBER(m92_state::bankswitch_w)
{
if (ACCESSING_BITS_0_7)
{
membank("bank1")->set_entry((data & 0x06) >> 1);
if (data & 0xf9)
logerror("%05x: bankswitch %04x\n", m_maincpu->pc(), data);
}
m_mainbank->set_entry((data & 0x06) >> 1);
if (data & 0xf9)
logerror("%05x: bankswitch %04x\n", m_maincpu->pc(), data);
}
CUSTOM_INPUT_MEMBER(m92_state::m92_sprite_busy_r)
@ -295,9 +289,17 @@ CUSTOM_INPUT_MEMBER(m92_state::m92_sprite_busy_r)
return m_sprite_buffer_busy;
}
template<int Layer>
WRITE16_MEMBER(m92_state::pf_control_w)
{
//Fix for nbbm stage start screen
//m_screen->update_partial(m_screen->vpos());
COMBINE_DATA(&m_pf_layer[Layer].control[offset]);
}
/*****************************************************************************/
WRITE16_MEMBER(m92_state::m92_sound_reset_w)
WRITE16_MEMBER(m92_state::sound_reset_w)
{
if (m_soundcpu)
m_soundcpu->set_input_line(INPUT_LINE_RESET, (data) ? CLEAR_LINE : ASSERT_LINE);
@ -305,48 +307,69 @@ WRITE16_MEMBER(m92_state::m92_sound_reset_w)
/*****************************************************************************/
void m92_state::m92_base_map(address_map &map)
{
map(0xe0000, 0xeffff).ram(); /* System ram */
map(0xf8000, 0xf87ff).ram().share("spriteram");
map(0xf8800, 0xf8fff).rw(FUNC(m92_state::paletteram_r), FUNC(m92_state::paletteram_w));
map(0xf9000, 0xf900f).w(FUNC(m92_state::spritecontrol_w)).share("spritecontrol");
map(0xf9800, 0xf9801).w(FUNC(m92_state::videocontrol_w));
map(0xffff0, 0xfffff).rom().region("maincpu", 0x7fff0);
}
/* appears to be an earlier board */
void m92_state::lethalth_map(address_map &map)
{
m92_base_map(map);
map(0x00000, 0x7ffff).rom();
map(0x80000, 0x8ffff).ram().w(FUNC(m92_state::m92_vram_w)).share("vram_data");
map(0xe0000, 0xeffff).ram(); /* System ram */
map(0xf8000, 0xf87ff).ram().share("spriteram");
map(0xf8800, 0xf8fff).rw(FUNC(m92_state::m92_paletteram_r), FUNC(m92_state::m92_paletteram_w));
map(0xf9000, 0xf900f).w(FUNC(m92_state::m92_spritecontrol_w)).share("spritecontrol");
map(0xf9800, 0xf9801).w(FUNC(m92_state::m92_videocontrol_w));
map(0xffff0, 0xfffff).rom().region("maincpu", 0x7fff0);
map(0x80000, 0x8ffff).ram().w(FUNC(m92_state::vram_w)).share("vram_data");
}
void m92_state::m92_map(address_map &map)
{
map(0x00000, 0x9ffff).rom();
map(0xa0000, 0xbffff).bankr("bank1");
m92_base_map(map);
map(0x00000, 0xbffff).rom();
map(0xc0000, 0xcffff).rom().region("maincpu", 0x00000); /* Mirror used by In The Hunt as protection */
map(0xd0000, 0xdffff).ram().w(FUNC(m92_state::m92_vram_w)).share("vram_data");
map(0xe0000, 0xeffff).ram(); /* System ram */
map(0xf8000, 0xf87ff).ram().share("spriteram");
map(0xf8800, 0xf8fff).rw(FUNC(m92_state::m92_paletteram_r), FUNC(m92_state::m92_paletteram_w));
map(0xf9000, 0xf900f).w(FUNC(m92_state::m92_spritecontrol_w)).share("spritecontrol");
map(0xf9800, 0xf9801).w(FUNC(m92_state::m92_videocontrol_w));
map(0xffff0, 0xfffff).rom().region("maincpu", 0x7fff0);
map(0xd0000, 0xdffff).ram().w(FUNC(m92_state::vram_w)).share("vram_data");
}
void m92_state::m92_banked_map(address_map &map)
{
m92_base_map(map);
map(0x00000, 0x9ffff).rom();
map(0xa0000, 0xbffff).bankr("mainbank");
map(0xc0000, 0xcffff).rom().region("maincpu", 0x00000); /* Mirror used by In The Hunt as protection */
map(0xd0000, 0xdffff).ram().w(FUNC(m92_state::vram_w)).share("vram_data");
}
/* This game has an eeprom on the game board */
void m92_state::majtitl2_map(address_map &map)
{
m92_banked_map(map);
map(0xf0000, 0xf3fff).rw(FUNC(m92_state::eeprom_r), FUNC(m92_state::eeprom_w)).share("eeprom");
}
void m92_state::m92_portmap(address_map &map)
{
map(0x00, 0x00).w("soundlatch", FUNC(generic_latch_8_device::write));
map(0x00, 0x01).portr("P1_P2");
map(0x02, 0x03).portr("COINS_DSW3");
map(0x02, 0x02).w(FUNC(m92_state::coincounter_w));
map(0x04, 0x05).portr("DSW");
map(0x06, 0x07).portr("P3_P4");
map(0x08, 0x08).r("soundlatch2", FUNC(generic_latch_8_device::read)); // answer from sound CPU
map(0x00, 0x00).w("soundlatch", FUNC(generic_latch_8_device::write));
map(0x02, 0x03).w(FUNC(m92_state::m92_coincounter_w));
map(0x40, 0x43).rw(m_upd71059c, FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff);
map(0x80, 0x87).w(FUNC(m92_state::m92_pf1_control_w));
map(0x88, 0x8f).w(FUNC(m92_state::m92_pf2_control_w));
map(0x90, 0x97).w(FUNC(m92_state::m92_pf3_control_w));
map(0x98, 0x9f).w(FUNC(m92_state::m92_master_control_w));
map(0xc0, 0xc1).w(FUNC(m92_state::m92_sound_reset_w));
map(0x80, 0x87).w(FUNC(m92_state::pf_control_w<0>));
map(0x88, 0x8f).w(FUNC(m92_state::pf_control_w<1>));
map(0x90, 0x97).w(FUNC(m92_state::pf_control_w<2>));
map(0x98, 0x9f).w(FUNC(m92_state::master_control_w));
map(0xc0, 0xc1).w(FUNC(m92_state::sound_reset_w));
}
void m92_state::m92_banked_portmap(address_map &map)
{
m92_portmap(map);
map(0x20, 0x20).w(FUNC(m92_state::bankswitch_w));
}
WRITE16_MEMBER(m92_state::oki_bank_w)
@ -358,16 +381,16 @@ void m92_state::ppan_portmap(address_map &map)
{
map(0x00, 0x01).portr("P1_P2");
map(0x02, 0x03).portr("COINS_DSW3");
map(0x02, 0x02).w(FUNC(m92_state::coincounter_w));
map(0x04, 0x05).portr("DSW");
map(0x06, 0x07).portr("P3_P4");
map(0x10, 0x11).w(FUNC(m92_state::oki_bank_w));
map(0x18, 0x18).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x02, 0x03).w(FUNC(m92_state::m92_coincounter_w));
map(0x40, 0x43).rw(m_upd71059c, FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff);
map(0x80, 0x87).w(FUNC(m92_state::m92_pf1_control_w));
map(0x88, 0x8f).w(FUNC(m92_state::m92_pf2_control_w));
map(0x90, 0x97).w(FUNC(m92_state::m92_pf3_control_w));
map(0x98, 0x9f).w(FUNC(m92_state::m92_master_control_w));
map(0x80, 0x87).w(FUNC(m92_state::pf_control_w<0>));
map(0x88, 0x8f).w(FUNC(m92_state::pf_control_w<1>));
map(0x90, 0x97).w(FUNC(m92_state::pf_control_w<2>));
map(0x98, 0x9f).w(FUNC(m92_state::master_control_w));
}
@ -907,7 +930,7 @@ MACHINE_CONFIG_START(m92_state::m92)
MCFG_MACHINE_RESET_OVERRIDE(m92_state,m92)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", m92_state, m92_scanline_interrupt, "screen", 0, 1)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", m92_state, scanline_interrupt, "screen", 0, 1)
/* video hardware */
MCFG_DEVICE_ADD("spriteram", BUFFERED_SPRITERAM16)
@ -946,6 +969,13 @@ MACHINE_CONFIG_START(m92_state::m92)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(m92_state::m92_banked)
m92(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(m92_banked_map)
MCFG_DEVICE_IO_MAP(m92_banked_portmap)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(m92_state::gunforce)
m92(config);
MCFG_DEVICE_MODIFY("soundcpu")
@ -979,11 +1009,21 @@ MACHINE_CONFIG_START(m92_state::mysticri)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(m92_state::majtitl2)
m92(config);
m92_banked(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(majtitl2_map)
MCFG_NVRAM_ADD_0FILL("eeprom")
MCFG_DEVICE_MODIFY("soundcpu")
MCFG_V25_CONFIG(majtitl2_decryption_table)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(m92_state::majtitl2a)
majtitl2(config);
MCFG_DEVICE_MODIFY("soundcpu")
MCFG_V25_CONFIG(mysticri_decryption_table)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(m92_state::hook)
m92(config);
MCFG_DEVICE_MODIFY("soundcpu")
@ -1025,13 +1065,13 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(m92_state::nbbatman)
m92(config);
m92_banked(config);
MCFG_DEVICE_MODIFY("soundcpu")
MCFG_V25_CONFIG(leagueman_decryption_table)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(m92_state::nbbatman2bl)
m92(config);
m92_banked(config);
MCFG_DEVICE_REMOVE("soundcpu")
MCFG_DEVICE_REMOVE("ymsnd")
MCFG_DEVICE_REMOVE("irem")
@ -1054,7 +1094,7 @@ MACHINE_CONFIG_START(m92_state::psoldier)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(m92_state::dsoccr94j)
m92(config);
m92_banked(config);
MCFG_DEVICE_MODIFY("soundcpu")
MCFG_V25_CONFIG(dsoccr94_decryption_table)
/* video hardware */
@ -1062,7 +1102,7 @@ MACHINE_CONFIG_START(m92_state::dsoccr94j)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(m92_state::gunforc2)
m92(config);
m92_banked(config);
MCFG_DEVICE_MODIFY("soundcpu")
MCFG_V25_CONFIG(lethalth_decryption_table)
MACHINE_CONFIG_END
@ -1135,7 +1175,7 @@ ROM_START( skingame )
ROM_LOAD16_BYTE( "mt2-sl0-.ic17", 0x00000, 0x10000, CRC(8fd5b531) SHA1(92cae3f6dac7f89b559063de3be2f38587536b65) )
ROM_REGION( 0x100000, "gfx1", 0 ) /* Tiles */
ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) )
ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) )
ROM_LOAD( "hr1.ic10", 0x040000, 0x40000, CRC(0a667564) SHA1(d122e0619ae5cc0202f30270933784c954eb1e5d) )
ROM_LOAD( "hr2.ic11", 0x080000, 0x40000, CRC(5eb44312) SHA1(75b584b63d4f4f2236a679235461f11004aa317f) )
ROM_LOAD( "hr3.ic12", 0x0c0000, 0x40000, CRC(f2866294) SHA1(75e0071bf6282c93034dc7e73466af0f51046d01) )
@ -1172,7 +1212,7 @@ ROM_START( majtitl2 )
ROM_LOAD16_BYTE( "mt2-sl0-.ic17", 0x00000, 0x10000, CRC(8fd5b531) SHA1(92cae3f6dac7f89b559063de3be2f38587536b65) )
ROM_REGION( 0x100000, "gfx1", 0 ) /* Tiles */
ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) )
ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) )
ROM_LOAD( "hr1.ic10", 0x040000, 0x40000, CRC(0a667564) SHA1(d122e0619ae5cc0202f30270933784c954eb1e5d) )
ROM_LOAD( "hr2.ic11", 0x080000, 0x40000, CRC(5eb44312) SHA1(75b584b63d4f4f2236a679235461f11004aa317f) )
ROM_LOAD( "hr3.ic12", 0x0c0000, 0x40000, CRC(f2866294) SHA1(75e0071bf6282c93034dc7e73466af0f51046d01) )
@ -1210,7 +1250,7 @@ ROM_START( majtitl2b )
ROM_LOAD16_BYTE( "mt2-sl0-.ic17", 0x00000, 0x10000, CRC(8fd5b531) SHA1(92cae3f6dac7f89b559063de3be2f38587536b65) )
ROM_REGION( 0x100000, "gfx1", 0 ) /* Tiles */
ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) )
ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) )
ROM_LOAD( "hr1.ic10", 0x040000, 0x40000, CRC(0a667564) SHA1(d122e0619ae5cc0202f30270933784c954eb1e5d) )
ROM_LOAD( "hr2.ic11", 0x080000, 0x40000, CRC(5eb44312) SHA1(75b584b63d4f4f2236a679235461f11004aa317f) )
ROM_LOAD( "hr3.ic12", 0x0c0000, 0x40000, CRC(f2866294) SHA1(75e0071bf6282c93034dc7e73466af0f51046d01) )
@ -1249,7 +1289,7 @@ ROM_START( majtitl2a )
ROM_LOAD16_BYTE( "mt2sl0-a", 0x00000, 0x10000, CRC(f4ecd7b5) SHA1(250afed334d37b0309f4733b41ba03319b51360f))
ROM_REGION( 0x100000, "gfx1", 0 ) /* Tiles */
ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) )
ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) )
ROM_LOAD( "hr1.ic10", 0x040000, 0x40000, CRC(0a667564) SHA1(d122e0619ae5cc0202f30270933784c954eb1e5d) )
ROM_LOAD( "hr2.ic11", 0x080000, 0x40000, CRC(5eb44312) SHA1(75b584b63d4f4f2236a679235461f11004aa317f) )
ROM_LOAD( "hr3.ic12", 0x0c0000, 0x40000, CRC(f2866294) SHA1(75e0071bf6282c93034dc7e73466af0f51046d01) )
@ -1286,7 +1326,7 @@ ROM_START( majtitl2j )
ROM_LOAD16_BYTE( "mt2-sl0-.ic17", 0x00000, 0x10000, CRC(8fd5b531) SHA1(92cae3f6dac7f89b559063de3be2f38587536b65) )
ROM_REGION( 0x100000, "gfx1", 0 ) /* Tiles */
ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) )
ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) )
ROM_LOAD( "hr1.ic10", 0x040000, 0x40000, CRC(0a667564) SHA1(d122e0619ae5cc0202f30270933784c954eb1e5d) )
ROM_LOAD( "hr2.ic11", 0x080000, 0x40000, CRC(5eb44312) SHA1(75b584b63d4f4f2236a679235461f11004aa317f) )
ROM_LOAD( "hr3.ic12", 0x0c0000, 0x40000, CRC(f2866294) SHA1(75e0071bf6282c93034dc7e73466af0f51046d01) )
@ -1323,7 +1363,7 @@ ROM_START( skingame2 )
ROM_LOAD16_BYTE( "mt2-sl0-.ic17", 0x00000, 0x10000, CRC(8fd5b531) SHA1(92cae3f6dac7f89b559063de3be2f38587536b65) )
ROM_REGION( 0x100000, "gfx1", 0 ) /* Tiles */
ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) )
ROM_LOAD( "hr0.ic9", 0x000000, 0x40000, CRC(7e61e4b5) SHA1(d0164862937bd506e701777c51dea1ddb3e2eda4) )
ROM_LOAD( "hr1.ic10", 0x040000, 0x40000, CRC(0a667564) SHA1(d122e0619ae5cc0202f30270933784c954eb1e5d) )
ROM_LOAD( "hr2.ic11", 0x080000, 0x40000, CRC(5eb44312) SHA1(75b584b63d4f4f2236a679235461f11004aa317f) )
ROM_LOAD( "hr3.ic12", 0x0c0000, 0x40000, CRC(f2866294) SHA1(75e0071bf6282c93034dc7e73466af0f51046d01) )
@ -2187,97 +2227,72 @@ ROM_END
/***************************************************************************/
void m92_state::init_m92()
{
uint8_t *ROM = memregion("maincpu")->base();
membank("bank1")->set_base(&ROM[0xa0000]);
}
/* different address map (no bank1) */
void m92_state::init_lethalth()
{
}
/* has bankswitching */
void m92_state::init_m92_bank()
void m92_state::init_bank()
{
uint8_t *ROM = memregion("maincpu")->base();
membank("bank1")->configure_entries(0, 4, &ROM[0x80000], 0x20000);
m_maincpu->space(AS_IO).install_write_handler(0x20, 0x21, write16_delegate(FUNC(m92_state::m92_bankswitch_w),this));
}
/* has bankswitching, has eeprom, needs sprite kludge */
void m92_state::init_majtitl2()
{
uint8_t *ROM = memregion("maincpu")->base();
membank("bank1")->configure_entries(0, 4, &ROM[0x80000], 0x20000);
m_maincpu->space(AS_IO).install_write_handler(0x20, 0x21, write16_delegate(FUNC(m92_state::m92_bankswitch_w),this));
/* This game has an eeprom on the game board */
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf0000, 0xf3fff, read16_delegate(FUNC(m92_state::m92_eeprom_r),this), write16_delegate(FUNC(m92_state::m92_eeprom_w),this));
m_mainbank->configure_entries(0, 4, &ROM[0x80000], 0x20000);
}
/* TODO: figure out actual address map and other differences from real Irem h/w */
/*
void m92_state::init_ppan()
{
uint8_t *ROM = memregion("maincpu")->base();
membank("bank1")->set_base(&ROM[0xa0000]);
}
*/
/***************************************************************************/
GAME( 1991, gunforce, 0, gunforce, gunforce, m92_state, init_m92, ROT0, "Irem", "Gunforce - Battle Fire Engulfed Terror Island (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1991, gunforcej,gunforce, gunforce, gunforce, m92_state, init_m92, ROT0, "Irem", "Gunforce - Battle Fire Engulfed Terror Island (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1991, gunforceu,gunforce, gunforce, gunforce, m92_state, init_m92, ROT0, "Irem America", "Gunforce - Battle Fire Engulfed Terror Island (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1991, gunforce, 0, gunforce, gunforce, m92_state, empty_init, ROT0, "Irem", "Gunforce - Battle Fire Engulfed Terror Island (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1991, gunforcej,gunforce, gunforce, gunforce, m92_state, empty_init, ROT0, "Irem", "Gunforce - Battle Fire Engulfed Terror Island (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1991, gunforceu,gunforce, gunforce, gunforce, m92_state, empty_init, ROT0, "Irem America", "Gunforce - Battle Fire Engulfed Terror Island (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1991, bmaster, 0, bmaster, bmaster, m92_state, init_m92, ROT0, "Irem", "Blade Master (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1991, crossbld, bmaster, bmaster, bmaster, m92_state, init_m92, ROT0, "Irem", "Cross Blades! (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1991, bmaster, 0, bmaster, bmaster, m92_state, empty_init, ROT0, "Irem", "Blade Master (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1991, crossbld, bmaster, bmaster, bmaster, m92_state, empty_init, ROT0, "Irem", "Cross Blades! (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1991, lethalth, 0, lethalth, lethalth, m92_state, init_lethalth, ROT270, "Irem", "Lethal Thunder (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1991, thndblst, lethalth, lethalth, thndblst, m92_state, init_lethalth, ROT270, "Irem", "Thunder Blaster (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1991, lethalth, 0, lethalth, lethalth, m92_state, empty_init, ROT270, "Irem", "Lethal Thunder (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1991, thndblst, lethalth, lethalth, thndblst, m92_state, empty_init, ROT270, "Irem", "Thunder Blaster (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1992, uccops, 0, uccops, uccops, m92_state, init_m92, ROT0, "Irem", "Undercover Cops (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1992, uccopsu, uccops, uccops, uccops, m92_state, init_m92, ROT0, "Irem", "Undercover Cops (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1992, uccopsar, uccops, uccops, uccops, m92_state, init_m92, ROT0, "Irem", "Undercover Cops - Alpha Renewal Version", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1992, uccopsj, uccops, uccops, uccops, m92_state, init_m92, ROT0, "Irem", "Undercover Cops (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1992, uccops, 0, uccops, uccops, m92_state, empty_init, ROT0, "Irem", "Undercover Cops (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1992, uccopsu, uccops, uccops, uccops, m92_state, empty_init, ROT0, "Irem", "Undercover Cops (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1992, uccopsar, uccops, uccops, uccops, m92_state, empty_init, ROT0, "Irem", "Undercover Cops - Alpha Renewal Version", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1992, uccopsj, uccops, uccops, uccops, m92_state, empty_init, ROT0, "Irem", "Undercover Cops (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1992, mysticri, 0, mysticri, mysticri, m92_state, init_m92, ROT0, "Irem", "Mystic Riders (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1992, gunhohki, mysticri, mysticri, mysticri, m92_state, init_m92, ROT0, "Irem", "Mahou Keibitai Gun Hohki (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1992, mysticri, 0, mysticri, mysticri, m92_state, empty_init, ROT0, "Irem", "Mystic Riders (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1992, gunhohki, mysticri, mysticri, mysticri, m92_state, empty_init, ROT0, "Irem", "Mahou Keibitai Gun Hohki (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
// cheaply produced Korean board, has original chips, but lacks any proper labels
// main code is also significantly different to the supported original set, so it might just be a legitimate early revision on a cheap board
GAME( 1992, mysticrib,mysticri, mysticri, mysticri, m92_state, init_m92, ROT0, "Irem", "Mystic Riders (bootleg?)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1992, mysticrib,mysticri, mysticri, mysticri, m92_state, empty_init, ROT0, "Irem", "Mystic Riders (bootleg?)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1992, majtitl2, 0, majtitl2, majtitl2, m92_state, init_majtitl2, ROT0, "Irem", "Major Title 2 (World, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) // Nanao 08J27291A7 017 9227NK700 sound CPU
GAME( 1992, majtitl2a,majtitl2, mysticri, majtitl2, m92_state, init_majtitl2, ROT0, "Irem", "Major Title 2 (World, set 1, alt sound CPU)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) // same as set 1 but for the Nanao 08J27291A6 016 9217NK700 sound CPU
GAME( 1992, majtitl2b,majtitl2, majtitl2, majtitl2, m92_state, init_majtitl2, ROT0, "Irem", "Major Title 2 (World, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1992, majtitl2j,majtitl2, majtitl2, majtitl2, m92_state, init_majtitl2, ROT0, "Irem", "Major Title 2 (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1992, skingame, majtitl2, majtitl2, majtitl2, m92_state, init_majtitl2, ROT0, "Irem America", "The Irem Skins Game (US set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1992, skingame2,majtitl2, majtitl2, majtitl2, m92_state, init_majtitl2, ROT0, "Irem America", "The Irem Skins Game (US set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1992, majtitl2, 0, majtitl2, majtitl2, m92_state, init_bank, ROT0, "Irem", "Major Title 2 (World, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) // Nanao 08J27291A7 017 9227NK700 sound CPU
GAME( 1992, majtitl2a,majtitl2, majtitl2a, majtitl2, m92_state, init_bank, ROT0, "Irem", "Major Title 2 (World, set 1, alt sound CPU)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL) // same as set 1 but for the Nanao 08J27291A6 016 9217NK700 sound CPU
GAME( 1992, majtitl2b,majtitl2, majtitl2, majtitl2, m92_state, init_bank, ROT0, "Irem", "Major Title 2 (World, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1992, majtitl2j,majtitl2, majtitl2, majtitl2, m92_state, init_bank, ROT0, "Irem", "Major Title 2 (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1992, skingame, majtitl2, majtitl2, majtitl2, m92_state, init_bank, ROT0, "Irem America", "The Irem Skins Game (US set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1992, skingame2,majtitl2, majtitl2, majtitl2, m92_state, init_bank, ROT0, "Irem America", "The Irem Skins Game (US set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1992, hook, 0, hook, hook, m92_state, init_m92, ROT0, "Irem", "Hook (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1992, hooku, hook, hook, hook, m92_state, init_m92, ROT0, "Irem America", "Hook (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1992, hookj, hook, hook, hook, m92_state, init_m92, ROT0, "Irem", "Hook (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1992, ppan, hook, ppan, hook, m92_state, init_ppan, ROT0, "bootleg", "Peter Pan (bootleg of Hook)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL) // PCB marked 'Peter Pan', no title screen, made in Italy?
GAME( 1992, hook, 0, hook, hook, m92_state, empty_init, ROT0, "Irem", "Hook (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1992, hooku, hook, hook, hook, m92_state, empty_init, ROT0, "Irem America", "Hook (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1992, hookj, hook, hook, hook, m92_state, empty_init, ROT0, "Irem", "Hook (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1992, ppan, hook, ppan, hook, m92_state, empty_init, ROT0, "bootleg", "Peter Pan (bootleg of Hook)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL) // PCB marked 'Peter Pan', no title screen, made in Italy?
GAME( 1992, rtypeleo, 0, rtypeleo, rtypeleo, m92_state, init_m92, ROT0, "Irem", "R-Type Leo (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1992, rtypeleoj,rtypeleo, rtypeleo, rtypeleo, m92_state, init_m92, ROT0, "Irem", "R-Type Leo (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1992, rtypeleo, 0, rtypeleo, rtypeleo, m92_state, empty_init, ROT0, "Irem", "R-Type Leo (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1992, rtypeleoj,rtypeleo, rtypeleo, rtypeleo, m92_state, empty_init, ROT0, "Irem", "R-Type Leo (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1993, inthunt, 0, inthunt, inthunt, m92_state, init_m92, ROT0, "Irem", "In The Hunt (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1993, inthuntu, inthunt, inthunt, inthunt, m92_state, init_m92, ROT0, "Irem America", "In The Hunt (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1993, kaiteids, inthunt, inthunt, inthunt, m92_state, init_m92, ROT0, "Irem", "Kaitei Daisensou (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1993, inthunt, 0, inthunt, inthunt, m92_state, empty_init, ROT0, "Irem", "In The Hunt (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1993, inthuntu, inthunt, inthunt, inthunt, m92_state, empty_init, ROT0, "Irem America", "In The Hunt (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1993, kaiteids, inthunt, inthunt, inthunt, m92_state, empty_init, ROT0, "Irem", "Kaitei Daisensou (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1993, nbbatman, 0, nbbatman, nbbatman, m92_state, init_m92_bank, ROT0, "Irem", "Ninja Baseball Bat Man (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL )
GAME( 1993, nbbatmanu,nbbatman, nbbatman, nbbatman, m92_state, init_m92_bank, ROT0, "Irem America", "Ninja Baseball Bat Man (US)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL)
GAME( 1993, leaguemn, nbbatman, nbbatman, nbbatman, m92_state, init_m92_bank, ROT0, "Irem", "Yakyuu Kakutou League-Man (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL )
GAME( 1993, nbbatman2bl,nbbatman,nbbatman2bl, nbbatman, m92_state, init_m92_bank, ROT0, "bootleg", "Ninja Baseball Bat Man II (bootleg)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL ) // different sprite system, MCU as soundcpu, OKI samples for music/sound
GAME( 1993, nbbatman, 0, nbbatman, nbbatman, m92_state, init_bank, ROT0, "Irem", "Ninja Baseball Bat Man (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL )
GAME( 1993, nbbatmanu,nbbatman, nbbatman, nbbatman, m92_state, init_bank, ROT0, "Irem America", "Ninja Baseball Bat Man (US)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL)
GAME( 1993, leaguemn, nbbatman, nbbatman, nbbatman, m92_state, init_bank, ROT0, "Irem", "Yakyuu Kakutou League-Man (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL )
GAME( 1993, nbbatman2bl,nbbatman,nbbatman2bl, nbbatman, m92_state, init_bank, ROT0, "bootleg", "Ninja Baseball Bat Man II (bootleg)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL ) // different sprite system, MCU as soundcpu, OKI samples for music/sound
GAME( 1993, ssoldier, 0, psoldier, psoldier, m92_state, init_m92, ROT0, "Irem America", "Superior Soldiers (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1993, psoldier, ssoldier, psoldier, psoldier, m92_state, init_m92, ROT0, "Irem", "Perfect Soldiers (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1993, ssoldier, 0, psoldier, psoldier, m92_state, empty_init, ROT0, "Irem America", "Superior Soldiers (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1993, psoldier, ssoldier, psoldier, psoldier, m92_state, empty_init, ROT0, "Irem", "Perfect Soldiers (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1994, dsoccr94j,dsoccr94, dsoccr94j, dsoccr94j, m92_state, init_m92_bank, ROT0, "Irem", "Dream Soccer '94 (Japan, M92 hardware)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1994, dsoccr94j,dsoccr94, dsoccr94j, dsoccr94j, m92_state, init_bank, ROT0, "Irem", "Dream Soccer '94 (Japan, M92 hardware)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1994, gunforc2, 0, gunforc2, gunforc2, m92_state, init_m92_bank, ROT0, "Irem", "Gun Force II (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1994, geostorm, gunforc2, gunforc2, gunforc2, m92_state, init_m92_bank, ROT0, "Irem", "Geo Storm (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL)
GAME( 1994, gunforc2, 0, gunforc2, gunforc2, m92_state, init_bank, ROT0, "Irem", "Gun Force II (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1994, geostorm, gunforc2, gunforc2, gunforc2, m92_state, init_bank, ROT0, "Irem", "Geo Storm (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )

View File

@ -29,19 +29,20 @@ public:
TIMER_SPRITEBUFFER
};
m92_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_spriteram(*this, "spriteram"),
m_vram_data(*this, "vram_data"),
m_spritecontrol(*this, "spritecontrol"),
m_maincpu(*this, "maincpu"),
m_soundcpu(*this, "soundcpu"),
m_oki(*this, "oki"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_upd71059c(*this, "upd71059c")
{ }
m92_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_spriteram(*this, "spriteram"),
m_vram_data(*this, "vram_data"),
m_spritecontrol(*this, "spritecontrol"),
m_maincpu(*this, "maincpu"),
m_soundcpu(*this, "soundcpu"),
m_oki(*this, "oki"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_upd71059c(*this, "upd71059c"),
m_eeprom(*this, "eeprom", 16),
m_mainbank(*this, "mainbank") { }
required_device<buffered_spriteram16_device> m_spriteram;
required_shared_ptr<uint16_t> m_vram_data;
@ -54,6 +55,9 @@ public:
required_device<palette_device> m_palette;
required_device<pic8259_device> m_upd71059c;
optional_shared_ptr<uint8_t> m_eeprom;
optional_memory_bank m_mainbank;
emu_timer *m_spritebuffer_timer;
uint32_t m_raster_irq_position;
uint16_t m_videocontrol;
@ -64,40 +68,35 @@ public:
uint8_t m_palette_bank;
std::vector<uint16_t> m_paletteram;
DECLARE_READ16_MEMBER(m92_eeprom_r);
DECLARE_WRITE16_MEMBER(m92_eeprom_w);
DECLARE_WRITE16_MEMBER(m92_coincounter_w);
DECLARE_WRITE16_MEMBER(m92_bankswitch_w);
DECLARE_WRITE16_MEMBER(m92_sound_reset_w);
DECLARE_WRITE16_MEMBER(m92_spritecontrol_w);
DECLARE_WRITE16_MEMBER(m92_videocontrol_w);
DECLARE_READ16_MEMBER(m92_paletteram_r);
DECLARE_WRITE16_MEMBER(m92_paletteram_w);
DECLARE_WRITE16_MEMBER(m92_vram_w);
DECLARE_WRITE16_MEMBER(m92_pf1_control_w);
DECLARE_WRITE16_MEMBER(m92_pf2_control_w);
DECLARE_WRITE16_MEMBER(m92_pf3_control_w);
DECLARE_WRITE16_MEMBER(m92_master_control_w);
DECLARE_READ16_MEMBER(eeprom_r);
DECLARE_WRITE16_MEMBER(eeprom_w);
DECLARE_WRITE8_MEMBER(coincounter_w);
DECLARE_WRITE8_MEMBER(bankswitch_w);
DECLARE_WRITE16_MEMBER(sound_reset_w);
DECLARE_WRITE16_MEMBER(spritecontrol_w);
DECLARE_WRITE16_MEMBER(videocontrol_w);
DECLARE_READ16_MEMBER(paletteram_r);
DECLARE_WRITE16_MEMBER(paletteram_w);
DECLARE_WRITE16_MEMBER(vram_w);
template<int Layer> DECLARE_WRITE16_MEMBER(pf_control_w);
DECLARE_WRITE16_MEMBER(master_control_w);
DECLARE_CUSTOM_INPUT_MEMBER(m92_sprite_busy_r);
DECLARE_WRITE16_MEMBER(oki_bank_w);
void init_majtitl2();
void init_ppan();
void init_lethalth();
void init_m92();
void init_m92_bank();
void init_bank();
TILE_GET_INFO_MEMBER(get_pf_tile_info);
DECLARE_MACHINE_RESET(m92);
DECLARE_VIDEO_START(m92);
DECLARE_VIDEO_START(ppan);
uint32_t screen_update_m92(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_ppan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(m92_scanline_interrupt);
TIMER_DEVICE_CALLBACK_MEMBER(scanline_interrupt);
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void ppan_draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void m92_update_scroll_positions();
void m92_draw_tiles(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect);
void m92(machine_config &config);
void m92_banked(machine_config &config);
void inthunt(machine_config &config);
void lethalth(machine_config &config);
void ppan(machine_config &config);
@ -112,10 +111,15 @@ public:
void dsoccr94j(machine_config &config);
void gunforce(machine_config &config);
void majtitl2(machine_config &config);
void majtitl2a(machine_config &config);
void mysticri(machine_config &config);
void lethalth_map(address_map &map);
void m92_map(address_map &map);
void m92_banked_map(address_map &map);
void m92_banked_portmap(address_map &map);
void m92_base_map(address_map &map);
void m92_portmap(address_map &map);
void majtitl2_map(address_map &map);
void ppan_portmap(address_map &map);
void sound_map(address_map &map);
protected:

View File

@ -60,7 +60,7 @@ void m92_state::device_timer(emu_timer &timer, device_timer_id id, int param, vo
}
WRITE16_MEMBER(m92_state::m92_spritecontrol_w)
WRITE16_MEMBER(m92_state::spritecontrol_w)
{
COMBINE_DATA(&m_spritecontrol[offset]);
// offset0: sprite list size (negative)
@ -93,10 +93,10 @@ WRITE16_MEMBER(m92_state::m92_spritecontrol_w)
spriteram to the buffer. It seems safe to assume 1 word can be copied per clock. */
m_spritebuffer_timer->adjust(attotime::from_hz(XTAL(26'666'666)) * 0x400);
}
// logerror("%s: m92_spritecontrol_w %08x %08x\n",m_maincpu->pc(),offset,data);
// logerror("%s: spritecontrol_w %08x %08x\n",m_maincpu->pc(),offset,data);
}
WRITE16_MEMBER(m92_state::m92_videocontrol_w)
WRITE16_MEMBER(m92_state::videocontrol_w)
{
COMBINE_DATA(&m_videocontrol);
/*
@ -130,17 +130,17 @@ WRITE16_MEMBER(m92_state::m92_videocontrol_w)
/* Access to upper palette bank */
m_palette_bank = (m_videocontrol >> 1) & 1;
// logerror("%s: m92_videocontrol_w %d = %02x\n",m_maincpu->pc(),offset,data);
// logerror("%s: videocontrol_w %d = %02x\n",m_maincpu->pc(),offset,data);
}
READ16_MEMBER(m92_state::m92_paletteram_r)
READ16_MEMBER(m92_state::paletteram_r)
{
return m_paletteram[offset + 0x400 * m_palette_bank];
return m_paletteram[offset | (m_palette_bank << 10)];
}
WRITE16_MEMBER(m92_state::m92_paletteram_w)
WRITE16_MEMBER(m92_state::paletteram_w)
{
m_palette->write16(space, offset + 0x400 * m_palette_bank, data, mem_mask);
m_palette->write16(space, offset | (m_palette_bank << 10), data, mem_mask);
}
/*****************************************************************************/
@ -165,7 +165,7 @@ TILE_GET_INFO_MEMBER(m92_state::get_pf_tile_info)
/*****************************************************************************/
WRITE16_MEMBER(m92_state::m92_vram_w)
WRITE16_MEMBER(m92_state::vram_w)
{
int laynum;
@ -185,22 +185,7 @@ WRITE16_MEMBER(m92_state::m92_vram_w)
/*****************************************************************************/
WRITE16_MEMBER(m92_state::m92_pf1_control_w)
{
COMBINE_DATA(&m_pf_layer[0].control[offset]);
}
WRITE16_MEMBER(m92_state::m92_pf2_control_w)
{
COMBINE_DATA(&m_pf_layer[1].control[offset]);
}
WRITE16_MEMBER(m92_state::m92_pf3_control_w)
{
COMBINE_DATA(&m_pf_layer[2].control[offset]);
}
WRITE16_MEMBER(m92_state::m92_master_control_w)
WRITE16_MEMBER(m92_state::master_control_w)
{
uint16_t old = m_pf_master_control[offset];
M92_pf_layer_info *layer;